arky-sdk 0.3.93 → 0.3.95

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/index.ts","../src/utils/errors.ts","../src/utils/queryParams.ts","../src/services/createHttpClient.ts","../src/api/user.ts","../src/api/business.ts","../src/api/media.ts","../src/api/role.ts","../src/api/notification.ts","../src/api/promoCode.ts","../src/api/analytics.ts","../src/utils/slug.ts","../src/utils/blocks.ts","../src/api/cms.ts","../src/api/eshop.ts","../src/api/reservation.ts","../src/api/database.ts","../src/api/featureFlags.ts","../src/api/location.ts","../src/utils/currency.ts","../src/utils/price.ts","../src/utils/validation.ts","../src/utils/timezone.ts","../src/utils/text.ts","../src/utils/svg.ts","../src/index.ts"],"names":["PaymentMethodType","url","locale"],"mappings":";AA8BO,IAAK,iBAAA,qBAAAA,kBAAAA,KAAL;AACN,EAAAA,mBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,mBAAA,YAAA,CAAA,GAAa,aAAA;AACb,EAAAA,mBAAA,MAAA,CAAA,GAAO,MAAA;AAHI,EAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;;;ACsGL,IAAM,gCAAA,GAAmC,CAC9C,WAAA,EACA,WAAA,KACiB;AACjB,EAAA,OAAO;AAAA,IACL,GAAG,WAAA;AAAA,IACH,gBAAA,EAAkB,WAAA,CAAY,gBAAA,CAAiB,GAAA,CAAI,CAAC,eAAA,KAAoB;AACtE,MAAA,MAAM,KAAA,GAGA,eAAA,CAAgB,KAAA;AAEtB,MAAA,OAAO;AAAA,QACL,KAAA;AAAA,QACA,KAAA,EAAO,gBAAgB,KAAA,IAAS;AAAA,OAClC;AAAA,IACF,CAAC;AAAA,GACH;AACF,CAAA;;;ACrIO,SAAS,iBAAiB,MAAA,EAA6B;AAC1D,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAE7C,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACvC,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,MAAA,UAAA,CAAW,KAAK,CAAA,EAAG,GAAG,IAAI,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D,CAAA,MAAA,IAES,OAAO,KAAA,KAAU,QAAA,EAAU;AAChC,MAAA,UAAA,CAAW,KAAK,CAAA,EAAG,GAAG,IAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACzD,WAES,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AAC9D,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,IACrC,CAAA,MAAA,IAES,OAAO,KAAA,KAAU,QAAA,EAAU;AAChC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,MAAA,UAAA,CAAW,KAAK,CAAA,EAAG,GAAG,IAAI,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,UAAA,CAAW,SAAS,CAAA,GAAI,CAAA,CAAA,EAAI,WAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AAChE;;;ACUO,SAAS,iBAAiB,GAAA,EAAuB;AACvD,EAAA,MAAM,eAAA,GAAkB,CAAA,EAAG,GAAA,CAAI,OAAO,CAAA,8BAAA,CAAA;AACtC,EAAA,IAAI,cAAA,GAAuC,IAAA;AAE3C,EAAA,eAAe,gBAAA,GAAmB;AACjC,IAAA,IAAI,cAAA,EAAgB;AACnB,MAAA,OAAO,cAAA;AAAA,IACR;AAEA,IAAA,cAAA,GAAA,CAAkB,YAAY;AAC7B,MAAA,MAAM,EAAE,YAAA,EAAc,QAAA,EAAS,GAAI,MAAM,IAAI,QAAA,EAAS;AACtD,MAAA,IAAI,CAAC,YAAA,EAAc;AAClB,QAAA,GAAA,CAAI,MAAA,EAAO;AACX,QAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,4BAA4B,CAAA;AACvD,QAAA,GAAA,CAAI,IAAA,GAAO,UAAA;AACX,QAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,QAAA,MAAM,GAAA;AAAA,MACP;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,QAC3C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,MAAA,EAAQ,kBAAA,EAAoB,gBAAgB,kBAAA,EAAmB;AAAA,QAC1E,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,cAAc;AAAA,OAC/C,CAAA;AAED,MAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACf,QAAA,GAAA,CAAI,MAAA,EAAO;AACX,QAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,sBAAsB,CAAA;AACjD,QAAA,GAAA,CAAI,IAAA,GAAO,UAAA;AACX,QAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,QAAA,MAAM,GAAA;AAAA,MACP;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,EAAK;AAC/B,MAAA,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,IAClB,CAAA,GAAG,CAAE,OAAA,CAAQ,MAAM;AAClB,MAAA,cAAA,GAAiB,IAAA;AAAA,IAClB,CAAC,CAAA;AAED,IAAA,OAAO,cAAA;AAAA,EACR;AAEA,EAAA,eAAe,OAAA,CACd,MAAA,EACA,IAAA,EACA,IAAA,EACA,OAAA,EAQa;AACb,IAAA,IAAI,SAAS,gBAAA,EAAkB;AAC9B,MAAA,IAAA,GAAO,OAAA,CAAQ,iBAAiB,IAAI,CAAA;AAAA,IACrC;AAEA,IAAA,MAAM,OAAA,GAAkC;AAAA,MACvC,MAAA,EAAQ,kBAAA;AAAA,MACR,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC,KAC1B;AAED,IAAA,IAAI,EAAE,WAAA,EAAa,SAAA,EAAW,UAAS,GAAI,MAAM,IAAI,QAAA,EAAS;AAE9D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,GAAA;AAC5B,IAAA,IAAI,SAAA,IAAa,SAAS,SAAA,EAAW;AACpC,MAAA,MAAM,gBAAA,EAAiB;AACvB,MAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,QAAA,EAAS;AAClC,MAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AACrB,MAAA,QAAA,GAAW,MAAA,CAAO,QAAA;AAAA,IACnB;AAEA,IAAA,IAAI,WAAA,EAAa;AAEhB,MAAA,IAAI,aAAa,KAAA,EAAO;AACvB,QAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA;AAAA,MACxB,CAAA,MAAO;AACN,QAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,MACjD;AAAA,IACD;AAEC,IAAA,MAAM,YAAY,OAAA,EAAS,MAAA,GAAS,OAAO,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA,GAAI,IAAA;AAE9E,IAAA,MAAM,SAAA,GAAiB,EAAE,MAAA,EAAQ,OAAA,EAAQ;AACzC,IAAA,IAAI,CAAC,CAAC,KAAA,EAAO,QAAQ,EAAE,QAAA,CAAS,MAAM,CAAA,IAAK,IAAA,KAAS,MAAA,EAAW;AAC9D,MAAA,SAAA,CAAU,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,IACrC;AAEA,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,GAAA,CAAI,OAAO,GAAG,SAAS,CAAA,CAAA;AAC1C,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,IAAA;AACJ,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI;AACH,MAAA,GAAA,GAAM,MAAM,KAAA,CAAM,OAAA,EAAS,SAAS,CAAA;AAAA,IACrC,SAAS,KAAA,EAAO;AACf,MAAA,MAAM,MAAW,IAAI,KAAA,CAAM,iBAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,wBAAwB,CAAA;AAC5F,MAAA,GAAA,CAAI,IAAA,GAAO,cAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AACb,MAAA,GAAA,CAAI,GAAA,GAAM,OAAA;AACb,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,MAAA,KAAW,KAAA,EAAO;AACtC,QAAA,OAAA,CAAQ,OAAA;AAAA,UACP,OAAA,CAAQ,OAAA,CAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,QAAQ,GAAA,EAAK,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO;AAAA,SACrE,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACjB;AACA,MAAA,MAAM,GAAA;AAAA,IACP;AAGA,IAAA,IAAI,IAAI,MAAA,KAAW,GAAA,IAAO,CAAC,OAAA,GAAU,UAAU,CAAA,EAAG;AACjD,MAAA,IAAI;AACH,QAAA,MAAM,gBAAA,EAAiB;AACvB,QAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,QAAA,EAAS;AAClC,QAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,MAAA,CAAO,WAAW,CAAA,CAAA;AACvD,QAAA,SAAA,CAAU,OAAA,GAAU,OAAA;AACpB,QAAA,OAAO,OAAA,CAAW,QAAQ,IAAA,EAAM,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,MACrE,SAAS,YAAA,EAAc;AAAA,MAEvB;AAAA,IACD;AAGA,IAAA,IAAI;AACH,MAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AACtD,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAClD,MAAA,IAAI,GAAA,CAAI,WAAW,GAAA,IAAO,aAAA,KAAkB,OAAO,CAAC,WAAA,EAAa,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC9F,QAAA,IAAA,GAAO,EAAC;AAAA,MACT,CAAA,MAAO;AACN,QAAA,IAAA,GAAO,MAAM,IAAI,IAAA,EAAK;AAAA,MACvB;AAAA,IACD,SAAS,KAAA,EAAO;AACf,MAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,0BAA0B,CAAA;AACrD,MAAA,GAAA,CAAI,IAAA,GAAO,YAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AACb,MAAA,GAAA,CAAI,GAAA,GAAM,OAAA;AACV,MAAA,GAAA,CAAI,SAAS,GAAA,CAAI,MAAA;AACpB,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,MAAA,KAAW,KAAA,EAAO;AACtC,QAAA,OAAA,CAAQ,OAAA;AAAA,UACP,OAAA,CAAQ,OAAA,CAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ;AAAA,SACzE,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACjB;AACA,MAAA,MAAM,GAAA;AAAA,IACP;AAEA,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACZ,MAAA,MAAM,SAAA,GAAyB,IAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,iCAAiC,SAAS,CAAA;AACzD,MAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,SAAA,CAAU,WAAW,gBAAgB,CAAA;AAChE,MAAA,GAAA,CAAI,IAAA,GAAO,UAAA;AACX,MAAA,GAAA,CAAI,UAAA,GAAa,SAAA,CAAU,UAAA,IAAc,GAAA,CAAI,MAAA;AAC7C,MAAA,GAAA,CAAI,mBAAmB,MAAA,CAAO,gBAAA;AAC9B,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AACb,MAAA,GAAA,CAAI,GAAA,GAAM,OAAA;AACV,MAAA,MAAM,SAAA,GAAY,IAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AACjF,MAAA,IAAI,SAAA,MAAe,SAAA,GAAY,SAAA;AAClC,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,MAAA,KAAW,KAAA,EAAO;AACtC,QAAA,OAAA,CAAQ,OAAA;AAAA,UACP,QAAQ,OAAA,CAAQ;AAAA,YACf,KAAA,EAAO,GAAA;AAAA,YACP,MAAA;AAAA,YACA,GAAA,EAAK,OAAA;AAAA,YACL,QAAQ,GAAA,CAAI,MAAA;AAAA,YACZ,QAAA,EAAU,SAAA;AAAA,YACV,WAAW,SAAA,IAAa,IAAA;AAAA,YACxB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,WACzB;AAAA,SACF,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACjB;AACA,MAAA,MAAM,GAAA;AAAA,IACP;AAEF,IAAA,IAAI,OAAA,EAAS,SAAA,IAAa,MAAA,KAAW,KAAA,EAAO;AACzC,MAAA,MAAM,SAAA,GAAY,IAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AACjF,MAAA,OAAA,CAAQ,OAAA;AAAA,QACP,QAAQ,SAAA,CAAU;AAAA,UACjB,IAAA;AAAA,UACA,MAAA;AAAA,UACA,GAAA,EAAK,OAAA;AAAA,UACL,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,WAAW,SAAA,IAAa,IAAA;AAAA,UACxB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,SACzB;AAAA,OACF,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,OAAO;AAAA,IACN,GAAA,EAAK,CAAI,IAAA,EAAc,IAAA,KAAe,QAAW,KAAA,EAAO,IAAA,EAAM,QAAW,IAAI,CAAA;AAAA,IAC7E,IAAA,EAAM,CAAI,IAAA,EAAc,IAAA,EAAW,SAAe,OAAA,CAAW,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACrF,GAAA,EAAK,CAAI,IAAA,EAAc,IAAA,EAAW,SAAe,OAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACnF,KAAA,EAAO,CAAI,IAAA,EAAc,IAAA,EAAW,SAAe,OAAA,CAAW,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACvF,MAAA,EAAQ,CAAI,IAAA,EAAc,IAAA,KAAe,QAAW,QAAA,EAAU,IAAA,EAAM,QAAW,IAAI;AAAA,GACpF;AACD;;;ACzOO,IAAM,aAAA,GAAgB,CAAC,SAAA,KAAyB;AACnD,EAAA,OAAO;AAAA;AAAA,IAGH,MAAM,UAAA,CAAW,MAAA,EAAiC,OAAA,EAA0B;AACxE,MAAA,MAAM,UAAe,EAAC;AAEtB,MAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW,OAAA,CAAQ,OAAO,MAAA,CAAO,IAAA;AACrD,MAAA,IAAI,MAAA,CAAO,YAAA,KAAiB,MAAA,EAAW,OAAA,CAAQ,eAAe,MAAA,CAAO,YAAA;AACrE,MAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,YAAY,MAAA,CAAO,SAAA;AAC/D,MAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,YAAY,MAAA,CAAO,SAAA;AAE/D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,WAAA,EAAa,SAAS,OAAO,CAAA;AAAA,IACjE,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACjE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,MAAA,CAAO,WAAA,EAAa,OAAO,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,MAAM,cAAA,CAAe,MAAA,EAA8B,OAAA,EAA0B;AACzE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,wBAAA,EAA0B,QAAQ,OAAO,CAAA;AAAA,IAC9E,CAAA;AAAA,IAEA,MAAM,kBAAA,CAAmB,MAAA,EAAkC,OAAA,EAA0B;AACjF,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,gCAAA,EAAkC,QAAQ,OAAO,CAAA;AAAA,IACtF,CAAA;AAAA,IAEA,MAAM,KAAA,CAAM,MAAA,EAAqB,OAAA,EAA0B;AACvD,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,cAAA,EAAgB,OAAO,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,kBAAA,EAAoB;AAAA,QAChD,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACJ,GAAG,MAAA;AAAA,UACH,YAAY,SAAA,CAAU;AAAA;AAC1B,OACH,CAAA;AAAA,IACL,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,MAAA,EAAuB,OAAA,EAA0B;AAC3D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,oBAAA,EAAsB,QAAQ,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA;AAAA,IAIA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AAC/D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,iBAAA,EAAmB,QAAQ,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IAEA,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACrE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,oBAAA,EAAsB,QAAQ,OAAO,CAAA;AAAA,IAC1E,CAAA;AAAA,IAEA,MAAM,MAAA,CAAO,MAAA,EAAsB,OAAA,EAA0B;AACzD,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA,CAAK,kBAAA,EAAoB,IAAI,OAAO,CAAA;AAAA,IACpE,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,mBAAA,EAAqB,QAAQ,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,qBAAA,EAAuB;AAAA,QACnD,GAAG,OAAA;AAAA,QACH;AAAA,OACH,CAAA;AAAA,IACL,CAAA;AAAA;AAAA,IAIA,MAAM,cAAA,CAAe,MAAA,EAA8B,OAAA,EAA0B;AACzE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,2BAAA,EAA6B,QAAQ,OAAO,CAAA;AAAA,IACjF,CAAA;AAAA,IAEA,MAAM,mBAAA,CAAoB,MAAA,EAAmC,OAAA,EAA0B;AACnF,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,iCAAA,EAAmC,QAAQ,OAAO,CAAA;AAAA,IACvF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACvE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,0BAAA,EAA4B,QAAQ,OAAO,CAAA;AAAA,IAChF,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,MAAA,EAA6B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,qBAAA,EAAuB,QAAQ,OAAO,CAAA;AAAA,IAC3E;AAAA,GACJ;AACJ,CAAA;;;ACvFO,IAAM,iBAAA,GAAoB,CAAC,SAAA,KAAyB;AACzD,EAAA,OAAO;AAAA,IACL,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,cAAA,CAAA,EAAkB,QAAQ,OAAO,CAAA;AAAA,IACpE,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC3B,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC3B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,cAAA,CAAA,EAAkB,OAAO,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,QAAA,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,eAAA,CAAA;AAAA,QAC3B,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,oBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,sBAAA,EAAwB,OAAO,CAAA;AAAA,IACjE,CAAA;AAAA,IAEA,MAAM,eAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,aAAA,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AACjE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,UAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,oBAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,WAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,WAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,cAAA,CAAA;AAAA,QACtC,MAAA,CAAO,OAAA;AAAA,QACP;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,eAAA,EAAkB,MAAA,CAAO,EAAE,CAAA,MAAA,CAAA,EAAU;AAAA,QACnE,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,KAAA,EAAO,OAAO,KAAA,IAAS;AAAA;AACzB,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,EAAA,EAAI,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC3B,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,kBAAkB,EAAE,CAAA,UAAA,CAAA;AAAA,QACpB,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,MAAM,EAAE,EAAA,EAAI,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC3B,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,kBAAkB,EAAE,CAAA,OAAA,CAAA;AAAA,QACpB,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;ACvKO,IAAM,cAAA,GAAiB,CAAC,SAAA,KAAyB;AACpD,EAAA,OAAO;AAAA,IACH,MAAM,mBAAA,CAAoB,MAAA,EAAmC,OAAA,EAA0B;AAEnF,MAAA,MAAM,EAAE,KAAA,GAAQ,IAAI,IAAA,GAAO,IAAG,GAAI,MAAA;AAClC,MAAA,MAAM,MAAM,CAAA,EAAG,SAAA,CAAU,OAAO,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,MAAA,CAAA;AAEtE,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,KAAA,CAAM,QAAQ,CAAC,IAAA,KAAS,SAAS,MAAA,CAAO,OAAA,EAAS,IAAI,CAAC,CAAA;AACtD,MAAA,IAAA,CAAK,QAAQ,CAACC,IAAAA,KAAQ,SAAS,MAAA,CAAO,OAAA,EAASA,IAAG,CAAC,CAAA;AAEnD,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,QAAA,EAAS;AACxC,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC9B,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACL,aAAA,EAAe,CAAA,OAAA,EAAU,MAAA,CAAO,WAAW,CAAA;AAAA;AAC/C,OACH,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,MACnD;AAEA,MAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC/B,CAAA;AAAA,IAEA,MAAM,mBAAA,CAAoB,MAAA,EAAmC,OAAA,EAA0B;AACnF,MAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAQ,GAAI,MAAA;AAExB,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QACxB,CAAA,eAAA,EAAkB,EAAE,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA;AAAA,QACrC;AAAA,OACJ;AAAA,IACJ,CAAA;AAAA,IAEA,MAAM,gBAAA,CAAiB,MAAA,EAAgC,OAAA,EAA0B;AAE7E,MAAA,MAAM,EAAE,MAAA,GAAS,IAAA,EAAM,KAAA,GAAQ,IAAG,GAAI,MAAA;AACtC,MAAA,MAAM,MAAM,CAAA,EAAG,SAAA,CAAU,OAAO,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,MAAA,CAAA;AAEtE,MAAA,MAAM,WAAA,GAAmB,EAAE,KAAA,EAAM;AACjC,MAAA,IAAI,MAAA,cAAoB,MAAA,GAAS,MAAA;AAEjC,MAAA,MAAM,WAAA,GAAc,IAAI,eAAA,CAAgB,WAAW,EAAE,QAAA,EAAS;AAC9D,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,GAAG,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AAEpD,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,YAAY,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AACxD,QAAA,MAAM,IAAI,KAAA,CAAM,SAAA,EAAW,OAAA,IAAW,uBAAuB,CAAA;AAAA,MACjE;AAEA,MAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC/B,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,MAAM,EAAE,OAAA,EAAS,GAAG,UAAA,EAAW,GAAI,MAAA;AAEnC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QACxB,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA;AAAA,QACvD,UAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AAAA,GACJ;AACJ,CAAA;;;AChEO,IAAM,aAAA,GAAgB,CAAC,SAAA,KAAyB;AACrD,EAAA,OAAO;AAAA,IACL,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACe;AACf,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,SAAA,CAAA,EAAa,QAAQ,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QACtB,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA,CAAO,aAAa,MAAA,CAAO,EAAE,IAAI,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,MAAA,EAAuB,OAAA,EAA0B;AAC7D,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,aAAa,MAAA,CAAO,EAAE,IAAI,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IAEA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAC/D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,SAAA,CAAA,EAAa;AAAA,QAC3C,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,YAAY,SAAA,CAAU;AAAA;AACxB,OACD,CAAA;AAAA,IACH;AAAA,GACF;AACF,CAAA;;;ACtCO,IAAM,qBAAA,GAAwB,CAAC,SAAA,KAAyB;AAC9D,EAAA,OAAO;AAAA,IACN,MAAM,cAAA,CAAe,MAAA,EAA8B,OAAA,EAA0B;AAC5E,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,8BAAA,EAAiC,OAAO,eAAe,CAAA,CAAA;AAAA,QACvD;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,gBAAA,CAAiB,MAAA,EAAgC,OAAA,EAA0B;AAChF,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,8BAAA,EAAiC,UAAU,UAAU,CAAA,CAAA;AAAA,QACrD;AAAA,OACD;AAAA,IACD;AAAA,GACD;AACD,CAAA;;;ACbO,IAAM,kBAAA,GAAqB,CAAC,SAAA,KAAyB;AAC3D,EAAA,OAAO;AAAA,IACN,MAAM,eAAA,CAAgB,MAAA,EAA+B,OAAA,EAA0B;AAC9E,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,YAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,eAAA,CAAgB,MAAA,EAA+B,OAAA,EAA0B;AAC9E,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D,MAAA;AAAA,QACA;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,eAAA,CAAgB,MAAA,EAA+B,OAAA,EAA0B;AAC9E,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACxE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AAC1E,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,YAAA,CAAA,EAAgB;AAAA,QACrF,GAAG,OAAA;AAAA,QACH;AAAA,OACA,CAAA;AAAA,IACF;AAAA,GACD;AACD,CAAA;;;AC3CO,IAAM,kBAAA,GAAqB,CAAC,SAAA,KAAyB;AAC3D,EAAA,OAAO;AAAA,IACN,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACxE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,cAAA,EAAiB,SAAA,CAAU,UAAU,CAAA,CAAA,EAAI;AAAA,QACxE,GAAG,OAAA;AAAA,QACH;AAAA,OACA,CAAA;AAAA,IACF;AAAA,GACD;AACD,CAAA;;;ACCO,IAAM,MAAA,GAAS,CAAC,GAAA,KAAyB;AAC9C,EAAA,MAAM,SAAA,GACJ,iEAAA;AACF,EAAA,OAAO,SAAA,CAAU,KAAK,GAAG,CAAA;AAC3B,CAAA;AAsCO,IAAM,cAAA,GAAiB,CAAC,EAAA,EAAY,SAAA,KAAiC;AAE1E,EAAA,IAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AACd,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IAAI,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACpB,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,OAAO,GAAG,SAAA,CAAU,UAAU,IAAI,SAAA,CAAU,MAAM,IAAI,EAAE,CAAA,CAAA;AAC1D,CAAA;;;AClDO,SAAS,aAAA,CAAc,KAAA,EAAY,MAAA,GAAiB,IAAA,EAAc;AACvE,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,EAAA,IAAI,KAAA,CAAM,YAAY,KAAA,EAAO;AAC3B,IAAA,IAAI,OAAO,KAAA,CAAM,UAAA,CAAW,KAAA,KAAU,QAAA,EAAU;AAC9C,MAAA,OACE,MAAM,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,IAC7B,MAAM,UAAA,CAAW,KAAA,CAAM,EAAA,IACvB,MAAA,CAAO,OAAO,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA,CAAE,CAAC,CAAA,IACvC,EAAA;AAAA,IAEJ;AACA,IAAA,IAAI,OAAO,KAAA,CAAM,UAAA,CAAW,KAAA,KAAU,QAAA,EAAU;AAC9C,MAAA,OAAO,MAAM,UAAA,CAAW,KAAA;AAAA,IAC1B;AAAA,EACF;AAGA,EAAA,OACE,KAAA,CAAM,GAAA,EACF,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAClB,OAAA,CAAQ,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,CAAE,WAAA,EAAa,CAAA,IAAK,EAAA;AAE3D;AAEO,SAAS,iBAAiB,KAAA,EAAoB;AACnD,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,UAAU,IAAA,IAAQ,KAAA,CAAM,UAAU,MAAA,EAAW;AAC/D,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,SAAA;AACH,MAAA,OAAO,KAAA,CAAM,QAAQ,KAAA,GAAQ,IAAA;AAAA,IAC/B,KAAK,QAAA;AAEH,MAAA,IACE,MAAM,UAAA,EAAY,OAAA,KAAY,UAC9B,KAAA,CAAM,UAAA,EAAY,YAAY,WAAA,EAC9B;AACA,QAAA,IAAI;AACF,UAAA,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,EAAE,kBAAA,EAAmB;AAAA,QAClD,SAAS,CAAA,EAAG;AACV,UAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,QAC3B;AAAA,MACF;AACA,MAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC3B,KAAK,cAAA;AACH,MAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,EAAG;AACxD,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAChC,QAAA,IAAI,UAAA,IAAc,WAAW,QAAA,EAAU;AACrC,UAAA,OAAO,UAAA,CAAW,IAAA,IAAQ,UAAA,CAAW,EAAA,IAAM,OAAA;AAAA,QAC7C;AACA,QAAA,OAAO,UAAA,CAAW,KAAA,IAAS,UAAA,CAAW,IAAA,IAAQ,WAAW,EAAA,IAAM,OAAA;AAAA,MACjE;AACA,MAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC3B;AACE,MAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA;AAE/B;AAEO,SAAS,2BAA2B,QAAA,EAAsB;AAC/D,EAAA,MAAM,iBAAiB,EAAC;AAExB,EAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACrC,IAAA,IAAI,SAAS,GAAG,CAAA,KAAM,QAAQ,QAAA,CAAS,GAAG,MAAM,MAAA,EAAW;AACzD,MAAA,cAAA,CAAe,IAAA,CAAK;AAAA,QAClB,GAAA;AAAA,QACA,KAAA,EAAO,CAAC,QAAA,CAAS,GAAG,CAAC;AAAA,OACtB,CAAA;AAAA,IACH;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,cAAA;AACT;AAEO,SAAS,mBAAmB,MAAA,EAAoC;AACrE,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,IAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,EAAG;AACzC,MAAA,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,IAAA;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,iBAAA,CAAkB,KAAA,EAAY,MAAA,GAAiB,IAAA,EAAc;AAC3E,EAAA,IAAI,CAAC,SAAS,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAE/D,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAGhC,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,UAAA,KAAe,IAAA,EAAM;AAEzD,IAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,WAAW,MAAM,CAAA;AAChD,IAAA,IAAI,UAAA,CAAW,EAAA,EAAI,OAAO,UAAA,CAAW,EAAA;AACrC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AACvC,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAK,EAAE,CAAA;AAAA,EAC/B;AAGA,EAAA,OAAO,OAAO,UAAU,CAAA;AAC1B;AAGO,IAAM,aAAA,GAAgB,CAAC,KAAA,EAAY,QAAA,KAAqB;AAC7D,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,QAAQ,OAAO,IAAA;AAEpC,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,QAAQ,QAAQ,CAAA;AAE9D,EAAA,IAAI,CAAC,SAAS,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/D,EAAA,OAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AACtB,CAAA;AAEO,IAAM,cAAA,GAAiB,CAAC,KAAA,EAAY,QAAA,KAAqB;AAC9D,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,QAAQ,OAAO,IAAA;AAEpC,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,QAAQ,QAAQ,CAAA;AAE9D,EAAA,IAAI,CAAC,SAAS,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/D,EAAA,OAAO,KAAA,CAAM,KAAA;AACf,CAAA;AAEA,SAAS,WAAA,CAAY,OAAY,MAAA,EAAgB;AAC/C,EAAA,IAAI,CAAC,KAAA,EAAO,IAAA,IAAQ,KAAA,CAAM,KAAA,KAAU,QAAW,OAAO,KAAA;AAGtD,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAA6B;AACnD,MAAA,MAAM,SAA8B,EAAC;AACrC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,WAAA,CAAY,CAAA,EAAG,MAAM,CAAA;AAAA,MACnC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,KAAS,MAAA;AACnC,EAAA,MAAM,MAAA,GACJ,KAAA,CAAM,UAAA,EAAY,EAAA,KAAO,MAAA,IAAA,CACxB,KAAA,CAAM,UAAA,EAAY,SAAA,IAAa,CAAA,IAAK,CAAA,IACrC,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAEvB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,cACH,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,MAA2B,CAAA,CAAE,MAAM,CAAA,IAAK,CAAA,CAAE,IAAI,CAAC,CAAA,GAChE,CAAC,GAAG,MAAM,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,OAAO,WAAA,GACH,KAAA,CAAM,KAAA,CAAM,CAAC,EAAE,MAAM,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,GAC7C,KAAA,CAAM,MAAM,CAAC,CAAA;AACnB;AAEO,IAAM,oBAAA,GAAuB,CAClC,KAAA,EACA,QAAA,EACA,SAAS,IAAA,KACN;AACH,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA;AAE7C,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAA6B;AACtD,IAAA,MAAM,MAAM,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,CAAC,KAAU,OAAA,KAAiB;AACvD,MAAA,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,GAAI,WAAA,CAAY,SAAS,MAAM,CAAA;AAE9C,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT,CAAA;AAEO,IAAM,iBAAA,GAAoB,CAC/B,KAAA,EACA,QAAA,EACA,SAAS,IAAA,KACN;AACH,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA;AAE7C,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAU,OAAA,KAAiB;AAC/C,IAAA,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,GAAI,WAAA,CAAY,SAAS,MAAM,CAAA;AAC9C,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAA;AAEO,IAAM,WAAA,GAAc,CAAC,UAAA,EAAiB,OAAA,GAAU,IAAA,KAAS;AAC9D,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,EAAA,IACE,WAAW,IAAA,KAAS,oBAAA,IACpB,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,EAC9B;AACA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AACrC,IAAA,IAAI,UAAA,IAAc,WAAW,QAAA,EAAU;AAErC,MAAA,IACE,UAAA,CAAW,eACX,UAAA,CAAW,WAAA,CAAY,YACvB,UAAA,CAAW,WAAA,CAAY,SAAS,GAAA,EAChC;AACA,QAAA,OAAO,UAAA,CAAW,YAAY,QAAA,CAAS,GAAA;AAAA,MACzC;AAGA,MAAA,IAAI,WAAW,GAAA,EAAK;AAClB,QAAA,OAAO,UAAA,CAAW,GAAA;AAAA,MACpB;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,OAAO,UAAA;AAAA,IACT;AAEA,IAAA,IAAI,WAAW,GAAA,EAAK;AAClB,MAAA,OAAO,UAAA,CAAW,GAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,IACE,UAAA,CAAW,eACX,UAAA,CAAW,WAAA,CAAY,YACvB,UAAA,CAAW,WAAA,CAAY,SAAS,GAAA,EAChC;AACA,IAAA,OAAO,UAAA,CAAW,YAAY,QAAA,CAAS,GAAA;AAAA,EACzC;AAEA,EAAA,OAAO,IAAA;AACT,CAAA;;;ACnPO,IAAM,YAAA,GAAe,CAAC,SAAA,KAAyB;AACpD,EAAA,OAAO;AAAA;AAAA,IAGL,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,YAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,UAAA,CAAW,GAAA;AAAA,QAC1C,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA;AAAA,QACjE;AAAA,OACF;AAGA,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,SAAS,GAAA,EAAa;AACpB,UAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,GAAA,EAAK,SAAA,CAAU,MAAM,CAAA;AAAA,QAC1D,CAAA;AAAA,QACA,eAAe,GAAA,EAAa;AAC1B,UAAA,OAAO,oBAAA,CAAqB,QAAA,EAAU,GAAA,EAAK,SAAA,CAAU,MAAM,CAAA;AAAA,QAC7D,CAAA;AAAA,QACA,SAAS,GAAA,EAAa;AACpB,UAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,QAAA,EAAU,GAAA,EAAK,UAAU,MAAM,CAAA;AAC/D,UAAA,OAAO,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,QAChC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,YAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,4BAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,oBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,GAAG,WAAA,EAAY,GAAI,MAAA;AACzC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,YAAY,CAAA,QAAA,CAAA;AAAA,QAClE;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,qBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,GAAG,OAAA,EAAQ,GAAI,MAAA;AACrC,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,YAAY,CAAA,QAAA,CAAA;AAAA,QAClE,EAAE,GAAG,OAAA,EAAS,YAAA,EAAa;AAAA,QAC3B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,qBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,EAAA,EAAI,GAAG,SAAQ,GAAI,MAAA;AAEzC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,kBAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,YAAY,YAAY,EAAE,CAAA,CAAA;AAAA,QAChF,EAAE,GAAG,OAAA,EAAS,YAAA,EAAa;AAAA,QAC3B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,qBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,YAAY,CAAA,SAAA,EAAY,OAAO,EAAE,CAAA,CAAA;AAAA,QAC9F;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,kBAAkB,SAAA,CAAU,UAAU,gBAAgB,MAAA,CAAO,YAAY,YAAY,WAAW,CAAA,CAAA;AAAA,QAChG;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AACjE,MAAA,MAAM,EAAE,YAAA,EAAc,OAAA,EAAS,WAAA,EAAY,GAAI,MAAA;AAE/C,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,kBAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,YAAY,YAAY,OAAO,CAAA,KAAA,CAAA;AAAA,QACrF;AAAA,UACE,YAAY,SAAA,CAAU,UAAA;AAAA,UACtB,OAAA;AAAA,UACA,aAAa,WAAA,IAAe,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI;AAAA,SAC1D;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,4BAAA,EAA+B,OAAO,SAAS,CAAA,UAAA,CAAA;AAAA,QAC/C;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,wBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,WAAW,CAAA,YAAA,CAAA;AAAA,QACjE;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;AC/LO,IAAM,cAAA,GAAiB,CAAC,SAAA,KAAyB;AACtD,EAAA,OAAO;AAAA;AAAA,IAGL,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,SAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,UAAA,CAAW,GAAA;AAAA,QAC1C,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,WAAW,CAAA,CAAA;AAAA,QAC9D;AAAA,OACF;AAGA,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,OAAA,GAAU;AACR,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,OAAO,MAAM,CAAA,IAAK,SAAS,IAAA,EAAM,EAAA,IAAM,SAAS,IAAA,IAAQ,EAAA;AAAA,QAC1E,CAAA;AAAA,QACA,cAAA,GAAiB;AACf,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,cAAc,MAAM,CAAA,IAAK,SAAS,WAAA,EAAa,EAAA,IAAM,SAAS,WAAA,IAAe,EAAA;AAAA,QAC/F;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,kBAAA,CAAmB,SAAA,CAAU,UAAU,CAAC,CAAA,SAAA,CAAA;AAAA,QAC1D;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,OAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,cAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAE/D,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,QAAA,EAAW,OAAO,EAAE,CAAA,CAAA;AAAA,QAC1D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AACjE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,OAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAC/D,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QACxC,IAAA,EAAM,iBAAA;AAAA,QACN,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,UAAU,IAAA,CAAK;AAAA,OACjB,CAAE,CAAA;AAEF,MAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAK,GAAI,MAAA;AAE3B,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,KAAA;AAAA,QACA,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,kBAAA,CAAA,EAAsB,SAAS,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IAEA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAC/D,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,gBAAA,CAAA;AAAA,QACtC,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;AC1HO,IAAM,oBAAA,GAAuB,CAAC,SAAA,KAAyB;AAE5D,EAAA,IAAI,OAAe,EAAC;AAEpB,EAAA,OAAO;AAAA;AAAA,IAGL,UAAU,IAAA,EAAY;AACpB,MAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,IAChB,CAAA;AAAA,IAEA,eAAe,MAAA,EAAgB;AAC7B,MAAA,IAAA,GAAO,KAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAM,CAAA;AAAA,IAC3C,CAAA;AAAA,IAEA,OAAA,GAAkB;AAChB,MAAA,OAAO,CAAC,GAAG,IAAI,CAAA;AAAA,IACjB,CAAA;AAAA,IAEA,SAAA,GAAY;AACV,MAAA,IAAA,GAAO,EAAC;AAAA,IACV,CAAA;AAAA;AAAA,IAIA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,gBAAA,CAAA,EAAoB,SAAS,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IAEA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,EAAA,EAAI,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC3B,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,oBAAoB,EAAE,CAAA,CAAA;AAAA,QACtB,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,QAAA,CACJ,MAAA,EACA,OAAA,EACA;AAEA,MAAA,MAAM,QAAQ,MAAA,EAAQ,KAAA,IAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QAC9C,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,IAAI,CAAA,CAAE;AAAA,OACR,CAAE,CAAA;AAEF,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,GAAG,MAAA;AAAA,QACH;AAAA,OACF;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,yBAAA,CAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI;AAAA,QAC/D,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ,EAAE,UAAA,EAAY,SAAA,CAAU,UAAA;AAAW,OAC5C,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,uBAAA,CAAA,EAA2B;AAAA,QACzD,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,GAAG,MAAA;AAAA,UACH,YAAY,SAAA,CAAU;AAAA;AACxB,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,oBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,gBAAA,CAAA,EAAoB;AAAA,QAClD,GAAG,OAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA;AAAA,IAIA,MAAM,QAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAe;AAAA,QAC7C,IAAA,EAAM,SAAA;AAAA,QACN,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,QAAA,EAAU;AAAA,OACZ,CAAE,CAAA;AAEF,MAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAK,GAAI,MAAA;AAE3B,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,KAAA;AAAA,QACA,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,kBAAA,CAAA,EAAsB,SAAS,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA;AAAA,IAIA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,SAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,UAAA,CAAW,GAAA;AAAA,QAC1C,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,WAAW,CAAA,CAAA;AAAA,QAC9D;AAAA,OACF;AAGA,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,OAAA,GAAU;AACR,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,OAAO,MAAM,CAAA,IAAK,SAAS,IAAA,EAAM,EAAA,IAAM,SAAS,IAAA,IAAQ,EAAA;AAAA,QAC1E,CAAA;AAAA,QACA,cAAA,GAAiB;AACf,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,cAAc,MAAM,CAAA,IAAK,SAAS,WAAA,EAAa,EAAA,IAAM,SAAS,WAAA,IAAe,EAAA;AAAA,QAC/F;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,SAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,SAAA,EAAW,GAAG,WAAA,EAAY,GAAI,MAAA;AAEtC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,SAAS,CAAA,UAAA,CAAA;AAAA,QAC5D;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,UAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE,CAAA,CAAA;AAAA,QAC7D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE,CAAA,CAAA;AAAA,QAC7D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AAErE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE,CAAA,CAAA;AAAA,QAC7D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACvE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,UAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,sBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,UAAA,EAAY,GAAG,WAAA,EAAY,GAAI,MAAA;AACvC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,UAAU,CAAA,aAAA,CAAA;AAAA,QAC9D;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;AC5QO,IAAM,iBAAA,GAAoB,CAAC,SAAA,KAAyB;AACzD,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,CACJ,MAAA,EACA,OAAA,EACgB;AAChB,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,UAAA,CAAW,GAAA;AAAA,QAC1C,CAAA,mBAAA,CAAA;AAAA,QACA;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA,YACN,KAAK,MAAA,CAAO;AAAA;AACd;AACF,OACF;AACA,MAAA,OAAO,QAAA,CAAS,SAAS,EAAC;AAAA,IAC5B,CAAA;AAAA,IAEA,MAAM,OAAA,CACJ,MAAA,EACA,OAAA,EACe;AACf,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,mBAAA,CAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACe;AACf,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,mBAAA,CAAA;AAAA,QACA;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA,YACN,KAAK,MAAA,CAAO;AAAA;AACd;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,SAAA,CACJ,MAAA,EACA,OAAA,EAC4B;AAC5B,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,sBAAA,CAAA,EAA0B,QAAQ,OAAO,CAAA;AAAA,IAC5E;AAAA,GACF;AACF,CAAA;;;ACtDO,IAAM,qBAAA,GAAwB,CAAC,SAAA,KAAyB;AAC7D,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACsB;AACtB,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,cAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,OAAA,CACJ,MAAA,EACA,OAAA,EACsB;AACtB,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,CAAA;AAAA,QACjE;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,QAAA,CACJ,MAAA,EACA,OAAA,EACwB;AACxB,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,cAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACsB;AACtB,MAAA,MAAM,EAAE,EAAA,EAAI,GAAG,IAAA,EAAK,GAAI,MAAA;AACxB,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA;AAAA,QAC1D,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EAC+B;AAC/B,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,CAAA;AAAA,QACjE;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACsB;AACtB,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,QAAA,CAAA;AAAA,QACjE;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EAC6B;AAC7B,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,mBAAA,EAAsB,OAAO,OAAO,CAAA,QAAA,CAAA;AAAA,QAC1E;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EAC6B;AAC7B,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,oBAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,UAAU,OAAA,EAAmC;AACjD,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,IAAA,CAAK,UAAA,CAAW,EAAE,SAAS,CAAA;AAClD,QAAA,OAAO,SAAS,UAAA,KAAe,SAAA;AAAA,MACjC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAM,qBAAA,CACJ,OAAA,EACA,YAAA,EAC6C;AAC7C,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,IAAA,CAAK,UAAA,CAAW,EAAE,SAAS,CAAA;AAClD,QAAA,OAAO;AAAA,UACL,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,OAAA,EAAS,SAAS,OAAA,IAAW;AAAA,SAC/B;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO;AAAA,UACL,UAAA,EAAY,SAAA;AAAA,UACZ,OAAA,EAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,aAAa,EAAA,EAAkC;AACnD,MAAA,OAAO,KAAK,UAAA,CAAW,EAAE,EAAA,EAAI,MAAA,EAAQ,UAAU,CAAA;AAAA,IACjD,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,YAAY,EAAA,EAAkC;AAClD,MAAA,OAAO,KAAK,UAAA,CAAW,EAAE,EAAA,EAAI,MAAA,EAAQ,YAAY,CAAA;AAAA,IACnD;AAAA,GACF;AACF,CAAA;;;AC5KO,IAAM,iBAAA,GAAoB,CAAC,SAAA,KAAyB;AACzD,EAAA,OAAO;AAAA,IACL,MAAM,aAAa,OAAA,EAAyD;AAC1E,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,iCAAA,CAAA,EAAqC,OAAO,CAAA;AAAA,IAC9E,CAAA;AAAA,IAEA,MAAM,gBAAA,CACJ,WAAA,EACA,OAAA,EAC0B;AAC1B,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,qCAAqC,WAAW,CAAA,OAAA,CAAA;AAAA,QAChD;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;AChCO,SAAS,kBAAkB,QAAA,EAA0B;AACxD,EAAA,MAAM,eAAA,GAA0C;AAAA,IAC5C,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,cAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,oBAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,oBAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,OAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,cAAA;AAAA,IACL,GAAA,EAAK,cAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACT;AAEA,EAAA,OAAO,eAAA,CAAgB,QAAA,CAAS,WAAA,EAAa,CAAA,IAAK,QAAA;AACtD;AAKO,IAAM,uBAAA,GAA0B,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AAK9F,SAAS,sBAAsB,QAAA,EAA2B;AAC7D,EAAA,OAAO,uBAAA,CAAwB,QAAA,CAAS,QAAA,CAAS,WAAA,EAAa,CAAA;AAClE;;;AC9FA,IAAM,iBAAA,GAAoB;AAAA,EACtB,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM;AACV,CAAA;AAGO,SAAS,eAAe,WAAA,EAA6B;AACxD,EAAA,OAAA,CAAQ,eAAe,CAAA,IAAK,GAAA;AAChC;AAQO,SAAS,sBAAsB,QAAA,EAA0B;AAC5D,EAAA,OAAO,iBAAA,CAAkB,QAA0C,CAAA,IAAK,KAAA;AAC5E;AAGO,SAAS,oBAAA,CACZ,MAAA,EACA,QAAA,EACA,OAAA,GAII,EAAC,EACC;AACN,EAAA,MAAM,EAAE,WAAA,GAAc,IAAA,EAAM,aAAA,GAAgB,CAAA,EAAG,cAAa,GAAI,OAAA;AAChE,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA;AAElD,EAAA,IAAI,CAAC,WAAA,EAAa;AACd,IAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,MAAA,GAAS,YAAA,IAAgB,iBAAA,CAAkB,QAAQ,CAAA;AAGzD,EAAA,IAAI,qBAAA,CAAsB,QAAQ,CAAA,EAAG;AACjC,IAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,aAAa,CAAA,CAAA;AACpC;AAGO,SAAS,WAAA,CACZ,WAAA,EACA,QAAA,EACA,OAAA,GAII,EAAC,EACC;AACN,EAAA,MAAM,KAAA,GAAQ,eAAe,WAAW,CAAA;AACxC,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA;AACxD;AAGO,SAAS,aAAA,CACZ,OAAA,EACA,OAAA,GAII,EAAC,EACC;AACN,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AAErB,EAAA,MAAM,EAAE,WAAA,GAAc,IAAA,EAAM,gBAAgB,CAAA,EAAG,aAAA,GAAgB,OAAM,GAAI,OAAA;AAEzE,EAAA,IAAI,aAAA,EAAe;AACf,IAAA,MAAM,QAAA,GAAW,YAAY,OAAA,CAAQ,QAAA,EAAU,QAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA;AAC/F,IAAA,MAAM,QAAA,GAAA,CAAY,OAAA,CAAQ,QAAA,IAAY,CAAA,IAAK,IAAI,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA,GAAI,IAAA;AACjI,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,EAAK,MAAA,IAAU,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,SAAA,GAAY,CAAA,GAAI,WAAA,CAAY,SAAA,EAAW,OAAA,CAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA,GAAI,IAAA;AACvG,IAAA,MAAM,KAAA,GAAQ,YAAY,OAAA,CAAQ,KAAA,EAAO,QAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA;AAEzF,IAAA,IAAI,MAAA,GAAS,aAAa,QAAQ,CAAA,CAAA;AAClC,IAAA,IAAI,QAAA,EAAU,MAAA,IAAU,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAA;AAChD,IAAA,IAAI,GAAA,EAAK,MAAA,IAAU,CAAA,OAAA,EAAU,GAAG,CAAA,CAAA;AAChC,IAAA,MAAA,IAAU,YAAY,KAAK,CAAA,CAAA;AAC3B,IAAA,OAAO,MAAA;AAAA,EACX;AAEA,EAAA,OAAO,WAAA,CAAY,QAAQ,KAAA,EAAO,OAAA,CAAQ,UAAU,EAAE,WAAA,EAAa,eAAe,CAAA;AACtF;AAGO,SAAS,eACZ,MAAA,EACA,QAAA,EACA,eAAA,EACA,OAAA,GAKI,EAAC,EACC;AACN,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,EAAA;AAE3C,EAAA,MAAM;AAAA,IACF,WAAA,GAAc,IAAA;AAAA,IACd,aAAA,GAAgB,CAAA;AAAA,IAChB,aAAA,GAAgB,IAAA;AAAA,IAChB;AAAA,GACJ,GAAI,OAAA;AAGJ,EAAA,IAAI,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AAGlD,EAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC1B,IAAA,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,cAAc,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,MAAA;AAGJ,EAAA,IAAI,eAAA,EAAiB;AACjB,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,MAAA,IAAU,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,MAAM,CAAA;AAC7F,IAAA,IAAI,YAAY,QAAA,EAAU;AACtB,MAAA,QAAA,GAAW,UAAA,CAAW,QAAA;AACtB,MAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AAAA,IACvC,CAAA,MAAO;AACH,MAAA,QAAA,GAAW,qBAAA,CAAsB,MAAM,MAAM,CAAA;AAC7C,MAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AAAA,IACvC;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,QAAA,GAAW,qBAAA,CAAsB,MAAM,MAAM,CAAA;AAC7C,IAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AAAA,EACvC;AAGA,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,KAAA,CAAM,MAAA,IAAU,GAAG,QAAA,EAAU;AAAA,IAC5D,WAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA,EAAc;AAAA,GACjB,CAAA;AAGD,EAAA,IAAI,iBAAiB,KAAA,CAAM,SAAA,IAAa,MAAM,SAAA,IAAa,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI;AAC3E,IAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,KAAA,CAAM,SAAA,EAAW,QAAA,EAAU;AAAA,MAC9D,WAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA,EAAc;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,KAAA,EAAQ,kBAAkB,CAAA,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,cAAA;AACX;AAGO,SAAS,cAAA,CAAe,MAAA,EAAiB,QAAA,EAAkB,cAAA,EAAiC;AAC/F,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,CAAA;AAE3C,EAAA,IAAI,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AAClD,EAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC1B,IAAA,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,cAAc,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AAAA,EACpB;AAGA,EAAA,OAAO,OAAO,MAAA,IAAU,CAAA;AAC5B;AAGO,SAAS,yBACZ,aAAA,EACA,QAAA,EACA,UACA,aAAA,EACA,OAAA,GAUI,EAAC,EACE;AACP,EAAA,MAAM,EAAE,WAAW,CAAA,EAAG,SAAA,GAAY,GAAG,UAAA,GAAa,CAAA,EAAG,WAAU,GAAI,OAAA;AACnE,EAAA,MAAM,KAAA,GAAQ,gBAAgB,QAAA,GAAW,SAAA;AAEzC,EAAA,OAAO;AAAA,IACH,QAAA;AAAA,IACA,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,CAAA;AAAA,IACV,QAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA,EAAM,aAAA;AAAA,IACN,GAAI,YAAY,CAAA,IAAK;AAAA,MACjB,GAAA,EAAK;AAAA,QACD,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,UAAA;AAAA,QACT,OAAO;AAAC;AACZ,KACJ;AAAA,IACA,GAAI,SAAA,IAAa,EAAE,SAAA;AAAU,GACjC;AACJ;;;ACxNO,SAAS,oBAAoB,KAAA,EAAiC;AACjE,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,0BAAA,EAA2B;AAAA,EAC/D;AAEA,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEvC,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpB,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,2BAAA,EAA4B;AAAA,EAChE;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,EAAA,EAAI;AACrB,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,0BAAA,EAA2B;AAAA,EAC/D;AAEA,EAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAC3B;;;ACtBO,IAAM,QAAA,GAAW;AAAA,EACpB;AAAA,IACI,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACH,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,kBAAA,EAAmB;AAAA,MACnD,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,iBAAA,EAAkB;AAAA,MAClD,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,gBAAA,EAAiB;AAAA,MAClD,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,qBAAA;AAAsB;AAC1D,GACJ;AAAA,EACA;AAAA,IACI,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACH,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,eAAA,EAAgB;AAAA,MAC1C,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,cAAA,EAAe;AAAA,MACxC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,eAAA,EAAgB;AAAA,MAC1C,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,aAAA;AAAc;AAC1C,GACJ;AAAA,EACA;AAAA,IACI,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACH,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,YAAA,EAAa;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,eAAA,EAAgB;AAAA,MAC5C,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,cAAA,EAAe;AAAA,MACzC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,YAAA;AAAa;AAC1C;AAER,CAAA;AAEO,SAAS,aAAa,MAAA,EAAiC;AAC1D,EAAA,IAAI;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,EAAe,CAAE,iBAAgB,CAAE,QAAA;AAGzD,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC5B,QAAA,IAAI,IAAA,CAAK,UAAU,QAAA,EAAU;AACzB,UAAA,OAAO,QAAA;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAGA,IAAA,OAAO,KAAA;AAAA,EACX,SAAS,CAAA,EAAG;AAER,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;;;AClDA,IAAM,OAAA,GAAU,CAAC,IAAA,EAAM,SAAS,CAAA;AAChC,IAAM,SAAA,GAAoD;AAAA,EACzD,IAAA,EAAM,OAAA;AAAA,EACN,SAAA,EAAW;AACZ,CAAA;AAMO,SAAS,QAAQ,IAAA,EAAsB;AAC7C,EAAA,OAAO,IAAA,CACL,UAAS,CACT,WAAA,GACA,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,CACtB,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,OAAO,EAAE,CAAA,CACjB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACpB;AAMO,SAAS,SAAS,IAAA,EAAsB;AAC9C,EAAA,MAAM,aAAA,GAAgB,QAAQ,IAAI,CAAA;AAClC,EAAA,OACC,aAAA,CACE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAEjB,OAAA;AAAA;AAAA,IAEA,QAAA;AAAA,IACA,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA;AAAY,GAC3D;AAEH;AAQO,SAAS,WAAW,IAAA,EAAsB;AAChD,EAAA,MAAM,aAAA,GAAgB,QAAQ,IAAI,CAAA;AAClC,EAAA,OAAO,aAAA,CACL,OAAA,CAAQ,IAAA,EAAM,GAAG,EACjB,WAAA,EAAY;AACf;AASO,SAAS,UAAA,CAAW,MAA8B,MAAA,EAA0C;AAClG,EAAA,IAAI,YAAA,GAAe,OAAA;AAEnB,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC7B,IAAA,YAAA,GAAe,UAAU,MAAM,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,IAAI,IAAA,CAAK,IAAI,CAAA,CAAE,mBAAmB,YAAA,EAAc;AAAA,IACtD,QAAA,EAAU,KAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACL,CAAA;AACF;;;ACvEA,eAAsB,gBAAgB,WAAA,EAA0C;AAC/E,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAE7C,EAAA,IAAI;AACH,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAM,CAAA;AAEnC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACjB,MAAA,OAAA,CAAQ,MAAM,CAAA,qBAAA,EAAwB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AACvC,IAAA,OAAO,UAAA;AAAA,EACR,SAAS,KAAA,EAAO;AACf,IAAA,OAAA,CAAQ,KAAA,CAAM,uBAAuB,KAAK,CAAA;AAC1C,IAAA,OAAO,IAAA;AAAA,EACR;AACD;AAQA,eAAsB,sBAAsB,WAAA,EAAmC;AAC9E,EAAA,IAAI;AACH,IAAA,MAAM,UAAA,GAAa,MAAM,eAAA,CAAgB,WAAW,CAAA;AACpD,IAAA,OAAO,UAAA,IAAc,EAAA;AAAA,EACtB,SAAS,KAAA,EAAO;AACf,IAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAC3D,IAAA,OAAO,EAAA;AAAA,EACR;AACD;AASA,eAAsB,oBAAA,CACrB,WAAA,EACA,aAAA,EACA,SAAA,EACgB;AAChB,EAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,EAAA,IAAI;AACH,IAAA,MAAM,UAAA,GAAa,MAAM,eAAA,CAAgB,WAAW,CAAA;AAEpD,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,aAAA,CAAc,SAAA,GAAY,UAAA;AAG1B,MAAA,IAAI,SAAA,EAAW;AACd,QAAA,MAAM,UAAA,GAAa,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AACpD,QAAA,IAAI,UAAA,EAAY;AACf,UAAA,UAAA,CAAW,UAAU,GAAA,CAAI,GAAG,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,QACjD;AAAA,MACD;AAAA,IACD;AAAA,EACD,SAAS,KAAA,EAAO;AACf,IAAA,OAAA,CAAQ,KAAA,CAAM,wBAAwB,KAAK,CAAA;AAAA,EAC5C;AACD;;;ACtBO,IAAM,WAAA,GAAc;AACpB,IAAM,oBAAA,GAAuB;AAAA,EAClC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AA0DA,eAAsB,cACpB,MAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,IAAA;AAEhC,EAAA,MAAM,UAAA,GAAa,iBAAiB,MAAM,CAAA;AAE1C,EAAA,MAAM,SAAA,GAAuB;AAAA,IAC3B,UAAA;AAAA,IACA,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,MAAA;AAAA,IACA,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,UAAU,MAAA,CAAO;AAAA,GACnB;AAEA,EAAA,MAAM,OAAA,GAAU,cAAc,SAAS,CAAA;AAEvC,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,SAAA,KAAc,MAAA,GAAY,OAAO,SAAA,GAAY,IAAA;AAGtE,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,EAAS;AACrC,MAAA,IAAI,CAAC,MAAA,CAAO,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AAC/C,QAAA,MAAM,MAAA,GAAc,MAAM,UAAA,CAAW,IAAA,CAAK,iBAAA,EAAmB;AAAA,UAC3D,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,KAAA,IAAS,EAAA;AACpD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAA,CAAO,SAAS,MAAM,CAAA;AAAA,QACxB;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AAAA,IAEhB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,kBAAkB,SAAS,CAAA;AAAA,IACrC,KAAA,EAAO,eAAe,SAAS,CAAA;AAAA,IAC/B,IAAA,EAAM,cAAc,SAAS,CAAA;AAAA,IAC7B,YAAA,EAAc,sBAAsB,SAAS,CAAA;AAAA,IAC7C,SAAA,EAAW,mBAAmB,SAAS,CAAA;AAAA,IACvC,SAAA,EAAW,mBAAmB,SAAS,CAAA;AAAA,IACvC,GAAA,EAAK,aAAa,SAAS,CAAA;AAAA,IAC3B,KAAA,EAAO,eAAe,SAAS,CAAA;AAAA,IAC/B,WAAA,EAAa,qBAAqB,SAAS,CAAA;AAAA,IAC3C,QAAA,EAAU,kBAAkB,SAAS,CAAA;AAAA,IACrC,YAAA,EAAc,sBAAsB,SAAS,CAAA;AAAA,IAC7C,QAAA,EAAU,kBAAkB,SAAS,CAAA;AAAA,IAErC,aAAA,EAAe,CAAC,UAAA,KAAuB;AACrC,MAAA,SAAA,CAAU,UAAA,GAAa,UAAA;AAAA,IACzB,CAAA;AAAA,IAEA,aAAA,EAAe,MAAM,SAAA,CAAU,UAAA;AAAA,IAE/B,SAAA,EAAW,CAAC,MAAA,KAAmB;AAC7B,MAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AAAA,IACrB,CAAA;AAAA,IAEA,SAAA,EAAW,MAAM,SAAA,CAAU,MAAA;AAAA,IAE3B,SAAA,EAAW,CAACC,OAAAA,KAAmB;AAC7B,MAAA,SAAA,CAAU,MAAA,GAASA,OAAAA;AAAA,IACrB,CAAA;AAAA,IAEA,SAAA,EAAW,MAAM,SAAA,CAAU,MAAA;AAAA,IAE3B,eAAA,EAAiB,MAAA,CAAO,eAAA,KAAoB,MAAM,KAAA,CAAA;AAAA,IAClD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAU,MAAA,CAAO,QAAA;AAAA;AAAA,IAGjB,kBAAA;AAAA,IAEA,KAAA,EAAO;AAAA;AAAA,MAEL,aAAa,CAAC,UAAA,EAAiB,UAAU,IAAA,KACvC,WAAA,CAAY,YAAY,OAAO,CAAA;AAAA,MACjC,aAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA;AAAA,MAGA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,wBAAA;AAAA;AAAA,MAGA,iBAAA;AAAA;AAAA,MAGA,mBAAA;AAAA;AAAA,MAGA,QAAA;AAAA,MACA,YAAA;AAAA;AAAA,MAGA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA;AAAA,MAGA,qBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,OAAO,GAAA;AACT","file":"index.js","sourcesContent":["export * from './api';\n\nexport interface Payment {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttotal: number;\n\ttax?: {\n\t\tamount: number;\n\t\tmodeSnapshot?: string;\n\t\trateBps: number;\n\t\tlines: Array<{ rateBps: number; amount: number; label?: string; scope?: string }>;\n\t};\n\tpromoCode?: {\n\t\tid: string;\n\t\tcode: string;\n\t\ttype: string;\n\t\tvalue: number;\n\t};\n\ttype: PaymentMethodType;\n\tprovider?: {\n\t\tcustomerId: string;\n\t\tpaymentIntentId?: string;\n\t\tsubscriptionId?: string;\n\t\tpriceId?: string;\n\t};\n}\n\nexport enum PaymentMethodType {\n\tCash = \"CASH\",\n\tCreditCard = \"CREDIT_CARD\",\n\tFree = \"FREE\",\n}\n\nexport interface QuoteLineItem {\n\titemType: string;\n\tid: string;\n\tname: string;\n\tquantity: number;\n\tunitPrice: number;\n\ttotal: number;\n}\n\nexport interface PromoCodeValidation {\n\tid: string;\n\tcode: string;\n\tdiscountType: any;\n\tdiscountValue: number;\n\tconditions: any[];\n}\n\nexport interface Quote {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttotal: number;\n\tlineItems: QuoteLineItem[];\n\tshippingMethod: ShippingMethod | null;\n\tpromoCode: PromoCodeValidation | null;\n\tshippingMethods: ShippingMethod[];\n\tpaymentMethods: PaymentMethod[];\n\tpayment: Payment;\n\tchargeAmount: number;\n}\n\nexport interface Price {\n\tmarket: string;\n\tamount: number;\n\tcompareAt?: number;\n}\n\nexport interface Location {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tstate?: string | null;\n\tpostalCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\nexport interface EshopCartItem {\n\tid: string;\n\tproductId: string;\n\tvariantId: string;\n\tproductName: string;\n\tproductSlug: string;\n\tvariantAttributes: Record<string, any>;\n\tprice: Price;\n\tquantity: number;\n\taddedAt: number;\n}\n\nexport interface ReservationCartItem {\n\tid: string;\n\tserviceId: string;\n\tserviceName: string;\n\tdate: string;\n\tfrom: number;\n\tto: number;\n\ttimeText: string;\n\tproviderId?: string;\n\tblocks: any[];\n}\n\nexport interface PaymentProviderConfig {\n\ttype: \"STRIPE\";\n\tpublicKey: string;\n\tsecretKey: string;\n\twebhookSecret: string;\n}\n\nexport interface ShippingWeightTier {\n\tupToGrams: number;\n\tamount: number;\n}\n\nexport interface PaymentMethod {\n\tid: string;\n\tname: Record<string, string>;\n\ttype: PaymentMethodType;\n}\n\nexport interface ShippingMethod {\n\tid: string;\n\tname: Record<string, string>;\n\ttaxable: boolean;\n\tetaText: string;\n\tpickupLocation?: Location;\n\tamount: number;\n\tfreeAbove?: number;\n\tweightTiers?: ShippingWeightTier[];\n}\n\nexport interface Zone {\n\tid: string;\n\tname: string;\n\tmarketId: string;\n\tcountries: string[];\n\tstates: string[];\n\tpostalCodes: string[];\n\ttaxBps: number;\n\tpaymentMethods: PaymentMethod[];\n\tshippingMethods: ShippingMethod[];\n}\n\nexport interface Market {\n\tid: string;\n\tcurrency: string;\n\ttaxMode: \"EXCLUSIVE\" | \"INCLUSIVE\";\n}\n\n\nexport interface Language {\n\tid: string;\n}\n\nexport interface BusinessEmails {\n\tbilling: string;\n\tsupport: string;\n}\n\nexport interface OrderConfigs {\n\tisEmailRequired: boolean;\n\tisPhoneRequired: boolean;\n}\n\nexport interface BusinessReservationConfigs {\n\tisEmailRequired: boolean;\n\tisPhoneRequired: boolean;\n}\n\nexport interface BusinessConfig {\n\tlanguages: Language[];\n\tmarkets: Market[];\n\tzones: Zone[];\n\tbuildHooks: string[];\n\twebhooks: any[];\n\torderBlocks: any[];\n\treservationBlocks: any[];\n\torderConfigs: OrderConfigs;\n\treservationConfigs: BusinessReservationConfigs;\n\tpaymentProvider?: PaymentProviderConfig;\n\taiProvider?: any;\n\temails: BusinessEmails;\n}\n\nexport interface Business {\n\tid: string;\n\tname: string;\n\tconfigs?: BusinessConfig;\n}\n\nexport interface EshopStoreState {\n\tbusinessId: string;\n\tselectedShippingMethodId: string | null;\n\tuserToken: string | null;\n\tprocessingCheckout: boolean;\n\tloading: boolean;\n\terror: string | null;\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n}\n\nexport interface Block {\n\tid: string;\n\tkey: string;\n\ttype: string;\n\tproperties?: any;\n\tvalue?: any;\n}\n\nexport interface Seo {\n\tslug: Record<string, string>;\n\tmetaTitle: Record<string, string>;\n\tmetaDescription: Record<string, string>;\n\tcanonicalUrl: Record<string, string>;\n\togImage: string;\n}\n\nexport interface MediaResolution {\n\tid: string;\n\tsize: string;\n\turl: string;\n}\n\nexport interface Media {\n\tid: string;\n\tresolutions: { [key: string]: MediaResolution };\n\tmimeType: string;\n\ttitle?: string | null;\n\tdescription?: string | null;\n\talt?: string | null;\n\towner: string;\n\tmetadata?: string | null;\n\tuploadedAt: string;\n\tseo: Seo;\n}\n\nexport interface ApiResponse<T> {\n\tsuccess: boolean;\n\tdata?: T;\n\terror?: string;\n\tcursor?: string;\n\ttotal?: number;\n}\n\nexport interface PaginatedResponse<T> {\n\tdata: T[];\n\tmeta?: {\n\t\ttotal: number;\n\t\tpage: number;\n\t\tper_page: number;\n\t};\n}\n\nexport interface ReservationStoreState {\n\tcurrentStep: number;\n\ttotalSteps: number;\n\tsteps: Record<number, { name: string; labelKey: string }>;\n\tweekdays: string[];\n\tmonthYear: string;\n\tdays: any[];\n\tcurrent: Date;\n\tselectedDate: string | null;\n\tslots: any[];\n\tselectedSlot: any | null;\n\tselectedProvider: any | null;\n\tproviders: any[];\n\tloading: boolean;\n\tstartDate: string | null;\n\tendDate: string | null;\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tphoneSuccess: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n\tisPhoneVerified: boolean;\n\tisSendingCode: boolean;\n\tisVerifying: boolean;\n\tcodeSentAt: number | null;\n\tcanResendAt: number | null;\n\tguestToken: string | null;\n\tservice: any | null;\n\tbusiness: Business | null;\n\tcurrency: string;\n\treservationBlocks: Block[];\n\tapiUrl: string;\n\tbusinessId: string;\n\ttimezone: string;\n\ttzGroups: any;\n\titems: ReservationCartItem[];\n\tallowedPaymentMethods: string[];\n\tpaymentConfig: {\n\t\tprovider: PaymentProviderConfig | null;\n\t\tenabled: boolean;\n\t};\n}\n","// Error handling utilities (combined from errorCodes.ts and errorHelpers.ts)\n\n// Comprehensive error code system with both numeric codes and named constants\nexport const ERROR_CODES = {\n // General errors\n \"GENERAL.001\": \"GENERAL.BAD_REQUEST\",\n \"GENERAL.002\": \"GENERAL.VALIDATION_ERROR\",\n \"GENERAL.003\": \"GENERAL.FORBIDDEN_ERROR\",\n \"GENERAL.004\": \"GENERAL.INTERNAL_SERVER_ERROR\",\n \"GENERAL.005\": \"GENERAL.UNAUTHORIZED\",\n \"GENERAL.006\": \"GENERAL.UNAUTHENTICATED\",\n\n // Google/OAuth errors\n \"GOOGLE.001\": \"GOOGLE.INVALID_ORIGIN_URI\",\n \"GOOGLE.002\": \"GOOGLE.INVALID_REDIRECT_URI\",\n \"GOOGLE.003\": \"GOOGLE.FAILED_TO_CALL_API\",\n \"GOOGLE.004\": \"GOOGLE.FAILED_LOGIN\",\n \"GOOGLE.005\": \"GOOGLE.FAILED_LOGOUT\",\n \"GOOGLE.006\": \"GOOGLE.FAILED_REFRESH_TOKEN\",\n \"GOOGLE.007\": \"GOOGLE.INVALID_PROVIDER_PASSED\",\n\n // User errors\n \"USER.001\": \"USER.NOT_FOUND\",\n \"USER.002\": \"USER.FAILED_TO_CREATE\",\n \"USER.003\": \"USER.FAILED_TO_UPDATE\",\n \"USER.004\": \"USER.FAILED_TO_DELETE\",\n \"USER.005\": \"USER.EMAIL_EXISTS\",\n \"USER.006\": \"USER.FAILED_TO_GET_UPLOAD_URL\",\n\n // Business errors\n \"BUSINESS.001\": \"BUSINESS.NOT_FOUND\",\n \"BUSINESS.002\": \"BUSINESS.FAILED_TO_CREATE\",\n \"BUSINESS.003\": \"BUSINESS.FAILED_TO_UPDATE\",\n \"BUSINESS.004\": \"BUSINESS.FAILED_TO_DELETE\",\n \"BUSINESS.005\": \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n \"BUSINESS.006\": \"BUSINESS.NAME_REQUIRED\",\n \"BUSINESS.007\": \"BUSINESS.BUSINESS_ID_REQUIRED\",\n \"BUSINESS.010\": \"BUSINESS.DESCRIPTION_REQUIRED\",\n \"BUSINESS.011\": \"BUSINESS.SLUG_INVALID\",\n\n // Provider errors\n \"PROVIDER.001\": \"PROVIDER.NOT_FOUND\",\n \"PROVIDER.002\": \"PROVIDER.FAILED_TO_CREATE\",\n \"PROVIDER.003\": \"PROVIDER.FAILED_TO_UPDATE\",\n \"PROVIDER.004\": \"PROVIDER.FAILED_TO_DELETE\",\n \"PROVIDER.005\": \"PROVIDER.FAILED_TO_GET_UPLOAD_URL\",\n \"PROVIDER.006\": \"PROVIDER.NAME_REQUIRED\",\n \"PROVIDER.007\": \"PROVIDER.BUSINESS_ID_REQUIRED\",\n \"PROVIDER.008\": \"PROVIDER.DESCRIPTION_REQUIRED\",\n};\n\n// Named error constants for direct access\nexport const ERROR_CONSTANTS = {\n GENERAL: {\n BAD_REQUEST: \"GENERAL.BAD_REQUEST\",\n VALIDATION_ERROR: \"GENERAL.VALIDATION_ERROR\",\n FORBIDDEN_ERROR: \"GENERAL.FORBIDDEN_ERROR\",\n INTERNAL_SERVER_ERROR: \"GENERAL.INTERNAL_SERVER_ERROR\",\n UNAUTHORIZED: \"GENERAL.UNAUTHORIZED\",\n UNAUTHENTICATED: \"GENERAL.UNAUTHENTICATED\",\n },\n USER: {\n NOT_FOUND: \"USER.NOT_FOUND\",\n FAILED_TO_CREATE: \"USER.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"USER.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"USER.FAILED_TO_DELETE\",\n EMAIL_EXISTS: \"USER.EMAIL_EXISTS\",\n FAILED_TO_GET_UPLOAD_URL: \"USER.FAILED_TO_GET_UPLOAD_URL\",\n },\n BUSINESS: {\n NOT_FOUND: \"BUSINESS.NOT_FOUND\",\n FAILED_TO_CREATE: \"BUSINESS.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"BUSINESS.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"BUSINESS.FAILED_TO_DELETE\",\n FAILED_TO_GET_UPLOAD_URL: \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n NAME_REQUIRED: \"BUSINESS.NAME_REQUIRED\",\n BUSINESS_ID_REQUIRED: \"BUSINESS.BUSINESS_ID_REQUIRED\",\n DESCRIPTION_REQUIRED: \"BUSINESS.DESCRIPTION_REQUIRED\",\n SLUG_INVALID: \"BUSINESS.SLUG_INVALID\",\n },\n};\n\nexport type ServerError = {\n message: string;\n error: string;\n statusCode: number;\n validationErrors: {\n field: string;\n error: string;\n }[];\n};\n\nexport type ValidationError = {\n field: string;\n error: string;\n};\n\nexport type RequestError = {\n validationErrors: ValidationError[];\n};\n\n// Utility functions for error handling\nexport function getErrorMessage(code: string): string {\n return ERROR_CODES[code as keyof typeof ERROR_CODES] || code;\n}\n\nexport function isErrorCode(code: string): boolean {\n return code in ERROR_CODES;\n}\n\nexport const transformErrors = (zodError: any): ValidationError[] => {\n const customErrors: ValidationError[] = [];\n\n if (!zodError.issues) return customErrors;\n\n zodError.issues.forEach((issue: any) => {\n const field = issue.path.join(\".\");\n const error = issue.message;\n\n if (\n !customErrors.some(\n (customError) =>\n customError.field === field && customError.error === error\n )\n ) {\n customErrors.push({ field, error });\n }\n });\n\n return customErrors;\n};\n\nexport const convertServerErrorToRequestError = (\n serverError: ServerError,\n renameRules?: { [key: string]: string }\n): RequestError => {\n return {\n ...serverError,\n validationErrors: serverError.validationErrors.map((validationError) => {\n const field =\n renameRules && renameRules[validationError.field]\n ? renameRules[validationError.field]\n : validationError.field;\n\n return {\n field: field,\n error: validationError.error || \"GENERAL.VALIDATION_ERROR\",\n };\n }),\n };\n};\n\n// Export for backward compatibility\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;\n","/**\n * Query parameter builder utility that maintains exact backward compatibility\n * with existing API parameter encoding patterns\n */\n\nexport interface QueryParams {\n [key: string]: string | number | boolean | string[] | number[] | null | undefined;\n}\n\n/**\n * Builds a query string from parameters following the exact encoding patterns\n * used by the existing API implementation:\n * - Arrays: JSON.stringify then encodeURIComponent\n * - Strings: encodeURIComponent\n * - Numbers: No encoding\n * - Null/undefined: Skip\n */\nexport function buildQueryString(params: QueryParams): string {\n const queryParts: string[] = [];\n \n Object.entries(params).forEach(([key, value]) => {\n // Skip null and undefined values\n if (value === null || value === undefined) {\n return;\n }\n \n // Handle arrays: JSON.stringify then encode\n if (Array.isArray(value)) {\n const jsonString = JSON.stringify(value);\n queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n }\n // Handle strings: encode\n else if (typeof value === 'string') {\n queryParts.push(`${key}=${encodeURIComponent(value)}`);\n }\n // Handle numbers and booleans: no encoding\n else if (typeof value === 'number' || typeof value === 'boolean') {\n queryParts.push(`${key}=${value}`);\n }\n // Handle objects (in case needed in future): JSON.stringify then encode\n else if (typeof value === 'object') {\n const jsonString = JSON.stringify(value);\n queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n }\n });\n \n return queryParts.length > 0 ? `?${queryParts.join('&')}` : '';\n}\n\n/**\n * Appends query string to a URL\n */\nexport function appendQueryString(url: string, params: QueryParams): string {\n const queryString = buildQueryString(params);\n return queryString ? `${url}${queryString}` : url;\n}","import {\n\tconvertServerErrorToRequestError,\n\ttype ServerError\n} from '../utils/errors';\nimport { buildQueryString, type QueryParams } from '../utils/queryParams';\n\nexport interface AuthTokens {\n\taccessToken: string;\n\trefreshToken?: string;\n\tprovider?: string;\n\texpiresAt?: number;\n\tuserId?: string;\n\tisGuest?: boolean;\n}\n\nexport interface HttpClientConfig {\n\tbaseUrl: string;\n\n\tbusinessId: string;\n\n\tgetToken: () => Promise<AuthTokens> | AuthTokens;\n\n\tsetToken: (tokens: AuthTokens) => void;\n\n\tautoGuest?: boolean;\n\n\tlogout: () => void;\n\n\tnavigate?: (path: string) => void;\n\n\tloginFallbackPath?: string;\n\n\tisAuthenticated?: () => boolean;\n}\n\ntype SuccessCallback<T = any> = (ctx: {\n\tdata: T;\n\tmethod: string;\n\turl: string;\n\tstatus: number;\n\trequest?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n}) => void | Promise<void>;\n\ntype ErrorCallback = (ctx: {\n\terror: any;\n\tmethod: string;\n\turl: string;\n\tstatus?: number;\n\trequest?: any;\n\tresponse?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n\taborted?: boolean;\n}) => void | Promise<void>;\n\nexport function createHttpClient(cfg: HttpClientConfig) {\n\tconst refreshEndpoint = `${cfg.baseUrl}/v1/users/refresh-access-token`;\n\tlet refreshPromise: Promise<void> | null = null;\n\n\tasync function ensureFreshToken() {\n\t\tif (refreshPromise) {\n\t\t\treturn refreshPromise;\n\t\t}\n\n\t\trefreshPromise = (async () => {\n\t\t\tconst { refreshToken, provider } = await cfg.getToken();\n\t\t\tif (!refreshToken) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('No refresh token available');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst refRes = await fetch(refreshEndpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { Accept: 'application/json', 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ provider, refreshToken })\n\t\t\t});\n\n\t\t\tif (!refRes.ok) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('Token refresh failed');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst data = await refRes.json();\n\t\t\tcfg.setToken(data);\n\t\t})().finally(() => {\n\t\t\trefreshPromise = null;\n\t\t});\n\n\t\treturn refreshPromise;\n\t}\n\n\tasync function request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: any,\n\t\toptions?: {\n\t\t\tonSuccess?: SuccessCallback<T>;\n\t\t\tonError?: ErrorCallback;\n\t\t\theaders?: Record<string, string>;\n\t\t\ttransformRequest?: (data: any) => any;\n\t\t\tparams?: QueryParams;\n\t\t\t_retried?: boolean;\n\t\t}\n\t): Promise<T> {\n\t\tif (options?.transformRequest) {\n\t\t\tbody = options.transformRequest(body);\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(options?.headers || {})\n\t\t};\n\n\tlet { accessToken, expiresAt, provider } = await cfg.getToken();\n\n\tconst nowSec = Date.now() / 1000;\n\tif (expiresAt && nowSec > expiresAt) {\n\t\tawait ensureFreshToken();\n\t\tconst tokens = await cfg.getToken();\n\t\taccessToken = tokens.accessToken;\n\t\tprovider = tokens.provider;\n\t}\n\n\tif (accessToken) {\n\t\t// Use X-API-Key header for API tokens, Authorization for JWT/OAuth\n\t\tif (provider === 'API') {\n\t\t\theaders['X-API-Key'] = accessToken;\n\t\t} else {\n\t\t\theaders['Authorization'] = `Bearer ${accessToken}`;\n\t\t}\n\t}\n\n\t\tconst finalPath = options?.params ? path + buildQueryString(options.params) : path;\n\n\t\tconst fetchOpts: any = { method, headers };\n\t\tif (!['GET', 'DELETE'].includes(method) && body !== undefined) {\n\t\t\tfetchOpts.body = JSON.stringify(body);\n\t\t}\n\n\t\tconst fullUrl = `${cfg.baseUrl}${finalPath}`;\n\t\tlet res: Response;\n\t\tlet data: any;\n\t\tconst startedAt = Date.now();\n\n\t\ttry {\n\t\t\tres = await fetch(fullUrl, fetchOpts);\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error(error instanceof Error ? error.message : 'Network request failed');\n\t\t\terr.name = 'NetworkError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, aborted: false })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\t// Handle 401: refresh and retry once\n\t\tif (res.status === 401 && !options?.['_retried']) {\n\t\t\ttry {\n\t\t\t\tawait ensureFreshToken();\n\t\t\t\tconst tokens = await cfg.getToken();\n\t\t\t\theaders['Authorization'] = `Bearer ${tokens.accessToken}`;\n\t\t\t\tfetchOpts.headers = headers;\n\t\t\t\treturn request<T>(method, path, body, { ...options, _retried: true });\n\t\t\t} catch (refreshError) {\n\t\t\t\t// Fall through to normal error handling\n\t\t\t}\n\t\t}\n\n\t\t// Safe JSON parsing: handle 204, empty body, non-JSON\n\t\ttry {\n\t\t\tconst contentLength = res.headers.get('content-length');\n\t\t\tconst contentType = res.headers.get('content-type');\n\t\t\tif (res.status === 204 || contentLength === '0' || !contentType?.includes('application/json')) {\n\t\t\t\tdata = {};\n\t\t\t} else {\n\t\t\t\tdata = await res.json();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error('Failed to parse response');\n\t\t\terr.name = 'ParseError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\terr.status = res.status;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, status: res.status })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (!res.ok) {\n\t\t\tconst serverErr: ServerError = data;\n\t\t\tconst reqErr = convertServerErrorToRequestError(serverErr);\n\t\t\tconst err: any = new Error(serverErr.message || 'Request failed');\n\t\t\terr.name = 'ApiError';\n\t\t\terr.statusCode = serverErr.statusCode || res.status;\n\t\t\terr.validationErrors = reqErr.validationErrors;\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tif (requestId) err.requestId = requestId;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\turl: fullUrl,\n\t\t\t\t\t\tstatus: res.status,\n\t\t\t\t\t\tresponse: serverErr,\n\t\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t\t})\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\nif (options?.onSuccess && method !== 'GET') {\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tPromise.resolve(\n\t\t\t\toptions.onSuccess({\n\t\t\t\t\tdata: data as T,\n\t\t\t\t\tmethod,\n\t\t\t\t\turl: fullUrl,\n\t\t\t\t\tstatus: res.status,\n\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t})\n\t\t\t).catch(() => {});\n\t\t}\n\t\treturn data as T;\n\t}\n\n\treturn {\n\t\tget: <T>(path: string, opts?: any) => request<T>('GET', path, undefined, opts),\n\t\tpost: <T>(path: string, body: any, opts?: any) => request<T>('POST', path, body, opts),\n\t\tput: <T>(path: string, body: any, opts?: any) => request<T>('PUT', path, body, opts),\n\t\tpatch: <T>(path: string, body: any, opts?: any) => request<T>('PATCH', path, body, opts),\n\t\tdelete: <T>(path: string, opts?: any) => request<T>('DELETE', path, undefined, opts)\n\t};\n}\n","import type { ApiConfig } from '../index';\nimport type {\n UpdateUserProfileParams,\n LoginUserParams,\n RegisterUserParams,\n AddPhoneNumberParams,\n PhoneNumberConfirmParams,\n SearchUsersParams,\n SetRoleParams,\n ConfirmUserParams,\n GetLoginUrlParams,\n ForgotPasswordParams,\n ResetForgotPasswordParams,\n ResetPasswordParams,\n DeleteUserParams,\n GetMeParams,\n LogoutParams,\n UserSubscribeParams,\n RequestOptions\n} from '../types/api';\n\nexport const createUserApi = (apiConfig: ApiConfig) => {\n return {\n // ===== USER PROFILE =====\n\n async updateUser(params: UpdateUserProfileParams, options?: RequestOptions) {\n const payload: any = {};\n\n if (params.name !== undefined) payload.name = params.name;\n if (params.phoneNumbers !== undefined) payload.phoneNumbers = params.phoneNumbers;\n if (params.addresses !== undefined) payload.addresses = params.addresses;\n if (params.apiTokens !== undefined) payload.apiTokens = params.apiTokens;\n\n return apiConfig.httpClient.put('/v1/users', payload, options);\n },\n\n async deleteUser(params: DeleteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete('/v1/users', options);\n },\n\n async addPhoneNumber(params: AddPhoneNumberParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number', params, options);\n },\n\n async phoneNumberConfirm(params: PhoneNumberConfirmParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number/confirm', params, options);\n },\n\n async getMe(params: GetMeParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/me', options);\n },\n\n async searchUsers(params: SearchUsersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/search', {\n ...options,\n params: {\n ...params,\n businessId: apiConfig.businessId\n }\n });\n },\n\n async setRole(params: SetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/set-role', params, options);\n },\n\n // ===== AUTHENTICATION =====\n\n async loginUser(params: LoginUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/login', params, options);\n },\n\n async registerUser(params: RegisterUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/register', params, options);\n },\n\n async logout(params: LogoutParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/logout', {}, options);\n },\n\n async confirmUser(params: ConfirmUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/confirm', params, options);\n },\n\n async getLoginUrl(params: GetLoginUrlParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/login/url', {\n ...options,\n params\n });\n },\n\n // ===== PASSWORD MANAGEMENT =====\n\n async forgotPassword(params: ForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/forgot-password', params, options);\n },\n\n async resetForgotPassword(params: ResetForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-forgot-password', params, options);\n },\n\n async resetPassword(params: ResetPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-password', params, options);\n },\n\n async subscribe(params: UserSubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/subscribe', params, options);\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateBusinessParams,\n UpdateBusinessParams,\n DeleteBusinessParams,\n GetBusinessParams,\n GetBusinessesParams,\n GetBusinessParentsParams,\n TriggerBuildsParams,\n GetSubscriptionParams,\n GetSubscriptionPlansParams,\n SubscribeParams,\n CreatePortalSessionParams,\n InviteUserParams,\n HandleInvitationParams,\n TestWebhookParams,\n GetBusinessMediaParams2,\n SetProviderScheduleParams,\n ProcessRefundParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createBusinessApi = (apiConfig: ApiConfig) => {\n return {\n async createBusiness(\n params: CreateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(`/v1/businesses`, params, options);\n },\n\n async updateBusiness(\n params: UpdateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${params.id}`,\n params,\n options\n );\n },\n\n async deleteBusiness(\n params: DeleteBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${params.id}`,\n options\n );\n },\n\n async getBusiness(params: GetBusinessParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}`,\n options\n );\n },\n\n async getBusinesses(params: GetBusinessesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/businesses`, options);\n },\n\n async getBusinessParents(\n params: GetBusinessParentsParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/parents`,\n options\n );\n },\n\n async triggerBuilds(params: TriggerBuildsParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${params.id}/trigger-builds`,\n {},\n options\n );\n },\n\n async getSubscriptionPlans(\n params: GetSubscriptionPlansParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\"/v1/businesses/plans\", options);\n },\n\n async getSubscription(\n params: GetSubscriptionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/subscription`,\n options\n );\n },\n async subscribe(params: SubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/subscribe`,\n params,\n options\n );\n },\n\n async createPortalSession(\n params: CreatePortalSessionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/subscription/portal`,\n params,\n options\n );\n },\n\n async inviteUser(params: InviteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n async handleInvitation(\n params: HandleInvitationParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n\n async testWebhook(params: TestWebhookParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/webhooks/test`,\n params.webhook,\n options\n );\n },\n\n async getBusinessMedia(\n params: GetBusinessMediaParams2,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(`/v1/businesses/${params.id}/media`, {\n ...options,\n params: {\n cursor: params.cursor,\n limit: params.limit || 20,\n },\n });\n },\n\n async setProviderSchedule(\n params: SetProviderScheduleParams,\n options?: RequestOptions\n ) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${id}/schedules`,\n payload,\n options\n );\n },\n\n async processRefund(params: ProcessRefundParams, options?: RequestOptions) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${id}/refund`,\n payload,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n UploadBusinessMediaParams,\n DeleteBusinessMediaParams,\n GetBusinessMediaParams,\n UpdateMediaParams,\n RequestOptions\n} from '../types/api';\n\nexport const createMediaApi = (apiConfig: ApiConfig) => {\n return {\n async uploadBusinessMedia(params: UploadBusinessMediaParams, options?: RequestOptions) {\n const _options = options;\n const { files = [], urls = [] } = params;\n const url = `${apiConfig.baseUrl}/v1/businesses/${apiConfig.businessId}/media`;\n\n const formData = new FormData();\n files.forEach((file) => formData.append('files', file));\n urls.forEach((url) => formData.append('files', url));\n\n const tokens = await apiConfig.getToken();\n const response = await fetch(url, {\n method: 'POST',\n body: formData,\n headers: {\n Authorization: `Bearer ${tokens.accessToken}`\n }\n });\n\n if (!response.ok) {\n throw new Error('Upload failed, server said no');\n }\n\n return await response.json();\n },\n\n async deleteBusinessMedia(params: DeleteBusinessMediaParams, options?: RequestOptions) {\n const { id, mediaId } = params;\n\n return apiConfig.httpClient.delete(\n `/v1/businesses/${id}/media/${mediaId}`,\n options\n );\n },\n\n async getBusinessMedia(params: GetBusinessMediaParams, options?: RequestOptions) {\n const _options = options;\n const { cursor = null, limit = 20 } = params;\n const url = `${apiConfig.baseUrl}/v1/businesses/${apiConfig.businessId}/media`;\n\n const queryParams: any = { limit };\n if (cursor) queryParams.cursor = cursor;\n\n const queryString = new URLSearchParams(queryParams).toString();\n const response = await fetch(`${url}?${queryString}`);\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => null);\n throw new Error(errorData?.message || 'Failed to fetch media');\n }\n\n return await response.json();\n },\n\n async updateMedia(params: UpdateMediaParams, options?: RequestOptions) {\n const { mediaId, ...updateData } = params;\n \n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/media/${mediaId}`,\n updateData,\n options\n );\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateRoleParams,\n UpdateRoleParams,\n DeleteRoleParams,\n GetRoleParams,\n GetRolesParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createRoleApi = (apiConfig: ApiConfig) => {\n return {\n async createRole(\n params: CreateRoleParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(`/v1/roles`, params, options);\n },\n\n async updateRole(params: UpdateRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/roles/${params.id}`,\n params,\n options\n );\n },\n\n async deleteRole(params: DeleteRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(`/v1/roles/${params.id}`, options);\n },\n\n async getRole(params: GetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/roles/${params.id}`, options);\n },\n\n async getRoles(params: GetRolesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/roles`, {\n ...options,\n params: {\n action: params.action,\n businessId: apiConfig.businessId,\n },\n });\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tTrackEmailOpenParams,\n\tGetDeliveryStatsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createNotificationApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync trackEmailOpen(params: TrackEmailOpenParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/email/${params.trackingPixelId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getDeliveryStats(params: GetDeliveryStatsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/stats/${apiConfig.businessId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tCreatePromoCodeParams,\n\tUpdatePromoCodeParams,\n\tDeletePromoCodeParams,\n\tGetPromoCodeParams,\n\tGetPromoCodesParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createPromoCodeApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync createPromoCode(params: CreatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.post(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync updatePromoCode(params: UpdatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.put(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync deletePromoCode(params: DeletePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.delete(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCode(params: GetPromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCodes(params: GetPromoCodesParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/businesses/${apiConfig.businessId}/promo-codes`, {\n\t\t\t\t...options,\n\t\t\t\tparams\n\t\t\t});\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tGetAnalyticsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createAnalyticsApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync getAnalytics(params: GetAnalyticsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/analytics/${apiConfig.businessId}`, {\n\t\t\t\t...options,\n\t\t\t\tparams: params\n\t\t\t});\n\t\t}\n\t};\n};\n","import type { ApiConfig } from \"../index\";\n\n/**\n * Entities that support SEO slugs (have seo.slug field in their schema)\n * Only these entities can use slug-based queries with locale\n */\nexport type SeoEnabledEntity = \"product\" | \"service\" | \"collection\" | \"entry\";\n\n/**\n * Entities that ONLY support UUID-based queries (no SEO slugs)\n */\nexport type UuidOnlyEntity = \"order\" | \"reservation\" | \"provider\";\n\n/**\n * Check if a string is a valid UUID (v4 format)\n */\nexport const isUuid = (str: string): boolean => {\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n return uuidRegex.test(str);\n};\n\n/**\n * Auto-format slug queries with businessId:locale:slug pattern for SEO-enabled entities\n *\n * **ONLY use this for entities with SEO support:**\n * - Product (has seo.slug)\n * - Service (has seo.slug)\n * - Collection (has seo.slug)\n * - Entry (has seo.slug)\n *\n * **DO NOT use for:**\n * - Order (UUID only)\n * - Reservation (UUID only)\n * - Provider (UUID only)\n *\n * @param id - The ID or slug to format\n * @param apiConfig - The API configuration containing businessId and locale\n * @returns Formatted ID string\n *\n * Rules:\n * - If it's a UUID, return as-is\n * - If it already contains colons (pre-formatted), return as-is\n * - Otherwise, format as businessId:locale:slug\n *\n * @example\n * // UUID - returns unchanged\n * formatIdOrSlug(\"123e4567-e89b-12d3-a456-426614174000\", config)\n * // => \"123e4567-e89b-12d3-a456-426614174000\"\n *\n * // Pre-formatted - returns unchanged\n * formatIdOrSlug(\"myBusiness:en:website\", config)\n * // => \"myBusiness:en:website\"\n *\n * // Plain slug - auto-formats with businessId:locale:slug\n * formatIdOrSlug(\"website\", config)\n * // => \"businessId:en:website\"\n */\nexport const formatIdOrSlug = (id: string, apiConfig: ApiConfig): string => {\n // If it's already a UUID, return as-is\n if (isUuid(id)) {\n return id;\n }\n\n // If it already contains colons, assume it's already formatted\n if (id.includes(\":\")) {\n return id;\n }\n\n // Otherwise, format as businessId:locale:slug\n return `${apiConfig.businessId}:${apiConfig.locale}:${id}`;\n};\n","// Block utilities (extracted from index.ts)\n\nexport interface Block {\n id: string;\n key: string;\n type: string;\n properties: any;\n value: any;\n}\n\nexport interface Collection {\n id: string;\n blocks: Block[];\n}\n\nexport interface CollectionEntry {\n id: string;\n collection_id: string;\n blocks: Block[];\n}\n\nexport function getBlockLabel(block: any, locale: string = \"en\"): string {\n if (!block) return \"\";\n\n if (block.properties?.label) {\n if (typeof block.properties.label === \"object\") {\n return (\n block.properties.label[locale] ||\n block.properties.label.en ||\n Object.values(block.properties.label)[0] ||\n \"\"\n );\n }\n if (typeof block.properties.label === \"string\") {\n return block.properties.label;\n }\n }\n\n // Convert key to readable format\n return (\n block.key\n ?.replace(/_/g, \" \")\n .replace(/\\b\\w/g, (l: string) => l.toUpperCase()) || \"\"\n );\n}\n\nexport function formatBlockValue(block: any): string {\n if (!block || block.value === null || block.value === undefined) {\n return \"\";\n }\n\n switch (block.type) {\n case \"BOOLEAN\":\n return block.value ? \"Yes\" : \"No\";\n case \"NUMBER\":\n // Handle date/datetime variants\n if (\n block.properties?.variant === \"DATE\" ||\n block.properties?.variant === \"DATE_TIME\"\n ) {\n try {\n return new Date(block.value).toLocaleDateString();\n } catch (e) {\n return String(block.value);\n }\n }\n return String(block.value);\n case \"RELATIONSHIP\":\n if (Array.isArray(block.value) && block.value.length > 0) {\n const firstValue = block.value[0];\n if (firstValue && firstValue.mimeType) {\n return firstValue.name || firstValue.id || \"Media\";\n }\n return firstValue.title || firstValue.name || firstValue.id || \"Entry\";\n }\n return String(block.value);\n default:\n return String(block.value);\n }\n}\n\nexport function prepareBlocksForSubmission(formData: any): any[] {\n const preparedBlocks = [];\n\n Object.keys(formData).forEach((key) => {\n if (formData[key] !== null && formData[key] !== undefined) {\n preparedBlocks.push({\n key,\n value: [formData[key]],\n });\n }\n });\n\n return preparedBlocks;\n}\n\nexport function extractBlockValues(blocks: any[]): Record<string, any> {\n const values: Record<string, any> = {};\n\n blocks.forEach((block) => {\n if (block.value && block.value.length > 0) {\n values[block.key] = block.value[0];\n } else {\n values[block.key] = null;\n }\n });\n\n return values;\n}\n\n// Extract localized text value from a block, handling multilingual content\nexport function getBlockTextValue(block: any, locale: string = \"en\"): string {\n if (!block || !block.value || block.value.length === 0) return \"\";\n\n const firstValue = block.value[0];\n\n // Handle multilingual object\n if (typeof firstValue === \"object\" && firstValue !== null) {\n // Try specified locale first, then 'en', then first available language\n if (firstValue[locale]) return firstValue[locale];\n if (firstValue.en) return firstValue.en;\n const values = Object.values(firstValue);\n return String(values[0] || \"\");\n }\n\n // Handle simple string\n return String(firstValue);\n}\n\n// Legacy functions for backward compatibility\nexport const getBlockValue = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value[0];\n};\n\nexport const getBlockValues = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value;\n};\n\nfunction unwrapBlock(block: any, locale: string) {\n if (!block?.type || block.value === undefined) return block;\n\n // Nested objects / lists → recurse for every child\n if (block.type === \"BLOCK\") {\n return block.value.map((obj: Record<string, any>) => {\n const parsed: Record<string, any> = {};\n for (const [k, v] of Object.entries(obj)) {\n parsed[k] = unwrapBlock(v, locale);\n }\n return parsed;\n });\n }\n\n // Primitive leaves (text/number/boolean/media …)\n const isLocalized = block.type === \"TEXT\";\n const isList =\n block.properties?.ui === \"list\" ||\n (block.properties?.maxValues ?? 1) > 1 ||\n block.value.length > 1;\n\n if (isList) {\n return isLocalized\n ? block.value.map((v: Record<string, any>) => v[locale] || v[\"en\"])\n : [...block.value];\n }\n\n return isLocalized\n ? block.value[0][locale] || block.value[0][\"en\"]\n : block.value[0];\n}\n\nexport const getBlockObjectValues = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n const parsed = values.map((obj: Record<string, any>) => {\n const res = obj.value.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n\n return acc;\n }, {});\n\n return res;\n });\n\n return parsed;\n};\n\nexport const getBlockFromArray = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n return values.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n return acc;\n });\n};\n\nexport const getImageUrl = (imageBlock: any, isBlock = true) => {\n if (!imageBlock) return null;\n\n if (\n imageBlock.type === \"RELATIONSHIP_MEDIA\" &&\n Array.isArray(imageBlock.value)\n ) {\n const mediaValue = imageBlock.value[0];\n if (mediaValue && mediaValue.mimeType) {\n // Handle media with resolutions structure\n if (\n mediaValue.resolutions &&\n mediaValue.resolutions.original &&\n mediaValue.resolutions.original.url\n ) {\n return mediaValue.resolutions.original.url;\n }\n\n // Handle direct URL on media\n if (mediaValue.url) {\n return mediaValue.url;\n }\n }\n return null;\n }\n\n if (isBlock) {\n if (typeof imageBlock === \"string\") {\n return imageBlock;\n }\n\n if (imageBlock.url) {\n return imageBlock.url;\n }\n }\n\n if (\n imageBlock.resolutions &&\n imageBlock.resolutions.original &&\n imageBlock.resolutions.original.url\n ) {\n return imageBlock.resolutions.original.url;\n }\n\n return null;\n};\n\nexport const translateMap = (\n labels: any,\n lang: string,\n fallback = \"unknown\"\n) => {\n let parsedLang = \"en\";\n\n if (lang === \"sr\") {\n parsedLang = \"bih\";\n }\n\n if (!labels) {\n return fallback;\n }\n\n const label = labels[parsedLang];\n if (!label) {\n return fallback;\n }\n\n return label;\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateCollectionParams,\n UpdateCollectionParams,\n DeleteCollectionParams,\n GetCollectionParams,\n GetCollectionsParams,\n GetEntriesParams,\n CreateEntryParams,\n UpdateEntryParams,\n GetCollectionEntryParams,\n DeleteCollectionEntryParams,\n GenerateBlocksParams,\n GetVariableMetadataParams,\n SendEntryParams,\n GetCollectionSubscribersParams,\n RequestOptions,\n} from \"../types/api\";\nimport { formatIdOrSlug } from \"../utils/slug\";\nimport {\n getBlockFromArray,\n getBlockObjectValues,\n getImageUrl,\n} from \"../utils/blocks\";\n\nexport const createCmsApi = (apiConfig: ApiConfig) => {\n return {\n // ===== COLLECTIONS =====\n\n async createCollection(\n params: CreateCollectionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections`,\n params,\n options\n );\n },\n\n async updateCollection(\n params: UpdateCollectionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.id}`,\n params,\n options\n );\n },\n\n async deleteCollection(\n params: DeleteCollectionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.id}`,\n options\n );\n },\n\n async getCollection(params: GetCollectionParams, options?: RequestOptions) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${formattedId}`,\n options\n );\n\n // Add helper methods that automatically use SDK's current locale\n return {\n ...response,\n getBlock(key: string) {\n return getBlockFromArray(response, key, apiConfig.locale);\n },\n getBlockValues(key: string) {\n return getBlockObjectValues(response, key, apiConfig.locale);\n },\n getImage(key: string) {\n const block = getBlockFromArray(response, key, apiConfig.locale);\n return getImageUrl(block, true);\n },\n };\n },\n\n async getCollections(\n params: GetCollectionsParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections`,\n {\n ...options,\n params,\n }\n );\n },\n\n async generateBlocks(\n params: GenerateBlocksParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections/blocks/generate`,\n params,\n options\n );\n },\n\n // ===== ENTRIES =====\n\n async getCollectionEntries(\n params: GetEntriesParams,\n options?: RequestOptions\n ) {\n const { collectionId, ...queryParams } = params;\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries`,\n {\n ...options,\n params: queryParams,\n }\n );\n },\n\n async createCollectionEntry(\n params: CreateEntryParams,\n options?: RequestOptions\n ) {\n const { collectionId, ...payload } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries`,\n { ...payload, collectionId },\n options\n );\n },\n\n async updateCollectionEntry(\n params: UpdateEntryParams,\n options?: RequestOptions\n ) {\n const { collectionId, id, ...payload } = params;\n\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries/${id}`,\n { ...payload, collectionId },\n options\n );\n },\n\n async deleteCollectionEntry(\n params: DeleteCollectionEntryParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.collectionId}/entries/${params.id}`,\n options\n );\n },\n\n async getCollectionEntry(\n params: GetCollectionEntryParams,\n options?: RequestOptions\n ) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.collectionId}/entries/${formattedId}`,\n options\n );\n },\n\n async sendEntry(params: SendEntryParams, options?: RequestOptions) {\n const { collectionId, entryId, scheduledAt } = params;\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries/${entryId}/send`,\n {\n businessId: apiConfig.businessId,\n entryId,\n scheduledAt: scheduledAt ?? Math.floor(Date.now() / 1000),\n },\n options\n );\n },\n\n // ===== VARIABLES / METADATA =====\n\n async getVariableMetadata(\n params: GetVariableMetadataParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/collections/entry-types/${params.entryType}/variables`,\n options\n );\n },\n\n // ===== COLLECTION SUBSCRIPTIONS =====\n\n async getCollectionSubscribers(\n params: GetCollectionSubscribersParams,\n options?: RequestOptions\n ) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${formattedId}/subscribers`,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateProductParams,\n UpdateProductParams,\n DeleteProductParams,\n GetProductParams,\n GetProductsParams,\n GetQuoteParams,\n CheckoutParams,\n CreateOrderParams,\n UpdateOrderParams,\n GetOrderParams,\n GetOrdersParams,\n RequestOptions,\n} from \"../types/api\";\n\nimport { formatIdOrSlug } from \"../utils/slug\";\n\nexport const createEshopApi = (apiConfig: ApiConfig) => {\n return {\n // ===== PRODUCTS =====\n\n async createProduct(params: CreateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/products`,\n params,\n options,\n );\n },\n\n async updateProduct(params: UpdateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteProduct(params: DeleteProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n options,\n );\n },\n\n async getProduct(params: GetProductParams, options?: RequestOptions) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/products/${formattedId}`,\n options,\n );\n\n // Add helper methods that automatically use SDK's current locale\n return {\n ...response,\n getName() {\n const locale = apiConfig.locale;\n return response.name?.[locale] || response.name?.en || response.name || '';\n },\n getDescription() {\n const locale = apiConfig.locale;\n return response.description?.[locale] || response.description?.en || response.description || '';\n }\n };\n },\n\n async getProducts(params: GetProductsParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${encodeURIComponent(apiConfig.businessId)}/products`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== ORDERS =====\n\n async createOrder(params: CreateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n params,\n options,\n );\n },\n\n async updateOrder(params: UpdateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/orders/update`,\n params,\n options,\n );\n },\n\n async getOrder(params: GetOrderParams, options?: RequestOptions) {\n // Orders use UUID only - no SEO slug support\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders/${params.id}`,\n options,\n );\n },\n\n async getOrders(params: GetOrdersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== PAYMENTS =====\n\n async getQuote(params: GetQuoteParams, options?: RequestOptions) {\n const lines = params.items.map((item) => ({\n type: \"PRODUCT_VARIANT\",\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n }));\n\n const { items, ...rest } = params;\n\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n lines: lines,\n ...rest,\n };\n\n return apiConfig.httpClient.post(`/v1/payments/quote`, payload, options);\n },\n\n async checkout(params: CheckoutParams, options?: RequestOptions) {\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n ...params,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders/checkout`,\n payload,\n options,\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateReservationParams,\n UpdateReservationParams,\n ReservationCheckoutParams,\n GetReservationParams,\n SearchReservationsParams,\n SearchMyReservationsParams,\n CreateServiceParams,\n UpdateServiceParams,\n DeleteServiceParams,\n GetServiceParams,\n GetServicesParams,\n CreateProviderParams,\n UpdateProviderParams,\n DeleteProviderParams,\n GetProviderParams,\n GetProvidersParams,\n GetBusinessServiceWorkingTimeParams,\n GetServiceProvidersParams,\n GetReservationQuoteParams,\n RequestOptions,\n Slot,\n} from \"../types/api\";\nimport { formatIdOrSlug } from \"../utils/slug\";\n\nexport const createReservationApi = (apiConfig: ApiConfig) => {\n // Cart state for multiple slots\n let cart: Slot[] = [];\n\n return {\n // ===== CART =====\n\n addToCart(slot: Slot) {\n cart.push(slot);\n },\n\n removeFromCart(slotId: string) {\n cart = cart.filter((s) => s.id !== slotId);\n },\n\n getCart(): Slot[] {\n return [...cart];\n },\n\n clearCart() {\n cart = [];\n },\n\n // ===== RESERVATIONS =====\n\n async createReservation(\n params: CreateReservationParams,\n options?: RequestOptions,\n ) {\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n ...params,\n };\n\n return apiConfig.httpClient.post(`/v1/reservations`, payload, options);\n },\n\n async updateReservation(\n params: UpdateReservationParams,\n options?: RequestOptions,\n ) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.put(\n `/v1/reservations/${id}`,\n payload,\n options,\n );\n },\n\n async checkout(\n params?: Partial<ReservationCheckoutParams>,\n options?: RequestOptions,\n ) {\n // Use cart if no items provided\n const items = params?.items || cart.map((s) => ({\n serviceId: s.serviceId,\n providerId: s.providerId,\n from: s.from,\n to: s.to,\n }));\n\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n ...params,\n items,\n };\n\n return apiConfig.httpClient.post(\n `/v1/reservations/checkout`,\n payload,\n options,\n );\n },\n\n async getReservation(\n params: GetReservationParams,\n options?: RequestOptions,\n ) {\n // Reservations use UUID only - no SEO slug support\n return apiConfig.httpClient.get(`/v1/reservations/${params.id}`, {\n ...options,\n params: { businessId: apiConfig.businessId },\n });\n },\n\n async searchReservations(\n params: SearchReservationsParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.get(`/v1/reservations/search`, {\n ...options,\n params: {\n ...params,\n businessId: apiConfig.businessId,\n },\n });\n },\n\n async searchMyReservations(\n params: SearchMyReservationsParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.get(`/v1/reservations`, {\n ...options,\n params,\n });\n },\n\n // ===== QUOTES =====\n\n async getQuote(\n params: GetReservationQuoteParams,\n options?: RequestOptions,\n ) {\n const lines = params.items.map((item: any) => ({\n type: \"SERVICE\",\n serviceId: item.serviceId,\n quantity: 1,\n }));\n\n const { items, ...rest } = params;\n\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n lines: lines,\n ...rest,\n };\n\n return apiConfig.httpClient.post(`/v1/payments/quote`, payload, options);\n },\n\n // ===== SERVICES =====\n\n async createService(params: CreateServiceParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/services`,\n params,\n options,\n );\n },\n\n async updateService(params: UpdateServiceParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/services/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteService(params: DeleteServiceParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/services/${params.id}`,\n options,\n );\n },\n\n async getService(params: GetServiceParams, options?: RequestOptions) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/services/${formattedId}`,\n options,\n );\n\n // Add helper methods that automatically use SDK's current locale\n return {\n ...response,\n getName() {\n const locale = apiConfig.locale;\n return response.name?.[locale] || response.name?.en || response.name || '';\n },\n getDescription() {\n const locale = apiConfig.locale;\n return response.description?.[locale] || response.description?.en || response.description || '';\n }\n };\n },\n\n async getServices(params: GetServicesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/services`,\n {\n ...options,\n params,\n },\n );\n },\n\n async getServiceProviders(\n params: GetServiceProvidersParams,\n options?: RequestOptions,\n ) {\n const { serviceId, ...queryParams } = params;\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/services/${serviceId}/providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n // ===== PROVIDERS =====\n\n async createProvider(\n params: CreateProviderParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/providers`,\n params,\n options,\n );\n },\n\n async updateProvider(\n params: UpdateProviderParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteProvider(\n params: DeleteProviderParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n options,\n );\n },\n\n async getProvider(params: GetProviderParams, options?: RequestOptions) {\n // Providers use UUID only - no SEO slug support\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n options,\n );\n },\n\n async getProviders(params: GetProvidersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers`,\n {\n ...options,\n params: params,\n },\n );\n },\n\n async getProviderWorkingTime(\n params: GetBusinessServiceWorkingTimeParams,\n options?: RequestOptions,\n ) {\n const { providerId, ...queryParams } = params;\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers/${providerId}/working-time`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface ScanDataParams {\n key: string;\n}\n\nexport interface PutDataParams {\n key: string;\n value: any;\n oldKey?: string;\n}\n\nexport interface DeleteDataParams {\n key: string;\n}\n\nexport interface RunScriptParams {\n name: string;\n value?: string;\n username?: string;\n password?: string;\n}\n\nexport interface RunScriptResponse {\n success: boolean;\n message: string;\n}\n\nexport const createDatabaseApi = (apiConfig: ApiConfig) => {\n return {\n async scanData(\n params: ScanDataParams,\n options?: RequestOptions\n ): Promise<any[]> {\n const response = await apiConfig.httpClient.get(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n },\n }\n );\n return response.value || [];\n },\n\n async putData(\n params: PutDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(\n `/v1/operations/data`,\n params,\n options\n );\n },\n\n async deleteData(\n params: DeleteDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.delete(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n },\n }\n );\n },\n\n async runScript(\n params: RunScriptParams,\n options?: RequestOptions\n ): Promise<RunScriptResponse> {\n return apiConfig.httpClient.post(`/v1/operations/scripts`, params, options);\n },\n };\n};\n","import type {\n CreateFeatureFlagParams,\n DeleteFeatureFlagParams,\n FeatureFlag,\n FlagResults,\n GetFeatureFlagParams,\n GetFeatureFlagResultsParams,\n GetFeatureFlagsParams,\n GetVariantParams,\n GetVariantResponse,\n RequestOptions,\n TrackEventParams,\n TrackEventResponse,\n UpdateFeatureFlagParams,\n} from \"../types/api\";\n\ninterface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nexport const createFeatureFlagsApi = (apiConfig: ApiConfig) => {\n return {\n /**\n * Create a new feature flag\n */\n async createFlag(\n params: CreateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n params,\n options\n );\n },\n\n /**\n * Get a feature flag by ID\n */\n async getFlag(\n params: GetFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * List all feature flags for the business\n */\n async getFlags(\n params?: GetFeatureFlagsParams,\n options?: RequestOptions<FeatureFlag[]>\n ): Promise<FeatureFlag[]> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n {\n ...options,\n params: params,\n }\n );\n },\n\n /**\n * Update a feature flag\n */\n async updateFlag(\n params: UpdateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n const { id, ...body } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${id}`,\n body,\n options\n );\n },\n\n /**\n * Delete a feature flag\n */\n async deleteFlag(\n params: DeleteFeatureFlagParams,\n options?: RequestOptions<{ deleted: boolean }>\n ): Promise<{ deleted: boolean }> {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * Get experiment results for a feature flag\n */\n async getResults(\n params: GetFeatureFlagResultsParams,\n options?: RequestOptions<FlagResults>\n ): Promise<FlagResults> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}/results`,\n options\n );\n },\n\n /**\n * Get the variant assignment for the current user\n * This is the main method for feature flag evaluation\n */\n async getVariant(\n params: GetVariantParams,\n options?: RequestOptions<GetVariantResponse>\n ): Promise<GetVariantResponse> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/key/${params.flagKey}/variant`,\n options\n );\n },\n\n /**\n * Track a conversion event for A/B testing\n */\n async trackEvent(\n params: TrackEventParams,\n options?: RequestOptions<TrackEventResponse>\n ): Promise<TrackEventResponse> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/track`,\n params,\n options\n );\n },\n\n // ===== CONVENIENCE METHODS =====\n\n /**\n * Check if a feature is enabled (returns true if variant is not 'control')\n * Convenience method for simple on/off flags\n */\n async isEnabled(flagKey: string): Promise<boolean> {\n try {\n const response = await this.getVariant({ flagKey });\n return response.variantKey !== \"control\";\n } catch {\n return false;\n }\n },\n\n /**\n * Get variant with payload, returning a default if flag not found\n * Useful for getting configuration values from variants\n */\n async getVariantWithDefault<T = any>(\n flagKey: string,\n defaultValue: T\n ): Promise<{ variantKey: string; payload: T }> {\n try {\n const response = await this.getVariant({ flagKey });\n return {\n variantKey: response.variantKey,\n payload: response.payload ?? defaultValue,\n };\n } catch {\n return {\n variantKey: \"control\",\n payload: defaultValue,\n };\n }\n },\n\n /**\n * Activate a draft flag\n */\n async activateFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ACTIVE\" });\n },\n\n /**\n * Archive an active flag\n */\n async archiveFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ARCHIVED\" });\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface LocationState {\n code: string;\n name: string;\n}\n\nexport interface LocationCountry {\n code: string;\n name: string;\n states: LocationState[];\n}\n\nexport interface GetCountriesResponse {\n items: LocationCountry[];\n cursor: string | null;\n}\n\nexport const createLocationApi = (apiConfig: ApiConfig) => {\n return {\n async getCountries(options?: RequestOptions): Promise<GetCountriesResponse> {\n return apiConfig.httpClient.get(`/v1/operations/location/countries`, options);\n },\n\n async getCountryStates(\n countryCode: string,\n options?: RequestOptions\n ): Promise<LocationCountry> {\n return apiConfig.httpClient.get(\n `/v1/operations/location/countries/${countryCode}/states`,\n options\n );\n },\n };\n};\n","/**\n * Maps currency codes to their display symbols\n */\nexport function getCurrencySymbol(currency: string): string {\n const currencySymbols: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n CAD: 'C$',\n AUD: 'A$',\n JPY: '¥',\n CHF: 'CHF',\n SEK: 'kr',\n NOK: 'kr',\n DKK: 'kr',\n PLN: 'zł',\n CZK: 'Kč',\n HUF: 'Ft',\n RON: 'lei',\n BGN: 'лв',\n HRK: 'kn',\n RSD: 'дин',\n BAM: 'KM',\n MKD: 'ден',\n ALL: 'L',\n TRY: '₺',\n RUB: '₽',\n UAH: '₴',\n BYN: 'Br',\n CNY: '¥',\n INR: '₹',\n KRW: '₩',\n THB: '฿',\n VND: '₫',\n SGD: 'S$',\n MYR: 'RM',\n IDR: 'Rp',\n PHP: '₱',\n BRL: 'R$',\n ARS: '$',\n CLP: '$',\n COP: '$',\n PEN: 'S/',\n MXN: '$',\n ZAR: 'R',\n EGP: 'E£',\n NGN: '₦',\n KES: 'KSh',\n GHS: '₵',\n MAD: 'DH',\n TND: 'د.ت',\n DZD: 'د.ج',\n LYD: 'ل.د',\n AED: 'د.إ',\n SAR: 'ر.س',\n QAR: 'ر.ق',\n KWD: 'د.ك',\n BHD: 'ب.د',\n OMR: 'ر.ع',\n JOD: 'د.أ',\n LBP: 'ل.ل',\n SYP: 'ل.س',\n IQD: 'ع.د',\n IRR: '﷼',\n AFN: '؋',\n PKR: '₨',\n LKR: '₨',\n NPR: '₨',\n BDT: '৳',\n MMK: 'K',\n LAK: '₭',\n KHR: '៛',\n MNT: '₮',\n KZT: '₸',\n UZS: 'лв',\n KGS: 'лв',\n TJS: 'SM',\n TMT: 'T',\n AZN: '₼',\n GEL: '₾',\n AMD: '֏',\n BYR: 'p.',\n MDL: 'L'\n };\n\n return currencySymbols[currency.toUpperCase()] || currency;\n}\n\n/**\n * List of currencies where the symbol appears after the amount\n */\nexport const SYMBOL_AFTER_CURRENCIES = ['SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK'];\n\n/**\n * Check if currency symbol should be placed after the amount\n */\nexport function isSymbolAfterCurrency(currency: string): boolean {\n return SYMBOL_AFTER_CURRENCIES.includes(currency.toUpperCase());\n}","// Price formatting utilities - Centralized currency and price operations\nimport type { Payment, PaymentMethodType, Price } from '../types';\nimport { getCurrencySymbol, isSymbolAfterCurrency } from './currency';\n\nconst MARKET_CURRENCIES = {\n 'US': 'USD',\n 'EU': 'EUR',\n 'UK': 'GBP',\n 'CA': 'CAD',\n 'AU': 'AUD'\n} as const;\n\n// Convert minor units (cents) to major units (dollars)\nexport function convertToMajor(minorAmount: number): number {\n return (minorAmount ?? 0) / 100;\n}\n\n// Convert major units to minor units\nexport function convertToMinor(majorAmount: number): number {\n return Math.round((majorAmount ?? 0) * 100);\n}\n\n// Get currency from market ID\nexport function getCurrencyFromMarket(marketId: string): string {\n return MARKET_CURRENCIES[marketId as keyof typeof MARKET_CURRENCIES] || 'USD';\n}\n\n// Format currency amount with symbol (locale-aware positioning)\nexport function formatCurrencyAmount(\n amount: number,\n currency: string,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n customSymbol?: string;\n } = {}\n): string {\n const { showSymbols = true, decimalPlaces = 2, customSymbol } = options;\n const roundedAmount = amount.toFixed(decimalPlaces);\n\n if (!showSymbols) {\n return `${roundedAmount} ${currency}`;\n }\n\n const symbol = customSymbol || getCurrencySymbol(currency);\n\n // Use locale-specific symbol positioning\n if (isSymbolAfterCurrency(currency)) {\n return `${roundedAmount} ${symbol}`;\n }\n\n return `${symbol}${roundedAmount}`;\n}\n\n// Format minor units with currency\nexport function formatMinor(\n amountMinor: number,\n currency: string,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n customSymbol?: string;\n } = {}\n): string {\n const major = convertToMajor(amountMinor);\n return formatCurrencyAmount(major, currency, options);\n}\n\n// Format Payment structure for display\nexport function formatPayment(\n payment: Payment,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n showBreakdown?: boolean;\n } = {}\n): string {\n if (!payment) return '';\n\n const { showSymbols = true, decimalPlaces = 2, showBreakdown = false } = options;\n\n if (showBreakdown) {\n const subtotal = formatMinor(payment.subtotal, payment.currency, { showSymbols, decimalPlaces });\n const discount = (payment.discount ?? 0) > 0 ? formatMinor(payment.discount, payment.currency, { showSymbols, decimalPlaces }) : null;\n const taxAmount = payment.tax?.amount ?? 0;\n const tax = taxAmount > 0 ? formatMinor(taxAmount, payment.currency, { showSymbols, decimalPlaces }) : null;\n const total = formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n\n let result = `Subtotal: ${subtotal}`;\n if (discount) result += `, Discount: -${discount}`;\n if (tax) result += `, Tax: ${tax}`;\n result += `, Total: ${total}`;\n return result;\n }\n\n return formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n}\n\n// Format market-based prices (from product variants)\nexport function getMarketPrice(\n prices: Price[],\n marketId: string,\n businessMarkets?: any[],\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n showCompareAt?: boolean;\n fallbackMarket?: string;\n } = {}\n): string {\n if (!prices || prices.length === 0) return '';\n\n const {\n showSymbols = true,\n decimalPlaces = 2,\n showCompareAt = true,\n fallbackMarket,\n } = options;\n\n // Find price for the specific market\n let price = prices.find(p => p.market === marketId);\n\n // Fallback to fallback market (if provided) or first available\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = prices[0];\n }\n\n if (!price) return '';\n\n let currency: string;\n let symbol: string;\n\n // If we have business markets, use the currency directly from market data\n if (businessMarkets) {\n const marketData = businessMarkets.find(m => m.id === price.market || m.code === price.market);\n if (marketData?.currency) {\n currency = marketData.currency;\n symbol = getCurrencySymbol(currency);\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getCurrencySymbol(currency);\n }\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getCurrencySymbol(currency);\n }\n\n // Format price with custom symbol\n const formattedPrice = formatMinor(price.amount ?? 0, currency, {\n showSymbols,\n decimalPlaces,\n customSymbol: symbol\n });\n\n // Add compare-at price if available\n if (showCompareAt && price.compareAt && price.compareAt > (price.amount ?? 0)) {\n const formattedCompareAt = formatMinor(price.compareAt, currency, {\n showSymbols,\n decimalPlaces,\n customSymbol: symbol\n });\n return `${formattedPrice} was ${formattedCompareAt}`;\n }\n\n return formattedPrice;\n}\n\n// Get price amount from market-based prices (for calculations)\nexport function getPriceAmount(prices: Price[], marketId: string, fallbackMarket?: string): number {\n if (!prices || prices.length === 0) return 0;\n\n let price = prices.find(p => p.market === marketId);\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = prices[0];\n }\n\n // Amounts are stored in minor units (e.g., cents)\n return price?.amount || 0;\n}\n\n// Create Payment structure for checkout (all amounts in minor units)\nexport function createPaymentForCheckout(\n subtotalMinor: number,\n marketId: string,\n currency: string,\n paymentMethod: any,\n options: {\n discount?: number;\n taxAmount?: number;\n taxRateBps?: number;\n promoCode?: {\n id: string;\n code: string;\n type: string;\n value: number;\n };\n } = {}\n): Payment {\n const { discount = 0, taxAmount = 0, taxRateBps = 0, promoCode } = options;\n const total = subtotalMinor - discount + taxAmount;\n\n return {\n currency,\n market: marketId,\n subtotal: subtotalMinor,\n shipping: 0,\n discount,\n total,\n type: paymentMethod,\n ...(taxAmount > 0 && {\n tax: {\n amount: taxAmount,\n rateBps: taxRateBps,\n lines: [],\n },\n }),\n ...(promoCode && { promoCode }),\n };\n}\n","// Validation utilities\n\nexport interface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n// Phone number validation\nexport function validatePhoneNumber(phone: string): ValidationResult {\n if (!phone) {\n return { isValid: false, error: 'Phone number is required' };\n }\n \n const cleaned = phone.replace(/\\D/g, '');\n \n if (cleaned.length < 8) {\n return { isValid: false, error: 'Phone number is too short' };\n }\n \n if (cleaned.length > 15) {\n return { isValid: false, error: 'Phone number is too long' };\n }\n \n return { isValid: true };\n}\n\n// Email validation\nexport function validateEmail(email: string): ValidationResult {\n if (!email) {\n return { isValid: false, error: 'Email is required' };\n }\n \n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n \n if (!emailRegex.test(email)) {\n return { isValid: false, error: 'Please enter a valid email address' };\n }\n \n return { isValid: true };\n}\n\n// Verification code validation (4-digit codes)\nexport function validateVerificationCode(code: string): ValidationResult {\n if (!code) {\n return { isValid: false, error: 'Verification code is required' };\n }\n \n const cleaned = code.replace(/\\D/g, '');\n \n if (cleaned.length !== 4) {\n return { isValid: false, error: 'Please enter a 4-digit verification code' };\n }\n \n return { isValid: true };\n}\n\n// Generic required field validation\nexport function validateRequired(value: any, fieldName: string = 'This field'): ValidationResult {\n if (value === null || value === undefined || value === '') {\n return { isValid: false, error: `${fieldName} is required` };\n }\n \n return { isValid: true };\n}","// Timezone utilities (moved from Reservation folder)\n\nexport const tzGroups = [\n {\n label: \"US\",\n zones: [\n { label: \"Eastern Time\", value: \"America/New_York\" },\n { label: \"Central Time\", value: \"America/Chicago\" },\n { label: \"Mountain Time\", value: \"America/Denver\" },\n { label: \"Pacific Time\", value: \"America/Los_Angeles\" },\n ],\n },\n {\n label: \"Europe\",\n zones: [\n { label: \"London\", value: \"Europe/London\" },\n { label: \"Paris\", value: \"Europe/Paris\" },\n { label: \"Berlin\", value: \"Europe/Berlin\" },\n { label: \"Rome\", value: \"Europe/Rome\" },\n ],\n },\n {\n label: \"Asia\",\n zones: [\n { label: \"Tokyo\", value: \"Asia/Tokyo\" },\n { label: \"Shanghai\", value: \"Asia/Shanghai\" },\n { label: \"Mumbai\", value: \"Asia/Kolkata\" },\n { label: \"Dubai\", value: \"Asia/Dubai\" },\n ],\n },\n];\n\nexport function findTimeZone(groups: typeof tzGroups): string {\n try {\n const detected = Intl.DateTimeFormat().resolvedOptions().timeZone;\n \n // Check if detected timezone is in our list\n for (const group of groups) {\n for (const zone of group.zones) {\n if (zone.value === detected) {\n return detected;\n }\n }\n }\n \n // Fallback to UTC if not found\n return \"UTC\";\n } catch (e) {\n // Fallback to UTC if detection fails\n return \"UTC\";\n }\n}","// Define locales inline since we don't have @lib/i18n in SDK\nconst locales = ['en', 'sr-latn'] as const;\nconst localeMap: Record<typeof locales[number], string> = {\n\t'en': 'en-US',\n\t'sr-latn': 'sr-RS'\n};\n\n/**\n * * returns \"slugified\" text.\n * @param text: string - text to slugify\n */\nexport function slugify(text: string): string {\n\treturn text\n\t\t.toString()\n\t\t.toLowerCase() // convert to lowercase\n\t\t.replace(/\\s+/g, \"-\") // replace spaces with -\n\t\t.replace(/[^\\w-]+/g, \"\") // remove all non-word chars\n\t\t.replace(/--+/g, \"-\") // replace multiple dashes with single dash\n\t\t.replace(/^-+/, \"\") // trim dash from start of text\n\t\t.replace(/-+$/, \"\"); // trim dash from end of text\n}\n\n/**\n * * returns \"humanized\" text. runs slugify() and then replaces - with space and upper case first letter of every word, and lower case the rest\n * @param text: string - text to humanize\n */\nexport function humanize(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn (\n\t\tslugifiedText\n\t\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t\t// .toLowerCase();\n\t\t\t.replace(\n\t\t\t\t// upper case first letter of every word, and lower case the rest\n\t\t\t\t/\\w\\S*/g,\n\t\t\t\t(w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(),\n\t\t\t)\n\t);\n}\n\n// --------------------------------------------------------\n/**\n * * returns \"categorified\" text. runs slugify() and then replaces - with space and upper cases everything\n * @param text: string - text to categorify\n * @returns string - categorified text\n */\nexport function categorify(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn slugifiedText\n\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t.toUpperCase();\n}\n\n// --------------------------------------------------------\n/**\n * * returns a nicely formatted string of the date passed\n * @param date: string | number | Date - date to format\n * @param locale: string - locale to format the date in\n * @returns string - formatted date\n */\nexport function formatDate(date: string | number | Date, locale: (typeof locales)[number]): string {\n\tlet localeString = \"en-US\";\n\n\tif (locales.includes(locale)) {\n\t\tlocaleString = localeMap[locale];\n\t}\n\n\treturn new Date(date).toLocaleDateString(localeString, {\n\t\ttimeZone: \"UTC\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n}","import { getImageUrl } from \"./blocks\";\n\nexport async function fetchSvgContent(mediaObject: any): Promise<string | null> {\n\tif (!mediaObject) return null;\n\n\tconst svgUrl = getImageUrl(mediaObject, false);\n\n\ttry {\n\t\tconst response = await fetch(svgUrl);\n\n\t\tif (!response.ok) {\n\t\t\tconsole.error(`Failed to fetch SVG: ${response.status} ${response.statusText}`);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst svgContent = await response.text();\n\t\treturn svgContent;\n\t} catch (error) {\n\t\tconsole.error(\"Error fetching SVG:\", error);\n\t\treturn null;\n\t}\n}\n\n/**\n * Server-side helper for Astro components to fetch SVG content during SSR\n *\n * @param mediaObject The media object from the CMS\n * @returns The SVG content as a string, or empty string on failure\n */\nexport async function getSvgContentForAstro(mediaObject: any): Promise<string> {\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\t\treturn svgContent || \"\";\n\t} catch (error) {\n\t\tconsole.error(\"Error getting SVG content for Astro:\", error);\n\t\treturn \"\";\n\t}\n}\n\n/**\n * Client-side helper to fetch and inject SVG content into DOM elements\n *\n * @param mediaObject The media object from the CMS\n * @param targetElement The DOM element to inject the SVG into\n * @param className Optional CSS class to add to the SVG\n */\nexport async function injectSvgIntoElement(\n\tmediaObject: any,\n\ttargetElement: HTMLElement,\n\tclassName?: string,\n): Promise<void> {\n\tif (!targetElement) return;\n\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\n\t\tif (svgContent) {\n\t\t\ttargetElement.innerHTML = svgContent;\n\n\t\t\t// Add class if provided\n\t\t\tif (className) {\n\t\t\t\tconst svgElement = targetElement.querySelector(\"svg\");\n\t\t\t\tif (svgElement) {\n\t\t\t\t\tsvgElement.classList.add(...className.split(\" \"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"Error injecting SVG:\", error);\n\t}\n}","// Export types\nexport type {\n ApiResponse,\n EshopCartItem,\n EshopStoreState,\n ReservationStoreState,\n ReservationCartItem,\n Business,\n BusinessConfig,\n Block,\n Price,\n Payment,\n PaymentMethod,\n PaymentProviderConfig,\n ShippingMethod,\n ShippingWeightTier,\n Zone,\n Market,\n Location,\n Quote,\n QuoteLineItem,\n PromoCodeValidation,\n PaginatedResponse,\n Language,\n Seo,\n Media,\n MediaResolution,\n ProviderWithTimeline,\n} from \"./types\";\n\n// Export enums (must be exported as values, not types)\nexport { PaymentMethodType } from \"./types\";\n\n// Export reservation types\nexport type {\n GetSlotsForDateParams,\n GetAvailabilityParams,\n DayAvailability,\n Slot,\n} from \"./types/api\";\n\n// Export location types\nexport type {\n LocationState,\n LocationCountry,\n GetCountriesResponse,\n} from \"./api/location\";\n\nexport const SDK_VERSION = \"0.3.88\";\nexport const SUPPORTED_FRAMEWORKS = [\n \"astro\",\n \"react\",\n \"vue\",\n \"svelte\",\n \"vanilla\",\n] as const;\n\nexport interface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nimport {\n createHttpClient,\n type HttpClientConfig,\n} from \"./services/createHttpClient\";\nimport { createUserApi } from \"./api/user\";\nimport { createBusinessApi } from \"./api/business\";\nimport { createMediaApi } from \"./api/media\";\nimport { createRoleApi } from \"./api/role\";\nimport { createNotificationApi } from \"./api/notification\";\nimport { createPromoCodeApi } from \"./api/promoCode\";\nimport { createAnalyticsApi } from \"./api/analytics\";\nimport { createCmsApi } from \"./api/cms\";\nimport { createEshopApi } from \"./api/eshop\";\nimport { createReservationApi } from \"./api/reservation\";\nimport { createDatabaseApi } from \"./api/database\";\nimport { createFeatureFlagsApi } from \"./api/featureFlags\";\nimport { createLocationApi } from \"./api/location\";\nimport {\n getImageUrl,\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n} from \"./utils/blocks\";\nimport {\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n} from \"./utils/price\";\nimport { getCurrencySymbol } from \"./utils/currency\";\nimport { validatePhoneNumber } from \"./utils/validation\";\nimport { tzGroups, findTimeZone } from \"./utils/timezone\";\nimport { slugify, humanize, categorify, formatDate } from \"./utils/text\";\nimport {\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n} from \"./utils/svg\";\n\nexport async function createArkySDK(\n config: HttpClientConfig & { market: string; locale?: string }\n) {\n const locale = config.locale || \"en\";\n\n const httpClient = createHttpClient(config);\n\n const apiConfig: ApiConfig = {\n httpClient,\n businessId: config.businessId,\n baseUrl: config.baseUrl,\n market: config.market,\n locale,\n setToken: config.setToken,\n getToken: config.getToken,\n };\n\n const userApi = createUserApi(apiConfig);\n\n const autoGuest = config.autoGuest !== undefined ? config.autoGuest : true;\n\n // If autoGuest, login before returning SDK\n if (autoGuest) {\n try {\n const tokens = await config.getToken();\n if (!tokens.accessToken && !tokens.refreshToken) {\n const result: any = await httpClient.post(\"/v1/users/login\", {\n provider: \"GUEST\",\n });\n const token = result.accessToken || result.token || \"\";\n if (token) {\n config.setToken(result);\n }\n }\n } catch (error) {\n // Silent fail - guest auth is optional\n }\n }\n\n const sdk = {\n user: userApi,\n business: createBusinessApi(apiConfig),\n media: createMediaApi(apiConfig),\n role: createRoleApi(apiConfig),\n notification: createNotificationApi(apiConfig),\n promoCode: createPromoCodeApi(apiConfig),\n analytics: createAnalyticsApi(apiConfig),\n cms: createCmsApi(apiConfig),\n eshop: createEshopApi(apiConfig),\n reservation: createReservationApi(apiConfig),\n database: createDatabaseApi(apiConfig),\n featureFlags: createFeatureFlagsApi(apiConfig),\n location: createLocationApi(apiConfig),\n\n setBusinessId: (businessId: string) => {\n apiConfig.businessId = businessId;\n },\n\n getBusinessId: () => apiConfig.businessId,\n\n setMarket: (market: string) => {\n apiConfig.market = market;\n },\n\n getMarket: () => apiConfig.market,\n\n setLocale: (locale: string) => {\n apiConfig.locale = locale;\n },\n\n getLocale: () => apiConfig.locale,\n\n isAuthenticated: config.isAuthenticated || (() => false),\n logout: config.logout,\n setToken: config.setToken,\n\n // Top-level block utilities for convenience\n extractBlockValues,\n\n utils: {\n // Block utilities\n getImageUrl: (imageBlock: any, isBlock = true) =>\n getImageUrl(imageBlock, isBlock),\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n\n // Price utilities\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n\n // Currency utilities\n getCurrencySymbol,\n\n // Validation utilities\n validatePhoneNumber,\n\n // Timezone utilities\n tzGroups,\n findTimeZone,\n\n // Text utilities\n slugify,\n humanize,\n categorify,\n formatDate,\n\n // SVG utilities\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n },\n };\n\n return sdk;\n}\n\nexport type { HttpClientConfig } from \"./services/createHttpClient\";\n"]}
1
+ {"version":3,"sources":["../src/types/index.ts","../src/utils/errors.ts","../src/utils/queryParams.ts","../src/services/createHttpClient.ts","../src/api/user.ts","../src/api/business.ts","../src/api/media.ts","../src/api/role.ts","../src/api/notification.ts","../src/api/promoCode.ts","../src/api/analytics.ts","../src/utils/slug.ts","../src/utils/blocks.ts","../src/api/cms.ts","../src/api/eshop.ts","../src/api/reservation.ts","../src/api/database.ts","../src/api/featureFlags.ts","../src/api/location.ts","../src/utils/currency.ts","../src/utils/price.ts","../src/utils/validation.ts","../src/utils/timezone.ts","../src/utils/text.ts","../src/utils/svg.ts","../src/index.ts"],"names":["PaymentMethodType","url","locale"],"mappings":"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","file":"index.js","sourcesContent":["export * from './api';\n\nexport interface Payment {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttotal: number;\n\ttax?: {\n\t\tamount: number;\n\t\tmodeSnapshot?: string;\n\t\trateBps: number;\n\t\tlines: Array<{ rateBps: number; amount: number; label?: string; scope?: string }>;\n\t};\n\tpromoCode?: {\n\t\tid: string;\n\t\tcode: string;\n\t\ttype: string;\n\t\tvalue: number;\n\t};\n\ttype: PaymentMethodType;\n\tprovider?: {\n\t\tcustomerId: string;\n\t\tpaymentIntentId?: string;\n\t\tsubscriptionId?: string;\n\t\tpriceId?: string;\n\t};\n}\n\nexport enum PaymentMethodType {\n\tCash = \"CASH\",\n\tCreditCard = \"CREDIT_CARD\",\n\tFree = \"FREE\",\n}\n\nexport interface QuoteLineItem {\n\titemType: string;\n\tid: string;\n\tname: string;\n\tquantity: number;\n\tunitPrice: number;\n\ttotal: number;\n}\n\nexport interface PromoCodeValidation {\n\tid: string;\n\tcode: string;\n\tdiscountType: any;\n\tdiscountValue: number;\n\tconditions: any[];\n}\n\nexport interface Quote {\n\tcurrency: string;\n\tmarket: string;\n\tsubtotal: number;\n\tshipping: number;\n\tdiscount: number;\n\ttotal: number;\n\tlineItems: QuoteLineItem[];\n\tshippingMethod: ShippingMethod | null;\n\tpromoCode: PromoCodeValidation | null;\n\tshippingMethods: ShippingMethod[];\n\tpaymentMethods: PaymentMethod[];\n\tpayment: Payment;\n\tchargeAmount: number;\n}\n\nexport interface Price {\n\tmarket: string;\n\tamount: number;\n\tcompareAt?: number;\n}\n\nexport interface Location {\n\tcountry?: string | null;\n\taddress?: string | null;\n\tcity?: string | null;\n\tstate?: string | null;\n\tpostalCode?: string | null;\n\tcoordinates?: { lat: number; lon: number } | null;\n}\n\nexport interface EshopCartItem {\n\tid: string;\n\tproductId: string;\n\tvariantId: string;\n\tproductName: string;\n\tproductSlug: string;\n\tvariantAttributes: Record<string, any>;\n\tprice: Price;\n\tquantity: number;\n\taddedAt: number;\n}\n\nexport interface ReservationCartItem {\n\tid: string;\n\tserviceId: string;\n\tserviceName: string;\n\tdate: string;\n\tfrom: number;\n\tto: number;\n\ttimeText: string;\n\tproviderId?: string;\n\tblocks: any[];\n}\n\nexport interface PaymentProviderConfig {\n\ttype: \"STRIPE\";\n\tpublicKey: string;\n\tsecretKey: string;\n\twebhookSecret: string;\n}\n\nexport interface ShippingWeightTier {\n\tupToGrams: number;\n\tamount: number;\n}\n\nexport interface PaymentMethod {\n\tid: string;\n\tname: Record<string, string>;\n\ttype: PaymentMethodType;\n}\n\nexport interface ShippingMethod {\n\tid: string;\n\tname: Record<string, string>;\n\ttaxable: boolean;\n\tetaText: string;\n\tpickupLocation?: Location;\n\tamount: number;\n\tfreeAbove?: number;\n\tweightTiers?: ShippingWeightTier[];\n}\n\nexport interface Zone {\n\tid: string;\n\tname: string;\n\tmarketId: string;\n\tcountries: string[];\n\tstates: string[];\n\tpostalCodes: string[];\n\ttaxBps: number;\n\tpaymentMethods: PaymentMethod[];\n\tshippingMethods: ShippingMethod[];\n}\n\nexport interface Market {\n\tid: string;\n\tcurrency: string;\n\ttaxMode: \"EXCLUSIVE\" | \"INCLUSIVE\";\n}\n\n\nexport interface Language {\n\tid: string;\n}\n\nexport interface BusinessEmails {\n\tbilling: string;\n\tsupport: string;\n}\n\nexport interface OrderConfigs {\n\tisEmailRequired: boolean;\n\tisPhoneRequired: boolean;\n}\n\nexport interface BusinessReservationConfigs {\n\tisEmailRequired: boolean;\n\tisPhoneRequired: boolean;\n}\n\nexport interface BusinessConfig {\n\tlanguages: Language[];\n\tmarkets: Market[];\n\tzones: Zone[];\n\tbuildHooks: string[];\n\twebhooks: any[];\n\torderBlocks: any[];\n\treservationBlocks: any[];\n\torderConfigs: OrderConfigs;\n\treservationConfigs: BusinessReservationConfigs;\n\tpaymentProvider?: PaymentProviderConfig;\n\taiProvider?: any;\n\temails: BusinessEmails;\n}\n\nexport interface Business {\n\tid: string;\n\tname: string;\n\tconfigs?: BusinessConfig;\n}\n\nexport interface EshopStoreState {\n\tbusinessId: string;\n\tselectedShippingMethodId: string | null;\n\tuserToken: string | null;\n\tprocessingCheckout: boolean;\n\tloading: boolean;\n\terror: string | null;\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n}\n\nexport interface Block {\n\tid: string;\n\tkey: string;\n\ttype: string;\n\tproperties?: any;\n\tvalue?: any;\n}\n\nexport interface Seo {\n\tslug: Record<string, string>;\n\tmetaTitle: Record<string, string>;\n\tmetaDescription: Record<string, string>;\n\tcanonicalUrl: Record<string, string>;\n\togImage: string;\n}\n\nexport interface MediaResolution {\n\tid: string;\n\tsize: string;\n\turl: string;\n}\n\nexport interface Media {\n\tid: string;\n\tresolutions: { [key: string]: MediaResolution };\n\tmimeType: string;\n\ttitle?: string | null;\n\tdescription?: string | null;\n\talt?: string | null;\n\towner: string;\n\tmetadata?: string | null;\n\tuploadedAt: string;\n\tseo: Seo;\n}\n\nexport interface ApiResponse<T> {\n\tsuccess: boolean;\n\tdata?: T;\n\terror?: string;\n\tcursor?: string;\n\ttotal?: number;\n}\n\nexport interface PaginatedResponse<T> {\n\tdata: T[];\n\tmeta?: {\n\t\ttotal: number;\n\t\tpage: number;\n\t\tper_page: number;\n\t};\n}\n\nexport interface ReservationStoreState {\n\tcurrentStep: number;\n\ttotalSteps: number;\n\tsteps: Record<number, { name: string; labelKey: string }>;\n\tweekdays: string[];\n\tmonthYear: string;\n\tdays: any[];\n\tcurrent: Date;\n\tselectedDate: string | null;\n\tslots: any[];\n\tselectedSlot: any | null;\n\tselectedProvider: any | null;\n\tproviders: any[];\n\tloading: boolean;\n\tstartDate: string | null;\n\tendDate: string | null;\n\tphoneNumber: string;\n\tphoneError: string | null;\n\tphoneSuccess: string | null;\n\tverificationCode: string;\n\tverifyError: string | null;\n\tisPhoneVerified: boolean;\n\tisSendingCode: boolean;\n\tisVerifying: boolean;\n\tcodeSentAt: number | null;\n\tcanResendAt: number | null;\n\tguestToken: string | null;\n\tservice: any | null;\n\tbusiness: Business | null;\n\tcurrency: string;\n\treservationBlocks: Block[];\n\tapiUrl: string;\n\tbusinessId: string;\n\ttimezone: string;\n\ttzGroups: any;\n\titems: ReservationCartItem[];\n\tallowedPaymentMethods: string[];\n\tpaymentConfig: {\n\t\tprovider: PaymentProviderConfig | null;\n\t\tenabled: boolean;\n\t};\n}\n\nexport interface StatusEvent {\n\tid: string;\n\tchangedBy: 'BUSINESS' | 'USER' | 'SYSTEM';\n\tuserId?: string;\n\tstatus: string;\n\tnote?: string;\n\ttimestamp: number;\n}\n\nexport interface ReservationItem {\n\tid: string;\n\tserviceId: string;\n\tproviderId: string;\n\tbusinessId: string;\n\treservationId: string;\n\tuserId: string;\n\tfrom: number;\n\tto: number;\n\tblocks: Block[];\n\tprice: Price;\n}\n\nexport interface Reservation {\n\tid: string;\n\tnumber: string;\n\tuserId: string;\n\tblocks: Block[];\n\tbusinessId: string;\n\tstatuses: StatusEvent[];\n\tserviceIds: string[];\n\tproviderIds: string[];\n\tpayment: Payment;\n\tbusiness?: Business;\n\tuser?: any;\n\titems: ReservationItem[];\n\temail?: string;\n\tphone?: string;\n\taddress?: Location;\n\tcreatedAt: number;\n\tlastModified: number;\n}\n","// Error handling utilities (combined from errorCodes.ts and errorHelpers.ts)\n\n// Comprehensive error code system with both numeric codes and named constants\nexport const ERROR_CODES = {\n // General errors\n \"GENERAL.001\": \"GENERAL.BAD_REQUEST\",\n \"GENERAL.002\": \"GENERAL.VALIDATION_ERROR\",\n \"GENERAL.003\": \"GENERAL.FORBIDDEN_ERROR\",\n \"GENERAL.004\": \"GENERAL.INTERNAL_SERVER_ERROR\",\n \"GENERAL.005\": \"GENERAL.UNAUTHORIZED\",\n \"GENERAL.006\": \"GENERAL.UNAUTHENTICATED\",\n\n // Google/OAuth errors\n \"GOOGLE.001\": \"GOOGLE.INVALID_ORIGIN_URI\",\n \"GOOGLE.002\": \"GOOGLE.INVALID_REDIRECT_URI\",\n \"GOOGLE.003\": \"GOOGLE.FAILED_TO_CALL_API\",\n \"GOOGLE.004\": \"GOOGLE.FAILED_LOGIN\",\n \"GOOGLE.005\": \"GOOGLE.FAILED_LOGOUT\",\n \"GOOGLE.006\": \"GOOGLE.FAILED_REFRESH_TOKEN\",\n \"GOOGLE.007\": \"GOOGLE.INVALID_PROVIDER_PASSED\",\n\n // User errors\n \"USER.001\": \"USER.NOT_FOUND\",\n \"USER.002\": \"USER.FAILED_TO_CREATE\",\n \"USER.003\": \"USER.FAILED_TO_UPDATE\",\n \"USER.004\": \"USER.FAILED_TO_DELETE\",\n \"USER.005\": \"USER.EMAIL_EXISTS\",\n \"USER.006\": \"USER.FAILED_TO_GET_UPLOAD_URL\",\n\n // Business errors\n \"BUSINESS.001\": \"BUSINESS.NOT_FOUND\",\n \"BUSINESS.002\": \"BUSINESS.FAILED_TO_CREATE\",\n \"BUSINESS.003\": \"BUSINESS.FAILED_TO_UPDATE\",\n \"BUSINESS.004\": \"BUSINESS.FAILED_TO_DELETE\",\n \"BUSINESS.005\": \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n \"BUSINESS.006\": \"BUSINESS.NAME_REQUIRED\",\n \"BUSINESS.007\": \"BUSINESS.BUSINESS_ID_REQUIRED\",\n \"BUSINESS.010\": \"BUSINESS.DESCRIPTION_REQUIRED\",\n \"BUSINESS.011\": \"BUSINESS.SLUG_INVALID\",\n\n // Provider errors\n \"PROVIDER.001\": \"PROVIDER.NOT_FOUND\",\n \"PROVIDER.002\": \"PROVIDER.FAILED_TO_CREATE\",\n \"PROVIDER.003\": \"PROVIDER.FAILED_TO_UPDATE\",\n \"PROVIDER.004\": \"PROVIDER.FAILED_TO_DELETE\",\n \"PROVIDER.005\": \"PROVIDER.FAILED_TO_GET_UPLOAD_URL\",\n \"PROVIDER.006\": \"PROVIDER.NAME_REQUIRED\",\n \"PROVIDER.007\": \"PROVIDER.BUSINESS_ID_REQUIRED\",\n \"PROVIDER.008\": \"PROVIDER.DESCRIPTION_REQUIRED\",\n};\n\n// Named error constants for direct access\nexport const ERROR_CONSTANTS = {\n GENERAL: {\n BAD_REQUEST: \"GENERAL.BAD_REQUEST\",\n VALIDATION_ERROR: \"GENERAL.VALIDATION_ERROR\",\n FORBIDDEN_ERROR: \"GENERAL.FORBIDDEN_ERROR\",\n INTERNAL_SERVER_ERROR: \"GENERAL.INTERNAL_SERVER_ERROR\",\n UNAUTHORIZED: \"GENERAL.UNAUTHORIZED\",\n UNAUTHENTICATED: \"GENERAL.UNAUTHENTICATED\",\n },\n USER: {\n NOT_FOUND: \"USER.NOT_FOUND\",\n FAILED_TO_CREATE: \"USER.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"USER.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"USER.FAILED_TO_DELETE\",\n EMAIL_EXISTS: \"USER.EMAIL_EXISTS\",\n FAILED_TO_GET_UPLOAD_URL: \"USER.FAILED_TO_GET_UPLOAD_URL\",\n },\n BUSINESS: {\n NOT_FOUND: \"BUSINESS.NOT_FOUND\",\n FAILED_TO_CREATE: \"BUSINESS.FAILED_TO_CREATE\",\n FAILED_TO_UPDATE: \"BUSINESS.FAILED_TO_UPDATE\",\n FAILED_TO_DELETE: \"BUSINESS.FAILED_TO_DELETE\",\n FAILED_TO_GET_UPLOAD_URL: \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n NAME_REQUIRED: \"BUSINESS.NAME_REQUIRED\",\n BUSINESS_ID_REQUIRED: \"BUSINESS.BUSINESS_ID_REQUIRED\",\n DESCRIPTION_REQUIRED: \"BUSINESS.DESCRIPTION_REQUIRED\",\n SLUG_INVALID: \"BUSINESS.SLUG_INVALID\",\n },\n};\n\nexport type ServerError = {\n message: string;\n error: string;\n statusCode: number;\n validationErrors: {\n field: string;\n error: string;\n }[];\n};\n\nexport type ValidationError = {\n field: string;\n error: string;\n};\n\nexport type RequestError = {\n validationErrors: ValidationError[];\n};\n\n// Utility functions for error handling\nexport function getErrorMessage(code: string): string {\n return ERROR_CODES[code as keyof typeof ERROR_CODES] || code;\n}\n\nexport function isErrorCode(code: string): boolean {\n return code in ERROR_CODES;\n}\n\nexport const transformErrors = (zodError: any): ValidationError[] => {\n const customErrors: ValidationError[] = [];\n\n if (!zodError.issues) return customErrors;\n\n zodError.issues.forEach((issue: any) => {\n const field = issue.path.join(\".\");\n const error = issue.message;\n\n if (\n !customErrors.some(\n (customError) =>\n customError.field === field && customError.error === error\n )\n ) {\n customErrors.push({ field, error });\n }\n });\n\n return customErrors;\n};\n\nexport const convertServerErrorToRequestError = (\n serverError: ServerError,\n renameRules?: { [key: string]: string }\n): RequestError => {\n return {\n ...serverError,\n validationErrors: serverError.validationErrors.map((validationError) => {\n const field =\n renameRules && renameRules[validationError.field]\n ? renameRules[validationError.field]\n : validationError.field;\n\n return {\n field: field,\n error: validationError.error || \"GENERAL.VALIDATION_ERROR\",\n };\n }),\n };\n};\n\n// Export for backward compatibility\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;\n","/**\n * Query parameter builder utility that maintains exact backward compatibility\n * with existing API parameter encoding patterns\n */\n\nexport interface QueryParams {\n [key: string]: string | number | boolean | string[] | number[] | null | undefined;\n}\n\n/**\n * Builds a query string from parameters following the exact encoding patterns\n * used by the existing API implementation:\n * - Arrays: JSON.stringify then encodeURIComponent\n * - Strings: encodeURIComponent\n * - Numbers: No encoding\n * - Null/undefined: Skip\n */\nexport function buildQueryString(params: QueryParams): string {\n const queryParts: string[] = [];\n \n Object.entries(params).forEach(([key, value]) => {\n // Skip null and undefined values\n if (value === null || value === undefined) {\n return;\n }\n \n // Handle arrays: JSON.stringify then encode\n if (Array.isArray(value)) {\n const jsonString = JSON.stringify(value);\n queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n }\n // Handle strings: encode\n else if (typeof value === 'string') {\n queryParts.push(`${key}=${encodeURIComponent(value)}`);\n }\n // Handle numbers and booleans: no encoding\n else if (typeof value === 'number' || typeof value === 'boolean') {\n queryParts.push(`${key}=${value}`);\n }\n // Handle objects (in case needed in future): JSON.stringify then encode\n else if (typeof value === 'object') {\n const jsonString = JSON.stringify(value);\n queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n }\n });\n \n return queryParts.length > 0 ? `?${queryParts.join('&')}` : '';\n}\n\n/**\n * Appends query string to a URL\n */\nexport function appendQueryString(url: string, params: QueryParams): string {\n const queryString = buildQueryString(params);\n return queryString ? `${url}${queryString}` : url;\n}","import {\n\tconvertServerErrorToRequestError,\n\ttype ServerError\n} from '../utils/errors';\nimport { buildQueryString, type QueryParams } from '../utils/queryParams';\n\nexport interface AuthTokens {\n\taccessToken: string;\n\trefreshToken?: string;\n\tprovider?: string;\n\texpiresAt?: number;\n\tuserId?: string;\n\tisGuest?: boolean;\n}\n\nexport interface HttpClientConfig {\n\tbaseUrl: string;\n\n\tbusinessId: string;\n\n\tgetToken: () => Promise<AuthTokens> | AuthTokens;\n\n\tsetToken: (tokens: AuthTokens) => void;\n\n\tautoGuest?: boolean;\n\n\tlogout: () => void;\n\n\tnavigate?: (path: string) => void;\n\n\tloginFallbackPath?: string;\n\n\tisAuthenticated?: () => boolean;\n}\n\ntype SuccessCallback<T = any> = (ctx: {\n\tdata: T;\n\tmethod: string;\n\turl: string;\n\tstatus: number;\n\trequest?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n}) => void | Promise<void>;\n\ntype ErrorCallback = (ctx: {\n\terror: any;\n\tmethod: string;\n\turl: string;\n\tstatus?: number;\n\trequest?: any;\n\tresponse?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n\taborted?: boolean;\n}) => void | Promise<void>;\n\nexport function createHttpClient(cfg: HttpClientConfig) {\n\tconst refreshEndpoint = `${cfg.baseUrl}/v1/users/refresh-access-token`;\n\tlet refreshPromise: Promise<void> | null = null;\n\n\tasync function ensureFreshToken() {\n\t\tif (refreshPromise) {\n\t\t\treturn refreshPromise;\n\t\t}\n\n\t\trefreshPromise = (async () => {\n\t\t\tconst { refreshToken, provider } = await cfg.getToken();\n\t\t\tif (!refreshToken) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('No refresh token available');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst refRes = await fetch(refreshEndpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { Accept: 'application/json', 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ provider, refreshToken })\n\t\t\t});\n\n\t\t\tif (!refRes.ok) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('Token refresh failed');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst data = await refRes.json();\n\t\t\tcfg.setToken(data);\n\t\t})().finally(() => {\n\t\t\trefreshPromise = null;\n\t\t});\n\n\t\treturn refreshPromise;\n\t}\n\n\tasync function request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: any,\n\t\toptions?: {\n\t\t\tonSuccess?: SuccessCallback<T>;\n\t\t\tonError?: ErrorCallback;\n\t\t\theaders?: Record<string, string>;\n\t\t\ttransformRequest?: (data: any) => any;\n\t\t\tparams?: QueryParams;\n\t\t\t_retried?: boolean;\n\t\t}\n\t): Promise<T> {\n\t\tif (options?.transformRequest) {\n\t\t\tbody = options.transformRequest(body);\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(options?.headers || {})\n\t\t};\n\n\tlet { accessToken, expiresAt, provider } = await cfg.getToken();\n\n\tconst nowSec = Date.now() / 1000;\n\tif (expiresAt && nowSec > expiresAt) {\n\t\tawait ensureFreshToken();\n\t\tconst tokens = await cfg.getToken();\n\t\taccessToken = tokens.accessToken;\n\t\tprovider = tokens.provider;\n\t}\n\n\tif (accessToken) {\n\t\t// Use X-API-Key header for API tokens, Authorization for JWT/OAuth\n\t\tif (provider === 'API') {\n\t\t\theaders['X-API-Key'] = accessToken;\n\t\t} else {\n\t\t\theaders['Authorization'] = `Bearer ${accessToken}`;\n\t\t}\n\t}\n\n\t\tconst finalPath = options?.params ? path + buildQueryString(options.params) : path;\n\n\t\tconst fetchOpts: any = { method, headers };\n\t\tif (!['GET', 'DELETE'].includes(method) && body !== undefined) {\n\t\t\tfetchOpts.body = JSON.stringify(body);\n\t\t}\n\n\t\tconst fullUrl = `${cfg.baseUrl}${finalPath}`;\n\t\tlet res: Response;\n\t\tlet data: any;\n\t\tconst startedAt = Date.now();\n\n\t\ttry {\n\t\t\tres = await fetch(fullUrl, fetchOpts);\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error(error instanceof Error ? error.message : 'Network request failed');\n\t\t\terr.name = 'NetworkError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, aborted: false })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\t// Handle 401: refresh and retry once\n\t\tif (res.status === 401 && !options?.['_retried']) {\n\t\t\ttry {\n\t\t\t\tawait ensureFreshToken();\n\t\t\t\tconst tokens = await cfg.getToken();\n\t\t\t\theaders['Authorization'] = `Bearer ${tokens.accessToken}`;\n\t\t\t\tfetchOpts.headers = headers;\n\t\t\t\treturn request<T>(method, path, body, { ...options, _retried: true });\n\t\t\t} catch (refreshError) {\n\t\t\t\t// Fall through to normal error handling\n\t\t\t}\n\t\t}\n\n\t\t// Safe JSON parsing: handle 204, empty body, non-JSON\n\t\ttry {\n\t\t\tconst contentLength = res.headers.get('content-length');\n\t\t\tconst contentType = res.headers.get('content-type');\n\t\t\tif (res.status === 204 || contentLength === '0' || !contentType?.includes('application/json')) {\n\t\t\t\tdata = {};\n\t\t\t} else {\n\t\t\t\tdata = await res.json();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error('Failed to parse response');\n\t\t\terr.name = 'ParseError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\terr.status = res.status;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, status: res.status })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (!res.ok) {\n\t\t\tconst serverErr: ServerError = data;\n\t\t\tconst reqErr = convertServerErrorToRequestError(serverErr);\n\t\t\tconst err: any = new Error(serverErr.message || 'Request failed');\n\t\t\terr.name = 'ApiError';\n\t\t\terr.statusCode = serverErr.statusCode || res.status;\n\t\t\terr.validationErrors = reqErr.validationErrors;\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tif (requestId) err.requestId = requestId;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\turl: fullUrl,\n\t\t\t\t\t\tstatus: res.status,\n\t\t\t\t\t\tresponse: serverErr,\n\t\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t\t})\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\nif (options?.onSuccess && method !== 'GET') {\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tPromise.resolve(\n\t\t\t\toptions.onSuccess({\n\t\t\t\t\tdata: data as T,\n\t\t\t\t\tmethod,\n\t\t\t\t\turl: fullUrl,\n\t\t\t\t\tstatus: res.status,\n\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t})\n\t\t\t).catch(() => {});\n\t\t}\n\t\treturn data as T;\n\t}\n\n\treturn {\n\t\tget: <T>(path: string, opts?: any) => request<T>('GET', path, undefined, opts),\n\t\tpost: <T>(path: string, body: any, opts?: any) => request<T>('POST', path, body, opts),\n\t\tput: <T>(path: string, body: any, opts?: any) => request<T>('PUT', path, body, opts),\n\t\tpatch: <T>(path: string, body: any, opts?: any) => request<T>('PATCH', path, body, opts),\n\t\tdelete: <T>(path: string, opts?: any) => request<T>('DELETE', path, undefined, opts)\n\t};\n}\n","import type { ApiConfig } from '../index';\nimport type {\n UpdateUserProfileParams,\n LoginUserParams,\n RegisterUserParams,\n AddPhoneNumberParams,\n PhoneNumberConfirmParams,\n SearchUsersParams,\n SetRoleParams,\n ConfirmUserParams,\n GetLoginUrlParams,\n ForgotPasswordParams,\n ResetForgotPasswordParams,\n ResetPasswordParams,\n DeleteUserParams,\n GetMeParams,\n LogoutParams,\n UserSubscribeParams,\n RequestOptions\n} from '../types/api';\n\nexport const createUserApi = (apiConfig: ApiConfig) => {\n return {\n // ===== USER PROFILE =====\n\n async updateUser(params: UpdateUserProfileParams, options?: RequestOptions) {\n const payload: any = {};\n\n if (params.name !== undefined) payload.name = params.name;\n if (params.phoneNumbers !== undefined) payload.phoneNumbers = params.phoneNumbers;\n if (params.addresses !== undefined) payload.addresses = params.addresses;\n if (params.apiTokens !== undefined) payload.apiTokens = params.apiTokens;\n\n return apiConfig.httpClient.put('/v1/users', payload, options);\n },\n\n async deleteUser(params: DeleteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete('/v1/users', options);\n },\n\n async addPhoneNumber(params: AddPhoneNumberParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number', params, options);\n },\n\n async phoneNumberConfirm(params: PhoneNumberConfirmParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/phone-number/confirm', params, options);\n },\n\n async getMe(params: GetMeParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/me', options);\n },\n\n async searchUsers(params: SearchUsersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/search', {\n ...options,\n params: {\n ...params,\n businessId: apiConfig.businessId\n }\n });\n },\n\n async setRole(params: SetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/set-role', params, options);\n },\n\n // ===== AUTHENTICATION =====\n\n async loginUser(params: LoginUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/login', params, options);\n },\n\n async registerUser(params: RegisterUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/register', params, options);\n },\n\n async logout(params: LogoutParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/logout', {}, options);\n },\n\n async confirmUser(params: ConfirmUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.put('/v1/users/confirm', params, options);\n },\n\n async getLoginUrl(params: GetLoginUrlParams, options?: RequestOptions) {\n return apiConfig.httpClient.get('/v1/users/login/url', {\n ...options,\n params\n });\n },\n\n // ===== PASSWORD MANAGEMENT =====\n\n async forgotPassword(params: ForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/forgot-password', params, options);\n },\n\n async resetForgotPassword(params: ResetForgotPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-forgot-password', params, options);\n },\n\n async resetPassword(params: ResetPasswordParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/reset-password', params, options);\n },\n\n async subscribe(params: UserSubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.post('/v1/users/subscribe', params, options);\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateBusinessParams,\n UpdateBusinessParams,\n DeleteBusinessParams,\n GetBusinessParams,\n GetBusinessesParams,\n GetBusinessParentsParams,\n TriggerBuildsParams,\n GetSubscriptionParams,\n GetSubscriptionPlansParams,\n SubscribeParams,\n CreatePortalSessionParams,\n InviteUserParams,\n HandleInvitationParams,\n TestWebhookParams,\n GetBusinessMediaParams2,\n SetProviderScheduleParams,\n ProcessRefundParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createBusinessApi = (apiConfig: ApiConfig) => {\n return {\n async createBusiness(\n params: CreateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(`/v1/businesses`, params, options);\n },\n\n async updateBusiness(\n params: UpdateBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${params.id}`,\n params,\n options\n );\n },\n\n async deleteBusiness(\n params: DeleteBusinessParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${params.id}`,\n options\n );\n },\n\n async getBusiness(params: GetBusinessParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}`,\n options\n );\n },\n\n async getBusinesses(params: GetBusinessesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/businesses`, options);\n },\n\n async getBusinessParents(\n params: GetBusinessParentsParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/parents`,\n options\n );\n },\n\n async triggerBuilds(params: TriggerBuildsParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${params.id}/trigger-builds`,\n {},\n options\n );\n },\n\n async getSubscriptionPlans(\n params: GetSubscriptionPlansParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\"/v1/businesses/plans\", options);\n },\n\n async getSubscription(\n params: GetSubscriptionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/subscription`,\n options\n );\n },\n async subscribe(params: SubscribeParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/subscribe`,\n params,\n options\n );\n },\n\n async createPortalSession(\n params: CreatePortalSessionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/subscription/portal`,\n params,\n options\n );\n },\n\n async inviteUser(params: InviteUserParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n async handleInvitation(\n params: HandleInvitationParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/invitation`,\n params,\n options\n );\n },\n\n async testWebhook(params: TestWebhookParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/webhooks/test`,\n params.webhook,\n options\n );\n },\n\n async getBusinessMedia(\n params: GetBusinessMediaParams2,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(`/v1/businesses/${params.id}/media`, {\n ...options,\n params: {\n cursor: params.cursor,\n limit: params.limit || 20,\n },\n });\n },\n\n async setProviderSchedule(\n params: SetProviderScheduleParams,\n options?: RequestOptions\n ) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${id}/schedules`,\n payload,\n options\n );\n },\n\n async processRefund(params: ProcessRefundParams, options?: RequestOptions) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${id}/refund`,\n payload,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n UploadBusinessMediaParams,\n DeleteBusinessMediaParams,\n GetBusinessMediaParams,\n UpdateMediaParams,\n RequestOptions\n} from '../types/api';\n\nexport const createMediaApi = (apiConfig: ApiConfig) => {\n return {\n async uploadBusinessMedia(params: UploadBusinessMediaParams, options?: RequestOptions) {\n const _options = options;\n const { files = [], urls = [] } = params;\n const url = `${apiConfig.baseUrl}/v1/businesses/${apiConfig.businessId}/media`;\n\n const formData = new FormData();\n files.forEach((file) => formData.append('files', file));\n urls.forEach((url) => formData.append('files', url));\n\n const tokens = await apiConfig.getToken();\n const response = await fetch(url, {\n method: 'POST',\n body: formData,\n headers: {\n Authorization: `Bearer ${tokens.accessToken}`\n }\n });\n\n if (!response.ok) {\n throw new Error('Upload failed, server said no');\n }\n\n return await response.json();\n },\n\n async deleteBusinessMedia(params: DeleteBusinessMediaParams, options?: RequestOptions) {\n const { id, mediaId } = params;\n\n return apiConfig.httpClient.delete(\n `/v1/businesses/${id}/media/${mediaId}`,\n options\n );\n },\n\n async getBusinessMedia(params: GetBusinessMediaParams, options?: RequestOptions) {\n const _options = options;\n const { cursor = null, limit = 20 } = params;\n const url = `${apiConfig.baseUrl}/v1/businesses/${apiConfig.businessId}/media`;\n\n const queryParams: any = { limit };\n if (cursor) queryParams.cursor = cursor;\n\n const queryString = new URLSearchParams(queryParams).toString();\n const response = await fetch(`${url}?${queryString}`);\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => null);\n throw new Error(errorData?.message || 'Failed to fetch media');\n }\n\n return await response.json();\n },\n\n async updateMedia(params: UpdateMediaParams, options?: RequestOptions) {\n const { mediaId, ...updateData } = params;\n \n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/media/${mediaId}`,\n updateData,\n options\n );\n }\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateRoleParams,\n UpdateRoleParams,\n DeleteRoleParams,\n GetRoleParams,\n GetRolesParams,\n RequestOptions,\n} from \"../types/api\";\n\nexport const createRoleApi = (apiConfig: ApiConfig) => {\n return {\n async createRole(\n params: CreateRoleParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(`/v1/roles`, params, options);\n },\n\n async updateRole(params: UpdateRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/roles/${params.id}`,\n params,\n options\n );\n },\n\n async deleteRole(params: DeleteRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(`/v1/roles/${params.id}`, options);\n },\n\n async getRole(params: GetRoleParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/roles/${params.id}`, options);\n },\n\n async getRoles(params: GetRolesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(`/v1/roles`, {\n ...options,\n params: {\n action: params.action,\n businessId: apiConfig.businessId,\n },\n });\n },\n };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tTrackEmailOpenParams,\n\tGetDeliveryStatsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createNotificationApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync trackEmailOpen(params: TrackEmailOpenParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/email/${params.trackingPixelId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getDeliveryStats(params: GetDeliveryStatsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/stats/${apiConfig.businessId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tCreatePromoCodeParams,\n\tUpdatePromoCodeParams,\n\tDeletePromoCodeParams,\n\tGetPromoCodeParams,\n\tGetPromoCodesParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createPromoCodeApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync createPromoCode(params: CreatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.post(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync updatePromoCode(params: UpdatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.put(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync deletePromoCode(params: DeletePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.delete(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCode(params: GetPromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCodes(params: GetPromoCodesParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/businesses/${apiConfig.businessId}/promo-codes`, {\n\t\t\t\t...options,\n\t\t\t\tparams\n\t\t\t});\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tGetAnalyticsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createAnalyticsApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync getAnalytics(params: GetAnalyticsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/analytics/${apiConfig.businessId}`, {\n\t\t\t\t...options,\n\t\t\t\tparams: params\n\t\t\t});\n\t\t}\n\t};\n};\n","import type { ApiConfig } from \"../index\";\n\n/**\n * Entities that support SEO slugs (have seo.slug field in their schema)\n * Only these entities can use slug-based queries with locale\n */\nexport type SeoEnabledEntity = \"product\" | \"service\" | \"collection\" | \"entry\";\n\n/**\n * Entities that ONLY support UUID-based queries (no SEO slugs)\n */\nexport type UuidOnlyEntity = \"order\" | \"reservation\" | \"provider\";\n\n/**\n * Check if a string is a valid UUID (v4 format)\n */\nexport const isUuid = (str: string): boolean => {\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n return uuidRegex.test(str);\n};\n\n/**\n * Auto-format slug queries with businessId:locale:slug pattern for SEO-enabled entities\n *\n * **ONLY use this for entities with SEO support:**\n * - Product (has seo.slug)\n * - Service (has seo.slug)\n * - Collection (has seo.slug)\n * - Entry (has seo.slug)\n *\n * **DO NOT use for:**\n * - Order (UUID only)\n * - Reservation (UUID only)\n * - Provider (UUID only)\n *\n * @param id - The ID or slug to format\n * @param apiConfig - The API configuration containing businessId and locale\n * @returns Formatted ID string\n *\n * Rules:\n * - If it's a UUID, return as-is\n * - If it already contains colons (pre-formatted), return as-is\n * - Otherwise, format as businessId:locale:slug\n *\n * @example\n * // UUID - returns unchanged\n * formatIdOrSlug(\"123e4567-e89b-12d3-a456-426614174000\", config)\n * // => \"123e4567-e89b-12d3-a456-426614174000\"\n *\n * // Pre-formatted - returns unchanged\n * formatIdOrSlug(\"myBusiness:en:website\", config)\n * // => \"myBusiness:en:website\"\n *\n * // Plain slug - auto-formats with businessId:locale:slug\n * formatIdOrSlug(\"website\", config)\n * // => \"businessId:en:website\"\n */\nexport const formatIdOrSlug = (id: string, apiConfig: ApiConfig): string => {\n // If it's already a UUID, return as-is\n if (isUuid(id)) {\n return id;\n }\n\n // If it already contains colons, assume it's already formatted\n if (id.includes(\":\")) {\n return id;\n }\n\n // Otherwise, format as businessId:locale:slug\n return `${apiConfig.businessId}:${apiConfig.locale}:${id}`;\n};\n","// Block utilities (extracted from index.ts)\n\nexport interface Block {\n id: string;\n key: string;\n type: string;\n properties: any;\n value: any;\n}\n\nexport interface Collection {\n id: string;\n blocks: Block[];\n}\n\nexport interface CollectionEntry {\n id: string;\n collection_id: string;\n blocks: Block[];\n}\n\nexport function getBlockLabel(block: any, locale: string = \"en\"): string {\n if (!block) return \"\";\n\n if (block.properties?.label) {\n if (typeof block.properties.label === \"object\") {\n return (\n block.properties.label[locale] ||\n block.properties.label.en ||\n Object.values(block.properties.label)[0] ||\n \"\"\n );\n }\n if (typeof block.properties.label === \"string\") {\n return block.properties.label;\n }\n }\n\n // Convert key to readable format\n return (\n block.key\n ?.replace(/_/g, \" \")\n .replace(/\\b\\w/g, (l: string) => l.toUpperCase()) || \"\"\n );\n}\n\nexport function formatBlockValue(block: any): string {\n if (!block || block.value === null || block.value === undefined) {\n return \"\";\n }\n\n switch (block.type) {\n case \"BOOLEAN\":\n return block.value ? \"Yes\" : \"No\";\n case \"NUMBER\":\n // Handle date/datetime variants\n if (\n block.properties?.variant === \"DATE\" ||\n block.properties?.variant === \"DATE_TIME\"\n ) {\n try {\n return new Date(block.value).toLocaleDateString();\n } catch (e) {\n return String(block.value);\n }\n }\n return String(block.value);\n case \"RELATIONSHIP\":\n if (Array.isArray(block.value) && block.value.length > 0) {\n const firstValue = block.value[0];\n if (firstValue && firstValue.mimeType) {\n return firstValue.name || firstValue.id || \"Media\";\n }\n return firstValue.title || firstValue.name || firstValue.id || \"Entry\";\n }\n return String(block.value);\n default:\n return String(block.value);\n }\n}\n\nexport function prepareBlocksForSubmission(formData: any): any[] {\n const preparedBlocks = [];\n\n Object.keys(formData).forEach((key) => {\n if (formData[key] !== null && formData[key] !== undefined) {\n preparedBlocks.push({\n key,\n value: [formData[key]],\n });\n }\n });\n\n return preparedBlocks;\n}\n\nexport function extractBlockValues(blocks: any[]): Record<string, any> {\n const values: Record<string, any> = {};\n\n blocks.forEach((block) => {\n if (block.value && block.value.length > 0) {\n values[block.key] = block.value[0];\n } else {\n values[block.key] = null;\n }\n });\n\n return values;\n}\n\n// Extract localized text value from a block, handling multilingual content\nexport function getBlockTextValue(block: any, locale: string = \"en\"): string {\n if (!block || !block.value || block.value.length === 0) return \"\";\n\n const firstValue = block.value[0];\n\n // Handle multilingual object\n if (typeof firstValue === \"object\" && firstValue !== null) {\n // Try specified locale first, then 'en', then first available language\n if (firstValue[locale]) return firstValue[locale];\n if (firstValue.en) return firstValue.en;\n const values = Object.values(firstValue);\n return String(values[0] || \"\");\n }\n\n // Handle simple string\n return String(firstValue);\n}\n\n// Legacy functions for backward compatibility\nexport const getBlockValue = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value[0];\n};\n\nexport const getBlockValues = (entry: any, blockKey: string) => {\n if (!entry || !entry.blocks) return null;\n\n const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n if (!block || !block.value || block.value.length === 0) return null;\n\n return block.value;\n};\n\nfunction unwrapBlock(block: any, locale: string) {\n if (!block?.type || block.value === undefined) return block;\n\n // Nested objects / lists → recurse for every child\n if (block.type === \"BLOCK\") {\n return block.value.map((obj: Record<string, any>) => {\n const parsed: Record<string, any> = {};\n for (const [k, v] of Object.entries(obj)) {\n parsed[k] = unwrapBlock(v, locale);\n }\n return parsed;\n });\n }\n\n // Primitive leaves (text/number/boolean/media …)\n const isLocalized = block.type === \"TEXT\";\n const isList =\n block.properties?.ui === \"list\" ||\n (block.properties?.maxValues ?? 1) > 1 ||\n block.value.length > 1;\n\n if (isList) {\n return isLocalized\n ? block.value.map((v: Record<string, any>) => v[locale] || v[\"en\"])\n : [...block.value];\n }\n\n return isLocalized\n ? block.value[0][locale] || block.value[0][\"en\"]\n : block.value[0];\n}\n\nexport const getBlockObjectValues = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n const parsed = values.map((obj: Record<string, any>) => {\n const res = obj.value.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n\n return acc;\n }, {});\n\n return res;\n });\n\n return parsed;\n};\n\nexport const getBlockFromArray = (\n entry: any,\n blockKey: string,\n locale = \"en\"\n) => {\n if (!entry) {\n return [];\n }\n\n const values = getBlockValues(entry, blockKey); // top‑level list\n\n return values.reduce((acc: any, current: any) => {\n acc[current.key] = unwrapBlock(current, locale);\n return acc;\n });\n};\n\nexport const getImageUrl = (imageBlock: any, isBlock = true) => {\n if (!imageBlock) return null;\n\n if (\n imageBlock.type === \"RELATIONSHIP_MEDIA\" &&\n Array.isArray(imageBlock.value)\n ) {\n const mediaValue = imageBlock.value[0];\n if (mediaValue && mediaValue.mimeType) {\n // Handle media with resolutions structure\n if (\n mediaValue.resolutions &&\n mediaValue.resolutions.original &&\n mediaValue.resolutions.original.url\n ) {\n return mediaValue.resolutions.original.url;\n }\n\n // Handle direct URL on media\n if (mediaValue.url) {\n return mediaValue.url;\n }\n }\n return null;\n }\n\n if (isBlock) {\n if (typeof imageBlock === \"string\") {\n return imageBlock;\n }\n\n if (imageBlock.url) {\n return imageBlock.url;\n }\n }\n\n if (\n imageBlock.resolutions &&\n imageBlock.resolutions.original &&\n imageBlock.resolutions.original.url\n ) {\n return imageBlock.resolutions.original.url;\n }\n\n return null;\n};\n\nexport const translateMap = (\n labels: any,\n lang: string,\n fallback = \"unknown\"\n) => {\n let parsedLang = \"en\";\n\n if (lang === \"sr\") {\n parsedLang = \"bih\";\n }\n\n if (!labels) {\n return fallback;\n }\n\n const label = labels[parsedLang];\n if (!label) {\n return fallback;\n }\n\n return label;\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateCollectionParams,\n UpdateCollectionParams,\n DeleteCollectionParams,\n GetCollectionParams,\n GetCollectionsParams,\n GetEntriesParams,\n CreateEntryParams,\n UpdateEntryParams,\n GetCollectionEntryParams,\n DeleteCollectionEntryParams,\n GenerateBlocksParams,\n GetVariableMetadataParams,\n SendEntryParams,\n GetCollectionSubscribersParams,\n RequestOptions,\n} from \"../types/api\";\nimport { formatIdOrSlug } from \"../utils/slug\";\nimport {\n getBlockFromArray,\n getBlockObjectValues,\n getImageUrl,\n} from \"../utils/blocks\";\n\nexport const createCmsApi = (apiConfig: ApiConfig) => {\n return {\n // ===== COLLECTIONS =====\n\n async createCollection(\n params: CreateCollectionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections`,\n params,\n options\n );\n },\n\n async updateCollection(\n params: UpdateCollectionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.id}`,\n params,\n options\n );\n },\n\n async deleteCollection(\n params: DeleteCollectionParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.id}`,\n options\n );\n },\n\n async getCollection(params: GetCollectionParams, options?: RequestOptions) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${formattedId}`,\n options\n );\n\n // Add helper methods that automatically use SDK's current locale\n return {\n ...response,\n getBlock(key: string) {\n return getBlockFromArray(response, key, apiConfig.locale);\n },\n getBlockValues(key: string) {\n return getBlockObjectValues(response, key, apiConfig.locale);\n },\n getImage(key: string) {\n const block = getBlockFromArray(response, key, apiConfig.locale);\n return getImageUrl(block, true);\n },\n };\n },\n\n async getCollections(\n params: GetCollectionsParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections`,\n {\n ...options,\n params,\n }\n );\n },\n\n async generateBlocks(\n params: GenerateBlocksParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections/blocks/generate`,\n params,\n options\n );\n },\n\n // ===== ENTRIES =====\n\n async getCollectionEntries(\n params: GetEntriesParams,\n options?: RequestOptions\n ) {\n const { collectionId, ...queryParams } = params;\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries`,\n {\n ...options,\n params: queryParams,\n }\n );\n },\n\n async createCollectionEntry(\n params: CreateEntryParams,\n options?: RequestOptions\n ) {\n const { collectionId, ...payload } = params;\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries`,\n { ...payload, collectionId },\n options\n );\n },\n\n async updateCollectionEntry(\n params: UpdateEntryParams,\n options?: RequestOptions\n ) {\n const { collectionId, id, ...payload } = params;\n\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries/${id}`,\n { ...payload, collectionId },\n options\n );\n },\n\n async deleteCollectionEntry(\n params: DeleteCollectionEntryParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.collectionId}/entries/${params.id}`,\n options\n );\n },\n\n async getCollectionEntry(\n params: GetCollectionEntryParams,\n options?: RequestOptions\n ) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${params.collectionId}/entries/${formattedId}`,\n options\n );\n },\n\n async sendEntry(params: SendEntryParams, options?: RequestOptions) {\n const { collectionId, entryId, scheduledAt } = params;\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/collections/${collectionId}/entries/${entryId}/send`,\n {\n businessId: apiConfig.businessId,\n entryId,\n scheduledAt: scheduledAt ?? Math.floor(Date.now() / 1000),\n },\n options\n );\n },\n\n // ===== VARIABLES / METADATA =====\n\n async getVariableMetadata(\n params: GetVariableMetadataParams,\n options?: RequestOptions\n ) {\n return apiConfig.httpClient.get(\n `/v1/collections/entry-types/${params.entryType}/variables`,\n options\n );\n },\n\n // ===== COLLECTION SUBSCRIPTIONS =====\n\n async getCollectionSubscribers(\n params: GetCollectionSubscribersParams,\n options?: RequestOptions\n ) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/collections/${formattedId}/subscribers`,\n options\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateProductParams,\n UpdateProductParams,\n DeleteProductParams,\n GetProductParams,\n GetProductsParams,\n GetQuoteParams,\n CheckoutParams,\n CreateOrderParams,\n UpdateOrderParams,\n GetOrderParams,\n GetOrdersParams,\n RequestOptions,\n} from \"../types/api\";\n\nimport { formatIdOrSlug } from \"../utils/slug\";\n\nexport const createEshopApi = (apiConfig: ApiConfig) => {\n return {\n // ===== PRODUCTS =====\n\n async createProduct(params: CreateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/products`,\n params,\n options,\n );\n },\n\n async updateProduct(params: UpdateProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteProduct(params: DeleteProductParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n options,\n );\n },\n\n async getProduct(params: GetProductParams, options?: RequestOptions) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/products/${formattedId}`,\n options,\n );\n\n // Add helper methods that automatically use SDK's current locale\n return {\n ...response,\n getName() {\n const locale = apiConfig.locale;\n return response.name?.[locale] || response.name?.en || response.name || '';\n },\n getDescription() {\n const locale = apiConfig.locale;\n return response.description?.[locale] || response.description?.en || response.description || '';\n }\n };\n },\n\n async getProducts(params: GetProductsParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${encodeURIComponent(apiConfig.businessId)}/products`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== ORDERS =====\n\n async createOrder(params: CreateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n params,\n options,\n );\n },\n\n async updateOrder(params: UpdateOrderParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/orders/update`,\n params,\n options,\n );\n },\n\n async getOrder(params: GetOrderParams, options?: RequestOptions) {\n // Orders use UUID only - no SEO slug support\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders/${params.id}`,\n options,\n );\n },\n\n async getOrders(params: GetOrdersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/orders`,\n {\n ...options,\n params,\n },\n );\n },\n\n // ===== PAYMENTS =====\n\n async getQuote(params: GetQuoteParams, options?: RequestOptions) {\n const lines = params.items.map((item) => ({\n type: \"PRODUCT_VARIANT\",\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n }));\n\n const { items, ...rest } = params;\n\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n lines: lines,\n ...rest,\n };\n\n return apiConfig.httpClient.post(`/v1/payments/quote`, payload, options);\n },\n\n async checkout(params: CheckoutParams, options?: RequestOptions) {\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n ...params,\n };\n\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/orders/checkout`,\n payload,\n options,\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n CreateReservationParams,\n UpdateReservationParams,\n ReservationCheckoutParams,\n GetReservationParams,\n SearchReservationsParams,\n SearchMyReservationsParams,\n CreateServiceParams,\n UpdateServiceParams,\n DeleteServiceParams,\n GetServiceParams,\n GetServicesParams,\n CreateProviderParams,\n UpdateProviderParams,\n DeleteProviderParams,\n GetProviderParams,\n GetProvidersParams,\n GetBusinessServiceWorkingTimeParams,\n GetServiceProvidersParams,\n GetReservationQuoteParams,\n RequestOptions,\n Slot,\n} from \"../types/api\";\nimport { formatIdOrSlug } from \"../utils/slug\";\n\nexport const createReservationApi = (apiConfig: ApiConfig) => {\n // Cart state for multiple slots\n let cart: Slot[] = [];\n\n return {\n // ===== CART =====\n\n addToCart(slot: Slot) {\n cart.push(slot);\n },\n\n removeFromCart(slotId: string) {\n cart = cart.filter((s) => s.id !== slotId);\n },\n\n getCart(): Slot[] {\n return [...cart];\n },\n\n clearCart() {\n cart = [];\n },\n\n // ===== RESERVATIONS =====\n\n async createReservation(\n params: CreateReservationParams,\n options?: RequestOptions,\n ) {\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n ...params,\n };\n\n return apiConfig.httpClient.post(`/v1/reservations`, payload, options);\n },\n\n async updateReservation(\n params: UpdateReservationParams,\n options?: RequestOptions,\n ) {\n const { id, ...payload } = params;\n return apiConfig.httpClient.put(\n `/v1/reservations/${id}`,\n payload,\n options,\n );\n },\n\n async checkout(\n params?: Partial<ReservationCheckoutParams>,\n options?: RequestOptions,\n ) {\n // Use cart if no items provided\n const items = params?.items || cart.map((s) => ({\n serviceId: s.serviceId,\n providerId: s.providerId,\n from: s.from,\n to: s.to,\n }));\n\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n ...params,\n items,\n };\n\n return apiConfig.httpClient.post(\n `/v1/reservations/checkout`,\n payload,\n options,\n );\n },\n\n async getReservation(\n params: GetReservationParams,\n options?: RequestOptions,\n ) {\n // Reservations use UUID only - no SEO slug support\n return apiConfig.httpClient.get(`/v1/reservations/${params.id}`, {\n ...options,\n params: { businessId: apiConfig.businessId },\n });\n },\n\n async searchReservations(\n params: SearchReservationsParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.get(`/v1/reservations/search`, {\n ...options,\n params: {\n ...params,\n businessId: apiConfig.businessId,\n },\n });\n },\n\n async searchMyReservations(\n params: SearchMyReservationsParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.get(`/v1/reservations`, {\n ...options,\n params,\n });\n },\n\n // ===== QUOTES =====\n\n async getQuote(\n params: GetReservationQuoteParams,\n options?: RequestOptions,\n ) {\n const lines = params.items.map((item: any) => ({\n type: \"SERVICE\",\n serviceId: item.serviceId,\n quantity: item.quantity || 1,\n }));\n\n const { items, ...rest } = params;\n\n const payload = {\n businessId: apiConfig.businessId,\n market: apiConfig.market,\n lines: lines,\n ...rest,\n };\n\n return apiConfig.httpClient.post(`/v1/payments/quote`, payload, options);\n },\n\n // ===== SERVICES =====\n\n async createService(params: CreateServiceParams, options?: RequestOptions) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/services`,\n params,\n options,\n );\n },\n\n async updateService(params: UpdateServiceParams, options?: RequestOptions) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/services/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteService(params: DeleteServiceParams, options?: RequestOptions) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/services/${params.id}`,\n options,\n );\n },\n\n async getService(params: GetServiceParams, options?: RequestOptions) {\n const formattedId = formatIdOrSlug(params.id, apiConfig);\n const response = await apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/services/${formattedId}`,\n options,\n );\n\n // Add helper methods that automatically use SDK's current locale\n return {\n ...response,\n getName() {\n const locale = apiConfig.locale;\n return response.name?.[locale] || response.name?.en || response.name || '';\n },\n getDescription() {\n const locale = apiConfig.locale;\n return response.description?.[locale] || response.description?.en || response.description || '';\n }\n };\n },\n\n async getServices(params: GetServicesParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/services`,\n {\n ...options,\n params,\n },\n );\n },\n\n async getServiceProviders(\n params: GetServiceProvidersParams,\n options?: RequestOptions,\n ) {\n const { serviceId, ...queryParams } = params;\n\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/services/${serviceId}/providers`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n\n // ===== PROVIDERS =====\n\n async createProvider(\n params: CreateProviderParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/providers`,\n params,\n options,\n );\n },\n\n async updateProvider(\n params: UpdateProviderParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n params,\n options,\n );\n },\n\n async deleteProvider(\n params: DeleteProviderParams,\n options?: RequestOptions,\n ) {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n options,\n );\n },\n\n async getProvider(params: GetProviderParams, options?: RequestOptions) {\n // Providers use UUID only - no SEO slug support\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n options,\n );\n },\n\n async getProviders(params: GetProvidersParams, options?: RequestOptions) {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers`,\n {\n ...options,\n params: params,\n },\n );\n },\n\n async getProviderWorkingTime(\n params: GetBusinessServiceWorkingTimeParams,\n options?: RequestOptions,\n ) {\n const { providerId, ...queryParams } = params;\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/providers/${providerId}/working-time`,\n {\n ...options,\n params: queryParams,\n },\n );\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface ScanDataParams {\n key: string;\n}\n\nexport interface PutDataParams {\n key: string;\n value: any;\n oldKey?: string;\n}\n\nexport interface DeleteDataParams {\n key: string;\n}\n\nexport interface RunScriptParams {\n name: string;\n value?: string;\n username?: string;\n password?: string;\n}\n\nexport interface RunScriptResponse {\n success: boolean;\n message: string;\n}\n\nexport const createDatabaseApi = (apiConfig: ApiConfig) => {\n return {\n async scanData(\n params: ScanDataParams,\n options?: RequestOptions\n ): Promise<any[]> {\n const response = await apiConfig.httpClient.get(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n },\n }\n );\n return response.value || [];\n },\n\n async putData(\n params: PutDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.post(\n `/v1/operations/data`,\n params,\n options\n );\n },\n\n async deleteData(\n params: DeleteDataParams,\n options?: RequestOptions\n ): Promise<void> {\n return apiConfig.httpClient.delete(\n `/v1/operations/data`,\n {\n ...options,\n params: {\n key: params.key,\n },\n }\n );\n },\n\n async runScript(\n params: RunScriptParams,\n options?: RequestOptions\n ): Promise<RunScriptResponse> {\n return apiConfig.httpClient.post(`/v1/operations/scripts`, params, options);\n },\n };\n};\n","import type {\n CreateFeatureFlagParams,\n DeleteFeatureFlagParams,\n FeatureFlag,\n FlagResults,\n GetFeatureFlagParams,\n GetFeatureFlagResultsParams,\n GetFeatureFlagsParams,\n GetVariantParams,\n GetVariantResponse,\n RequestOptions,\n TrackEventParams,\n TrackEventResponse,\n UpdateFeatureFlagParams,\n} from \"../types/api\";\n\ninterface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nexport const createFeatureFlagsApi = (apiConfig: ApiConfig) => {\n return {\n /**\n * Create a new feature flag\n */\n async createFlag(\n params: CreateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n params,\n options\n );\n },\n\n /**\n * Get a feature flag by ID\n */\n async getFlag(\n params: GetFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * List all feature flags for the business\n */\n async getFlags(\n params?: GetFeatureFlagsParams,\n options?: RequestOptions<FeatureFlag[]>\n ): Promise<FeatureFlag[]> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags`,\n {\n ...options,\n params: params,\n }\n );\n },\n\n /**\n * Update a feature flag\n */\n async updateFlag(\n params: UpdateFeatureFlagParams,\n options?: RequestOptions<FeatureFlag>\n ): Promise<FeatureFlag> {\n const { id, ...body } = params;\n return apiConfig.httpClient.put(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${id}`,\n body,\n options\n );\n },\n\n /**\n * Delete a feature flag\n */\n async deleteFlag(\n params: DeleteFeatureFlagParams,\n options?: RequestOptions<{ deleted: boolean }>\n ): Promise<{ deleted: boolean }> {\n return apiConfig.httpClient.delete(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}`,\n options\n );\n },\n\n /**\n * Get experiment results for a feature flag\n */\n async getResults(\n params: GetFeatureFlagResultsParams,\n options?: RequestOptions<FlagResults>\n ): Promise<FlagResults> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/${params.id}/results`,\n options\n );\n },\n\n /**\n * Get the variant assignment for the current user\n * This is the main method for feature flag evaluation\n */\n async getVariant(\n params: GetVariantParams,\n options?: RequestOptions<GetVariantResponse>\n ): Promise<GetVariantResponse> {\n return apiConfig.httpClient.get(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/key/${params.flagKey}/variant`,\n options\n );\n },\n\n /**\n * Track a conversion event for A/B testing\n */\n async trackEvent(\n params: TrackEventParams,\n options?: RequestOptions<TrackEventResponse>\n ): Promise<TrackEventResponse> {\n return apiConfig.httpClient.post(\n `/v1/businesses/${apiConfig.businessId}/feature-flags/track`,\n params,\n options\n );\n },\n\n // ===== CONVENIENCE METHODS =====\n\n /**\n * Check if a feature is enabled (returns true if variant is not 'control')\n * Convenience method for simple on/off flags\n */\n async isEnabled(flagKey: string): Promise<boolean> {\n try {\n const response = await this.getVariant({ flagKey });\n return response.variantKey !== \"control\";\n } catch {\n return false;\n }\n },\n\n /**\n * Get variant with payload, returning a default if flag not found\n * Useful for getting configuration values from variants\n */\n async getVariantWithDefault<T = any>(\n flagKey: string,\n defaultValue: T\n ): Promise<{ variantKey: string; payload: T }> {\n try {\n const response = await this.getVariant({ flagKey });\n return {\n variantKey: response.variantKey,\n payload: response.payload ?? defaultValue,\n };\n } catch {\n return {\n variantKey: \"control\",\n payload: defaultValue,\n };\n }\n },\n\n /**\n * Activate a draft flag\n */\n async activateFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ACTIVE\" });\n },\n\n /**\n * Archive an active flag\n */\n async archiveFlag(id: string): Promise<FeatureFlag> {\n return this.updateFlag({ id, status: \"ARCHIVED\" });\n },\n };\n};\n","import type { ApiConfig } from \"../index\";\nimport type { RequestOptions } from \"../types/api\";\n\nexport interface LocationState {\n code: string;\n name: string;\n}\n\nexport interface LocationCountry {\n code: string;\n name: string;\n states: LocationState[];\n}\n\nexport interface GetCountriesResponse {\n items: LocationCountry[];\n cursor: string | null;\n}\n\nexport const createLocationApi = (apiConfig: ApiConfig) => {\n return {\n async getCountries(options?: RequestOptions): Promise<GetCountriesResponse> {\n return apiConfig.httpClient.get(`/v1/operations/location/countries`, options);\n },\n\n async getCountryStates(\n countryCode: string,\n options?: RequestOptions\n ): Promise<LocationCountry> {\n return apiConfig.httpClient.get(\n `/v1/operations/location/countries/${countryCode}/states`,\n options\n );\n },\n };\n};\n","/**\n * Maps currency codes to their display symbols\n */\nexport function getCurrencySymbol(currency: string): string {\n const currencySymbols: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n CAD: 'C$',\n AUD: 'A$',\n JPY: '¥',\n CHF: 'CHF',\n SEK: 'kr',\n NOK: 'kr',\n DKK: 'kr',\n PLN: 'zł',\n CZK: 'Kč',\n HUF: 'Ft',\n RON: 'lei',\n BGN: 'лв',\n HRK: 'kn',\n RSD: 'дин',\n BAM: 'KM',\n MKD: 'ден',\n ALL: 'L',\n TRY: '₺',\n RUB: '₽',\n UAH: '₴',\n BYN: 'Br',\n CNY: '¥',\n INR: '₹',\n KRW: '₩',\n THB: '฿',\n VND: '₫',\n SGD: 'S$',\n MYR: 'RM',\n IDR: 'Rp',\n PHP: '₱',\n BRL: 'R$',\n ARS: '$',\n CLP: '$',\n COP: '$',\n PEN: 'S/',\n MXN: '$',\n ZAR: 'R',\n EGP: 'E£',\n NGN: '₦',\n KES: 'KSh',\n GHS: '₵',\n MAD: 'DH',\n TND: 'د.ت',\n DZD: 'د.ج',\n LYD: 'ل.د',\n AED: 'د.إ',\n SAR: 'ر.س',\n QAR: 'ر.ق',\n KWD: 'د.ك',\n BHD: 'ب.د',\n OMR: 'ر.ع',\n JOD: 'د.أ',\n LBP: 'ل.ل',\n SYP: 'ل.س',\n IQD: 'ع.د',\n IRR: '﷼',\n AFN: '؋',\n PKR: '₨',\n LKR: '₨',\n NPR: '₨',\n BDT: '৳',\n MMK: 'K',\n LAK: '₭',\n KHR: '៛',\n MNT: '₮',\n KZT: '₸',\n UZS: 'лв',\n KGS: 'лв',\n TJS: 'SM',\n TMT: 'T',\n AZN: '₼',\n GEL: '₾',\n AMD: '֏',\n BYR: 'p.',\n MDL: 'L'\n };\n\n return currencySymbols[currency.toUpperCase()] || currency;\n}\n\n/**\n * List of currencies where the symbol appears after the amount\n */\nexport const SYMBOL_AFTER_CURRENCIES = ['SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK'];\n\n/**\n * Check if currency symbol should be placed after the amount\n */\nexport function isSymbolAfterCurrency(currency: string): boolean {\n return SYMBOL_AFTER_CURRENCIES.includes(currency.toUpperCase());\n}","// Price formatting utilities - Centralized currency and price operations\nimport type { Payment, PaymentMethodType, Price } from '../types';\nimport { getCurrencySymbol, isSymbolAfterCurrency } from './currency';\n\nconst MARKET_CURRENCIES = {\n 'US': 'USD',\n 'EU': 'EUR',\n 'UK': 'GBP',\n 'CA': 'CAD',\n 'AU': 'AUD'\n} as const;\n\n// Convert minor units (cents) to major units (dollars)\nexport function convertToMajor(minorAmount: number): number {\n return (minorAmount ?? 0) / 100;\n}\n\n// Convert major units to minor units\nexport function convertToMinor(majorAmount: number): number {\n return Math.round((majorAmount ?? 0) * 100);\n}\n\n// Get currency from market ID\nexport function getCurrencyFromMarket(marketId: string): string {\n return MARKET_CURRENCIES[marketId as keyof typeof MARKET_CURRENCIES] || 'USD';\n}\n\n// Format currency amount with symbol (locale-aware positioning)\nexport function formatCurrencyAmount(\n amount: number,\n currency: string,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n customSymbol?: string;\n } = {}\n): string {\n const { showSymbols = true, decimalPlaces = 2, customSymbol } = options;\n const roundedAmount = amount.toFixed(decimalPlaces);\n\n if (!showSymbols) {\n return `${roundedAmount} ${currency}`;\n }\n\n const symbol = customSymbol || getCurrencySymbol(currency);\n\n // Use locale-specific symbol positioning\n if (isSymbolAfterCurrency(currency)) {\n return `${roundedAmount} ${symbol}`;\n }\n\n return `${symbol}${roundedAmount}`;\n}\n\n// Format minor units with currency\nexport function formatMinor(\n amountMinor: number,\n currency: string,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n customSymbol?: string;\n } = {}\n): string {\n const major = convertToMajor(amountMinor);\n return formatCurrencyAmount(major, currency, options);\n}\n\n// Format Payment structure for display\nexport function formatPayment(\n payment: Payment,\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n showBreakdown?: boolean;\n } = {}\n): string {\n if (!payment) return '';\n\n const { showSymbols = true, decimalPlaces = 2, showBreakdown = false } = options;\n\n if (showBreakdown) {\n const subtotal = formatMinor(payment.subtotal, payment.currency, { showSymbols, decimalPlaces });\n const discount = (payment.discount ?? 0) > 0 ? formatMinor(payment.discount, payment.currency, { showSymbols, decimalPlaces }) : null;\n const taxAmount = payment.tax?.amount ?? 0;\n const tax = taxAmount > 0 ? formatMinor(taxAmount, payment.currency, { showSymbols, decimalPlaces }) : null;\n const total = formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n\n let result = `Subtotal: ${subtotal}`;\n if (discount) result += `, Discount: -${discount}`;\n if (tax) result += `, Tax: ${tax}`;\n result += `, Total: ${total}`;\n return result;\n }\n\n return formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n}\n\n// Format market-based prices (from product variants)\nexport function getMarketPrice(\n prices: Price[],\n marketId: string,\n businessMarkets?: any[],\n options: {\n showSymbols?: boolean;\n decimalPlaces?: number;\n showCompareAt?: boolean;\n fallbackMarket?: string;\n } = {}\n): string {\n if (!prices || prices.length === 0) return '';\n\n const {\n showSymbols = true,\n decimalPlaces = 2,\n showCompareAt = true,\n fallbackMarket,\n } = options;\n\n // Find price for the specific market\n let price = prices.find(p => p.market === marketId);\n\n // Fallback to fallback market (if provided) or first available\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = prices[0];\n }\n\n if (!price) return '';\n\n let currency: string;\n let symbol: string;\n\n // If we have business markets, use the currency directly from market data\n if (businessMarkets) {\n const marketData = businessMarkets.find(m => m.id === price.market || m.code === price.market);\n if (marketData?.currency) {\n currency = marketData.currency;\n symbol = getCurrencySymbol(currency);\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getCurrencySymbol(currency);\n }\n } else {\n currency = getCurrencyFromMarket(price.market);\n symbol = getCurrencySymbol(currency);\n }\n\n // Format price with custom symbol\n const formattedPrice = formatMinor(price.amount ?? 0, currency, {\n showSymbols,\n decimalPlaces,\n customSymbol: symbol\n });\n\n // Add compare-at price if available\n if (showCompareAt && price.compareAt && price.compareAt > (price.amount ?? 0)) {\n const formattedCompareAt = formatMinor(price.compareAt, currency, {\n showSymbols,\n decimalPlaces,\n customSymbol: symbol\n });\n return `${formattedPrice} was ${formattedCompareAt}`;\n }\n\n return formattedPrice;\n}\n\n// Get price amount from market-based prices (for calculations)\nexport function getPriceAmount(prices: Price[], marketId: string, fallbackMarket?: string): number {\n if (!prices || prices.length === 0) return 0;\n\n let price = prices.find(p => p.market === marketId);\n if (!price && fallbackMarket) {\n price = prices.find(p => p.market === fallbackMarket);\n }\n if (!price) {\n price = prices[0];\n }\n\n // Amounts are stored in minor units (e.g., cents)\n return price?.amount || 0;\n}\n\n// Create Payment structure for checkout (all amounts in minor units)\nexport function createPaymentForCheckout(\n subtotalMinor: number,\n marketId: string,\n currency: string,\n paymentMethod: any,\n options: {\n discount?: number;\n taxAmount?: number;\n taxRateBps?: number;\n promoCode?: {\n id: string;\n code: string;\n type: string;\n value: number;\n };\n } = {}\n): Payment {\n const { discount = 0, taxAmount = 0, taxRateBps = 0, promoCode } = options;\n const total = subtotalMinor - discount + taxAmount;\n\n return {\n currency,\n market: marketId,\n subtotal: subtotalMinor,\n shipping: 0,\n discount,\n total,\n type: paymentMethod,\n ...(taxAmount > 0 && {\n tax: {\n amount: taxAmount,\n rateBps: taxRateBps,\n lines: [],\n },\n }),\n ...(promoCode && { promoCode }),\n };\n}\n","// Validation utilities\n\nexport interface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n// Phone number validation\nexport function validatePhoneNumber(phone: string): ValidationResult {\n if (!phone) {\n return { isValid: false, error: 'Phone number is required' };\n }\n \n const cleaned = phone.replace(/\\D/g, '');\n \n if (cleaned.length < 8) {\n return { isValid: false, error: 'Phone number is too short' };\n }\n \n if (cleaned.length > 15) {\n return { isValid: false, error: 'Phone number is too long' };\n }\n \n return { isValid: true };\n}\n\n// Email validation\nexport function validateEmail(email: string): ValidationResult {\n if (!email) {\n return { isValid: false, error: 'Email is required' };\n }\n \n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n \n if (!emailRegex.test(email)) {\n return { isValid: false, error: 'Please enter a valid email address' };\n }\n \n return { isValid: true };\n}\n\n// Verification code validation (4-digit codes)\nexport function validateVerificationCode(code: string): ValidationResult {\n if (!code) {\n return { isValid: false, error: 'Verification code is required' };\n }\n \n const cleaned = code.replace(/\\D/g, '');\n \n if (cleaned.length !== 4) {\n return { isValid: false, error: 'Please enter a 4-digit verification code' };\n }\n \n return { isValid: true };\n}\n\n// Generic required field validation\nexport function validateRequired(value: any, fieldName: string = 'This field'): ValidationResult {\n if (value === null || value === undefined || value === '') {\n return { isValid: false, error: `${fieldName} is required` };\n }\n \n return { isValid: true };\n}","// Timezone utilities (moved from Reservation folder)\n\nexport const tzGroups = [\n {\n label: \"US\",\n zones: [\n { label: \"Eastern Time\", value: \"America/New_York\" },\n { label: \"Central Time\", value: \"America/Chicago\" },\n { label: \"Mountain Time\", value: \"America/Denver\" },\n { label: \"Pacific Time\", value: \"America/Los_Angeles\" },\n ],\n },\n {\n label: \"Europe\",\n zones: [\n { label: \"London\", value: \"Europe/London\" },\n { label: \"Paris\", value: \"Europe/Paris\" },\n { label: \"Berlin\", value: \"Europe/Berlin\" },\n { label: \"Rome\", value: \"Europe/Rome\" },\n ],\n },\n {\n label: \"Asia\",\n zones: [\n { label: \"Tokyo\", value: \"Asia/Tokyo\" },\n { label: \"Shanghai\", value: \"Asia/Shanghai\" },\n { label: \"Mumbai\", value: \"Asia/Kolkata\" },\n { label: \"Dubai\", value: \"Asia/Dubai\" },\n ],\n },\n];\n\nexport function findTimeZone(groups: typeof tzGroups): string {\n try {\n const detected = Intl.DateTimeFormat().resolvedOptions().timeZone;\n \n // Check if detected timezone is in our list\n for (const group of groups) {\n for (const zone of group.zones) {\n if (zone.value === detected) {\n return detected;\n }\n }\n }\n \n // Fallback to UTC if not found\n return \"UTC\";\n } catch (e) {\n // Fallback to UTC if detection fails\n return \"UTC\";\n }\n}","// Define locales inline since we don't have @lib/i18n in SDK\nconst locales = ['en', 'sr-latn'] as const;\nconst localeMap: Record<typeof locales[number], string> = {\n\t'en': 'en-US',\n\t'sr-latn': 'sr-RS'\n};\n\n/**\n * * returns \"slugified\" text.\n * @param text: string - text to slugify\n */\nexport function slugify(text: string): string {\n\treturn text\n\t\t.toString()\n\t\t.toLowerCase() // convert to lowercase\n\t\t.replace(/\\s+/g, \"-\") // replace spaces with -\n\t\t.replace(/[^\\w-]+/g, \"\") // remove all non-word chars\n\t\t.replace(/--+/g, \"-\") // replace multiple dashes with single dash\n\t\t.replace(/^-+/, \"\") // trim dash from start of text\n\t\t.replace(/-+$/, \"\"); // trim dash from end of text\n}\n\n/**\n * * returns \"humanized\" text. runs slugify() and then replaces - with space and upper case first letter of every word, and lower case the rest\n * @param text: string - text to humanize\n */\nexport function humanize(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn (\n\t\tslugifiedText\n\t\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t\t// .toLowerCase();\n\t\t\t.replace(\n\t\t\t\t// upper case first letter of every word, and lower case the rest\n\t\t\t\t/\\w\\S*/g,\n\t\t\t\t(w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(),\n\t\t\t)\n\t);\n}\n\n// --------------------------------------------------------\n/**\n * * returns \"categorified\" text. runs slugify() and then replaces - with space and upper cases everything\n * @param text: string - text to categorify\n * @returns string - categorified text\n */\nexport function categorify(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn slugifiedText\n\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t.toUpperCase();\n}\n\n// --------------------------------------------------------\n/**\n * * returns a nicely formatted string of the date passed\n * @param date: string | number | Date - date to format\n * @param locale: string - locale to format the date in\n * @returns string - formatted date\n */\nexport function formatDate(date: string | number | Date, locale: (typeof locales)[number]): string {\n\tlet localeString = \"en-US\";\n\n\tif (locales.includes(locale)) {\n\t\tlocaleString = localeMap[locale];\n\t}\n\n\treturn new Date(date).toLocaleDateString(localeString, {\n\t\ttimeZone: \"UTC\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n}","import { getImageUrl } from \"./blocks\";\n\nexport async function fetchSvgContent(mediaObject: any): Promise<string | null> {\n\tif (!mediaObject) return null;\n\n\tconst svgUrl = getImageUrl(mediaObject, false);\n\n\ttry {\n\t\tconst response = await fetch(svgUrl);\n\n\t\tif (!response.ok) {\n\t\t\tconsole.error(`Failed to fetch SVG: ${response.status} ${response.statusText}`);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst svgContent = await response.text();\n\t\treturn svgContent;\n\t} catch (error) {\n\t\tconsole.error(\"Error fetching SVG:\", error);\n\t\treturn null;\n\t}\n}\n\n/**\n * Server-side helper for Astro components to fetch SVG content during SSR\n *\n * @param mediaObject The media object from the CMS\n * @returns The SVG content as a string, or empty string on failure\n */\nexport async function getSvgContentForAstro(mediaObject: any): Promise<string> {\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\t\treturn svgContent || \"\";\n\t} catch (error) {\n\t\tconsole.error(\"Error getting SVG content for Astro:\", error);\n\t\treturn \"\";\n\t}\n}\n\n/**\n * Client-side helper to fetch and inject SVG content into DOM elements\n *\n * @param mediaObject The media object from the CMS\n * @param targetElement The DOM element to inject the SVG into\n * @param className Optional CSS class to add to the SVG\n */\nexport async function injectSvgIntoElement(\n\tmediaObject: any,\n\ttargetElement: HTMLElement,\n\tclassName?: string,\n): Promise<void> {\n\tif (!targetElement) return;\n\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\n\t\tif (svgContent) {\n\t\t\ttargetElement.innerHTML = svgContent;\n\n\t\t\t// Add class if provided\n\t\t\tif (className) {\n\t\t\t\tconst svgElement = targetElement.querySelector(\"svg\");\n\t\t\t\tif (svgElement) {\n\t\t\t\t\tsvgElement.classList.add(...className.split(\" \"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"Error injecting SVG:\", error);\n\t}\n}","// Export types\nexport type {\n ApiResponse,\n EshopCartItem,\n EshopStoreState,\n ReservationStoreState,\n ReservationCartItem,\n Business,\n BusinessConfig,\n Block,\n Price,\n Payment,\n PaymentMethod,\n PaymentProviderConfig,\n ShippingMethod,\n ShippingWeightTier,\n Zone,\n Market,\n Location,\n Quote,\n QuoteLineItem,\n PromoCodeValidation,\n PaginatedResponse,\n Language,\n Seo,\n Media,\n MediaResolution,\n ProviderWithTimeline,\n} from \"./types\";\n\n// Export enums (must be exported as values, not types)\nexport { PaymentMethodType } from \"./types\";\n\n// Export reservation types\nexport type {\n GetSlotsForDateParams,\n GetAvailabilityParams,\n DayAvailability,\n Slot,\n} from \"./types/api\";\n\n// Export location types\nexport type {\n LocationState,\n LocationCountry,\n GetCountriesResponse,\n} from \"./api/location\";\n\nexport const SDK_VERSION = \"0.3.88\";\nexport const SUPPORTED_FRAMEWORKS = [\n \"astro\",\n \"react\",\n \"vue\",\n \"svelte\",\n \"vanilla\",\n] as const;\n\nexport interface ApiConfig {\n httpClient: any;\n businessId: string;\n baseUrl: string;\n market: string;\n locale: string;\n setToken: (tokens: any) => void;\n getToken: () => Promise<any> | any;\n}\n\nimport {\n createHttpClient,\n type HttpClientConfig,\n} from \"./services/createHttpClient\";\nimport { createUserApi } from \"./api/user\";\nimport { createBusinessApi } from \"./api/business\";\nimport { createMediaApi } from \"./api/media\";\nimport { createRoleApi } from \"./api/role\";\nimport { createNotificationApi } from \"./api/notification\";\nimport { createPromoCodeApi } from \"./api/promoCode\";\nimport { createAnalyticsApi } from \"./api/analytics\";\nimport { createCmsApi } from \"./api/cms\";\nimport { createEshopApi } from \"./api/eshop\";\nimport { createReservationApi } from \"./api/reservation\";\nimport { createDatabaseApi } from \"./api/database\";\nimport { createFeatureFlagsApi } from \"./api/featureFlags\";\nimport { createLocationApi } from \"./api/location\";\nimport {\n getImageUrl,\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n} from \"./utils/blocks\";\nimport {\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n} from \"./utils/price\";\nimport { getCurrencySymbol } from \"./utils/currency\";\nimport { validatePhoneNumber } from \"./utils/validation\";\nimport { tzGroups, findTimeZone } from \"./utils/timezone\";\nimport { slugify, humanize, categorify, formatDate } from \"./utils/text\";\nimport {\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n} from \"./utils/svg\";\n\nexport async function createArkySDK(\n config: HttpClientConfig & { market: string; locale?: string }\n) {\n const locale = config.locale || \"en\";\n\n const httpClient = createHttpClient(config);\n\n const apiConfig: ApiConfig = {\n httpClient,\n businessId: config.businessId,\n baseUrl: config.baseUrl,\n market: config.market,\n locale,\n setToken: config.setToken,\n getToken: config.getToken,\n };\n\n const userApi = createUserApi(apiConfig);\n\n const autoGuest = config.autoGuest !== undefined ? config.autoGuest : true;\n\n // If autoGuest, login before returning SDK\n if (autoGuest) {\n try {\n const tokens = await config.getToken();\n if (!tokens.accessToken && !tokens.refreshToken) {\n const result: any = await httpClient.post(\"/v1/users/login\", {\n provider: \"GUEST\",\n });\n const token = result.accessToken || result.token || \"\";\n if (token) {\n config.setToken(result);\n }\n }\n } catch (error) {\n // Silent fail - guest auth is optional\n }\n }\n\n const sdk = {\n user: userApi,\n business: createBusinessApi(apiConfig),\n media: createMediaApi(apiConfig),\n role: createRoleApi(apiConfig),\n notification: createNotificationApi(apiConfig),\n promoCode: createPromoCodeApi(apiConfig),\n analytics: createAnalyticsApi(apiConfig),\n cms: createCmsApi(apiConfig),\n eshop: createEshopApi(apiConfig),\n reservation: createReservationApi(apiConfig),\n database: createDatabaseApi(apiConfig),\n featureFlags: createFeatureFlagsApi(apiConfig),\n location: createLocationApi(apiConfig),\n\n setBusinessId: (businessId: string) => {\n apiConfig.businessId = businessId;\n },\n\n getBusinessId: () => apiConfig.businessId,\n\n setMarket: (market: string) => {\n apiConfig.market = market;\n },\n\n getMarket: () => apiConfig.market,\n\n setLocale: (locale: string) => {\n apiConfig.locale = locale;\n },\n\n getLocale: () => apiConfig.locale,\n\n isAuthenticated: config.isAuthenticated || (() => false),\n logout: config.logout,\n setToken: config.setToken,\n\n // Top-level block utilities for convenience\n extractBlockValues,\n\n utils: {\n // Block utilities\n getImageUrl: (imageBlock: any, isBlock = true) =>\n getImageUrl(imageBlock, isBlock),\n getBlockValue,\n getBlockValues,\n getBlockLabel,\n getBlockTextValue,\n getBlockObjectValues,\n getBlockFromArray,\n formatBlockValue,\n prepareBlocksForSubmission,\n extractBlockValues,\n\n // Price utilities\n getMarketPrice,\n getPriceAmount,\n formatPayment,\n formatMinor,\n createPaymentForCheckout,\n\n // Currency utilities\n getCurrencySymbol,\n\n // Validation utilities\n validatePhoneNumber,\n\n // Timezone utilities\n tzGroups,\n findTimeZone,\n\n // Text utilities\n slugify,\n humanize,\n categorify,\n formatDate,\n\n // SVG utilities\n getSvgContentForAstro,\n fetchSvgContent,\n injectSvgIntoElement,\n },\n };\n\n return sdk;\n}\n\nexport type { HttpClientConfig } from \"./services/createHttpClient\";\n"]}