{"version":3,"sources":["../../src/types.ts","../../src/base-adapter.ts","../../src/utils/factory.ts"],"names":[],"mappings":";;;AAoSO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,YACE,OAAA,EACO,UAAA,GAAqB,GAAA,EACrB,IAAA,GAAe,kBACf,OAAA,EACP;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJN,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,eAAA,GAAN,cAA8B,gBAAA,CAAiB;AAAA,EACpD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,kBAAA,EAAoB,OAAO,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,mBAAA,GAAN,cAAkC,gBAAA,CAAiB;AAAA,EACxD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,sBAAA,EAAwB,OAAO,CAAA;AACnD,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF,CAAA;AASO,IAAM,aAAA,GAAN,cAA4B,gBAAA,CAAiB;AAAA,EAClD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,WAAA,EAAa,OAAO,CAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF,CAAA;;;AClTO,IAAM,oBAAN,MAAwB;AAAA,EACrB,MAAA;AAAA,EACE,MAAA;AAAA,EACF,SAAA,uBAA6C,GAAA,EAAI;AAAA,EACjD,MAAA;AAAA,EAER,WAAA,CAAY,QAA2B,MAAA,EAAyB;AAC9D,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,cAAA,EAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAA+B;AAC7B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAuB;AAC7B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc;AAE1C,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AAEnB,MAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,EAAO;AAC/B,QAAA,MAAM,QAAA,GAA2B;AAAA,UAC/B,YAAY,MAAA,CAAO,IAAA;AAAA,UACnB,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,UAC/D,MAAA,EAAQ,IAAA,CAAK,QAAA,EAAU,IAAA,EAAM,MAAA,IAAU,MAAA;AAAA,UACvC,YAAA,EAAc,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,CAAA;AAAA,UAC/C,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,aAAa,IAAA,CAAK,gBAAA;AAAA,UAClB,cAAc,IAAA,CAAK;AAAA,SACrB;AAEA,QAAA,MAAM,MAAM,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA;AACvC,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAiC;AAC/B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,CACE,YACA,QAAA,EAC4B;AAC5B,IAAA,OAAO,KAAK,SAAA,CAAU,GAAA,CAAI,GAAG,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,CACJ,GAAA,EACA,UAAA,EAC2B;AAC3B,IAAA,MAAM,QAAA,GAAW,KAAK,WAAA,CAAY,GAAA,CAAI,OAAO,IAAA,EAAM,GAAA,CAAI,OAAO,IAAI,CAAA;AAClE,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,uBAAuB,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,IAAI,CAAA;AAAA,OAC3D;AAAA,IACF;AAGA,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,MAAM,IAAA,CAAK,qBAAA,CAAsB,GAAA,EAAK,UAAU,CAAA;AAAA,IAClD,CAAA,MAAO;AAEL,MAAA,MAAM,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,UAAU,CAAA;AAAA,IAC3C;AAGA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,GAAA,EAAK,UAAU,UAAU,CAAA;AAE7D,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,WAAA;AAAA,QAC/B,QAAA,CAAS,UAAA;AAAA,QACT,QAAA,CAAS,QAAA;AAAA,QACT;AAAA,OACF;AAGA,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,SAAS,UAAU,CAAA;AACpD,MAAA,MAAM,IAAA,GAAO,IAAI,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAA,CAAS,QAAQ,CAAA;AAEhE,MAAA,MAAM,SAAS,IAAA,EAAM,QAAA,EAAU,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAM,CAAA,IAAK,GAAA;AAE/D,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACJ,GAAG,MAAA;AAAA,UACH,cAAc,MAAA,CAAO;AAAA,SACvB;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,SACpC;AAAA,QACA,MAAA;AAAA,QACA,UAAU,MAAA,CAAO,QAAA;AAAA;AAAA,QACjB,QAAQ,MAAA,CAAO;AAAA;AAAA,OACjB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,0BAA0B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAChF,GAAA;AAAA,QACA,sBAAA;AAAA,QACA,EAAE,UAAA,EAAY,QAAA,CAAS,YAAY,QAAA,EAAU,QAAA,CAAS,UAAU,KAAA;AAAM,OACxE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CACJ,GAAA,EACA,UAAA,EAC0B;AAC1B,IAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAW,YAAW,GAAI,GAAA,CAAI,QAAQ,EAAC;AAE5D,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,SAAA,EAAW;AAC9B,MAAA,MAAM,IAAI,gBAAgB,wCAAwC,CAAA;AAAA,IACpE;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,gBAAA;AAAA,QAC9B,WAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACJ,KAAA,EAAO,IAAA;AAAA,UACP,KAAA;AAAA,UACA,SAAA,EAAW,UAAA,GACP,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA,GAAa,GAAI,CAAA,CAAE,WAAA,EAAY,GACrD,KAAA;AAAA,SACN;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,4BAA4B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAClF,GAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CACJ,GAAA,EACA,UAAA,EAC0B;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA;AAE1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACJ,KAAA,EAAO;AAAA,SACT;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,OACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,OAAO,UAAU,CAAA;AAE/D,MAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,IAAA,EAAM;AAAA,YACJ,KAAA,EAAO;AAAA,WACT;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,SACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACJ,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,QAAA,EAAU;AAAA,YACR,SAAS,MAAA,CAAO,OAAA;AAAA,YAChB,MAAM,MAAA,CAAO;AAAA;AACf,SACF;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACJ,KAAA,EAAO;AAAA,SACT;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,GAAA,EAA2C;AAC9D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA;AAE1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,gBAAgB,2BAA2B,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,iBAAA,EAAkB,CAAE,eAAe,KAAK,CAAA;AAE1D,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR,+BAA+B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QACrF,GAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAA2C;AAC/C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc;AAE1C,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MACpC,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,WAAA,EAAa,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,sBAAA,CAAA;AAAA,MAC3B,QAAQ,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QACzC,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,MAAA,EAAQ,IAAA,CAAK,QAAA,EAAU,IAAA,EAAM,MAAA,IAAU,MAAA;AAAA,QACvC,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA,MAAA,EAAS,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,QACpE,YAAA,EAAc,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI;AAAA,OACjD,CAAE;AAAA,KACJ,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,UAAA,EAA0C;AACxD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,UAAU,CAAA;AAE/C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,aAAA,CAAc,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAE,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,WAAA,EAAa,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,sBAAA,CAAA;AAAA,MAC3B,QAAQ,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QACzC,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,MAAA,EAAQ,IAAA,CAAK,QAAA,EAAU,IAAA,EAAM,MAAA,IAAU,MAAA;AAAA,QACvC,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA,MAAA,EAAS,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,QACpE,YAAA,EAAc,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,CAAA;AAAA,QAC/C,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,EAAC;AAAA,QACxB,WAAA,EAAa,IAAA,CAAK,gBAAA,EAAkB,YAAA,QAAoB,EAAC;AAAA,QACzD,YAAA,EAAc,IAAA,CAAK,OAAA,EAAS,YAAA,QAAoB;AAAC,OACnD,CAAE;AAAA,KACJ;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,GAAyC;AAC7C,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAqB;AAG3D,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,QAAA,IAAY,EAAA;AAAA,MAClC,WAAA,EAAa;AAAA,QACX,MAAA,EAAQ;AAAA,UACN,iBAAA,EACE,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa,kBAAA,IAAsB,eAAA;AAAA,UACjD,kBAAA,EACE,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa,kBAAA,IAAsB,iBAAA;AAAA,UACjD,SAAA,EAAW;AAAA;AAAA,SACb;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,eAAA,EAAiB,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,IAAA,IAAQ,gBAAA;AAAA,UAC7C,gBAAA,EACE,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,gBAAA,IAAoB,gBAAA;AAAA,UAC1C,OAAA,EAAS,CAAC,CAAC,IAAA,CAAK,MAAA,CAAO;AAAA;AACzB;AACF,KACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,GAAG,iBAAA;AAAA,QACH;AAAA,OACF;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAAoC;AACxC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc,CAAE,MAAA;AAAA,QACrC,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,OAC5B;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,GAAA,EAAyB;AACnD,IAAA,IAAI,WAAA,GAA6B,IAAA;AACjC,IAAA,IAAI,YAAA,GAA8B,IAAA;AAGlC,IAAA,MAAM,UAAA,GAAa,IAAI,OAAA,CAAQ,aAAA;AAC/B,IAAA,IAAI,UAAA,EAAY,UAAA,CAAW,SAAS,CAAA,EAAG;AACrC,MAAA,WAAA,GAAc,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,IACtC;AAGA,IAAA,IACE,CAAC,eACD,GAAA,CAAI,OAAA,CACF,KAAK,MAAA,CAAO,WAAA,EAAa,kBAAA,IAAsB,gBACjD,CAAA,EACA;AACA,MAAA,WAAA,GACE,IAAI,OAAA,CACF,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa,sBAAsB,gBACjD,CAAA;AAAA,IACJ;AACA,IAAA,IACE,CAAC,gBACD,GAAA,CAAI,OAAA,CACF,KAAK,MAAA,CAAO,WAAA,EAAa,kBAAA,IAAsB,iBACjD,CAAA,EACA;AACA,MAAA,YAAA,GACE,IAAI,OAAA,CACF,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa,sBAAsB,iBACjD,CAAA;AAAA,IACJ;AAGA,IAAA,IACE,CAAC,eACD,GAAA,CAAI,OAAA,GAAU,KAAK,MAAA,CAAO,MAAA,EAAQ,IAAA,IAAQ,gBAAgB,CAAA,EAC1D;AACA,MAAA,WAAA,GAAc,IAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,QAAQ,gBAAgB,CAAA;AAAA,IACxE;AAEA,IAAA,IACE,CAAC,gBACD,GAAA,CAAI,OAAA,GAAU,KAAK,MAAA,CAAO,MAAA,EAAQ,gBAAA,IAAoB,gBAAgB,CAAA,EACtE;AACA,MAAA,YAAA,GACE,IAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,oBAAoB,gBAAgB,CAAA;AAAA,IACxE;AAEA,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,kCAAA,EAAoC;AAAA,QAC3D,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,sCAAA,EAAwC;AAAA,QAC/D,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,EAAE,aAAa,YAAA,EAAa;AAAA,IACrC;AAEA,IAAA,IAAI,WAAA,IAAe,CAAC,YAAA,EAAc;AAChC,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,0CAAA,EAA4C;AAAA,QACnE,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,wCAAA,EAA0C;AAAA,MACjE,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI;AAAA,KACnB,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAA,CACN,GAAA,EACA,QAAA,EACA,UAAA,EACW;AACX,IAAA,MAAM,KAAA,GAAmB;AAAA,MACvB,GAAG,GAAA,CAAI,IAAA;AAAA,MACP,GAAG,GAAA,CAAI,KAAA;AAAA,MACP,GAAG,GAAA,CAAI,MAAA;AAAA,MACP,GAAG,GAAA,CAAI;AAAA;AAAA,KACT;AAGA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA;AAC1C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AAAA,IAChB;AAGA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,CAAM,UAAA,GAAa,UAAA;AAAA,IACrB;AAGA,IAAA,IAAI,IAAI,EAAA,EAAI;AACV,MAAA,KAAA,CAAM,KAAK,GAAA,CAAI,EAAA;AAAA,IACjB;AACA,IAAA,IAAI,IAAI,SAAA,EAAW;AACjB,MAAA,KAAA,CAAM,YAAY,GAAA,CAAI,SAAA;AAAA,IACxB;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,GAAA,EACA,UAAA,EACmC;AACnC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA;AAE1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,kCAAA,EAAoC;AAAA,QAC3D,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,OAAO,UAAU,CAAA;AAEhE,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,IAAS,CAAC,QAAQ,OAAA,EAAS;AACtC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,2CAAA,EAA6C;AAAA,UACpE,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI;AAAA,SACnB,CAAA;AACD,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO;AAAA,QACL,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,KAAA;AAAA,QACxB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAA,EAAU;AAAA,UACR,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,MAAM,OAAA,CAAQ;AAAA;AAChB,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,sBAAA,EAAwB;AAAA,QAChD,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI,OAAA;AAAA,QAClB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,CACJ,GAAA,EACA,UAAA,EAC4B;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,cAAA,CAAe,KAAK,UAAU,CAAA;AAEtD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,2CAAA,EAA6C;AAAA,QACpE,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,UAAA,EAAY,CAAC,CAAC,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,MAAM,IAAI,oBAAoB,yBAAyB,CAAA;AAAA,IACzD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,cACE,OAAA,EAC8C;AAC9C,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,OAAA,EAAuB;AACxC,IAAA,OAAO,OAAO,KAAkB,GAAA,KAAqC;AACnE,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AACrC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAAA,QAC7B;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,WAAA,CAAY,OAAO,GAAG,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,CAAY,OAAgB,GAAA,EAAyB;AAC3D,IAAA,IAAI,iBAAiB,gBAAA,EAAkB;AACrC,MAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA,CAAE,IAAA,CAAK;AAAA,QAChC,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,SAAS,KAAA,CAAM;AAAA,SACjB;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,OACD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK;AAAA,QACnB,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,OACD,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAA;;;AC3nBO,SAAS,uBAAA,CACd,QACA,MAAA,EACmB;AACnB,EAAA,MAAM,aAAA,GAAmC;AAAA,IACvC,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM;AAAA,MACJ,MAAA,EAAQ,IAAA;AAAA,MACR,WAAA,EAAa,IAAA;AAAA,MACb,cAAA,EAAgB,CAAC,cAAA,EAAgB,eAAe,CAAA;AAAA,MAChD,SAAS,CAAC,KAAA,EAAO,QAAQ,KAAA,EAAO,QAAA,EAAU,SAAS,SAAS;AAAA,KAC9D;AAAA,IACA,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,KAAK,EAAA,GAAK,GAAA;AAAA;AAAA,MACpB,GAAA,EAAK,GAAA;AAAA,MACL,OAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAU;AAAA,MACR,MAAA,EAAQ,IAAA;AAAA,MACR,aAAA,EAAe,IAAA;AAAA,MACf,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,aAAA,EAAe,IAAA;AAAA,MACf,gBAAgB,IAAA,GAAO,IAAA;AAAA;AAAA,MACvB,cAAA,EAAgB,CAAC,OAAA,EAAS,UAAA,EAAY,QAAQ,aAAa;AAAA,KAC7D;AAAA,IACA,GAAG;AAAA,GACL;AAEA,EAAA,OAAO,IAAI,iBAAA,CAAkB,aAAA,EAAe,MAAM,CAAA;AACpD;AAKO,SAAS,gBAAgB,OAAA,EAK9B;AACA,EAAA,MAAM,SAAA,GAAY,QAAQ,YAAA,EAAa;AACvC,EAAA,MAAM,QAA6B,EAAC;AAGpC,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,WAAA,EAAY;AAE3C,IAAA,IAAI,CAAC,KAAA,CAAM,IAAI,CAAA,EAAG;AAChB,MAAA,KAAA,CAAM,IAAI,IAAI,EAAC;AAAA,IACjB;AAEA,IAAA,KAAA,CAAM,IAAI,CAAA,CAAE,MAAM,CAAA,GAAI;AAAA,MACpB,SAAS,CAAA,QAAA,EAAW,QAAA,CAAS,QAAQ,CAAA,UAAA,EAAa,SAAS,UAAU,CAAA,OAAA,CAAA;AAAA,MACrE,WAAA,EAAa,SAAS,WAAA,IAAe,CAAA,2BAAA,CAAA;AAAA,MACrC,IAAA,EAAM,CAAC,QAAA,CAAS,UAAU,CAAA;AAAA,MAC1B,UAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,EAAA,EAAI,MAAA;AAAA,UACJ,QAAA,EAAU,IAAA;AAAA,UACV,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,UACzB,WAAA,EAAa;AAAA,SACf;AAAA,QACA;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,EAAA,EAAI,MAAA;AAAA,UACJ,QAAA,EAAU,IAAA;AAAA,UACV,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,UACzB,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA,WAAA,EAAa;AAAA,QACX,OAAA,EAAS;AAAA,UACP,kBAAA,EAAoB;AAAA,YAClB,MAAA,EAAQ,QAAA,CAAS,WAAA,IAAe,EAAE,MAAM,QAAA;AAAS;AACnD;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,qBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ;AAAA,gBACN,IAAA,EAAM,QAAA;AAAA,gBACN,UAAA,EAAY;AAAA,kBACV,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAU;AAAA,kBAC3B,IAAA,EAAM,QAAA,CAAS,YAAA,IAAgB,EAAE,MAAM,QAAA,EAAS;AAAA,kBAChD,IAAA,EAAM;AAAA,oBACJ,IAAA,EAAM,QAAA;AAAA,oBACN,UAAA,EAAY;AAAA,sBACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD;AACF;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,kBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,oCAAA;AAAqC;AACvD;AACF,SACF;AAAA,QACA,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,yBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,oCAAA;AAAqC;AACvD;AACF,SACF;AAAA,QACA,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,uBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,oCAAA;AAAqC;AACvD;AACF;AACF,OACF;AAAA,MACA,QAAA,EAAU,QAAA,CAAS,YAAA,GAAe,CAAC,EAAE,YAAY,EAAC,EAAG,CAAA,GAAI;AAAC,KAC5D;AAAA,EACF;AAGA,EAAA,KAAA,CAAM,UAAU,CAAA,GAAI;AAAA,IAClB,GAAA,EAAK;AAAA,MACH,OAAA,EAAS,wBAAA;AAAA,MACT,WAAA,EAAa,wCAAA;AAAA,MACb,IAAA,EAAM,CAAC,oBAAoB,CAAA;AAAA,MAC3B,UAAU,CAAC,EAAE,UAAA,EAAY,IAAI,CAAA;AAAA,MAC7B,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,sBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,sCAAA;AAAuC;AACzD;AACF;AACF;AACF,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,oBAAA;AAAA,MACT,WAAA,EAAa,oCAAA;AAAA,MACb,IAAA,EAAM,CAAC,oBAAoB,CAAA;AAAA,MAC3B,WAAA,EAAa;AAAA,QACX,OAAA,EAAS;AAAA,UACP,kBAAA,EAAoB;AAAA,YAClB,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC9B,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC5B,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA;AAAS,eAC/B;AAAA,cACA,QAAA,EAAU,CAAC,aAAA,EAAe,WAAW;AAAA;AACvC;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,8BAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,sCAAA;AAAuC;AACzD;AACF;AACF;AACF,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,iBAAA;AAAA,MACT,WAAA,EAAa,6BAAA;AAAA,MACb,IAAA,EAAM,CAAC,oBAAoB,CAAA;AAAA,MAC3B,UAAU,CAAC,EAAE,UAAA,EAAY,IAAI,CAAA;AAAA,MAC7B,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,gCAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,sCAAA;AAAuC;AACzD;AACF;AACF;AACF;AACF,GACF;AAGA,EAAA,KAAA,CAAM,UAAU,CAAA,GAAI;AAAA,IAClB,GAAA,EAAK;AAAA,MACH,OAAA,EAAS,kBAAA;AAAA,MACT,WAAA,EAAa,oDAAA;AAAA,MACb,IAAA,EAAM,CAAC,sBAAsB,CAAA;AAAA,MAC7B,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,iBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,yCAAA;AAA0C;AAC5D;AACF;AACF;AACF;AACF,GACF;AAEA,EAAA,KAAA,CAAM,mBAAmB,CAAA,GAAI;AAAA,IAC3B,GAAA,EAAK;AAAA,MACH,OAAA,EAAS,oBAAA;AAAA,MACT,WAAA,EAAa,kDAAA;AAAA,MACb,IAAA,EAAM,CAAC,sBAAsB,CAAA;AAAA,MAC7B,UAAA,EAAY;AAAA,QACV;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,EAAA,EAAI,MAAA;AAAA,UACJ,QAAA,EAAU,IAAA;AAAA,UACV,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,UACzB,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,gBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,4CAAA;AAA6C;AAC/D;AACF,SACF;AAAA,QACA,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,kBAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,oCAAA;AAAqC;AACvD;AACF;AACF;AACF;AACF,GACF;AAGA,EAAA,KAAA,CAAM,SAAS,CAAA,GAAI;AAAA,IACjB,GAAA,EAAK;AAAA,MACH,OAAA,EAAS,cAAA;AAAA,MACT,WAAA,EAAa,qDAAA;AAAA,MACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,MACf,SAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,WAAA,EAAa,eAAA;AAAA,UACb,OAAA,EAAS;AAAA,YACP,kBAAA,EAAoB;AAAA,cAClB,MAAA,EAAQ,EAAE,IAAA,EAAM,qCAAA;AAAsC;AACxD;AACF;AACF;AACF;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,oBAAA;AAAA,MACP,WAAA,EAAa,8CAAA;AAAA,MACb,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,GAAA,EAAK;AAAA,OACP;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,GAAA,EAAK;AAAA;AACP,KACF;AAAA,IACA,KAAA;AAAA,IACA,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB;AAAA,QACf,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,MAAA,EAAQ,QAAA;AAAA,UACR,YAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACA,OAAA,EAAS;AAAA,QACP,aAAA,EAAe;AAAA,UACb,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,KAAA,EAAM;AAAA,YAC3C,KAAA,EAAO;AAAA,cACL,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBACvB,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC1B,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA;AAAS;AAC5B,aACF;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD;AACF;AACF,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,YAC1C,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD;AACF;AACF,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,YAC1C,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,KAAA,EAAO,EAAE,IAAA,EAAM,SAAA,EAAU;AAAA,gBACzB,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC1B,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBACxB,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD,aACF;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD;AACF;AACF,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,YAC1C,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,OAAA;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,IAAA,EAAM,QAAA;AAAA,gBACN,UAAA,EAAY;AAAA,kBACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,kBACvB,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,kBAC9B,KAAA,EAAO;AAAA,oBACL,IAAA,EAAM,OAAA;AAAA,oBACN,KAAA,EAAO;AAAA,sBACL,IAAA,EAAM,QAAA;AAAA,sBACN,UAAA,EAAY;AAAA,wBACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,wBACvB,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,wBAC9B,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,wBACzB,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,wBACvB,YAAA,EAAc,EAAE,IAAA,EAAM,SAAA;AAAU;AAClC;AACF;AACF;AACF;AACF,aACF;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD;AACF;AACF,SACF;AAAA,QACA,qBAAA,EAAuB;AAAA,UACrB,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,YAC1C,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBACvB,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC9B,KAAA,EAAO;AAAA,kBACL,IAAA,EAAM,OAAA;AAAA,kBACN,KAAA,EAAO;AAAA,oBACL,IAAA,EAAM,QAAA;AAAA,oBACN,UAAA,EAAY;AAAA,sBACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,sBACvB,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,sBAC9B,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,sBACzB,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,sBACvB,YAAA,EAAc,EAAE,IAAA,EAAM,SAAA,EAAU;AAAA,sBAChC,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,UAAS,EAAE;AAAA,sBACnD,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,sBAC9B,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA;AAAS;AACjC;AACF;AACF;AACF,aACF;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD;AACF;AACF,SACF;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,YAC1C,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,SAAA,EAAU;AAAA,gBAC7C,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC1B,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,gBAC1B,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA;AAAS;AAC9B,aACF;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,WAAA;AAAY;AACnD;AACF;AACF;AACF;AACF;AACF,GACF;AACF;AAKO,SAAS,eAAe,SAAA,EAAuC;AACpE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,KAAA,CAAM,GAAA,CAAI,SAAS,UAAU,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,EAAK;AAChC;AAKO,SAAS,uBACd,SAAA,EACkC;AAClC,EAAA,MAAM,SAA2C,EAAC;AAClD,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,GAAI,EAAC;AAAA,IACjC;AACA,IAAA,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,CAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,eAAe,MAAA,EAG7B;AACA,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,IAAA,MAAA,CAAO,KAAK,oBAAoB,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,OAAO,QAAA,IAAY,CAAC,OAAO,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,EAAG;AACvD,IAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,OAAO,SAAA,EAAW,GAAA,IAAO,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACtD,IAAA,MAAA,CAAO,KAAK,sCAAsC,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,OAAO,SAAA,EAAW,QAAA,IAAY,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA,EAAG;AAChE,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA,EACzD;AAEA,EAAA,IACE,OAAO,UAAA,EAAY,cAAA,IACnB,MAAA,CAAO,UAAA,CAAW,kBAAkB,CAAA,EACpC;AACA,IAAA,MAAA,CAAO,KAAK,kDAAkD,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,OAAO,MAAA,KAAW,CAAA;AAAA,IACzB;AAAA,GACF;AACF","file":"factory.cjs","sourcesContent":["import { AuthOutput, ReAuthEngine, Token } from '@re-auth/reauth';\nimport { ReAuthJWTPayload } from '@re-auth/reauth/services';\nimport { CookiePrefixOptions } from 'hono/utils/cookie';\n\n// Base HTTP adapter configuration\nexport interface HttpAdapterConfig {\n  engine: ReAuthEngine;\n  basePath?: string;\n  cors?: CorsConfig;\n  rateLimit?: RateLimitConfig;\n  security?: SecurityConfig;\n  validation?: ValidationConfig;\n  cookie?: {\n    name: string;\n    refreshTokenName?: string;\n    options: {\n      httpOnly?: boolean;\n      secure?: boolean;\n      sameSite?: 'lax' | 'strict' | 'none';\n      path?: string;\n      domain?: string;\n      maxAge?: number; // in seconds\n      expires?: Date;\n      partitioned?: boolean;\n      prefix?: CookiePrefixOptions;\n      priority?: 'low' | 'medium' | 'high';\n    };\n    refreshOptions?: {\n      httpOnly?: boolean;\n      secure?: boolean;\n      sameSite?: 'lax' | 'strict' | 'none';\n      path?: string;\n      domain?: string;\n      maxAge?: number; // in seconds\n      expires?: Date;\n      partitioned?: boolean;\n      prefix?: CookiePrefixOptions;\n      priority?: 'low' | 'medium' | 'high';\n    };\n  };\n  headerToken?: {\n    accesssTokenHeader: string;\n    refreshTokenHeader?: string;\n  };\n}\n\n// CORS configuration\nexport interface CorsConfig {\n  origin?:\n    | string\n    | string[]\n    | boolean\n    | ((\n        origin: string | undefined,\n        callback: (err: Error | null, allow?: boolean) => void,\n      ) => void);\n  credentials?: boolean;\n  allowedHeaders?: string[];\n  exposedHeaders?: string[];\n  methods?: string[];\n  preflightContinue?: boolean;\n  optionsSuccessStatus?: number;\n}\n\n// Rate limiting configuration\nexport interface RateLimitConfig {\n  windowMs?: number;\n  max?: number;\n  message?: string;\n  standardHeaders?: boolean;\n  legacyHeaders?: boolean;\n  skipSuccessfulRequests?: boolean;\n  skipFailedRequests?: boolean;\n  keyGenerator?: (request: any) => string;\n}\n\n// Security configuration\nexport interface SecurityConfig {\n  helmet?: boolean | HelmetConfig;\n  csrf?: boolean | CsrfConfig;\n  sanitizeInput?: boolean;\n  sanitizeOutput?: boolean;\n}\n\nexport interface HelmetConfig {\n  contentSecurityPolicy?: boolean | object;\n  crossOriginEmbedderPolicy?: boolean;\n  crossOriginOpenerPolicy?: boolean;\n  crossOriginResourcePolicy?: boolean;\n  dnsPrefetchControl?: boolean;\n  frameguard?: boolean | object;\n  hidePoweredBy?: boolean;\n  hsts?: boolean | object;\n  ieNoOpen?: boolean;\n  noSniff?: boolean;\n  originAgentCluster?: boolean;\n  permittedCrossDomainPolicies?: boolean;\n  referrerPolicy?: boolean | object;\n  xssFilter?: boolean;\n}\n\nexport interface CsrfConfig {\n  secret?: string;\n  cookie?: boolean | object;\n  sessionKey?: string;\n  value?: (req: any) => string;\n}\n\n// Input validation configuration\nexport interface ValidationConfig {\n  validateInput?: boolean;\n  validateOutput?: boolean;\n  maxPayloadSize?: number;\n  allowedFields?: string[];\n  sanitizeFields?: string[];\n}\n\n// HTTP request/response types for framework abstraction\nexport interface HttpRequest {\n  method: string;\n  url: string;\n  path: string;\n  query: Record<string, any>;\n  params: Record<string, string>;\n  body: any;\n  headers: Record<string, string>;\n  cookies?: Record<string, string>;\n  ip?: string;\n  userAgent?: string;\n  // Current authenticated user information\n  user?: AuthenticatedUser | null;\n}\n\n// Authenticated user information from session\nexport interface AuthenticatedUser {\n  /** The authenticated subject from the session */\n  subject: any;\n  /** The session token */\n  token: Token;\n  /** Whether the session is valid */\n  valid: boolean;\n  /** Session metadata */\n  metadata?: {\n    payload?: ReAuthJWTPayload;\n    type?: 'jwt' | 'legacy' | undefined;\n    // Add any other metadata fields as needed\n    [key: string]: any;\n  };\n}\n\nexport interface HttpResponse {\n  status(code: number): this;\n  json(data: any): this;\n  send(data: any): this;\n  header(name: string, value: string): this;\n  cookie(name: string, value: string, options?: any): this;\n  clearCookie(name: string, options?: any): this;\n}\n\n// Framework adapter interface\nexport interface FrameworkAdapter<\n  TRequest = any,\n  TResponse = any,\n  TNext = any,\n> {\n  name: string;\n  createMiddleware(): (\n    req: TRequest,\n    res: TResponse,\n    next: TNext,\n  ) => Promise<void> | void;\n  createUserMiddleware(): (\n    req: TRequest,\n    res: TResponse,\n    next: TNext,\n  ) => Promise<void> | void;\n  extractRequest(req: TRequest): HttpRequest;\n  sendResponse(res: TResponse, data: any, statusCode?: number): void;\n  handleError(res: TResponse, error: Error, statusCode?: number): void;\n  getCurrentUser(req: TRequest): Promise<AuthenticatedUser | null>;\n}\n\n// Route handler types\nexport interface RouteHandler {\n  (req: HttpRequest, res: HttpResponse): Promise<any> | any;\n}\n\nexport interface AuthStepRequest extends HttpRequest {\n  params: Record<string, string>;\n  plugin: {\n    name: string;\n    step: string;\n  };\n}\n\nexport interface SessionRequest extends HttpRequest {\n  headers: Record<string, string> & {\n    authorization?: string;\n  };\n}\n\n// Plugin endpoint metadata\nexport interface PluginEndpoint {\n  pluginName: string;\n  stepName: string;\n  path: string;\n  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n  requiresAuth: boolean;\n  description?: string;\n  inputSchema?: any;\n  outputSchema?: any;\n}\n\n// HTTP adapter response types\nexport interface ApiResponse<T = any> {\n  success: boolean;\n  data?: T;\n  error?: {\n    code: string;\n    message: string;\n    details?: any;\n  };\n  meta?: {\n    timestamp: string;\n    requestId?: string;\n    pagination?: {\n      page: number;\n      limit: number;\n      total: number;\n    };\n  };\n}\n\nexport interface AuthStepResponse extends ApiResponse<AuthOutput> {\n  data?: AuthOutput & {\n    nextStep?: string;\n    requiresRedirect?: boolean;\n    sessionToken?: Token;\n  };\n  status: number;\n  /** Redirect URL for OAuth flows */\n  redirect?: string;\n  /** Secret data (cookies) to set for OAuth flows */\n  secret?: Record<string, string>;\n}\n\nexport interface SessionResponse extends ApiResponse {\n  data?: {\n    valid: boolean;\n    subject?: any;\n    token?: Token;\n    expiresAt?: string;\n    metadata?: {\n      payload?: ReAuthJWTPayload;\n      type?: 'jwt' | 'legacy' | undefined;\n      // Add any other metadata fields as needed\n      [key: string]: any;\n    };\n  };\n}\n\nexport interface PluginListResponse extends ApiResponse {\n  data?: Array<{\n    name: string;\n    description: string;\n    steps: Array<{\n      name: string;\n      description?: string;\n      method: string;\n      path: string;\n      requiresAuth: boolean;\n    }>;\n  }>;\n}\n\n// Middleware types\nexport interface MiddlewareFunction<\n  TRequest = any,\n  TResponse = any,\n  TNext = any,\n> {\n  (req: TRequest, res: TResponse, next: TNext): Promise<void> | void;\n}\n\nexport interface SecurityMiddleware {\n  cors(): MiddlewareFunction;\n  rateLimit(): MiddlewareFunction;\n  helmet(): MiddlewareFunction;\n  validation(): MiddlewareFunction;\n}\n\n// Error types\nexport class HttpAdapterError extends Error {\n  constructor(\n    message: string,\n    public statusCode: number = 500,\n    public code: string = 'INTERNAL_ERROR',\n    public details?: any,\n  ) {\n    super(message);\n    this.name = 'HttpAdapterError';\n  }\n}\n\nexport class ValidationError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 400, 'VALIDATION_ERROR', details);\n    this.name = 'ValidationError';\n  }\n}\n\nexport class AuthenticationError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 401, 'AUTHENTICATION_ERROR', details);\n    this.name = 'AuthenticationError';\n  }\n}\n\nexport class AuthorizationError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 403, 'AUTHORIZATION_ERROR', details);\n    this.name = 'AuthorizationError';\n  }\n}\n\nexport class NotFoundError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 404, 'NOT_FOUND', details);\n    this.name = 'NotFoundError';\n  }\n}\n\nexport class RateLimitError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 429, 'RATE_LIMIT_EXCEEDED', details);\n    this.name = 'RateLimitError';\n  }\n}\n","import { AuthInput, ReAuthEngine, Token } from '@re-auth/reauth';\nimport type { LoggerInterface } from '@re-auth/logger';\nimport type {\n  HttpAdapterConfig,\n  HttpRequest,\n  HttpResponse,\n  FrameworkAdapter,\n  RouteHandler,\n  AuthStepRequest,\n  SessionRequest,\n  PluginEndpoint,\n  ApiResponse,\n  AuthStepResponse,\n  SessionResponse,\n  PluginListResponse,\n  AuthenticatedUser,\n} from './types';\nimport {\n  HttpAdapterError,\n  ValidationError,\n  AuthenticationError,\n  NotFoundError,\n} from './types';\n\nexport class ReAuthHttpAdapter {\n  private engine: ReAuthEngine;\n  protected config: HttpAdapterConfig;\n  private endpoints: Map<string, PluginEndpoint> = new Map();\n  private logger: LoggerInterface;\n\n  constructor(config: HttpAdapterConfig, logger: LoggerInterface) {\n    this.engine = config.engine;\n    this.config = config;\n    this.logger = logger;\n    this.buildEndpoints();\n  }\n\n  /**\n   * Get adapter configuration\n   */\n  getConfig(): HttpAdapterConfig {\n    return this.config;\n  }\n\n  /**\n   * Build endpoint map from registered plugins\n   */\n  private buildEndpoints(): void {\n    const plugins = this.engine.getAllPlugins();\n\n    for (const plugin of plugins) {\n      if (!plugin.steps) continue;\n\n      for (const step of plugin.steps) {\n        const endpoint: PluginEndpoint = {\n          pluginName: plugin.name,\n          stepName: step.name,\n          path: `${this.config.basePath || ''}/${plugin.name}/${step.name}`,\n          method: step.protocol?.http?.method || 'POST',\n          requiresAuth: Boolean(step.protocol?.http?.auth),\n          description: step.description,\n          inputSchema: step.validationSchema,\n          outputSchema: step.outputs,\n        };\n\n        const key = `${plugin.name}:${step.name}`;\n        this.endpoints.set(key, endpoint);\n      }\n    }\n  }\n\n  /**\n   * Get all available endpoints\n   */\n  getEndpoints(): PluginEndpoint[] {\n    return Array.from(this.endpoints.values());\n  }\n\n  /**\n   * Get endpoint by plugin and step name\n   */\n  getEndpoint(\n    pluginName: string,\n    stepName: string,\n  ): PluginEndpoint | undefined {\n    return this.endpoints.get(`${pluginName}:${stepName}`);\n  }\n\n  /**\n   * Execute authentication step\n   */\n  async executeAuthStep(\n    req: AuthStepRequest,\n    deviceInfo: Record<string, any>,\n  ): Promise<AuthStepResponse> {\n    const endpoint = this.getEndpoint(req.plugin.name, req.plugin.step);\n    if (!endpoint) {\n      throw new NotFoundError(\n        `Endpoint not found: ${req.plugin.name}/${req.plugin.step}`,\n      );\n    }\n\n    // Check authentication if required\n    if (endpoint.requiresAuth) {\n      await this.requireAuthentication(req, deviceInfo);\n    } else {\n      //NOTE: this is to ensure token will be auto refresh if needed when a token is availabe\n      await this.getCurrentUser(req, deviceInfo);\n    }\n\n    // Extract input from request\n    const input = this.extractStepInput(req, endpoint, deviceInfo);\n\n    try {\n      // Execute the step\n      const output = await this.engine.executeStep(\n        endpoint.pluginName,\n        endpoint.stepName,\n        input,\n      );\n\n      // Return standardized response\n      const pl = this.engine.getPlugin(endpoint.pluginName);\n      const step = pl?.steps?.find((s) => s.name === endpoint.stepName);\n\n      const status = step?.protocol?.http?.codes?.[output.status] || 200;\n\n      return {\n        success: true,\n        data: {\n          ...output,\n          sessionToken: output.token,\n        },\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n        status,\n        redirect: output.redirect, // Include redirect URL for OAuth flow\n        secret: output.secret, // Include cookies to set for OAuth flow\n      };\n    } catch (error) {\n      throw new HttpAdapterError(\n        `Step execution failed: ${error instanceof Error ? error.message : String(error)}`,\n        500,\n        'STEP_EXECUTION_ERROR',\n        { pluginName: endpoint.pluginName, stepName: endpoint.stepName, error },\n      );\n    }\n  }\n\n  /**\n   * Create a new session\n   */\n  async createSession(\n    req: SessionRequest,\n    deviceInfo: Record<string, any>,\n  ): Promise<SessionResponse> {\n    const { subjectType, subjectId, ttlSeconds } = req.body || {};\n\n    if (!subjectType || !subjectId) {\n      throw new ValidationError('subjectType and subjectId are required');\n    }\n\n    try {\n      const token = await this.engine.createSessionFor(\n        subjectType,\n        subjectId,\n        ttlSeconds,\n        deviceInfo,\n      );\n\n      return {\n        success: true,\n        data: {\n          valid: true,\n          token,\n          expiresAt: ttlSeconds\n            ? new Date(Date.now() + ttlSeconds * 1000).toISOString()\n            : undefined,\n        },\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n      };\n    } catch (error) {\n      throw new HttpAdapterError(\n        `Session creation failed: ${error instanceof Error ? error.message : String(error)}`,\n        500,\n        'SESSION_CREATION_ERROR',\n      );\n    }\n  }\n\n  /**\n   * Check session validity\n   */\n  async checkSession(\n    req: SessionRequest,\n    deviceInfo: Record<string, any>,\n  ): Promise<SessionResponse> {\n    const token = this.extractSessionToken(req);\n\n    if (!token) {\n      return {\n        success: false,\n        data: {\n          valid: false,\n        },\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n      };\n    }\n\n    try {\n      const result = await this.engine.checkSession(token, deviceInfo);\n\n      if (!result.subject) {\n        return {\n          success: false,\n          data: {\n            valid: false,\n          },\n          meta: {\n            timestamp: new Date().toISOString(),\n          },\n        };\n      }\n\n      return {\n        success: true,\n        data: {\n          valid: result.valid,\n          subject: result.subject,\n          token: result.token,\n          metadata: {\n            payload: result.payload,\n            type: result.type,\n          },\n        },\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n      };\n    } catch (error) {\n      return {\n        success: false,\n        data: {\n          valid: false,\n        },\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n      };\n    }\n  }\n\n  /**\n   * Destroy current session\n   */\n  async destroySession(req: SessionRequest): Promise<ApiResponse> {\n    const token = this.extractSessionToken(req);\n\n    if (!token) {\n      throw new ValidationError('No session token provided');\n    }\n\n    try {\n      await this.engine.getSessionService().destroySession(token);\n\n      return {\n        success: true,\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n      };\n    } catch (error) {\n      throw new HttpAdapterError(\n        `Session destruction failed: ${error instanceof Error ? error.message : String(error)}`,\n        500,\n        'SESSION_DESTRUCTION_ERROR',\n      );\n    }\n  }\n\n  /**\n   * List all available plugins\n   */\n  async listPlugins(): Promise<PluginListResponse> {\n    const plugins = this.engine.getAllPlugins();\n\n    const data = plugins.map((plugin) => ({\n      name: plugin.name,\n      description: `${plugin.name} authentication plugin`,\n      steps: (plugin.steps || []).map((step) => ({\n        name: step.name,\n        description: step.description,\n        method: step.protocol?.http?.method || 'POST',\n        path: `${this.config.basePath || ''}/auth/${plugin.name}/${step.name}`,\n        requiresAuth: Boolean(step.protocol?.http?.auth),\n      })),\n    }));\n\n    return {\n      success: true,\n      data,\n      meta: {\n        timestamp: new Date().toISOString(),\n      },\n    };\n  }\n\n  /**\n   * Get specific plugin details\n   */\n  async getPlugin(pluginName: string): Promise<ApiResponse> {\n    const plugin = this.engine.getPlugin(pluginName);\n\n    if (!plugin) {\n      throw new NotFoundError(`Plugin not found: ${pluginName}`);\n    }\n\n    const data = {\n      name: plugin.name,\n      description: `${plugin.name} authentication plugin`,\n      steps: (plugin.steps || []).map((step) => ({\n        name: step.name,\n        description: step.description,\n        method: step.protocol?.http?.method || 'POST',\n        path: `${this.config.basePath || ''}/auth/${plugin.name}/${step.name}`,\n        requiresAuth: Boolean(step.protocol?.http?.auth),\n        inputs: step.inputs || [],\n        inputSchema: step.validationSchema?.toJsonSchema?.() || {},\n        outputSchema: step.outputs?.toJsonSchema?.() || {},\n      })),\n    };\n\n    return {\n      success: true,\n      data,\n      meta: {\n        timestamp: new Date().toISOString(),\n      },\n    };\n  }\n\n  /**\n   * Get full introspection data\n   */\n  async getIntrospection(): Promise<ApiResponse> {\n    const introspectionData = this.engine.getIntrospectionData();\n\n    // Add HTTP adapter configuration to introspection\n    const httpConfig = {\n      basePath: this.config.basePath || '',\n      tokenConfig: {\n        header: {\n          accessTokenHeader:\n            this.config.headerToken?.accesssTokenHeader || 'authorization',\n          refreshTokenHeader:\n            this.config.headerToken?.refreshTokenHeader || 'x-refresh-token',\n          useBearer: true, // Default to Bearer token in Authorization header\n        },\n        cookie: {\n          accessTokenName: this.config.cookie?.name || 'reauth-session',\n          refreshTokenName:\n            this.config.cookie?.refreshTokenName || 'reauth-refresh',\n          enabled: !!this.config.cookie,\n        },\n      },\n    };\n\n    return {\n      success: true,\n      data: {\n        ...introspectionData,\n        httpConfig,\n      },\n      meta: {\n        timestamp: new Date().toISOString(),\n      },\n    };\n  }\n\n  /**\n   * Health check endpoint\n   */\n  async healthCheck(): Promise<ApiResponse> {\n    return {\n      success: true,\n      data: {\n        status: 'healthy',\n        version: '2.0.0',\n        plugins: this.engine.getAllPlugins().length,\n        endpoints: this.endpoints.size,\n      },\n      meta: {\n        timestamp: new Date().toISOString(),\n      },\n    };\n  }\n\n  /**\n   * Extract session token from request\n   */\n  private extractSessionToken(req: HttpRequest): Token {\n    let accessToken: string | null = null;\n    let refreshToken: string | null = null;\n\n    // Try Authorization header first\n    const authHeader = req.headers.authorization;\n    if (authHeader?.startsWith('Bearer ')) {\n      accessToken = authHeader.substring(7);\n    }\n\n    // check custom headers\n    if (\n      !accessToken &&\n      req.headers[\n        this.config.headerToken?.accesssTokenHeader || 'x-access-token'\n      ]\n    ) {\n      accessToken =\n        req.headers[\n          this.config.headerToken?.accesssTokenHeader || 'x-access-token'\n        ]!;\n    }\n    if (\n      !refreshToken &&\n      req.headers[\n        this.config.headerToken?.refreshTokenHeader || 'x-refresh-token'\n      ]\n    ) {\n      refreshToken =\n        req.headers[\n          this.config.headerToken?.refreshTokenHeader || 'x-refresh-token'\n        ]!;\n    }\n\n    // Try cookie\n    if (\n      !accessToken &&\n      req.cookies?.[this.config.cookie?.name || 'reauth-session']\n    ) {\n      accessToken = req.cookies[this.config.cookie?.name || 'reauth-session']!;\n    }\n\n    if (\n      !refreshToken &&\n      req.cookies?.[this.config.cookie?.refreshTokenName || 'reauth-refresh']\n    ) {\n      refreshToken =\n        req.cookies[this.config.cookie?.refreshTokenName || 'reauth-refresh']!;\n    }\n\n    if (!accessToken) {\n      this.logger.info('http', 'No access token found in request', {\n        path: req.path,\n        hasHeaders: !!req.headers,\n      });\n      return null;\n    }\n\n    if (accessToken && refreshToken) {\n      this.logger.info('http', 'Access token and refresh token found', {\n        path: req.path,\n        hasHeaders: !!req.headers,\n      });\n      return { accessToken, refreshToken };\n    }\n\n    if (accessToken && !refreshToken) {\n      this.logger.info('http', 'Access token found without refresh token', {\n        path: req.path,\n        hasHeaders: !!req.headers,\n      });\n      return accessToken;\n    }\n\n    this.logger.info('http', 'No access token or refresh token found', {\n      path: req.path,\n      hasHeaders: !!req.headers,\n    });\n    return null;\n  }\n\n  /**\n   * Extract step input from request\n   */\n  private extractStepInput(\n    req: HttpRequest,\n    endpoint: PluginEndpoint,\n    deviceInfo: Record<string, any>,\n  ): AuthInput {\n    const input: AuthInput = {\n      ...req.body,\n      ...req.query,\n      ...req.params,\n      ...req.cookies, // Add cookies so OAuth flow can read oauth_state, etc.\n    };\n\n    // Add session token if available\n    const token = this.extractSessionToken(req);\n    if (token) {\n      input.token = token;\n    }\n\n    // Add device info if provided\n    if (deviceInfo) {\n      input.deviceInfo = deviceInfo;\n    }\n\n    // Add request metadata for backward compatibility\n    if (req.ip) {\n      input.ip = req.ip;\n    }\n    if (req.userAgent) {\n      input.userAgent = req.userAgent;\n    }\n\n    return input;\n  }\n\n  /**\n   * Get current authenticated user from request\n   */\n  async getCurrentUser(\n    req: HttpRequest,\n    deviceInfo: Record<string, any>,\n  ): Promise<AuthenticatedUser | null> {\n    const token = this.extractSessionToken(req);\n\n    if (!token) {\n      this.logger.info('http', 'No token found in getCurrentUser', {\n        path: req.path,\n        hasHeaders: !!req.headers,\n      });\n      return null;\n    }\n\n    try {\n      const session = await this.engine.checkSession(token, deviceInfo);\n\n      if (!session.valid || !session.subject) {\n        this.logger.warn('http', 'Session is not valid or subject not found', {\n          hasHeaders: !!req.headers,\n        });\n        return null;\n      }\n\n      return {\n        subject: session.subject,\n        token: session.token || token,\n        valid: session.valid,\n        metadata: {\n          payload: session.payload,\n          type: session.type,\n        },\n      };\n    } catch (error) {\n      // Silently return null if session check fails\n      this.logger.error('http', 'Session check failed', {\n        hasHeaders: !!req.headers,\n        error,\n      });\n      return null;\n    }\n  }\n\n  /**\n   * Authenticate request and return user or throw error\n   */\n  async requireAuthentication(\n    req: HttpRequest,\n    deviceInfo: Record<string, any>,\n  ): Promise<AuthenticatedUser> {\n    const user = await this.getCurrentUser(req, deviceInfo);\n\n    if (!user) {\n      this.logger.warn('http', 'Authentication required but no user found', {\n        path: req.path,\n        hasHeaders: !!req.headers,\n      });\n      throw new AuthenticationError('Authentication required');\n    }\n\n    return user;\n  }\n\n  /**\n   * Create framework-specific adapter\n   */\n  createAdapter<TRequest = any, TResponse = any, TNext = any>(\n    adapter: FrameworkAdapter<TRequest, TResponse, TNext>,\n  ): FrameworkAdapter<TRequest, TResponse, TNext> {\n    return adapter;\n  }\n\n  /**\n   * Generic route handler factory\n   */\n  createRouteHandler(handler: RouteHandler) {\n    return async (req: HttpRequest, res: HttpResponse): Promise<void> => {\n      try {\n        const result = await handler(req, res);\n        if (result) {\n          res.status(200).json(result);\n        }\n      } catch (error) {\n        this.handleError(error, res);\n      }\n    };\n  }\n\n  /**\n   * Error handler\n   */\n  private handleError(error: unknown, res: HttpResponse): void {\n    if (error instanceof HttpAdapterError) {\n      res.status(error.statusCode).json({\n        success: false,\n        error: {\n          code: error.code,\n          message: error.message,\n          details: error.details,\n        },\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n      });\n    } else {\n      res.status(500).json({\n        success: false,\n        error: {\n          code: 'INTERNAL_ERROR',\n          message: 'An unexpected error occurred',\n        },\n        meta: {\n          timestamp: new Date().toISOString(),\n        },\n      });\n    }\n  }\n}\n","import type { HttpAdapterConfig, PluginEndpoint } from '../types';\nimport { ReAuthHttpAdapter } from '../base-adapter';\nimport { ReAuthEngine } from '@re-auth/reauth';\nimport type { LoggerInterface } from '@re-auth/logger';\n\n/**\n * Factory function to create HTTP adapter with default configuration\n */\nexport function createReAuthHttpAdapter(\n  config: Partial<HttpAdapterConfig> & { engine: ReAuthEngine },\n  logger: LoggerInterface,\n): ReAuthHttpAdapter {\n  const defaultConfig: HttpAdapterConfig = {\n    basePath: '/api/v2',\n    cors: {\n      origin: true,\n      credentials: true,\n      allowedHeaders: ['Content-Type', 'Authorization'],\n      methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n    },\n    rateLimit: {\n      windowMs: 15 * 60 * 1000, // 15 minutes\n      max: 100,\n      message: 'Too many requests, please try again later.',\n    },\n    security: {\n      helmet: true,\n      sanitizeInput: true,\n      sanitizeOutput: false,\n    },\n    validation: {\n      validateInput: true,\n      maxPayloadSize: 1024 * 1024, // 1MB\n      sanitizeFields: ['email', 'username', 'name', 'description'],\n    },\n    ...config,\n  };\n\n  return new ReAuthHttpAdapter(defaultConfig, logger);\n}\n\n/**\n * Auto-discover endpoints from engine and generate OpenAPI-like spec\n */\nexport function generateApiSpec(adapter: ReAuthHttpAdapter): {\n  openapi: string;\n  info: object;\n  paths: Record<string, any>;\n  components: object;\n} {\n  const endpoints = adapter.getEndpoints();\n  const paths: Record<string, any> = {};\n\n  // Add authentication endpoints\n  for (const endpoint of endpoints) {\n    const path = endpoint.path;\n    const method = endpoint.method.toLowerCase();\n\n    if (!paths[path]) {\n      paths[path] = {};\n    }\n\n    paths[path][method] = {\n      summary: `Execute ${endpoint.stepName} step for ${endpoint.pluginName} plugin`,\n      description: endpoint.description || `Execute authentication step`,\n      tags: [endpoint.pluginName],\n      parameters: [\n        {\n          name: 'plugin',\n          in: 'path',\n          required: true,\n          schema: { type: 'string' },\n          description: 'Plugin name',\n        },\n        {\n          name: 'step',\n          in: 'path',\n          required: true,\n          schema: { type: 'string' },\n          description: 'Step name',\n        },\n      ],\n      requestBody: {\n        content: {\n          'application/json': {\n            schema: endpoint.inputSchema || { type: 'object' },\n          },\n        },\n      },\n      responses: {\n        200: {\n          description: 'Successful response',\n          content: {\n            'application/json': {\n              schema: {\n                type: 'object',\n                properties: {\n                  success: { type: 'boolean' },\n                  data: endpoint.outputSchema || { type: 'object' },\n                  meta: {\n                    type: 'object',\n                    properties: {\n                      timestamp: { type: 'string', format: 'date-time' },\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n        400: {\n          description: 'Validation error',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/ErrorResponse' },\n            },\n          },\n        },\n        401: {\n          description: 'Authentication required',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/ErrorResponse' },\n            },\n          },\n        },\n        500: {\n          description: 'Internal server error',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/ErrorResponse' },\n            },\n          },\n        },\n      },\n      security: endpoint.requiresAuth ? [{ bearerAuth: [] }] : [],\n    };\n  }\n\n  // Add session management endpoints\n  paths['/session'] = {\n    get: {\n      summary: 'Check session validity',\n      description: 'Verify if the current session is valid',\n      tags: ['Session Management'],\n      security: [{ bearerAuth: [] }],\n      responses: {\n        200: {\n          description: 'Session check result',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/SessionResponse' },\n            },\n          },\n        },\n      },\n    },\n    post: {\n      summary: 'Create new session',\n      description: 'Create a new session for a subject',\n      tags: ['Session Management'],\n      requestBody: {\n        content: {\n          'application/json': {\n            schema: {\n              type: 'object',\n              properties: {\n                subjectType: { type: 'string' },\n                subjectId: { type: 'string' },\n                ttlSeconds: { type: 'number' },\n              },\n              required: ['subjectType', 'subjectId'],\n            },\n          },\n        },\n      },\n      responses: {\n        201: {\n          description: 'Session created successfully',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/SessionResponse' },\n            },\n          },\n        },\n      },\n    },\n    delete: {\n      summary: 'Destroy session',\n      description: 'Destroy the current session',\n      tags: ['Session Management'],\n      security: [{ bearerAuth: [] }],\n      responses: {\n        200: {\n          description: 'Session destroyed successfully',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/SuccessResponse' },\n            },\n          },\n        },\n      },\n    },\n  };\n\n  // Add plugin introspection endpoints\n  paths['/plugins'] = {\n    get: {\n      summary: 'List all plugins',\n      description: 'Get a list of all available authentication plugins',\n      tags: ['Plugin Introspection'],\n      responses: {\n        200: {\n          description: 'List of plugins',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/PluginListResponse' },\n            },\n          },\n        },\n      },\n    },\n  };\n\n  paths['/plugins/{plugin}'] = {\n    get: {\n      summary: 'Get plugin details',\n      description: 'Get detailed information about a specific plugin',\n      tags: ['Plugin Introspection'],\n      parameters: [\n        {\n          name: 'plugin',\n          in: 'path',\n          required: true,\n          schema: { type: 'string' },\n          description: 'Plugin name',\n        },\n      ],\n      responses: {\n        200: {\n          description: 'Plugin details',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/PluginDetailsResponse' },\n            },\n          },\n        },\n        404: {\n          description: 'Plugin not found',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/ErrorResponse' },\n            },\n          },\n        },\n      },\n    },\n  };\n\n  // Add health check endpoint\n  paths['/health'] = {\n    get: {\n      summary: 'Health check',\n      description: 'Get the health status of the authentication service',\n      tags: ['Health'],\n      responses: {\n        200: {\n          description: 'Health status',\n          content: {\n            'application/json': {\n              schema: { $ref: '#/components/schemas/HealthResponse' },\n            },\n          },\n        },\n      },\n    },\n  };\n\n  return {\n    openapi: '3.0.3',\n    info: {\n      title: 'ReAuth V2 HTTP API',\n      description: 'HTTP API for ReAuth V2 Authentication Engine',\n      version: '2.0.0',\n      contact: {\n        name: 'ReAuth',\n        url: 'https://github.com/SOG-web/reauth',\n      },\n      license: {\n        name: 'MIT',\n        url: 'https://opensource.org/licenses/MIT',\n      },\n    },\n    paths,\n    components: {\n      securitySchemes: {\n        bearerAuth: {\n          type: 'http',\n          scheme: 'bearer',\n          bearerFormat: 'JWT',\n        },\n      },\n      schemas: {\n        ErrorResponse: {\n          type: 'object',\n          properties: {\n            success: { type: 'boolean', example: false },\n            error: {\n              type: 'object',\n              properties: {\n                code: { type: 'string' },\n                message: { type: 'string' },\n                details: { type: 'object' },\n              },\n            },\n            meta: {\n              type: 'object',\n              properties: {\n                timestamp: { type: 'string', format: 'date-time' },\n              },\n            },\n          },\n        },\n        SuccessResponse: {\n          type: 'object',\n          properties: {\n            success: { type: 'boolean', example: true },\n            meta: {\n              type: 'object',\n              properties: {\n                timestamp: { type: 'string', format: 'date-time' },\n              },\n            },\n          },\n        },\n        SessionResponse: {\n          type: 'object',\n          properties: {\n            success: { type: 'boolean', example: true },\n            data: {\n              type: 'object',\n              properties: {\n                valid: { type: 'boolean' },\n                subject: { type: 'object' },\n                token: { type: 'string' },\n                expiresAt: { type: 'string', format: 'date-time' },\n              },\n            },\n            meta: {\n              type: 'object',\n              properties: {\n                timestamp: { type: 'string', format: 'date-time' },\n              },\n            },\n          },\n        },\n        PluginListResponse: {\n          type: 'object',\n          properties: {\n            success: { type: 'boolean', example: true },\n            data: {\n              type: 'array',\n              items: {\n                type: 'object',\n                properties: {\n                  name: { type: 'string' },\n                  description: { type: 'string' },\n                  steps: {\n                    type: 'array',\n                    items: {\n                      type: 'object',\n                      properties: {\n                        name: { type: 'string' },\n                        description: { type: 'string' },\n                        method: { type: 'string' },\n                        path: { type: 'string' },\n                        requiresAuth: { type: 'boolean' },\n                      },\n                    },\n                  },\n                },\n              },\n            },\n            meta: {\n              type: 'object',\n              properties: {\n                timestamp: { type: 'string', format: 'date-time' },\n              },\n            },\n          },\n        },\n        PluginDetailsResponse: {\n          type: 'object',\n          properties: {\n            success: { type: 'boolean', example: true },\n            data: {\n              type: 'object',\n              properties: {\n                name: { type: 'string' },\n                description: { type: 'string' },\n                steps: {\n                  type: 'array',\n                  items: {\n                    type: 'object',\n                    properties: {\n                      name: { type: 'string' },\n                      description: { type: 'string' },\n                      method: { type: 'string' },\n                      path: { type: 'string' },\n                      requiresAuth: { type: 'boolean' },\n                      inputs: { type: 'array', items: { type: 'string' } },\n                      inputSchema: { type: 'object' },\n                      outputSchema: { type: 'object' },\n                    },\n                  },\n                },\n              },\n            },\n            meta: {\n              type: 'object',\n              properties: {\n                timestamp: { type: 'string', format: 'date-time' },\n              },\n            },\n          },\n        },\n        HealthResponse: {\n          type: 'object',\n          properties: {\n            success: { type: 'boolean', example: true },\n            data: {\n              type: 'object',\n              properties: {\n                status: { type: 'string', example: 'healthy' },\n                version: { type: 'string' },\n                plugins: { type: 'number' },\n                endpoints: { type: 'number' },\n              },\n            },\n            meta: {\n              type: 'object',\n              properties: {\n                timestamp: { type: 'string', format: 'date-time' },\n              },\n            },\n          },\n        },\n      },\n    },\n  };\n}\n\n/**\n * Utility to extract plugin names from endpoints\n */\nexport function getPluginNames(endpoints: PluginEndpoint[]): string[] {\n  const names = new Set<string>();\n  for (const endpoint of endpoints) {\n    names.add(endpoint.pluginName);\n  }\n  return Array.from(names).sort();\n}\n\n/**\n * Utility to group endpoints by plugin\n */\nexport function groupEndpointsByPlugin(\n  endpoints: PluginEndpoint[],\n): Record<string, PluginEndpoint[]> {\n  const groups: Record<string, PluginEndpoint[]> = {};\n  for (const endpoint of endpoints) {\n    if (!groups[endpoint.pluginName]) {\n      groups[endpoint.pluginName] = [];\n    }\n    groups[endpoint.pluginName]!.push(endpoint);\n  }\n  return groups;\n}\n\n/**\n * Utility to validate adapter configuration\n */\nexport function validateConfig(config: HttpAdapterConfig): {\n  valid: boolean;\n  errors: string[];\n} {\n  const errors: string[] = [];\n\n  if (!config.engine) {\n    errors.push('engine is required');\n  }\n\n  if (config.basePath && !config.basePath.startsWith('/')) {\n    errors.push('basePath must start with /');\n  }\n\n  if (config.rateLimit?.max && config.rateLimit.max <= 0) {\n    errors.push('rateLimit.max must be greater than 0');\n  }\n\n  if (config.rateLimit?.windowMs && config.rateLimit.windowMs <= 0) {\n    errors.push('rateLimit.windowMs must be greater than 0');\n  }\n\n  if (\n    config.validation?.maxPayloadSize &&\n    config.validation.maxPayloadSize <= 0\n  ) {\n    errors.push('validation.maxPayloadSize must be greater than 0');\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n"]}