index-BGDyK1x3.js.map (11678376B)
1 {"version":3,"mappings":"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IACH,GAAI,EAAQ,KAAM,CAChB,GACE,EACA,EACA,EACA,CACF,EACA,EAAe,EAAa,UAC5B,GAAI,CACF,IAAI,EAAyB,EAAa,cACxC,EAAK,EAAuB,GAC5B,EAAe,EAAuB,aACzB,OAAO,GAAtB,YACE,EACE,EACS,EAAa,YAAtB,KAAkC,QAAU,SAC5C,EAAa,sBACb,EACF,CACJ,OAAS,EAAO,CACd,GAAwB,EAAc,EAAa,OAAQ,CAAK,CAClE,CACF,MACE,GACE,EACA,EACA,EACA,CACF,EACF,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,CACF,EACA,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,CACF,EACA,MACF,IAAK,IACH,MACF,IAAK,IACH,EAAyB,EAAa,UACtC,EAAK,EAAa,UACT,EAAa,gBAAtB,KASI,EAAuB,YAAc,EACnC,GACE,EACA,EACA,EACA,CACF,GACE,EAAuB,aAAe,EACxC,GACE,EACA,EACA,EACA,GACO,EAAa,aAAe,QAAnC,GAA6C,CAAC,CAChD,GAtBF,EAAuB,YAAc,EACnC,GACE,EACA,EACA,EACA,CACF,EACA,GAAwC,EAAc,CAAY,EAgBxE,EAAQ,MAAQ,GAAmC,EAAI,CAAY,EACnE,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,CACF,EACA,EAAQ,MACN,GAA8B,EAAa,UAAW,CAAY,EACpE,MACF,QACE,GACE,EACA,EACA,EACA,CACF,CACJ,CACF,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,CAIA,IAHA,KAEU,EAAY,aAAe,QAAlC,GAA4C,CAAC,EAC3C,EAAc,EAAY,MAAgB,IAAT,MAAwB,CAC5D,IAAI,EAAe,EACjB,EAAe,EACf,EAAiB,EACjB,EAAuB,EACvB,EAAQ,EAAa,MACvB,OAAQ,EAAa,IAArB,CACE,IAAK,GACL,IAAK,IACL,IAAK,IACH,GACE,EACA,EACA,EACA,EACA,CACF,EACA,GAA0B,EAAG,CAAY,EACzC,MACF,IAAK,IACH,MACF,IAAK,IACH,IAAI,EAAW,EAAa,UACnB,EAAa,gBAAtB,MAaM,EAAS,aAAe,EAC1B,GACE,EACA,EACA,EACA,EACA,CACF,GAnBA,EAAS,YAAc,EACrB,GACE,EACA,EACA,EACA,EACA,CACF,EACA,GACE,EACA,CACF,EASN,GACE,EAAQ,MACR,GACE,EAAa,UACb,CACF,EACF,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,EACA,CACF,EACA,GACE,EAAQ,MACR,GAA8B,EAAa,UAAW,CAAY,EACpE,MACF,QACE,GACE,EACA,EACA,EACA,EACA,CACF,CACJ,CACA,EAAc,EAAY,OAC5B,CACF,CACA,SAAS,GACP,EACA,EACA,CACA,GAAI,EAAY,aAAe,MAC7B,IAAK,EAAc,EAAY,MAAgB,IAAT,MAAwB,CAC5D,IAAI,EAAe,EACjB,EAAe,EACf,EAAQ,EAAa,MACvB,OAAQ,EAAa,IAArB,CACE,IAAK,IACH,GAAwC,EAAc,CAAY,EAClE,EAAQ,MACN,GACE,EAAa,UACb,CACF,EACF,MACF,IAAK,IACH,GAAwC,EAAc,CAAY,EAClE,EAAQ,MACN,GAA8B,EAAa,UAAW,CAAY,EACpE,MACF,QACE,GAAwC,EAAc,CAAY,CACtE,CACA,EAAc,EAAY,OAC5B,CACJ,CACA,IAAI,GAAsB,KAC1B,SAAS,GACP,EACA,EACA,EACA,CACA,GAAI,EAAY,aAAe,GAC7B,IAAK,EAAc,EAAY,MAAgB,IAAT,MACpC,GACE,EACA,EACA,CACF,EACG,EAAc,EAAY,OACnC,CACA,SAAS,GACP,EACA,EACA,EACA,CACA,OAAQ,EAAM,IAAd,CACE,IAAK,IACH,GACE,EACA,EACA,CACF,EACA,EAAM,MAAQ,IACH,EAAM,gBAAf,MACA,GACE,EACA,GACA,EAAM,cACN,EAAM,aACR,EACF,MACF,IAAK,GACH,GACE,EACA,EACA,CACF,EACA,MACF,IAAK,GACL,IAAK,GACH,IAAI,EAAwB,GAC5B,GAAuB,GAAiB,EAAM,UAAU,aAAa,EACrE,GACE,EACA,EACA,CACF,EACA,GAAuB,EACvB,MACF,IAAK,IACM,EAAM,gBAAf,OACI,EAAwB,EAAM,UACvB,IAAT,MACS,EAAsB,gBAA/B,MACM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YAAc,IACrB,EAAa,GAA+B,IAAM,GAAI,EACxD,GAAK,GACL,CAOA,GANA,GACE,EACA,EACA,GACA,CAAC,EACH,EACU,GAAa,EAAiB,EAAG,CAAC,CAAC,IAAzC,EAA4C,MAAM,EACtD,GAAsB,EACtB,EAAgB,cAAgB,GAC9B,GAAoB,KAClB,KACA,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,YACA,GACA,CACF,EACA,CACF,EACA,MAAM,CACR,CACA,GACE,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,KACA,GACA,CACF,CACF,CACF,CACA,KACF,OAAS,GACT,GAAsB,CAAa,CACrC,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CAGA,GAFA,EAAK,cAAgB,GACrB,EAAwB,EAAa,aAEnC,EAAwB,OACV,EAAwB,WAAtC,SACA,CACA,EAAwB,CACtB,YAAa,KACb,MAAO,EACP,SAAU,EACV,SAAU,EACV,gBAAiB,CAAC,EAClB,iBAAkB,CAAC,EACnB,yBAA0B,CAAC,EAC3B,UAAW,EACb,EACA,GACE,EACA,EACA,CACF,EACA,IAAI,GACD,EAAQ,YAAc,EACnB,GAA+B,GAAI,GAClC,EAAQ,WAAa,EACpB,GAAiC,GAAI,EACrC,EAKR,GAJA,EAAgB,GACd,EACA,CACF,EACa,IAAT,KAAwB,CAC1B,GAAsB,EACtB,EAAK,oBAAsB,EACzB,GAAW,KACT,KACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KACA,EACA,CACF,CACF,EACA,GAAkB,EAAM,EAAO,EAAa,CAAC,CAAwB,EACrE,MACF,CACF,CACA,GACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,CACF,CACA,SAAS,GAAqC,EAAc,CAC1D,IAAK,IAAI,EAAO,IAAkB,CAChC,IAAI,EAAM,EAAK,IACf,IACS,IAAN,GAAoB,IAAP,IAAqB,IAAP,KAC5B,EAAK,MA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YAA4C,OAAO,GAApB,SACpC,EAAW,aAAa,EAAK,EAAE,EAC/B,EAAW,gBAAgB,CAAG,EAClC,MACF,IAAK,UACL,IAAK,WACH,CAAC,IAAM,EACH,EAAW,aAAa,EAAK,EAAE,EAC/B,CAAC,IAAM,GACG,GAAR,MACe,OAAO,GAAtB,YACa,OAAO,GAApB,SACA,EAAW,aAAa,EAAK,CAAK,EAClC,EAAW,gBAAgB,CAAG,EACpC,MACF,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACK,GAAR,MACe,OAAO,GAAtB,YACa,OAAO,GAApB,UACA,CAAC,MAAM,CAAK,GACZ,GAAK,EACD,EAAW,aAAa,EAAK,CAAK,EAClC,EAAW,gBAAgB,CAAG,EAClC,MACF,IAAK,UACL,IAAK,QACK,GAAR,MACe,OAAO,GAAtB,YACa,OAAO,GAApB,UACA,MAAM,CAAK,EACP,EAAW,gBAAgB,CAAG,EAC9B,EAAW,aAAa,EAAK,CAAK,EACtC,MACF,IAAK,UACH,GAA0B,eAAgB,CAAU,EACpD,GAA0B,SAAU,CAAU,EAC9C,GAAqB,EAAY,UAAW,CAAK,EACjD,MACF,IAAK,eACH,GACE,EACA,+BACA,gBACA,CACF,EACA,MACF,IAAK,eACH,GACE,EACA,+BACA,gBACA,CACF,EACA,MACF,IAAK,YACH,GACE,EACA,+BACA,aACA,CACF,EACA,MACF,IAAK,YACH,GACE,EACA,+BACA,aACA,CACF,EACA,MACF,IAAK,aACH,GACE,EACA,+BACA,cACA,CACF,EACA,MACF,IAAK,YACH,GACE,EACA,+BACA,aACA,CACF,EACA,MACF,IAAK,UACH,GACE,EACA,uCACA,WACA,CACF,EACA,MACF,IAAK,UACH,GACE,EACA,uCACA,WACA,CACF,EACA,MACF,IAAK,WACH,GACE,EACA,uCACA,YACA,CACF,EACA,MACF,IAAK,KACH,GAAqB,EAAY,KAAM,CAAK,EAC5C,MACF,IAAK,YACL,IAAK,cACH,MACF,SAEI,EAAE,EAAI,EAAI,SACD,EAAI,KAAZ,KAA0B,EAAI,KAAZ,KACV,EAAI,KAAZ,KAA0B,EAAI,KAAZ,OAEnB,EAAO,GAAQ,IAAI,CAAG,GAAK,EACzB,GAAqB,EAAY,EAAK,CAAK,EACnD,CACF,CACA,SAAS,GAAuB,EAAY,EAAK,EAAK,EAAO,EAAO,EAAW,CAC7E,OAAQ,EAAR,CACE,IAAK,QACH,GAAkB,EAAY,EAAO,CAAS,EAC9C,MACF,IAAK,0BACH,GAAY,GAAR,KAAe,CACjB,GAAiB,OAAO,GAApB,UAA6B,EAAE,WAAY,GAC7C,MAAM,MAAM,EAAuB,EAAE,CAAC,EAExC,GADA,EAAM,EAAM,OACA,GAAR,KAAa,CACf,GAAY,EAAM,UAAd,KAAwB,MAAM,MAAM,EAAuB,EAAE,CAAC,EAClE,EAAW,UAAY,CACzB,CACF,CACA,MACF,IAAK,WACU,OAAO,GAApB,SACI,GAAe,EAAY,CAAK,GAClB,OAAO,GAApB,UAA0C,OAAO,GAApB,WAC9B,GAAe,EAAY,GAAK,CAAK,EACzC,MACF,IAAK,WACK,GAAR,MAAiB,GAA0B,SAAU,CAAU,EAC/D,MACF,IAAK,cACK,GAAR,MAAiB,GAA0B,YAAa,CAAU,EAClE,MACF,IAAK,UACK,GAAR,OAAkB,EAAW,QAAU,IACvC,MACF,IAAK,iCACL,IAAK,2BACL,IAAK,YACL,IAAK,MACH,MACF,IAAK,YACL,IAAK,cACH,MACF,QACE,GAAI,CAAC,GAA6B,eAAe,CAAG,EAClD,EAAG,CACD,GACU,EAAI,KAAZ,KACQ,EAAI,KAAZ,MACE,EAAQ,EAAI,SAAS,SAAS,EAC/B,EAAM,EAAI,MAAM,EAAG,EAAQ,EAAI,OAAS,EAAI,IAAK,EAAC,EAClD,EAAY,EAAW,KAAqB,KAC5C,EAAoB,GAAR,KAAqC,KAAjB,EAAU,GAC5B,OAAO,GAAtB,YACE,EAAW,oBAAoB,EAAK,EAAW,CAAK,EACvC,OAAO,GAAtB,YACA,CACe,OAAO,GAAtB,YACW,IAAT,OACC,KAAO,EACH,EAAW,GAAO,KACnB,EAAW,aAAa,CAAG,GAC3B,EAAW,gBAAgB,CAAG,GACpC,EAAW,iBAAiB,EAAK,EAAO,CAAK,EAC7C,MAAM,CACR,CACA,KAAO,EACF,EAAW,GAAO,EACnB,CAAC,IAAM,EACL,EAAW,aAAa,EAAK,EAAE,EAC/B,GAAqB,EAAY,EAAK,CAAK,CACnD,CACN,CACF,CACA,SAAS,GAAqB,EAAY,EAAK,EAAO,CACpD,OAAQ,EAAR,CACE,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,OACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACH,MACF,IAAK,MACH,GAA0B,QAAS,CAAU,EAC7C,GAA0B,OAAQ,CAAU,EAC5C,IAAI,EAAS,CAAC,EACZ,EAAY,CAAC,EACb,EACF,IAAK,KAAW,EACd,GAAI,EAAM,eAAe,CAAO,EAAG,CACjC,IAAI,EAAY,EAAM,GACtB,GAAY,GAAR,KACF,OAAQ,EAAR,CACE,IAAK,MACH,EAAS,CAAC,EACV,MACF,IAAK,SACH,EAAY,CAAC,EACb,MACF,IAAK,WACL,IAAK,0BACH,MAAM,MAAM,EAAuB,IAAK,CAAG,CAAC,EAC9C,QACE,GAAQ,EAAY,EAAK,EAAS,EAAW,EAAO,IAAI,CAC5D,CACJ,CACF,GACE,GAAQ,EAAY,EAAK,SAAU,EAAM,OAAQ,EAAO,IAAI,EAC9D,GAAU,GAAQ,EAAY,EAAK,MAAO,EAAM,IAAK,EAAO,IAAI,EAChE,OACF,IAAK,QACH,GAA0B,UAAW,CAAU,EAC/C,IAAI,EAAgB,EAAU,EAAY,EAAY,KACpD,EAAU,KACV,EAAiB,KACnB,IAAK,KAAU,EACb,GAAI,EAAM,eAAe,CAAM,EAAG,CAChC,IAAI,EAAgB,EAAM,GAC1B,GAAY,GAAR,KACF,OAAQ,EAAR,CACE,IAAK,OACH,EAAY,EACZ,MACF,IAAK,OACH,EAAY,EACZ,MACF,IAAK,UACH,EAAU,EACV,MACF,IAAK,iBACH,EAAiB,EACjB,MACF,IAAK,QACH,EAAU,EACV,MACF,IAAK,eACH,EAAe,EACf,MACF,IAAK,WACL,IAAK,0BACH,GAAY,GAAR,KACF,MAAM,MAAM,EAAuB,IAAK,CAAG,CAAC,EAC9C,MACF,QACE,GAAQ,EAAY,EAAK,EAAQ,EAAe,EAAO,IAAI,CAC/D,CACJ,CACF,GACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CAAC,CACH,EACA,OACF,IAAK,SAGH,IAAK,KAFL,GAA0B,UAAW,CAAU,EAC/C,EAAS,EAAY,EAAU,KACb,EAChB,GACE,EAAM,eAAe,CAAS,IAC5B,EAAe,EAAM,GAAqB,GAAR,MAEpC,OAAQ,EAAR,CACE,IAAK,QACH,EAAU,EACV,MACF,IAAK,eACH,EAAY,EACZ,MACF,IAAK,WACH,EAAS,EACX,QACE,GAAQ,EAAY,EAAK,EAAW,EAAc,EAAO,IAAI,CACjE,CACJ,EAAM,EACN,EAAQ,EACR,EAAW,SAAW,CAAC,CAAC,EAChB,GAAR,KAEY,GAAR,MAAiB,GAAc,EAAY,CAAC,CAAC,EAAQ,EAAO,CAAC,CAAC,EAD9D,GAAc,EAAY,CAAC,CAAC,EAAQ,EAAK,CAAC,CAAC,EAE/C,OACF,IAAK,WAGH,IAAK,KAFL,GAA0B,UAAW,CAAU,EAC/C,EAAU,EAAY,EAAS,KACb,EAChB,GACE,EAAM,eAAe,CAAS,IAC5B,EAAe,EAAM,GAAqB,GAAR,MAEpC,OAAQ,EAAR,CACE,IAAK,QACH,EAAS,EACT,MACF,IAAK,eACH,EAAY,EACZ,MACF,IAAK,WACH,EAAU,EACV,MACF,IAAK,0BACH,GAAY,GAAR,KAAsB,MAAM,MAAM,EAAuB,EAAE,CAAC,EAChE,MACF,QACE,GAAQ,EAAY,EAAK,EAAW,EAAc,EAAO,IAAI,CACjE,CACJ,GAAa,EAAY,EAAQ,EAAW,CAAO,EACnD,OACF,IAAK,SACH,IAAK,KAAW,EACd,GACE,EAAM,eAAe,CAAO,IAC1B,EAAS,EAAM,GAAmB,GAAR,MAE5B,OAAQ,EAAR,CACE,IAAK,WACH,EAAW,SACT,GACe,OAAO,GAAtB,YACa,OAAO,GAApB,SACF,MACF,QACE,GAAQ,EAAY,EAAK,EAAS,EAAQ,EAAO,IAAI,CACzD,CACJ,OACF,IAAK,SACH,GAA0B,eAAgB,CAAU,EACpD,GAA0B,SAAU,CAAU,EAC9C,GAA0B,SAAU,CAAU,EAC9C,GAA0B,QAAS,CAAU,EAC7C,MACF,IAAK,SACL,IAAK,SACH,GAA0B,OAAQ,CAAU,EAC5C,MACF,IAAK,QACL,IAAK,QACH,IAAK,EAAS,EAAG,EAAS,GAAgB,OAAQ,IAChD,GAA0B,GAAgB,GAAS,CAAU,EAC/D,MACF,IAAK,QACH,GAA0B,QAAS,CAAU,EAC7C,GAA0B,OAAQ,CAAU,EAC5C,MACF,IAAK,UACH,GAA0B,SAAU,CAAU,EAC9C,MACF,IAAK,QACL,IAAK,SACL,IAAK,OACH,GAA0B,QAAS,CAAU,EAC3C,GAA0B,OAAQ,CAAU,EAChD,IAAK,OACL,IAAK,OACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,MACL,IAAK,WACH,IAAK,KAAkB,EACrB,GACE,EAAM,eAAe,CAAc,IACjC,EAAS,EAAM,GAA0B,GAAR,MAEnC,OAAQ,EAAR,CACE,IAAK,WACL,IAAK,0BACH,MAAM,MAAM,EAAuB,IAAK,CAAG,CAAC,EAC9C,QACE,GAAQ,EAAY,EAAK,EAAgB,EAAQ,EAAO,IAAI,CAChE,CACJ,OACF,QACE,GAAI,GAAgB,CAAG,EAAG,CACxB,IAAK,KAAiB,EACpB,EAAM,eAAe,CAAa,IAC9B,EAAS,EAAM,GACN,IAAX,IAAK,IACH,GACE,EACA,EACA,EACA,EACA,EACA,IAAK,EACP,GACN,MACF,CACJ,CACA,IAAK,KAAgB,EACnB,EAAM,eAAe,CAAY,IAC7B,EAAS,EAAM,GACT,GAAR,MACE,GAAQ,EAAY,EAAK,EAAc,EAAQ,EAAO,IAAI,EAClE,CACA,SAAS,GAAiB,EAAY,EAAK,EAAW,EAAW,CAC/D,OAAQ,EAAR,CACE,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,OACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACH,MACF,IAAK,QACH,IAAI,EAAO,KACT,EAAO,KACP,EAAQ,KACR,EAAe,KACf,EAAmB,KACnB,EAAU,KACV,EAAiB,KACnB,IAAK,KAAW,EAAW,CACzB,IAAI,EAAW,EAAU,GACzB,GAAI,EAAU,eAAe,CAAO,GAAa,GAAR,KACvC,OAAQ,EAAR,CACE,IAAK,UACH,MACF,IAAK,QACH,MACF,IAAK,eACH,EAAmB,EACrB,QACE,EAAU,eAAe,CAAO,GAC9B,GAAQ,EAAY,EAAK,EAAS,KAAM,EAAW,CAAQ,CACjE,CACJ,CACA,IAAK,IAAI,KAAe,EAAW,CACjC,IAAI,EAAU,EAAU,GAExB,GADA,EAAW,EAAU,GAEnB,EAAU,eAAe,CAAW,IAC3B,GAAR,MAA2B,GAAR,MAEpB,OAAQ,EAAR,CACE,IAAK,OACH,EAAO,EACP,MACF,IAAK,OACH,EAAO,EACP,MACF,IAAK,UACH,EAAU,EACV,MACF,IAAK,iBACH,EAAiB,EACjB,MACF,IAAK,QACH,EAAQ,EACR,MACF,IAAK,eACH,EAAe,EACf,MACF,IAAK,WACL,IAAK,0BACH,GAAY,GAAR,KACF,MAAM,MAAM,EAAuB,IAAK,CAAG,CAAC,EAC9C,MACF,QACE,IAAY,GACV,GACE,EACA,EACA,EACA,EACA,EACA,CACF,CACN,CACJ,CACA,GACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACA,OACF,IAAK,SAEH,IAAK,IADL,GAAU,EAAQ,EAAe,EAAc,KAClC,EACX,GACI,EAAmB,EAAU,GAC/B,EAAU,eAAe,CAAI,GAAa,GAAR,KAElC,OAAQ,EAAR,CACE,IAAK,QACH,MACF,IAAK,WACH,EAAU,EACZ,QACE,EAAU,eAAe,CAAI,GAC3B,GACE,EACA,EACA,EACA,KACA,EACA,CACF,CACN,CACJ,IAAK,KAAQ,EACX,GACI,EAAO,EAAU,GAClB,EAAmB,EAAU,GAC9B,EAAU,eAAe,CAAI,IAClB,GAAR,MAAwB,GAAR,MAEnB,OAAQ,EAAR,CACE,IAAK,QACH,EAAc,EACd,MACF,IAAK,eACH,EAAe,EACf,MACF,IAAK,WACH,EAAQ,EACV,QACE,IAAS,GACP,GACE,EACA,EACA,EACA,EACA,EACA,CACF,CACN,CACJ,EAAM,EACN,EAAY,EACZ,EAAY,EACJ,GAAR,KAEI,CAAC,CAAC,GAAc,CAAC,CAAC,IACT,GAAR,KAEG,GAAc,EAAY,CAAC,CAAC,EAAW,EAAY,CAAC,EAAI,GAAI,CAAC,CAAC,EAD9D,GAAc,EAAY,CAAC,CAAC,EAAW,EAAK,CAAC,CAAC,GAHlD,GAAc,EAAY,CAAC,CAAC,EAAW,EAAa,CAAC,CAAC,EAK1D,OACF,IAAK,WAEH,IAAK,IADL,GAAU,EAAc,KACH,EACnB,GACI,EAAO,EAAU,GACnB,EAAU,eAAe,CAAY,GAC3B,GAAR,MACA,CAAC,EAAU,eAAe,CAAY,EAExC,OAAQ,EAAR,CACE,IAAK,QACH,MACF,IAAK,WACH,MACF,QACE,GAAQ,EAAY,EAAK,EAAc,KAAM,EAAW,CAAI,CAChE,CACJ,IAAK,KAAS,EACZ,GACI,EAAO,EAAU,GAClB,EAAO,EAAU,GAClB,EAAU,eAAe,CAAK,IAAc,GAAR,MAAwB,GAAR,MAEpD,OAAQ,EAAR,CACE,IAAK,QACH,EAAc,EACd,MACF,IAAK,eACH,EAAU,EACV,MACF,IAAK,WACH,MACF,IAAK,0BACH,GAAY,GAAR,KAAc,MAAM,MAAM,EAAuB,EAAE,CAAC,EACxD,MACF,QACE,IAAS,GACP,GAAQ,EAAY,EAAK,EAAO,EAAM,EAAW,CAAI,CAC3D,CACJ,GAAe,EAAY,EAAa,CAAO,EAC/C,OACF,IAAK,SACH,IAAK,IAAI,KAAe,EACtB,GACI,EAAc,EAAU,GAC1B,EAAU,eAAe,CAAW,GAC1B,GAAR,MACA,CAAC,EAAU,eAAe,CAAW,EAEvC,OAAQ,EAAR,CACE,IAAK,WACH,EAAW,SAAW,CAAC,EACvB,MACF,QACE,GACE,EACA,EACA,EACA,KACA,EACA,CACF,CACJ,CACJ,IAAK,KAAoB,EACvB,GACI,EAAc,EAAU,GACzB,EAAU,EAAU,GACrB,EAAU,eAAe,CAAgB,GACvC,IAAgB,IACP,GAAR,MAA+B,GAAR,MAE1B,OAAQ,EAAR,CACE,IAAK,WACH,EAAW,SACT,GACe,OAAO,GAAtB,YACa,OAAO,GAApB,SACF,MACF,QACE,GACE,EACA,EACA,EACA,EACA,EACA,CACF,CACJ,CACJ,OACF,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,KACL,IAAK,MACL,IAAK,QACL,IAAK,KACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,MACL,IAAK,WACH,IAAK,IAAI,KAAe,EACtB,EAAe,EAAU,GACvB,EAAU,eAAe,CAAW,GAC1B,GAAR,MACA,CAAC,EAAU,eAAe,CAAW,GACrC,GAAQ,EAAY,EAAK,EAAa,KAAM,EAAW,CAAW,EACxE,IAAK,KAAW,EACd,GACI,EAAc,EAAU,GACzB,EAAU,EAAU,GACrB,EAAU,eAAe,CAAO,GAC9B,IAAgB,IACP,GAAR,MAA+B,GAAR,MAE1B,OAAQ,EAAR,CACE,IAAK,WACL,IAAK,0BACH,GAAY,GAAR,KACF,MAAM,MAAM,EAAuB,IAAK,CAAG,CAAC,EAC9C,MACF,QACE,GACE,EACA,EACA,EACA,EACA,EACA,CACF,CACJ,CACJ,OACF,QACE,GAAI,GAAgB,CAAG,EAAG,CACxB,IAAK,IAAI,KAAe,EACtB,EAAe,EAAU,GACvB,EAAU,eAAe,CAAW,GACvB,IAAX,IAAK,IACL,CAAC,EAAU,eAAe,CAAW,GACrC,GACE,EACA,EACA,EACA,IAAK,GACL,EACA,CACF,EACN,IAAK,KAAkB,EACrB,EAAe,EAAU,GACtB,EAAU,EAAU,GACrB,CAAC,EAAU,eAAe,CAAc,GACtC,IAAgB,GACJ,IAAX,IAAK,IAAgC,IAAX,IAAK,IAChC,GACE,EACA,EACA,EACA,EACA,EACA,CACF,EACN,MACF,CACJ,CACA,IAAK,IAAI,KAAe,EACtB,EAAe,EAAU,GACvB,EAAU,eAAe,CAAW,GAC1B,GAAR,MACA,CAAC,EAAU,eAAe,CAAW,GACrC,GAAQ,EAAY,EAAK,EAAa,KAAM,EAAW,CAAW,EACxE,IAAK,KAAY,EACf,EAAe,EAAU,GACtB,EAAU,EAAU,GACrB,CAAC,EAAU,eAAe,CAAQ,GAChC,IAAgB,GACP,GAAR,MAA+B,GAAR,MACxB,GAAQ,EAAY,EAAK,EAAU,EAAa,EAAW,CAAO,CAC1E,CACA,SAAS,GAAuB,EAAe,CAC7C,OAAQ,EAAR,CACE,IAAK,MACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,OACH,MAAO,CAAC,EACV,QACE,MAAO,CAAC,CACZ,CACF,CACA,SAAS,IAAoB,CAC3B,GAAmB,OAAO,YAAY,kBAAlC,WAAoD,CACtD,IACE,IAAI,EAAQ,EACV,EAAO,EACP,EAAkB,YAAY,iBAAiB,UAAU,EACzD,EAAI,EACN,EAAI,EAAgB,OACpB,IACA,CACA,IAAI,EAAQ,EAAgB,GAC1B,EAAe,EAAM,aACrB,EAAgB,EAAM,cACtB,EAAW,EAAM,SACnB,GAAI,GAAgB,GAAY,GAAuB,CAAa,EAAG,CAGrE,IAFA,EAAgB,EAChB,EAAW,EAAM,YACZ,GAAK,EAAG,EAAI,EAAgB,OAAQ,IAAK,CAC5C,IAAI,EAAe,EAAgB,GACjC,EAAmB,EAAa,UAClC,GAAI,EAAmB,EAAU,MACjC,IAAI,EAAsB,EAAa,aACrC,EAAuB,EAAa,cACtC,GACE,GAAuB,CAAoB,IACzC,EAAe,EAAa,YAC7B,GACC,GACC,EAAe,EACZ,GACC,EAAW,IACX,EAAe,IAC1B,CAIA,GAHA,EAAE,EACF,GAAS,GAAK,EAAe,IAAmB,EAAM,SAAW,KACjE,IACI,GAAK,EAAO,KAClB,CACF,CACA,GAAI,EAAI,EAAO,OAAO,EAAO,EAAQ,GACvC,CACA,OAAO,UAAU,aACb,EAAQ,UAAU,WAAW,SAAwB,OAAO,GAApB,UACxC,EACA,CACN,CACA,IAAI,GAAgB,KAClB,GAAuB,KACzB,SAAS,GAAkC,EAAsB,CAC/D,OAAa,EAAqB,WAA3B,EACH,EACA,EAAqB,aAC3B,CACA,SAAS,GAAkB,EAAc,CACvC,OAAQ,EAAR,CACE,IAAK,6BACH,MAAO,GACT,IAAK,qCACH,MAAO,GACT,QACE,MAAO,EACX,CACF,CACA,SAAS,GAAwB,EAAiB,EAAM,CACtD,GAAU,IAAN,EACF,OAAQ,EAAR,CACE,IAAK,MACH,MAAO,GACT,IAAK,OACH,MAAO,GACT,QACE,MAAO,EACX,CACF,OAAa,IAAN,GAA6C,IAApB,gBAC5B,EACA,CACN,CACA,SAAS,GAAqB,EAAM,EAAO,CACzC,OACiB,IAAf,YACe,IAAf,YACa,OAAO,EAAM,UAA1B,UACa,OAAO,EAAM,UAA1B,UACa,OAAO,EAAM,UAA1B,UACc,OAAO,EAAM,yBAA1B,UACU,EAAM,0BAAf,MACQ,EAAM,wBAAwB,QAAtC,IAEN,CACA,IAAI,GAAiC,KACrC,SAAS,IAA+B,CACtC,IAAI,EAAQ,OAAO,MAOnB,OANI,GAAwB,EAAM,OAArB,WACP,IAAU,GAAuC,CAAC,GACtD,GAAiC,EAC1B,CAAC,IAEV,GAAiC,KAC1B,CAAC,EACV,CACA,IAAI,GAAiC,OAAO,YAAtB,WAAmC,WAAa,IAAK,GACzE,GAA+B,OAAO,cAAtB,WAAqC,aAAe,IAAK,GACzE,GAA8B,OAAO,SAAtB,WAAgC,QAAU,IAAK,GAC9D,GACiB,OAAO,gBAAtB,WACI,eACuB,KAAvB,OAOE,GANA,SAAU,EAAU,CAClB,OAAO,GACJ,QAAQ,IAAI,EACZ,KAAK,CAAQ,EACb,MAAM,EAAqB,CAChC,EAEV,SAAS,GAAsB,EAAO,CACpC,WAAW,UAAY,CACrB,MAAM,CACR,CAAC,CACH,CACA,SAAS,GAAiB,EAAM,CAC9B,OAAkB,IAAX,MACT,CACA,SAAS,GAAuB,EAAgB,EAAmB,CACjE,IAAI,EAAO,EACT,EAAQ,EACV,EAAG,CACD,IAAI,EAAW,EAAK,YAEpB,GADA,EAAe,YAAY,CAAI,EAC3B,GAAkB,EAAS,WAAf,EACd,GAAM,EAAO,EAAS,KAAgB,IAAT,MAA0B,IAAT,KAAgB,CAC5D,GAAU,IAAN,EAAa,CACf,EAAe,YAAY,CAAQ,EACnC,GAAiB,CAAiB,EAClC,MACF,CACA,GACF,MAAO,GACG,IAAR,KACS,IAAT,MACS,IAAT,MACS,IAAT,MACQ,IAAR,IAEA,SACG,GAAe,IAAX,OACP,GAAyB,EAAe,cAAc,eAAe,OAClE,GAAe,IAAX,OAAiB,CACxB,EAAO,EAAe,cAAc,KACpC,GAAyB,CAAI,EAC7B,IAAK,IAAI,EAAgB,EAAK,WAAY,GAAiB,CACzD,IAAI,EAAoB,EAAc,YACpC,EAAW,EAAc,SAC3B,EAAc,KACC,IAAb,UACY,IAAZ,SACY,IAAX,QACkB,EAAc,IAAI,YAAY,IAA/C,cACF,EAAK,YAAY,CAAa,EAChC,EAAgB,CAClB,CACF,MACa,IAAX,QACE,GAAyB,EAAe,cAAc,IAAI,EAChE,EAAO,CACT,OAAS,GACT,GAAiB,CAAiB,CACpC,CACA,SAAS,GAA+B,EAAkB,EAAU,CAClE,IAAI,EAAO,EACX,EAAmB,EACnB,EAAG,CACD,IAAI,EAAW,EAAK,YAWpB,GAVM,EAAK,WAAX,EACI,GACI,EAAK,gBAAkB,EAAK,MAAM,QACnC,EAAK,MAAM,QAAU,SACpB,EAAK,MAAM,QAAU,EAAK,iBAAmB,GACxC,EAAK,aAAa,OAAO,IAAhC,IAAqC,EAAK,gBAAgB,OAAO,GAC7D,EAAK,WAAX,IACC,GACK,EAAK,aAAe,EAAK,UAAa,EAAK,UAAY,IACxD,EAAK,UAAY,EAAK,cAAgB,IAC3C,GAAkB,EAAS,WAAf,EACd,GAAM,EAAO,EAAS,KAAgB,IAAT,KAC3B,IAAU,IAAN,EAAwB,MACvB,SAEI,IAAT,KAA0B,IAAT,MAA0B,IAAT,MAA0B,IAAT,MACjD,IACN,EAAO,CACT,OAAS,EACX,CACA,SAAS,GAAwB,EAAW,CAC1C,IAAI,EAAW,EAAU,WAEzB,IADA,GAAmB,EAAS,WAAhB,KAA6B,EAAW,EAAS,aACtD,GAAY,CACjB,IAAI,EAAO,EAEX,OADA,EAAW,EAAS,YACZ,EAAK,SAAb,CACE,IAAK,OACL,IAAK,OACL,IAAK,OACH,GAAwB,CAAI,EAC5B,GAAsB,CAAI,EAC1B,SACF,IAAK,SACL,IAAK,QACH,SACF,IAAK,OACH,GAAqB,EAAK,IAAI,YAAY,IAAtC,aAAyC,QACjD,CACA,EAAU,YAAY,CAAI,CAC5B,CACF,CACA,SAAS,GAAmB,EAAU,EAAM,EAAO,EAAmB,CACpE,KAAa,EAAS,WAAf,GAA2B,CAChC,IAAI,EAAW,EACf,GAAI,EAAS,SAAS,YAAY,IAAM,EAAK,YAAY,MAErD,CAAC,IACY,EAAS,WAArB,SAA8C,EAAS,OAAtB,UAElC,WACG,GAAI,CAAC,EACV,GAAgB,IAAZ,SAAiC,EAAS,OAAtB,SAA4B,CAClD,IAAI,EAAe,EAAS,MAAjB,KAAwB,KAAO,GAAK,EAAS,KACxD,GACe,EAAS,OAAtB,UACA,EAAS,aAAa,MAAM,IAAM,EAElC,OAAO,CACX,MAAO,OAAO,OACX,GAAI,CAAC,EAAS,IACjB,OAAQ,EAAR,CACE,IAAK,OACH,GAAI,CAAC,EAAS,aAAa,UAAU,EAAG,MACxC,OAAO,EACT,IAAK,OAIE,GAHL,EAAO,EAAS,aAAa,KAAK,EACb,IAAjB,cAAyB,EAAS,aAAa,iBAAiB,GAGlE,IAAS,EAAS,KAClB,EAAS,aAAa,MAAM,KACjB,EAAS,MAAjB,MAAgC,EAAS,OAAhB,GACtB,KACA,EAAS,OACf,EAAS,aAAa,aAAa,KACxB,EAAS,aAAjB,KAA+B,KAAO,EAAS,cAClD,EAAS,aAAa,OAAO,KAClB,EAAS,OAAjB,KAAyB,KAAO,EAAS,OAE5C,MACF,OAAO,EACT,IAAK,QACH,GAAI,EAAS,aAAa,iBAAiB,EAAG,MAC9C,OAAO,EACT,IAAK,SAEH,GADA,EAAO,EAAS,aAAa,KAAK,GAE/B,KAAkB,EAAS,KAAjB,KAAuB,KAAO,EAAS,MAChD,EAAS,aAAa,MAAM,KACjB,EAAS,MAAjB,KAAwB,KAAO,EAAS,OAC3C,EAAS,aAAa,aAAa,KACxB,EAAS,aAAjB,KAA+B,KAAO,EAAS,eACpD,GACA,EAAS,aAAa,OAAO,GAC7B,CAAC,EAAS,aAAa,UAAU,EAEjC,MACF,OAAO,EACT,QACE,OAAO,CACX,CAEF,GADA,EAAW,GAAkB,EAAS,WAAW,EACpC,IAAT,KAAmB,KACzB,CACA,OAAO,IACT,CACA,SAAS,GAAuB,EAAU,EAAM,EAAmB,CACjE,GAAW,IAAP,GAAa,OAAO,KACxB,KAAa,EAAS,WAAf,GASL,IAPS,EAAS,WAAf,GACa,EAAS,WAArB,SACa,EAAS,OAAtB,WACF,CAAC,IAGH,EAAW,GAAkB,EAAS,WAAW,EACpC,IAAT,MAAmB,OAAO,KAEhC,OAAO,CACT,CACA,SAAS,GAA4B,EAAU,EAAmB,CAChE,KAAa,EAAS,WAAf,GASL,IAPS,EAAS,WAAf,GACa,EAAS,WAArB,SACa,EAAS,OAAtB,WACF,CAAC,IAGH,EAAW,GAAkB,EAAS,WAAW,EACpC,IAAT,MAAmB,OAAO,KAEhC,OAAO,CACT,CACA,SAAS,GAA0B,EAAU,CAC3C,OAAgB,EAAS,OAAlB,MAAmC,EAAS,OAAlB,IACnC,CACA,SAAS,GAA2B,EAAU,CAC5C,OACW,EAAS,OAAlB,MACU,EAAS,OAAlB,MAAwC,EAAS,cAAc,aAArC,SAE/B,CACA,SAAS,GAA8B,EAAU,EAAU,CACzD,IAAI,EAAgB,EAAS,cAC7B,GAAa,EAAS,OAAlB,KAAwB,EAAS,YAAc,OAC9C,GAAa,EAAS,OAAlB,MAAwC,EAAc,aAA5B,UACjC,EAAS,MACN,CACH,IAAI,EAAW,UAAY,CACzB,EAAS,EACT,EAAc,oBAAoB,mBAAoB,CAAQ,CAChE,EACA,EAAc,iBAAiB,mBAAoB,CAAQ,EAC3D,EAAS,YAAc,CACzB,CACF,CACA,SAAS,GAAkB,EAAM,CAC/B,KAAe,GAAR,KAAc,EAAO,EAAK,YAAa,CAC5C,IAAI,EAAW,EAAK,SACpB,GAAU,IAAN,GAAwB,IAAN,EAAgB,MACtC,GAAU,IAAN,EAAgB,CAElB,GADA,EAAW,EAAK,KAEN,IAAR,KACS,IAAT,MACS,IAAT,MACS,IAAT,MACQ,IAAR,KACS,IAAT,MACQ,IAAR,IAEA,MACF,GAAa,IAAT,MAA8B,IAAT,KAAmB,OAAO,IACrD,CACF,CACA,OAAO,CACT,CACA,IAAI,GAA8C,KAClD,SAAS,GAAgD,EAAmB,CAC1E,EAAoB,EAAkB,YACtC,IAAK,IAAI,EAAQ,EAAG,GAAqB,CACvC,GAAU,EAAkB,WAAxB,EAAkC,CACpC,IAAI,EAAO,EAAkB,KAC7B,GAAa,IAAT,MAA0B,IAAT,KAAe,CAClC,GAAU,IAAN,EACF,OAAO,GAAkB,EAAkB,WAAW,EACxD,GACF,MACW,IAAT,KACW,IAAT,MACS,IAAT,MACS,IAAT,MACQ,IAAR,KACA,GACN,CACA,EAAoB,EAAkB,WACxC,CACA,OAAO,IACT,CACA,SAAS,GAA2B,EAAgB,CAClD,EAAiB,EAAe,gBAChC,IAAK,IAAI,EAAQ,EAAG,GAAkB,CACpC,GAAU,EAAe,WAArB,EAA+B,CACjC,IAAI,EAAO,EAAe,KAC1B,GACU,IAAR,KACS,IAAT,MACS,IAAT,MACS,IAAT,MACQ,IAAR,IACA,CACA,GAAU,IAAN,EAAa,OAAO,EACxB,GACF,MAAiB,IAAV,MAA2B,IAAT,MAAkB,GAC7C,CACA,EAAiB,EAAe,eAClC,CACA,OAAO,IACT,CACA,SAAS,GAAyB,EAAM,EAAO,EAAuB,CAEpE,OADA,EAAQ,GAAkC,CAAqB,EACvD,EAAR,CACE,IAAK,OAEH,GADA,EAAO,EAAM,gBACT,CAAC,EAAM,MAAM,MAAM,EAAuB,GAAG,CAAC,EAClD,OAAO,EACT,IAAK,OAEH,GADA,EAAO,EAAM,KACT,CAAC,EAAM,MAAM,MAAM,EAAuB,GAAG,CAAC,EAClD,OAAO,EACT,IAAK,OAEH,GADA,EAAO,EAAM,KACT,CAAC,EAAM,MAAM,MAAM,EAAuB,GAAG,CAAC,EAClD,OAAO,EACT,QACE,MAAM,MAAM,EAAuB,GAAG,CAAC,CAC3C,CACF,CACA,SAAS,GAAyB,EAAU,CAC1C,IAAK,IAAI,EAAa,EAAS,WAAY,EAAW,QACpD,EAAS,oBAAoB,EAAW,EAAE,EAC5C,GAAsB,CAAQ,CAChC,CACA,IAAI,GAAkB,IAAI,IACxB,GAAiB,IAAI,IACvB,SAAS,GAAiB,EAAW,CACnC,OAAsB,OAAO,EAAU,aAAhC,WACH,EAAU,YAAY,EAChB,EAAU,WAAhB,EACE,EACA,EAAU,aAClB,CACA,IAAI,GAAqB,EAAwB,EACjD,EAAwB,EAAI,CAC1B,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,EACL,EACA,SAAS,IAAgB,CACvB,IAAI,EAAuB,GAAmB,EAAE,EAC9C,EAAe,GAAgB,EACjC,OAAO,GAAwB,CACjC,CACA,SAAS,GAAiB,EAAM,CAC9B,IAAI,EAAW,GAAoB,CAAI,EAC9B,IAAT,MAA2B,EAAS,MAAf,GAAiC,EAAS,OAApB,OACvC,GAAmB,CAAQ,EAC3B,GAAmB,EAAE,CAAI,CAC/B,CACA,IAAI,GAAiC,OAAO,SAAvB,IAAkC,KAAO,SAC9D,SAAS,GAAa,EAAK,EAAM,EAAa,CAC5C,IAAI,EAAgB,GACpB,GAAI,GAA8B,OAAO,GAApB,UAA4B,EAAM,CACrD,IAAI,EACF,GAA+C,CAAI,EACrD,EACE,aAAe,EAAM,YAAc,EAAqB,KAC7C,OAAO,GAApB,WACG,GAAsB,iBAAmB,EAAc,MAC1D,GAAe,IAAI,CAAkB,IAClC,GAAe,IAAI,CAAkB,EACrC,EAAM,CAAO,MAAkB,cAAmB,MAAK,EAC/C,EAAc,cAAc,CAAkB,IAAvD,OACI,EAAO,EAAc,cAAc,MAAM,EAC3C,GAAqB,EAAM,OAAQ,CAAG,EACtC,GAAoB,CAAI,EACxB,EAAc,KAAK,YAAY,CAAI,GACzC,CACF,CACA,SAAS,GAAY,EAAM,CACzB,GAAmB,EAAE,CAAI,EACzB,GAAa,eAAgB,EAAM,IAAI,CACzC,CACA,SAAS,GAAW,EAAM,EAAa,CACrC,GAAmB,EAAE,EAAM,CAAW,EACtC,GAAa,aAAc,EAAM,CAAW,CAC9C,CACA,SAAS,GAAQ,EAAM,EAAI,EAAS,CAClC,GAAmB,EAAE,EAAM,EAAI,CAAO,EACtC,IAAI,EAAgB,GACpB,GAAI,GAAiB,GAAQ,EAAI,CAC/B,IAAI,EACF,2BACA,GAA+C,CAAE,EACjD,KACU,IAAZ,SACI,GAAW,EAAQ,aACf,GACA,iBACA,GACE,EAAQ,WACV,EACA,KACW,OAAO,EAAQ,YAA5B,WACG,GACC,gBACA,GACE,EAAQ,UACV,EACA,OACH,GACC,UACA,GAA+C,CAAI,EACnD,KAKR,IAAI,EAAM,EACV,OAAQ,EAAR,CACE,IAAK,QACH,EAAM,GAAY,CAAI,EACtB,MACF,IAAK,SACH,EAAM,GAAa,CAAI,CAC3B,CACA,GAAgB,IAAI,CAAG,IACnB,EAAO,EACP,CACE,IAAK,UACL,KACc,IAAZ,SAAkB,GAAW,EAAQ,YAAc,IAAK,GAAI,EAC1D,IACN,EACA,CACF,EACA,GAAgB,IAAI,EAAK,CAAI,EACpB,EAAc,cAAc,CAAe,IAApD,MACe,IAAZ,SACC,EAAc,cAAc,GAA6B,CAAG,CAAC,GACjD,IAAb,UACC,EAAc,cAAc,GAAyB,CAAG,CAAC,IACzD,EAAK,EAAc,cAAc,MAAM,EACzC,GAAqB,EAAI,OAAQ,CAAI,EACrC,GAAoB,CAAE,EACtB,EAAc,KAAK,YAAY,CAAE,GACvC,CACF,CACA,SAAS,GAAc,EAAM,EAAS,CACpC,GAAmB,EAAE,EAAM,CAAO,EAClC,IAAI,EAAgB,GACpB,GAAI,GAAiB,EAAM,CACzB,IAAI,EAAK,GAAwB,OAAO,EAAQ,IAA5B,SAAiC,EAAQ,GAAK,SAChE,EACE,iCACA,GAA+C,CAAE,EACjD,YACA,GAA+C,CAAI,EACnD,KACF,EAAM,EACR,OAAQ,EAAR,CACE,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,eACL,IAAK,SACL,IAAK,SACH,EAAM,GAAa,CAAI,CAC3B,CACA,GACE,CAAC,GAAgB,IAAI,CAAG,IACtB,EAAO,EAAO,CAAE,IAAK,gBAAuB,MAAK,EAAG,CAAO,EAC7D,GAAgB,IAAI,EAAK,CAAI,EACpB,EAAc,cAAc,CAAe,IAApD,MACA,CACA,OAAQ,EAAR,CACE,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,eACL,IAAK,SACL,IAAK,SACH,GAAI,EAAc,cAAc,GAAyB,CAAG,CAAC,EAC3D,MACN,CACA,EAAK,EAAc,cAAc,MAAM,EACvC,GAAqB,EAAI,OAAQ,CAAI,EACrC,GAAoB,CAAE,EACtB,EAAc,KAAK,YAAY,CAAE,CACnC,CACF,CACF,CACA,SAAS,GAAa,EAAM,EAAY,EAAS,CAC/C,GAAmB,EAAE,EAAM,EAAY,CAAO,EAC9C,IAAI,EAAgB,GACpB,GAAI,GAAiB,EAAM,CACzB,IAAI,EAAS,GAAqB,CAAa,EAAE,gBAC/C,EAAM,GAAY,CAAI,EACxB,IAA2B,UAC3B,IAAI,EAAW,EAAO,IAAI,CAAG,EAC7B,GAAI,CAAC,EAAU,CACb,IAAI,EAAQ,CAAE,QAAS,EAAG,QAAS,IAAK,EACxC,GACG,EAAW,EAAc,cACxB,GAA6B,CAAG,CAClC,EAEA,EAAM,QAAU,MACb,CACH,EAAO,EACL,CAAE,IAAK,aAAoB,OAAM,kBAAmB,CAAW,EAC/D,CACF,GACC,EAAU,GAAgB,IAAI,CAAG,IAChC,GAA+B,EAAM,CAAO,EAC9C,IAAI,EAAQ,EAAW,EAAc,cAAc,MAAM,EACzD,GAAoB,CAAI,EACxB,GAAqB,EAAM,OAAQ,CAAI,EACvC,EAAK,GAAK,IAAI,QAAQ,SAAU,EAAS,EAAQ,CAC/C,EAAK,OAAS,EACd,EAAK,QAAU,CACjB,CAAC,EACD,EAAK,iBAAiB,OAAQ,UAAY,CACxC,EAAM,SAAW,CACnB,CAAC,EACD,EAAK,iBAAiB,QAAS,UAAY,CACzC,EAAM,SAAW,CACnB,CAAC,EACD,EAAM,SAAW,EACjB,GAAiB,EAAU,EAAY,CAAa,CACtD,CACA,EAAW,CACT,KAAM,aACN,SAAU,EACV,MAAO,EACA,OACT,EACA,EAAO,IAAI,EAAK,CAAQ,CAC1B,CACF,CACF,CACA,SAAS,GAAc,EAAK,EAAS,CACnC,GAAmB,EAAE,EAAK,CAAO,EACjC,IAAI,EAAgB,GACpB,GAAI,GAAiB,EAAK,CACxB,IAAI,EAAU,GAAqB,CAAa,EAAE,iBAChD,EAAM,GAAa,CAAG,EACtB,EAAW,EAAQ,IAAI,CAAG,EAC5B,IACI,EAAW,EAAc,cAAc,GAAyB,CAAG,CAAC,EACtE,IACI,EAAM,EAAO,CAAO,MAAK,MAAO,CAAC,CAAE,EAAG,CAAO,GAC9C,EAAU,GAAgB,IAAI,CAAG,IAChC,GAA2B,EAAK,CAAO,EACxC,EAAW,EAAc,cAAc,QAAQ,EAChD,GAAoB,CAAQ,EAC5B,GAAqB,EAAU,OAAQ,CAAG,EAC1C,EAAc,KAAK,YAAY,CAAQ,GACxC,EAAW,CACV,KAAM,SACN,SAAU,EACV,MAAO,EACP,MAAO,IACT,EACA,EAAQ,IAAI,EAAK,CAAQ,EAC7B,CACF,CACA,SAAS,GAAoB,EAAK,EAAS,CACzC,GAAmB,EAAE,EAAK,CAAO,EACjC,IAAI,EAAgB,GACpB,GAAI,GAAiB,EAAK,CACxB,IAAI,EAAU,GAAqB,CAAa,EAAE,iBAChD,EAAM,GAAa,CAAG,EACtB,EAAW,EAAQ,IAAI,CAAG,EAC5B,IACI,EAAW,EAAc,cAAc,GAAyB,CAAG,CAAC,EACtE,IACI,EAAM,EAAO,CAAO,MAAK,MAAO,CAAC,EAAG,KAAM,QAAS,EAAG,CAAO,GAC9D,EAAU,GAAgB,IAAI,CAAG,IAChC,GAA2B,EAAK,CAAO,EACxC,EAAW,EAAc,cAAc,QAAQ,EAChD,GAAoB,CAAQ,EAC5B,GAAqB,EAAU,OAAQ,CAAG,EAC1C,EAAc,KAAK,YAAY,CAAQ,GACxC,EAAW,CACV,KAAM,SACN,SAAU,EACV,MAAO,EACP,MAAO,IACT,EACA,EAAQ,IAAI,EAAK,CAAQ,EAC7B,CACF,CACA,SAAS,GAAY,EAAM,EAAc,EAAc,EAAiB,CACtE,IAAI,GAA4B,EAC9B,GAAwB,SACtB,GAAiB,CAAwB,EACzC,KACJ,GAAI,CAAC,EAA0B,MAAM,MAAM,EAAuB,GAAG,CAAC,EACtE,OAAQ,EAAR,CACE,IAAK,OACL,IAAK,QACH,OAAO,KACT,IAAK,QACH,OAAoB,OAAO,EAAa,YAAjC,UACQ,OAAO,EAAa,MAAjC,UACI,EAAe,GAAY,EAAa,IAAI,EAC7C,EAAe,GACd,CACF,EAAE,gBACD,EAAkB,EAAa,IAAI,CAAY,EAChD,IACI,EAAkB,CAClB,KAAM,QACN,SAAU,KACV,MAAO,EACP,MAAO,IACT,EACA,EAAa,IAAI,EAAc,CAAe,GAChD,GACA,CAAE,KAAM,OAAQ,SAAU,KAAM,MAAO,EAAG,MAAO,IAAK,EAC5D,IAAK,OACH,GACmB,EAAa,MAA9B,cACa,OAAO,EAAa,MAAjC,UACa,OAAO,EAAa,YAAjC,SACA,CACA,EAAO,GAAY,EAAa,IAAI,EACpC,IAAI,EAAa,GACb,CACF,EAAE,gBACF,EAAe,EAAW,IAAI,CAAI,EAoCpC,GAnCA,IACI,EACA,EAAyB,eAAiB,EAC3C,EAAe,CACd,KAAM,aACN,SAAU,KACV,MAAO,EACP,MAAO,CAAE,QAAS,EAAG,QAAS,IAAK,CACrC,EACA,EAAW,IAAI,EAAM,CAAY,GAChC,EAAa,EAAyB,cACrC,GAA6B,CAAI,CACnC,IACE,CAAC,EAAW,KACV,EAAa,SAAW,EACzB,EAAa,MAAM,QAAU,GAChC,GAAgB,IAAI,CAAI,IACpB,EAAe,CACf,IAAK,UACL,GAAI,QACJ,KAAM,EAAa,KACnB,YAAa,EAAa,YAC1B,UAAW,EAAa,UACxB,MAAO,EAAa,MACpB,SAAU,EAAa,SACvB,eAAgB,EAAa,cAC/B,EACA,GAAgB,IAAI,EAAM,CAAY,EACtC,GACE,GACE,EACA,EACA,EACA,EAAa,KACf,IACF,GAAyB,IAAT,KAClB,MAAM,MAAM,EAAuB,IAAK,EAAE,CAAC,EAC7C,OAAO,CACT,CACA,GAAI,GAAyB,IAAT,KAClB,MAAM,MAAM,EAAuB,IAAK,EAAE,CAAC,EAC7C,OAAO,KACT,IAAK,SACH,MACG,GAAe,EAAa,MAC5B,EAAe,EAAa,IAChB,OAAO,GAApB,UACA,GACe,OAAO,GAAtB,YACa,OAAO,GAApB,UACM,EAAe,GAAa,CAAY,EACzC,EAAe,GACd,CACF,EAAE,iBACD,EAAkB,EAAa,IAAI,CAAY,EAChD,IACI,EAAkB,CAClB,KAAM,SACN,SAAU,KACV,MAAO,EACP,MAAO,IACT,EACA,EAAa,IAAI,EAAc,CAAe,GAChD,GACA,CAAE,KAAM,OAAQ,SAAU,KAAM,MAAO,EAAG,MAAO,IAAK,EAE9D,QACE,MAAM,MAAM,EAAuB,IAAK,CAAI,CAAC,CACjD,CACF,CACA,SAAS,GAAY,EAAM,CACzB,MAAO,SAAW,GAA+C,CAAI,EAAI,GAC3E,CACA,SAAS,GAA6B,EAAK,CACzC,MAAO,0BAA4B,EAAM,GAC3C,CACA,SAAS,GAA4B,EAAU,CAC7C,OAAO,EAAO,CAAC,EAAG,EAAU,CAC1B,kBAAmB,EAAS,WAC5B,WAAY,IACd,CAAC,CACH,CACA,SAAS,GAAkB,EAAe,EAAK,EAAc,EAAO,CAClE,EAAc,cAAc,mCAAqC,EAAM,GAAG,EACrE,EAAM,QAAU,GACf,EAAM,EAAc,cAAc,MAAM,EACzC,EAAM,QAAU,EACjB,EAAI,iBAAiB,OAAQ,UAAY,CACvC,MAAQ,GAAM,SAAW,CAC3B,CAAC,EACD,EAAI,iBAAiB,QAAS,UAAY,CACxC,MAAQ,GAAM,SAAW,CAC3B,CAAC,EACD,GAAqB,EAAK,OAAQ,CAAY,EAC9C,GAAoB,CAAG,EACvB,EAAc,KAAK,YAAY,CAAG,EACxC,CACA,SAAS,GAAa,EAAK,CACzB,MAAO,SAAW,GAA+C,CAAG,EAAI,IAC1E,CACA,SAAS,GAAyB,EAAK,CACrC,MAAO,gBAAkB,CAC3B,CACA,SAAS,GAAgB,EAAe,EAAU,EAAO,CAEvD,GADA,EAAS,QACI,EAAS,WAAlB,KACF,OAAQ,EAAS,KAAjB,CACE,IAAK,QACH,IAAI,EAAW,EAAc,cAC3B,qBACE,GAA+C,EAAM,IAAI,EACzD,IACJ,EACA,GAAI,EACF,MACG,GAAS,SAAW,EACrB,GAAoB,CAAQ,EAC5B,EAEJ,IAAI,EAAa,EAAO,CAAC,EAAG,EAAO,CACjC,YAAa,EAAM,KACnB,kBAAmB,EAAM,WACzB,KAAM,KACN,WAAY,IACd,CAAC,EAOD,MANA,IAAY,EAAc,eAAiB,GAAe,cACxD,OACF,EACA,GAAoB,CAAQ,EAC5B,GAAqB,EAAU,QAAS,CAAU,EAClD,GAAiB,EAAU,EAAM,WAAY,CAAa,EAClD,EAAS,SAAW,EAC9B,IAAK,aACH,EAAa,GAAY,EAAM,IAAI,EACnC,IAAI,EAAe,EAAc,cAC/B,GAA6B,CAAU,CACzC,EACA,GAAI,EACF,MACG,GAAS,MAAM,SAAW,EAC1B,EAAS,SAAW,EACrB,GAAoB,CAAY,EAChC,EAEJ,EAAW,GAA4B,CAAK,GAC3C,EAAa,GAAgB,IAAI,CAAU,IAC1C,GAA+B,EAAU,CAAU,EACrD,GACE,EAAc,eAAiB,GAC/B,cAAc,MAAM,EACtB,GAAoB,CAAY,EAChC,IAAI,EAAe,EAQnB,MAPA,GAAa,GAAK,IAAI,QAAQ,SAAU,EAAS,EAAQ,CACvD,EAAa,OAAS,EACtB,EAAa,QAAU,CACzB,CAAC,EACD,GAAqB,EAAc,OAAQ,CAAQ,EACnD,EAAS,MAAM,SAAW,EAC1B,GAAiB,EAAc,EAAM,WAAY,CAAa,EACtD,EAAS,SAAW,EAC9B,IAAK,SAqBH,MApBA,GAAe,GAAa,EAAM,GAAG,GAElC,EAAa,EAAc,cAC1B,GAAyB,CAAY,CACvC,IAGG,EAAS,SAAW,EACrB,GAAoB,CAAU,EAC9B,IAEJ,EAAW,GACN,EAAa,GAAgB,IAAI,CAAY,KAChD,EAAY,EAAO,CAAC,EAAG,CAAK,EAC1B,GAA2B,EAAU,CAAU,GACnD,EAAgB,EAAc,eAAiB,EAC/C,EAAa,EAAc,cAAc,QAAQ,EACjD,GAAoB,CAAU,EAC9B,GAAqB,EAAY,OAAQ,CAAQ,EACjD,EAAc,KAAK,YAAY,CAAU,EACjC,EAAS,SAAW,GAC9B,IAAK,OACH,OAAO,KACT,QACE,MAAM,MAAM,EAAuB,IAAK,EAAS,IAAI,CAAC,CAC1D,MAEiB,EAAS,OAA1B,cACE,EAAO,EAAS,MAAM,QAAU,KAC9B,EAAW,EAAS,SACrB,EAAS,MAAM,SAAW,EAC3B,GAAiB,EAAU,EAAM,WAAY,CAAa,GAC9D,OAAO,EAAS,QAClB,CACA,SAAS,GAAiB,EAAU,EAAY,EAAM,CACpD,IACE,IAAI,EAAQ,EAAK,iBACb,gEACF,EACA,EAAO,EAAM,OAAS,EAAM,EAAM,OAAS,GAAK,KAChD,EAAQ,EACR,EAAI,EACN,EAAI,EAAM,OACV,IACA,CACA,IAAI,EAAO,EAAM,GACjB,GAAI,EAAK,QAAQ,aAAe,EAAY,EAAQ,OAC/C,GAAI,IAAU,EAAM,KAC3B,CACA,EACI,EAAM,WAAW,aAAa,EAAU,EAAM,WAAW,GACvD,EAAmB,EAAK,WAAX,EAAsB,EAAK,KAAO,EACjD,EAAW,aAAa,EAAU,EAAW,UAAU,EAC7D,CACA,SAAS,GAA+B,EAAiB,EAAc,CACrE,EACmB,cAAc,EAAa,YAC9C,EACmB,iBAAiB,EAAa,eACjD,EAAkD,QAAQ,EAAa,KACzE,CACA,SAAS,GAA2B,EAAa,EAAc,CAC7D,EACe,cAAc,EAAa,YAC1C,EACe,iBAAiB,EAAa,eAC7C,EACe,YAAY,EAAa,SAC1C,CACA,IAAI,GAAY,KAChB,SAAS,GAA4B,EAAM,EAAc,EAAe,CACtE,GAAa,KAAT,KAAoB,CACtB,IAAI,EAAQ,IAAI,IACZ,EAAU,GAAY,IAAI,IAC9B,EAAO,IAAI,EAAe,CAAK,CACjC,MACE,EAAU,GACP,EAAQ,EAAO,IAAI,CAAa,EACjC,IAAW,EAAQ,IAAI,IAAQ,EAAO,IAAI,EAAe,CAAK,GAClE,GAAI,EAAM,IAAI,CAAI,EAAG,OAAO,EAG5B,IAFA,EAAM,IAAI,EAAM,IAAI,EACpB,EAAgB,EAAc,qBAAqB,CAAI,EAClD,EAAS,EAAG,EAAS,EAAc,OAAQ,IAAU,CACxD,IAAI,EAAO,EAAc,GACzB,GACE,EACE,EAAK,KACL,EAAK,KACO,IAAX,QAAoC,EAAK,aAAa,KAAK,IAAxC,eAEW,EAAK,eAAtC,6BACA,CACA,IAAI,EAAU,EAAK,aAAa,CAAY,GAAK,GACjD,EAAU,EAAO,EACjB,IAAI,EAAW,EAAM,IAAI,CAAO,EAChC,EAAW,EAAS,KAAK,CAAI,EAAI,EAAM,IAAI,EAAS,CAAC,CAAI,CAAC,CAC5D,CACF,CACA,OAAO,CACT,CACA,SAAS,GAAe,EAAe,EAAM,EAAU,CACrD,EAAgB,EAAc,eAAiB,EAC/C,EAAc,KAAK,aACjB,EACY,IAAZ,QAAmB,EAAc,cAAc,cAAc,EAAI,IACnE,CACF,CACA,SAAS,GAAoB,EAAM,EAAO,EAAa,CACrD,GAAU,IAAN,GAA6B,EAAM,UAAd,KAAwB,MAAO,CAAC,EACzD,OAAQ,EAAR,CACE,IAAK,OACL,IAAK,QACH,MAAO,CAAC,EACV,IAAK,QACH,GACe,OAAO,EAAM,YAA1B,UACa,OAAO,EAAM,MAA1B,UACO,EAAM,OAAb,GAEA,MACF,MAAO,CAAC,EACV,IAAK,OACH,GACe,OAAO,EAAM,KAA1B,UACa,OAAO,EAAM,MAA1B,UACO,EAAM,OAAb,IACA,EAAM,QACN,EAAM,QAEN,MACF,OAAQ,EAAM,IAAd,CACE,IAAK,aACH,MACG,GAAO,EAAM,SACD,OAAO,EAAM,YAA1B,UAAgD,GAAR,KAE5C,QACE,MAAO,CAAC,CACZ,CACF,IAAK,SACH,GACE,EAAM,OACS,OAAO,EAAM,OAA5B,YACa,OAAO,EAAM,OAA1B,UACA,CAAC,EAAM,QACP,CAAC,EAAM,SACP,EAAM,KACO,OAAO,EAAM,KAA1B,SAEA,MAAO,CAAC,CACd,CACA,MAAO,CAAC,CACV,CACA,SAAS,GAAgB,EAAU,CACjC,MAAO,EAAiB,EAAS,OAA1B,cAAkC,EAAO,EAAS,MAAM,QAAU,GAG3E,CACA,SAAS,GAAgB,EAAO,EAAe,EAAU,EAAO,CAC9D,GACmB,EAAS,OAA1B,eACc,OAAO,EAAM,OAA1B,UACC,CAAC,IAAM,WAAW,EAAM,KAAK,EAAE,UACjC,EAAO,EAAS,MAAM,QAAU,GAChC,CACA,GAAa,EAAS,WAAlB,KAA4B,CAC9B,IAAI,EAAM,GAAY,EAAM,IAAI,EAC9B,EAAW,EAAc,cACvB,GAA6B,CAAG,CAClC,EACF,GAAI,EAAU,CACZ,EAAgB,EAAS,GAEV,OAAO,GAApB,UADO,GAEQ,OAAO,EAAc,MAApC,aACC,EAAM,QACN,EAAQ,GAAY,KAAK,CAAK,EAC/B,EAAc,KAAK,EAAO,CAAK,GACjC,EAAS,MAAM,SAAW,EAC1B,EAAS,SAAW,EACpB,GAAoB,CAAQ,EAC5B,MACF,CACA,EAAW,EAAc,eAAiB,EAC1C,EAAQ,GAA4B,CAAK,GACxC,EAAM,GAAgB,IAAI,CAAG,IAC5B,GAA+B,EAAO,CAAG,EAC3C,EAAW,EAAS,cAAc,MAAM,EACxC,GAAoB,CAAQ,EAC5B,IAAI,EAAe,EACnB,EAAa,GAAK,IAAI,QAAQ,SAAU,EAAS,EAAQ,CACvD,EAAa,OAAS,EACtB,EAAa,QAAU,CACzB,CAAC,EACD,GAAqB,EAAU,OAAQ,CAAK,EAC5C,EAAS,SAAW,CACtB,CACS,EAAM,cAAf,OAA+B,EAAM,YAAc,IAAI,KACvD,EAAM,YAAY,IAAI,EAAU,CAAa,GAC5C,EAAgB,EAAS,MAAM,UAC9B,EAAO,EAAS,MAAM,QAAU,KAC/B,EAAM,QACN,EAAW,GAAY,KAAK,CAAK,EAClC,EAAc,iBAAiB,OAAQ,CAAQ,EAC/C,EAAc,iBAAiB,QAAS,CAAQ,EACpD,CACF,CACA,IAAI,GAA4B,EAChC,SAAS,GAAuB,EAAO,EAAe,CAIpD,OAHA,EAAM,aACE,EAAM,QAAZ,GACA,GAA2B,EAAO,EAAM,WAAW,EAC9C,EAAI,EAAM,OAAS,EAAI,EAAM,SAChC,SAAU,EAAQ,CAChB,IAAI,EAAkB,WAAW,UAAY,CAG3C,GAFA,EAAM,aACJ,GAA2B,EAAO,EAAM,WAAW,EACjD,EAAM,UAAW,CACnB,IAAI,EAAY,EAAM,UACtB,EAAM,UAAY,KAClB,EAAU,CACZ,CACF,EAAG,IAAM,CAAa,EACtB,EAAI,EAAM,UACF,KAAN,IACC,GAA4B,MAAQ,GAAkB,GACzD,IAAI,EAAW,WACb,UAAY,CAEV,GADA,EAAM,iBAAmB,CAAC,EAElB,EAAM,QAAZ,IACC,EAAM,aACL,GAA2B,EAAO,EAAM,WAAW,EACrD,EAAM,WACN,CACA,IAAI,EAAY,EAAM,UACtB,EAAM,UAAY,KAClB,EAAU,CACZ,CACF,GACC,EAAM,SAAW,GAA4B,GAAK,KACjD,CACJ,EAEA,MADA,GAAM,UAAY,EACX,UAAY,CACjB,EAAM,UAAY,KAClB,aAAa,CAAe,EAC5B,aAAa,CAAQ,CACvB,CACF,EACA,IACN,CACA,SAAS,IAAc,CAErB,GADA,KAAK,QACK,KAAK,QAAX,IAA2B,KAAK,WAAX,GAAuB,CAAC,KAAK,sBAChD,KAAK,YAAa,GAA2B,KAAM,KAAK,WAAW,OAClE,GAAI,KAAK,UAAW,CACvB,IAAI,EAAY,KAAK,UACrB,KAAK,UAAY,KACjB,EAAU,CACZ,EACJ,CACA,IAAI,GAAoB,KACxB,SAAS,GAA2B,EAAO,EAAW,CACpD,EAAM,YAAc,KACX,EAAM,YAAf,OACG,EAAM,QACN,GAAoB,IAAI,IACzB,EAAU,QAAQ,GAA0B,CAAK,EAChD,GAAoB,KACrB,GAAY,KAAK,CAAK,EAC1B,CACA,SAAS,GAAyB,EAAM,EAAU,CAChD,GAAI,EAAE,EAAS,MAAM,QAAU,GAAI,CACjC,IAAI,EAAc,GAAkB,IAAI,CAAI,EAC5C,GAAI,EAAa,IAAI,EAAO,EAAY,IAAI,IAAI,MAC3C,CACH,EAAc,IAAI,IAClB,GAAkB,IAAI,EAAM,CAAW,EACvC,IACE,IAAI,EAAQ,EAAK,iBACb,8CACF,EACA,EAAI,EACN,EAAI,EAAM,OACV,IACA,CACA,IAAI,EAAO,EAAM,IAEJ,EAAK,WAAhB,QACc,EAAK,aAAa,OAAO,IAAvC,aAEA,EAAY,IAAI,EAAK,QAAQ,WAAY,CAAI,EAAI,EAAO,EAC5D,CACA,GAAQ,EAAY,IAAI,KAAM,CAAI,CACpC,CACA,EAAQ,EAAS,SACjB,EAAO,EAAM,aAAa,iBAAiB,EAC3C,EAAI,EAAY,IAAI,CAAI,GAAK,EAC7B,IAAM,GAAQ,EAAY,IAAI,KAAM,CAAK,EACzC,EAAY,IAAI,EAAM,CAAK,EAC3B,KAAK,QACL,EAAO,GAAY,KAAK,IAAI,EAC5B,EAAM,iBAAiB,OAAQ,CAAI,EACnC,EAAM,iBAAiB,QAAS,CAAI,EACpC,EACI,EAAE,WAAW,aAAa,EAAO,EAAE,WAAW,GAC5C,EAAa,EAAK,WAAX,EAAsB,EAAK,KAAO,EAC3C,EAAK,aAAa,EAAO,EAAK,UAAU,GAC5C,EAAS,MAAM,SAAW,CAC5B,CACF,CACA,IAAI,GAAwB,CAC1B,SAAU,EACV,SAAU,KACV,SAAU,KACV,cAAe,GACf,eAAgB,GAChB,aAAc,CAChB,EACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACA,KAAK,IAAM,EACX,KAAK,cAAgB,EACrB,KAAK,UAAY,KAAK,QAAU,KAAK,gBAAkB,KACvD,KAAK,cAAgB,GACrB,KAAK,aACH,KAAK,KACL,KAAK,eACL,KAAK,QACL,KAAK,oBACH,KACJ,KAAK,iBAAmB,EACxB,KAAK,gBAAkB,GAAc,EAAE,EACvC,KAAK,eACH,KAAK,oBACL,KAAK,2BACL,KAAK,aACL,KAAK,UACL,KAAK,YACL,KAAK,eACL,KAAK,aACH,EACJ,KAAK,cAAgB,GAAc,CAAC,EACpC,KAAK,cAAgB,GAAc,IAAI,EACvC,KAAK,iBAAmB,EACxB,KAAK,gBAAkB,EACvB,KAAK,cAAgB,EACrB,KAAK,mBAAqB,EAC1B,KAAK,YAAc,KACnB,KAAK,iBAAmB,EACxB,KAAK,UAAY,EACjB,KAAK,sBAAwB,IAAI,GACnC,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CA2BA,MA1BA,GAAgB,IAAI,GAClB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACA,EAAM,EACN,CAAC,IAAM,IAAiB,GAAO,IAC/B,EAAe,GAAqB,EAAG,KAAM,KAAM,CAAG,EACtD,EAAc,QAAU,EACxB,EAAa,UAAY,EACzB,EAAM,GAAY,EAClB,EAAI,WACJ,EAAc,YAAc,EAC5B,EAAI,WACJ,EAAa,cAAgB,CAC3B,QAAS,EACT,aAAc,EACd,MAAO,CACT,EACA,GAAsB,CAAY,EAC3B,CACT,CACA,SAAS,GAAqB,EAAiB,CAG7C,OAFK,GACL,EAAkB,GACX,GAFsB,EAG/B,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,EACA,CACA,EAAkB,GAAqB,CAAe,EAC7C,EAAU,UAAnB,KACK,EAAU,QAAU,EACpB,EAAU,eAAiB,EAChC,EAAY,GAAa,CAAI,EAC7B,EAAU,QAAU,CAAW,SAAQ,EACvC,EAAsB,IAAX,IAAK,GAAiB,KAAO,EAC/B,IAAT,OAAsB,EAAU,SAAW,GAC3C,EAAU,GAAc,EAAW,EAAW,CAAI,EACzC,IAAT,OACG,GAAsB,EAAS,EAAW,CAAI,EAC/C,GAAoB,EAAS,EAAW,CAAI,EAChD,CACA,SAAS,GAAkB,EAAO,EAAW,CAE3C,GADA,EAAQ,EAAM,cACD,IAAT,MAA2B,EAAM,aAAf,KAA2B,CAC/C,IAAI,EAAI,EAAM,UACd,EAAM,UAAkB,IAAN,GAAW,EAAI,EAAY,EAAI,CACnD,CACF,CACA,SAAS,GAA2B,EAAO,EAAW,CACpD,GAAkB,EAAO,CAAS,GACjC,EAAQ,EAAM,YAAc,GAAkB,EAAO,CAAS,CACjE,CACA,SAAS,GAA2B,EAAO,CACzC,GAAW,EAAM,MAAb,IAA2B,EAAM,MAAb,GAAkB,CACxC,IAAI,EAAO,GAA+B,EAAO,QAAQ,EAChD,IAAT,MAAiB,GAAsB,EAAM,EAAO,QAAQ,EAC5D,GAA2B,EAAO,QAAQ,CAC5C,CACF,CACA,SAAS,GAAkC,EAAO,CAChD,GAAW,EAAM,MAAb,IAA2B,EAAM,MAAb,GAAkB,CACxC,IAAI,EAAO,GAAkB,EAC7B,EAAO,GAAgC,CAAI,EAC3C,IAAI,EAAO,GAA+B,EAAO,CAAI,EAC5C,IAAT,MAAiB,GAAsB,EAAM,EAAO,CAAI,EACxD,GAA2B,EAAO,CAAI,CACxC,CACF,CACA,IAAI,GAAW,CAAC,EAChB,SAAS,GACP,EACA,EACA,EACA,EACA,CACA,IAAI,EAAiB,EAAqB,EAC1C,EAAqB,EAAI,KACzB,IAAI,EAAmB,EAAwB,EAC/C,GAAI,CACF,EAAyB,EAAI,EAC3B,GAAc,EAAc,EAAkB,EAAW,CAAW,CACxE,QAAU,CACR,EAAyB,EAAI,EAC1B,EAAqB,EAAI,CAC9B,CACF,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,CACA,IAAI,EAAiB,EAAqB,EAC1C,EAAqB,EAAI,KACzB,IAAI,EAAmB,EAAwB,EAC/C,GAAI,CACF,EAAyB,EAAI,EAC3B,GAAc,EAAc,EAAkB,EAAW,CAAW,CACxE,QAAU,CACR,EAAyB,EAAI,EAC1B,EAAqB,EAAI,CAC9B,CACF,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,CACA,GAAI,GAAU,CACZ,IAAI,EAAY,GAA0B,CAAW,EACrD,GAAa,IAAT,KACF,GACE,EACA,EACA,EACA,GACA,CACF,EACE,GAAuB,EAAc,CAAW,OAC/C,GACH,GACE,EACA,EACA,EACA,EACA,CACF,EAEA,EAAY,gBAAgB,OACzB,GACF,GAAuB,EAAc,CAAW,EACjD,EAAmB,GACjB,GAAK,GAAyB,QAAQ,CAAY,EACpD,CACA,KAAgB,IAAT,MAAsB,CAC3B,IAAI,EAAQ,GAAoB,CAAS,EACzC,GAAa,IAAT,KACF,OAAQ,EAAM,IAAd,CACE,IAAK,GAEH,GADA,EAAQ,EAAM,UACV,EAAM,QAAQ,cAAc,aAAc,CAC5C,IAAI,EAAQ,GAAwB,EAAM,YAAY,EACtD,GAAU,IAAN,EAAa,CACf,IAAI,EAAO,EAEX,IADA,EAAK,cAAgB,EAChB,EAAK,gBAAkB,EAAG,GAAS,CACtC,IAAI,EAAO,GAAM,GAAK,GAAM,CAAK,EACjC,EAAK,cAAc,IAAM,EACzB,GAAS,CAAC,CACZ,CACA,GAAsB,CAAK,EAC3B,EAAO,GAAmB,KACtB,GAAqC,GAAI,EAAI,IAC/C,GAA8B,EAAG,CAAC,CAAC,EACvC,CACF,CACA,MACF,IAAK,IACL,IAAK,IACH,EAAQ,GAA+B,EAAO,CAAC,EACpC,IAAT,MAAiB,GAAsB,EAAM,EAAO,CAAC,EACrD,GAAgB,EAChB,GAA2B,EAAO,CAAC,CACzC,CAUF,GATA,EAAQ,GAA0B,CAAW,EACpC,IAAT,MACE,GACE,EACA,EACA,EACA,GACA,CACF,EACE,IAAU,EAAW,MACzB,EAAY,CACd,CACS,IAAT,MAAsB,EAAY,gBAAgB,CACpD,MACE,GACE,EACA,EACA,EACA,KACA,CACF,CACJ,CACF,CACA,SAAS,GAA0B,EAAa,CAE9C,MADA,GAAc,GAAe,CAAW,EACjC,GAA2B,CAAW,CAC/C,CACA,IAAI,GAAoB,KACxB,SAAS,GAA2B,EAAY,CAG9C,GAFA,GAAoB,KACpB,EAAa,GAA2B,CAAU,EACrC,IAAT,KAAqB,CACvB,IAAI,EAAiB,EAAuB,CAAU,EACtD,GAAa,IAAT,KAAyB,EAAa,SACrC,CACH,IAAI,EAAM,EAAe,IACzB,GAAW,IAAP,GAAY,CAEd,GADA,EAAa,EAA6B,CAAc,EAC3C,IAAT,KAAqB,OAAO,EAChC,EAAa,IACf,MAAO,GAAW,IAAP,GAAY,CAErB,GADA,EAAa,EAA6B,CAAc,EAC3C,IAAT,KAAqB,OAAO,EAChC,EAAa,IACf,MAAO,GAAU,IAAN,EAAW,CACpB,GAAI,EAAe,UAAU,QAAQ,cAAc,aACjD,OAAa,EAAe,MAArB,EACH,EAAe,UAAU,cACzB,KACN,EAAa,IACf,MAAO,IAAmB,IAAe,EAAa,KACxD,CACF,CAEA,MADA,IAAoB,EACb,IACT,CACA,SAAS,GAAiB,EAAc,CACtC,OAAQ,EAAR,CACE,IAAK,eACL,IAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,cACL,IAAK,OACL,IAAK,MACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,cACL,IAAK,YACL,IAAK,aACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,aACL,IAAK,eACL,IAAK,SACL,IAAK,kBACL,IAAK,YACL,IAAK,mBACL,IAAK,iBACL,IAAK,oBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,OACL,IAAK,mBACL,IAAK,QACL,IAAK,aACL,IAAK,WACL,IAAK,SACL,IAAK,cACH,MAAO,GACT,IAAK,OACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACH,MAAO,GACT,IAAK,UACH,OAAQ,GAAwB,EAAhC,CACE,KAAK,GACH,MAAO,GACT,KAAK,GACH,MAAO,GACT,KAAK,GACL,KAAK,GACH,MAAO,IACT,KAAK,GACH,MAAO,WACT,QACE,MAAO,GACX,CACF,QACE,MAAO,GACX,CACF,CACA,IAAI,GAA4B,CAAC,EAC/B,GAAc,KACd,GAAa,KACb,GAAc,KACd,GAAiB,IAAI,IACrB,GAAwB,IAAI,IAC5B,GAAiC,CAAC,EAClC,GACE,sPAAsP,MACpP,GACF,EACJ,SAAS,GAAuB,EAAc,EAAa,CACzD,OAAQ,EAAR,CACE,IAAK,UACL,IAAK,WACH,GAAc,KACd,MACF,IAAK,YACL,IAAK,YACH,GAAa,KACb,MACF,IAAK,YACL,IAAK,WACH,GAAc,KACd,MACF,IAAK,cACL,IAAK,aACH,GAAe,OAAO,EAAY,SAAS,EAC3C,MACF,IAAK,oBACL,IAAK,qBACH,GAAsB,OAAO,EAAY,SAAS,CACtD,CACF,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,EACA,CAuBA,OArBW,IAAT,MACA,EAAoB,cAAgB,GAGjC,EAAsB,CACV,YACG,eACI,mBACL,cACb,iBAAkB,CAAC,CAAe,CACpC,EACS,IAAT,OACI,EAAY,GAAoB,CAAS,EAClC,IAAT,MAAsB,GAA2B,CAAS,GAC5D,IAEJ,EAAoB,kBAAoB,EACxC,EAAY,EAAoB,iBACvB,IAAT,MACS,EAAU,QAAQ,CAAe,IAAxC,IACA,EAAU,KAAK,CAAe,EACzB,EACT,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,CACA,OAAQ,EAAR,CACE,IAAK,UACH,MACG,IAAc,GACb,GACA,EACA,EACA,EACA,EACA,CACF,EACA,CAAC,EAEL,IAAK,YACH,MACG,IAAa,GACZ,GACA,EACA,EACA,EACA,EACA,CACF,EACA,CAAC,EAEL,IAAK,YACH,MACG,IAAc,GACb,GACA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C,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,IAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,IAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,IAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAA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","names":["_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","_unsupportedIterableToArray","arrayLikeToArray","_nonIterableRest","_slicedToArray","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","_defineProperty","NamespacedValue","UnstableValue","ownKeys","_objectSpread","removeHiddenChars","normalize","sleep","promiseRetry","baseToString","iterableToArray","loglevel","logger","EventEmitter","shouldDisambiguate","calculateDisplayName","_objectWithoutProperties","objectWithoutPropertiesLoose","Room","debuglog","RoomEvent","M_POLL_START","ConnectionError","count","setTimeout","clearTimeout","callbacks.setTimeout","loggerInstance","rootLogger","utils.isSupportedReceiptType","FAILED_SYNC_ERROR_THRESHOLD","SyncState","UpdateDelayedEventAction","basex","bs58","NotSupportedError","Logger","Event","_excluded","utils.ensureNoTrailingSlash","utils.encodeUri","ContentHelpers.makeTopicContent","utils.deepCopy","ContentHelpers.makeTextMessage","ContentHelpers.makeNotice","ContentHelpers.makeEmoteMessage","ContentHelpers.makeHtmlMessage","ContentHelpers.makeHtmlNotice","ContentHelpers.makeHtmlEmote","utils.deepCompare","utils.encodeParams","utils.recursiveMapToObject","ExtensibleEvents","exists","DB_MIGRATIONS","VERSION","selectQuery","idbExists","Backend","IndexedDBHelpers.exists","IndexedDBCryptoStoreBackend.VERSION","IndexedDBCryptoStoreBackend.Backend","indexedDB","matrixcs.IndexedDBCryptoStore","matrixcs","getDefaultExportFromCjs","Item","noop","process","process$1","isBrowser","useIsomorphicLayoutEffect","alreadyWarned","composeEventHandlers","Link","Form","DEBUG_BUILD","handlers","instrumented","addHandler","triggerHandlers","handlerData","objectToString","isErrorEvent","isString","isPlainObject","isElement","WINDOW","merge","withScope","spanWithMaybeDsc","INTEGRATION_NAME","_shouldDropEvent","parseUrl","getFullURL","errorEvent","objectException","po","globalObject","init","init$1","version","Button_module_default","isHTMLElement","getComputedStyle","clamp","isInput","isHidden","getPlatform","isSafari","isMac","FOCUSABLE_ATTRIBUTE","index","useLayoutEffect","SafeReact","React","useLatestRef","computePosition","arrow","flip","hide","offset","shift","limitShift","size","platform","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","useFloating","useMergeRefs","useId","getDocument$1","contains$1","usePortalContext","getNodeChildren$1","getTarget$1","mergeProps","ErrorIcon","InfoIcon","CheckCircleIcon","CloseIcon","Avatar","createContextScope","composeContextScopes","setRef","composeRefs","useComposedRefs","createSlot","isLazyComponent","use","isSlottable","getElementRef","Slot","SLOTTABLE_IDENTIFIER","REACT_LAZY_TYPE","isPromiseLike","Primitive","dispatchDiscreteCustomEvent","createCollection","DirectionContext","useDirection","useCallbackRef","useEscapeKeydown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","usePointerDownOutside","useFocusOutside","BRANCH_NAME","DismissableLayerBranch","dispatchUpdate","handleAndDispatchCustomEvent","useFocusGuards","createFocusGuard","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","removeLinks","getTabbableCandidates","getTabbableEdges","focusFirst","findVisible","isSelectableInput","focus","focusScopesStack","createFocusScopesStack","arrayRemove","useLayoutEffect2","useReactId","NAME","Arrow","Root","useSize","ANCHOR_NAME","CONTENT_NAME","floatingUIarrow","ARROW_NAME","ArrowPrimitive.Root","Root2","Content","PORTAL_NAME","Portal","useStateMachine","Presence","usePresence","getAnimationName","useInsertionEffect","useControllableState","useUncontrolledState","isFunction","GROUP_NAME","Collection","useCollection","createCollectionScope","ITEM_NAME","wrapArray","__rest","__awaiter","__values","__await","__asyncGenerator","__asyncDelegator","__asyncValues","nothing","parse","options","SideCar","Menu","PopperPrimitive.Root","PopperPrimitive.Anchor","PortalProvider","PortalPrimitive","RemoveScroll","RovingFocusGroup.Root","PopperPrimitive.Content","LABEL_NAME","MenuItem","RovingFocusGroup.Item","CHECKBOX_ITEM_NAME","RADIO_GROUP_NAME","RADIO_ITEM_NAME","SEPARATOR_NAME","PopperPrimitive.Arrow","SUB_NAME","SUB_TRIGGER_NAME","SUB_CONTENT_NAME","Content2","Label","Separator","useMenuScope","ContextMenu","MenuPrimitive.Root","TRIGGER_NAME","Fragment","MenuPrimitive.Anchor","MenuPrimitive.Portal","MenuPrimitive.Content","MenuPrimitive.Group","MenuPrimitive.Label","MenuPrimitive.Item","MenuPrimitive.CheckboxItem","MenuPrimitive.RadioGroup","MenuPrimitive.RadioItem","INDICATOR_NAME","MenuPrimitive.ItemIndicator","MenuPrimitive.Separator","MenuPrimitive.Arrow","MenuPrimitive.Sub","MenuPrimitive.SubTrigger","MenuPrimitive.SubContent","Trigger","Portal2","createSlotClone","createContext","Overlay","useEffect","setter","DialogPrimitive.Root","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Portal","DialogPrimitive.Trigger","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","Children","Link_module_default","ChevronRightIcon","LabelPrimitive","Field","Message","SpinnerIcon","ErrorMessage","CheckCircleSolidIcon","Root$1","Check","RadixSeparator.Root","defer","copy","get","t","n","e","r","i","s","a","c","isObject","unescape","getDefaults","isValidElement","HTML","Trans","keyFromSelector","TransWithoutContext","ForwardRef","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","symbolTag","isArray","INFINITY","symbolProto","identity","funcTag","funcToString","funcProto","getValue","WeakMap","constant","MAX_SAFE_INTEGER","nativeMax","isArrayLike","argsTag","propertyIsEnumerable","freeExports","freeModule","Buffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","HASH_UNDEFINED","Map","FUNC_ERROR_TEXT","DataView","Promise","Set","Uint8Array","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","getTag","debounce","throttle","o","l","u","h","d","v","p","f","_","g","m","b","y","w","x","E","S","T","k","R","P","O","I","C","A","F","M","D","U","L","N","j","z","B","H","q","V","W","G","Y","J","K","X","Q","Z","tt","et","it","rt","st","nt","ot","at","lt","ut","ht","dt","vt","ct","pt","ft","_t","gt","mt","bt","yt","wt","xt","Et","St","$t","Tt","kt","Rt","Pt","Ot","It","Ct","At","Ft","Mt","Dt","Ut","Lt","Nt","jt","zt","Bt","Ht","qt","Vt","Wt","Gt","Yt","Jt","Kt","Xt","Qt","Zt","te","ee","ie","re","se","ne","oe","ae","le","ue","he","de","ve","ce","pe","fe","_e","ge","me","be","ye","we","xe","Ee","Se","$e","Te","ke","Re","Pe","Oe","Ie","Ce","Ae","Fe","De","Me","Ue","Le","Ne","je","ze","Be","He","qe","Ve","We","Ge","Ye","Je","Ke","Xe","Qe","Ze","ti","ei","ii","ri","si","ni","oi","ai","li","ui","hi","di","vi","ci","pi","fi","_i","gi","mi","bi","yi","wi","xi","Ei","Si","$i","Ti","ki","Ri","Pi","Oi","Ii","Ci","Ai","Fi","Mi","Di","Ui","Li","Ni","ji","zi","Bi","Hi","qi","Vi","Wi","Gi","Yi","Ji","Ki","Xi","Qi","Zi","tr","er","ir","rr","sr","nr","or","ar","hr","lr","ur","dr","vr","cr","pr","fr","_r","gr","mr","br","yr","wr","xr","Er","Sr","$r","Tr","kr","Rr","Pr","Or","Ir","Cr","Ar","Fr","Mr","Dr","Ur","Lr","Nr","jr","zr","Br","Hr","qr","Vr","Wr","Gr","Yr","Jr","Kr","Xr","Qr","Zr","ts","es","is","os","hs","ds","vs","ps","fs","_s","gs","ms","bs","ws","xs","Es","Ss","$s","Ts","ks","Rs","Ps","Os","Is","Cs","As","Fs","Ms","Ds","Us","Ls","Ns","js","zs","Bs","Hs","qs","Vs","Ws","Gs","Ys","Js","Ks","Xs","Qs","Zs","tn","en","rn","sn","nn","on","an","ln","un","hn","dn","vn","cn","pn","fn","_n","gn","mn","bn","yn","wn","xn","En","Sn","$n","Tn","kn","Rn","Pn","On","In","Cn","An","Fn","Mn","Dn","Un","Ln","Nn","jn","zn","Bn","Hn","qn","Vn","Wn","Gn","Yn","Jn","Kn","Xn","Qn","Zn","to","eo","io","ro","so","no","oo","ao","lo","uo","ho","vo","Oo","co","xo","Eo","fo","_o","go","mo","bo","yo","wo","So","$o","To","ko","Ro","Po","Io","Co","Ao","Fo","Mo","Do","Uo","Lo","No","jo","zo","Bo","Ho","qo","Vo","Wo","Go","Yo","Jo","Ko","Xo","Qo","Zo","ta","ea","ia","ra","sa","na","oa","aa","la","ua","ha","da","va","ca","pa","fa","_a","ga","ma","ba","ya","wa","xa","Ea","Sa","$a","Ta","ka","Ra","Pa","Oa","Ia","Ca","Aa","Da","Ua","La","config","Symbol_observable","Symbol_iterator","iterator","getKeys","asyncScheduler","_toPropertyKey","_toPrimitive","LoggerNames","livekitLogger","livekitLoggers","getLogger","Track","separator","_el","ConnectionState","_presets","sc","chunk","log$1","log","startWith2","RoomEvent2","map2","Observable2","startWith3","ParticipantEvent2","map3","Track6","RoomEvent3","useForceUpdate","Slider","rs","clientGetLogger","$","update","advance","call","Globals$1","defaults","easings$1","nextId","Controller","createInterpolator$1","Globals","unstable_batchedUpdates","sharedConfig","module","localStorage","sessionStorage"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,781,782,783,789,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,905,906,907,915,918,919,920,921,922,923,926,927,952,966,967,968,969,970,971,990,991,992,993,994,995,1006,1007,1008,1047,1048,1049,1050,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1159,1160,1161],"sources":["../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../node_modules/.pnpm/unhomoglyph@1.0.6/node_modules/unhomoglyph/index.js","../../node_modules/.pnpm/is-network-error@1.3.1/node_modules/is-network-error/index.js","../../node_modules/.pnpm/p-retry@8.0.0/node_modules/p-retry/index.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/NamespacedValue.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/location.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/read_receipts.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/utils.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto/store/base.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto/store/memory-crypto-store.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/toArray.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/content-repo.js","../../node_modules/.pnpm/loglevel@1.9.2/node_modules/loglevel/lib/loglevel.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/logger.js","../../node_modules/.pnpm/events@3.3.0/node_modules/events/events.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/typed-event-emitter.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/event.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/membership.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/room-member.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/NamespacedMap.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/InvalidEventError.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/ExtensibleEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/types.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/NamespacedValue.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/message_types.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/utility/events.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/MessageEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/NoticeEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/EmoteEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/interpreters/legacy/MRoomMessage.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/interpreters/modern/MMessage.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/poll_types.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/PollStartEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/relationship_types.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/PollResponseEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/events/PollEndEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/interpreters/modern/MPoll.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/ExtensibleEvents.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/IPartialEvent.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/utility/MessageMatchers.js","../../node_modules/.pnpm/matrix-events-sdk@0.0.1/node_modules/matrix-events-sdk/lib/index.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/user.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/event-timeline.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/relations.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/relations-container.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/event-timeline-set.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/event-status.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/room-summary.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/ReEmitter.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/sync.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/filter-component.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/filter.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/extensible_events_v1/utilities.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/extensible_events.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/topic.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/content-helpers.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/beacon.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/read-receipt.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/polls.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/poll.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/room-receipts.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/compare-event-ordering.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/capabilityPoller.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/method.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/errors.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/interface.js","../../node_modules/.pnpm/content-type@2.0.0/node_modules/content-type/dist/index.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/utils.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/refresh.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/fetch.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/prefix.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/realtime-callbacks.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/http-api/index.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/serverCapabilities.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/room-sticky-events.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/retention.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/room-retention.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/room.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/feature.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/sync.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/store/stub.js","../../node_modules/.pnpm/sdp-transform@3.0.0/node_modules/sdp-transform/lib/grammar.js","../../node_modules/.pnpm/sdp-transform@3.0.0/node_modules/sdp-transform/lib/parser.js","../../node_modules/.pnpm/sdp-transform@3.0.0/node_modules/sdp-transform/lib/writer.js","../../node_modules/.pnpm/sdp-transform@3.0.0/node_modules/sdp-transform/lib/index.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/base64.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/randomstring.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/callEventTypes.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/audioContext.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/callFeed.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/callEventHandler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/groupCallEventHandler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/connectionStats.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/connectionStatsBuilder.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/transportStatsBuilder.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/media/mediaSsrcHandler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/media/mediaTrackHandler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/media/mediaTrackStats.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/media/mediaTrackStatsHandler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/valueFormatter.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/trackStatsBuilder.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/connectionStatsReportBuilder.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/callFeedStatsReporter.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/callStatsReportGatherer.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/statsReport.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/statsReportEmitter.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/summaryStatsReportGatherer.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/stats/groupCallStats.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/groupCall.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/call.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/PushRules.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/pushprocessor.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/version-support.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/autodiscovery.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/service-types.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/event-context.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/search-result.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/requests.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/partials.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/event-mapper.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/MSC3089Branch.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/MSC3089TreeSpace.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/search.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/webrtc/mediaHandler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/sliding-sync.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/sliding-sync-sdk.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/beacon.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/scheduler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/ToDeviceMessageQueue.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/invites-ignorer-types.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/invites-ignorer.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/rust-crypto/constants.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto-api/verification.js","../../node_modules/.pnpm/base-x@5.0.1/node_modules/base-x/src/esm/index.js","../../node_modules/.pnpm/bs58@6.0.0/node_modules/bs58/src/esm/index.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto-api/recovery-key.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto-api/key-passphrase.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto-api/CryptoEvent.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto-api/index.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/utils/internal/deriveKeys.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/utils/encryptAESSecretStorageItem.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/utils/decryptAESSecretStorageItem.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/secret-storage.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/EncryptionManager.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/utils.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/membershipData/common.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/membershipData/session.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/digest.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/membershipData/rtc.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/CallMembership.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/types.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/MembershipManagerActionScheduler.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/errors.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/IMembershipManager.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/LivekitTransport.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/MembershipManager.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/IKeyTransport.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/RTCEncryptionManager.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/ToDeviceKeyTransport.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/MatrixRTCSession.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrixrtc/MatrixRTCSessionManager.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/thread-utils.js","../../node_modules/.pnpm/jwt-decode@4.0.0/node_modules/jwt-decode/build/esm/index.js","../../node_modules/.pnpm/oidc-client-ts@3.5.0/node_modules/oidc-client-ts/dist/esm/oidc-client-ts.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/oidc/error.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/oidc/validate.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/oidc/register.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/oidc/authorize.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/oidc/discovery.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/oidc/tokenRefresher.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/retentionPolicy.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/client.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/thread.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/common-crypto/CryptoBackend.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/event.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/utils/roomVersion.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/room-state.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/store/memory.js","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/WidgetApiDirection.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/ApiVersion.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/transport/PostmessageTransport.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/WidgetApiAction.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/GetOpenIDAction.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/WidgetType.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/ModalWidgetActions.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/models/WidgetEventCapability.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/Symbols.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/UpdateDelayedEventAction.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/WidgetApi.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/Capabilities.ts","../../node_modules/.pnpm/matrix-widget-api@1.17.0/node_modules/matrix-widget-api/src/interfaces/IWidgetApiErrorResponse.ts","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/embedded.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/receipt-accumulator.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/sync-accumulator.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/device.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/timeline-window.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/interactive-auth.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/indexeddb-helpers.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/store/indexeddb-local-backend.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/store/indexeddb-remote-backend.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/store/indexeddb.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto/store/localStorage-crypto-store.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto/store/indexeddb-crypto-store-backend.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/crypto/store/indexeddb-crypto-store.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/threepids.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/@types/auth.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/profile-keys.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/models/related-relations.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/store/local-storage-events-emitter.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/matrix.js","../../node_modules/.pnpm/matrix-js-sdk@https+++codeload.github.com+matrix-org+matrix-js-sdk+tar.gz+8c95727b6278fe7942c20d0b9485f984dd0694b7/node_modules/matrix-js-sdk/lib/browser-index.js","../../node_modules/.pnpm/vite-plugin-node-polyfills@0.28.0_rollup@4.60.1_vite@8.0.16_@types+node@24.12.4_esbuild_5d192dd4fe211375450c59ed67754914/node_modules/vite-plugin-node-polyfills/shims/process/dist/index.js","../../node_modules/.pnpm/react@19.2.6/node_modules/react/cjs/react.production.js","../../node_modules/.pnpm/react@19.2.6/node_modules/react/index.js","../../node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.production.js","../../node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/index.js","../../node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/cjs/react-dom.production.js","../../node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/index.js","../../node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/cjs/react-dom-client.production.js","../../node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/client.js","../../node_modules/.pnpm/react-router@7.15.1_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/react-router/dist/development/chunk-4N6VE7H7.mjs","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/debug-build.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/version.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/worldwide.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/debug-build.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/logger.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/stacktrace.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/instrument/handlers.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/instrument/globalError.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/instrument/globalUnhandledRejection.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/carrier.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/is.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/browser.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/string.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/object.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/time.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/misc.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/syncpromise.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/session.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/propagationContext.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/merge.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/scope.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/defaultScopes.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/asyncContext/index.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/currentScopes.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/metrics/metric-summary.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/semanticAttributes.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/baggage.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/tracing.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/errors.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/utils.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/constants.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/logSpans.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/sampling.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/dsn.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/memo.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/normalize.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/envelope.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/envelope.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/measurement.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/trace.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/tracing/idleSpan.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/eventProcessors.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/debug-ids.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/exports.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/api.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/integration.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/clientreport.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/error.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/baseclient.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/sdk.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/promisebuffer.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/ratelimit.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/transports/base.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils/traceData.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/breadcrumbs.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/integrations/functiontostring.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/integrations/inboundfilters.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/aggregate-errors.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/url.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/instrument/console.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/severity.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/integrations/dedupe.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/fetch.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/breadcrumb-log-level.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/supports.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/instrument/fetch.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/env.js","../../node_modules/.pnpm/@sentry+core@8.55.2/node_modules/@sentry/core/build/esm/utils-hoist/vendor/supportsHistory.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/helpers.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/debug-build.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/userfeedback.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/client.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/types.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/interactions.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenIdle.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js","../../node_modules/.pnpm/@sentry-internal+browser-utils@8.55.2/node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/transports/fetch.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/stack-parsers.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/sdk.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/tracing/request.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js","../../node_modules/.pnpm/@sentry+browser@8.55.2/node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js","../../node_modules/.pnpm/@sentry+react@8.55.2_react@19.2.6/node_modules/@sentry/react/build/esm/sdk.js","../../node_modules/.pnpm/@sentry+react@8.55.2_react@19.2.6/node_modules/@sentry/react/build/esm/error.js","../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.production.min.js","../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js","../../node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../node_modules/.pnpm/@sentry+react@8.55.2_react@19.2.6/node_modules/@sentry/react/build/esm/debug-build.js","../../node_modules/.pnpm/@sentry+react@8.55.2_react@19.2.6/node_modules/@sentry/react/build/esm/errorboundary.js","../../node_modules/.pnpm/@sentry+react@8.55.2_react@19.2.6/node_modules/@sentry/react/build/esm/reactrouterv6-compat-utils.js","../../node_modules/.pnpm/@sentry+react@8.55.2_react@19.2.6/node_modules/@sentry/react/build/esm/reactrouterv7.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Typography/Typography.module.js","../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../../node_modules/.pnpm/react@19.2.6/node_modules/react/cjs/react-jsx-runtime.production.js","../../node_modules/.pnpm/react@19.2.6/node_modules/react/jsx-runtime.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Typography/Typography.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Typography/Text.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Button/Button.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Button/UnstyledButton.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Button/Button.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Icon/IndicatorIcon/IndicatorIcon.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Icon/IndicatorIcon/IndicatorIcon.js","../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../node_modules/.pnpm/tabbable@6.5.0/node_modules/tabbable/dist/index.esm.js","../../node_modules/.pnpm/@floating-ui+react@0.27.19_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs","../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../node_modules/.pnpm/@floating-ui+react-dom@2.1.8_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../node_modules/.pnpm/@floating-ui+react@0.27.19_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@floating-ui/react/dist/floating-ui.react.mjs","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Tooltip/TooltipProvider.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Tooltip/useTooltip.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Tooltip/TooltipContext.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Tooltip/Tooltip.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Tooltip/Tooltip.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Button/IconButton/IconButton.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Button/IconButton/IconButton.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Alert/Alert.module.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/check-circle.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/error-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/info.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/close.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Alert/Alert.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/utils/string.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Avatar/useIdColorHash.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Avatar/Avatar.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Avatar/Avatar.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Switch/Switch.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Switch/Switch.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/MenuTitle.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/MenuTitle.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/FloatingMenu.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/FloatingMenu.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/DrawerMenu.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/MenuContext.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/utils/platform.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/DrawerMenu.js","../../node_modules/.pnpm/@radix-ui+primitive@1.1.4/node_modules/@radix-ui/primitive/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-context@1.1.4_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-context/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.3_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-slot@1.3.0_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.6_@types+react-dom@19.2.3_@types+react@19.2.15__@types+re_c587a53080b89f5829b8bf6cb89b927a/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-collection@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.15__@types+_108bba17d99f565e751807503a4cdeb5/node_modules/@radix-ui/react-collection/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-direction@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-direction/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.15___92768fd0b1f7b31baabf4b305678451f/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.4_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.15__@types_3af368708809fb0080f4269afbdc013b/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-id@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-id/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react_485d81bd5ee4e2fcf4d34cc47490079c/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-popper@1.3.1_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react_f967e3abf1990b7aaf8529f7a0882046/node_modules/@radix-ui/react-popper/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-portal@1.1.12_@types+react-dom@19.2.3_@types+react@19.2.15__@types+reac_63cae7e743734bb20f07dc5df8db5457/node_modules/@radix-ui/react-portal/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-presence@1.1.6_@types+react-dom@19.2.3_@types+react@19.2.15__@types+rea_40b556cd56efb44c5867d946559e1d0f/node_modules/@radix-ui/react-presence/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.3_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.15__@type_24b925a806ee338b3380139787af7285/node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js","../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.15_react@19.2.6/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.15_react@19.2.6/node_modules/use-callback-ref/dist/es2015/useRef.js","../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.15_react@19.2.6/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.15_react@19.2.6/node_modules/use-sidecar/dist/es2015/medium.js","../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.15_react@19.2.6/node_modules/use-sidecar/dist/es2015/exports.js","../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/medium.js","../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/UI.js","../../node_modules/.pnpm/get-nonce@1.0.1/node_modules/get-nonce/dist/es2015/index.js","../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.15_react@19.2.6/node_modules/react-style-singleton/dist/es2015/singleton.js","../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.15_react@19.2.6/node_modules/react-style-singleton/dist/es2015/hook.js","../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.15_react@19.2.6/node_modules/react-style-singleton/dist/es2015/component.js","../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../node_modules/.pnpm/react-remove-scroll@2.7.2_@types+react@19.2.15_react@19.2.6/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../node_modules/.pnpm/@radix-ui+react-menu@2.1.18_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react@_8a987cbc1211ab4a7ea6ed29c5b0194f/node_modules/@radix-ui/react-menu/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-context-menu@2.3.1_@types+react-dom@19.2.3_@types+react@19.2.15__@types_a4329841c19f14cc4ba3b7db842c4ade/node_modules/@radix-ui/react-context-menu/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+primitive@1.1.3/node_modules/@radix-ui/primitive/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-context@1.1.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-context/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.1_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-id@1.1.1_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-id/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-slot@1.2.3_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.3_@types+react-dom@19.2.3_@types+react@19.2.15__@types+re_ee93fa745c5d0039256f0c49f5cf0a6f/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.1_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.1_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.15___5e79ea011ae49559e5d045c6c417affe/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.15__@types+_940460526384d303804591e6dc3535ad/node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-portal@1.1.9_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react_2058f8797ee4f20a020cf8a07e5c7824/node_modules/@radix-ui/react-portal/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-presence@1.1.5_@types+react-dom@19.2.3_@types+react@19.2.15__@types+rea_e27b0e39c315910363295d49e8761e42/node_modules/@radix-ui/react-presence/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.3_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.15__@types+reac_0aba74e1cd15e5a1b79254a94736c634/node_modules/@radix-ui/react-dialog/dist/index.mjs","../../node_modules/.pnpm/vaul@1.1.2_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react@19.2.15_react-dom_233448949f70b1fc5c438c8c9a472038/node_modules/vaul/dist/index.mjs","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/ContextMenu.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Glass/Glass.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Glass/Glass.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Typography/Heading.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Icon/BigIcon/BigIcon.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Icon/BigIcon/BigIcon.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Link/Link.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Link/Link.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Nav/Nav.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Nav/NavBar.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Nav/NavItem.js","../../node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.18_@types+react-dom@19.2.3_@types+react@19.2.15__@typ_62ce94472354a08e0ce601da3ded2493/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/Menu.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/MenuItem.module.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/chevron-right.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/MenuItem.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/Text/Text.module.js","../../node_modules/.pnpm/@radix-ui+react-label@2.1.10_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react_75e84421a5cb51c4e50b95470b14d30b/node_modules/@radix-ui/react-label/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-form@0.1.10_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react@_3cd3484c0b3404235679de3c2ed5cb31/node_modules/@radix-ui/react-form/dist/index.mjs","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/Text/Text.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/visibility-on.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/check.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/Radio/Radio.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/Radio/Radio.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/Toggle/Toggle.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/Toggle/Toggle.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/EditInPlace/EditInPlace.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/form.module.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Label.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/InlineSpinner/InlineSpinner.module.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/spinner.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/InlineSpinner/InlineSpinner.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/check-circle-solid.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Message.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Root.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Field.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/Controls/EditInPlace/EditInPlace.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Form/InlineField.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Separator/Separator.module.js","../../node_modules/.pnpm/@radix-ui+react-separator@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.15__@types+r_b683950a2633e855c634bc694e282265/node_modules/@radix-ui/react-separator/dist/index.mjs","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Separator/Separator.js","../../node_modules/.pnpm/@vector-im+compound-web@9.5.0_@fontsource+inconsolata@5.2.8_@fontsource+inter@5.2.8_@ty_ea01c941c2ae351a7016e41bfdbfdfdb/node_modules/@vector-im/compound-web/dist/components/Menu/ToggleMenuItem.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/chevron-down.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/chevron-left.js","../../node_modules/.pnpm/i18next@25.10.10_typescript@5.9.3/node_modules/i18next/dist/esm/i18next.js","../../node_modules/.pnpm/void-elements@3.1.0/node_modules/void-elements/index.js","../../node_modules/.pnpm/html-parse-stringify@3.0.1/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/utils.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/unescape.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/defaults.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/i18nInstance.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/TransWithoutContext.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/initReactI18next.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/context.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/Trans.js","../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.6/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.6/node_modules/use-sync-external-store/shim/index.js","../../node_modules/.pnpm/react-i18next@16.6.6_i18next@25.10.10_typescript@5.9.3__react-dom@19.2.6_react@19.2.6__react@19.2.6_typescript@5.9.3/node_modules/react-i18next/dist/es/useTranslation.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/admin.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/arrow-left.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/chevron-up.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/collapse.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/delete.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/edit.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/end-call.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/expand.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/grid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/host.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/link.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/lock-off.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/lock-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/mic-off-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/mic-off.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/mic-on-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/mic-on.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/offline.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/overflow-horizontal.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/overflow-vertical.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/pop-out.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/raised-hand-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/reaction-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/share-screen-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/share.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/spotlight.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/switch-camera-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/unknown-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/user-add.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/user-profile.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/video-call-off-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/video-call-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/video-call.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/voice-call-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/voice-call.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/volume-off-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/volume-off.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/volume-on-solid.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/volume-on.js","../../node_modules/.pnpm/@vector-im+compound-design-tokens@10.2.2_@types+react@19.2.15_react@19.2.6/node_modules/@vector-im/compound-design-tokens/assets/web/icons/web-browser.js","../../src/icons/Logo.svg?react","../../src/LazyEventEmitter.ts","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_root.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_trimmedEndIndex.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTrim.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObject.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toNumber.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/eq.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRest.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isLength.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIterateeCall.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createAssigner.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keys.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Map.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/get.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Set.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMatch.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isStrictComparable.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMatchData.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_matchesStrictComparable.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatches.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatchesProperty.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseProperty.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePropertyDeep.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/property.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIteratee.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/now.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/debounce.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignMergeValue.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLikeObject.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_safeGet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toPlainObject.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMergeDeep.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMerge.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/merge.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSet.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePickBy.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/pickBy.js","../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/throttle.js","../../src/config/ConfigOptions.ts","../../src/utils/fetch.ts","../../src/config/Config.ts","../../src/e2ee/e2eeType.ts","../../src/Platform.ts","../../src/utils/redact.ts","../../src/UrlParams.ts","../../src/sound/reactions/cat.ogg?url","../../src/sound/reactions/cat.mp3?url","../../src/sound/reactions/clap.ogg?url","../../src/sound/reactions/clap.mp3?url","../../src/sound/reactions/crickets.ogg?url","../../src/sound/reactions/crickets.mp3?url","../../src/sound/reactions/dog.ogg?url","../../src/sound/reactions/dog.mp3?url","../../src/sound/reactions/generic.ogg?url","../../src/sound/reactions/generic.mp3?url","../../src/sound/reactions/lightbulb.ogg?url","../../src/sound/reactions/lightbulb.mp3?url","../../src/sound/reactions/party.ogg?url","../../src/sound/reactions/party.mp3?url","../../src/sound/reactions/deer.ogg?url","../../src/sound/reactions/deer.mp3?url","../../src/sound/reactions/rock.ogg?url","../../src/sound/reactions/rock.mp3?url","../../src/sound/reactions/wave.ogg?url","../../src/sound/reactions/wave.mp3?url","../../src/sound/reactions/baduntss.ogg?url","../../src/sound/reactions/baduntss.mp3?url","../../src/reactions/index.ts","../../src/widget.ts","../../src/Avatar.tsx","../../src/room/EncryptionLock.tsx","../../src/useMediaQuery.ts","../../src/DisconnectedBanner.tsx","../../src/Header.tsx","../../src/settings/rageshake.ts","../../src/settings/submit-rageshake.ts","../../src/settings/RageshakeButton.tsx","../../src/button/Button.tsx","../../src/button/Link.tsx","../../src/button/LinkButton.tsx","../../src/useEvents.ts","../../src/useMatrixRTCSessionMemberships.ts","../../src/useBehavior.ts","../../src/reactions/useReactionsSender.tsx","../../node_modules/.pnpm/@radix-ui+react-slot@1.2.4_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.15__@types+re_3dd09aa148d7cdb7a15dc8a5d6e8bba3/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.4_@types+react-dom@19.2.3_@types+react@19.2.15__@ty_1a40e9b2bc6a400e47f2ec265edfde93/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../src/Modal.tsx","../../src/button/ReactionToggleButton.tsx","../../src/ErrorView.tsx","../../src/RichError.tsx","../../src/FullScreenView.tsx","../../node_modules/.pnpm/posthog-js@1.374.0/node_modules/posthog-js/dist/module.js","../../src/analytics/PosthogEvents.ts","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscription.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/config.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscriber.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/pipe.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/lift.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subject.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Scheduler.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/empty.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/args.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/from.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/of.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/firstValueFrom.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isDate.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/map.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createObject.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/concatAll.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/concat.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/defer.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/timer.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/interval.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/merge.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/never.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/filter.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/race.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/audit.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/catchError.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/scanInternals.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/defaultIfEmpty.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/take.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/ignoreElements.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mapTo.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/delay.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/throwIfEmpty.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/endWith.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/finalize.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/first.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/pairwise.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/scan.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/share.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/skipWhile.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/startWith.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/switchMap.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/switchAll.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/switchScan.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/takeWhile.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/tap.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/throttle.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/throttleTime.js","../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/withLatestFrom.js","../../src/settings/settings.ts","../../src/analytics/PosthogAnalytics.ts","../../src/ClientContext.tsx","../../src/profile/useProfile.ts","../../src/tabs/Tabs.tsx","../../src/icons/Check.svg?react","../../src/TranslatedError.ts","../../src/input/Input.tsx","../../src/input/AvatarInputField.tsx","../../src/settings/ProfileSettingsTab.tsx","../../src/analytics/AnalyticsNotice.tsx","../../src/settings/FeedbackSettingsTab.tsx","../../node_modules/.pnpm/livekit-client@2.19.2_@types+dom-mediacapture-record@1.0.22/node_modules/livekit-client/dist/livekit-client.esm.mjs","../../node_modules/.pnpm/loglevel@1.9.1/node_modules/loglevel/lib/loglevel.js","../../node_modules/.pnpm/@livekit+components-core@0.12.13_livekit-client@2.19.2_@types+dom-mediacapture-record@1.0.22__tslib@2.8.1/node_modules/@livekit/components-core/dist/index.mjs","../../src/controls.ts","../../src/state/ObservableScope.ts","../../src/utils/observable.ts","../../src/state/Behavior.ts","../../src/state/AndroidControlledAudioOutput.ts","../../src/state/IOSControlledAudioOutput.ts","../../src/state/MediaDevices.ts","../../node_modules/.pnpm/observable-hooks@4.2.4_react-dom@19.2.6_react@19.2.6__react@19.2.6_rxjs@7.8.2/node_modules/observable-hooks/dist/index.mjs","../../src/MediaDevicesContext.ts","../../src/settings/PreferencesSettingsTab.tsx","../../node_modules/.pnpm/@radix-ui+number@1.1.1/node_modules/@radix-ui/number/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-direction/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-previous@1.1.1_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.1_@types+react@19.2.15_react@19.2.6/node_modules/@radix-ui/react-use-size/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.15__@types+r_f60ec5f07742f43c671f805acca04ca7/node_modules/@radix-ui/react-collection/dist/index.mjs","../../node_modules/.pnpm/@radix-ui+react-slider@1.3.6_@types+react-dom@19.2.3_@types+react@19.2.15__@types+react_ee8e6100edd16d68908798ee4bb8fc5e/node_modules/@radix-ui/react-slider/dist/index.mjs","../../src/Slider.tsx","../../src/settings/DeviceSelection.tsx","../../node_modules/.pnpm/@mediapipe+tasks-vision@0.10.35/node_modules/@mediapipe/tasks-vision/vision_bundle.mjs","../../node_modules/.pnpm/@livekit+track-processors@0.7.2_@types+dom-mediacapture-transform@0.1.11_livekit-client_eaf0459d69d3d2f103bbb38eb79c80b0/node_modules/@livekit/track-processors/dist/index.mjs","../../src/mediapipe/imageSegmenter/selfie_segmenter.tflite?url","../../src/livekit/BlurBackgroundTransformer.ts","../../src/livekit/TrackProcessorContext.tsx","../../src/utils/i18n.ts","../../src/utils/errors.ts","../../src/useLocalStorage.ts","../../src/e2ee/sharedKeyManagement.ts","../../src/utils/matrix.ts","../../src/state/CallViewModel/remoteMembers/MatrixLivekitMembers.ts","../../src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.ts","../../src/state/CallViewModel/localMember/LocalTransport.ts","../../src/livekit/openIDSFU.ts","../../src/settings/DeveloperSettingsTab.tsx","../../src/settings/SettingsModal.tsx","../../src/icons/User.svg?react","../../src/icons/Settings.svg?react","../../src/icons/Login.svg?react","../../src/icons/Logout.svg?react","../../src/UserMenu.tsx","../../src/UserMenuContainer.tsx","../../src/auth/useInteractiveRegistration.ts","../../src/home/JoinExistingCallModal.tsx","../../src/auth/useRecaptcha.ts","../../src/form/Form.tsx","../../node_modules/.pnpm/unique-names-generator@4.7.1/node_modules/unique-names-generator/dist/index.m.js","../../src/auth/generateRandomName.ts","../../src/home/UnauthenticatedView.tsx","../../src/home/useGroupCallRooms.ts","../../src/home/CallList.tsx","../../src/home/RegisteredView.tsx","../../src/usePageTitle.ts","../../src/home/HomePage.tsx","../../src/icons/LogoLarge.svg?react","../../src/auth/useInteractiveLogin.ts","../../src/auth/LoginPage.tsx","../../src/auth/RegisterPage.tsx","../../src/auth/useRegisterPasswordlessUser.ts","../../src/room/RoomAuthView.tsx","../../node_modules/.pnpm/@livekit+components-react@2.9.21_livekit-client@2.19.2_@types+dom-mediacapture-record@1_acc0d32fd51ebb6ac8dfb1f538b21814/node_modules/@livekit/components-react/dist/contexts-DzwYztG5.mjs","../../node_modules/.pnpm/@livekit+components-react@2.9.21_livekit-client@2.19.2_@types+dom-mediacapture-record@1_acc0d32fd51ebb6ac8dfb1f538b21814/node_modules/@livekit/components-react/dist/room-Q0GUQkyk.mjs","../../node_modules/.pnpm/@livekit+components-react@2.9.21_livekit-client@2.19.2_@types+dom-mediacapture-record@1_acc0d32fd51ebb6ac8dfb1f538b21814/node_modules/@livekit/components-react/dist/hooks-CA4A5LBF.mjs","../../node_modules/.pnpm/@livekit+components-react@2.9.21_livekit-client@2.19.2_@types+dom-mediacapture-record@1_acc0d32fd51ebb6ac8dfb1f538b21814/node_modules/@livekit/components-react/dist/components-DqcPwJ_9.mjs","../../node_modules/.pnpm/@livekit+components-react@2.9.21_livekit-client@2.19.2_@types+dom-mediacapture-record@1_acc0d32fd51ebb6ac8dfb1f538b21814/node_modules/@livekit/components-react/dist/prefabs.mjs","../../node_modules/.pnpm/react-use-measure@2.1.7_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/react-use-measure/dist/index.js","../../src/tile/TileAvatar.tsx","../../src/room/VideoPreview.tsx","../../src/button/InviteButton.tsx","../../src/useInitial.ts","../../src/icons/LogoMark.svg?react","../../src/icons/LogoType.svg?react","../../src/components/MediaMuteAndSwitchButton.tsx","../../src/components/CallFooter.tsx","../../src/useCallViewKeyboardShortcuts.ts","../../src/state/ViewModel.ts","../../src/components/CallFooterViewModel.tsx","../../src/AppBar.tsx","../../src/room/LobbyView.tsx","../../src/icons/StarSelected.svg?react","../../src/icons/StarUnselected.svg?react","../../src/input/StarRatingInput.tsx","../../src/room/CallEndedView.tsx","../../src/utils/media.ts","../../node_modules/.pnpm/@react-spring+shared@10.1.0_react@19.2.6/node_modules/@react-spring/shared/dist/chunk.mjs","../../node_modules/.pnpm/@react-spring+rafz@10.1.0/node_modules/@react-spring/rafz/dist/react-spring_rafz.modern.mjs","../../node_modules/.pnpm/@react-spring+shared@10.1.0_react@19.2.6/node_modules/@react-spring/shared/dist/react-spring_shared.modern.mjs","../../node_modules/.pnpm/@react-spring+animated@10.1.0_react@19.2.6/node_modules/@react-spring/animated/dist/react-spring_animated.modern.mjs","../../node_modules/.pnpm/@react-spring+core@10.1.0_react@19.2.6/node_modules/@react-spring/core/dist/react-spring_core.modern.mjs","../../node_modules/.pnpm/@react-spring+web@10.1.0_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@react-spring/web/dist/react-spring_web.modern.mjs","../../src/reactions/ReactionIndicator.tsx","../../src/reactions/RaisedHandIndicator.tsx","../../src/RTCConnectionStats.tsx","../../src/tile/MediaView.tsx","../../src/useLatest.ts","../../src/useMergedRefs.ts","../../src/tile/RingingStatus.tsx","../../src/tile/GridTile.tsx","../../src/room/RageshakeRequestModal.tsx","../../src/useWakeLock.ts","../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/stringify.js","../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/rng.js","../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist/v4.js","../../src/state/TileViewModel.ts","../../src/utils/iter.ts","../../src/state/TileStore.ts","../../src/state/GridLikeLayout.ts","../../src/state/SpotlightExpandedLayout.ts","../../src/state/OneOnOneLandscapeLayout.ts","../../src/state/OneOnOnePortraitLayout.ts","../../src/state/PipLayout.ts","../../src/utils/array.ts","../../src/e2ee/matrixKeyProvider.ts","../../src/state/CallViewModel/localMember/HomeserverConnected.ts","../../src/state/CallViewModel/remoteMembers/Connection.ts","../../src/state/CallViewModel/localMember/LocalMember.ts","../../src/state/SessionBehaviors.ts","../../src/livekit/options.ts","../../src/state/CallViewModel/remoteMembers/ConnectionFactory.ts","../../src/state/CallViewModel/remoteMembers/ConnectionManager.ts","../../src/state/CallViewModel/CallNotificationLifecycle.ts","../../src/utils/displayname.ts","../../src/state/CallViewModel/remoteMembers/MatrixMemberMetadata.ts","../../src/state/observeTrackReference.ts","../../src/state/CallViewModel/localMember/Publisher.ts","../../src/state/CallViewModel/LayoutSwitch.ts","../../src/state/media/observeSpeaker.ts","../../src/state/media/MediaViewModel.ts","../../src/state/media/observeRtpStreamStats.ts","../../src/state/media/MemberMediaViewModel.ts","../../src/utils/videoFit.ts","../../src/state/media/UserMediaViewModel.ts","../../src/state/media/LocalUserMediaViewModel.ts","../../src/state/VolumeControls.ts","../../src/state/media/RemoteUserMediaViewModel.ts","../../src/state/media/ScreenShareViewModel.ts","../../src/state/media/LocalScreenShareViewModel.ts","../../src/state/media/RemoteScreenShareViewModel.ts","../../src/state/media/WrappedUserMediaViewModel.ts","../../src/state/media/RingingMediaViewModel.ts","../../src/state/CallViewModel/CallViewModel.ts","../../node_modules/.pnpm/@use-gesture+core@10.3.1/node_modules/@use-gesture/core/dist/maths-0ab39ae9.esm.js","../../node_modules/.pnpm/@use-gesture+core@10.3.1/node_modules/@use-gesture/core/dist/actions-fe213e88.esm.js","../../node_modules/.pnpm/@use-gesture+core@10.3.1/node_modules/@use-gesture/core/dist/use-gesture-core.esm.js","../../node_modules/.pnpm/@use-gesture+react@10.3.1_react@19.2.6/node_modules/@use-gesture/react/dist/use-gesture-react.esm.js","../../src/grid/TileWrapper.tsx","../../src/usePrefersReducedMotion.ts","../../src/grid/Grid.tsx","../../src/icons/FullScreenMaximise.svg?react","../../src/icons/FullScreenMinimise.svg?react","../../src/useReactiveState.ts","../../src/tile/SpotlightTile.tsx","../../src/grid/CallLayout.ts","../../src/grid/GridLayout.tsx","../../src/grid/OneOnOneLandscapeLayout.tsx","../../src/grid/OneOnOnePortraitLayout.tsx","../../src/grid/SpotlightExpandedLayout.tsx","../../src/grid/SpotlightLandscapeLayout.tsx","../../src/grid/SpotlightPortraitLayout.tsx","../../src/useAudioContext.tsx","../../src/soundUtils.ts","../../src/room/ReactionAudioRenderer.tsx","../../src/room/ReactionsOverlay.tsx","../../src/sound/join_call.mp3","../../src/sound/join_call.ogg","../../src/sound/left_call.mp3","../../src/sound/left_call.ogg","../../src/sound/raise_hand.ogg","../../src/sound/raise_hand.mp3","../../src/sound/screen_share_started.ogg","../../src/sound/screen_share_started.mp3","../../src/sound/call_declined.mp3?url","../../src/sound/call_declined.ogg?url","../../src/sound/call_timeout.mp3?url","../../src/sound/call_timeout.ogg?url","../../src/room/CallEventAudioRenderer.tsx","../../src/reactions/ReactionsReader.ts","../../src/livekit/MatrixAudioRenderer.tsx","../../src/state/MuteAllAudioModel.ts","../../src/room/EarpieceOverlay.tsx","../../src/Toast.tsx","../../src/sound/ringtone.mp3?url","../../src/sound/ringtone.ogg?url","../../src/room/RingingAudioRenderer.tsx","../../src/room/InCallView.tsx","../../src/room/useRoomState.ts","../../src/room/useRoomAvatar.ts","../../src/room/useRoomName.ts","../../src/room/useJoinRule.ts","../../node_modules/.pnpm/toggle-selection@1.0.6/node_modules/toggle-selection/index.js","../../node_modules/.pnpm/copy-to-clipboard@3.3.3/node_modules/copy-to-clipboard/index.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js","../../node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js","../../src/QrCode.tsx","../../src/room/InviteModal.tsx","../../src/room/GroupCallErrorBoundary.tsx","../../src/room/GroupCallView.tsx","../../src/room/useLoadGroupCall.ts","../../src/state/MuteStates.ts","../../src/state/initialMuteState.ts","../../src/room/RoomPage.tsx","../../locales/bg/app.json?url","../../locales/cs/app.json?url","../../locales/da/app.json?url","../../locales/de/app.json?url","../../locales/el/app.json?url","../../locales/en/app.json?url","../../locales/es/app.json?url","../../locales/et/app.json?url","../../locales/fa/app.json?url","../../locales/fi/app.json?url","../../locales/fr/app.json?url","../../locales/id/app.json?url","../../locales/it/app.json?url","../../locales/ja/app.json?url","../../locales/lv/app.json?url","../../locales/nl/app.json?url","../../locales/pl/app.json?url","../../locales/ro/app.json?url","../../locales/ru/app.json?url","../../locales/sk/app.json?url","../../locales/sv/app.json?url","../../locales/tr/app.json?url","../../locales/uk/app.json?url","../../locales/vi/app.json?url","../../locales/zh-Hans/app.json?url","../../locales/zh-Hant/app.json?url","../../node_modules/.pnpm/i18next-browser-languagedetector@8.2.1/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","../../node_modules/.pnpm/@formatjs+intl-segmenter@11.7.12/node_modules/@formatjs/intl-segmenter/should-polyfill.js","../../node_modules/.pnpm/@formatjs+intl-durationformat@0.10.13/node_modules/@formatjs/intl-durationformat/should-polyfill.js","../../src/initializer.tsx","../../src/useTheme.ts","../../src/App.tsx","../../src/state/AppViewModel.ts","../../src/main.tsx"],"sourcesContent":["function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nexport { _iterableToArrayLimit as default };","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nexport { _arrayLikeToArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nexport { _unsupportedIterableToArray as default };","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n try {\n var i = n[a](c),\n u = i.value;\n } catch (n) {\n return void e(n);\n }\n i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n return function () {\n var t = this,\n e = arguments;\n return new Promise(function (r, o) {\n var a = n.apply(t, e);\n function _next(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n }\n function _throw(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n }\n _next(void 0);\n });\n };\n}\nexport { _asyncToGenerator as default };","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","'use strict';\n\n\nvar data = require('./data.json');\n\nfunction escapeRegexp(str) {\n return str.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n}\n\nvar REPLACE_RE = RegExp(Object.keys(data).map(escapeRegexp).join('|'), 'g');\n\nfunction replace_fn(match) {\n return data[match];\n}\n\nfunction unhomoglyph(str) {\n return str.replace(REPLACE_RE, replace_fn);\n}\n\nmodule.exports = unhomoglyph;\n","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit)\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Chrome: exact \"Failed to fetch\" or with hostname: \"Failed to fetch (example.com)\"\n\tif (message === 'Failed to fetch' || (message.startsWith('Failed to fetch (') && message.endsWith(')'))) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n","import isNetworkError from 'is-network-error';\n\nfunction validateRetries(retries) {\n\tif (typeof retries === 'number') {\n\t\tif (retries < 0) {\n\t\t\tthrow new TypeError('Expected `retries` to be a non-negative number.');\n\t\t}\n\n\t\tif (Number.isNaN(retries)) {\n\t\t\tthrow new TypeError('Expected `retries` to be a valid number or Infinity, got NaN.');\n\t\t}\n\t} else if (retries !== undefined) {\n\t\tthrow new TypeError('Expected `retries` to be a number or Infinity.');\n\t}\n}\n\nfunction validateNumberOption(name, value, {min = 0, allowInfinity = false} = {}) {\n\tif (value === undefined) {\n\t\treturn;\n\t}\n\n\tif (typeof value !== 'number' || Number.isNaN(value)) {\n\t\tthrow new TypeError(`Expected \\`${name}\\` to be a number${allowInfinity ? ' or Infinity' : ''}.`);\n\t}\n\n\tif (!allowInfinity && !Number.isFinite(value)) {\n\t\tthrow new TypeError(`Expected \\`${name}\\` to be a finite number.`);\n\t}\n\n\tif (value < min) {\n\t\tthrow new TypeError(`Expected \\`${name}\\` to be \\u2265 ${min}.`);\n\t}\n}\n\nfunction validateFunctionOption(name, value) {\n\tif (value === undefined) {\n\t\treturn;\n\t}\n\n\tif (typeof value !== 'function') {\n\t\tthrow new TypeError(`Expected \\`${name}\\` to be a function.`);\n\t}\n}\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nfunction calculateDelay(retriesConsumed, options) {\n\tconst attempt = Math.max(1, retriesConsumed + 1);\n\tconst random = options.randomize ? (Math.random() + 1) : 1;\n\n\tlet timeout = Math.round(random * options.minTimeout * (options.factor ** (attempt - 1)));\n\ttimeout = Math.min(timeout, options.maxTimeout);\n\n\treturn timeout;\n}\n\nfunction calculateRemainingTime(start, max) {\n\tif (!Number.isFinite(max)) {\n\t\treturn max;\n\t}\n\n\treturn max - (performance.now() - start);\n}\n\nasync function delayForRetry(delay, options) {\n\tif (delay <= 0) {\n\t\treturn;\n\t}\n\n\tawait new Promise((resolve, reject) => {\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeoutToken);\n\t\t\toptions.signal?.removeEventListener('abort', onAbort);\n\t\t\treject(options.signal.reason);\n\t\t};\n\n\t\tconst timeoutToken = setTimeout(() => {\n\t\t\toptions.signal?.removeEventListener('abort', onAbort);\n\t\t\tresolve();\n\t\t}, delay);\n\n\t\tif (options.unref) {\n\t\t\ttimeoutToken.unref?.();\n\t\t}\n\n\t\toptions.signal?.addEventListener('abort', onAbort, {once: true});\n\t});\n}\n\nasync function onAttemptFailure({error, attemptNumber, retriesConsumed, startTime, options}) {\n\tconst normalizedError = error instanceof Error\n\t\t? error\n\t\t: new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\n\tif (normalizedError instanceof AbortError) {\n\t\tthrow normalizedError.originalError;\n\t}\n\n\tconst retriesLeft = Number.isFinite(options.retries)\n\t\t? Math.max(0, options.retries - retriesConsumed)\n\t\t: options.retries;\n\n\tconst maxRetryTime = options.maxRetryTime ?? Number.POSITIVE_INFINITY;\n\tconst delayTime = calculateDelay(retriesConsumed, options);\n\tconst remainingTimeBeforeCallbacks = calculateRemainingTime(startTime, maxRetryTime);\n\n\tif (remainingTimeBeforeCallbacks <= 0) {\n\t\tconst context = Object.freeze({\n\t\t\terror: normalizedError,\n\t\t\tattemptNumber,\n\t\t\tretriesLeft,\n\t\t\tretriesConsumed,\n\t\t\tretryDelay: 0,\n\t\t});\n\n\t\tawait options.onFailedAttempt(context);\n\n\t\tthrow normalizedError;\n\t}\n\n\tconst consumeRetryContext = Object.freeze({\n\t\terror: normalizedError,\n\t\tattemptNumber,\n\t\tretriesLeft,\n\t\tretriesConsumed,\n\t\tretryDelay: retriesLeft > 0 ? delayTime : 0,\n\t});\n\n\tconst consumeRetry = await options.shouldConsumeRetry(consumeRetryContext);\n\tconst effectiveDelay = consumeRetry && retriesLeft > 0 ? delayTime : 0;\n\tconst context = Object.freeze({\n\t\terror: normalizedError,\n\t\tattemptNumber,\n\t\tretriesLeft,\n\t\tretriesConsumed,\n\t\tretryDelay: effectiveDelay,\n\t});\n\n\tawait options.onFailedAttempt(context);\n\n\tif (calculateRemainingTime(startTime, maxRetryTime) <= 0) {\n\t\tthrow normalizedError;\n\t}\n\n\tconst remainingTime = calculateRemainingTime(startTime, maxRetryTime);\n\n\tif (remainingTime <= 0 || retriesLeft <= 0) {\n\t\tthrow normalizedError;\n\t}\n\n\tif (normalizedError instanceof TypeError && !isNetworkError(normalizedError)) {\n\t\tthrow normalizedError;\n\t}\n\n\tif (!await options.shouldRetry(context)) {\n\t\tthrow normalizedError;\n\t}\n\n\tconst remainingTimeAfterShouldRetry = calculateRemainingTime(startTime, maxRetryTime);\n\n\tif (remainingTimeAfterShouldRetry <= 0) {\n\t\tthrow normalizedError;\n\t}\n\n\tif (!consumeRetry) {\n\t\toptions.signal?.throwIfAborted();\n\t\treturn false;\n\t}\n\n\tconst finalDelay = Math.min(effectiveDelay, remainingTimeAfterShouldRetry);\n\n\toptions.signal?.throwIfAborted();\n\n\tawait delayForRetry(finalDelay, options);\n\n\toptions.signal?.throwIfAborted();\n\n\treturn true;\n}\n\nexport default async function pRetry(input, options = {}) {\n\toptions = {...options};\n\n\tvalidateRetries(options.retries);\n\n\tif (Object.hasOwn(options, 'forever')) {\n\t\tthrow new Error('The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.');\n\t}\n\n\toptions.retries ??= 10;\n\toptions.factor ??= 2;\n\toptions.minTimeout ??= 1000;\n\toptions.maxTimeout ??= Number.POSITIVE_INFINITY;\n\toptions.maxRetryTime ??= Number.POSITIVE_INFINITY;\n\toptions.randomize ??= false;\n\toptions.onFailedAttempt ??= () => {};\n\toptions.shouldRetry ??= () => true;\n\toptions.shouldConsumeRetry ??= () => true;\n\n\t// Validate numeric options and normalize edge cases\n\tvalidateFunctionOption('onFailedAttempt', options.onFailedAttempt);\n\tvalidateFunctionOption('shouldRetry', options.shouldRetry);\n\tvalidateFunctionOption('shouldConsumeRetry', options.shouldConsumeRetry);\n\tvalidateNumberOption('factor', options.factor, {min: 0, allowInfinity: false});\n\tvalidateNumberOption('minTimeout', options.minTimeout, {min: 0, allowInfinity: false});\n\tvalidateNumberOption('maxTimeout', options.maxTimeout, {min: 0, allowInfinity: true});\n\tvalidateNumberOption('maxRetryTime', options.maxRetryTime, {min: 0, allowInfinity: true});\n\n\t// Treat non-positive factor as 1 to avoid zero backoff or negative behavior\n\tif (!(options.factor > 0)) {\n\t\toptions.factor = 1;\n\t}\n\n\toptions.signal?.throwIfAborted();\n\n\tlet attemptNumber = 0;\n\tlet retriesConsumed = 0;\n\tconst startTime = performance.now();\n\n\twhile (Number.isFinite(options.retries) ? retriesConsumed <= options.retries : true) {\n\t\tattemptNumber++;\n\n\t\ttry {\n\t\t\toptions.signal?.throwIfAborted();\n\n\t\t\tconst result = await input(attemptNumber);\n\n\t\t\toptions.signal?.throwIfAborted();\n\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (await onAttemptFailure({\n\t\t\t\terror,\n\t\t\t\tattemptNumber,\n\t\t\t\tretriesConsumed,\n\t\t\t\tstartTime,\n\t\t\t\toptions,\n\t\t\t})) {\n\t\t\t\tretriesConsumed++;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Should not reach here, but in case it does, throw an error\n\tthrow new Error('Retry attempts exhausted without throwing an error.');\n}\n\nexport function makeRetriable(function_, options) {\n\treturn function (...arguments_) {\n\t\treturn pRetry(() => function_.apply(this, arguments_), options);\n\t};\n}\n","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2021 - 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Represents a simple Matrix namespaced value. This will assume that if a stable prefix\n * is provided that the stable prefix should be used when representing the identifier.\n */\nexport class NamespacedValue {\n // Stable is optional, but one of the two parameters is required, hence the weird-looking types.\n // Goal is to to have developers explicitly say there is no stable value (if applicable).\n\n constructor(stable, unstable) {\n this.stable = stable;\n this.unstable = unstable;\n if (!this.unstable && !this.stable) {\n throw new Error(\"One of stable or unstable values must be supplied\");\n }\n }\n get name() {\n if (this.stable) {\n return this.stable;\n }\n return this.unstable;\n }\n get altName() {\n if (!this.stable) {\n return null;\n }\n return this.unstable;\n }\n get names() {\n var names = [this.name];\n var altName = this.altName;\n if (altName) names.push(altName);\n return names;\n }\n matches(val) {\n return this.name === val || this.altName === val;\n }\n\n // this desperately wants https://github.com/microsoft/TypeScript/pull/26349 at the top level of the class\n // so we can instantiate `NamespacedValue<string, _, _>` as a default type for that namespace.\n findIn(obj) {\n var val = undefined;\n if (this.name) {\n val = obj === null || obj === void 0 ? void 0 : obj[this.name];\n }\n if (!val && this.altName) {\n val = obj === null || obj === void 0 ? void 0 : obj[this.altName];\n }\n return val;\n }\n includedIn(arr) {\n var included = false;\n if (this.name) {\n included = arr.includes(this.name);\n }\n if (!included && this.altName) {\n included = arr.includes(this.altName);\n }\n return included;\n }\n}\nexport class ServerControlledNamespacedValue extends NamespacedValue {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"preferUnstable\", false);\n }\n setPreferUnstable(preferUnstable) {\n this.preferUnstable = preferUnstable;\n }\n get name() {\n if (this.stable && !this.preferUnstable) {\n return this.stable;\n }\n return this.unstable;\n }\n}\n\n/**\n * Represents a namespaced value which prioritizes the unstable value over the stable\n * value.\n */\nexport class UnstableValue extends NamespacedValue {\n // Note: Constructor difference is that `unstable` is *required*.\n constructor(stable, unstable) {\n super(stable, unstable);\n if (!this.unstable) {\n throw new Error(\"Unstable value must be supplied\");\n }\n }\n get name() {\n return this.unstable;\n }\n get altName() {\n return this.stable;\n }\n}\n//# sourceMappingURL=NamespacedValue.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// Types for MSC3488 - m.location: Extending events with location data\n\nimport { UnstableValue } from \"../NamespacedValue.js\";\nexport var LocationAssetType = /*#__PURE__*/function (LocationAssetType) {\n LocationAssetType[\"Self\"] = \"m.self\";\n LocationAssetType[\"Pin\"] = \"m.pin\";\n return LocationAssetType;\n}({});\nexport var M_ASSET = new UnstableValue(\"m.asset\", \"org.matrix.msc3488.asset\");\n\n/**\n * The event definition for an m.asset event (in content)\n */\n\nexport var M_TIMESTAMP = new UnstableValue(\"m.ts\", \"org.matrix.msc3488.ts\");\n/**\n * The event definition for an m.ts event (in content)\n */\n\nexport var M_LOCATION = new UnstableValue(\"m.location\", \"org.matrix.msc3488.location\");\n\n/* From the spec at:\n * https://github.com/matrix-org/matrix-doc/blob/matthew/location/proposals/3488-location.md\n{\n \"type\": \"m.room.message\",\n \"content\": {\n \"body\": \"Matthew was at geo:51.5008,0.1247;u=35 as of Sat Nov 13 18:50:58 2021\",\n \"msgtype\": \"m.location\",\n \"geo_uri\": \"geo:51.5008,0.1247;u=35\",\n \"m.location\": {\n \"uri\": \"geo:51.5008,0.1247;u=35\",\n \"description\": \"Matthew's whereabouts\",\n },\n \"m.asset\": {\n \"type\": \"m.self\"\n },\n \"m.text\": \"Matthew was at geo:51.5008,0.1247;u=35 as of Sat Nov 13 18:50:58 2021\",\n \"m.ts\": 1636829458432,\n }\n}\n*/\n\n/**\n * The content for an m.location event\n */\n\n/**\n * Possible content for location events as sent over the wire\n */\n//# sourceMappingURL=location.js.map","/*\nCopyright 2022 Šimon Brandner <simon.bra.ag@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var ReceiptType = /*#__PURE__*/function (ReceiptType) {\n ReceiptType[\"Read\"] = \"m.read\";\n ReceiptType[\"FullyRead\"] = \"m.fully_read\";\n ReceiptType[\"ReadPrivate\"] = \"m.read.private\";\n return ReceiptType;\n}({});\nexport var MAIN_ROOM_TIMELINE = \"main\";\n\n// We will only hold a synthetic receipt if we do not have a real receipt or the synthetic is newer.\n// map: receipt type → user Id → receipt\n//# sourceMappingURL=read_receipts.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2015, 2016, 2019, 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module.\n */\n\nimport unhomoglyph from \"unhomoglyph\";\nimport promiseRetry from \"p-retry\";\nimport { M_TIMESTAMP } from \"./@types/location.js\";\nimport { ReceiptType } from \"./@types/read_receipts.js\";\nvar interns = new Map();\n\n/**\n * Internalises a string, reusing a known pointer or storing the pointer\n * if needed for future strings.\n * @param str - The string to internalise.\n * @returns The internalised string.\n */\nexport function internaliseString(str) {\n // Unwrap strings before entering the map, if we somehow got a wrapped\n // string as our input. This should only happen from tests.\n if (str instanceof String) {\n str = str.toString();\n }\n\n // Check the map to see if we can store the value\n if (!interns.has(str)) {\n interns.set(str, str);\n }\n\n // Return any cached string reference\n return interns.get(str);\n}\n\n/**\n * Encode a dictionary of query parameters.\n * Omits any undefined/null values.\n * @param params - A dict of key/values to encode e.g.\n * `{\"foo\": \"bar\", \"baz\": \"taz\"}`\n * @returns The encoded string e.g. foo=bar&baz=taz\n */\nexport function encodeParams(params, urlSearchParams) {\n var searchParams = urlSearchParams !== null && urlSearchParams !== void 0 ? urlSearchParams : new URLSearchParams();\n var _loop = function _loop() {\n _ref2 = _slicedToArray(_ref3, 2);\n var key = _ref2[0];\n var val = _ref2[1];\n if (val !== undefined && val !== null) {\n if (Array.isArray(val)) {\n val.forEach(v => {\n searchParams.append(key, String(v));\n });\n } else {\n searchParams.append(key, String(val));\n }\n }\n },\n _ref2;\n for (var _ref3 of Object.entries(params)) {\n _loop();\n }\n return searchParams;\n}\n/**\n * Replace a stable parameter with the unstable naming for params\n */\nexport function replaceParam(stable, unstable, dict) {\n var result = _objectSpread(_objectSpread({}, dict), {}, {\n [unstable]: dict[stable]\n });\n delete result[stable];\n return result;\n}\n\n/**\n * Decode a query string in `application/x-www-form-urlencoded` format.\n * @param query - A query string to decode e.g.\n * foo=bar&via=server1&server2\n * @returns The decoded object, if any keys occurred multiple times\n * then the value will be an array of strings, else it will be an array.\n * This behaviour matches Node's qs.parse but is built on URLSearchParams\n * for native web compatibility\n */\nexport function decodeParams(query) {\n var o = {};\n var params = new URLSearchParams(query);\n for (var key of params.keys()) {\n var val = params.getAll(key);\n o[key] = val.length === 1 ? val[0] : val;\n }\n return o;\n}\n\n/**\n * Encodes a URI according to a set of template variables. Variables will be\n * passed through encodeURIComponent.\n * @param pathTemplate - The path with template variables e.g. '/foo/$bar'.\n * @param variables - The key/value pairs to replace the template\n * variables with. E.g. `{ \"$bar\": \"baz\" }`.\n * @returns The result of replacing all template variables e.g. '/foo/baz'.\n */\nexport function encodeUri(pathTemplate, variables) {\n for (var key in variables) {\n if (!variables.hasOwnProperty(key)) {\n continue;\n }\n var value = variables[key];\n if (value === undefined || value === null) {\n continue;\n }\n pathTemplate = pathTemplate.replace(key, encodeURIComponent(value));\n }\n return pathTemplate;\n}\n\n/**\n * The removeElement() method removes the first element in the array that\n * satisfies (returns true) the provided testing function.\n * @param array - The array.\n * @param fn - Function to execute on each value in the array, with the\n * function signature `fn(element, index, array)`. Return true to\n * remove this element and break.\n * @param reverse - True to search in reverse order.\n * @returns True if an element was removed.\n */\nexport function removeElement(array, fn, reverse) {\n var i;\n if (reverse) {\n for (i = array.length - 1; i >= 0; i--) {\n if (fn(array[i], i, array)) {\n array.splice(i, 1);\n return true;\n }\n }\n } else {\n for (i = 0; i < array.length; i++) {\n if (fn(array[i], i, array)) {\n array.splice(i, 1);\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Checks if the given thing is a function.\n * @param value - The thing to check.\n * @returns True if it is a function.\n */\nexport function isFunction(value) {\n return Object.prototype.toString.call(value) === \"[object Function]\";\n}\n\n/**\n * Checks that the given object has the specified keys.\n * @param obj - The object to check.\n * @param keys - The list of keys that 'obj' must have.\n * @throws If the object is missing keys.\n */\n// note using 'keys' here would shadow the 'keys' function defined above\nexport function checkObjectHasKeys(obj, keys) {\n for (var key of keys) {\n if (!obj.hasOwnProperty(key)) {\n throw new Error(\"Missing required key: \" + key);\n }\n }\n}\n\n/**\n * Deep copy the given object. The object MUST NOT have circular references and\n * MUST NOT have functions.\n * @param obj - The object to deep copy.\n * @returns A copy of the object without any references to the original.\n */\nexport function deepCopy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\n/**\n * Compare two objects for equality. The objects MUST NOT have circular references.\n *\n * @param x - The first object to compare.\n * @param y - The second object to compare.\n *\n * @returns true if the two objects are equal\n */\nexport function deepCompare(x, y) {\n // Inspired by\n // http://stackoverflow.com/questions/1068834/object-comparison-in-javascript#1144249\n\n // Compare primitives and functions.\n // Also check if both arguments link to the same object.\n if (x === y) {\n return true;\n }\n if (typeof x !== typeof y) {\n return false;\n }\n\n // special-case NaN (since NaN !== NaN)\n if (typeof x === \"number\" && isNaN(x) && isNaN(y)) {\n return true;\n }\n\n // special-case null (since typeof null == 'object', but null.constructor\n // throws)\n if (x === null || y === null) {\n return x === y;\n }\n\n // everything else is either an unequal primitive, or an object\n // XXX: this check has been temporarily tweaked due to issues in the jest test environment,\n // this will be reverted as part of the migration to vitest\n if (x.constructor.name !== \"Object\" && x.constructor.name !== \"RegExp\" && x.constructor.name !== \"Date\" && x.constructor.name !== \"Array\") {\n return false;\n }\n\n // check they are the same type of object\n // XXX: this check has been temporarily tweaked due to issues in the jest test environment,\n // this will be reverted as part of the migration to vitest\n if (x.prototype !== y.prototype) {\n return false;\n }\n\n // special-casing for some special types of object\n if (x instanceof RegExp || x instanceof Date) {\n return x.toString() === y.toString();\n }\n\n // the object algorithm works for Array, but it's sub-optimal.\n if (Array.isArray(x)) {\n if (x.length !== y.length) {\n return false;\n }\n for (var i = 0; i < x.length; i++) {\n if (!deepCompare(x[i], y[i])) {\n return false;\n }\n }\n } else {\n // check that all of y's direct keys are in x\n for (var p in y) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n }\n\n // finally, compare each of x's keys with y\n for (var _p in x) {\n if (y.hasOwnProperty(_p) !== x.hasOwnProperty(_p) || !deepCompare(x[_p], y[_p])) {\n return false;\n }\n }\n }\n return true;\n}\n\n// Dev note: This returns an array of tuples, but jsdoc doesn't like that. https://github.com/jsdoc/jsdoc/issues/1703\n/**\n * Creates an array of object properties/values (entries) then\n * sorts the result by key, recursively. The input object must\n * ensure it does not have loops. If the input is not an object\n * then it will be returned as-is.\n * @param obj - The object to get entries of\n * @returns The entries, sorted by key.\n */\nexport function deepSortedObjectEntries(obj) {\n if (typeof obj !== \"object\") return obj;\n\n // Apparently these are object types...\n if (obj === null || obj === undefined || Array.isArray(obj)) return obj;\n var pairs = [];\n for (var _ref6 of Object.entries(obj)) {\n var _ref5 = _slicedToArray(_ref6, 2);\n var k = _ref5[0];\n var v = _ref5[1];\n pairs.push([k, deepSortedObjectEntries(v)]);\n }\n\n // lexicographicCompare is faster than localeCompare, so let's use that.\n pairs.sort((a, b) => lexicographicCompare(a[0], b[0]));\n return pairs;\n}\n\n/**\n * Returns whether the given value is a finite number without type-coercion\n *\n * @param value - the value to test\n * @returns whether or not value is a finite number without type-coercion\n */\nexport function isNumber(value) {\n return typeof value === \"number\" && isFinite(value);\n}\n\n/**\n * Removes zero width chars, diacritics and whitespace from the string\n * Also applies an unhomoglyph on the string, to prevent similar looking chars\n * @param str - the string to remove hidden characters from\n * @returns a string with the hidden characters removed\n */\nexport function removeHiddenChars(str) {\n if (typeof str === \"string\") {\n return unhomoglyph(str.normalize(\"NFD\").replace(removeHiddenCharsRegex, \"\"));\n }\n return \"\";\n}\n\n/**\n * Removes the direction override characters from a string\n * @returns string with chars removed\n */\nexport function removeDirectionOverrideChars(str) {\n if (typeof str === \"string\") {\n return str.replace(/[\\u202d-\\u202e]/g, \"\");\n }\n return \"\";\n}\nexport function normalize(str) {\n // Note: we have to match the filter with the removeHiddenChars() because the\n // function strips spaces and other characters (M becomes RN for example, in lowercase).\n return removeHiddenChars(str.toLowerCase())\n // Strip all punctuation\n .replace(/[\\\\'!\"#$%&()*+,\\-./:;<=>?@[\\]^_`{|}~\\u2000-\\u206f\\u2e00-\\u2e7f]/g, \"\")\n // We also doubly convert to lowercase to work around oddities of the library.\n .toLowerCase();\n}\n\n// Regex matching bunch of unicode control characters and otherwise misleading/invisible characters.\n// Includes:\n// various width spaces U+2000 - U+200D\n// LTR and RTL marks U+200E and U+200F\n// LTR/RTL and other directional formatting marks U+202A - U+202F\n// Arabic Letter RTL mark U+061C\n// Combining characters U+0300 - U+036F\n// Zero width no-break space (BOM) U+FEFF\n// Blank/invisible characters (U2800, U2062-U2063)\n// eslint-disable-next-line no-misleading-character-class\nvar removeHiddenCharsRegex = /[\\u2000-\\u200F\\u202A-\\u202F\\u0300-\\u036F\\uFEFF\\u061C\\u2800\\u2062-\\u2063\\s]/g;\nexport function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Converts Matrix glob-style string to a regular expression\n * https://spec.matrix.org/v1.7/appendices/#glob-style-matching\n * @param glob - Matrix glob-style string\n * @returns regular expression\n */\nexport function globToRegexp(glob) {\n return escapeRegExp(glob).replace(/\\\\\\*/g, \".*\").replace(/\\?/g, \".\");\n}\nexport function ensureNoTrailingSlash(url) {\n if (url !== null && url !== void 0 && url.endsWith(\"/\")) {\n return url.slice(0, -1);\n } else {\n return url;\n }\n}\n\n/**\n * Returns a promise which resolves with a given value after the given number of ms\n */\nexport function sleep(ms, value) {\n return new Promise(resolve => {\n setTimeout(resolve, ms, value);\n });\n}\n\n/**\n * Utility to log the duration of a promise.\n *\n * @param logger - The logger to log to.\n * @param name - The name of the operation.\n * @param block - The block to execute.\n */\nexport function logDuration(_x, _x2, _x3) {\n return _logDuration.apply(this, arguments);\n}\n\n/**\n * Utility to log the duration of a synchronous block.\n *\n * @param logger - The logger to log to.\n * @param name - The name of the operation.\n * @param block - The block to execute.\n */\nfunction _logDuration() {\n _logDuration = _asyncToGenerator(function* (logger, name, block) {\n var start = Date.now();\n try {\n return yield block();\n } finally {\n var end = Date.now();\n logger.debug(\"[Perf]: \".concat(name, \" took \").concat(end - start, \"ms\"));\n }\n });\n return _logDuration.apply(this, arguments);\n}\nexport function logDurationSync(logger, name, block) {\n var start = Date.now();\n try {\n return block();\n } finally {\n var end = Date.now();\n logger.debug(\"[Perf]: \".concat(name, \" took \").concat(end - start, \"ms\"));\n }\n}\n\n/**\n * Promise/async version of {@link setImmediate}.\n *\n * Implementation is based on `setTimeout` for wider compatibility.\n * @deprecated Use {@link sleep} instead.\n */\nexport function immediate() {\n return new Promise(resolve => setTimeout(resolve));\n}\nexport function isNullOrUndefined(val) {\n return val === null || val === undefined;\n}\nexport function promiseMapSeries(_x4, _x5) {\n return _promiseMapSeries.apply(this, arguments);\n}\nfunction _promiseMapSeries() {\n _promiseMapSeries = _asyncToGenerator(function* (promises, fn // if async we don't care about the type as we only await resolution\n ) {\n for (var o of promises) {\n yield fn(yield o);\n }\n });\n return _promiseMapSeries.apply(this, arguments);\n}\nexport function promiseTry(fn) {\n return Promise.resolve(fn());\n}\n\n// Creates and awaits all promises, running no more than `chunkSize` at the same time\nexport function chunkPromises(_x6, _x7) {\n return _chunkPromises.apply(this, arguments);\n}\n\n/**\n * Retries the function until it succeeds or is interrupted. The given function must return\n * a promise which throws/rejects on error, otherwise the retry will assume the request\n * succeeded. The promise chain returned will contain the successful promise. The given function\n * should always return a new promise.\n * @param promiseFn - The function to call to get a fresh promise instance. Takes an\n * attempt count as an argument, for logging/debugging purposes.\n * @param shouldRetry - Optional function which is called with the error the latest rejection from promiseFn,\n * retrying will ba aborted if this return false.\n * @returns The promise for the retried operation.\n */\nfunction _chunkPromises() {\n _chunkPromises = _asyncToGenerator(function* (fns, chunkSize) {\n var results = [];\n for (var i = 0; i < fns.length; i += chunkSize) {\n results.push(...(yield Promise.all(fns.slice(i, i + chunkSize).map(fn => fn()))));\n }\n return results;\n });\n return _chunkPromises.apply(this, arguments);\n}\nexport function simpleRetryOperation(promiseFn, shouldRetry) {\n return promiseRetry(attempt => {\n return promiseFn(attempt);\n }, {\n retries: Infinity,\n shouldRetry: shouldRetry ? _ref7 => {\n var error = _ref7.error;\n return shouldRetry(error);\n } : undefined,\n factor: 2,\n minTimeout: 3000,\n // ms\n maxTimeout: 15000 // ms\n });\n}\n\n// String averaging inspired by https://stackoverflow.com/a/2510816\n// Dev note: We make the alphabet a string because it's easier to write syntactically\n// than arrays. Thankfully, strings implement the useful parts of the Array interface\n// anyhow.\n\n/**\n * The default alphabet used by string averaging in this SDK. This matches\n * all usefully printable ASCII characters (0x20-0x7E, inclusive).\n */\nexport var DEFAULT_ALPHABET = (() => {\n var str = \"\";\n for (var c = 0x20; c <= 0x7e; c++) {\n str += String.fromCharCode(c);\n }\n return str;\n})();\n\n/**\n * Pads a string using the given alphabet as a base. The returned string will be\n * padded at the end with the first character in the alphabet.\n *\n * This is intended for use with string averaging.\n * @param s - The string to pad.\n * @param n - The length to pad to.\n * @param alphabet - The alphabet to use as a single string.\n * @returns The padded string.\n */\nexport function alphabetPad(s, n) {\n var alphabet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_ALPHABET;\n return s.padEnd(n, alphabet[0]);\n}\n\n/**\n * Converts a baseN number to a string, where N is the alphabet's length.\n *\n * This is intended for use with string averaging.\n * @param n - The baseN number.\n * @param alphabet - The alphabet to use as a single string.\n * @returns The baseN number encoded as a string from the alphabet.\n */\nexport function baseToString(n) {\n var alphabet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_ALPHABET;\n // Developer note: the stringToBase() function offsets the character set by 1 so that repeated\n // characters (ie: \"aaaaaa\" in a..z) don't come out as zero. We have to reverse this here as\n // otherwise we'll be wrong in our conversion. Undoing a +1 before an exponent isn't very fun\n // though, so we rely on a lengthy amount of `x - 1` and integer division rules to reach a\n // sane state. This also means we have to do rollover detection: see below.\n\n var len = BigInt(alphabet.length);\n if (n <= len) {\n var _alphabet;\n return (_alphabet = alphabet[Number(n) - 1]) !== null && _alphabet !== void 0 ? _alphabet : \"\";\n }\n var d = n / len;\n var r = Number(n % len) - 1;\n\n // Rollover detection: if the remainder is negative, it means that the string needs\n // to roll over by 1 character downwards (ie: in a..z, the previous to \"aaa\" would be\n // \"zz\").\n if (r < 0) {\n d -= BigInt(Math.abs(r)); // abs() is just to be clear what we're doing. Could also `+= r`.\n r = Number(len) - 1;\n }\n return baseToString(d, alphabet) + alphabet[r];\n}\n\n/**\n * Converts a string to a baseN number, where N is the alphabet's length.\n *\n * This is intended for use with string averaging.\n * @param s - The string to convert to a number.\n * @param alphabet - The alphabet to use as a single string.\n * @returns The baseN number.\n */\nexport function stringToBase(s) {\n var alphabet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_ALPHABET;\n var len = BigInt(alphabet.length);\n\n // In our conversion to baseN we do a couple performance optimizations to avoid using\n // excess CPU and such. To create baseN numbers, the input string needs to be reversed\n // so the exponents stack up appropriately, as the last character in the unreversed\n // string has less impact than the first character (in \"abc\" the A is a lot more important\n // for lexicographic sorts). We also do a trick with the character codes to optimize the\n // alphabet lookup, avoiding an index scan of `alphabet.indexOf(reversedStr[i])` - we know\n // that the alphabet and (theoretically) the input string are constrained on character sets\n // and thus can do simple subtraction to end up with the same result.\n\n // Developer caution: we carefully cast to BigInt here to avoid losing precision. We cannot\n // rely on Math.pow() (for example) to be capable of handling our insane numbers.\n\n var result = BigInt(0);\n for (var i = s.length - 1, j = BigInt(0); i >= 0; i--, j++) {\n var charIndex = s.charCodeAt(i) - alphabet.charCodeAt(0);\n\n // We add 1 to the char index to offset the whole numbering scheme. We unpack this in\n // the baseToString() function.\n result += BigInt(1 + charIndex) * len ** j;\n }\n return result;\n}\n\n/**\n * Averages two strings, returning the midpoint between them. This is accomplished by\n * converting both to baseN numbers (where N is the alphabet's length) then averaging\n * those before re-encoding as a string.\n * @param a - The first string.\n * @param b - The second string.\n * @param alphabet - The alphabet to use as a single string.\n * @returns The midpoint between the strings, as a string.\n */\nexport function averageBetweenStrings(a, b) {\n var alphabet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_ALPHABET;\n var padN = Math.max(a.length, b.length);\n var baseA = stringToBase(alphabetPad(a, padN, alphabet), alphabet);\n var baseB = stringToBase(alphabetPad(b, padN, alphabet), alphabet);\n var avg = (baseA + baseB) / BigInt(2);\n\n // Detect integer division conflicts. This happens when two numbers are divided too close so\n // we lose a .5 precision. We need to add a padding character in these cases.\n if (avg === baseA || avg == baseB) {\n return baseToString(avg, alphabet) + alphabet[0];\n }\n return baseToString(avg, alphabet);\n}\n\n/**\n * Finds the next string using the alphabet provided. This is done by converting the\n * string to a baseN number, where N is the alphabet's length, then adding 1 before\n * converting back to a string.\n * @param s - The string to start at.\n * @param alphabet - The alphabet to use as a single string.\n * @returns The string which follows the input string.\n */\nexport function nextString(s) {\n var alphabet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_ALPHABET;\n return baseToString(stringToBase(s, alphabet) + BigInt(1), alphabet);\n}\n\n/**\n * Finds the previous string using the alphabet provided. This is done by converting the\n * string to a baseN number, where N is the alphabet's length, then subtracting 1 before\n * converting back to a string.\n * @param s - The string to start at.\n * @param alphabet - The alphabet to use as a single string.\n * @returns The string which precedes the input string.\n */\nexport function prevString(s) {\n var alphabet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_ALPHABET;\n return baseToString(stringToBase(s, alphabet) - BigInt(1), alphabet);\n}\n\n/**\n * Compares strings lexicographically as a sort-safe function.\n * @param a - The first (reference) string.\n * @param b - The second (compare) string.\n * @returns Negative if the reference string is before the compare string;\n * positive if the reference string is after; and zero if equal.\n */\nexport function lexicographicCompare(a, b) {\n // Dev note: this exists because I'm sad that you can use math operators on strings, so I've\n // hidden the operation in this function.\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else {\n return 0;\n }\n}\n\n/**\n * This function is similar to Object.assign() but it assigns recursively and\n * allows you to ignore nullish values from the source\n *\n * @returns the target object\n */\nexport function recursivelyAssign(target, source) {\n var ignoreNullish = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n for (var _ref0 of Object.entries(source)) {\n var _ref9 = _slicedToArray(_ref0, 2);\n var sourceKey = _ref9[0];\n var sourceValue = _ref9[1];\n if (target[sourceKey] instanceof Object && sourceValue) {\n recursivelyAssign(target[sourceKey], sourceValue);\n continue;\n }\n if (sourceValue !== null && sourceValue !== undefined || !ignoreNullish) {\n safeSet(target, sourceKey, sourceValue);\n continue;\n }\n }\n return target;\n}\nfunction getContentTimestampWithFallback(event) {\n var _M_TIMESTAMP$findIn;\n return (_M_TIMESTAMP$findIn = M_TIMESTAMP.findIn(event.getContent())) !== null && _M_TIMESTAMP$findIn !== void 0 ? _M_TIMESTAMP$findIn : -1;\n}\n\n/**\n * Sort events by their content m.ts property\n * Latest timestamp first\n */\nexport function sortEventsByLatestContentTimestamp(left, right) {\n return getContentTimestampWithFallback(right) - getContentTimestampWithFallback(left);\n}\nexport function isSupportedReceiptType(receiptType) {\n return [ReceiptType.Read, ReceiptType.ReadPrivate].includes(receiptType);\n}\n\n/**\n * Determines whether two maps are equal.\n * @param eq - The equivalence relation to compare values by. Defaults to strict equality.\n */\nexport function mapsEqual(x, y) {\n var eq = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : (v1, v2) => v1 === v2;\n if (x.size !== y.size) return false;\n for (var _ref11 of x) {\n var _ref10 = _slicedToArray(_ref11, 2);\n var k = _ref10[0];\n var v1 = _ref10[1];\n var v2 = y.get(k);\n if (v2 === undefined || !eq(v1, v2)) return false;\n }\n return true;\n}\nfunction processMapToObjectValue(value) {\n if (value instanceof Map) {\n // Value is a Map. Recursively map it to an object.\n return recursiveMapToObject(value);\n } else if (Array.isArray(value)) {\n // Value is an Array. Recursively map the value (e.g. to cover Array of Arrays).\n return value.map(v => processMapToObjectValue(v));\n } else {\n return value;\n }\n}\n\n/**\n * Recursively converts Maps to plain objects.\n * Also supports sub-lists of Maps.\n */\nexport function recursiveMapToObject(map) {\n var targetMap = new Map();\n for (var _ref14 of map) {\n var _ref13 = _slicedToArray(_ref14, 2);\n var key = _ref13[0];\n var value = _ref13[1];\n targetMap.set(key, processMapToObjectValue(value));\n }\n return Object.fromEntries(targetMap.entries());\n}\nexport function unsafeProp(prop) {\n return prop === \"__proto__\" || prop === \"prototype\" || prop === \"constructor\";\n}\nexport function safeSet(obj, prop, value) {\n if (unsafeProp(prop)) {\n throw new Error(\"Trying to modify prototype or constructor\");\n }\n obj[prop] = value;\n}\nexport function noUnsafeEventProps(event) {\n return !(unsafeProp(event.room_id) || unsafeProp(event.sender) || unsafeProp(event.event_id));\n}\nexport class MapWithDefault extends Map {\n constructor(createDefault) {\n super();\n this.createDefault = createDefault;\n }\n\n /**\n * Returns the value if the key already exists.\n * If not, it creates a new value under that key using the ctor callback and returns it.\n */\n getOrCreate(key) {\n if (!this.has(key)) {\n this.set(key, this.createDefault());\n }\n return this.get(key);\n }\n}\n//# sourceMappingURL=utils.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Internal module. Definitions for storage for the crypto module\n */\n\n/**\n * Abstraction of things that can store data required for end-to-end encryption\n */\n\n/** Data on a Megolm session */\n\n/** Extended data on a Megolm session */\n\n/** Data on an Olm session */\n\n/**\n * Represents an outgoing room key request\n */\n\n/**\n * Keys for the `account` object store to store the migration state.\n * Values are defined in `MigrationState`.\n * @internal\n */\nexport var ACCOUNT_OBJECT_KEY_MIGRATION_STATE = \"migrationState\";\n\n/**\n * A record of which steps have been completed in the libolm to Rust Crypto migration.\n *\n * Used by {@link CryptoStore#getMigrationState} and {@link CryptoStore#setMigrationState}.\n *\n * @internal\n */\nexport var MigrationState = /*#__PURE__*/function (MigrationState) {\n /** No migration steps have yet been completed. */\n MigrationState[MigrationState[\"NOT_STARTED\"] = 0] = \"NOT_STARTED\";\n /** We have migrated the account data, cross-signing keys, etc. */\n MigrationState[MigrationState[\"INITIAL_DATA_MIGRATED\"] = 1] = \"INITIAL_DATA_MIGRATED\";\n /** INITIAL_DATA_MIGRATED, and in addition, we have migrated all the Olm sessions. */\n MigrationState[MigrationState[\"OLM_SESSIONS_MIGRATED\"] = 2] = \"OLM_SESSIONS_MIGRATED\";\n /** OLM_SESSIONS_MIGRATED, and in addition, we have migrated all the Megolm sessions. */\n MigrationState[MigrationState[\"MEGOLM_SESSIONS_MIGRATED\"] = 3] = \"MEGOLM_SESSIONS_MIGRATED\";\n /** MEGOLM_SESSIONS_MIGRATED, and in addition, we have migrated all the room settings. */\n MigrationState[MigrationState[\"ROOM_SETTINGS_MIGRATED\"] = 4] = \"ROOM_SETTINGS_MIGRATED\";\n /** ROOM_SETTINGS_MIGRATED, and in addition, we have done the first own keys query in order to\n * load the public part of the keys that have been migrated */\n MigrationState[MigrationState[\"INITIAL_OWN_KEY_QUERY_DONE\"] = 5] = \"INITIAL_OWN_KEY_QUERY_DONE\";\n return MigrationState;\n}({});\n\n/**\n * The size of batches to be returned by {@link CryptoStore#getEndToEndSessionsBatch} and\n * {@link CryptoStore#getEndToEndInboundGroupSessionsBatch}.\n */\nexport var SESSION_BATCH_SIZE = 50;\n\n/* eslint-disable camelcase */\n\n/* eslint-enable camelcase */\n\nexport var TrackingStatus = /*#__PURE__*/function (TrackingStatus) {\n TrackingStatus[TrackingStatus[\"NotTracked\"] = 0] = \"NotTracked\";\n TrackingStatus[TrackingStatus[\"PendingDownload\"] = 1] = \"PendingDownload\";\n TrackingStatus[TrackingStatus[\"DownloadInProgress\"] = 2] = \"DownloadInProgress\";\n TrackingStatus[TrackingStatus[\"UpToDate\"] = 3] = \"UpToDate\";\n return TrackingStatus;\n}({});\n\n/**\n * possible states for a room key request\n *\n * The state machine looks like:\n * ```\n *\n * | (cancellation sent)\n * | .-------------------------------------------------.\n * | | |\n * V V (cancellation requested) |\n * UNSENT -----------------------------+ |\n * | | |\n * | | |\n * | (send successful) | CANCELLATION_PENDING_AND_WILL_RESEND\n * V | Λ\n * SENT | |\n * |-------------------------------- | --------------'\n * | | (cancellation requested with intent\n * | | to resend the original request)\n * | |\n * | (cancellation requested) |\n * V |\n * CANCELLATION_PENDING |\n * | |\n * | (cancellation sent) |\n * V |\n * (deleted) <---------------------------+\n * ```\n */\nexport var RoomKeyRequestState = /*#__PURE__*/function (RoomKeyRequestState) {\n /** request not yet sent */\n RoomKeyRequestState[RoomKeyRequestState[\"Unsent\"] = 0] = \"Unsent\";\n /** request sent, awaiting reply */\n RoomKeyRequestState[RoomKeyRequestState[\"Sent\"] = 1] = \"Sent\";\n /** reply received, cancellation not yet sent */\n RoomKeyRequestState[RoomKeyRequestState[\"CancellationPending\"] = 2] = \"CancellationPending\";\n /**\n * Cancellation not yet sent and will transition to UNSENT instead of\n * being deleted once the cancellation has been sent.\n */\n RoomKeyRequestState[RoomKeyRequestState[\"CancellationPendingAndWillResend\"] = 3] = \"CancellationPendingAndWillResend\";\n return RoomKeyRequestState;\n}({});\n\n/* eslint-disable camelcase */\n\n/**\n * The parameters of a room key request. The details of the request may\n * vary with the crypto algorithm, but the management and storage layers for\n * outgoing requests expect it to have 'room_id' and 'session_id' properties.\n */\n\n/* eslint-enable camelcase */\n\n/** State of the verification of the device. */\nexport var DeviceVerification = /*#__PURE__*/function (DeviceVerification) {\n DeviceVerification[DeviceVerification[\"Blocked\"] = -1] = \"Blocked\";\n DeviceVerification[DeviceVerification[\"Unverified\"] = 0] = \"Unverified\";\n DeviceVerification[DeviceVerification[\"Verified\"] = 1] = \"Verified\";\n return DeviceVerification;\n}({});\n//# sourceMappingURL=base.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2017 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { safeSet } from \"../../utils.js\";\nimport { MigrationState, SESSION_BATCH_SIZE } from \"./base.js\";\nfunction encodeSessionKey(senderCurve25519Key, sessionId) {\n return encodeURIComponent(senderCurve25519Key) + \"/\" + encodeURIComponent(sessionId);\n}\nfunction decodeSessionKey(key) {\n var keyParts = key.split(\"/\");\n var senderKey = decodeURIComponent(keyParts[0]);\n var sessionId = decodeURIComponent(keyParts[1]);\n return {\n senderKey,\n sessionId\n };\n}\n\n/**\n * Internal module. in-memory storage for e2e.\n */\n\nexport class MemoryCryptoStore {\n constructor() {\n _defineProperty(this, \"migrationState\", MigrationState.NOT_STARTED);\n _defineProperty(this, \"account\", null);\n _defineProperty(this, \"crossSigningKeys\", null);\n _defineProperty(this, \"privateKeys\", {});\n _defineProperty(this, \"sessions\", {});\n _defineProperty(this, \"inboundGroupSessions\", {});\n _defineProperty(this, \"inboundGroupSessionsWithheld\", {});\n // Opaque device data object\n _defineProperty(this, \"rooms\", {});\n _defineProperty(this, \"sessionsNeedingBackup\", {});\n }\n /**\n * Returns true if this CryptoStore has ever been initialised (ie, it might contain data).\n *\n * Implementation of {@link CryptoStore.containsData}.\n *\n * @internal\n */\n containsData() {\n var _this = this;\n return _asyncToGenerator(function* () {\n // If it contains anything, it should contain an account.\n return _this.account !== null;\n })();\n }\n\n /**\n * Ensure the database exists and is up-to-date.\n *\n * This must be called before the store can be used.\n *\n * @returns resolves to the store.\n */\n startup() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n // No startup work to do for the memory store.\n return _this2;\n })();\n }\n\n /**\n * Delete all data from this store.\n *\n * @returns Promise which resolves when the store has been cleared.\n */\n deleteAllData() {\n return Promise.resolve();\n }\n\n /**\n * Get data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.getMigrationState}.\n *\n * @internal\n */\n getMigrationState() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n return _this3.migrationState;\n })();\n }\n\n /**\n * Set data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.setMigrationState}.\n *\n * @internal\n */\n setMigrationState(migrationState) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n _this4.migrationState = migrationState;\n })();\n }\n\n // Olm Account\n\n getAccount(txn, func) {\n func(this.account);\n }\n storeAccount(txn, accountPickle) {\n this.account = accountPickle;\n }\n getCrossSigningKeys(txn, func) {\n func(this.crossSigningKeys);\n }\n getSecretStorePrivateKey(txn, func, type) {\n var result = this.privateKeys[type];\n func(result || null);\n }\n storeSecretStorePrivateKey(txn, type, key) {\n this.privateKeys[type] = key;\n }\n\n // Olm Sessions\n\n countEndToEndSessions(txn, func) {\n var count = 0;\n for (var deviceSessions of Object.values(this.sessions)) {\n count += Object.keys(deviceSessions).length;\n }\n func(count);\n }\n getEndToEndSession(deviceKey, sessionId, txn, func) {\n var deviceSessions = this.sessions[deviceKey] || {};\n func(deviceSessions[sessionId] || null);\n }\n getEndToEndSessions(deviceKey, txn, func) {\n func(this.sessions[deviceKey] || {});\n }\n storeEndToEndSession(deviceKey, sessionId, sessionInfo, txn) {\n var deviceSessions = this.sessions[deviceKey];\n if (deviceSessions === undefined) {\n deviceSessions = {};\n this.sessions[deviceKey] = deviceSessions;\n }\n safeSet(deviceSessions, sessionId, sessionInfo);\n }\n\n /**\n * Fetch a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndSessionsBatch}.\n *\n * @internal\n */\n getEndToEndSessionsBatch() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var result = [];\n for (var deviceSessions of Object.values(_this5.sessions)) {\n for (var session of Object.values(deviceSessions)) {\n result.push(session);\n if (result.length >= SESSION_BATCH_SIZE) {\n return result;\n }\n }\n }\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n\n // There are fewer sessions than the batch size; return the final batch of sessions.\n return result;\n })();\n }\n\n /**\n * Delete a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndSessionsBatch(sessions) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n for (var _ref2 of sessions) {\n var deviceKey = _ref2.deviceKey;\n var sessionId = _ref2.sessionId;\n var deviceSessions = _this6.sessions[deviceKey] || {};\n delete deviceSessions[sessionId];\n if (Object.keys(deviceSessions).length === 0) {\n // No more sessions for this device.\n delete _this6.sessions[deviceKey];\n }\n }\n })();\n }\n\n // Inbound Group Sessions\n\n getEndToEndInboundGroupSession(senderCurve25519Key, sessionId, txn, func) {\n var k = encodeSessionKey(senderCurve25519Key, sessionId);\n func(this.inboundGroupSessions[k] || null, this.inboundGroupSessionsWithheld[k] || null);\n }\n storeEndToEndInboundGroupSession(senderCurve25519Key, sessionId, sessionData, txn) {\n var k = encodeSessionKey(senderCurve25519Key, sessionId);\n this.inboundGroupSessions[k] = sessionData;\n }\n\n /**\n * Count the number of Megolm sessions in the database.\n *\n * Implementation of {@link CryptoStore.countEndToEndInboundGroupSessions}.\n *\n * @internal\n */\n countEndToEndInboundGroupSessions() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n return Object.keys(_this7.inboundGroupSessions).length;\n })();\n }\n\n /**\n * Fetch a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n getEndToEndInboundGroupSessionsBatch() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n var result = [];\n for (var _ref5 of Object.entries(_this8.inboundGroupSessions)) {\n var _ref4 = _slicedToArray(_ref5, 2);\n var key = _ref4[0];\n var session = _ref4[1];\n result.push(_objectSpread(_objectSpread({}, decodeSessionKey(key)), {}, {\n sessionData: session,\n needsBackup: key in _this8.sessionsNeedingBackup\n }));\n if (result.length >= SESSION_BATCH_SIZE) {\n return result;\n }\n }\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n\n // There are fewer sessions than the batch size; return the final batch of sessions.\n return result;\n })();\n }\n\n /**\n * Delete a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndInboundGroupSessionsBatch(sessions) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n for (var _ref7 of sessions) {\n var senderKey = _ref7.senderKey;\n var sessionId = _ref7.sessionId;\n var k = encodeSessionKey(senderKey, sessionId);\n delete _this9.inboundGroupSessions[k];\n }\n })();\n }\n\n // E2E rooms\n\n getEndToEndRooms(txn, func) {\n func(this.rooms);\n }\n markSessionsNeedingBackup(sessions) {\n for (var session of sessions) {\n var sessionKey = encodeSessionKey(session.senderKey, session.sessionId);\n this.sessionsNeedingBackup[sessionKey] = true;\n }\n return Promise.resolve();\n }\n\n // Session key backups\n\n doTxn(mode, stores, func) {\n return Promise.resolve(func(null));\n }\n}\n//# sourceMappingURL=memory-crypto-store.js.map","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _toArray(r) {\n return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nexport { _toArray as default };","import _toArray from \"@babel/runtime/helpers/toArray\";\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/*\nCopyright 2015 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// Validation based on https://spec.matrix.org/v1.12/appendices/#server-name\n// We do not use the validation described in https://spec.matrix.org/v1.12/client-server-api/#security-considerations-5\n// as it'd wrongly make all MXCs invalid due to not allowing `[].:` in server names.\nvar serverNameRegex = /^(?:(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(?:\\[[\\dA-Fa-f:.]{2,45}])|(?:[A-Za-z\\d\\-.]{1,255}))(?::\\d{1,5})?$/;\nfunction validateServerName(serverName) {\n var matches = serverNameRegex.exec(serverName);\n return (matches === null || matches === void 0 ? void 0 : matches[0]) === serverName;\n}\n\n// Validation based on https://spec.matrix.org/v1.12/client-server-api/#security-considerations-5\nvar mediaIdRegex = /^[\\w-]+$/;\nfunction validateMediaId(mediaId) {\n var matches = mediaIdRegex.exec(mediaId);\n return (matches === null || matches === void 0 ? void 0 : matches[0]) === mediaId;\n}\n\n/**\n * Get the HTTP URL for an MXC URI.\n * @param baseUrl - The base homeserver url which has a content repo.\n * @param mxc - The mxc:// URI.\n * @param width - The desired width of the thumbnail.\n * @param height - The desired height of the thumbnail.\n * @param resizeMethod - The thumbnail resize method to use, either\n * \"crop\" or \"scale\".\n * @param allowDirectLinks - If true, return any non-mxc URLs\n * directly. Fetching such URLs will leak information about the user to\n * anyone they share a room with. If false, will return the emptry string\n * for such URLs.\n * @param allowRedirects - If true, the caller supports the URL being 307 or\n * 308 redirected to another resource upon request. If false, redirects\n * are not expected. Implied `true` when `useAuthentication` is `true`.\n * @param useAuthentication - If true, the caller supports authenticated\n * media and wants an authentication-required URL. Note that server support\n * for authenticated media will *not* be checked - it is the caller's responsibility\n * to do so before calling this function. Note also that `useAuthentication`\n * implies `allowRedirects`. Defaults to false (unauthenticated endpoints).\n * @param animated - Whether the desired thumbnail should be animated.\n * @returns The complete URL to the content, may be an empty string if the provided mxc is not valid.\n */\nexport function getHttpUriForMxc(baseUrl, mxc, width, height, resizeMethod) {\n var allowDirectLinks = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var allowRedirects = arguments.length > 6 ? arguments[6] : undefined;\n var useAuthentication = arguments.length > 7 ? arguments[7] : undefined;\n var animated = arguments.length > 8 ? arguments[8] : undefined;\n if (typeof mxc !== \"string\" || !mxc) {\n return \"\";\n }\n if (!mxc.startsWith(\"mxc://\")) {\n if (allowDirectLinks) {\n return mxc;\n } else {\n return \"\";\n }\n }\n var _mxc$slice$split = mxc.slice(6).split(\"/\"),\n _mxc$slice$split2 = _toArray(_mxc$slice$split),\n serverName = _mxc$slice$split2[0],\n mediaId = _mxc$slice$split2[1],\n rest = _arrayLikeToArray(_mxc$slice$split2).slice(2);\n if (rest.length > 0 || !validateServerName(serverName) || !validateMediaId(mediaId)) {\n return \"\";\n }\n if (useAuthentication) {\n allowRedirects = true; // per docs (MSC3916 always expects redirects)\n\n // Dev note: MSC3916 removes `allow_redirect` entirely, but\n // for explicitness we set it here. This makes it slightly more obvious to\n // callers, hopefully.\n }\n var prefix;\n var isThumbnailRequest = !!width || !!height || !!resizeMethod;\n var verb = isThumbnailRequest ? \"thumbnail\" : \"download\";\n if (useAuthentication) {\n prefix = \"/_matrix/client/v1/media/\".concat(verb);\n } else {\n prefix = \"/_matrix/media/v3/\".concat(verb);\n }\n var url = new URL(\"\".concat(prefix, \"/\").concat(serverName, \"/\").concat(mediaId), baseUrl);\n if (width) {\n url.searchParams.set(\"width\", Math.round(width).toString());\n }\n if (height) {\n url.searchParams.set(\"height\", Math.round(height).toString());\n }\n if (resizeMethod) {\n url.searchParams.set(\"method\", resizeMethod);\n }\n if (animated !== undefined) {\n url.searchParams.set(\"animated\", String(animated));\n }\n if (typeof allowRedirects === \"boolean\") {\n // We add this after, so we don't convert everything to a thumbnail request.\n url.searchParams.set(\"allow_redirect\", JSON.stringify(allowRedirects));\n }\n return url.href;\n}\n//# sourceMappingURL=content-repo.js.map","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2018 André Jaenisch\nCopyright 2019-2025 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport loglevel from \"loglevel\";\n\n/** Backwards-compatibility hack to expose `log` to applications that might still be relying on it. */\n\n/** Logger interface used within the js-sdk codebase */\n\n/** The basic interface for a logger which doesn't support children */\n\n// This is to demonstrate, that you can use any namespace you want.\n// Namespaces allow you to turn on/off the logging for specific parts of the\n// application.\n// An idea would be to control this via an environment variable (on Node.js).\n// See https://www.npmjs.com/package/debug to see how this could be implemented\n// Part of #332 is introducing a logging library in the first place.\nvar DEFAULT_NAMESPACE = \"matrix\";\n\n// because rageshakes in react-sdk hijack the console log, also at module load time,\n// initializing the logger here races with the initialization of rageshakes.\n// to avoid the issue, we override the methodFactory of loglevel that binds to the\n// console methods at initialization time by a factory that looks up the console methods\n// when logging so we always get the current value of console methods.\nloglevel.methodFactory = function (methodName, logLevel, loggerName) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n /* eslint-disable @typescript-eslint/no-invalid-this */\n if (this.prefix) {\n args.unshift(this.prefix);\n }\n /* eslint-enable @typescript-eslint/no-invalid-this */\n var supportedByConsole = methodName === \"error\" || methodName === \"warn\" || methodName === \"trace\" || methodName === \"info\" || methodName === \"debug\";\n /* eslint-disable no-console */\n if (supportedByConsole) {\n return console[methodName](...args);\n } else {\n return console.log(...args);\n }\n /* eslint-enable no-console */\n };\n};\n\n/**\n * Implementation of {@link Logger} based on `loglevel`.\n */\n\n/**\n * Internal utility function: gets a {@link Logger} based on `loglevel`.\n *\n * Child loggers produced by {@link Logger.getChild} add the name of the child logger as a prefix on each log line.\n *\n * @param prefix Prefix to add to each logged line. If undefined, no prefix will be added.\n */\nfunction getPrefixedLogger(prefix) {\n var loggerName = DEFAULT_NAMESPACE + (prefix === undefined ? \"\" : \"-\".concat(prefix));\n var prefixLogger = loglevel.getLogger(loggerName);\n if (prefixLogger.getChild === undefined) {\n // This is a new loglevel Logger which has not been turned into a PrefixedLogger yet.\n prefixLogger.prefix = prefix;\n prefixLogger.getChild = childPrefix => {\n // create the new child logger\n var childLogger = getPrefixedLogger((prefix !== null && prefix !== void 0 ? prefix : \"\") + childPrefix);\n // Assign the methodFactory from the parent logger.\n // This is useful if we add extensions to the parent logger that modifies\n // its methodFactory. (An example extension is: storing each log to a rageshake db)\n childLogger.methodFactory = prefixLogger.methodFactory;\n // Rebuild the child logger with the new methodFactory.\n childLogger.rebuild();\n return childLogger;\n };\n prefixLogger.setLevel(loglevel.levels.DEBUG, false);\n }\n return prefixLogger;\n}\n\n/**\n * Drop-in replacement for `console` using {@link https://www.npmjs.com/package/loglevel|loglevel}.\n * Can be tailored down to specific use cases if needed.\n *\n * @deprecated avoid the use of this unless you are the constructor of `MatrixClient`: you should be using the logger\n * associated with `MatrixClient`.\n */\nexport var logger = getPrefixedLogger();\n\n/**\n * A \"span\" for grouping related log lines together.\n *\n * The current implementation just adds the name at the start of each log line.\n *\n * This offers a lighter-weight alternative to 'child' loggers returned by {@link Logger#getChild}. In particular,\n * it's not possible to apply individual filters to the LogSpan such as setting the verbosity level. On the other hand,\n * no reference to the LogSpan is retained in the logging framework, so it is safe to make lots of them over the course\n * of an application's life and just drop references to them when the job is done.\n */\nexport class LogSpan {\n constructor(parent, name) {\n this.parent = parent;\n _defineProperty(this, \"name\", void 0);\n this.name = name + \":\";\n }\n trace() {\n for (var _len2 = arguments.length, msg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n msg[_key2] = arguments[_key2];\n }\n this.parent.trace(this.name, ...msg);\n }\n debug() {\n for (var _len3 = arguments.length, msg = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n msg[_key3] = arguments[_key3];\n }\n this.parent.debug(this.name, ...msg);\n }\n info() {\n for (var _len4 = arguments.length, msg = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n msg[_key4] = arguments[_key4];\n }\n this.parent.info(this.name, ...msg);\n }\n warn() {\n for (var _len5 = arguments.length, msg = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n msg[_key5] = arguments[_key5];\n }\n this.parent.warn(this.name, ...msg);\n }\n error() {\n for (var _len6 = arguments.length, msg = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n msg[_key6] = arguments[_key6];\n }\n this.parent.error(this.name, ...msg);\n }\n}\n\n/**\n * A simplification of the `Debugger` type exposed by the `debug` library. We reimplement the bits we need here\n * to avoid a dependency on `debug`.\n */\n\n/**\n * A `Logger` instance, suitable for use in {@link ICreateClientOpts.logger}, which will write to the `debug` library.\n *\n * @example\n * ```js\n * import debug from \"debug\";\n *\n * const client = createClient({\n * baseUrl: homeserverUrl,\n * userId: userId,\n * accessToken: \"akjgkrgjs\",\n * deviceId: \"xzcvb\",\n * logger: new DebugLogger(debug(`matrix-js-sdk:${userId}`)),\n * });\n * ```\n */\nexport class DebugLogger {\n constructor(debugInstance) {\n this.debugInstance = debugInstance;\n }\n trace() {\n for (var _len7 = arguments.length, msg = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n msg[_key7] = arguments[_key7];\n }\n this.debugWithPrefix(\"[TRACE]\", ...msg);\n }\n debug() {\n for (var _len8 = arguments.length, msg = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n msg[_key8] = arguments[_key8];\n }\n this.debugWithPrefix(\"[DEBUG]\", ...msg);\n }\n info() {\n for (var _len9 = arguments.length, msg = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n msg[_key9] = arguments[_key9];\n }\n this.debugWithPrefix(\"[INFO]\", ...msg);\n }\n warn() {\n for (var _len0 = arguments.length, msg = new Array(_len0), _key0 = 0; _key0 < _len0; _key0++) {\n msg[_key0] = arguments[_key0];\n }\n this.debugWithPrefix(\"[WARN]\", ...msg);\n }\n error() {\n for (var _len1 = arguments.length, msg = new Array(_len1), _key1 = 0; _key1 < _len1; _key1++) {\n msg[_key1] = arguments[_key1];\n }\n this.debugWithPrefix(\"[ERROR]\", ...msg);\n }\n getChild(namespace) {\n return new DebugLogger(this.debugInstance.extend(namespace));\n }\n debugWithPrefix(prefix) {\n var formatter;\n\n // Convert the first argument to a string, so that we can safely add a prefix. This is much the same logic that\n // `debug()` uses.\n for (var _len10 = arguments.length, msg = new Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {\n msg[_key10 - 1] = arguments[_key10];\n }\n if (msg.length === 0) {\n formatter = \"\";\n } else if (msg[0] instanceof Error) {\n var err = msg.shift();\n formatter = err.stack || err.message;\n } else if (typeof msg[0] == \"string\") {\n formatter = msg.shift();\n } else {\n formatter = \"%O\";\n }\n this.debugInstance(prefix + \" \" + formatter, ...msg);\n }\n}\n//# sourceMappingURL=logger.js.map","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// eslint-disable-next-line no-restricted-imports\nimport { EventEmitter } from \"events\";\n\n/** Events emitted by EventEmitter itself */\nexport var EventEmitterEvents = /*#__PURE__*/function (EventEmitterEvents) {\n EventEmitterEvents[\"NewListener\"] = \"newListener\";\n EventEmitterEvents[\"RemoveListener\"] = \"removeListener\";\n EventEmitterEvents[\"Error\"] = \"error\";\n return EventEmitterEvents;\n}({});\n\n/** Base class for types mapping from event name to the type of listeners to that event */\n\n/**\n * The expected type of a listener function for a particular event.\n *\n * Type parameters:\n * * `E` - List of all events emitted by the `TypedEventEmitter`. Normally an enum type.\n * * `A` - A type providing mappings from event names to listener types.\n * * `T` - The name of the actual event that this listener is for. Normally one of the types in `E` or\n * {@link EventEmitterEvents}.\n */\n\n/**\n * Typed Event Emitter class which can act as a Base Model for all our model\n * and communication events.\n * This makes it much easier for us to distinguish between events, as we now need\n * to properly type this, so that our events are not stringly-based and prone\n * to silly typos.\n *\n * Type parameters:\n * * `Events` - List of all events emitted by this `TypedEventEmitter`. Normally an enum type.\n * * `Arguments` - A {@link ListenerMap} type providing mappings from event names to listener types.\n * * `SuperclassArguments` - TODO: not really sure. Alternative listener mappings, I think? But only honoured for `.emit`?\n */\nexport class TypedEventEmitter extends EventEmitter {\n /**\n * Alias for {@link on}.\n */\n addListener(event, listener) {\n return super.addListener(event, listener);\n }\n\n /**\n * Synchronously calls each of the listeners registered for the event named\n * `event`, in the order they were registered, passing the supplied arguments\n * to each.\n *\n * @param event - The name of the event to emit\n * @param args - Arguments to pass to the listener\n * @returns `true` if the event had listeners, `false` otherwise.\n */\n\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return super.emit(event, ...args);\n }\n\n /**\n * Similar to `emit` but calls all listeners within a `Promise.all` and returns the promise chain\n * @param event - The name of the event to emit\n * @param args - Arguments to pass to the listener\n * @returns `true` if the event had listeners, `false` otherwise.\n */\n\n emitPromised(event) {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n for (var _len2 = _arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = _arguments[_key2];\n }\n var listeners = _this.listeners(event);\n return Promise.allSettled(listeners.map(l => l(...args))).then(() => {\n return listeners.length > 0;\n });\n })();\n }\n\n /**\n * Returns the number of listeners listening to the event named `event`.\n *\n * @param event - The name of the event being listened for\n */\n listenerCount(event) {\n return super.listenerCount(event);\n }\n\n /**\n * Returns a copy of the array of listeners for the event named `event`.\n */\n listeners(event) {\n return super.listeners(event);\n }\n\n /**\n * Alias for {@link removeListener}\n */\n off(event, listener) {\n return super.off(event, listener);\n }\n\n /**\n * Adds the `listener` function to the end of the listeners array for the\n * event named `event`.\n *\n * No checks are made to see if the `listener` has already been added. Multiple calls\n * passing the same combination of `event` and `listener` will result in the `listener`\n * being added, and called, multiple times.\n *\n * By default, event listeners are invoked in the order they are added. The\n * {@link prependListener} method can be used as an alternative to add the\n * event listener to the beginning of the listeners array.\n *\n * @param event - The name of the event.\n * @param listener - The callback function\n *\n * @returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n on(event, listener) {\n return super.on(event, listener);\n }\n\n /**\n * Adds a **one-time** `listener` function for the event named `event`. The\n * next time `event` is triggered, this listener is removed and then invoked.\n *\n * Returns a reference to the `EventEmitter`, so that calls can be chained.\n *\n * By default, event listeners are invoked in the order they are added.\n * The {@link prependOnceListener} method can be used as an alternative to add the\n * event listener to the beginning of the listeners array.\n *\n * @param event - The name of the event.\n * @param listener - The callback function\n *\n * @returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n once(event, listener) {\n return super.once(event, listener);\n }\n\n /**\n * Adds the `listener` function to the _beginning_ of the listeners array for the\n * event named `event`.\n *\n * No checks are made to see if the `listener` has already been added. Multiple calls\n * passing the same combination of `event` and `listener` will result in the `listener`\n * being added, and called, multiple times.\n *\n * @param event - The name of the event.\n * @param listener - The callback function\n *\n * @returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n prependListener(event, listener) {\n return super.prependListener(event, listener);\n }\n\n /**\n * Adds a **one-time**`listener` function for the event named `event` to the _beginning_ of the listeners array.\n * The next time `event` is triggered, this listener is removed, and then invoked.\n *\n * @param event - The name of the event.\n * @param listener - The callback function\n *\n * @returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n prependOnceListener(event, listener) {\n return super.prependOnceListener(event, listener);\n }\n\n /**\n * Removes all listeners, or those of the specified `event`.\n *\n * It is bad practice to remove listeners added elsewhere in the code,\n * particularly when the `EventEmitter` instance was created by some other\n * component or module (e.g. sockets or file streams).\n *\n * @param event - The name of the event. If undefined, all listeners everywhere are removed.\n * @returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n removeAllListeners(event) {\n // EventEmitter::removeAllListeners uses `arguments.length` to determine undefined case\n if (event === undefined) {\n return super.removeAllListeners();\n }\n return super.removeAllListeners(event);\n }\n\n /**\n * Removes the specified `listener` from the listener array for the event named `event`.\n *\n * @returns a reference to the `EventEmitter`, so that calls can be chained.\n */\n removeListener(event, listener) {\n return super.removeListener(event, listener);\n }\n\n /**\n * Returns a copy of the array of listeners for the event named `eventName`,\n * including any wrappers (such as those created by `.once()`).\n */\n rawListeners(event) {\n return super.rawListeners(event);\n }\n}\n//# sourceMappingURL=typed-event-emitter.js.map","/*\nCopyright 2020-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { NamespacedValue, UnstableValue } from \"../NamespacedValue.js\";\nexport var EventType = /*#__PURE__*/function (EventType) {\n // Room state events\n EventType[\"RoomCanonicalAlias\"] = \"m.room.canonical_alias\";\n EventType[\"RoomCreate\"] = \"m.room.create\";\n EventType[\"RoomJoinRules\"] = \"m.room.join_rules\";\n EventType[\"RoomMember\"] = \"m.room.member\";\n EventType[\"RoomThirdPartyInvite\"] = \"m.room.third_party_invite\";\n EventType[\"RoomPowerLevels\"] = \"m.room.power_levels\";\n EventType[\"RoomName\"] = \"m.room.name\";\n EventType[\"RoomTopic\"] = \"m.room.topic\";\n EventType[\"RoomAvatar\"] = \"m.room.avatar\";\n EventType[\"RoomPinnedEvents\"] = \"m.room.pinned_events\";\n EventType[\"RoomEncryption\"] = \"m.room.encryption\";\n EventType[\"RoomHistoryVisibility\"] = \"m.room.history_visibility\";\n EventType[\"RoomGuestAccess\"] = \"m.room.guest_access\";\n EventType[\"RoomServerAcl\"] = \"m.room.server_acl\";\n EventType[\"RoomTombstone\"] = \"m.room.tombstone\";\n EventType[\"RoomPredecessor\"] = \"org.matrix.msc3946.room_predecessor\";\n // Moderation policy lists\n EventType[\"PolicyRuleUser\"] = \"m.policy.rule.user\";\n EventType[\"PolicyRuleRoom\"] = \"m.policy.rule.room\";\n EventType[\"PolicyRuleServer\"] = \"m.policy.rule.server\";\n EventType[\"SpaceChild\"] = \"m.space.child\";\n EventType[\"SpaceParent\"] = \"m.space.parent\";\n // Room timeline events\n EventType[\"RoomRedaction\"] = \"m.room.redaction\";\n EventType[\"RoomMessage\"] = \"m.room.message\";\n EventType[\"RoomMessageEncrypted\"] = \"m.room.encrypted\";\n EventType[\"Sticker\"] = \"m.sticker\";\n EventType[\"CallInvite\"] = \"m.call.invite\";\n EventType[\"CallCandidates\"] = \"m.call.candidates\";\n EventType[\"CallAnswer\"] = \"m.call.answer\";\n EventType[\"CallHangup\"] = \"m.call.hangup\";\n EventType[\"CallReject\"] = \"m.call.reject\";\n EventType[\"CallSelectAnswer\"] = \"m.call.select_answer\";\n EventType[\"CallNegotiate\"] = \"m.call.negotiate\";\n EventType[\"CallSDPStreamMetadataChanged\"] = \"m.call.sdp_stream_metadata_changed\";\n EventType[\"CallSDPStreamMetadataChangedPrefix\"] = \"org.matrix.call.sdp_stream_metadata_changed\";\n EventType[\"CallReplaces\"] = \"m.call.replaces\";\n EventType[\"CallAssertedIdentity\"] = \"m.call.asserted_identity\";\n EventType[\"CallAssertedIdentityPrefix\"] = \"org.matrix.call.asserted_identity\";\n EventType[\"CallEncryptionKeysPrefix\"] = \"io.element.call.encryption_keys\";\n EventType[\"KeyVerificationRequest\"] = \"m.key.verification.request\";\n EventType[\"KeyVerificationStart\"] = \"m.key.verification.start\";\n EventType[\"KeyVerificationCancel\"] = \"m.key.verification.cancel\";\n EventType[\"KeyVerificationMac\"] = \"m.key.verification.mac\";\n EventType[\"KeyVerificationDone\"] = \"m.key.verification.done\";\n EventType[\"KeyVerificationKey\"] = \"m.key.verification.key\";\n EventType[\"KeyVerificationAccept\"] = \"m.key.verification.accept\";\n // Not used directly - see READY_TYPE in VerificationRequest.\n EventType[\"KeyVerificationReady\"] = \"m.key.verification.ready\";\n // use of this is discouraged https://matrix.org/docs/spec/client_server/r0.6.1#m-room-message-feedback\n EventType[\"RoomMessageFeedback\"] = \"m.room.message.feedback\";\n EventType[\"Reaction\"] = \"m.reaction\";\n EventType[\"PollStart\"] = \"org.matrix.msc3381.poll.start\";\n // Room ephemeral events\n EventType[\"Typing\"] = \"m.typing\";\n EventType[\"Receipt\"] = \"m.receipt\";\n EventType[\"Presence\"] = \"m.presence\";\n // Room account_data events\n EventType[\"FullyRead\"] = \"m.fully_read\";\n EventType[\"Tag\"] = \"m.tag\";\n EventType[\"SpaceOrder\"] = \"org.matrix.msc3230.space_order\";\n // MSC3230\n EventType[\"MarkedUnread\"] = \"m.marked_unread\";\n // User account_data events\n EventType[\"PushRules\"] = \"m.push_rules\";\n EventType[\"Direct\"] = \"m.direct\";\n EventType[\"IgnoredUserList\"] = \"m.ignored_user_list\";\n EventType[\"InvitePermissionConfig\"] = \"m.invite_permission_config\";\n // MSC4380\n // to_device events\n EventType[\"RoomKey\"] = \"m.room_key\";\n EventType[\"RoomKeyRequest\"] = \"m.room_key_request\";\n EventType[\"ForwardedRoomKey\"] = \"m.forwarded_room_key\";\n EventType[\"Dummy\"] = \"m.dummy\";\n EventType[\"SecretRequest\"] = \"m.secret.request\";\n EventType[\"SecretSend\"] = \"m.secret.send\";\n // Group call events\n EventType[\"GroupCallPrefix\"] = \"org.matrix.msc3401.call\";\n EventType[\"GroupCallMemberPrefix\"] = \"org.matrix.msc3401.call.member\";\n // MatrixRTC events\n EventType[\"RTCMembership\"] = \"org.matrix.msc4143.rtc.member\";\n EventType[\"CallNotify\"] = \"org.matrix.msc4075.call.notify\";\n EventType[\"RTCNotification\"] = \"org.matrix.msc4075.rtc.notification\";\n EventType[\"RTCDecline\"] = \"org.matrix.msc4310.rtc.decline\";\n // Policy servers\n EventType[\"RoomPolicy\"] = \"org.matrix.msc4284.policy\";\n // Retention\n EventType[\"RetentionPolicy\"] = \"m.room.retention\";\n EventType[\"RetentionPolicyUnstable\"] = \"org.matrix.msc1763.retention\";\n return EventType;\n}({});\nexport var RelationType = /*#__PURE__*/function (RelationType) {\n RelationType[\"Annotation\"] = \"m.annotation\";\n RelationType[\"Replace\"] = \"m.replace\";\n RelationType[\"Reference\"] = \"m.reference\";\n // Don't use this yet: it's only the stable version. The code still assumes we support the unstable prefix and,\n // moreover, our tests currently use the unstable prefix. Use THREAD_RELATION_TYPE.name.\n // Once we support *only* the stable prefix, THREAD_RELATION_TYPE can die and we can switch to this.\n RelationType[\"Thread\"] = \"m.thread\";\n return RelationType;\n}({});\nexport var MsgType = /*#__PURE__*/function (MsgType) {\n MsgType[\"Text\"] = \"m.text\";\n MsgType[\"Emote\"] = \"m.emote\";\n MsgType[\"Notice\"] = \"m.notice\";\n MsgType[\"Image\"] = \"m.image\";\n MsgType[\"File\"] = \"m.file\";\n MsgType[\"Audio\"] = \"m.audio\";\n MsgType[\"Location\"] = \"m.location\";\n MsgType[\"Video\"] = \"m.video\";\n MsgType[\"KeyVerificationRequest\"] = \"m.key.verification.request\";\n return MsgType;\n}({});\nexport var RoomCreateTypeField = \"type\";\nexport var RoomType = /*#__PURE__*/function (RoomType) {\n RoomType[\"Space\"] = \"m.space\";\n RoomType[\"UnstableCall\"] = \"org.matrix.msc3417.call\";\n RoomType[\"ElementVideo\"] = \"io.element.video\";\n return RoomType;\n}({});\nexport var ToDeviceMessageId = \"org.matrix.msgid\";\n\n/**\n * Identifier for an [MSC3088](https://github.com/matrix-org/matrix-doc/pull/3088)\n * room purpose. Note that this reference is UNSTABLE and subject to breaking changes,\n * including its eventual removal.\n */\nexport var UNSTABLE_MSC3088_PURPOSE = new UnstableValue(\"m.room.purpose\", \"org.matrix.msc3088.purpose\");\n\n/**\n * Enabled flag for an [MSC3088](https://github.com/matrix-org/matrix-doc/pull/3088)\n * room purpose. Note that this reference is UNSTABLE and subject to breaking changes,\n * including its eventual removal.\n */\nexport var UNSTABLE_MSC3088_ENABLED = new UnstableValue(\"m.enabled\", \"org.matrix.msc3088.enabled\");\n\n/**\n * Subtype for an [MSC3089](https://github.com/matrix-org/matrix-doc/pull/3089) space-room.\n * Note that this reference is UNSTABLE and subject to breaking changes, including its\n * eventual removal.\n */\nexport var UNSTABLE_MSC3089_TREE_SUBTYPE = new UnstableValue(\"m.data_tree\", \"org.matrix.msc3089.data_tree\");\n\n/**\n * Leaf type for an event in a [MSC3089](https://github.com/matrix-org/matrix-doc/pull/3089) space-room.\n * Note that this reference is UNSTABLE and subject to breaking changes, including its\n * eventual removal.\n */\nexport var UNSTABLE_MSC3089_LEAF = new UnstableValue(\"m.leaf\", \"org.matrix.msc3089.leaf\");\n\n/**\n * Branch (Leaf Reference) type for the index approach in a\n * [MSC3089](https://github.com/matrix-org/matrix-doc/pull/3089) space-room. Note that this reference is\n * UNSTABLE and subject to breaking changes, including its eventual removal.\n */\nexport var UNSTABLE_MSC3089_BRANCH = new UnstableValue(\"m.branch\", \"org.matrix.msc3089.branch\");\n\n/**\n * Marker event type to point back at imported historical content in a room. See\n * [MSC2716](https://github.com/matrix-org/matrix-spec-proposals/pull/2716).\n * Note that this reference is UNSTABLE and subject to breaking changes,\n * including its eventual removal.\n */\nexport var UNSTABLE_MSC2716_MARKER = new UnstableValue(\"m.room.marker\", \"org.matrix.msc2716.marker\");\n\n/**\n * Name of the request property for relation based redactions.\n * {@link https://github.com/matrix-org/matrix-spec-proposals/pull/3912}\n */\nexport var MSC3912_RELATION_BASED_REDACTIONS_PROP = new UnstableValue(\"with_rel_types\", \"org.matrix.msc3912.with_relations\");\n\n/**\n * Functional members type for declaring a purpose of room members (e.g. helpful bots).\n * Note that this reference is UNSTABLE and subject to breaking changes, including its\n * eventual removal.\n *\n * Schema (TypeScript):\n * ```\n * {\n * service_members?: string[]\n * }\n * ```\n *\n * @example\n * ```\n * {\n * \"service_members\": [\n * \"@helperbot:localhost\",\n * \"@reminderbot:alice.tdl\"\n * ]\n * }\n * ```\n */\nexport var UNSTABLE_ELEMENT_FUNCTIONAL_USERS = new UnstableValue(\"io.element.functional_members\", \"io.element.functional_members\");\n\n/**\n * A type of message that affects visibility of a message,\n * as per https://github.com/matrix-org/matrix-doc/pull/3531\n *\n * @experimental\n */\nexport var EVENT_VISIBILITY_CHANGE_TYPE = new UnstableValue(\"m.visibility\", \"org.matrix.msc3531.visibility\");\n\n/**\n * https://github.com/matrix-org/matrix-doc/pull/3881\n *\n * @experimental\n */\nexport var PUSHER_ENABLED = new UnstableValue(\"enabled\", \"org.matrix.msc3881.enabled\");\n\n/**\n * https://github.com/matrix-org/matrix-doc/pull/3881\n *\n * @experimental\n */\nexport var PUSHER_DEVICE_ID = new UnstableValue(\"device_id\", \"org.matrix.msc3881.device_id\");\n\n/**\n * https://github.com/matrix-org/matrix-doc/pull/3890\n *\n * @experimental\n */\nexport var LOCAL_NOTIFICATION_SETTINGS_PREFIX = new UnstableValue(\"m.local_notification_settings\", \"org.matrix.msc3890.local_notification_settings\");\n\n/**\n * https://github.com/matrix-org/matrix-doc/pull/4023\n *\n * @experimental\n */\nexport var UNSIGNED_THREAD_ID_FIELD = new UnstableValue(\"thread_id\", \"org.matrix.msc4023.thread_id\");\n\n/**\n * https://github.com/matrix-org/matrix-spec-proposals/pull/4115\n *\n * @experimental\n */\nexport var UNSIGNED_MEMBERSHIP_FIELD = new NamespacedValue(\"membership\", \"io.element.msc4115.membership\");\n\n/**\n * Mapped type from event type to content type for all specified non-state room events.\n */\n\n/**\n * Mapped type from event type to content type for all specified room state events.\n */\n\n/**\n * Mapped type from event type to content type for all specified room-specific account_data events.\n */\n\n/**\n * Mapped type from event type to content type for all specified global account_data events.\n */\n\n/**\n * Subset of AccountDataEvents, excluding events specified in https://spec.matrix.org/v1.17/client-server-api/#server-behaviour-12\n */\n\n/**\n * Mapped type from event type to content type for all specified global events encrypted by secret storage.\n *\n * See https://spec.matrix.org/v1.13/client-server-api/#msecret_storagev1aes-hmac-sha2-1\n */\n//# sourceMappingURL=event.js.map","/*\nCopyright 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Well-known values (from the spec or MSCs) that are allowed in the\n * {@link Membership} type.\n */\nexport var KnownMembership = /*#__PURE__*/function (KnownMembership) {\n /**\n * The user has been banned from the room, and is no longer allowed to join\n * it until they are un-banned from the room (by having their membership\n * state set to a value other than ban).\n */\n KnownMembership[\"Ban\"] = \"ban\";\n /**\n * The user has been invited to join a room, but has not yet joined it.\n * They may not participate in the room until they join.\n * */\n KnownMembership[\"Invite\"] = \"invite\";\n /**\n * The user has joined the room (possibly after accepting an invite), and\n * may participate in it.\n */\n KnownMembership[\"Join\"] = \"join\";\n /**\n * The user has knocked on the room, requesting permission to participate.\n * They may not participate in the room until they join.\n */\n KnownMembership[\"Knock\"] = \"knock\";\n /**\n * The user was once joined to the room, but has since left (possibly by\n * choice, or possibly by being kicked).\n */\n KnownMembership[\"Leave\"] = \"leave\";\n return KnownMembership;\n}({});\n\n/**\n * The membership state for a user in a room [1]. A value from\n * {@link KnownMembership} should be used where available, but all string values\n * are allowed to provide flexibility for upcoming spec changes or proposals.\n *\n * [1] https://spec.matrix.org/latest/client-server-api/#mroommember\n */\n//# sourceMappingURL=membership.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { getHttpUriForMxc } from \"../content-repo.js\";\nimport { removeDirectionOverrideChars, removeHiddenChars } from \"../utils.js\";\nimport { logger } from \"../logger.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { KnownMembership } from \"../@types/membership.js\";\nexport var RoomMemberEvent = /*#__PURE__*/function (RoomMemberEvent) {\n RoomMemberEvent[\"Membership\"] = \"RoomMember.membership\";\n RoomMemberEvent[\"Name\"] = \"RoomMember.name\";\n RoomMemberEvent[\"PowerLevel\"] = \"RoomMember.powerLevel\";\n RoomMemberEvent[\"Typing\"] = \"RoomMember.typing\";\n return RoomMemberEvent;\n}({});\nexport class RoomMember extends TypedEventEmitter {\n /**\n * Construct a new room member.\n *\n * @param roomId - The room ID of the member.\n * @param userId - The user ID of the member.\n */\n constructor(roomId, userId) {\n super();\n this.roomId = roomId;\n this.userId = userId;\n _defineProperty(this, \"_isOutOfBand\", false);\n _defineProperty(this, \"modified\", -1);\n _defineProperty(this, \"requestedProfileInfo\", false);\n // used by sync.ts\n // XXX these should be read-only\n /**\n * True if the room member is currently typing.\n */\n _defineProperty(this, \"typing\", false);\n /**\n * The human-readable name for this room member. Similar to {@link rawDisplayName}, but\n * disambiguated with a suffix of \" (\\@user_id:matrix.org)\" if another member shares the\n * same displayname.\n */\n _defineProperty(this, \"name\", void 0);\n /**\n * The ambiguous displayname of this room member, with some preprocessing:\n *\n * * Direction override characters (RTO and LRO) are removed.\n * * If the displayname is empty, or contains only blank, non-printing, or diacritcic characters, it is\n * replaced with the user ID.\n */\n _defineProperty(this, \"rawDisplayName\", void 0);\n /**\n * The power level for this room member.\n */\n _defineProperty(this, \"powerLevel\", 0);\n /**\n * The User object for this room member, if one exists.\n */\n _defineProperty(this, \"user\", void 0);\n /**\n * The membership state for this room member e.g. 'join'.\n */\n _defineProperty(this, \"membership\", void 0);\n /**\n * True if the member's name is disambiguated.\n */\n _defineProperty(this, \"disambiguate\", false);\n /**\n * The events describing this RoomMember.\n */\n _defineProperty(this, \"events\", {});\n this.name = userId;\n this.rawDisplayName = userId;\n this.updateModifiedTime();\n }\n\n /**\n * Mark the member as coming from a channel that is not sync\n */\n markOutOfBand() {\n this._isOutOfBand = true;\n }\n\n /**\n * @returns does the member come from a channel that is not sync?\n * This is used to store the member seperately\n * from the sync state so it available across browser sessions.\n */\n isOutOfBand() {\n return this._isOutOfBand;\n }\n\n /**\n * Update this room member's membership event. May fire \"RoomMember.name\" if\n * this event updates this member's name.\n * @param event - The `m.room.member` event\n * @param roomState - Optional. The room state to take into account\n * when calculating (e.g. for disambiguating users with the same name).\n *\n * @remarks\n * Fires {@link RoomMemberEvent.Name}\n * Fires {@link RoomMemberEvent.Membership}\n */\n setMembershipEvent(event, roomState) {\n var _event$getDirectional, _event$getDirectional2;\n var displayName = (_event$getDirectional = event.getDirectionalContent().displayname) !== null && _event$getDirectional !== void 0 ? _event$getDirectional : \"\";\n if (event.getType() !== EventType.RoomMember) {\n return;\n }\n this._isOutOfBand = false;\n this.events.member = event;\n var oldMembership = this.membership;\n this.membership = event.getDirectionalContent().membership;\n if (this.membership === undefined) {\n // logging to diagnose https://github.com/vector-im/element-web/issues/20962\n // (logs event content, although only of membership events)\n logger.trace(\"membership event with membership undefined (forwardLooking: \".concat(event.forwardLooking, \")!\"), event.getContent(), \"prevcontent is \", event.getPrevContent());\n }\n this.disambiguate = shouldDisambiguate(this.userId, displayName, roomState);\n var oldName = this.name;\n this.name = calculateDisplayName(this.userId, displayName, this.disambiguate);\n\n // not quite raw: we strip direction override chars so it can safely be inserted into\n // blocks of text without breaking the text direction\n this.rawDisplayName = removeDirectionOverrideChars((_event$getDirectional2 = event.getDirectionalContent().displayname) !== null && _event$getDirectional2 !== void 0 ? _event$getDirectional2 : \"\");\n if (!this.rawDisplayName || !removeHiddenChars(this.rawDisplayName)) {\n this.rawDisplayName = this.userId;\n }\n if (oldMembership !== this.membership) {\n this.updateModifiedTime();\n this.emit(RoomMemberEvent.Membership, event, this, oldMembership);\n }\n if (oldName !== this.name) {\n this.updateModifiedTime();\n this.emit(RoomMemberEvent.Name, event, this, oldName);\n }\n }\n\n /**\n * Recalculate the disambiguation flag for this member based on current room state.\n * This should be called when another member's display name changes and may affect\n * whether this member needs disambiguation.\n *\n * @param roomState - The current room state to use for disambiguation check\n * @returns true if the member's name changed as a result of the disambiguation update\n *\n * @remarks\n * Fires {@link RoomMemberEvent.Name}\n */\n recalculateDisambiguatedName(roomState) {\n var _this$events$member$g;\n if (!this.events.member) {\n return false;\n }\n var displayName = (_this$events$member$g = this.events.member.getDirectionalContent().displayname) !== null && _this$events$member$g !== void 0 ? _this$events$member$g : \"\";\n var newDisambiguate = shouldDisambiguate(this.userId, displayName, roomState);\n if (newDisambiguate === this.disambiguate) {\n return false;\n }\n this.disambiguate = newDisambiguate;\n var oldName = this.name;\n this.name = calculateDisplayName(this.userId, displayName, this.disambiguate);\n if (oldName !== this.name) {\n this.updateModifiedTime();\n this.emit(RoomMemberEvent.Name, this.events.member, this, oldName);\n return true;\n }\n return false;\n }\n\n /**\n * Update this room member's power level event. Will fire\n * \"RoomMember.powerLevel\" if the new power level is different\n * @param powerLevel - The power level of the room member.\n *\n * @remarks\n * Fires {@link RoomMemberEvent.PowerLevel}\n */\n setPowerLevel(powerLevel, powerLevelEvent) {\n var oldPowerLevel = this.powerLevel;\n this.powerLevel = powerLevel;\n if (oldPowerLevel !== this.powerLevel) {\n this.updateModifiedTime();\n this.emit(RoomMemberEvent.PowerLevel, powerLevelEvent, this);\n }\n }\n\n /**\n * Update this room member's typing event. May fire \"RoomMember.typing\" if\n * this event changes this member's typing state.\n * @param event - The typing event\n *\n * @remarks\n * Fires {@link RoomMemberEvent.Typing}\n */\n setTypingEvent(event) {\n if (event.getType() !== \"m.typing\") {\n return;\n }\n var oldTyping = this.typing;\n this.typing = false;\n var typingList = event.getContent().user_ids;\n if (!Array.isArray(typingList)) {\n // malformed event :/ bail early. TODO: whine?\n return;\n }\n if (typingList.indexOf(this.userId) !== -1) {\n this.typing = true;\n }\n if (oldTyping !== this.typing) {\n this.updateModifiedTime();\n this.emit(RoomMemberEvent.Typing, event, this);\n }\n }\n\n /**\n * Update the last modified time to the current time.\n */\n updateModifiedTime() {\n this.modified = Date.now();\n }\n\n /**\n * Get the timestamp when this RoomMember was last updated. This timestamp is\n * updated when properties on this RoomMember are updated.\n * It is updated <i>before</i> firing events.\n * @returns The timestamp\n */\n getLastModifiedTime() {\n return this.modified;\n }\n isKicked() {\n return this.membership === KnownMembership.Leave && this.events.member !== undefined && this.events.member.getSender() !== this.events.member.getStateKey();\n }\n\n /**\n * If this member was invited with the is_direct flag set, return\n * the user that invited this member\n * @returns user id of the inviter\n */\n getDMInviter() {\n // when not available because that room state hasn't been loaded in,\n // we don't really know, but more likely to not be a direct chat\n if (this.events.member) {\n // TODO: persist the is_direct flag on the member as more member events\n // come in caused by displayName changes.\n\n // the is_direct flag is set on the invite member event.\n // This is copied on the prev_content section of the join member event\n // when the invite is accepted.\n\n var memberEvent = this.events.member;\n var memberContent = memberEvent.getContent();\n var inviteSender = memberEvent.getSender();\n if (memberContent.membership === KnownMembership.Join) {\n memberContent = memberEvent.getPrevContent();\n inviteSender = memberEvent.getUnsigned().prev_sender;\n }\n if (memberContent.membership === KnownMembership.Invite && memberContent.is_direct) {\n return inviteSender;\n }\n }\n }\n\n /**\n * Get the avatar URL for a room member.\n * @param baseUrl - The base homeserver URL See\n * {@link MatrixClient#getHomeserverUrl}.\n * @param width - The desired width of the thumbnail.\n * @param height - The desired height of the thumbnail.\n * @param resizeMethod - The thumbnail resize method to use, either\n * \"crop\" or \"scale\".\n * @param allowDefault - (optional) Passing false causes this method to\n * return null if the user has no avatar image. Otherwise, a default image URL\n * will be returned. Default: true. (Deprecated)\n * @param allowDirectLinks - (optional) If true, the avatar URL will be\n * returned even if it is a direct hyperlink rather than a matrix content URL.\n * If false, any non-matrix content URLs will be ignored. Setting this option to\n * true will expose URLs that, if fetched, will leak information about the user\n * to anyone who they share a room with.\n * @param useAuthentication - (optional) If true, the caller supports authenticated\n * media and wants an authentication-required URL. Note that server support for\n * authenticated media will not be checked - it is the caller's responsibility\n * to do so before calling this function. Note also that useAuthentication\n * implies allowRedirects. Defaults to false (unauthenticated endpoints).\n * @returns the avatar URL or null.\n */\n getAvatarUrl(baseUrl, width, height, resizeMethod) {\n var allowDefault = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var allowDirectLinks = arguments.length > 5 ? arguments[5] : undefined;\n var useAuthentication = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;\n var rawUrl = this.getMxcAvatarUrl();\n if (!rawUrl && !allowDefault) {\n return null;\n }\n var httpUrl = getHttpUriForMxc(baseUrl, rawUrl, width, height, resizeMethod, allowDirectLinks, undefined, useAuthentication);\n if (httpUrl) {\n return httpUrl;\n }\n return null;\n }\n\n /**\n * get the mxc avatar url, either from a state event, or from a lazily loaded member\n * @returns the mxc avatar url\n */\n getMxcAvatarUrl() {\n if (this.events.member) {\n return this.events.member.getDirectionalContent().avatar_url;\n } else if (this.user) {\n return this.user.avatarUrl;\n }\n }\n}\nexport var MXID_PATTERN = /@.+:.+/;\nvar LTR_RTL_PATTERN = /[\\u200E\\u200F\\u202A-\\u202F]/;\nfunction shouldDisambiguate(selfUserId, displayName, roomState) {\n if (!displayName || displayName === selfUserId) return false;\n if (!roomState) return false;\n var strippedDisplayName = removeHiddenChars(displayName);\n\n // First check if the displayname is something we consider truthy\n // after stripping it of zero width characters and padding spaces\n if (!strippedDisplayName) return false;\n\n // Next check if the name contains something that look like a mxid\n // If it does, it may be someone trying to impersonate someone else\n // Show full mxid in this case\n if (MXID_PATTERN.test(strippedDisplayName)) return true;\n\n // Also show mxid if the display name contains any LTR/RTL characters as these\n // make it very difficult for us to find similar *looking* display names\n // E.g \"Mark\" could be cloned by writing \"kraM\" but in RTL.\n if (LTR_RTL_PATTERN.test(displayName)) return true;\n\n // Also show mxid if there are other people with the same or similar\n // displayname, after hidden character removal.\n var userIds = roomState.getUserIdsWithDisplayName(displayName);\n if (userIds.some(u => u !== selfUserId)) return true;\n return false;\n}\nfunction calculateDisplayName(selfUserId, displayName, disambiguate) {\n if (!displayName || displayName === selfUserId) return selfUserId;\n if (disambiguate) return removeDirectionOverrideChars(displayName) + \" (\" + selfUserId + \")\";\n\n // First check if the displayname is something we consider truthy\n // after stripping it of zero width characters and padding spaces\n if (!removeHiddenChars(displayName)) return selfUserId;\n\n // We always strip the direction override characters (LRO and RLO).\n // These override the text direction for all subsequent characters\n // in the paragraph so if display names contained these, they'd\n // need to be wrapped in something to prevent this from leaking out\n // (which we can do in HTML but not text) or we'd need to add\n // control characters to the string to reset any overrides (eg.\n // adding PDF characters at the end). As far as we can see,\n // there should be no reason these would be necessary - rtl display\n // names should flip into the correct direction automatically based on\n // the characters, and you can still embed rtl in ltr or vice versa\n // with the embed chars or marker chars.\n return removeDirectionOverrideChars(displayName);\n}\n//# sourceMappingURL=room-member.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NamespacedMap = void 0;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * A `Map` implementation which accepts a NamespacedValue as a key, and arbitrary value. The\n * namespaced value must be a string type.\n */\nvar NamespacedMap = /*#__PURE__*/function () {\n // protected to make tests happy for access\n\n /**\n * Creates a new map with optional seed data.\n * @param {Array<[NS, V]>} initial The seed data.\n */\n function NamespacedMap(initial) {\n _classCallCheck(this, NamespacedMap);\n\n _defineProperty(this, \"internalMap\", new Map());\n\n if (initial) {\n var _iterator = _createForOfIteratorHelper(initial),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var val = _step.value;\n this.set(val[0], val[1]);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n }\n /**\n * Gets a value from the map. If the value does not exist under\n * either namespace option, falsy is returned.\n * @param {NS} key The key.\n * @returns {Optional<V>} The value, or falsy.\n */\n\n\n _createClass(NamespacedMap, [{\n key: \"get\",\n value: function get(key) {\n if (key.name && this.internalMap.has(key.name)) {\n return this.internalMap.get(key.name);\n }\n\n if (key.altName && this.internalMap.has(key.altName)) {\n return this.internalMap.get(key.altName);\n }\n\n return null;\n }\n /**\n * Sets a value in the map.\n * @param {NS} key The key.\n * @param {V} val The value.\n */\n\n }, {\n key: \"set\",\n value: function set(key, val) {\n if (key.name) {\n this.internalMap.set(key.name, val);\n }\n\n if (key.altName) {\n this.internalMap.set(key.altName, val);\n }\n }\n /**\n * Determines if any of the valid namespaced values are present\n * in the map.\n * @param {NS} key The key.\n * @returns {boolean} True if present.\n */\n\n }, {\n key: \"has\",\n value: function has(key) {\n return !!this.get(key);\n }\n /**\n * Removes all the namespaced values from the map.\n * @param {NS} key The key.\n */\n\n }, {\n key: \"delete\",\n value: function _delete(key) {\n if (key.name) {\n this.internalMap[\"delete\"](key.name);\n }\n\n if (key.altName) {\n this.internalMap[\"delete\"](key.altName);\n }\n }\n /**\n * Determines if the map contains a specific namespaced value\n * instead of the parent NS type.\n * @param {string} key The key.\n * @returns {boolean} True if present.\n */\n\n }, {\n key: \"hasNamespaced\",\n value: function hasNamespaced(key) {\n return this.internalMap.has(key);\n }\n /**\n * Gets a specific namespaced value from the map instead of the\n * parent NS type. Returns falsy if not found.\n * @param {string} key The key.\n * @returns {Optional<V>} The value, or falsy.\n */\n\n }, {\n key: \"getNamespaced\",\n value: function getNamespaced(key) {\n return this.internalMap.get(key);\n }\n }]);\n\n return NamespacedMap;\n}();\n\nexports.NamespacedMap = NamespacedMap;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.InvalidEventError = void 0;\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Thrown when an event is unforgivably unparsable.\n */\nvar InvalidEventError = /*#__PURE__*/function (_Error) {\n _inherits(InvalidEventError, _Error);\n\n var _super = _createSuper(InvalidEventError);\n\n function InvalidEventError(message) {\n _classCallCheck(this, InvalidEventError);\n\n return _super.call(this, message);\n }\n\n return _createClass(InvalidEventError);\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nexports.InvalidEventError = InvalidEventError;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ExtensibleEvent = void 0;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*\nCopyright 2021 - 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Represents an Extensible Event in Matrix.\n */\nvar ExtensibleEvent = /*#__PURE__*/function () {\n function ExtensibleEvent(wireFormat) {\n _classCallCheck(this, ExtensibleEvent);\n\n this.wireFormat = wireFormat;\n }\n /**\n * Shortcut to wireFormat.content\n */\n\n\n _createClass(ExtensibleEvent, [{\n key: \"wireContent\",\n get: function get() {\n return this.wireFormat.content;\n }\n /**\n * Serializes the event into a format which can be used to send the\n * event to the room.\n * @returns {IPartialEvent<object>} The serialized event.\n */\n\n }]);\n\n return ExtensibleEvent;\n}();\n\nexports.ExtensibleEvent = ExtensibleEvent;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isOptionalAString = isOptionalAString;\nexports.isProvided = isProvided;\n\n/*\nCopyright 2021 - 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Represents an optional type: can either be T or a falsy value.\n */\n\n/**\n * Determines if the given optional string is a defined string.\n * @param {Optional<string>} s The input string.\n * @returns {boolean} True if the input is a defined string.\n */\nfunction isOptionalAString(s) {\n return isProvided(s) && typeof s === 'string';\n}\n/**\n * Determines if the given optional was provided a value.\n * @param {Optional<T>} s The optional to test.\n * @returns {boolean} True if the value is defined.\n */\n\n\nfunction isProvided(s) {\n return s !== null && s !== undefined;\n}\n/**\n * Represents either just T1, just T2, or T1 and T2 mixed.\n */","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.UnstableValue = exports.NamespacedValue = void 0;\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*\nCopyright 2021 - 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Represents a simple Matrix namespaced value. This will assume that if a stable prefix\n * is provided that the stable prefix should be used when representing the identifier.\n */\nvar NamespacedValue = /*#__PURE__*/function () {\n // Stable is optional, but one of the two parameters is required, hence the weird-looking types.\n // Goal is to have developers explicitly say there is no stable value (if applicable).\n function NamespacedValue(stable, unstable) {\n _classCallCheck(this, NamespacedValue);\n\n this.stable = stable;\n this.unstable = unstable;\n\n if (!this.unstable && !this.stable) {\n throw new Error(\"One of stable or unstable values must be supplied\");\n }\n }\n\n _createClass(NamespacedValue, [{\n key: \"name\",\n get: function get() {\n if (this.stable) {\n return this.stable;\n }\n\n return this.unstable;\n }\n }, {\n key: \"altName\",\n get: function get() {\n if (!this.stable) {\n return null;\n }\n\n return this.unstable;\n }\n }, {\n key: \"matches\",\n value: function matches(val) {\n return !!this.name && this.name === val || !!this.altName && this.altName === val;\n } // this desperately wants https://github.com/microsoft/TypeScript/pull/26349 at the top level of the class\n // so we can instantiate `NamespacedValue<string, _, _>` as a default type for that namespace.\n\n }, {\n key: \"findIn\",\n value: function findIn(obj) {\n var val;\n\n if (this.name) {\n val = obj === null || obj === void 0 ? void 0 : obj[this.name];\n }\n\n if (!val && this.altName) {\n val = obj === null || obj === void 0 ? void 0 : obj[this.altName];\n }\n\n return val;\n }\n }, {\n key: \"includedIn\",\n value: function includedIn(arr) {\n var included = false;\n\n if (this.name) {\n included = arr.includes(this.name);\n }\n\n if (!included && this.altName) {\n included = arr.includes(this.altName);\n }\n\n return included;\n }\n }]);\n\n return NamespacedValue;\n}();\n/**\n * Represents a namespaced value which prioritizes the unstable value over the stable\n * value.\n */\n\n\nexports.NamespacedValue = NamespacedValue;\n\nvar UnstableValue = /*#__PURE__*/function (_NamespacedValue) {\n _inherits(UnstableValue, _NamespacedValue);\n\n var _super = _createSuper(UnstableValue);\n\n // Note: Constructor difference is that `unstable` is *required*.\n function UnstableValue(stable, unstable) {\n var _this;\n\n _classCallCheck(this, UnstableValue);\n\n _this = _super.call(this, stable, unstable);\n\n if (!_this.unstable) {\n throw new Error(\"Unstable value must be supplied\");\n }\n\n return _this;\n }\n\n _createClass(UnstableValue, [{\n key: \"name\",\n get: function get() {\n return this.unstable;\n }\n }, {\n key: \"altName\",\n get: function get() {\n return this.stable;\n }\n }]);\n\n return UnstableValue;\n}(NamespacedValue);\n\nexports.UnstableValue = UnstableValue;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.M_TEXT = exports.M_NOTICE = exports.M_MESSAGE = exports.M_HTML = exports.M_EMOTE = void 0;\n\nvar _NamespacedValue = require(\"../NamespacedValue\");\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * The namespaced value for m.message\n */\nvar M_MESSAGE = new _NamespacedValue.UnstableValue(\"m.message\", \"org.matrix.msc1767.message\");\n/**\n * An m.message event rendering\n */\n\nexports.M_MESSAGE = M_MESSAGE;\n\n/**\n * The namespaced value for m.text\n */\nvar M_TEXT = new _NamespacedValue.UnstableValue(\"m.text\", \"org.matrix.msc1767.text\");\n/**\n * The content for an m.text event\n */\n\nexports.M_TEXT = M_TEXT;\n\n/**\n * The namespaced value for m.html\n */\nvar M_HTML = new _NamespacedValue.UnstableValue(\"m.html\", \"org.matrix.msc1767.html\");\n/**\n * The content for an m.html event\n */\n\nexports.M_HTML = M_HTML;\n\n/**\n * The namespaced value for m.emote\n */\nvar M_EMOTE = new _NamespacedValue.UnstableValue(\"m.emote\", \"org.matrix.msc1767.emote\");\n/**\n * The event definition for an m.emote event (in content)\n */\n\nexports.M_EMOTE = M_EMOTE;\n\n/**\n * The namespaced value for m.notice\n */\nvar M_NOTICE = new _NamespacedValue.UnstableValue(\"m.notice\", \"org.matrix.msc1767.notice\");\n/**\n * The event definition for an m.notice event (in content)\n */\n\nexports.M_NOTICE = M_NOTICE;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isEventTypeSame = isEventTypeSame;\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Represents a potentially namespaced event type.\n */\n\n/**\n * Determines if two event types are the same, including namespaces.\n * @param {EventType} given The given event type. This will be compared\n * against the expected type.\n * @param {EventType} expected The expected event type.\n * @returns {boolean} True if the given type matches the expected type.\n */\nfunction isEventTypeSame(given, expected) {\n if (typeof given === \"string\") {\n if (typeof expected === \"string\") {\n return expected === given;\n } else {\n return expected.matches(given);\n }\n } else {\n if (typeof expected === \"string\") {\n return given.matches(expected);\n } else {\n var expectedNs = expected;\n var givenNs = given;\n return expectedNs.matches(givenNs.name) || expectedNs.matches(givenNs.altName);\n }\n }\n}","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MessageEvent = void 0;\n\nvar _ExtensibleEvent2 = require(\"./ExtensibleEvent\");\n\nvar _types = require(\"../types\");\n\nvar _InvalidEventError = require(\"../InvalidEventError\");\n\nvar _message_types = require(\"./message_types\");\n\nvar _events = require(\"../utility/events\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Represents a message event. Message events are the simplest form of event with\n * just text (optionally of different mimetypes, like HTML).\n *\n * Message events can additionally be an Emote or Notice, though typically those\n * are represented as EmoteEvent and NoticeEvent respectively.\n */\nvar MessageEvent = /*#__PURE__*/function (_ExtensibleEvent) {\n _inherits(MessageEvent, _ExtensibleEvent);\n\n var _super = _createSuper(MessageEvent);\n\n /**\n * The default text for the event.\n */\n\n /**\n * The default HTML for the event, if provided.\n */\n\n /**\n * All the different renderings of the message. Note that this is the same\n * format as an m.message body but may contain elements not found directly\n * in the event content: this is because this is interpreted based off the\n * other information available in the event.\n */\n\n /**\n * Creates a new MessageEvent from a pure format. Note that the event is\n * *not* parsed here: it will be treated as a literal m.message primary\n * typed event.\n * @param {IPartialEvent<M_MESSAGE_EVENT_CONTENT>} wireFormat The event.\n */\n function MessageEvent(wireFormat) {\n var _this;\n\n _classCallCheck(this, MessageEvent);\n\n _this = _super.call(this, wireFormat);\n\n _defineProperty(_assertThisInitialized(_this), \"text\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"html\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"renderings\", void 0);\n\n var mmessage = _message_types.M_MESSAGE.findIn(_this.wireContent);\n\n var mtext = _message_types.M_TEXT.findIn(_this.wireContent);\n\n var mhtml = _message_types.M_HTML.findIn(_this.wireContent);\n\n if ((0, _types.isProvided)(mmessage)) {\n if (!Array.isArray(mmessage)) {\n throw new _InvalidEventError.InvalidEventError(\"m.message contents must be an array\");\n }\n\n var text = mmessage.find(function (r) {\n return !(0, _types.isProvided)(r.mimetype) || r.mimetype === \"text/plain\";\n });\n var html = mmessage.find(function (r) {\n return r.mimetype === \"text/html\";\n });\n if (!text) throw new _InvalidEventError.InvalidEventError(\"m.message is missing a plain text representation\");\n _this.text = text.body;\n _this.html = html === null || html === void 0 ? void 0 : html.body;\n _this.renderings = mmessage;\n } else if ((0, _types.isOptionalAString)(mtext)) {\n _this.text = mtext;\n _this.html = mhtml;\n _this.renderings = [{\n body: mtext,\n mimetype: \"text/plain\"\n }];\n\n if (_this.html) {\n _this.renderings.push({\n body: _this.html,\n mimetype: \"text/html\"\n });\n }\n } else {\n throw new _InvalidEventError.InvalidEventError(\"Missing textual representation for event\");\n }\n\n return _this;\n }\n /**\n * Gets whether this message is considered an \"emote\". Note that a message\n * might be an emote and notice at the same time: while technically possible,\n * the event should be interpreted as one or the other.\n */\n\n\n _createClass(MessageEvent, [{\n key: \"isEmote\",\n get: function get() {\n return _message_types.M_EMOTE.matches(this.wireFormat.type) || (0, _types.isProvided)(_message_types.M_EMOTE.findIn(this.wireFormat.content));\n }\n /**\n * Gets whether this message is considered a \"notice\". Note that a message\n * might be an emote and notice at the same time: while technically possible,\n * the event should be interpreted as one or the other.\n */\n\n }, {\n key: \"isNotice\",\n get: function get() {\n return _message_types.M_NOTICE.matches(this.wireFormat.type) || (0, _types.isProvided)(_message_types.M_NOTICE.findIn(this.wireFormat.content));\n }\n }, {\n key: \"isEquivalentTo\",\n value: function isEquivalentTo(primaryEventType) {\n return (0, _events.isEventTypeSame)(primaryEventType, _message_types.M_MESSAGE);\n }\n }, {\n key: \"serializeMMessageOnly\",\n value: function serializeMMessageOnly() {\n var messageRendering = _defineProperty({}, _message_types.M_MESSAGE.name, this.renderings); // Use the shorthand if it's just a simple text event\n\n\n if (this.renderings.length === 1) {\n var mime = this.renderings[0].mimetype;\n\n if (mime === undefined || mime === \"text/plain\") {\n messageRendering = _defineProperty({}, _message_types.M_TEXT.name, this.renderings[0].body);\n }\n }\n\n return messageRendering;\n }\n }, {\n key: \"serialize\",\n value: function serialize() {\n var _this$html;\n\n return {\n type: \"m.room.message\",\n content: _objectSpread(_objectSpread({}, this.serializeMMessageOnly()), {}, {\n body: this.text,\n msgtype: \"m.text\",\n format: this.html ? \"org.matrix.custom.html\" : undefined,\n formatted_body: (_this$html = this.html) !== null && _this$html !== void 0 ? _this$html : undefined\n })\n };\n }\n /**\n * Creates a new MessageEvent from text and HTML.\n * @param {string} text The text.\n * @param {string} html Optional HTML.\n * @returns {MessageEvent} The representative message event.\n */\n\n }], [{\n key: \"from\",\n value: function from(text, html) {\n var _content;\n\n return new MessageEvent({\n type: _message_types.M_MESSAGE.name,\n content: (_content = {}, _defineProperty(_content, _message_types.M_TEXT.name, text), _defineProperty(_content, _message_types.M_HTML.name, html), _content)\n });\n }\n }]);\n\n return MessageEvent;\n}(_ExtensibleEvent2.ExtensibleEvent);\n\nexports.MessageEvent = MessageEvent;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NoticeEvent = void 0;\n\nvar _MessageEvent2 = require(\"./MessageEvent\");\n\nvar _message_types = require(\"./message_types\");\n\nvar _events = require(\"../utility/events\");\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Notice events are just decorated message events\n\n/**\n * Represents a notice. This is essentially a MessageEvent with\n * notice characteristics considered.\n */\nvar NoticeEvent = /*#__PURE__*/function (_MessageEvent) {\n _inherits(NoticeEvent, _MessageEvent);\n\n var _super = _createSuper(NoticeEvent);\n\n function NoticeEvent(wireFormat) {\n _classCallCheck(this, NoticeEvent);\n\n return _super.call(this, wireFormat);\n }\n\n _createClass(NoticeEvent, [{\n key: \"isNotice\",\n get: function get() {\n return true; // override\n }\n }, {\n key: \"isEquivalentTo\",\n value: function isEquivalentTo(primaryEventType) {\n return (0, _events.isEventTypeSame)(primaryEventType, _message_types.M_NOTICE) || _get(_getPrototypeOf(NoticeEvent.prototype), \"isEquivalentTo\", this).call(this, primaryEventType);\n }\n }, {\n key: \"serialize\",\n value: function serialize() {\n var message = _get(_getPrototypeOf(NoticeEvent.prototype), \"serialize\", this).call(this);\n\n message.content['msgtype'] = \"m.notice\";\n return message;\n }\n /**\n * Creates a new NoticeEvent from text and HTML.\n * @param {string} text The text.\n * @param {string} html Optional HTML.\n * @returns {MessageEvent} The representative message event.\n */\n\n }], [{\n key: \"from\",\n value: function from(text, html) {\n var _content;\n\n return new NoticeEvent({\n type: _message_types.M_NOTICE.name,\n content: (_content = {}, _defineProperty(_content, _message_types.M_TEXT.name, text), _defineProperty(_content, _message_types.M_HTML.name, html), _content)\n });\n }\n }]);\n\n return NoticeEvent;\n}(_MessageEvent2.MessageEvent);\n\nexports.NoticeEvent = NoticeEvent;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.EmoteEvent = void 0;\n\nvar _MessageEvent2 = require(\"./MessageEvent\");\n\nvar _message_types = require(\"./message_types\");\n\nvar _events = require(\"../utility/events\");\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Emote events are just decorated message events\n\n/**\n * Represents an emote. This is essentially a MessageEvent with\n * emote characteristics considered.\n */\nvar EmoteEvent = /*#__PURE__*/function (_MessageEvent) {\n _inherits(EmoteEvent, _MessageEvent);\n\n var _super = _createSuper(EmoteEvent);\n\n function EmoteEvent(wireFormat) {\n _classCallCheck(this, EmoteEvent);\n\n return _super.call(this, wireFormat);\n }\n\n _createClass(EmoteEvent, [{\n key: \"isEmote\",\n get: function get() {\n return true; // override\n }\n }, {\n key: \"isEquivalentTo\",\n value: function isEquivalentTo(primaryEventType) {\n return (0, _events.isEventTypeSame)(primaryEventType, _message_types.M_EMOTE) || _get(_getPrototypeOf(EmoteEvent.prototype), \"isEquivalentTo\", this).call(this, primaryEventType);\n }\n }, {\n key: \"serialize\",\n value: function serialize() {\n var message = _get(_getPrototypeOf(EmoteEvent.prototype), \"serialize\", this).call(this);\n\n message.content['msgtype'] = \"m.emote\";\n return message;\n }\n /**\n * Creates a new EmoteEvent from text and HTML.\n * @param {string} text The text.\n * @param {string} html Optional HTML.\n * @returns {MessageEvent} The representative message event.\n */\n\n }], [{\n key: \"from\",\n value: function from(text, html) {\n var _content;\n\n return new EmoteEvent({\n type: _message_types.M_EMOTE.name,\n content: (_content = {}, _defineProperty(_content, _message_types.M_TEXT.name, text), _defineProperty(_content, _message_types.M_HTML.name, html), _content)\n });\n }\n }]);\n\n return EmoteEvent;\n}(_MessageEvent2.MessageEvent);\n\nexports.EmoteEvent = EmoteEvent;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEGACY_M_ROOM_MESSAGE = void 0;\nexports.parseMRoomMessage = parseMRoomMessage;\n\nvar _MessageEvent = require(\"../../events/MessageEvent\");\n\nvar _NoticeEvent = require(\"../../events/NoticeEvent\");\n\nvar _EmoteEvent = require(\"../../events/EmoteEvent\");\n\nvar _NamespacedValue = require(\"../../NamespacedValue\");\n\nvar _message_types = require(\"../../events/message_types\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar LEGACY_M_ROOM_MESSAGE = new _NamespacedValue.NamespacedValue(\"m.room.message\");\nexports.LEGACY_M_ROOM_MESSAGE = LEGACY_M_ROOM_MESSAGE;\n\nfunction parseMRoomMessage(wireEvent) {\n var _wireEvent$content, _wireEvent$content2, _wireEvent$content3;\n\n if (_message_types.M_MESSAGE.findIn(wireEvent.content) || _message_types.M_TEXT.findIn(wireEvent.content)) {\n // We know enough about the event to coerce it into the right type\n return new _MessageEvent.MessageEvent(wireEvent);\n }\n\n var msgtype = (_wireEvent$content = wireEvent.content) === null || _wireEvent$content === void 0 ? void 0 : _wireEvent$content.msgtype;\n var text = (_wireEvent$content2 = wireEvent.content) === null || _wireEvent$content2 === void 0 ? void 0 : _wireEvent$content2.body;\n var html = ((_wireEvent$content3 = wireEvent.content) === null || _wireEvent$content3 === void 0 ? void 0 : _wireEvent$content3.format) === \"org.matrix.custom.html\" ? wireEvent.content.formatted_body : null;\n\n if (msgtype === \"m.text\") {\n var _objectSpread2;\n\n return new _MessageEvent.MessageEvent(_objectSpread(_objectSpread({}, wireEvent), {}, {\n content: _objectSpread(_objectSpread({}, wireEvent.content), {}, (_objectSpread2 = {}, _defineProperty(_objectSpread2, _message_types.M_TEXT.name, text), _defineProperty(_objectSpread2, _message_types.M_HTML.name, html), _objectSpread2))\n }));\n } else if (msgtype === \"m.notice\") {\n var _objectSpread3;\n\n return new _NoticeEvent.NoticeEvent(_objectSpread(_objectSpread({}, wireEvent), {}, {\n content: _objectSpread(_objectSpread({}, wireEvent.content), {}, (_objectSpread3 = {}, _defineProperty(_objectSpread3, _message_types.M_TEXT.name, text), _defineProperty(_objectSpread3, _message_types.M_HTML.name, html), _objectSpread3))\n }));\n } else if (msgtype === \"m.emote\") {\n var _objectSpread4;\n\n return new _EmoteEvent.EmoteEvent(_objectSpread(_objectSpread({}, wireEvent), {}, {\n content: _objectSpread(_objectSpread({}, wireEvent.content), {}, (_objectSpread4 = {}, _defineProperty(_objectSpread4, _message_types.M_TEXT.name, text), _defineProperty(_objectSpread4, _message_types.M_HTML.name, html), _objectSpread4))\n }));\n } else {\n // TODO: Handle other types\n return null;\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseMMessage = parseMMessage;\n\nvar _MessageEvent = require(\"../../events/MessageEvent\");\n\nvar _message_types = require(\"../../events/message_types\");\n\nvar _EmoteEvent = require(\"../../events/EmoteEvent\");\n\nvar _NoticeEvent = require(\"../../events/NoticeEvent\");\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\nfunction parseMMessage(wireEvent) {\n if (_message_types.M_EMOTE.matches(wireEvent.type)) {\n return new _EmoteEvent.EmoteEvent(wireEvent);\n } else if (_message_types.M_NOTICE.matches(wireEvent.type)) {\n return new _NoticeEvent.NoticeEvent(wireEvent);\n } // default: return a generic message\n\n\n return new _MessageEvent.MessageEvent(wireEvent);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.M_POLL_START = exports.M_POLL_RESPONSE = exports.M_POLL_KIND_UNDISCLOSED = exports.M_POLL_KIND_DISCLOSED = exports.M_POLL_END = void 0;\n\nvar _NamespacedValue = require(\"../NamespacedValue\");\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Identifier for a disclosed poll.\n */\nvar M_POLL_KIND_DISCLOSED = new _NamespacedValue.UnstableValue(\"m.poll.disclosed\", \"org.matrix.msc3381.poll.disclosed\");\n/**\n * Identifier for an undisclosed poll.\n */\n\nexports.M_POLL_KIND_DISCLOSED = M_POLL_KIND_DISCLOSED;\nvar M_POLL_KIND_UNDISCLOSED = new _NamespacedValue.UnstableValue(\"m.poll.undisclosed\", \"org.matrix.msc3381.poll.undisclosed\");\n/**\n * Any poll kind.\n */\n\nexports.M_POLL_KIND_UNDISCLOSED = M_POLL_KIND_UNDISCLOSED;\n\n/**\n * The namespaced value for m.poll.start\n */\nvar M_POLL_START = new _NamespacedValue.UnstableValue(\"m.poll.start\", \"org.matrix.msc3381.poll.start\");\n/**\n * The m.poll.start type within event content\n */\n\nexports.M_POLL_START = M_POLL_START;\n\n/**\n * The namespaced value for m.poll.response\n */\nvar M_POLL_RESPONSE = new _NamespacedValue.UnstableValue(\"m.poll.response\", \"org.matrix.msc3381.poll.response\");\n/**\n * The m.poll.response type within event content\n */\n\nexports.M_POLL_RESPONSE = M_POLL_RESPONSE;\n\n/**\n * The namespaced value for m.poll.end\n */\nvar M_POLL_END = new _NamespacedValue.UnstableValue(\"m.poll.end\", \"org.matrix.msc3381.poll.end\");\n/**\n * The event definition for an m.poll.end event (in content)\n */\n\nexports.M_POLL_END = M_POLL_END;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PollStartEvent = exports.PollAnswerSubevent = void 0;\n\nvar _poll_types = require(\"./poll_types\");\n\nvar _MessageEvent2 = require(\"./MessageEvent\");\n\nvar _message_types = require(\"./message_types\");\n\nvar _InvalidEventError = require(\"../InvalidEventError\");\n\nvar _NamespacedValue = require(\"../NamespacedValue\");\n\nvar _events = require(\"../utility/events\");\n\nvar _ExtensibleEvent2 = require(\"./ExtensibleEvent\");\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Represents a poll answer. Note that this is represented as a subtype and is\n * not registered as a parsable event - it is implied for usage exclusively\n * within the PollStartEvent parsing.\n */\nvar PollAnswerSubevent = /*#__PURE__*/function (_MessageEvent) {\n _inherits(PollAnswerSubevent, _MessageEvent);\n\n var _super = _createSuper(PollAnswerSubevent);\n\n /**\n * The answer ID.\n */\n function PollAnswerSubevent(wireFormat) {\n var _this;\n\n _classCallCheck(this, PollAnswerSubevent);\n\n _this = _super.call(this, wireFormat);\n\n _defineProperty(_assertThisInitialized(_this), \"id\", void 0);\n\n var id = wireFormat.content.id;\n\n if (!id || typeof id !== \"string\") {\n throw new _InvalidEventError.InvalidEventError(\"Answer ID must be a non-empty string\");\n }\n\n _this.id = id;\n return _this;\n }\n\n _createClass(PollAnswerSubevent, [{\n key: \"serialize\",\n value: function serialize() {\n return {\n type: \"org.matrix.sdk.poll.answer\",\n content: _objectSpread({\n id: this.id\n }, this.serializeMMessageOnly())\n };\n }\n /**\n * Creates a new PollAnswerSubevent from ID and text.\n * @param {string} id The answer ID (unique within the poll).\n * @param {string} text The text.\n * @returns {PollAnswerSubevent} The representative answer.\n */\n\n }], [{\n key: \"from\",\n value: function from(id, text) {\n return new PollAnswerSubevent({\n type: \"org.matrix.sdk.poll.answer\",\n content: _defineProperty({\n id: id\n }, _message_types.M_TEXT.name, text)\n });\n }\n }]);\n\n return PollAnswerSubevent;\n}(_MessageEvent2.MessageEvent);\n/**\n * Represents a poll start event.\n */\n\n\nexports.PollAnswerSubevent = PollAnswerSubevent;\n\nvar PollStartEvent = /*#__PURE__*/function (_ExtensibleEvent) {\n _inherits(PollStartEvent, _ExtensibleEvent);\n\n var _super2 = _createSuper(PollStartEvent);\n\n /**\n * The question being asked, as a MessageEvent node.\n */\n\n /**\n * The interpreted kind of poll. Note that this will infer a value that is known to the\n * SDK rather than verbatim - this means unknown types will be represented as undisclosed\n * polls.\n *\n * To get the raw kind, use rawKind.\n */\n\n /**\n * The true kind as provided by the event sender. Might not be valid.\n */\n\n /**\n * The maximum number of selections a user is allowed to make.\n */\n\n /**\n * The possible answers for the poll.\n */\n\n /**\n * Creates a new PollStartEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.start primary typed event.\n * @param {IPartialEvent<M_POLL_START_EVENT_CONTENT>} wireFormat The event.\n */\n function PollStartEvent(wireFormat) {\n var _this2;\n\n _classCallCheck(this, PollStartEvent);\n\n _this2 = _super2.call(this, wireFormat);\n\n _defineProperty(_assertThisInitialized(_this2), \"question\", void 0);\n\n _defineProperty(_assertThisInitialized(_this2), \"kind\", void 0);\n\n _defineProperty(_assertThisInitialized(_this2), \"rawKind\", void 0);\n\n _defineProperty(_assertThisInitialized(_this2), \"maxSelections\", void 0);\n\n _defineProperty(_assertThisInitialized(_this2), \"answers\", void 0);\n\n var poll = _poll_types.M_POLL_START.findIn(_this2.wireContent);\n\n if (!poll.question) {\n throw new _InvalidEventError.InvalidEventError(\"A question is required\");\n }\n\n _this2.question = new _MessageEvent2.MessageEvent({\n type: \"org.matrix.sdk.poll.question\",\n content: poll.question\n });\n _this2.rawKind = poll.kind;\n\n if (_poll_types.M_POLL_KIND_DISCLOSED.matches(_this2.rawKind)) {\n _this2.kind = _poll_types.M_POLL_KIND_DISCLOSED;\n } else {\n _this2.kind = _poll_types.M_POLL_KIND_UNDISCLOSED; // default & assumed value\n }\n\n _this2.maxSelections = Number.isFinite(poll.max_selections) && poll.max_selections > 0 ? poll.max_selections : 1;\n\n if (!Array.isArray(poll.answers)) {\n throw new _InvalidEventError.InvalidEventError(\"Poll answers must be an array\");\n }\n\n var answers = poll.answers.slice(0, 20).map(function (a) {\n return new PollAnswerSubevent({\n type: \"org.matrix.sdk.poll.answer\",\n content: a\n });\n });\n\n if (answers.length <= 0) {\n throw new _InvalidEventError.InvalidEventError(\"No answers available\");\n }\n\n _this2.answers = answers;\n return _this2;\n }\n\n _createClass(PollStartEvent, [{\n key: \"isEquivalentTo\",\n value: function isEquivalentTo(primaryEventType) {\n return (0, _events.isEventTypeSame)(primaryEventType, _poll_types.M_POLL_START);\n }\n }, {\n key: \"serialize\",\n value: function serialize() {\n var _content2;\n\n return {\n type: _poll_types.M_POLL_START.name,\n content: (_content2 = {}, _defineProperty(_content2, _poll_types.M_POLL_START.name, {\n question: this.question.serialize().content,\n kind: this.rawKind,\n max_selections: this.maxSelections,\n answers: this.answers.map(function (a) {\n return a.serialize().content;\n })\n }), _defineProperty(_content2, _message_types.M_TEXT.name, \"\".concat(this.question.text, \"\\n\").concat(this.answers.map(function (a, i) {\n return \"\".concat(i + 1, \". \").concat(a.text);\n }).join(\"\\n\"))), _content2)\n };\n }\n /**\n * Creates a new PollStartEvent from question, answers, and metadata.\n * @param {string} question The question to ask.\n * @param {string} answers The answers. Should be unique within each other.\n * @param {KNOWN_POLL_KIND|string} kind The kind of poll.\n * @param {number} maxSelections The maximum number of selections. Must be 1 or higher.\n * @returns {PollStartEvent} The representative poll start event.\n */\n\n }], [{\n key: \"from\",\n value: function from(question, answers, kind) {\n var _content3;\n\n var maxSelections = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n return new PollStartEvent({\n type: _poll_types.M_POLL_START.name,\n content: (_content3 = {}, _defineProperty(_content3, _message_types.M_TEXT.name, question), _defineProperty(_content3, _poll_types.M_POLL_START.name, {\n question: _defineProperty({}, _message_types.M_TEXT.name, question),\n kind: kind instanceof _NamespacedValue.NamespacedValue ? kind.name : kind,\n max_selections: maxSelections,\n answers: answers.map(function (a) {\n return _defineProperty({\n id: makeId()\n }, _message_types.M_TEXT.name, a);\n })\n }), _content3)\n });\n }\n }]);\n\n return PollStartEvent;\n}(_ExtensibleEvent2.ExtensibleEvent);\n\nexports.PollStartEvent = PollStartEvent;\nvar LETTERS = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\nfunction makeId() {\n return _toConsumableArray(Array(16)).map(function () {\n return LETTERS.charAt(Math.floor(Math.random() * LETTERS.length));\n }).join('');\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.REFERENCE_RELATION = void 0;\n\nvar _NamespacedValue = require(\"../NamespacedValue\");\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * The namespaced value for an m.reference relation\n */\nvar REFERENCE_RELATION = new _NamespacedValue.NamespacedValue(\"m.reference\");\n/**\n * Represents any relation type\n */\n\nexports.REFERENCE_RELATION = REFERENCE_RELATION;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PollResponseEvent = void 0;\n\nvar _ExtensibleEvent2 = require(\"./ExtensibleEvent\");\n\nvar _poll_types = require(\"./poll_types\");\n\nvar _InvalidEventError = require(\"../InvalidEventError\");\n\nvar _relationship_types = require(\"./relationship_types\");\n\nvar _events = require(\"../utility/events\");\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Represents a poll response event.\n */\nvar PollResponseEvent = /*#__PURE__*/function (_ExtensibleEvent) {\n _inherits(PollResponseEvent, _ExtensibleEvent);\n\n var _super = _createSuper(PollResponseEvent);\n\n /**\n * Creates a new PollResponseEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.response primary typed event.\n *\n * To validate the response against a poll, call `validateAgainst` after creation.\n * @param {IPartialEvent<M_POLL_RESPONSE_EVENT_CONTENT>} wireFormat The event.\n */\n function PollResponseEvent(wireFormat) {\n var _this;\n\n _classCallCheck(this, PollResponseEvent);\n\n _this = _super.call(this, wireFormat);\n\n _defineProperty(_assertThisInitialized(_this), \"internalAnswerIds\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"internalSpoiled\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"pollEventId\", void 0);\n\n var rel = _this.wireContent[\"m.relates_to\"];\n\n if (!_relationship_types.REFERENCE_RELATION.matches(rel === null || rel === void 0 ? void 0 : rel.rel_type) || typeof (rel === null || rel === void 0 ? void 0 : rel.event_id) !== \"string\") {\n throw new _InvalidEventError.InvalidEventError(\"Relationship must be a reference to an event\");\n }\n\n _this.pollEventId = rel.event_id;\n\n _this.validateAgainst(null);\n\n return _this;\n }\n /**\n * Validates the poll response using the poll start event as a frame of reference. This\n * is used to determine if the vote is spoiled, whether the answers are valid, etc.\n * @param {PollStartEvent} poll The poll start event.\n */\n\n\n _createClass(PollResponseEvent, [{\n key: \"answerIds\",\n get:\n /**\n * The provided answers for the poll. Note that this may be falsy/unpredictable if\n * the `spoiled` property is true.\n */\n function get() {\n return this.internalAnswerIds;\n }\n /**\n * The poll start event ID referenced by the response.\n */\n\n }, {\n key: \"spoiled\",\n get:\n /**\n * Whether the vote is spoiled.\n */\n function get() {\n return this.internalSpoiled;\n }\n }, {\n key: \"validateAgainst\",\n value: function validateAgainst(poll) {\n var response = _poll_types.M_POLL_RESPONSE.findIn(this.wireContent);\n\n if (!Array.isArray(response === null || response === void 0 ? void 0 : response.answers)) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n var answers = response.answers;\n\n if (answers.some(function (a) {\n return typeof a !== \"string\";\n }) || answers.length === 0) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n if (poll) {\n if (answers.some(function (a) {\n return !poll.answers.some(function (pa) {\n return pa.id === a;\n });\n })) {\n this.internalSpoiled = true;\n this.internalAnswerIds = [];\n return;\n }\n\n answers = answers.slice(0, poll.maxSelections);\n }\n\n this.internalAnswerIds = answers;\n this.internalSpoiled = false;\n }\n }, {\n key: \"isEquivalentTo\",\n value: function isEquivalentTo(primaryEventType) {\n return (0, _events.isEventTypeSame)(primaryEventType, _poll_types.M_POLL_RESPONSE);\n }\n }, {\n key: \"serialize\",\n value: function serialize() {\n return {\n type: _poll_types.M_POLL_RESPONSE.name,\n content: _defineProperty({\n \"m.relates_to\": {\n rel_type: _relationship_types.REFERENCE_RELATION.name,\n event_id: this.pollEventId\n }\n }, _poll_types.M_POLL_RESPONSE.name, {\n answers: this.spoiled ? undefined : this.answerIds\n })\n };\n }\n /**\n * Creates a new PollResponseEvent from a set of answers. To spoil the vote, pass an empty\n * answers array.\n * @param {string} answers The user's answers. Should be valid from a poll's answer IDs.\n * @param {string} pollEventId The poll start event ID.\n * @returns {PollStartEvent} The representative poll response event.\n */\n\n }], [{\n key: \"from\",\n value: function from(answers, pollEventId) {\n return new PollResponseEvent({\n type: _poll_types.M_POLL_RESPONSE.name,\n content: _defineProperty({\n \"m.relates_to\": {\n rel_type: _relationship_types.REFERENCE_RELATION.name,\n event_id: pollEventId\n }\n }, _poll_types.M_POLL_RESPONSE.name, {\n answers: answers\n })\n });\n }\n }]);\n\n return PollResponseEvent;\n}(_ExtensibleEvent2.ExtensibleEvent);\n\nexports.PollResponseEvent = PollResponseEvent;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PollEndEvent = void 0;\n\nvar _poll_types = require(\"./poll_types\");\n\nvar _InvalidEventError = require(\"../InvalidEventError\");\n\nvar _relationship_types = require(\"./relationship_types\");\n\nvar _MessageEvent = require(\"./MessageEvent\");\n\nvar _message_types = require(\"./message_types\");\n\nvar _events = require(\"../utility/events\");\n\nvar _ExtensibleEvent2 = require(\"./ExtensibleEvent\");\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Represents a poll end/closure event.\n */\nvar PollEndEvent = /*#__PURE__*/function (_ExtensibleEvent) {\n _inherits(PollEndEvent, _ExtensibleEvent);\n\n var _super = _createSuper(PollEndEvent);\n\n /**\n * The poll start event ID referenced by the response.\n */\n\n /**\n * The closing message for the event.\n */\n\n /**\n * Creates a new PollEndEvent from a pure format. Note that the event is *not*\n * parsed here: it will be treated as a literal m.poll.response primary typed event.\n * @param {IPartialEvent<M_POLL_END_EVENT_CONTENT>} wireFormat The event.\n */\n function PollEndEvent(wireFormat) {\n var _this;\n\n _classCallCheck(this, PollEndEvent);\n\n _this = _super.call(this, wireFormat);\n\n _defineProperty(_assertThisInitialized(_this), \"pollEventId\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"closingMessage\", void 0);\n\n var rel = _this.wireContent[\"m.relates_to\"];\n\n if (!_relationship_types.REFERENCE_RELATION.matches(rel === null || rel === void 0 ? void 0 : rel.rel_type) || typeof (rel === null || rel === void 0 ? void 0 : rel.event_id) !== \"string\") {\n throw new _InvalidEventError.InvalidEventError(\"Relationship must be a reference to an event\");\n }\n\n _this.pollEventId = rel.event_id;\n _this.closingMessage = new _MessageEvent.MessageEvent(_this.wireFormat);\n return _this;\n }\n\n _createClass(PollEndEvent, [{\n key: \"isEquivalentTo\",\n value: function isEquivalentTo(primaryEventType) {\n return (0, _events.isEventTypeSame)(primaryEventType, _poll_types.M_POLL_END);\n }\n }, {\n key: \"serialize\",\n value: function serialize() {\n return {\n type: _poll_types.M_POLL_END.name,\n content: _objectSpread(_defineProperty({\n \"m.relates_to\": {\n rel_type: _relationship_types.REFERENCE_RELATION.name,\n event_id: this.pollEventId\n }\n }, _poll_types.M_POLL_END.name, {}), this.closingMessage.serialize().content)\n };\n }\n /**\n * Creates a new PollEndEvent from a poll event ID.\n * @param {string} pollEventId The poll start event ID.\n * @param {string} message A closing message, typically revealing the top answer.\n * @returns {PollStartEvent} The representative poll closure event.\n */\n\n }], [{\n key: \"from\",\n value: function from(pollEventId, message) {\n var _content;\n\n return new PollEndEvent({\n type: _poll_types.M_POLL_END.name,\n content: (_content = {\n \"m.relates_to\": {\n rel_type: _relationship_types.REFERENCE_RELATION.name,\n event_id: pollEventId\n }\n }, _defineProperty(_content, _poll_types.M_POLL_END.name, {}), _defineProperty(_content, _message_types.M_TEXT.name, message), _content)\n });\n }\n }]);\n\n return PollEndEvent;\n}(_ExtensibleEvent2.ExtensibleEvent);\n\nexports.PollEndEvent = PollEndEvent;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseMPoll = parseMPoll;\n\nvar _poll_types = require(\"../../events/poll_types\");\n\nvar _PollStartEvent = require(\"../../events/PollStartEvent\");\n\nvar _PollResponseEvent = require(\"../../events/PollResponseEvent\");\n\nvar _PollEndEvent = require(\"../../events/PollEndEvent\");\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\nfunction parseMPoll(wireEvent) {\n if (_poll_types.M_POLL_START.matches(wireEvent.type)) {\n return new _PollStartEvent.PollStartEvent(wireEvent);\n } else if (_poll_types.M_POLL_RESPONSE.matches(wireEvent.type)) {\n return new _PollResponseEvent.PollResponseEvent(wireEvent);\n } else if (_poll_types.M_POLL_END.matches(wireEvent.type)) {\n return new _PollEndEvent.PollEndEvent(wireEvent);\n }\n\n return null; // not a poll event\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ExtensibleEvents = void 0;\n\nvar _NamespacedMap = require(\"./NamespacedMap\");\n\nvar _InvalidEventError = require(\"./InvalidEventError\");\n\nvar _MRoomMessage = require(\"./interpreters/legacy/MRoomMessage\");\n\nvar _MMessage = require(\"./interpreters/modern/MMessage\");\n\nvar _message_types = require(\"./events/message_types\");\n\nvar _poll_types = require(\"./events/poll_types\");\n\nvar _MPoll = require(\"./interpreters/modern/MPoll\");\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Utility class for parsing and identifying event types in a renderable form. An\n * instance of this class can be created to change rendering preference depending\n * on use-case.\n */\nvar ExtensibleEvents = /*#__PURE__*/function () {\n function ExtensibleEvents() {\n _classCallCheck(this, ExtensibleEvents);\n\n _defineProperty(this, \"interpreters\", new _NamespacedMap.NamespacedMap([// Remember to add your unit test when adding to this! (\"known events\" test description)\n [_MRoomMessage.LEGACY_M_ROOM_MESSAGE, _MRoomMessage.parseMRoomMessage], [_message_types.M_MESSAGE, _MMessage.parseMMessage], [_message_types.M_EMOTE, _MMessage.parseMMessage], [_message_types.M_NOTICE, _MMessage.parseMMessage], [_poll_types.M_POLL_START, _MPoll.parseMPoll], [_poll_types.M_POLL_RESPONSE, _MPoll.parseMPoll], [_poll_types.M_POLL_END, _MPoll.parseMPoll]]));\n\n _defineProperty(this, \"_unknownInterpretOrder\", [_message_types.M_MESSAGE]);\n }\n /**\n * Gets the default instance for all extensible event parsing.\n */\n\n\n _createClass(ExtensibleEvents, [{\n key: \"unknownInterpretOrder\",\n get:\n /**\n * Gets the order the internal processor will use for unknown primary\n * event types.\n */\n function get() {\n var _this$_unknownInterpr;\n\n return (_this$_unknownInterpr = this._unknownInterpretOrder) !== null && _this$_unknownInterpr !== void 0 ? _this$_unknownInterpr : [];\n }\n /**\n * Sets the order the internal processor will use for unknown primary\n * event types.\n * @param {NamespacedValue<string, string>[]} val The parsing order.\n */\n ,\n set: function set(val) {\n this._unknownInterpretOrder = val;\n }\n /**\n * Gets the order the internal processor will use for unknown primary\n * event types.\n */\n\n }, {\n key: \"registerInterpreter\",\n value:\n /**\n * Registers a primary event type interpreter. Note that the interpreter might be\n * called with non-primary events if the event is being parsed as a fallback.\n * @param {NamespacedValue<string, string>} wireEventType The event type.\n * @param {EventInterpreter} interpreter The interpreter.\n */\n function registerInterpreter(wireEventType, interpreter) {\n this.interpreters.set(wireEventType, interpreter);\n }\n /**\n * Registers a primary event type interpreter. Note that the interpreter might be\n * called with non-primary events if the event is being parsed as a fallback.\n * @param {NamespacedValue<string, string>} wireEventType The event type.\n * @param {EventInterpreter} interpreter The interpreter.\n */\n\n }, {\n key: \"parse\",\n value:\n /**\n * Parses an event, trying the primary event type first. If the primary type is not known\n * then the content will be inspected to find the most suitable fallback.\n *\n * If the parsing failed or was a completely unknown type, this will return falsy.\n * @param {IPartialEvent<object>} wireFormat The event to parse.\n * @returns {Optional<ExtensibleEvent>} The parsed extensible event.\n */\n function parse(wireFormat) {\n try {\n if (this.interpreters.hasNamespaced(wireFormat.type)) {\n return this.interpreters.getNamespaced(wireFormat.type)(wireFormat);\n }\n\n var _iterator = _createForOfIteratorHelper(this.unknownInterpretOrder),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var tryType = _step.value;\n\n if (this.interpreters.has(tryType)) {\n var val = this.interpreters.get(tryType)(wireFormat);\n if (val) return val;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return null; // cannot be parsed\n } catch (e) {\n if (e instanceof _InvalidEventError.InvalidEventError) {\n return null; // fail parsing and move on\n }\n\n throw e; // re-throw everything else\n }\n }\n /**\n * Parses an event, trying the primary event type first. If the primary type is not known\n * then the content will be inspected to find the most suitable fallback.\n *\n * If the parsing failed or was a completely unknown type, this will return falsy.\n * @param {IPartialEvent<object>} wireFormat The event to parse.\n * @returns {Optional<ExtensibleEvent>} The parsed extensible event.\n */\n\n }], [{\n key: \"defaultInstance\",\n get: function get() {\n return ExtensibleEvents._defaultInstance;\n }\n }, {\n key: \"unknownInterpretOrder\",\n get: function get() {\n return ExtensibleEvents.defaultInstance.unknownInterpretOrder;\n }\n /**\n * Sets the order the internal processor will use for unknown primary\n * event types.\n * @param {NamespacedValue<string, string>[]} val The parsing order.\n */\n ,\n set: function set(val) {\n ExtensibleEvents.defaultInstance.unknownInterpretOrder = val;\n }\n }, {\n key: \"registerInterpreter\",\n value: function registerInterpreter(wireEventType, interpreter) {\n ExtensibleEvents.defaultInstance.registerInterpreter(wireEventType, interpreter);\n }\n }, {\n key: \"parse\",\n value: function parse(wireFormat) {\n return ExtensibleEvents.defaultInstance.parse(wireFormat);\n }\n }]);\n\n return ExtensibleEvents;\n}();\n\nexports.ExtensibleEvents = ExtensibleEvents;\n\n_defineProperty(ExtensibleEvents, \"_defaultInstance\", new ExtensibleEvents());","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LegacyMsgType = void 0;\nexports.isEventLike = isEventLike;\n\nvar _message_types = require(\"../events/message_types\");\n\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Represents a legacy m.room.message msgtype\n */\nvar LegacyMsgType;\n/**\n * Determines if the given partial event looks similar enough to the given legacy msgtype\n * to count as that message type.\n * @param {IPartialEvent<EitherAnd<IPartialLegacyContent, M_MESSAGE_EVENT_CONTENT>>} event The event.\n * @param {LegacyMsgType} msgtype The message type to compare for.\n * @returns {boolean} True if the event appears to look similar enough to the msgtype.\n */\n\nexports.LegacyMsgType = LegacyMsgType;\n\n(function (LegacyMsgType) {\n LegacyMsgType[\"Text\"] = \"m.text\";\n LegacyMsgType[\"Notice\"] = \"m.notice\";\n LegacyMsgType[\"Emote\"] = \"m.emote\";\n})(LegacyMsgType || (exports.LegacyMsgType = LegacyMsgType = {}));\n\nfunction isEventLike(event, msgtype) {\n var content = event.content;\n\n if (msgtype === LegacyMsgType.Text) {\n return _message_types.M_MESSAGE.matches(event.type) || event.type === \"m.room.message\" && (content === null || content === void 0 ? void 0 : content['msgtype']) === \"m.text\";\n } else if (msgtype === LegacyMsgType.Emote) {\n return _message_types.M_EMOTE.matches(event.type) || event.type === \"m.room.message\" && (content === null || content === void 0 ? void 0 : content['msgtype']) === \"m.emote\";\n } else if (msgtype === LegacyMsgType.Notice) {\n return _message_types.M_NOTICE.matches(event.type) || event.type === \"m.room.message\" && (content === null || content === void 0 ? void 0 : content['msgtype']) === \"m.notice\";\n }\n\n return false;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _ExtensibleEvents = require(\"./ExtensibleEvents\");\n\nObject.keys(_ExtensibleEvents).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _ExtensibleEvents[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _ExtensibleEvents[key];\n }\n });\n});\n\nvar _IPartialEvent = require(\"./IPartialEvent\");\n\nObject.keys(_IPartialEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _IPartialEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _IPartialEvent[key];\n }\n });\n});\n\nvar _InvalidEventError = require(\"./InvalidEventError\");\n\nObject.keys(_InvalidEventError).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _InvalidEventError[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _InvalidEventError[key];\n }\n });\n});\n\nvar _NamespacedValue = require(\"./NamespacedValue\");\n\nObject.keys(_NamespacedValue).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _NamespacedValue[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _NamespacedValue[key];\n }\n });\n});\n\nvar _NamespacedMap = require(\"./NamespacedMap\");\n\nObject.keys(_NamespacedMap).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _NamespacedMap[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _NamespacedMap[key];\n }\n });\n});\n\nvar _types = require(\"./types\");\n\nObject.keys(_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _types[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _types[key];\n }\n });\n});\n\nvar _MessageMatchers = require(\"./utility/MessageMatchers\");\n\nObject.keys(_MessageMatchers).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _MessageMatchers[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _MessageMatchers[key];\n }\n });\n});\n\nvar _events = require(\"./utility/events\");\n\nObject.keys(_events).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _events[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _events[key];\n }\n });\n});\n\nvar _MRoomMessage = require(\"./interpreters/legacy/MRoomMessage\");\n\nObject.keys(_MRoomMessage).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _MRoomMessage[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _MRoomMessage[key];\n }\n });\n});\n\nvar _MMessage = require(\"./interpreters/modern/MMessage\");\n\nObject.keys(_MMessage).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _MMessage[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _MMessage[key];\n }\n });\n});\n\nvar _MPoll = require(\"./interpreters/modern/MPoll\");\n\nObject.keys(_MPoll).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _MPoll[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _MPoll[key];\n }\n });\n});\n\nvar _relationship_types = require(\"./events/relationship_types\");\n\nObject.keys(_relationship_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _relationship_types[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _relationship_types[key];\n }\n });\n});\n\nvar _ExtensibleEvent = require(\"./events/ExtensibleEvent\");\n\nObject.keys(_ExtensibleEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _ExtensibleEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _ExtensibleEvent[key];\n }\n });\n});\n\nvar _message_types = require(\"./events/message_types\");\n\nObject.keys(_message_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _message_types[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _message_types[key];\n }\n });\n});\n\nvar _MessageEvent = require(\"./events/MessageEvent\");\n\nObject.keys(_MessageEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _MessageEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _MessageEvent[key];\n }\n });\n});\n\nvar _EmoteEvent = require(\"./events/EmoteEvent\");\n\nObject.keys(_EmoteEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _EmoteEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _EmoteEvent[key];\n }\n });\n});\n\nvar _NoticeEvent = require(\"./events/NoticeEvent\");\n\nObject.keys(_NoticeEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _NoticeEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _NoticeEvent[key];\n }\n });\n});\n\nvar _poll_types = require(\"./events/poll_types\");\n\nObject.keys(_poll_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _poll_types[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _poll_types[key];\n }\n });\n});\n\nvar _PollStartEvent = require(\"./events/PollStartEvent\");\n\nObject.keys(_PollStartEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _PollStartEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _PollStartEvent[key];\n }\n });\n});\n\nvar _PollResponseEvent = require(\"./events/PollResponseEvent\");\n\nObject.keys(_PollResponseEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _PollResponseEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _PollResponseEvent[key];\n }\n });\n});\n\nvar _PollEndEvent = require(\"./events/PollEndEvent\");\n\nObject.keys(_PollEndEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _PollEndEvent[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _PollEndEvent[key];\n }\n });\n});","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nexport var UserEvent = /*#__PURE__*/function (UserEvent) {\n UserEvent[\"DisplayName\"] = \"User.displayName\";\n UserEvent[\"AvatarUrl\"] = \"User.avatarUrl\";\n UserEvent[\"Presence\"] = \"User.presence\";\n UserEvent[\"CurrentlyActive\"] = \"User.currentlyActive\";\n UserEvent[\"LastPresenceTs\"] = \"User.lastPresenceTs\";\n return UserEvent;\n}({});\n\n/**\n * An object of extended profile attributes for a user as it arrives down the sync stream.\n */\n\nexport class User extends TypedEventEmitter {\n /**\n * Construct a new User. A User must have an ID and can optionally have extra information associated with it.\n * @param userId - Required. The ID of this user.\n * @deprecated use `User.createUser`\n */\n constructor(userId) {\n super();\n this.userId = userId;\n _defineProperty(this, \"modified\", -1);\n /**\n * The 'displayname' of the user if known.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"displayName\", void 0);\n _defineProperty(this, \"rawDisplayName\", void 0);\n /**\n * The 'avatar_url' of the user if known.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"avatarUrl\", void 0);\n /**\n * The presence status message if known.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"presenceStatusMsg\", void 0);\n /**\n * The presence enum if known.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"presence\", \"offline\");\n /**\n * Timestamp (ms since the epoch) for when we last received presence data for this user.\n * We can subtract lastActiveAgo from this to approximate an absolute value for when a user was last active.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"lastActiveAgo\", 0);\n /**\n * The time elapsed in ms since the user interacted proactively with the server,\n * or we saw a message from the user\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"lastPresenceTs\", 0);\n /**\n * Whether we should consider lastActiveAgo to be an approximation\n * and that the user should be seen as active 'now'\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"currentlyActive\", false);\n /**\n * The events describing this user.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"events\", {});\n this.displayName = userId;\n this.rawDisplayName = userId;\n this.updateModifiedTime();\n }\n\n /**\n * Construct a new User whose events will also emit on MatrixClient.\n * A User must have an ID and can optionally have extra information associated with it.\n * @param userId - Required. The ID of this user.\n * @param client - An instance of MatrixClient object\n * @returns User object with reEmitter setup on client\n */\n static createUser(userId, client) {\n var user = new User(userId);\n client.reEmitter.reEmit(user, [UserEvent.AvatarUrl, UserEvent.DisplayName, UserEvent.Presence, UserEvent.CurrentlyActive, UserEvent.LastPresenceTs]);\n return user;\n }\n\n /**\n * Update this User with the given presence event. May fire \"User.presence\",\n * \"User.avatarUrl\" and/or \"User.displayName\" if this event updates this user's\n * properties.\n * @param event - The `m.presence` event.\n *\n * @remarks\n * Fires {@link UserEvent.Presence}\n * Fires {@link UserEvent.DisplayName}\n * Fires {@link UserEvent.AvatarUrl}\n */\n setPresenceEvent(event) {\n if (event.getType() !== \"m.presence\") {\n return;\n }\n var firstFire = this.events.presence === null;\n this.events.presence = event;\n var eventsToFire = [];\n if (event.getContent().presence !== this.presence || firstFire) {\n eventsToFire.push(UserEvent.Presence);\n }\n if (event.getContent().avatar_url && event.getContent().avatar_url !== this.avatarUrl) {\n eventsToFire.push(UserEvent.AvatarUrl);\n }\n if (event.getContent().displayname && event.getContent().displayname !== this.displayName) {\n eventsToFire.push(UserEvent.DisplayName);\n }\n if (event.getContent().currently_active !== undefined && event.getContent().currently_active !== this.currentlyActive) {\n eventsToFire.push(UserEvent.CurrentlyActive);\n }\n this.presence = event.getContent().presence;\n eventsToFire.push(UserEvent.LastPresenceTs);\n if (event.getContent().status_msg) {\n this.presenceStatusMsg = event.getContent().status_msg;\n }\n if (event.getContent().displayname) {\n this.displayName = event.getContent().displayname;\n }\n if (event.getContent().avatar_url) {\n this.avatarUrl = event.getContent().avatar_url;\n }\n this.lastActiveAgo = event.getContent().last_active_ago;\n this.lastPresenceTs = Date.now();\n this.currentlyActive = event.getContent().currently_active;\n this.updateModifiedTime();\n for (var eventToFire of eventsToFire) {\n this.emit(eventToFire, event, this);\n }\n }\n\n /**\n * Manually set this user's display name. No event is emitted in response to this\n * as there is no underlying MatrixEvent to emit with.\n * @param name - The new display name.\n */\n setDisplayName(name) {\n var oldName = this.displayName;\n this.displayName = name;\n if (name !== oldName) {\n this.updateModifiedTime();\n }\n }\n\n /**\n * Manually set this user's non-disambiguated display name. No event is emitted\n * in response to this as there is no underlying MatrixEvent to emit with.\n * @param name - The new display name.\n */\n setRawDisplayName(name) {\n this.rawDisplayName = name;\n }\n\n /**\n * Manually set this user's avatar URL. No event is emitted in response to this\n * as there is no underlying MatrixEvent to emit with.\n * @param url - The new avatar URL.\n */\n setAvatarUrl(url) {\n var oldUrl = this.avatarUrl;\n this.avatarUrl = url;\n if (url !== oldUrl) {\n this.updateModifiedTime();\n }\n }\n\n /**\n * Update the last modified time to the current time.\n */\n updateModifiedTime() {\n this.modified = Date.now();\n }\n\n /**\n * Get the timestamp when this User was last updated. This timestamp is\n * updated when this User receives a new Presence event which has updated a\n * property on this object. It is updated <i>before</i> firing events.\n * @returns The timestamp\n */\n getLastModifiedTime() {\n return this.modified;\n }\n\n /**\n * Get the absolute timestamp when this User was last known active on the server.\n * It is *NOT* accurate if this.currentlyActive is true.\n * @returns The timestamp\n */\n getLastActiveTs() {\n return this.lastPresenceTs - this.lastActiveAgo;\n }\n}\n//# sourceMappingURL=user.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2016 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { RoomState } from \"./room-state.js\";\nimport { EventType } from \"../@types/event.js\";\nexport var Direction = /*#__PURE__*/function (Direction) {\n Direction[\"Backward\"] = \"b\";\n Direction[\"Forward\"] = \"f\";\n return Direction;\n}({});\nexport class EventTimeline {\n /**\n * Static helper method to set sender and target properties\n *\n * @param event - the event whose metadata is to be set\n * @param stateContext - the room state to be queried\n * @param toStartOfTimeline - if true the event's forwardLooking flag is set false\n */\n static setEventMetadata(event, stateContext, toStartOfTimeline) {\n event.setMetadata(stateContext, toStartOfTimeline);\n }\n /**\n * Construct a new EventTimeline\n *\n * <p>An EventTimeline represents a contiguous sequence of events in a room.\n *\n * <p>As well as keeping track of the events themselves, it stores the state of\n * the room at the beginning and end of the timeline, and pagination tokens for\n * going backwards and forwards in the timeline.\n *\n * <p>In order that clients can meaningfully maintain an index into a timeline,\n * the EventTimeline object tracks a 'baseIndex'. This starts at zero, but is\n * incremented when events are prepended to the timeline. The index of an event\n * relative to baseIndex therefore remains constant.\n *\n * <p>Once a timeline joins up with its neighbour, they are linked together into a\n * doubly-linked list.\n *\n * @param eventTimelineSet - the set of timelines this is part of\n */\n constructor(eventTimelineSet) {\n var _eventTimelineSet$roo, _eventTimelineSet$roo2;\n this.eventTimelineSet = eventTimelineSet;\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"events\", []);\n _defineProperty(this, \"baseIndex\", 0);\n _defineProperty(this, \"startState\", void 0);\n _defineProperty(this, \"endState\", void 0);\n // If we have a roomId then we delegate pagination token storage to the room state objects `startState` and\n // `endState`, but for things like the notification timeline which mix multiple rooms we store the tokens ourselves.\n _defineProperty(this, \"startToken\", null);\n _defineProperty(this, \"endToken\", null);\n _defineProperty(this, \"prevTimeline\", null);\n _defineProperty(this, \"nextTimeline\", null);\n _defineProperty(this, \"paginationRequests\", {\n [Direction.Backward]: null,\n [Direction.Forward]: null\n });\n this.roomId = (_eventTimelineSet$roo = (_eventTimelineSet$roo2 = eventTimelineSet.room) === null || _eventTimelineSet$roo2 === void 0 ? void 0 : _eventTimelineSet$roo2.roomId) !== null && _eventTimelineSet$roo !== void 0 ? _eventTimelineSet$roo : null;\n if (this.roomId) {\n this.startState = new RoomState(this.roomId);\n this.endState = new RoomState(this.roomId);\n }\n\n // this is used by client.js\n this.paginationRequests = {\n b: null,\n f: null\n };\n this.name = this.roomId + \":\" + new Date().toISOString();\n }\n\n /**\n * Initialise the start and end state with the given events\n *\n * <p>This can only be called before any events are added.\n *\n * @param stateEvents - list of state events to initialise the\n * state with.\n * @throws Error if an attempt is made to call this after addEvent is called.\n */\n initialiseState(stateEvents) {\n var _this$startState, _this$endState;\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n timelineWasEmpty = _ref.timelineWasEmpty;\n if (this.events.length > 0) {\n throw new Error(\"Cannot initialise state after events are added\");\n }\n (_this$startState = this.startState) === null || _this$startState === void 0 || _this$startState.setStateEvents(stateEvents, {\n timelineWasEmpty\n });\n (_this$endState = this.endState) === null || _this$endState === void 0 || _this$endState.setStateEvents(stateEvents, {\n timelineWasEmpty\n });\n }\n\n /**\n * Forks the (live) timeline, taking ownership of the existing directional state of this timeline.\n * All attached listeners will keep receiving state updates from the new live timeline state.\n * The end state of this timeline gets replaced with an independent copy of the current RoomState,\n * and will need a new pagination token if it ever needs to paginate forwards.\n * @param direction - EventTimeline.BACKWARDS to get the state at the\n * start of the timeline; EventTimeline.FORWARDS to get the state at the end\n * of the timeline.\n *\n * @returns the new timeline\n */\n forkLive(direction) {\n var forkState = this.getState(direction);\n var timeline = new EventTimeline(this.eventTimelineSet);\n timeline.startState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();\n // Now clobber the end state of the new live timeline with that from the\n // previous live timeline. It will be identical except that we'll keep\n // using the same RoomMember objects for the 'live' set of members with any\n // listeners still attached\n timeline.endState = forkState;\n // Firstly, we just stole the current timeline's end state, so it needs a new one.\n // Make an immutable copy of the state so back pagination will get the correct sentinels.\n this.endState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();\n return timeline;\n }\n\n /**\n * Creates an independent timeline, inheriting the directional state from this timeline.\n *\n * @param direction - EventTimeline.BACKWARDS to get the state at the\n * start of the timeline; EventTimeline.FORWARDS to get the state at the end\n * of the timeline.\n *\n * @returns the new timeline\n */\n fork(direction) {\n var forkState = this.getState(direction);\n var timeline = new EventTimeline(this.eventTimelineSet);\n timeline.startState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();\n timeline.endState = forkState === null || forkState === void 0 ? void 0 : forkState.clone();\n return timeline;\n }\n\n /**\n * Get the ID of the room for this timeline\n * @returns room ID\n */\n getRoomId() {\n return this.roomId;\n }\n\n /**\n * Get the filter for this timeline's timelineSet (if any)\n * @returns filter\n */\n getFilter() {\n return this.eventTimelineSet.getFilter();\n }\n\n /**\n * Get the timelineSet for this timeline\n * @returns timelineSet\n */\n getTimelineSet() {\n return this.eventTimelineSet;\n }\n\n /**\n * Get the base index.\n *\n * <p>This is an index which is incremented when events are prepended to the\n * timeline. An individual event therefore stays at the same index in the array\n * relative to the base index (although note that a given event's index may\n * well be less than the base index, thus giving that event a negative relative\n * index).\n */\n getBaseIndex() {\n return this.baseIndex;\n }\n\n /**\n * Get the list of events in this context\n *\n * @returns An array of MatrixEvents\n */\n getEvents() {\n return this.events;\n }\n\n /**\n * Get the room state at the start/end of the timeline\n *\n * @param direction - EventTimeline.BACKWARDS to get the state at the\n * start of the timeline; EventTimeline.FORWARDS to get the state at the end\n * of the timeline.\n *\n * @returns state at the start/end of the timeline\n */\n getState(direction) {\n if (direction == EventTimeline.BACKWARDS) {\n return this.startState;\n } else if (direction == EventTimeline.FORWARDS) {\n return this.endState;\n } else {\n throw new Error(\"Invalid direction '\" + direction + \"'\");\n }\n }\n\n /**\n * Get a pagination token\n *\n * @param direction - EventTimeline.BACKWARDS to get the pagination\n * token for going backwards in time; EventTimeline.FORWARDS to get the\n * pagination token for going forwards in time.\n *\n * @returns pagination token\n */\n getPaginationToken(direction) {\n if (this.roomId) {\n return this.getState(direction).paginationToken;\n } else if (direction === Direction.Backward) {\n return this.startToken;\n } else {\n return this.endToken;\n }\n }\n\n /**\n * Set a pagination token\n *\n * @param token - pagination token\n *\n * @param direction - EventTimeline.BACKWARDS to set the pagination\n * token for going backwards in time; EventTimeline.FORWARDS to set the\n * pagination token for going forwards in time.\n */\n setPaginationToken(token, direction) {\n if (this.roomId) {\n this.getState(direction).paginationToken = token;\n } else if (direction === Direction.Backward) {\n this.startToken = token;\n } else {\n this.endToken = token;\n }\n }\n\n /**\n * Get the next timeline in the series\n *\n * @param direction - EventTimeline.BACKWARDS to get the previous\n * timeline; EventTimeline.FORWARDS to get the next timeline.\n *\n * @returns previous or following timeline, if they have been\n * joined up.\n */\n getNeighbouringTimeline(direction) {\n if (direction == EventTimeline.BACKWARDS) {\n return this.prevTimeline;\n } else if (direction == EventTimeline.FORWARDS) {\n return this.nextTimeline;\n } else {\n throw new Error(\"Invalid direction '\" + direction + \"'\");\n }\n }\n\n /**\n * Set the next timeline in the series\n *\n * @param neighbour - previous/following timeline\n *\n * @param direction - EventTimeline.BACKWARDS to set the previous\n * timeline; EventTimeline.FORWARDS to set the next timeline.\n *\n * @throws Error if an attempt is made to set the neighbouring timeline when\n * it is already set.\n */\n setNeighbouringTimeline(neighbour, direction) {\n if (this.getNeighbouringTimeline(direction)) {\n throw new Error(\"timeline already has a neighbouring timeline - \" + \"cannot reset neighbour (direction: \" + direction + \")\");\n }\n if (direction == EventTimeline.BACKWARDS) {\n this.prevTimeline = neighbour;\n } else if (direction == EventTimeline.FORWARDS) {\n this.nextTimeline = neighbour;\n } else {\n throw new Error(\"Invalid direction '\" + direction + \"'\");\n }\n\n // make sure we don't try to paginate this timeline\n this.setPaginationToken(null, direction);\n }\n\n /**\n * Add a new event to the timeline, and update the state\n *\n * @param event - new event\n * @param options - addEvent options\n */\n addEvent(event, _ref2) {\n var toStartOfTimeline = _ref2.toStartOfTimeline,\n roomState = _ref2.roomState,\n timelineWasEmpty = _ref2.timelineWasEmpty,\n addToState = _ref2.addToState;\n if (!roomState) {\n roomState = toStartOfTimeline ? this.startState : this.endState;\n }\n var timelineSet = this.getTimelineSet();\n if (timelineSet.room) {\n EventTimeline.setEventMetadata(event, roomState, toStartOfTimeline);\n\n // modify state but only on unfiltered timelineSets\n if (addToState && event.isState() && timelineSet.room.getUnfilteredTimelineSet() === timelineSet) {\n var _roomState;\n (_roomState = roomState) === null || _roomState === void 0 || _roomState.setStateEvents([event], {\n timelineWasEmpty\n });\n // it is possible that the act of setting the state event means we\n // can set more metadata (specifically sender/target props), so try\n // it again if the prop wasn't previously set. It may also mean that\n // the sender/target is updated (if the event set was a room member event)\n // so we want to use the *updated* member (new avatar/name) instead.\n //\n // However, we do NOT want to do this on member events if we're going\n // back in time, else we'll set the .sender value for BEFORE the given\n // member event, whereas we want to set the .sender value for the ACTUAL\n // member event itself.\n if (!event.sender || event.getType() === EventType.RoomMember && !toStartOfTimeline) {\n EventTimeline.setEventMetadata(event, roomState, toStartOfTimeline);\n }\n }\n }\n var insertIndex;\n if (toStartOfTimeline) {\n insertIndex = 0;\n } else {\n insertIndex = this.events.length;\n }\n this.events.splice(insertIndex, 0, event); // insert element\n if (toStartOfTimeline) {\n this.baseIndex++;\n }\n }\n\n /**\n * Insert a new event into the timeline, and update the state.\n *\n * TEMPORARY: until we have recursive relations, we need this function\n * to exist to allow us to insert events in timeline order, which is our\n * best guess for Sync Order.\n * This is a copy of addEvent above, modified to allow inserting an event at\n * a specific index.\n *\n * @internal\n */\n insertEvent(event, insertIndex, roomState, addToState) {\n var timelineSet = this.getTimelineSet();\n if (timelineSet.room) {\n EventTimeline.setEventMetadata(event, roomState, false);\n\n // modify state but only on unfiltered timelineSets\n if (addToState && event.isState() && timelineSet.room.getUnfilteredTimelineSet() === timelineSet) {\n roomState.setStateEvents([event], {});\n // it is possible that the act of setting the state event means we\n // can set more metadata (specifically sender/target props), so try\n // it again if the prop wasn't previously set. It may also mean that\n // the sender/target is updated (if the event set was a room member event)\n // so we want to use the *updated* member (new avatar/name) instead.\n //\n // However, we do NOT want to do this on member events if we're going\n // back in time, else we'll set the .sender value for BEFORE the given\n // member event, whereas we want to set the .sender value for the ACTUAL\n // member event itself.\n if (!event.sender || event.getType() === EventType.RoomMember) {\n EventTimeline.setEventMetadata(event, roomState, false);\n }\n }\n }\n this.events.splice(insertIndex, 0, event); // insert element\n }\n\n /**\n * Remove an event from the timeline\n *\n * @param eventId - ID of event to be removed\n * @returns removed event, or null if not found\n */\n removeEvent(eventId) {\n for (var i = this.events.length - 1; i >= 0; i--) {\n var ev = this.events[i];\n if (ev.getId() == eventId) {\n this.events.splice(i, 1);\n if (i < this.baseIndex) {\n this.baseIndex--;\n }\n return ev;\n }\n }\n return null;\n }\n\n /**\n * Return a string to identify this timeline, for debugging\n *\n * @returns name for this timeline\n */\n toString() {\n return this.name;\n }\n}\n/**\n * Symbolic constant for methods which take a 'direction' argument:\n * refers to the start of the timeline, or backwards in time.\n */\n_defineProperty(EventTimeline, \"BACKWARDS\", Direction.Backward);\n/**\n * Symbolic constant for methods which take a 'direction' argument:\n * refers to the end of the timeline, or forwards in time.\n */\n_defineProperty(EventTimeline, \"FORWARDS\", Direction.Forward);\n//# sourceMappingURL=event-timeline.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2019, 2021, 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { EventStatus, MatrixEventEvent } from \"./event.js\";\nimport { logger } from \"../logger.js\";\nimport { RelationType } from \"../@types/event.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nimport { Room } from \"./room.js\";\nexport var RelationsEvent = /*#__PURE__*/function (RelationsEvent) {\n RelationsEvent[\"Add\"] = \"Relations.add\";\n RelationsEvent[\"Remove\"] = \"Relations.remove\";\n RelationsEvent[\"Redaction\"] = \"Relations.redaction\";\n return RelationsEvent;\n}({});\nvar matchesEventType = function matchesEventType(eventType, targetEventType) {\n var altTargetEventTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n return [targetEventType, ...altTargetEventTypes].includes(eventType);\n};\n\n/**\n * A container for relation events that supports easy access to common ways of\n * aggregating such events. Each instance holds events that of a single relation\n * type and event type. All of the events also relate to the same original event.\n *\n * The typical way to get one of these containers is via\n * EventTimelineSet#getRelationsForEvent.\n */\nexport class Relations extends TypedEventEmitter {\n /**\n * @param relationType - The type of relation involved, such as \"m.annotation\", \"m.reference\", \"m.replace\", etc.\n * @param eventType - The relation event's type, such as \"m.reaction\", etc.\n * @param client - The client which created this instance. For backwards compatibility also accepts a Room.\n * @param altEventTypes - alt event types for relation events, for example to support unstable prefixed event types\n */\n constructor(relationType, eventType, client, altEventTypes) {\n var _this;\n super();\n _this = this;\n this.relationType = relationType;\n this.eventType = eventType;\n this.altEventTypes = altEventTypes;\n _defineProperty(this, \"relationEventIds\", new Set());\n _defineProperty(this, \"relations\", new Set());\n _defineProperty(this, \"annotationsByKey\", {});\n _defineProperty(this, \"annotationsBySender\", {});\n _defineProperty(this, \"sortedAnnotationsByKey\", []);\n _defineProperty(this, \"targetEvent\", null);\n _defineProperty(this, \"creationEmitted\", false);\n _defineProperty(this, \"replacementUpdateId\", 0);\n _defineProperty(this, \"client\", void 0);\n /**\n * Listens for event status changes to remove cancelled events.\n *\n * @param event - The event whose status has changed\n * @param status - The new status\n */\n _defineProperty(this, \"onEventStatus\", (event, status) => {\n if (!event.isSending()) {\n // Sending is done, so we don't need to listen anymore\n event.removeListener(MatrixEventEvent.Status, this.onEventStatus);\n return;\n }\n if (status !== EventStatus.CANCELLED) {\n return;\n }\n // Event was cancelled, remove from the collection\n event.removeListener(MatrixEventEvent.Status, this.onEventStatus);\n this.removeEvent(event);\n });\n /**\n * For relations that have been redacted, we want to remove them from\n * aggregation data sets and emit an update event.\n *\n * To do so, we listen for `Event.beforeRedaction`, which happens:\n * - after the server accepted the redaction and remote echoed back to us\n * - before the original event has been marked redacted in the client\n *\n * @param redactedEvent - The original relation event that is about to be redacted.\n */\n _defineProperty(this, \"onBeforeRedaction\", /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (redactedEvent) {\n if (!_this.relations.has(redactedEvent)) {\n return;\n }\n _this.relations.delete(redactedEvent);\n if (_this.relationType === RelationType.Annotation) {\n // Remove the redacted annotation from aggregation by key\n _this.removeAnnotationFromAggregation(redactedEvent);\n } else if (_this.relationType === RelationType.Replace) {\n yield _this.updateTargetEventReplacement();\n }\n redactedEvent.removeListener(MatrixEventEvent.BeforeRedaction, _this.onBeforeRedaction);\n _this.emit(RelationsEvent.Redaction, redactedEvent);\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n this.client = client instanceof Room ? client.client : client;\n }\n\n /**\n * Add relation events to this collection.\n *\n * @param event - The new relation event to be added.\n */\n addEvent(event) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (_this2.relationEventIds.has(event.getId())) {\n return;\n }\n var relation = event.getRelation();\n if (!relation) {\n logger.error(\"Event must have relation info\");\n return;\n }\n var relationType = relation.rel_type;\n var eventType = event.getType();\n if (_this2.relationType !== relationType || !matchesEventType(eventType, _this2.eventType, _this2.altEventTypes)) {\n logger.error(\"Event relation info doesn't match this container\");\n return;\n }\n\n // If the event is in the process of being sent, listen for cancellation\n // so we can remove the event from the collection.\n if (event.isSending()) {\n event.on(MatrixEventEvent.Status, _this2.onEventStatus);\n }\n _this2.relations.add(event);\n _this2.relationEventIds.add(event.getId());\n if (_this2.relationType === RelationType.Annotation) {\n _this2.addAnnotationToAggregation(event);\n } else if (_this2.relationType === RelationType.Replace) {\n yield _this2.updateTargetEventReplacement();\n }\n event.on(MatrixEventEvent.BeforeRedaction, _this2.onBeforeRedaction);\n _this2.emit(RelationsEvent.Add, event);\n _this2.maybeEmitCreated();\n })();\n }\n\n /**\n * Remove relation event from this collection.\n *\n * @param event - The relation event to remove.\n */\n removeEvent(event) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (!_this3.relations.has(event)) {\n return;\n }\n _this3.relations.delete(event);\n if (_this3.relationType === RelationType.Annotation) {\n _this3.removeAnnotationFromAggregation(event);\n } else if (_this3.relationType === RelationType.Replace) {\n yield _this3.updateTargetEventReplacement();\n }\n _this3.emit(RelationsEvent.Remove, event);\n })();\n }\n /**\n * Get all relation events in this collection.\n *\n * These are currently in the order of insertion to this collection, which\n * won't match timeline order in the case of scrollback.\n * TODO: Tweak `addEvent` to insert correctly for scrollback.\n *\n * Relation events in insertion order.\n */\n getRelations() {\n return [...this.relations];\n }\n addAnnotationToAggregation(event) {\n var _event$getRelation;\n var _ref2 = (_event$getRelation = event.getRelation()) !== null && _event$getRelation !== void 0 ? _event$getRelation : {},\n key = _ref2.key;\n if (!key) return;\n var eventsForKey = this.annotationsByKey[key];\n if (!eventsForKey) {\n eventsForKey = this.annotationsByKey[key] = new Set();\n this.sortedAnnotationsByKey.push([key, eventsForKey]);\n }\n // Add the new event to the set for this key\n eventsForKey.add(event);\n // Re-sort the [key, events] pairs in descending order of event count\n this.sortedAnnotationsByKey.sort((a, b) => {\n var aEvents = a[1];\n var bEvents = b[1];\n return bEvents.size - aEvents.size;\n });\n var sender = event.getSender();\n var eventsFromSender = this.annotationsBySender[sender];\n if (!eventsFromSender) {\n eventsFromSender = this.annotationsBySender[sender] = new Set();\n }\n // Add the new event to the set for this sender\n eventsFromSender.add(event);\n }\n removeAnnotationFromAggregation(event) {\n var _event$getRelation2;\n var _ref3 = (_event$getRelation2 = event.getRelation()) !== null && _event$getRelation2 !== void 0 ? _event$getRelation2 : {},\n key = _ref3.key;\n if (!key) return;\n var eventsForKey = this.annotationsByKey[key];\n if (eventsForKey) {\n eventsForKey.delete(event);\n\n // Re-sort the [key, events] pairs in descending order of event count\n this.sortedAnnotationsByKey.sort((a, b) => {\n var aEvents = a[1];\n var bEvents = b[1];\n return bEvents.size - aEvents.size;\n });\n }\n var sender = event.getSender();\n var eventsFromSender = this.annotationsBySender[sender];\n if (eventsFromSender) {\n eventsFromSender.delete(event);\n }\n }\n /**\n * Get all events in this collection grouped by key and sorted by descending\n * event count in each group.\n *\n * This is currently only supported for the annotation relation type.\n *\n * An array of [key, events] pairs sorted by descending event count.\n * The events are stored in a Set (which preserves insertion order).\n */\n getSortedAnnotationsByKey() {\n if (this.relationType !== RelationType.Annotation) {\n // Other relation types are not grouped currently.\n return null;\n }\n return this.sortedAnnotationsByKey;\n }\n\n /**\n * Get all events in this collection grouped by sender.\n *\n * This is currently only supported for the annotation relation type.\n *\n * An object with each relation sender as a key and the matching Set of\n * events for that sender as a value.\n */\n getAnnotationsBySender() {\n if (this.relationType !== RelationType.Annotation) {\n // Other relation types are not grouped currently.\n return null;\n }\n return this.annotationsBySender;\n }\n\n /**\n * Returns the most recent (and allowed) m.replace relation, if any.\n *\n * This is currently only supported for the m.replace relation type,\n * once the target event is known, see `addEvent`.\n */\n getLastReplacement() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (_this4.relationType !== RelationType.Replace) {\n // Aggregating on last only makes sense for this relation type\n return null;\n }\n if (!_this4.targetEvent) {\n // Don't know which replacements to accept yet.\n // This method shouldn't be called before the original\n // event is known anyway.\n return null;\n }\n\n // the all-knowning server tells us that the event at some point had\n // this timestamp for its replacement, so any following replacement should definitely not be less\n var replaceRelation = _this4.targetEvent.getServerAggregatedRelation(RelationType.Replace);\n var minTs = replaceRelation === null || replaceRelation === void 0 ? void 0 : replaceRelation.origin_server_ts;\n var lastReplacement = _this4.getRelations().reduce((last, event) => {\n if (event.getSender() !== _this4.targetEvent.getSender()) {\n return last;\n }\n if (minTs && minTs > event.getTs()) {\n return last;\n }\n if (last && last.getTs() > event.getTs()) {\n return last;\n }\n return event;\n }, null);\n if (lastReplacement !== null && lastReplacement !== void 0 && lastReplacement.shouldAttemptDecryption() && _this4.client.getCrypto()) {\n // Dirty but we are expecting to pass the cryptoBackend which is not accessible here\n yield lastReplacement.attemptDecryption(_this4.client.getCrypto());\n } else if (lastReplacement !== null && lastReplacement !== void 0 && lastReplacement.isBeingDecrypted()) {\n yield lastReplacement.getDecryptionPromise();\n }\n return lastReplacement;\n })();\n }\n\n /*\n * @param targetEvent - the event the relations are related to.\n */\n setTargetEvent(event) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n if (_this5.targetEvent) {\n return;\n }\n _this5.targetEvent = event;\n if (_this5.relationType === RelationType.Replace) {\n yield _this5.updateTargetEventReplacement();\n }\n _this5.maybeEmitCreated();\n })();\n }\n\n /**\n * Updates the target event with the latest replacement.\n *\n * Multiple replacement updates can be triggered concurrently (for example\n * while edits are still being decrypted). A monotonic update counter guards\n * against older async resolutions overriding newer replacement selections.\n */\n updateTargetEventReplacement() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!_this6.targetEvent || _this6.targetEvent.isState()) {\n return;\n }\n var targetEvent = _this6.targetEvent;\n var updateId = ++_this6.replacementUpdateId;\n var lastReplacement = yield _this6.getLastReplacement();\n\n // If a newer update started while we were awaiting, discard this stale result.\n if (updateId !== _this6.replacementUpdateId || _this6.targetEvent !== targetEvent) {\n return;\n }\n\n // Avoid emitting Event.replaced when there is no replacement and none currently set.\n if (!lastReplacement && !targetEvent.replacingEvent()) {\n return;\n }\n targetEvent.makeReplaced(lastReplacement !== null && lastReplacement !== void 0 ? lastReplacement : undefined);\n })();\n }\n maybeEmitCreated() {\n if (this.creationEmitted) {\n return;\n }\n // Only emit we're \"created\" once we have a target event instance _and_\n // at least one related event.\n if (!this.targetEvent || !this.relations.size) {\n return;\n }\n this.creationEmitted = true;\n this.targetEvent.emit(MatrixEventEvent.RelationsCreated, this.relationType, this.eventType);\n }\n}\n//# sourceMappingURL=relations.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { Relations } from \"./relations.js\";\nimport { EventStatus, MatrixEventEvent } from \"./event.js\";\nexport class RelationsContainer {\n constructor(client, room) {\n this.client = client;\n this.room = room;\n // A tree of objects to access a set of related children for an event, as in:\n // this.relations.get(parentEventId).get(relationType).get(relationEventType)\n _defineProperty(this, \"relations\", new Map());\n }\n\n /**\n * Get a collection of child events to a given event in this timeline set.\n *\n * @param eventId - The ID of the event that you'd like to access child events for.\n * For example, with annotations, this would be the ID of the event being annotated.\n * @param relationType - The type of relationship involved, such as \"m.annotation\", \"m.reference\", \"m.replace\", etc.\n * @param eventType - The relation event's type, such as \"m.reaction\", etc.\n * @throws If `eventId</code>, <code>relationType</code> or <code>eventType`\n * are not valid.\n *\n * @returns\n * A container for relation events or undefined if there are no relation events for\n * the relationType.\n */\n getChildEventsForEvent(eventId, relationType, eventType) {\n var _this$relations$get;\n return (_this$relations$get = this.relations.get(eventId)) === null || _this$relations$get === void 0 || (_this$relations$get = _this$relations$get.get(relationType)) === null || _this$relations$get === void 0 ? void 0 : _this$relations$get.get(eventType);\n }\n getAllChildEventsForEvent(parentEventId) {\n var _this$relations$get2;\n var relationsForEvent = (_this$relations$get2 = this.relations.get(parentEventId)) !== null && _this$relations$get2 !== void 0 ? _this$relations$get2 : new Map();\n var events = [];\n for (var relationsRecord of relationsForEvent.values()) {\n for (var relations of relationsRecord.values()) {\n events.push(...relations.getRelations());\n }\n }\n return events;\n }\n\n /**\n * Set an event as the target event if any Relations exist for it already.\n * Child events can point to other child events as their parent, so this method may be\n * called for events which are also logically child events.\n *\n * @param event - The event to check as relation target.\n */\n aggregateParentEvent(event) {\n var relationsForEvent = this.relations.get(event.getId());\n if (!relationsForEvent) return;\n for (var relationsWithRelType of relationsForEvent.values()) {\n for (var relationsWithEventType of relationsWithRelType.values()) {\n relationsWithEventType.setTargetEvent(event);\n }\n }\n }\n\n /**\n * Add relation events to the relevant relation collection.\n *\n * @param event - The new child event to be aggregated.\n * @param timelineSet - The event timeline set within which to search for the related event if any.\n */\n aggregateChildEvent(event, timelineSet) {\n if (event.isRedacted() || event.status === EventStatus.CANCELLED) {\n return;\n }\n var relation = event.getRelation();\n if (!relation) return;\n var onEventDecrypted = () => {\n if (event.isDecryptionFailure()) {\n // This could for example happen if the encryption keys are not yet available.\n // The event may still be decrypted later. Register the listener again.\n event.once(MatrixEventEvent.Decrypted, onEventDecrypted);\n return;\n }\n this.aggregateChildEvent(event, timelineSet);\n };\n\n // If the event is currently encrypted, wait until it has been decrypted.\n if (event.isBeingDecrypted() || event.shouldAttemptDecryption()) {\n event.once(MatrixEventEvent.Decrypted, onEventDecrypted);\n return;\n }\n var relatesToEventId = relation.event_id,\n relationType = relation.rel_type;\n var eventType = event.getType();\n var relationsForEvent = this.relations.get(relatesToEventId);\n if (!relationsForEvent) {\n relationsForEvent = new Map();\n this.relations.set(relatesToEventId, relationsForEvent);\n }\n var relationsWithRelType = relationsForEvent.get(relationType);\n if (!relationsWithRelType) {\n relationsWithRelType = new Map();\n relationsForEvent.set(relationType, relationsWithRelType);\n }\n var relationsWithEventType = relationsWithRelType.get(eventType);\n if (!relationsWithEventType) {\n var _this$room, _ref, _timelineSet$findEven;\n relationsWithEventType = new Relations(relationType, eventType, this.client);\n relationsWithRelType.set(eventType, relationsWithEventType);\n var _room = (_this$room = this.room) !== null && _this$room !== void 0 ? _this$room : timelineSet === null || timelineSet === void 0 ? void 0 : timelineSet.room;\n var relatesToEvent = (_ref = (_timelineSet$findEven = timelineSet === null || timelineSet === void 0 ? void 0 : timelineSet.findEventById(relatesToEventId)) !== null && _timelineSet$findEven !== void 0 ? _timelineSet$findEven : _room === null || _room === void 0 ? void 0 : _room.findEventById(relatesToEventId)) !== null && _ref !== void 0 ? _ref : _room === null || _room === void 0 ? void 0 : _room.getPendingEvent(relatesToEventId);\n if (relatesToEvent) {\n relationsWithEventType.setTargetEvent(relatesToEvent);\n }\n }\n relationsWithEventType.addEvent(event);\n }\n}\n//# sourceMappingURL=relations-container.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2016 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { EventTimeline } from \"./event-timeline.js\";\nimport { logger } from \"../logger.js\";\nimport { RoomEvent } from \"./room.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nimport { RelationsContainer } from \"./relations-container.js\";\nvar DEBUG = true;\n\n/* istanbul ignore next */\nvar debuglog;\nif (DEBUG) {\n // using bind means that we get to keep useful line numbers in the console\n debuglog = logger.log.bind(logger);\n} else {\n /* istanbul ignore next */\n debuglog = function debuglog() {};\n}\nexport var DuplicateStrategy = /*#__PURE__*/function (DuplicateStrategy) {\n DuplicateStrategy[\"Ignore\"] = \"ignore\";\n DuplicateStrategy[\"Replace\"] = \"replace\";\n return DuplicateStrategy;\n}({});\nexport class EventTimelineSet extends TypedEventEmitter {\n /**\n * Construct a set of EventTimeline objects, typically on behalf of a given\n * room. A room may have multiple EventTimelineSets for different levels\n * of filtering. The global notification list is also an EventTimelineSet, but\n * lacks a room.\n *\n * <p>This is an ordered sequence of timelines, which may or may not\n * be continuous. Each timeline lists a series of events, as well as tracking\n * the room state at the start and the end of the timeline (if appropriate).\n * It also tracks forward and backward pagination tokens, as well as containing\n * links to the next timeline in the sequence.\n *\n * <p>There is one special timeline - the 'live' timeline, which represents the\n * timeline to which events are being added in real-time as they are received\n * from the /sync API. Note that you should not retain references to this\n * timeline - even if it is the current timeline right now, it may not remain\n * so if the server gives us a timeline gap in /sync.\n *\n * <p>In order that we can find events from their ids later, we also maintain a\n * map from event_id to timeline and index.\n *\n * @param room - Room for this timelineSet. May be null for non-room cases, such as the\n * notification timeline.\n * @param opts - Options inherited from Room.\n * @param client - the Matrix client which owns this EventTimelineSet,\n * can be omitted if room is specified.\n * @param thread - the thread to which this timeline set relates.\n * @param threadListType - the type of thread list represented, if any\n * (e.g., All threads or My threads)\n */\n constructor(room) {\n var _this$room$relations, _this$room, _room$client;\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var client = arguments.length > 2 ? arguments[2] : undefined;\n var thread = arguments.length > 3 ? arguments[3] : undefined;\n var threadListType = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n super();\n this.room = room;\n this.thread = thread;\n this.threadListType = threadListType;\n _defineProperty(this, \"relations\", void 0);\n _defineProperty(this, \"timelineSupport\", void 0);\n _defineProperty(this, \"displayPendingEvents\", void 0);\n _defineProperty(this, \"liveTimeline\", void 0);\n _defineProperty(this, \"timelines\", void 0);\n _defineProperty(this, \"_eventIdToTimeline\", new Map());\n _defineProperty(this, \"filter\", void 0);\n this.timelineSupport = Boolean(opts.timelineSupport);\n this.liveTimeline = new EventTimeline(this);\n this.displayPendingEvents = opts.pendingEvents !== false;\n\n // just a list - *not* ordered.\n this.timelines = [this.liveTimeline];\n this._eventIdToTimeline = new Map();\n this.filter = opts.filter;\n this.relations = (_this$room$relations = (_this$room = this.room) === null || _this$room === void 0 ? void 0 : _this$room.relations) !== null && _this$room$relations !== void 0 ? _this$room$relations : new RelationsContainer((_room$client = room === null || room === void 0 ? void 0 : room.client) !== null && _room$client !== void 0 ? _room$client : client);\n }\n\n /**\n * Get all the timelines in this set\n * @returns the timelines in this set\n */\n getTimelines() {\n return this.timelines;\n }\n\n /**\n * Get the filter object this timeline set is filtered on, if any\n * @returns the optional filter for this timelineSet\n */\n getFilter() {\n return this.filter;\n }\n\n /**\n * Set the filter object this timeline set is filtered on\n * (passed to the server when paginating via /messages).\n * @param filter - the filter for this timelineSet\n */\n setFilter(filter) {\n this.filter = filter;\n }\n\n /**\n * Get the list of pending sent events for this timelineSet's room, filtered\n * by the timelineSet's filter if appropriate.\n *\n * @returns A list of the sent events\n * waiting for remote echo.\n *\n * @throws If `opts.pendingEventOrdering` was not 'detached'\n */\n getPendingEvents() {\n if (!this.room || !this.displayPendingEvents) {\n return [];\n }\n return this.room.getPendingEvents();\n }\n /**\n * Get the live timeline for this room.\n *\n * @returns live timeline\n */\n getLiveTimeline() {\n return this.liveTimeline;\n }\n\n /**\n * Set the live timeline for this room.\n *\n * @returns live timeline\n */\n setLiveTimeline(timeline) {\n this.liveTimeline = timeline;\n }\n\n /**\n * Return the timeline (if any) this event is in.\n * @param eventId - the eventId being sought\n * @returns timeline\n */\n eventIdToTimeline(eventId) {\n return this._eventIdToTimeline.get(eventId);\n }\n\n /**\n * Track a new event as if it were in the same timeline as an old event,\n * replacing it.\n * @param oldEventId - event ID of the original event\n * @param newEventId - event ID of the replacement event\n */\n replaceEventId(oldEventId, newEventId) {\n var existingTimeline = this._eventIdToTimeline.get(oldEventId);\n if (existingTimeline) {\n this._eventIdToTimeline.delete(oldEventId);\n this._eventIdToTimeline.set(newEventId, existingTimeline);\n }\n }\n\n /**\n * Reset the live timeline, and start a new one.\n *\n * <p>This is used when /sync returns a 'limited' timeline.\n *\n * @param backPaginationToken - token for back-paginating the new timeline\n * @param forwardPaginationToken - token for forward-paginating the old live timeline,\n * if absent or null, all timelines are reset.\n *\n * @remarks\n * Fires {@link RoomEvent.TimelineReset}\n */\n resetLiveTimeline(backPaginationToken, forwardPaginationToken) {\n // Each EventTimeline has RoomState objects tracking the state at the start\n // and end of that timeline. The copies at the end of the live timeline are\n // special because they will have listeners attached to monitor changes to\n // the current room state, so we move this RoomState from the end of the\n // current live timeline to the end of the new one and, if necessary,\n // replace it with a newly created one. We also make a copy for the start\n // of the new timeline.\n\n // if timeline support is disabled, forget about the old timelines\n var resetAllTimelines = !this.timelineSupport || !forwardPaginationToken;\n var oldTimeline = this.liveTimeline;\n var newTimeline = resetAllTimelines ? oldTimeline.forkLive(EventTimeline.FORWARDS) : oldTimeline.fork(EventTimeline.FORWARDS);\n if (resetAllTimelines) {\n this.timelines = [newTimeline];\n this._eventIdToTimeline = new Map();\n } else {\n this.timelines.push(newTimeline);\n }\n if (forwardPaginationToken) {\n // Now set the forward pagination token on the old live timeline\n // so it can be forward-paginated.\n oldTimeline.setPaginationToken(forwardPaginationToken, EventTimeline.FORWARDS);\n }\n\n // make sure we set the pagination token before firing timelineReset,\n // otherwise clients which start back-paginating will fail, and then get\n // stuck without realising that they *can* back-paginate.\n newTimeline.setPaginationToken(backPaginationToken !== null && backPaginationToken !== void 0 ? backPaginationToken : null, EventTimeline.BACKWARDS);\n\n // Now we can swap the live timeline to the new one.\n this.liveTimeline = newTimeline;\n this.emit(RoomEvent.TimelineReset, this.room, this, resetAllTimelines);\n }\n\n /**\n * Get the timeline which contains the given event, if any\n *\n * @param eventId - event ID to look for\n * @returns timeline containing\n * the given event, or null if unknown\n */\n getTimelineForEvent(eventId) {\n if (eventId === null || eventId === undefined) {\n return null;\n }\n var res = this._eventIdToTimeline.get(eventId);\n return res === undefined ? null : res;\n }\n\n /**\n * Get an event which is stored in our timelines\n *\n * @param eventId - event ID to look for\n * @returns the given event, or undefined if unknown\n */\n findEventById(eventId) {\n var tl = this.getTimelineForEvent(eventId);\n if (!tl) {\n return undefined;\n }\n return tl.getEvents().find(function (ev) {\n return ev.getId() == eventId;\n });\n }\n\n /**\n * Add a new timeline to this timeline list\n *\n * @returns newly-created timeline\n */\n addTimeline() {\n if (!this.timelineSupport) {\n throw new Error(\"timeline support is disabled. Set the 'timelineSupport'\" + \" parameter to true when creating MatrixClient to enable\" + \" it.\");\n }\n var timeline = new EventTimeline(this);\n this.timelines.push(timeline);\n return timeline;\n }\n\n /**\n * Add events to a timeline\n *\n * <p>Will fire \"Room.timeline\" for each event added.\n *\n * @param events - A list of events to add.\n *\n * @param toStartOfTimeline - True to add these events to the start\n * (oldest) instead of the end (newest) of the timeline. If true, the oldest\n * event will be the <b>last</b> element of 'events'.\n *\n * @param timeline - timeline to\n * add events to.\n *\n * @param paginationToken - token for the next batch of events\n *\n * @remarks\n * Fires {@link RoomEvent.Timeline}\n *\n */\n addEventsToTimeline(events, toStartOfTimeline, addToState, timeline, paginationToken) {\n if (!timeline) {\n throw new Error(\"'timeline' not specified for EventTimelineSet.addEventsToTimeline\");\n }\n if (!toStartOfTimeline && timeline == this.liveTimeline) {\n throw new Error(\"EventTimelineSet.addEventsToTimeline cannot be used for adding events to \" + \"the live timeline - use Room.addLiveEvents instead\");\n }\n if (this.filter) {\n events = this.filter.filterRoomTimeline(events);\n if (!events.length) {\n return;\n }\n }\n var direction = toStartOfTimeline ? EventTimeline.BACKWARDS : EventTimeline.FORWARDS;\n var inverseDirection = toStartOfTimeline ? EventTimeline.FORWARDS : EventTimeline.BACKWARDS;\n\n // Adding events to timelines can be quite complicated. The following\n // illustrates some of the corner-cases.\n //\n // Let's say we start by knowing about four timelines. timeline3 and\n // timeline4 are neighbours:\n //\n // timeline1 timeline2 timeline3 timeline4\n // [M] [P] [S] <------> [T]\n //\n // Now we paginate timeline1, and get the following events from the server:\n // [M, N, P, R, S, T, U].\n //\n // 1. First, we ignore event M, since we already know about it.\n //\n // 2. Next, we append N to timeline 1.\n //\n // 3. Next, we don't add event P, since we already know about it,\n // but we do link together the timelines. We now have:\n //\n // timeline1 timeline2 timeline3 timeline4\n // [M, N] <---> [P] [S] <------> [T]\n //\n // 4. Now we add event R to timeline2:\n //\n // timeline1 timeline2 timeline3 timeline4\n // [M, N] <---> [P, R] [S] <------> [T]\n //\n // Note that we have switched the timeline we are working on from\n // timeline1 to timeline2.\n //\n // 5. We ignore event S, but again join the timelines:\n //\n // timeline1 timeline2 timeline3 timeline4\n // [M, N] <---> [P, R] <---> [S] <------> [T]\n //\n // 6. We ignore event T, and the timelines are already joined, so there\n // is nothing to do.\n //\n // 7. Finally, we add event U to timeline4:\n //\n // timeline1 timeline2 timeline3 timeline4\n // [M, N] <---> [P, R] <---> [S] <------> [T, U]\n //\n // The important thing to note in the above is what happened when we\n // already knew about a given event:\n //\n // - if it was appropriate, we joined up the timelines (steps 3, 5).\n // - in any case, we started adding further events to the timeline which\n // contained the event we knew about (steps 3, 5, 6).\n //\n //\n // So much for adding events to the timeline. But what do we want to do\n // with the pagination token?\n //\n // In the case above, we will be given a pagination token which tells us how to\n // get events beyond 'U' - in this case, it makes sense to store this\n // against timeline4. But what if timeline4 already had 'U' and beyond? in\n // that case, our best bet is to throw away the pagination token we were\n // given and stick with whatever token timeline4 had previously. In short,\n // we want to only store the pagination token if the last event we receive\n // is one we didn't previously know about.\n //\n // We make an exception for this if it turns out that we already knew about\n // *all* of the events, and we weren't able to join up any timelines. When\n // that happens, it means our existing pagination token is faulty, since it\n // is only telling us what we already know. Rather than repeatedly\n // paginating with the same token, we might as well use the new pagination\n // token in the hope that we eventually work our way out of the mess.\n\n var didUpdate = false;\n var lastEventWasNew = false;\n for (var event of events) {\n var eventId = event.getId();\n var existingTimeline = this._eventIdToTimeline.get(eventId);\n if (!existingTimeline) {\n // we don't know about this event yet. Just add it to the timeline.\n this.addEventToTimeline(event, timeline, {\n toStartOfTimeline,\n addToState\n });\n lastEventWasNew = true;\n didUpdate = true;\n continue;\n }\n lastEventWasNew = false;\n if (existingTimeline == timeline) {\n debuglog(\"Event \" + eventId + \" already in timeline \" + timeline);\n continue;\n }\n var neighbour = timeline.getNeighbouringTimeline(direction);\n if (neighbour) {\n // this timeline already has a neighbour in the relevant direction;\n // let's assume the timelines are already correctly linked up, and\n // skip over to it.\n //\n // there's probably some edge-case here where we end up with an\n // event which is in a timeline a way down the chain, and there is\n // a break in the chain somewhere. But I can't really imagine how\n // that would happen, so I'm going to ignore it for now.\n //\n if (existingTimeline == neighbour) {\n debuglog(\"Event \" + eventId + \" in neighbouring timeline - \" + \"switching to \" + existingTimeline);\n } else {\n debuglog(\"Event \" + eventId + \" already in a different \" + \"timeline \" + existingTimeline);\n }\n timeline = existingTimeline;\n continue;\n }\n\n // time to join the timelines.\n logger.info(\"Already have timeline for \" + eventId + \" - joining timeline \" + timeline + \" to \" + existingTimeline);\n\n // Variables to keep the line length limited below.\n var existingIsLive = existingTimeline === this.liveTimeline;\n var timelineIsLive = timeline === this.liveTimeline;\n var backwardsIsLive = direction === EventTimeline.BACKWARDS && existingIsLive;\n var forwardsIsLive = direction === EventTimeline.FORWARDS && timelineIsLive;\n if (backwardsIsLive || forwardsIsLive) {\n // The live timeline should never be spliced into a non-live position.\n // We use independent logging to better discover the problem at a glance.\n if (backwardsIsLive) {\n logger.warn(\"Refusing to set a preceding existingTimeLine on our \" + \"timeline as the existingTimeLine is live (\" + existingTimeline + \")\");\n }\n if (forwardsIsLive) {\n logger.warn(\"Refusing to set our preceding timeline on a existingTimeLine \" + \"as our timeline is live (\" + timeline + \")\");\n }\n continue; // abort splicing - try next event\n }\n timeline.setNeighbouringTimeline(existingTimeline, direction);\n existingTimeline.setNeighbouringTimeline(timeline, inverseDirection);\n timeline = existingTimeline;\n didUpdate = true;\n }\n\n // see above - if the last event was new to us, or if we didn't find any\n // new information, we update the pagination token for whatever\n // timeline we ended up on.\n if (lastEventWasNew || !didUpdate) {\n if (direction === EventTimeline.FORWARDS && timeline === this.liveTimeline) {\n logger.warn({\n lastEventWasNew,\n didUpdate\n }); // for debugging\n logger.warn(\"Refusing to set forwards pagination token of live timeline \" + \"\".concat(timeline, \" to \").concat(paginationToken));\n return;\n }\n timeline.setPaginationToken(paginationToken !== null && paginationToken !== void 0 ? paginationToken : null, direction);\n }\n }\n\n /**\n * Add an event to the end of this live timeline.\n *\n * @param event - Event to be added\n * @param options - addLiveEvent options\n */\n addLiveEvent(event, _ref) {\n var duplicateStrategy = _ref.duplicateStrategy,\n fromCache = _ref.fromCache,\n roomState = _ref.roomState,\n timelineWasEmpty = _ref.timelineWasEmpty,\n addToState = _ref.addToState;\n if (this.filter) {\n var events = this.filter.filterRoomTimeline([event]);\n if (!events.length) {\n return;\n }\n }\n var timeline = this._eventIdToTimeline.get(event.getId());\n if (timeline) {\n if (duplicateStrategy === DuplicateStrategy.Replace) {\n debuglog(\"EventTimelineSet.addLiveEvent: replacing duplicate event \" + event.getId());\n var tlEvents = timeline.getEvents();\n for (var j = 0; j < tlEvents.length; j++) {\n if (tlEvents[j].getId() === event.getId()) {\n // still need to set the right metadata on this event\n if (!roomState) {\n roomState = timeline.getState(EventTimeline.FORWARDS);\n }\n EventTimeline.setEventMetadata(event, roomState, false);\n tlEvents[j] = event;\n\n // XXX: we need to fire an event when this happens.\n break;\n }\n }\n } else {\n debuglog(\"EventTimelineSet.addLiveEvent: ignoring duplicate event \" + event.getId());\n }\n return;\n }\n this.addEventToTimeline(event, this.liveTimeline, {\n toStartOfTimeline: false,\n fromCache,\n roomState,\n timelineWasEmpty,\n addToState\n });\n }\n\n /**\n * Add event to the given timeline, and emit Room.timeline. Assumes\n * we have already checked we don't know about this event.\n *\n * Will fire \"Room.timeline\" for each event added.\n *\n * @param event - the event to add\n * @param timeline - the timeline onto which to add it\n * @param options - addEventToTimeline options\n *\n * @remarks\n * Fires {@link RoomEvent.Timeline}\n */\n addEventToTimeline(event, timeline, _ref2) {\n var toStartOfTimeline = _ref2.toStartOfTimeline,\n _ref2$fromCache = _ref2.fromCache,\n fromCache = _ref2$fromCache === void 0 ? false : _ref2$fromCache,\n roomState = _ref2.roomState,\n timelineWasEmpty = _ref2.timelineWasEmpty,\n addToState = _ref2.addToState;\n if (timeline.getTimelineSet() !== this) {\n var _this$thread;\n throw new Error(\"EventTimelineSet.addEventToTimeline: Timeline=\".concat(timeline.toString(), \" does not belong \\\" +\\n \\\"in timelineSet(threadId=\").concat((_this$thread = this.thread) === null || _this$thread === void 0 ? void 0 : _this$thread.id, \")\"));\n }\n var eventId = event.getId();\n this.relations.aggregateParentEvent(event);\n this.relations.aggregateChildEvent(event, this);\n\n // Make sure events don't get mixed in timelines they shouldn't be in (e.g. a\n // threaded message should not be in the main timeline).\n //\n // We can only run this check for timelines with a `room` because `canContain`\n // requires it\n if (this.room && !this.canContain(event)) {\n var _this$thread2;\n var eventDebugString = \"event=\".concat(eventId);\n if (event.threadRootId) {\n eventDebugString += \"(belongs to thread=\".concat(event.threadRootId, \")\");\n }\n logger.warn(\"EventTimelineSet.addEventToTimeline: Ignoring \".concat(eventDebugString, \" that does not belong \") + \"in timeline=\".concat(timeline.toString(), \" timelineSet(threadId=\").concat((_this$thread2 = this.thread) === null || _this$thread2 === void 0 ? void 0 : _this$thread2.id, \")\"));\n return;\n }\n timeline.addEvent(event, {\n toStartOfTimeline,\n roomState,\n timelineWasEmpty,\n addToState\n });\n this._eventIdToTimeline.set(eventId, timeline);\n var data = {\n timeline: timeline,\n liveEvent: !toStartOfTimeline && timeline == this.liveTimeline && !fromCache\n };\n this.emit(RoomEvent.Timeline, event, this.room, Boolean(toStartOfTimeline), false, data);\n }\n\n /**\n * Insert event to the given timeline, and emit Room.timeline. Assumes\n * we have already checked we don't know about this event.\n *\n * TEMPORARY: until we have recursive relations, we need this function\n * to exist to allow us to insert events in timeline order, which is our\n * best guess for Sync Order.\n * This is a copy of addEventToTimeline above, modified to insert the event\n * after the event it relates to, and before any event with a later\n * timestamp. This is our best guess at Sync Order.\n *\n * Will fire \"Room.timeline\" for each event added.\n *\n * @internal\n *\n * @remarks\n * Fires {@link RoomEvent.Timeline}\n */\n insertEventIntoTimeline(event, timeline, roomState, addToState) {\n if (timeline.getTimelineSet() !== this) {\n var _this$thread3;\n throw new Error(\"EventTimelineSet.insertEventIntoTimeline: Timeline=\".concat(timeline.toString(), \" does not belong \\\" +\\n \\\"in timelineSet(threadId=\").concat((_this$thread3 = this.thread) === null || _this$thread3 === void 0 ? void 0 : _this$thread3.id, \")\"));\n }\n var eventId = event.getId();\n this.relations.aggregateParentEvent(event);\n this.relations.aggregateChildEvent(event, this);\n\n // Make sure events don't get mixed in timelines they shouldn't be in (e.g. a\n // threaded message should not be in the main timeline).\n //\n // We can only run this check for timelines with a `room` because `canContain`\n // requires it\n if (this.room && !this.canContain(event)) {\n var _this$thread4;\n var eventDebugString = \"event=\".concat(eventId);\n if (event.threadRootId) {\n eventDebugString += \"(belongs to thread=\".concat(event.threadRootId, \")\");\n }\n logger.warn(\"EventTimelineSet.insertEventIntoTimeline: Ignoring \".concat(eventDebugString, \" that does not belong \") + \"in timeline=\".concat(timeline.toString(), \" timelineSet(threadId=\").concat((_this$thread4 = this.thread) === null || _this$thread4 === void 0 ? void 0 : _this$thread4.id, \")\"));\n return;\n }\n\n // Find the event that this event is related to - the \"parent\"\n var parentEventId = event.relationEventId;\n if (!parentEventId) {\n // Not related to anything - we just append\n this.addEventToTimeline(event, timeline, {\n toStartOfTimeline: false,\n fromCache: false,\n timelineWasEmpty: false,\n roomState,\n addToState\n });\n return;\n }\n var parentEvent = this.findEventById(parentEventId);\n var timelineEvents = timeline.getEvents();\n\n // Start searching from the parent event, or if it's not loaded, start\n // at the beginning and insert purely using timestamp order.\n var parentIndex = parentEvent !== undefined ? timelineEvents.indexOf(parentEvent) : 0;\n var insertIndex = parentIndex;\n for (; insertIndex < timelineEvents.length; insertIndex++) {\n var nextEvent = timelineEvents[insertIndex];\n if (nextEvent.getTs() > event.getTs()) {\n // We found an event later than ours, so insert before that.\n break;\n }\n }\n // If we got to the end of the loop, insertIndex points at the end of\n // the list.\n\n timeline.insertEvent(event, insertIndex, roomState, addToState);\n this._eventIdToTimeline.set(eventId, timeline);\n var data = {\n timeline: timeline,\n // The purpose of this method is inserting events in the middle of the\n // timeline, so the events are, by definition, not live (whether or not\n // we're adding them to the live timeline).\n liveEvent: false\n };\n this.emit(RoomEvent.Timeline, event, this.room, false, false, data);\n }\n\n /**\n * Replaces event with ID oldEventId with one with newEventId, if oldEventId is\n * recognised. Otherwise, add to the live timeline. Used to handle remote echos.\n *\n * @param localEvent - the new event to be added to the timeline\n * @param oldEventId - the ID of the original event\n * @param newEventId - the ID of the replacement event\n *\n * @remarks\n * Fires {@link RoomEvent.Timeline}\n */\n handleRemoteEcho(localEvent, oldEventId, newEventId) {\n // XXX: why don't we infer newEventId from localEvent?\n var existingTimeline = this._eventIdToTimeline.get(oldEventId);\n if (existingTimeline) {\n this._eventIdToTimeline.delete(oldEventId);\n this._eventIdToTimeline.set(newEventId, existingTimeline);\n } else if (!this.filter || this.filter.filterRoomTimeline([localEvent]).length) {\n this.addEventToTimeline(localEvent, this.liveTimeline, {\n toStartOfTimeline: false,\n addToState: false\n });\n }\n }\n\n /**\n * Removes a single event from this room.\n *\n * @param eventId - The id of the event to remove\n *\n * @returns the removed event, or null if the event was not found\n * in this room.\n */\n removeEvent(eventId) {\n var timeline = this._eventIdToTimeline.get(eventId);\n if (!timeline) {\n return null;\n }\n var removed = timeline.removeEvent(eventId);\n if (removed) {\n this._eventIdToTimeline.delete(eventId);\n var data = {\n timeline: timeline\n };\n this.emit(RoomEvent.Timeline, removed, this.room, undefined, true, data);\n }\n return removed;\n }\n\n /**\n * Determine where two events appear in the timeline relative to one another\n *\n * @param eventId1 - The id of the first event\n * @param eventId2 - The id of the second event\n * @returns -1 if eventId1 precedes eventId2, and +1 eventId1 succeeds\n * eventId2. 0 if they are the same event; null if we can't tell (either\n * because we don't know about one of the events, or because they are in\n * separate timelines which don't join up).\n */\n compareEventOrdering(eventId1, eventId2) {\n if (eventId1 == eventId2) {\n // optimise this case\n return 0;\n }\n var timeline1 = this._eventIdToTimeline.get(eventId1);\n var timeline2 = this._eventIdToTimeline.get(eventId2);\n if (timeline1 === undefined) {\n return null;\n }\n if (timeline2 === undefined) {\n return null;\n }\n if (timeline1 === timeline2) {\n // both events are in the same timeline - figure out their relative indices\n var idx1 = undefined;\n var idx2 = undefined;\n var events = timeline1.getEvents();\n for (var idx = 0; idx < events.length && (idx1 === undefined || idx2 === undefined); idx++) {\n var evId = events[idx].getId();\n if (evId == eventId1) {\n idx1 = idx;\n }\n if (evId == eventId2) {\n idx2 = idx;\n }\n }\n var difference = idx1 - idx2;\n\n // Return the sign of difference.\n if (difference < 0) {\n return -1;\n } else if (difference > 0) {\n return 1;\n } else {\n return 0;\n }\n }\n\n // the events are in different timelines. Iterate through the\n // linkedlist to see which comes first.\n\n // first work forwards from timeline1\n var tl = timeline1;\n while (tl) {\n if (tl === timeline2) {\n // timeline1 is before timeline2\n return -1;\n }\n tl = tl.getNeighbouringTimeline(EventTimeline.FORWARDS);\n }\n\n // now try backwards from timeline1\n tl = timeline1;\n while (tl) {\n if (tl === timeline2) {\n // timeline2 is before timeline1\n return 1;\n }\n tl = tl.getNeighbouringTimeline(EventTimeline.BACKWARDS);\n }\n\n // the timelines are not contiguous.\n return null;\n }\n\n /**\n * Determine whether a given event can sanely be added to this event timeline set,\n * for timeline sets relating to a thread, only return true for events in the same\n * thread timeline, for timeline sets not relating to a thread only return true\n * for events which should be shown in the main room timeline.\n * Requires the `room` property to have been set at EventTimelineSet construction time.\n *\n * @param event - the event to check whether it belongs to this timeline set.\n * @throws Error if `room` was not set when constructing this timeline set.\n * @returns whether the event belongs to this timeline set.\n */\n canContain(event) {\n if (!this.room) {\n throw new Error(\"Cannot call `EventTimelineSet::canContain without a `room` set. \" + \"Set the room when creating the EventTimelineSet to call this method.\");\n }\n var _this$room$eventShoul = this.room.eventShouldLiveIn(event),\n threadId = _this$room$eventShoul.threadId,\n shouldLiveInRoom = _this$room$eventShoul.shouldLiveInRoom,\n shouldLiveInThread = _this$room$eventShoul.shouldLiveInThread;\n if (this.thread) {\n return this.thread.id === threadId;\n }\n if (!shouldLiveInRoom && !shouldLiveInThread) {\n var _this$room2;\n logger.warn(\"EventTimelineSet:canContain event encountered which cannot be added to any timeline roomId=\".concat((_this$room2 = this.room) === null || _this$room2 === void 0 ? void 0 : _this$room2.roomId, \" eventId=\").concat(event.getId(), \" threadId=\").concat(event.threadRootId));\n }\n return shouldLiveInRoom;\n }\n}\n//# sourceMappingURL=event-timeline-set.js.map","/*\nCopyright 2015 - 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Enum for event statuses.\n * @readonly\n */\nexport var EventStatus = /*#__PURE__*/function (EventStatus) {\n /** The event was not sent and will no longer be retried. */\n EventStatus[\"NOT_SENT\"] = \"not_sent\";\n /** The message is being encrypted */\n EventStatus[\"ENCRYPTING\"] = \"encrypting\";\n /** The event is in the process of being sent. */\n EventStatus[\"SENDING\"] = \"sending\";\n /** The event is in a queue waiting to be sent. */\n EventStatus[\"QUEUED\"] = \"queued\";\n /** The event has been sent to the server, but we have not yet received the echo. */\n EventStatus[\"SENT\"] = \"sent\";\n /** The event was cancelled before it was successfully sent. */\n EventStatus[\"CANCELLED\"] = \"cancelled\";\n return EventStatus;\n}({});\n//# sourceMappingURL=event-status.js.map","/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * A stripped m.room.member event which contains the key renderable fields from the event,\n * sent only in simplified sliding sync (not `/v3/sync`).\n * This is very similar to MSC4186Hero from sliding-sync.ts but an internal format with\n * camelCase rather than underscores.\n */\n\n/**\n * High level summary information for a room, as returned by `/v3/sync`.\n */\n\n/**\n * Construct a new Room Summary. A summary can be used for display on a recent\n * list, without having to load the entire room list into memory.\n * @param roomId - Required. The ID of this room.\n * @param info - Optional. The summary info. Additional keys are supported.\n */\nexport class RoomSummary {\n constructor(roomId, info) {\n this.roomId = roomId;\n }\n}\n//# sourceMappingURL=room-summary.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015, 2016 OpenMarket Ltd\nCopyright 2017 Vector Creations Ltd\nCopyright 2017 New Vector Ltd\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// eslint-disable-next-line no-restricted-imports\n\nexport class ReEmitter {\n constructor(target) {\n this.target = target;\n // Map from emitter to event name to re-emitter\n _defineProperty(this, \"reEmitters\", new WeakMap());\n }\n reEmit(source, eventNames) {\n var _this = this;\n var reEmittersByEvent = this.reEmitters.get(source);\n if (!reEmittersByEvent) {\n reEmittersByEvent = new Map();\n this.reEmitters.set(source, reEmittersByEvent);\n }\n var _loop = function _loop(eventName) {\n if (reEmittersByEvent.has(eventName)) return 1; // continue\n\n // We include the source as the last argument for event handlers which may need it,\n // such as read receipt listeners on the client class which won't have the context\n // of the room.\n var forSource = function forSource() {\n // EventEmitter special cases 'error' to make the emit function throw if no\n // handler is attached, which sort of makes sense for making sure that something\n // handles an error, but for re-emitting, there could be a listener on the original\n // source object so the test doesn't really work. We *could* try to replicate the\n // same logic and throw if there is no listener on either the source or the target,\n // but this behaviour is fairly undesireable for us anyway: the main place we throw\n // 'error' events is for calls, where error events are usually emitted some time\n // later by a different part of the code where 'emit' throwing because the app hasn't\n // added an error handler isn't terribly helpful. (A better fix in retrospect may\n // have been to just avoid using the event name 'error', but backwards compat...)\n if (eventName === \"error\" && _this.target.listenerCount(\"error\") === 0) return;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this.target.emit(eventName, ...args, source);\n };\n source.on(eventName, forSource);\n reEmittersByEvent.set(eventName, forSource);\n };\n for (var eventName of eventNames) {\n if (_loop(eventName)) continue;\n }\n }\n stopReEmitting(source, eventNames) {\n var reEmittersByEvent = this.reEmitters.get(source);\n if (!reEmittersByEvent) return; // We were never re-emitting these events in the first place\n\n for (var eventName of eventNames) {\n source.off(eventName, reEmittersByEvent.get(eventName));\n reEmittersByEvent.delete(eventName);\n }\n if (reEmittersByEvent.size === 0) this.reEmitters.delete(source);\n }\n}\nexport class TypedReEmitter extends ReEmitter {\n constructor(target) {\n super(target);\n }\n reEmit(source, eventNames) {\n super.reEmit(source, eventNames);\n }\n stopReEmitting(source, eventNames) {\n super.stopReEmitting(source, eventNames);\n }\n}\n//# sourceMappingURL=ReEmitter.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { ServerControlledNamespacedValue } from \"../NamespacedValue.js\";\n\n/**\n * https://github.com/matrix-org/matrix-doc/pull/3773\n *\n * @experimental\n */\nexport var UNREAD_THREAD_NOTIFICATIONS = new ServerControlledNamespacedValue(\"unread_thread_notifications\", \"org.matrix.msc3773.unread_thread_notifications\");\n//# sourceMappingURL=sync.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n/*\nCopyright 2016 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { FILTER_RELATED_BY_REL_TYPES, FILTER_RELATED_BY_SENDERS, THREAD_RELATION_TYPE } from \"./models/thread.js\";\n\n/**\n * Checks if a value matches a given field value, which may be a * terminated\n * wildcard pattern.\n * @param actualValue - The value to be compared\n * @param filterValue - The filter pattern to be compared\n * @returns true if the actualValue matches the filterValue\n */\nfunction matchesWildcard(actualValue, filterValue) {\n if (filterValue.endsWith(\"*\")) {\n var typePrefix = filterValue.slice(0, -1);\n return actualValue.slice(0, typePrefix.length) === typePrefix;\n } else {\n return actualValue === filterValue;\n }\n}\n\n/* eslint-disable camelcase */\n\n/* eslint-enable camelcase */\n\n/**\n * FilterComponent is a section of a Filter definition which defines the\n * types, rooms, senders filters etc to be applied to a particular type of resource.\n * This is all ported over from synapse's Filter object.\n *\n * N.B. that synapse refers to these as 'Filters', and what js-sdk refers to as\n * 'Filters' are referred to as 'FilterCollections'.\n */\nexport class FilterComponent {\n constructor(filterJson, userId) {\n this.filterJson = filterJson;\n this.userId = userId;\n }\n\n /**\n * Checks with the filter component matches the given event\n * @param event - event to be checked against the filter\n * @returns true if the event matches the filter\n */\n check(event) {\n var _event$getUnsigned, _bundledRelationships;\n var bundledRelationships = ((_event$getUnsigned = event.getUnsigned()) === null || _event$getUnsigned === void 0 ? void 0 : _event$getUnsigned[\"m.relations\"]) || {};\n var relations = Object.keys(bundledRelationships);\n // Relation senders allows in theory a look-up of any senders\n // however clients can only know about the current user participation status\n // as sending a whole list of participants could be proven problematic in terms\n // of performance\n // This should be improved when bundled relationships solve that problem\n var relationSenders = [];\n if (this.userId && bundledRelationships !== null && bundledRelationships !== void 0 && (_bundledRelationships = bundledRelationships[THREAD_RELATION_TYPE.name]) !== null && _bundledRelationships !== void 0 && _bundledRelationships.current_user_participated) {\n relationSenders.push(this.userId);\n }\n return this.checkFields(event.getRoomId(), event.getSender(), event.getType(), event.getContent() ? event.getContent().url !== undefined : false, relations, relationSenders);\n }\n\n /**\n * Converts the filter component into the form expected over the wire\n */\n toJSON() {\n return Object.fromEntries(Object.entries({\n types: this.filterJson.types,\n not_types: this.filterJson.not_types,\n rooms: this.filterJson.rooms,\n not_rooms: this.filterJson.not_rooms,\n senders: this.filterJson.senders,\n not_senders: this.filterJson.not_senders,\n contains_url: this.filterJson.contains_url,\n [FILTER_RELATED_BY_SENDERS.name]: this.filterJson[FILTER_RELATED_BY_SENDERS.name],\n [FILTER_RELATED_BY_REL_TYPES.name]: this.filterJson[FILTER_RELATED_BY_REL_TYPES.name]\n }).filter(_ref => {\n var _ref2 = _slicedToArray(_ref, 2),\n _key = _ref2[0],\n value = _ref2[1];\n return value;\n }));\n }\n\n /**\n * Checks whether the filter component matches the given event fields.\n * @param roomId - the roomId for the event being checked\n * @param sender - the sender of the event being checked\n * @param eventType - the type of the event being checked\n * @param containsUrl - whether the event contains a content.url field\n * @param relationTypes - whether has aggregated relation of the given type\n * @param relationSenders - whether one of the relation is sent by the user listed\n * @returns true if the event fields match the filter\n */\n checkFields(roomId, sender, eventType, containsUrl, relationTypes, relationSenders) {\n var literalKeys = {\n rooms: function rooms(v) {\n return roomId === v;\n },\n senders: function senders(v) {\n return sender === v;\n },\n types: function types(v) {\n return matchesWildcard(eventType, v);\n }\n };\n for (var name in literalKeys) {\n var matchFunc = literalKeys[name];\n var notName = \"not_\" + name;\n var disallowedValues = this.filterJson[notName];\n if (disallowedValues !== null && disallowedValues !== void 0 && disallowedValues.some(matchFunc)) {\n return false;\n }\n var allowedValues = this.filterJson[name];\n if (allowedValues && !allowedValues.some(matchFunc)) {\n return false;\n }\n }\n var containsUrlFilter = this.filterJson.contains_url;\n if (containsUrlFilter !== undefined && containsUrlFilter !== containsUrl) {\n return false;\n }\n var relationTypesFilter = this.filterJson[FILTER_RELATED_BY_REL_TYPES.name];\n if (relationTypesFilter !== undefined) {\n if (!this.arrayMatchesFilter(relationTypesFilter, relationTypes)) {\n return false;\n }\n }\n var relationSendersFilter = this.filterJson[FILTER_RELATED_BY_SENDERS.name];\n if (relationSendersFilter !== undefined) {\n if (!this.arrayMatchesFilter(relationSendersFilter, relationSenders)) {\n return false;\n }\n }\n return true;\n }\n arrayMatchesFilter(filter, values) {\n return values.length > 0 && filter.every(value => {\n return values.includes(value);\n });\n }\n\n /**\n * Filters a list of events down to those which match this filter component\n * @param events - Events to be checked against the filter component\n * @returns events which matched the filter component\n */\n filter(events) {\n return events.filter(this.check, this);\n }\n\n /**\n * Returns the limit field for a given filter component, providing a default of\n * 10 if none is otherwise specified. Cargo-culted from Synapse.\n * @returns the limit for this filter component.\n */\n limit() {\n return this.filterJson.limit !== undefined ? this.filterJson.limit : 10;\n }\n}\n//# sourceMappingURL=filter-component.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2015 - 2021 Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { UNREAD_THREAD_NOTIFICATIONS } from \"./@types/sync.js\";\nimport { FilterComponent } from \"./filter-component.js\";\nimport { NamespacedValue } from \"./NamespacedValue.js\";\nvar profileFieldsFilterName = new NamespacedValue(\"profile_fields\", \"org.matrix.msc4429.profile_fields\");\n\n/**\n */\nfunction setProp(obj, keyNesting, val) {\n var nestedKeys = keyNesting.split(\".\");\n var currentObj = obj;\n for (var i = 0; i < nestedKeys.length - 1; i++) {\n if (!currentObj[nestedKeys[i]]) {\n currentObj[nestedKeys[i]] = {};\n }\n currentObj = currentObj[nestedKeys[i]];\n }\n currentObj[nestedKeys[nestedKeys.length - 1]] = val;\n}\n\n/* eslint-disable camelcase */\n\n/**\n * Filter section used for requesting a set of extended profile fields that will be sent down the sync stream.\n */\n\n/* eslint-enable camelcase */\n\nexport class Filter {\n /**\n * Create a filter from existing data.\n */\n static fromJson(userId, filterId, jsonObj) {\n var filter = new Filter(userId, filterId);\n filter.setDefinition(jsonObj);\n return filter;\n }\n /**\n * Construct a new Filter.\n * @param userId - The user ID for this filter.\n * @param filterId - The filter ID if known.\n */\n constructor(userId, filterId) {\n this.userId = userId;\n this.filterId = filterId;\n _defineProperty(this, \"definition\", {});\n _defineProperty(this, \"roomFilter\", void 0);\n _defineProperty(this, \"roomTimelineFilter\", void 0);\n }\n\n /**\n * Get the ID of this filter on your homeserver (if known)\n * @returns The filter ID\n */\n getFilterId() {\n return this.filterId;\n }\n\n /**\n * Get the JSON body of the filter.\n * @returns The filter definition\n */\n getDefinition() {\n return this.definition;\n }\n\n /**\n * Set the JSON body of the filter\n * @param definition - The filter definition\n */\n setDefinition(definition) {\n this.definition = definition;\n\n // This is all ported from synapse's FilterCollection()\n\n // definitions look something like:\n // {\n // \"room\": {\n // \"rooms\": [\"!abcde:example.com\"],\n // \"not_rooms\": [\"!123456:example.com\"],\n // \"state\": {\n // \"types\": [\"m.room.*\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"lazy_load_members\": true,\n // },\n // \"timeline\": {\n // \"limit\": 10,\n // \"types\": [\"m.room.message\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"not_senders\": [\"@spam:example.com\"]\n // \"contains_url\": true\n // },\n // \"ephemeral\": {\n // \"types\": [\"m.receipt\", \"m.typing\"],\n // \"not_rooms\": [\"!726s6s6q:example.com\"],\n // \"not_senders\": [\"@spam:example.com\"]\n // }\n // },\n // \"presence\": {\n // \"types\": [\"m.presence\"],\n // \"not_senders\": [\"@alice:example.com\"]\n // },\n // \"event_format\": \"client\",\n // \"event_fields\": [\"type\", \"content\", \"sender\"]\n // }\n\n var roomFilterJson = definition.room;\n\n // consider the top level rooms/not_rooms filter\n var roomFilterFields = {};\n if (roomFilterJson) {\n if (roomFilterJson.rooms) {\n roomFilterFields.rooms = roomFilterJson.rooms;\n }\n if (roomFilterJson.rooms) {\n roomFilterFields.not_rooms = roomFilterJson.not_rooms;\n }\n }\n this.roomFilter = new FilterComponent(roomFilterFields, this.userId);\n this.roomTimelineFilter = new FilterComponent((roomFilterJson === null || roomFilterJson === void 0 ? void 0 : roomFilterJson.timeline) || {}, this.userId);\n\n // don't bother porting this from synapse yet:\n // this._room_state_filter =\n // new FilterComponent(roomFilterJson.state || {});\n // this._room_ephemeral_filter =\n // new FilterComponent(roomFilterJson.ephemeral || {});\n // this._room_account_data_filter =\n // new FilterComponent(roomFilterJson.account_data || {});\n // this._presence_filter =\n // new FilterComponent(definition.presence || {});\n // this._account_data_filter =\n // new FilterComponent(definition.account_data || {});\n }\n\n /**\n * Get the room.timeline filter component of the filter\n * @returns room timeline filter component\n */\n getRoomTimelineFilterComponent() {\n return this.roomTimelineFilter;\n }\n\n /**\n * Filter the list of events based on whether they are allowed in a timeline\n * based on this filter\n * @param events - the list of events being filtered\n * @returns the list of events which match the filter\n */\n filterRoomTimeline(events) {\n if (this.roomFilter) {\n events = this.roomFilter.filter(events);\n }\n if (this.roomTimelineFilter) {\n events = this.roomTimelineFilter.filter(events);\n }\n return events;\n }\n\n /**\n * Set the max number of events to return for each room's timeline.\n * @param limit - The max number of events to return for each room.\n */\n setTimelineLimit(limit) {\n setProp(this.definition, \"room.timeline.limit\", limit);\n }\n\n /**\n * Enable threads unread notification\n */\n setUnreadThreadNotifications(enabled) {\n var _this$definition, _this$definition2;\n this.definition = _objectSpread(_objectSpread({}, this.definition), {}, {\n room: _objectSpread(_objectSpread({}, (_this$definition = this.definition) === null || _this$definition === void 0 ? void 0 : _this$definition.room), {}, {\n timeline: _objectSpread(_objectSpread({}, (_this$definition2 = this.definition) === null || _this$definition2 === void 0 || (_this$definition2 = _this$definition2.room) === null || _this$definition2 === void 0 ? void 0 : _this$definition2.timeline), {}, {\n [UNREAD_THREAD_NOTIFICATIONS.name]: enabled\n })\n })\n });\n }\n setLazyLoadMembers(enabled) {\n setProp(this.definition, \"room.state.lazy_load_members\", enabled);\n }\n\n /**\n * Control whether left rooms should be included in responses.\n * @param includeLeave - True to make rooms the user has left appear\n * in responses.\n */\n setIncludeLeaveRooms(includeLeave) {\n setProp(this.definition, \"room.include_leave\", includeLeave);\n }\n\n /**\n * Set the list of fields to be included in the profile information sent down the sync stream.\n * @param ids The field IDs to sync.\n * @param stable Whether to use the stable or unstable versions of this filter.\n * @experimental\n */\n setUnstableMSC4429SyncUserProfiles(ids, stable) {\n var _profileFieldsFilterN;\n var field = stable ? profileFieldsFilterName.name : (_profileFieldsFilterN = profileFieldsFilterName.unstable) !== null && _profileFieldsFilterN !== void 0 ? _profileFieldsFilterN : profileFieldsFilterName.name;\n this.definition[field] = {\n ids\n };\n }\n}\n_defineProperty(Filter, \"LAZY_LOADING_MESSAGES_FILTER\", {\n lazy_load_members: true\n});\n//# sourceMappingURL=filter.js.map","/*\nCopyright 2021 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Determines if the given optional was provided a value.\n * @param s - The optional to test.\n * @returns True if the value is defined.\n */\nexport function isProvided(s) {\n return s !== null && s !== undefined;\n}\n\n/**\n * Determines if the given optional string is a defined string.\n * @param s - The input string.\n * @returns True if the input is a defined string.\n */\nexport function isOptionalAString(s) {\n return isProvided(s) && typeof s === \"string\";\n}\n//# sourceMappingURL=utilities.js.map","/*\nCopyright 2021 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { NamespacedValue, UnstableValue } from \"matrix-events-sdk\";\nimport { isProvided } from \"../extensible_events_v1/utilities.js\";\n\n// Types and utilities for MSC1767: Extensible events (version 1) in Matrix\n\n/**\n * Represents the stable and unstable values of a given namespace.\n */\n\n/**\n * Represents a namespaced value, if the value is a string. Used to extract provided types\n * from a TSNamespace<N> (in cases where only stable *or* unstable is provided).\n */\n\n/**\n * Creates a type which is V when T is `never`, otherwise T.\n */\n// See https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887 for details on the array syntax.\n\n/**\n * The namespaced value for m.message\n */\nexport var M_MESSAGE = new UnstableValue(\"m.message\", \"org.matrix.msc1767.message\");\n\n/**\n * An m.message event rendering\n */\n\n/**\n * The content for an m.message event\n */\n\n/**\n * The namespaced value for m.text\n */\nexport var M_TEXT = new UnstableValue(\"m.text\", \"org.matrix.msc1767.text\");\n\n/**\n * The content for an m.text event\n */\n\n/**\n * The namespaced value for m.html\n */\nexport var M_HTML = new UnstableValue(\"m.html\", \"org.matrix.msc1767.html\");\n\n/**\n * The content for an m.html event\n */\n\n/**\n * The content for an m.message, m.text, or m.html event\n */\n\n/**\n * The namespaced value for an m.reference relation\n */\nexport var REFERENCE_RELATION = new NamespacedValue(\"m.reference\");\n\n/**\n * Represents any relation type\n */\n\n/**\n * An m.relates_to relationship\n */\n\n/**\n * Partial types for a Matrix Event.\n */\n\n/**\n * Represents a potentially namespaced event type.\n */\n\n/**\n * Determines if two event types are the same, including namespaces.\n * @param given - The given event type. This will be compared\n * against the expected type.\n * @param expected - The expected event type.\n * @returns True if the given type matches the expected type.\n */\nexport function isEventTypeSame(given, expected) {\n if (typeof given === \"string\") {\n if (typeof expected === \"string\") {\n return expected === given;\n } else {\n return expected.matches(given);\n }\n } else {\n if (typeof expected === \"string\") {\n return given.matches(expected);\n } else {\n var expectedNs = expected;\n var givenNs = given;\n return expectedNs.matches(givenNs.name) || isProvided(givenNs.altName) && expectedNs.matches(givenNs.altName);\n }\n }\n}\n//# sourceMappingURL=extensible_events.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\nimport { NamespacedValue } from \"../NamespacedValue.js\";\n/**\n * Extensible topic event type based on MSC3765\n * https://github.com/matrix-org/matrix-spec-proposals/pull/3765\n *\n * @example\n * ```\n * {\n * \"type\": \"m.room.topic,\n * \"state_key\": \"\",\n * \"content\": {\n * \"topic\": \"All about **pizza**\",\n * \"m.topic\": [{\n * \"body\": \"All about **pizza**\",\n * \"mimetype\": \"text/plain\",\n * }, {\n * \"body\": \"All about <b>pizza</b>\",\n * \"mimetype\": \"text/html\",\n * }],\n * }\n * }\n * ```\n */\n\n/**\n * The event type for an m.topic event (in content)\n */\nexport var M_TOPIC = new NamespacedValue(\"m.topic\", null);\n\n/**\n * The event content for an m.topic event (in content)\n */\n\n/**\n * A previous incorrect form of m.topic used by matrix-js-sdk\n * TODO remove this after a few releases\n * https://github.com/matrix-org/matrix-js-sdk/pull/4984#pullrequestreview-3174251065\n */\n\n/**\n * The event definition for an m.topic event (in content)\n */\n\n/**\n * The event content for an m.room.topic event\n */\n//# sourceMappingURL=topic.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2018 - 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MsgType } from \"./@types/event.js\";\nimport { M_TEXT, REFERENCE_RELATION } from \"./@types/extensible_events.js\";\nimport { isProvided } from \"./extensible_events_v1/utilities.js\";\nimport { M_ASSET, LocationAssetType, M_LOCATION, M_TIMESTAMP } from \"./@types/location.js\";\nimport { M_TOPIC } from \"./@types/topic.js\";\n/**\n * Generates the content for a HTML Message event\n * @param body - the plaintext body of the message\n * @param htmlBody - the HTML representation of the message\n * @returns\n */\nexport function makeHtmlMessage(body, htmlBody) {\n return {\n msgtype: MsgType.Text,\n format: \"org.matrix.custom.html\",\n body: body,\n formatted_body: htmlBody\n };\n}\n\n/**\n * Generates the content for a HTML Notice event\n * @param body - the plaintext body of the notice\n * @param htmlBody - the HTML representation of the notice\n * @returns\n */\nexport function makeHtmlNotice(body, htmlBody) {\n return {\n msgtype: MsgType.Notice,\n format: \"org.matrix.custom.html\",\n body: body,\n formatted_body: htmlBody\n };\n}\n\n/**\n * Generates the content for a HTML Emote event\n * @param body - the plaintext body of the emote\n * @param htmlBody - the HTML representation of the emote\n * @returns\n */\nexport function makeHtmlEmote(body, htmlBody) {\n return {\n msgtype: MsgType.Emote,\n format: \"org.matrix.custom.html\",\n body: body,\n formatted_body: htmlBody\n };\n}\n\n/**\n * Generates the content for a Plaintext Message event\n * @param body - the plaintext body of the emote\n * @returns\n */\nexport function makeTextMessage(body) {\n return {\n msgtype: MsgType.Text,\n body: body\n };\n}\n\n/**\n * Generates the content for a Plaintext Notice event\n * @param body - the plaintext body of the notice\n * @returns\n */\nexport function makeNotice(body) {\n return {\n msgtype: MsgType.Notice,\n body: body\n };\n}\n\n/**\n * Generates the content for a Plaintext Emote event\n * @param body - the plaintext body of the emote\n * @returns\n */\nexport function makeEmoteMessage(body) {\n return {\n msgtype: MsgType.Emote,\n body: body\n };\n}\n\n/** Location content helpers */\n\nexport var getTextForLocationEvent = (uri, assetType, timestamp, description) => {\n var date = \"at \".concat(new Date(timestamp).toISOString());\n var assetName = assetType === LocationAssetType.Self ? \"User\" : undefined;\n var quotedDescription = description ? \"\\\"\".concat(description, \"\\\"\") : undefined;\n return [assetName, \"Location\", quotedDescription, uri, date].filter(Boolean).join(\" \");\n};\n\n/**\n * Generates the content for a Location event\n * @param uri - a geo:// uri for the location\n * @param timestamp - the timestamp when the location was correct (milliseconds since the UNIX epoch)\n * @param description - the (optional) label for this location on the map\n * @param assetType - the (optional) asset type of this location e.g. \"m.self\"\n * @param text - optional. A text for the location\n */\nexport var makeLocationContent = (text, uri, timestamp, description, assetType) => {\n var defaultedText = text !== null && text !== void 0 ? text : getTextForLocationEvent(uri, assetType || LocationAssetType.Self, timestamp, description);\n var timestampEvent = timestamp ? {\n [M_TIMESTAMP.name]: timestamp\n } : {};\n return _objectSpread({\n msgtype: MsgType.Location,\n body: defaultedText,\n geo_uri: uri,\n [M_LOCATION.name]: {\n description,\n uri\n },\n [M_ASSET.name]: {\n type: assetType || LocationAssetType.Self\n },\n [M_TEXT.name]: defaultedText\n }, timestampEvent);\n};\n\n/**\n * Parse location event content and transform to\n * a backwards compatible modern m.location event format\n */\nexport var parseLocationEvent = wireEventContent => {\n var _location$uri, _asset$type;\n var location = M_LOCATION.findIn(wireEventContent);\n var asset = M_ASSET.findIn(wireEventContent);\n var timestamp = M_TIMESTAMP.findIn(wireEventContent);\n var text = M_TEXT.findIn(wireEventContent);\n var geoUri = (_location$uri = location === null || location === void 0 ? void 0 : location.uri) !== null && _location$uri !== void 0 ? _location$uri : wireEventContent === null || wireEventContent === void 0 ? void 0 : wireEventContent.geo_uri;\n var description = location === null || location === void 0 ? void 0 : location.description;\n var assetType = (_asset$type = asset === null || asset === void 0 ? void 0 : asset.type) !== null && _asset$type !== void 0 ? _asset$type : LocationAssetType.Self;\n var fallbackText = text !== null && text !== void 0 ? text : wireEventContent.body;\n return makeLocationContent(fallbackText, geoUri, timestamp !== null && timestamp !== void 0 ? timestamp : undefined, description, assetType);\n};\n\n/**\n * Topic event helpers\n */\n\nexport var makeTopicContent = (topic, htmlTopic) => {\n var renderings = [];\n // Put HTML first because clients will render the first type in\n // the array that they understand\n if (isProvided(htmlTopic)) {\n renderings.push({\n body: htmlTopic,\n mimetype: \"text/html\"\n });\n }\n if (isProvided(topic)) {\n renderings.push({\n body: topic,\n mimetype: \"text/plain\"\n });\n }\n return {\n topic,\n [M_TOPIC.name]: {\n \"m.text\": renderings\n }\n };\n};\nexport var parseTopicContent = content => {\n var _ref, _mtopic$find$body, _mtopic$find, _mtopic$find2;\n var mtopicParent = M_TOPIC.findIn(content);\n var mtopic = Array.isArray(mtopicParent) ? mtopicParent : mtopicParent === null || mtopicParent === void 0 ? void 0 : mtopicParent[\"m.text\"];\n // TODO remove support for the old malformed m.topic arrays after a few releases (only allow array in m.text)\n // https://github.com/matrix-org/matrix-js-sdk/pull/4984#pullrequestreview-3174251065\n //const mtopic = M_TOPIC.findIn<MTopicContent>(content)?.[\"m.text\"];\n if (!Array.isArray(mtopic)) {\n var _content$topic;\n return {\n text: (_content$topic = content.topic) !== null && _content$topic !== void 0 ? _content$topic : undefined\n };\n }\n var text = (_ref = (_mtopic$find$body = mtopic === null || mtopic === void 0 || (_mtopic$find = mtopic.find(r => !isProvided(r.mimetype) || r.mimetype === \"text/plain\")) === null || _mtopic$find === void 0 ? void 0 : _mtopic$find.body) !== null && _mtopic$find$body !== void 0 ? _mtopic$find$body : content.topic) !== null && _ref !== void 0 ? _ref : undefined;\n var html = mtopic === null || mtopic === void 0 || (_mtopic$find2 = mtopic.find(r => r.mimetype === \"text/html\")) === null || _mtopic$find2 === void 0 ? void 0 : _mtopic$find2.body;\n return {\n text,\n html\n };\n};\n\n/**\n * Beacon event helpers\n */\n\nexport var makeBeaconInfoContent = (timeout, isLive, description, assetType, timestamp) => ({\n description,\n timeout,\n live: isLive,\n [M_TIMESTAMP.name]: timestamp || Date.now(),\n [M_ASSET.name]: {\n type: assetType !== null && assetType !== void 0 ? assetType : LocationAssetType.Self\n }\n});\n/**\n * Flatten beacon info event content\n */\nexport var parseBeaconInfoContent = content => {\n var _M_TIMESTAMP$findIn;\n var description = content.description,\n timeout = content.timeout,\n live = content.live;\n var timestamp = (_M_TIMESTAMP$findIn = M_TIMESTAMP.findIn(content)) !== null && _M_TIMESTAMP$findIn !== void 0 ? _M_TIMESTAMP$findIn : undefined;\n var asset = M_ASSET.findIn(content);\n return {\n description,\n timeout,\n live,\n assetType: asset === null || asset === void 0 ? void 0 : asset.type,\n timestamp\n };\n};\nexport var makeBeaconContent = (uri, timestamp, beaconInfoEventId, description) => ({\n [M_LOCATION.name]: {\n description,\n uri\n },\n [M_TIMESTAMP.name]: timestamp,\n \"m.relates_to\": {\n rel_type: REFERENCE_RELATION.name,\n event_id: beaconInfoEventId\n }\n});\nexport var parseBeaconContent = content => {\n var _M_TIMESTAMP$findIn2;\n var location = M_LOCATION.findIn(content);\n var timestamp = (_M_TIMESTAMP$findIn2 = M_TIMESTAMP.findIn(content)) !== null && _M_TIMESTAMP$findIn2 !== void 0 ? _M_TIMESTAMP$findIn2 : undefined;\n return {\n description: location === null || location === void 0 ? void 0 : location.description,\n uri: location === null || location === void 0 ? void 0 : location.uri,\n timestamp\n };\n};\n//# sourceMappingURL=content-helpers.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { parseBeaconContent, parseBeaconInfoContent } from \"../content-helpers.js\";\nimport { sortEventsByLatestContentTimestamp } from \"../utils.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nexport var BeaconEvent = /*#__PURE__*/function (BeaconEvent) {\n BeaconEvent[\"New\"] = \"Beacon.new\";\n BeaconEvent[\"Update\"] = \"Beacon.update\";\n BeaconEvent[\"LivenessChange\"] = \"Beacon.LivenessChange\";\n BeaconEvent[\"Destroy\"] = \"Beacon.Destroy\";\n BeaconEvent[\"LocationUpdate\"] = \"Beacon.LocationUpdate\";\n return BeaconEvent;\n}({});\nexport var isTimestampInDuration = (startTimestamp, durationMs, timestamp) => timestamp >= startTimestamp && startTimestamp + durationMs >= timestamp;\n\n// beacon info events are uniquely identified by\n// `<roomId>_<state_key>`\n\nexport var getBeaconInfoIdentifier = event => \"\".concat(event.getRoomId(), \"_\").concat(event.getStateKey());\n\n// https://github.com/matrix-org/matrix-spec-proposals/pull/3672\nexport class Beacon extends TypedEventEmitter {\n constructor(rootEvent) {\n super();\n this.rootEvent = rootEvent;\n _defineProperty(this, \"roomId\", void 0);\n // beaconInfo is assigned by setBeaconInfo in the constructor\n // ! to make tsc believe it is definitely assigned\n _defineProperty(this, \"_beaconInfo\", void 0);\n _defineProperty(this, \"_isLive\", void 0);\n _defineProperty(this, \"livenessWatchTimeout\", void 0);\n _defineProperty(this, \"_latestLocationEvent\", void 0);\n _defineProperty(this, \"clearLatestLocation\", () => {\n this._latestLocationEvent = undefined;\n this.emit(BeaconEvent.LocationUpdate, this.latestLocationState);\n });\n this.roomId = this.rootEvent.getRoomId();\n this.setBeaconInfo(this.rootEvent);\n }\n get isLive() {\n return !!this._isLive;\n }\n get identifier() {\n return getBeaconInfoIdentifier(this.rootEvent);\n }\n get beaconInfoId() {\n return this.rootEvent.getId();\n }\n get beaconInfoOwner() {\n return this.rootEvent.getStateKey();\n }\n get beaconInfoEventType() {\n return this.rootEvent.getType();\n }\n get beaconInfo() {\n return this._beaconInfo;\n }\n get latestLocationState() {\n return this._latestLocationEvent && parseBeaconContent(this._latestLocationEvent.getContent());\n }\n get latestLocationEvent() {\n return this._latestLocationEvent;\n }\n update(beaconInfoEvent) {\n if (getBeaconInfoIdentifier(beaconInfoEvent) !== this.identifier) {\n throw new Error(\"Invalid updating event\");\n }\n // don't update beacon with an older event\n if (beaconInfoEvent.getTs() < this.rootEvent.getTs()) {\n return;\n }\n this.rootEvent = beaconInfoEvent;\n this.setBeaconInfo(this.rootEvent);\n this.emit(BeaconEvent.Update, beaconInfoEvent, this);\n this.clearLatestLocation();\n }\n destroy() {\n if (this.livenessWatchTimeout) {\n clearTimeout(this.livenessWatchTimeout);\n }\n this._isLive = false;\n this.emit(BeaconEvent.Destroy, this.identifier);\n }\n\n /**\n * Monitor liveness of a beacon\n * Emits BeaconEvent.LivenessChange when beacon expires\n */\n monitorLiveness() {\n if (this.livenessWatchTimeout) {\n clearTimeout(this.livenessWatchTimeout);\n }\n this.checkLiveness();\n if (!this.beaconInfo) return;\n if (this.isLive) {\n var expiryInMs = this.beaconInfo.timestamp + this.beaconInfo.timeout - Date.now();\n if (expiryInMs > 1) {\n this.livenessWatchTimeout = setTimeout(() => {\n this.monitorLiveness();\n }, expiryInMs);\n }\n } else if (this.beaconInfo.timestamp > Date.now()) {\n // beacon start timestamp is in the future\n // check liveness again then\n this.livenessWatchTimeout = setTimeout(() => {\n this.monitorLiveness();\n }, this.beaconInfo.timestamp - Date.now());\n }\n }\n\n /**\n * Process Beacon locations\n * Emits BeaconEvent.LocationUpdate\n */\n addLocations(beaconLocationEvents) {\n var _validLocationEvents$;\n // discard locations for beacons that are not live\n if (!this.isLive) {\n return;\n }\n var validLocationEvents = beaconLocationEvents.filter(event => {\n var content = event.getContent();\n var parsed = parseBeaconContent(content);\n if (!parsed.uri || !parsed.timestamp) return false; // we won't be able to process these\n var timestamp = parsed.timestamp;\n return this._beaconInfo.timestamp &&\n // only include positions that were taken inside the beacon's live period\n isTimestampInDuration(this._beaconInfo.timestamp, this._beaconInfo.timeout, timestamp) && (\n // ignore positions older than our current latest location\n !this.latestLocationState || timestamp > this.latestLocationState.timestamp);\n });\n var latestLocationEvent = (_validLocationEvents$ = validLocationEvents.sort(sortEventsByLatestContentTimestamp)) === null || _validLocationEvents$ === void 0 ? void 0 : _validLocationEvents$[0];\n if (latestLocationEvent) {\n this._latestLocationEvent = latestLocationEvent;\n this.emit(BeaconEvent.LocationUpdate, this.latestLocationState);\n }\n }\n setBeaconInfo(event) {\n this._beaconInfo = parseBeaconInfoContent(event.getContent());\n this.checkLiveness();\n }\n checkLiveness() {\n var prevLiveness = this.isLive;\n\n // element web sets a beacon's start timestamp to the senders local current time\n // when Alice's system clock deviates slightly from Bob's a beacon Alice intended to be live\n // may have a start timestamp in the future from Bob's POV\n // handle this by adding 6min of leniency to the start timestamp when it is in the future\n if (!this.beaconInfo) return;\n var startTimestamp = this.beaconInfo.timestamp > Date.now() ? this.beaconInfo.timestamp - 360000 /* 6min */ : this.beaconInfo.timestamp;\n this._isLive = !!this._beaconInfo.live && !!startTimestamp && isTimestampInDuration(startTimestamp, this._beaconInfo.timeout, Date.now());\n if (prevLiveness !== this.isLive) {\n this.emit(BeaconEvent.LivenessChange, this.isLive, this);\n }\n }\n}\n//# sourceMappingURL=beacon.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MAIN_ROOM_TIMELINE, ReceiptType } from \"../@types/read_receipts.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nimport { isSupportedReceiptType } from \"../utils.js\";\nimport { MatrixEvent } from \"./event.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { MapWithDefault } from \"../utils.js\";\nimport { NotificationCountType } from \"./room.js\";\nimport { logger } from \"../logger.js\";\nimport { inMainTimelineForReceipt, threadIdForReceipt } from \"../client.js\";\n\n/**\n * Create a synthetic receipt for the given event\n * @param userId - The user ID if the receipt sender\n * @param event - The event that is to be acknowledged\n * @param receiptType - The type of receipt\n * @param unthreaded - the receipt is unthreaded\n * @returns a new event with the synthetic receipt in it\n */\nexport function synthesizeReceipt(userId, event, receiptType) {\n var unthreaded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n return new MatrixEvent({\n content: {\n [event.getId()]: {\n [receiptType]: {\n [userId]: _objectSpread({\n ts: event.getTs()\n }, !unthreaded && {\n thread_id: threadIdForReceipt(event)\n })\n }\n }\n },\n type: EventType.Receipt,\n room_id: event.getRoomId()\n });\n}\nvar ReceiptPairRealIndex = 0;\nvar ReceiptPairSyntheticIndex = 1;\nexport class ReadReceipt extends TypedEventEmitter {\n constructor() {\n super(...arguments);\n // receipts should clobber based on receipt_type and user_id pairs hence\n // the form of this structure. This is sub-optimal for the exposed APIs\n // which pass in an event ID and get back some receipts, so we also store\n // a pre-cached list for this purpose.\n // Map: receipt type → user Id → receipt\n _defineProperty(this, \"receipts\", new MapWithDefault(() => new Map()));\n _defineProperty(this, \"receiptCacheByEventId\", new Map());\n }\n /**\n * Gets the latest receipt for a given user in the room\n * @param userId - The id of the user for which we want the receipt\n * @param ignoreSynthesized - Whether to ignore synthesized receipts or not\n * @param receiptType - Optional. The type of the receipt we want to get\n * @returns the latest receipts of the chosen type for the chosen user\n */\n getReadReceiptForUserId(userId) {\n var _this$receipts$get$ge, _this$receipts$get;\n var ignoreSynthesized = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var receiptType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ReceiptType.Read;\n var _ref = (_this$receipts$get$ge = (_this$receipts$get = this.receipts.get(receiptType)) === null || _this$receipts$get === void 0 ? void 0 : _this$receipts$get.get(userId)) !== null && _this$receipts$get$ge !== void 0 ? _this$receipts$get$ge : [null, null],\n _ref2 = _slicedToArray(_ref, 2),\n realReceipt = _ref2[0],\n syntheticReceipt = _ref2[1];\n if (ignoreSynthesized) {\n return realReceipt;\n }\n return syntheticReceipt !== null && syntheticReceipt !== void 0 ? syntheticReceipt : realReceipt;\n }\n compareReceipts(a, b) {\n var _this$getUnfilteredTi;\n // Try compare them in our unfiltered timeline set order, falling back to receipt timestamp which should be\n // relatively sane as receipts are set only by the originating homeserver so as long as its clock doesn't\n // jump around then it should be valid.\n return (_this$getUnfilteredTi = this.getUnfilteredTimelineSet().compareEventOrdering(a.eventId, b.eventId)) !== null && _this$getUnfilteredTi !== void 0 ? _this$getUnfilteredTi : a.data.ts - b.data.ts;\n }\n\n /**\n * Get the ID of the event that a given user has read up to, or null if:\n * - we have received no read receipts for them, or\n * - the receipt we have points at an event we don't have, or\n * - the thread ID in the receipt does not match the thread root of the\n * referenced event.\n *\n * (The event might not exist if it is not loaded, and the thread ID might\n * not match if the event has moved thread because it was redacted.)\n *\n * @param userId - The user ID to get read receipt event ID for\n * @param ignoreSynthesized - If true, return only receipts that have been\n * sent by the server, not implicit ones generated\n * by the JS SDK.\n * @returns ID of the latest existing event that the given user has read, or null.\n */\n getEventReadUpTo(userId) {\n var ignoreSynthesized = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Find what the latest receipt says is the latest event we have read\n var latestReceipt = this.getLatestReceipt(userId, ignoreSynthesized);\n if (!latestReceipt) {\n return null;\n }\n return this.receiptPointsAtConsistentEvent(latestReceipt) ? latestReceipt.eventId : null;\n }\n\n /**\n * Returns true if the event pointed at by this receipt exists, and its\n * threadRootId is consistent with the thread information in the receipt.\n */\n receiptPointsAtConsistentEvent(receipt) {\n var _receipt$data;\n var event = this.findEventById(receipt.eventId);\n if (!event) {\n // If the receipt points at a non-existent event, we have multiple\n // possibilities:\n //\n // 1. We don't have the event because it's not loaded yet - probably\n // it's old and we're best off ignoring the receipt - we can just\n // send a new one when we read a new event.\n //\n // 2. We have a bug e.g. we misclassified this event into the wrong\n // thread.\n //\n // 3. The referenced event moved out of this thread (e.g. because it\n // was deleted.)\n //\n // 4. The receipt had the incorrect thread ID (due to a bug in a\n // client, or malicious behaviour).\n\n // This receipt is not \"valid\" because it doesn't point at an event\n // we have. We want to pretend it doesn't exist.\n return false;\n }\n if (!((_receipt$data = receipt.data) !== null && _receipt$data !== void 0 && _receipt$data.thread_id)) {\n // If this is an unthreaded receipt, it could point at any event, so\n // there is no need to validate further - this receipt is valid.\n return true;\n }\n // Otherwise it is a threaded receipt...\n\n if (receipt.data.thread_id === MAIN_ROOM_TIMELINE) {\n // The receipt is for the main timeline: we check that the event is\n // in the main timeline.\n\n // Check if the event is in the main timeline\n var eventIsInMainTimeline = inMainTimelineForReceipt(event);\n if (eventIsInMainTimeline) {\n // The receipt is for the main timeline, and so is the event, so\n // the receipt is valid.\n return true;\n }\n } else {\n // The receipt is for a different thread (not the main timeline)\n\n if (event.threadRootId === receipt.data.thread_id) {\n // If the receipt and event agree on the thread ID, the receipt\n // is valid.\n return true;\n }\n }\n\n // The receipt thread ID disagrees with the event thread ID. There are 2\n // possibilities:\n //\n // 1. The event moved to a different thread after the receipt was\n // created. This can happen if the event was redacted because that\n // moves it to the main timeline.\n //\n // 2. There is a bug somewhere - either we put the event into the wrong\n // thread, or someone sent an incorrect receipt.\n //\n // In many cases, we won't get here because the call to findEventById\n // would have already returned null. We include this check to cover\n // cases when `this` is a room, meaning findEventById will find events\n // in any thread, and to be defensive against unforeseen code paths.\n logger.warn(\"Ignoring receipt because its thread_id (\".concat(receipt.data.thread_id, \") disagrees \") + \"with the thread root (\".concat(event.threadRootId, \") of the referenced event \") + \"(event ID = \".concat(receipt.eventId, \")\"));\n\n // This receipt is not \"valid\" because it disagrees with us about what\n // thread the event is in. We want to pretend it doesn't exist.\n return false;\n }\n getLatestReceipt(userId, ignoreSynthesized) {\n var _ref3, _ref4;\n // XXX: This is very very ugly and I hope I won't have to ever add a new\n // receipt type here again. IMHO this should be done by the server in\n // some more intelligent manner or the client should just use timestamps\n\n var publicReadReceipt = this.getReadReceiptForUserId(userId, ignoreSynthesized, ReceiptType.Read);\n var privateReadReceipt = this.getReadReceiptForUserId(userId, ignoreSynthesized, ReceiptType.ReadPrivate);\n\n // If we have both, compare them\n var comparison;\n if (publicReadReceipt !== null && publicReadReceipt !== void 0 && publicReadReceipt.eventId && privateReadReceipt !== null && privateReadReceipt !== void 0 && privateReadReceipt.eventId) {\n comparison = this.compareReceipts(publicReadReceipt, privateReadReceipt);\n }\n\n // The public receipt is more likely to drift out of date so the private\n // one has precedence\n if (!comparison) return (_ref3 = privateReadReceipt !== null && privateReadReceipt !== void 0 ? privateReadReceipt : publicReadReceipt) !== null && _ref3 !== void 0 ? _ref3 : null;\n\n // If public read receipt is older, return the private one\n return (_ref4 = comparison < 0 ? privateReadReceipt : publicReadReceipt) !== null && _ref4 !== void 0 ? _ref4 : null;\n }\n addReceiptToStructure(eventId, receiptType, userId, receipt, synthetic) {\n var _pair$ReceiptPairSynt2, _pair$ReceiptPairSynt3;\n var receiptTypesMap = this.receipts.getOrCreate(receiptType);\n var pair = receiptTypesMap.get(userId);\n if (!pair) {\n pair = [null, null];\n receiptTypesMap.set(userId, pair);\n }\n var existingReceipt = pair[ReceiptPairRealIndex];\n if (synthetic) {\n var _pair$ReceiptPairSynt;\n existingReceipt = (_pair$ReceiptPairSynt = pair[ReceiptPairSyntheticIndex]) !== null && _pair$ReceiptPairSynt !== void 0 ? _pair$ReceiptPairSynt : pair[ReceiptPairRealIndex];\n }\n var wrappedReceipt = {\n eventId,\n data: receipt\n };\n if (existingReceipt) {\n // We only want to add this receipt if we think it is later than the one we already have.\n // This is managed server-side, but because we synthesize RRs locally we have to do it here too.\n var _ordering = this.compareReceipts(existingReceipt, wrappedReceipt);\n if (_ordering >= 0) {\n return;\n }\n }\n var realReceipt = synthetic ? pair[ReceiptPairRealIndex] : wrappedReceipt;\n var syntheticReceipt = synthetic ? wrappedReceipt : pair[ReceiptPairSyntheticIndex];\n var ordering = null;\n if (realReceipt && syntheticReceipt) {\n ordering = this.getUnfilteredTimelineSet().compareEventOrdering(realReceipt.eventId, syntheticReceipt.eventId);\n }\n var preferSynthetic = ordering === null || ordering < 0;\n\n // we don't bother caching just real receipts by event ID as there's nothing that would read it.\n // Take the current cached receipt before we overwrite the pair elements.\n var cachedReceipt = (_pair$ReceiptPairSynt2 = pair[ReceiptPairSyntheticIndex]) !== null && _pair$ReceiptPairSynt2 !== void 0 ? _pair$ReceiptPairSynt2 : pair[ReceiptPairRealIndex];\n if (synthetic && preferSynthetic) {\n pair[ReceiptPairSyntheticIndex] = wrappedReceipt;\n } else if (!synthetic) {\n pair[ReceiptPairRealIndex] = wrappedReceipt;\n if (!preferSynthetic) {\n pair[ReceiptPairSyntheticIndex] = null;\n }\n }\n var newCachedReceipt = (_pair$ReceiptPairSynt3 = pair[ReceiptPairSyntheticIndex]) !== null && _pair$ReceiptPairSynt3 !== void 0 ? _pair$ReceiptPairSynt3 : pair[ReceiptPairRealIndex];\n if (cachedReceipt === newCachedReceipt) return;\n\n // clean up any previous cache entry\n if (cachedReceipt && this.receiptCacheByEventId.get(cachedReceipt.eventId)) {\n var previousEventId = cachedReceipt.eventId;\n // Remove the receipt we're about to clobber out of existence from the cache\n this.receiptCacheByEventId.set(previousEventId, this.receiptCacheByEventId.get(previousEventId).filter(r => {\n return r.type !== receiptType || r.userId !== userId;\n }));\n if (this.receiptCacheByEventId.get(previousEventId).length < 1) {\n this.receiptCacheByEventId.delete(previousEventId); // clean up the cache keys\n }\n }\n\n // cache the new one\n if (!this.receiptCacheByEventId.get(eventId)) {\n this.receiptCacheByEventId.set(eventId, []);\n }\n this.receiptCacheByEventId.get(eventId).push({\n userId: userId,\n type: receiptType,\n data: receipt\n });\n }\n\n /**\n * Get a list of receipts for the given event.\n * @param event - the event to get receipts for\n * @returns A list of receipts with a userId, type and data keys or\n * an empty list.\n */\n getReceiptsForEvent(event) {\n return this.receiptCacheByEventId.get(event.getId()) || [];\n }\n\n /**\n * Look in this room/thread's timeline to find an event. If `this` is a\n * room, we look in all threads, but if `this` is a thread, we look only\n * inside this thread.\n */\n\n /**\n * This issue should also be addressed on synapse's side and is tracked as part\n * of https://github.com/matrix-org/synapse/issues/14837\n *\n * Retrieves the read receipt for the logged in user and checks if it matches\n * the last event in the room and whether that event originated from the logged\n * in user.\n * Under those conditions we can consider the context as read. This is useful\n * because we never send read receipts against our own events\n * @param userId - the logged in user\n */\n fixupNotifications(userId) {\n var receipt = this.getReadReceiptForUserId(userId, false);\n var lastEvent = this.timeline[this.timeline.length - 1];\n if (lastEvent && (receipt === null || receipt === void 0 ? void 0 : receipt.eventId) === lastEvent.getId() && userId === lastEvent.getSender()) {\n this.setUnread(NotificationCountType.Total, 0);\n this.setUnread(NotificationCountType.Highlight, 0);\n }\n }\n\n /**\n * Add a temporary local-echo receipt to the room to reflect in the\n * client the fact that we've sent one.\n * @param userId - The user ID if the receipt sender\n * @param e - The event that is to be acknowledged\n * @param receiptType - The type of receipt\n * @param unthreaded - the receipt is unthreaded\n */\n addLocalEchoReceipt(userId, e, receiptType) {\n var unthreaded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n this.addReceipt(synthesizeReceipt(userId, e, receiptType, unthreaded), true);\n }\n\n /**\n * Get a list of user IDs who have <b>read up to</b> the given event.\n * @param event - the event to get read receipts for.\n * @returns A list of user IDs.\n */\n getUsersReadUpTo(event) {\n return this.getReceiptsForEvent(event).filter(function (receipt) {\n return isSupportedReceiptType(receipt.type);\n }).map(function (receipt) {\n return receipt.userId;\n });\n }\n\n /**\n * Determines if the given user has read a particular event ID with the known\n * history of the room. This is not a definitive check as it relies only on\n * what is available to the room at the time of execution.\n * @param userId - The user ID to check the read state of.\n * @param eventId - The event ID to check if the user read.\n * @returns True if the user has read the event, false otherwise.\n */\n\n /**\n * Returns the most recent unthreaded receipt for a given user\n * @param userId - the MxID of the User\n * @returns an unthreaded Receipt. Can be undefined if receipts have been disabled\n * or a user chooses to use private read receipts (or we have simply not received\n * a receipt from this user yet).\n *\n * @deprecated use `hasUserReadEvent` or `getEventReadUpTo` instead\n */\n}\n//# sourceMappingURL=read-receipt.js.map","/*\nCopyright 2022 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { UnstableValue } from \"matrix-events-sdk\";\n/**\n * Identifier for a disclosed poll.\n */\nexport var M_POLL_KIND_DISCLOSED = new UnstableValue(\"m.poll.disclosed\", \"org.matrix.msc3381.poll.disclosed\");\n\n/**\n * Identifier for an undisclosed poll.\n */\nexport var M_POLL_KIND_UNDISCLOSED = new UnstableValue(\"m.poll.undisclosed\", \"org.matrix.msc3381.poll.undisclosed\");\n\n/**\n * Any poll kind.\n */\n\n/**\n * Known poll kind namespaces.\n */\n\n/**\n * The namespaced value for m.poll.start\n */\nexport var M_POLL_START = new UnstableValue(\"m.poll.start\", \"org.matrix.msc3381.poll.start\");\n\n/**\n * The m.poll.start type within event content\n */\n\n/**\n * A poll answer.\n */\n\n/**\n * The event definition for an m.poll.start event (in content)\n */\n\n/**\n * The content for an m.poll.start event\n */\n\n/**\n * The namespaced value for m.poll.response\n */\nexport var M_POLL_RESPONSE = new UnstableValue(\"m.poll.response\", \"org.matrix.msc3381.poll.response\");\n\n/**\n * The m.poll.response type within event content\n */\n\n/**\n * The event definition for an m.poll.response event (in content)\n */\n\n/**\n * The content for an m.poll.response event\n */\n\n/**\n * The namespaced value for m.poll.end\n */\nexport var M_POLL_END = new UnstableValue(\"m.poll.end\", \"org.matrix.msc3381.poll.end\");\n\n/**\n * The event definition for an m.poll.end event (in content)\n */\n\n/**\n * The content for an m.poll.end event\n */\n//# sourceMappingURL=polls.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { M_POLL_START } from \"matrix-events-sdk\";\nimport { M_POLL_END, M_POLL_RESPONSE } from \"../@types/polls.js\";\nimport { Relations } from \"./relations.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nexport var PollEvent = /*#__PURE__*/function (PollEvent) {\n PollEvent[\"New\"] = \"Poll.new\";\n PollEvent[\"End\"] = \"Poll.end\";\n PollEvent[\"Update\"] = \"Poll.update\";\n PollEvent[\"Responses\"] = \"Poll.Responses\";\n PollEvent[\"Destroy\"] = \"Poll.Destroy\";\n PollEvent[\"UndecryptableRelations\"] = \"Poll.UndecryptableRelations\";\n return PollEvent;\n}({});\nvar filterResponseRelations = (relationEvents, pollEndTimestamp) => {\n var responseEvents = relationEvents.filter(event => {\n if (event.isDecryptionFailure()) {\n return;\n }\n return M_POLL_RESPONSE.matches(event.getType()) &&\n // From MSC3381:\n // \"Votes sent on or before the end event's timestamp are valid votes\"\n event.getTs() <= pollEndTimestamp;\n });\n return {\n responseEvents\n };\n};\nexport class Poll extends TypedEventEmitter {\n constructor(rootEvent, matrixClient, room) {\n super();\n this.rootEvent = rootEvent;\n this.matrixClient = matrixClient;\n this.room = room;\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"pollEvent\", void 0);\n _defineProperty(this, \"_isFetchingResponses\", false);\n _defineProperty(this, \"relationsNextBatch\", void 0);\n _defineProperty(this, \"responses\", null);\n _defineProperty(this, \"endEvent\", void 0);\n /**\n * Keep track of undecryptable relations\n * As incomplete result sets affect poll results\n */\n _defineProperty(this, \"undecryptableRelationEventIds\", new Set());\n _defineProperty(this, \"countUndecryptableEvents\", events => {\n var undecryptableEventIds = events.filter(event => event.isDecryptionFailure()).map(event => event.getId());\n var previousCount = this.undecryptableRelationsCount;\n this.undecryptableRelationEventIds = new Set([...this.undecryptableRelationEventIds, ...undecryptableEventIds]);\n if (this.undecryptableRelationsCount !== previousCount) {\n this.emit(PollEvent.UndecryptableRelations, this.undecryptableRelationsCount);\n }\n });\n if (!this.rootEvent.getRoomId() || !this.rootEvent.getId()) {\n throw new Error(\"Invalid poll start event.\");\n }\n this.roomId = this.rootEvent.getRoomId();\n this.pollEvent = this.rootEvent.unstableExtensibleEvent;\n }\n get pollId() {\n return this.rootEvent.getId();\n }\n get endEventId() {\n var _this$endEvent;\n return (_this$endEvent = this.endEvent) === null || _this$endEvent === void 0 ? void 0 : _this$endEvent.getId();\n }\n get isEnded() {\n return !!this.endEvent;\n }\n get isFetchingResponses() {\n return this._isFetchingResponses;\n }\n get undecryptableRelationsCount() {\n return this.undecryptableRelationEventIds.size;\n }\n getResponses() {\n var _this = this;\n return _asyncToGenerator(function* () {\n // if we have already fetched some responses\n // just return them\n if (_this.responses) {\n return _this.responses;\n }\n\n // if there is no fetching in progress\n // start fetching\n if (!_this.isFetchingResponses) {\n yield _this.fetchResponses();\n }\n // return whatever responses we got from the first page\n return _this.responses;\n })();\n }\n\n /**\n *\n * @param event - event with a relation to the rootEvent\n * @returns void\n */\n onNewRelation(event) {\n var _this$endEvent2;\n if (M_POLL_END.matches(event.getType()) && this.validateEndEvent(event)) {\n this.endEvent = event;\n this.refilterResponsesOnEnd();\n this.emit(PollEvent.End);\n }\n\n // wait for poll responses to be initialised\n if (!this.responses) {\n return;\n }\n var pollEndTimestamp = ((_this$endEvent2 = this.endEvent) === null || _this$endEvent2 === void 0 ? void 0 : _this$endEvent2.getTs()) || Number.MAX_SAFE_INTEGER;\n var _filterResponseRelati = filterResponseRelations([event], pollEndTimestamp),\n responseEvents = _filterResponseRelati.responseEvents;\n this.countUndecryptableEvents([event]);\n if (responseEvents.length) {\n responseEvents.forEach(event => {\n this.responses.addEvent(event);\n });\n this.emit(PollEvent.Responses, this.responses);\n }\n }\n fetchResponses() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _this2$endEvent, _allRelations$nextBat;\n _this2._isFetchingResponses = true;\n\n // we want:\n // - stable and unstable M_POLL_RESPONSE\n // - stable and unstable M_POLL_END\n // so make one api call and filter by event type client side\n var allRelations = yield _this2.matrixClient.relations(_this2.roomId, _this2.rootEvent.getId(), \"m.reference\", undefined, {\n from: _this2.relationsNextBatch || undefined\n });\n yield Promise.all(allRelations.events.map(event => _this2.matrixClient.decryptEventIfNeeded(event)));\n var responses = _this2.responses || new Relations(\"m.reference\", M_POLL_RESPONSE.name, _this2.matrixClient, [M_POLL_RESPONSE.altName]);\n var pollEndEvent = allRelations.events.find(event => M_POLL_END.matches(event.getType()));\n if (_this2.validateEndEvent(pollEndEvent)) {\n _this2.endEvent = pollEndEvent;\n _this2.refilterResponsesOnEnd();\n _this2.emit(PollEvent.End);\n }\n var pollCloseTimestamp = ((_this2$endEvent = _this2.endEvent) === null || _this2$endEvent === void 0 ? void 0 : _this2$endEvent.getTs()) || Number.MAX_SAFE_INTEGER;\n var _filterResponseRelati2 = filterResponseRelations(allRelations.events, pollCloseTimestamp),\n responseEvents = _filterResponseRelati2.responseEvents;\n responseEvents.forEach(event => {\n responses.addEvent(event);\n });\n _this2.relationsNextBatch = (_allRelations$nextBat = allRelations.nextBatch) !== null && _allRelations$nextBat !== void 0 ? _allRelations$nextBat : undefined;\n _this2.responses = responses;\n _this2.countUndecryptableEvents(allRelations.events);\n\n // while there are more pages of relations\n // fetch them\n if (_this2.relationsNextBatch) {\n // don't await\n // we want to return the first page as soon as possible\n _this2.fetchResponses();\n } else {\n // no more pages\n _this2._isFetchingResponses = false;\n }\n\n // emit after updating _isFetchingResponses state\n _this2.emit(PollEvent.Responses, _this2.responses);\n })();\n }\n\n /**\n * Only responses made before the poll ended are valid\n * Refilter after an end event is recieved\n * To ensure responses are valid\n */\n refilterResponsesOnEnd() {\n var _this$endEvent3;\n if (!this.responses) {\n return;\n }\n var pollEndTimestamp = ((_this$endEvent3 = this.endEvent) === null || _this$endEvent3 === void 0 ? void 0 : _this$endEvent3.getTs()) || Number.MAX_SAFE_INTEGER;\n this.responses.getRelations().forEach(event => {\n if (event.getTs() > pollEndTimestamp) {\n var _this$responses;\n (_this$responses = this.responses) === null || _this$responses === void 0 || _this$responses.removeEvent(event);\n }\n });\n this.emit(PollEvent.Responses, this.responses);\n }\n validateEndEvent(endEvent) {\n if (!endEvent) {\n return false;\n }\n /**\n * Repeated end events are ignored -\n * only the first (valid) closure event by origin_server_ts is counted.\n */\n if (this.endEvent && this.endEvent.getTs() < endEvent.getTs()) {\n return false;\n }\n\n /**\n * MSC3381\n * If a m.poll.end event is received from someone other than the poll creator or user with permission to redact\n * others' messages in the room, the event must be ignored by clients due to being invalid.\n */\n var roomCurrentState = this.room.currentState;\n var endEventSender = endEvent.getSender();\n return !!endEventSender && (endEventSender === this.rootEvent.getSender() || roomCurrentState.maySendRedactionForEvent(this.rootEvent, endEventSender));\n }\n}\n\n/**\n * Tests whether the event is a start, response or end poll event.\n *\n * @param event - Event to test\n * @returns true if the event is a poll event, else false\n */\nexport var isPollEvent = event => {\n var eventType = event.getType();\n return M_POLL_START.matches(eventType) || M_POLL_RESPONSE.matches(eventType) || M_POLL_END.matches(eventType);\n};\n//# sourceMappingURL=poll.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MAIN_ROOM_TIMELINE } from \"../@types/read_receipts.js\";\nimport { threadIdForReceipt } from \"../client.js\";\nimport { RoomEvent } from \"./room.js\";\nimport { logger } from \"../logger.js\";\n\n/**\n * The latest receipts we have for a room.\n */\nexport class RoomReceipts {\n constructor(room) {\n _defineProperty(this, \"room\", void 0);\n _defineProperty(this, \"threadedReceipts\", void 0);\n _defineProperty(this, \"unthreadedReceipts\", void 0);\n _defineProperty(this, \"danglingReceipts\", void 0);\n /**\n * Look for dangling receipts for the given event ID,\n * and add them to the thread of unthread receipts if found.\n * @param event - the event to look for\n */\n _defineProperty(this, \"onTimelineEvent\", event => {\n var eventId = event.getId();\n if (!eventId) return;\n var danglingReceipts = this.danglingReceipts.remove(eventId);\n danglingReceipts === null || danglingReceipts === void 0 || danglingReceipts.forEach(danglingReceipt => {\n // The receipt is a thread receipt\n if (danglingReceipt.receipt.thread_id) {\n this.threadedReceipts.set(danglingReceipt.receipt.thread_id, danglingReceipt.eventId, danglingReceipt.receiptType, danglingReceipt.userId, danglingReceipt.receipt.ts, danglingReceipt.synthetic);\n } else {\n this.unthreadedReceipts.set(eventId, danglingReceipt.receiptType, danglingReceipt.userId, danglingReceipt.receipt.ts, danglingReceipt.synthetic);\n }\n });\n });\n this.room = room;\n this.threadedReceipts = new ThreadedReceipts(room);\n this.unthreadedReceipts = new ReceiptsByUser(room);\n this.danglingReceipts = new DanglingReceipts();\n // We listen for timeline events so we can process dangling receipts\n room.on(RoomEvent.Timeline, this.onTimelineEvent);\n }\n\n /**\n * Remember the receipt information supplied. For each receipt:\n *\n * If we don't have the event for this receipt, store it as \"dangling\" so we\n * can process it later.\n *\n * Otherwise store it per-user in either the threaded store for its\n * thread_id, or the unthreaded store if there is no thread_id.\n *\n * Ignores any receipt that is before an existing receipt for the same user\n * (in the same thread, if applicable). \"Before\" is defined by the\n * unfilteredTimelineSet of the room.\n */\n add(receiptContent, synthetic) {\n /*\n Transform this structure:\n {\n \"$EVENTID\": {\n \"m.read|m.read.private\": {\n \"@user:example.org\": {\n \"ts\": 1661,\n \"thread_id\": \"main|$THREAD_ROOT_ID\" // or missing/undefined for an unthreaded receipt\n }\n }\n },\n ...\n }\n into maps of:\n threaded :: threadid :: userId :: ReceiptInfo\n unthreaded :: userId :: ReceiptInfo\n dangling :: eventId :: DanglingReceipt\n */\n for (var _ref3 of Object.entries(receiptContent)) {\n var _ref2 = _slicedToArray(_ref3, 2);\n var _eventId = _ref2[0];\n var eventReceipt = _ref2[1];\n for (var _ref6 of Object.entries(eventReceipt)) {\n var _ref5 = _slicedToArray(_ref6, 2);\n var _receiptType = _ref5[0];\n var receiptsByUser = _ref5[1];\n for (var _ref9 of Object.entries(receiptsByUser)) {\n var _ref8 = _slicedToArray(_ref9, 2);\n var _userId = _ref8[0];\n var _receipt = _ref8[1];\n var referencedEvent = this.room.findEventById(_eventId);\n if (!referencedEvent) {\n this.danglingReceipts.add(new DanglingReceipt(_eventId, _receiptType, _userId, _receipt, synthetic));\n } else if (_receipt.thread_id) {\n this.threadedReceipts.set(_receipt.thread_id, _eventId, _receiptType, _userId, _receipt.ts, synthetic);\n } else {\n this.unthreadedReceipts.set(_eventId, _receiptType, _userId, _receipt.ts, synthetic);\n }\n }\n }\n }\n }\n hasUserReadEvent(userId, eventId) {\n var unthreaded = this.unthreadedReceipts.get(userId);\n if (unthreaded) {\n if (isAfterOrSame(unthreaded.eventId, eventId, this.room)) {\n // The unthreaded receipt is after this event, so we have read it.\n return true;\n }\n }\n var event = this.room.findEventById(eventId);\n if (!event) {\n // We don't know whether the user has read it - default to caution and say no.\n // This shouldn't really happen and feels like it ought to be an exception: let's\n // log a warn for now.\n logger.warn(\"hasUserReadEvent event ID \".concat(eventId, \" not found in room \").concat(this.room.roomId, \": this shouldn't happen!\"));\n return false;\n }\n var threadId = threadIdForReceipt(event);\n var threaded = this.threadedReceipts.get(threadId, userId);\n if (threaded) {\n if (isAfterOrSame(threaded.eventId, eventId, this.room)) {\n // The threaded receipt is after this event, so we have read it.\n return true;\n }\n }\n\n // TODO: what if they sent the second-last event in the thread?\n if (this.userSentLatestEventInThread(threadId, userId)) {\n // The user sent the latest message in this event's thread, so we\n // consider everything in the thread to be read.\n //\n // Note: maybe we don't need this because synthetic receipts should\n // do this job for us?\n return true;\n }\n\n // Neither of the receipts were after the event, so it's unread.\n return false;\n }\n\n /**\n * @returns true if the thread with this ID can be found, and the supplied\n * user sent the latest message in it.\n */\n userSentLatestEventInThread(threadId, userId) {\n var _this$room$getThread;\n var timeline = threadId === MAIN_ROOM_TIMELINE ? this.room.getLiveTimeline().getEvents() : (_this$room$getThread = this.room.getThread(threadId)) === null || _this$room$getThread === void 0 ? void 0 : _this$room$getThread.timeline;\n return !!(timeline && timeline.length > 0 && timeline[timeline.length - 1].getSender() === userId);\n }\n}\n\n// --- implementation details ---\n\n/**\n * The information \"inside\" a receipt once it has been stored inside\n * RoomReceipts - what eventId it refers to, its type, and its ts.\n *\n * Does not contain userId or threadId since these are stored as keys of the\n * maps in RoomReceipts.\n */\nclass ReceiptInfo {\n constructor(eventId, receiptType, ts) {\n this.eventId = eventId;\n this.receiptType = receiptType;\n this.ts = ts;\n }\n}\n\n/**\n * Everything we know about a receipt that is \"dangling\" because we can't find\n * the event to which it refers.\n */\nclass DanglingReceipt {\n constructor(eventId, receiptType, userId, receipt, synthetic) {\n this.eventId = eventId;\n this.receiptType = receiptType;\n this.userId = userId;\n this.receipt = receipt;\n this.synthetic = synthetic;\n }\n}\nclass UserReceipts {\n constructor(room) {\n _defineProperty(this, \"room\", void 0);\n /**\n * The real receipt for this user.\n */\n _defineProperty(this, \"real\", void 0);\n /**\n * The synthetic receipt for this user. If this is defined, it is later than real.\n */\n _defineProperty(this, \"synthetic\", void 0);\n this.room = room;\n this.real = undefined;\n this.synthetic = undefined;\n }\n set(synthetic, receiptInfo) {\n if (synthetic) {\n this.synthetic = receiptInfo;\n } else {\n this.real = receiptInfo;\n }\n\n // Preserve the invariant: synthetic is only defined if it's later than real\n if (this.synthetic && this.real) {\n if (isAfterOrSame(this.real.eventId, this.synthetic.eventId, this.room)) {\n this.synthetic = undefined;\n }\n }\n }\n\n /**\n * Return the latest receipt we have - synthetic if we have one (and it's\n * later), otherwise real.\n */\n get() {\n var _this$synthetic;\n // Relies on the invariant that synthetic is only defined if it's later than real.\n return (_this$synthetic = this.synthetic) !== null && _this$synthetic !== void 0 ? _this$synthetic : this.real;\n }\n\n /**\n * Return the latest receipt we have of the specified type (synthetic or not).\n */\n getByType(synthetic) {\n return synthetic ? this.synthetic : this.real;\n }\n}\n\n/**\n * The latest receipt info we have, either for a single thread, or all the\n * unthreaded receipts for a room.\n *\n * userId: ReceiptInfo\n */\nclass ReceiptsByUser {\n constructor(room) {\n _defineProperty(this, \"room\", void 0);\n /** map of userId: UserReceipts */\n _defineProperty(this, \"data\", void 0);\n this.room = room;\n this.data = new Map();\n }\n\n /**\n * Add the supplied receipt to our structure, if it is not earlier than the\n * one we already hold for this user.\n */\n set(eventId, receiptType, userId, ts, synthetic) {\n var userReceipts = getOrCreate(this.data, userId, () => new UserReceipts(this.room));\n var existingReceipt = userReceipts.getByType(synthetic);\n if (existingReceipt && isAfter(existingReceipt.eventId, eventId, this.room)) {\n // The new receipt is before the existing one - don't store it.\n return;\n }\n\n // Possibilities:\n //\n // 1. there was no existing receipt, or\n // 2. the existing receipt was before this one, or\n // 3. we were unable to compare the receipts.\n //\n // In the case of 3 it's difficult to decide what to do, so the\n // most-recently-received receipt wins.\n //\n // Case 3 can only happen if the events for these receipts have\n // disappeared, which is quite unlikely since the new one has just been\n // checked, and the old one was checked before it was inserted here.\n //\n // We go ahead and store this receipt (replacing the other if it exists)\n userReceipts.set(synthetic, new ReceiptInfo(eventId, receiptType, ts));\n }\n\n /**\n * Find the latest receipt we have for this user. (Note - there is only one\n * receipt per user, because we are already inside a specific thread or\n * unthreaded list.)\n *\n * If there is a later synthetic receipt for this user, return that.\n * Otherwise, return the real receipt.\n *\n * @returns the found receipt info, or undefined if we have no receipt for this user.\n */\n get(userId) {\n var _this$data$get;\n return (_this$data$get = this.data.get(userId)) === null || _this$data$get === void 0 ? void 0 : _this$data$get.get();\n }\n}\n\n/**\n * The latest threaded receipts we have for a room.\n */\nclass ThreadedReceipts {\n constructor(room) {\n _defineProperty(this, \"room\", void 0);\n /** map of threadId: ReceiptsByUser */\n _defineProperty(this, \"data\", void 0);\n this.room = room;\n this.data = new Map();\n }\n\n /**\n * Add the supplied receipt to our structure, if it is not earlier than one\n * we already hold for this user in this thread.\n */\n set(threadId, eventId, receiptType, userId, ts, synthetic) {\n var receiptsByUser = getOrCreate(this.data, threadId, () => new ReceiptsByUser(this.room));\n receiptsByUser.set(eventId, receiptType, userId, ts, synthetic);\n }\n\n /**\n * Find the latest threaded receipt for the supplied user in the supplied thread.\n *\n * @returns the found receipt info or undefined if we don't have one.\n */\n get(threadId, userId) {\n var _this$data$get2;\n return (_this$data$get2 = this.data.get(threadId)) === null || _this$data$get2 === void 0 ? void 0 : _this$data$get2.get(userId);\n }\n}\n\n/**\n * All the receipts that we have received but can't process because we can't\n * find the event they refer to.\n *\n * We hold on to them so we can process them if their event arrives later.\n */\nclass DanglingReceipts {\n constructor() {\n /**\n * eventId: DanglingReceipt[]\n */\n _defineProperty(this, \"data\", new Map());\n }\n /**\n * Remember the supplied dangling receipt.\n */\n add(danglingReceipt) {\n var danglingReceipts = getOrCreate(this.data, danglingReceipt.eventId, () => []);\n danglingReceipts.push(danglingReceipt);\n }\n\n /**\n * Remove and return the dangling receipts for the given event ID.\n * @param eventId - the event ID to look for\n * @returns the found dangling receipts, or undefined if we don't have one.\n */\n remove(eventId) {\n var danglingReceipts = this.data.get(eventId);\n this.data.delete(eventId);\n return danglingReceipts;\n }\n}\nfunction getOrCreate(m, key, createFn) {\n var found = m.get(key);\n if (found) {\n return found;\n } else {\n var created = createFn();\n m.set(key, created);\n return created;\n }\n}\n\n/**\n * Is left after right (or the same)?\n *\n * Only returns true if both events can be found, and left is after or the same\n * as right.\n *\n * @returns left \\>= right\n */\nfunction isAfterOrSame(leftEventId, rightEventId, room) {\n var comparison = room.compareEventOrdering(leftEventId, rightEventId);\n return comparison !== null && comparison >= 0;\n}\n\n/**\n * Is left strictly after right?\n *\n * Only returns true if both events can be found, and left is strictly after right.\n *\n * @returns left \\> right\n */\nfunction isAfter(leftEventId, rightEventId, room) {\n var comparison = room.compareEventOrdering(leftEventId, rightEventId);\n return comparison !== null && comparison > 0;\n}\n//# sourceMappingURL=room-receipts.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { inMainTimelineForReceipt, threadIdForReceipt } from \"../client.js\";\n\n/**\n * Determine the order of two events in a room.\n *\n * In principle this should use the same order as the server, but in practice\n * this is difficult for events that were not received over the Sync API. See\n * MSC4033 for details.\n *\n * This implementation leans on the order of events within their timelines, and\n * falls back to comparing event timestamps when they are in different\n * timelines.\n *\n * See https://github.com/matrix-org/matrix-js-sdk/issues/3325 for where we are\n * tracking the work to fix this.\n *\n * @param room - the room we are looking in\n * @param leftEventId - the id of the first event\n * @param rightEventId - the id of the second event\n\n * @returns -1 if left \\< right, 1 if left \\> right, 0 if left == right, null if\n * we can't tell (because we can't find the events).\n */\nexport function compareEventOrdering(room, leftEventId, rightEventId) {\n var leftEvent = room.findEventById(leftEventId);\n var rightEvent = room.findEventById(rightEventId);\n if (!leftEvent || !rightEvent) {\n // Without the events themselves, we can't find their thread or\n // timeline, or guess based on timestamp, so we just don't know.\n return null;\n }\n\n // Check whether the events are in the main timeline\n var isLeftEventInMainTimeline = inMainTimelineForReceipt(leftEvent);\n var isRightEventInMainTimeline = inMainTimelineForReceipt(rightEvent);\n if (isLeftEventInMainTimeline && isRightEventInMainTimeline) {\n return compareEventsInMainTimeline(room, leftEventId, rightEventId, leftEvent, rightEvent);\n } else {\n // At least one event is not in the timeline, so we can't use the room's\n // unfiltered timeline set.\n return compareEventsInThreads(leftEventId, rightEventId, leftEvent, rightEvent);\n }\n}\nfunction compareEventsInMainTimeline(room, leftEventId, rightEventId, leftEvent, rightEvent) {\n // Get the timeline set that contains all the events.\n var timelineSet = room.getUnfilteredTimelineSet();\n\n // If they are in the same timeline, compareEventOrdering does what we need\n var compareSameTimeline = timelineSet.compareEventOrdering(leftEventId, rightEventId);\n if (compareSameTimeline !== null) {\n return compareSameTimeline;\n }\n\n // Find which timeline each event is in. Refuse to provide an ordering if we\n // can't find either of the events.\n\n var leftTimeline = timelineSet.getTimelineForEvent(leftEventId);\n if (leftTimeline === timelineSet.getLiveTimeline()) {\n // The left event is part of the live timeline, so it must be after the\n // right event (since they are not in the same timeline or we would have\n // returned after compareEventOrdering.\n return 1;\n }\n var rightTimeline = timelineSet.getTimelineForEvent(rightEventId);\n if (rightTimeline === timelineSet.getLiveTimeline()) {\n // The right event is part of the live timeline, so it must be after the\n // left event.\n return -1;\n }\n\n // They are in older timeline sets (because they were fetched by paging up).\n return guessOrderBasedOnTimestamp(leftEvent, rightEvent);\n}\nfunction compareEventsInThreads(leftEventId, rightEventId, leftEvent, rightEvent) {\n var leftEventThreadId = threadIdForReceipt(leftEvent);\n var rightEventThreadId = threadIdForReceipt(rightEvent);\n var leftThread = leftEvent.getThread();\n if (leftThread && leftEventThreadId === rightEventThreadId) {\n // They are in the same thread, so we can ask the thread's timeline to\n // figure it out for us\n return leftThread.timelineSet.compareEventOrdering(leftEventId, rightEventId);\n } else {\n return guessOrderBasedOnTimestamp(leftEvent, rightEvent);\n }\n}\n\n/**\n * Guess the order of events based on server timestamp. This is not good, but\n * difficult to avoid without MSC4033.\n *\n * See https://github.com/matrix-org/matrix-js-sdk/issues/3325\n */\nfunction guessOrderBasedOnTimestamp(leftEvent, rightEvent) {\n var leftTs = leftEvent.getTs();\n var rightTs = rightEvent.getTs();\n if (leftTs < rightTs) {\n return -1;\n } else if (leftTs > rightTs) {\n return 1;\n } else {\n return 0;\n }\n}\n//# sourceMappingURL=compare-event-ordering.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2026 Element Creations Ltd.\nCopyright 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { TypedEventEmitter } from \"./models/typed-event-emitter.js\";\nimport { deepCompare } from \"./utils.js\";\n\n// How often we update the server capabilities.\n// 6 hours - an arbitrary value, but they should change very infrequently.\nvar CAPABILITIES_CACHE_MS = 6 * 60 * 60 * 1000;\n\n// How long we want before retrying if we couldn't fetch\nvar CAPABILITIES_RETRY_MS = 30 * 1000;\n\n/**\n * Manages storing and periodically refreshing the server capabilities.\n */\nexport class CapabilityPoller extends TypedEventEmitter {\n constructor(logger, http, name) {\n var _this;\n super();\n _this = this;\n this.logger = logger;\n this.http = http;\n this.name = name;\n _defineProperty(this, \"cached\", void 0);\n _defineProperty(this, \"retryTimeout\", void 0);\n _defineProperty(this, \"refreshTimeout\", void 0);\n _defineProperty(this, \"poll\", /*#__PURE__*/_asyncToGenerator(function* () {\n _this.logger.debug(\"Checking capabilites\");\n try {\n var current = _this.cached;\n yield _this.fetch();\n _this.clearTimeouts();\n _this.refreshTimeout = globalThis.setTimeout(_this.poll, CAPABILITIES_CACHE_MS);\n _this.logger.debug(\"Fetched new server \".concat(_this.name));\n if (_this.cached && !deepCompare(current, _this.cached)) {\n _this.emit(\"update\", _this.cached);\n }\n } catch (e) {\n _this.clearTimeouts();\n var howLong = Math.floor(CAPABILITIES_RETRY_MS + Math.random() * 5000);\n _this.retryTimeout = globalThis.setTimeout(_this.poll, howLong);\n _this.logger.warn(\"Failed to refresh \".concat(_this.name, \": retrying in \").concat(howLong, \"ms\"), e);\n }\n }));\n }\n\n /**\n * Starts periodically fetching the server capabilities.\n */\n start() {\n this.poll().then();\n }\n\n /**\n * Stops the service\n */\n stop() {\n this.clearTimeouts();\n }\n\n /**\n * Returns the cached capabilities, or undefined if none are cached.\n * @returns the current capabilities, if any.\n */\n getCached() {\n return this.cached;\n }\n clearTimeouts() {\n if (this.refreshTimeout) {\n clearInterval(this.refreshTimeout);\n this.refreshTimeout = undefined;\n }\n if (this.retryTimeout) {\n clearTimeout(this.retryTimeout);\n this.retryTimeout = undefined;\n }\n }\n}\n//# sourceMappingURL=capabilityPoller.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var Method = /*#__PURE__*/function (Method) {\n Method[\"Get\"] = \"GET\";\n Method[\"Put\"] = \"PUT\";\n Method[\"Post\"] = \"POST\";\n Method[\"Delete\"] = \"DELETE\";\n Method[\"Options\"] = \"OPTIONS\";\n Method[\"Head\"] = \"HEAD\";\n Method[\"Patch\"] = \"PATCH\";\n return Method;\n}({});\n//# sourceMappingURL=method.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2022 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { NamespacedValue } from \"../NamespacedValue.js\";\n/**\n * Construct a generic HTTP error. This is a JavaScript Error with additional information\n * specific to HTTP responses.\n * @param msg - The error message to include.\n * @param httpStatus - The HTTP response status code.\n * @param httpHeaders - The HTTP response headers.\n */\nexport class HTTPError extends Error {\n constructor(msg, httpStatus, httpHeaders) {\n super(msg);\n this.httpStatus = httpStatus;\n this.httpHeaders = httpHeaders;\n }\n\n /**\n * Check if this error was due to rate-limiting on the server side (and should therefore be retried after a delay).\n *\n * If this returns `true`, {@link getRetryAfterMs} can be called to retrieve the server-side\n * recommendation for the retry period.\n *\n * @returns Whether this error is due to rate-limiting.\n */\n isRateLimitError() {\n return this.httpStatus === 429;\n }\n\n /**\n * @returns The recommended delay in milliseconds to wait before retrying\n * the request that triggered this error, or null if no delay is recommended.\n * @throws Error if the recommended delay is an invalid value.\n * @see {@link safeGetRetryAfterMs} for a version of this check that doesn't throw.\n */\n getRetryAfterMs() {\n var _this$httpHeaders;\n var retryAfter = (_this$httpHeaders = this.httpHeaders) === null || _this$httpHeaders === void 0 ? void 0 : _this$httpHeaders.get(\"Retry-After\");\n if (retryAfter != null) {\n if (/^\\d+$/.test(retryAfter)) {\n var ms = Number.parseInt(retryAfter) * 1000;\n if (!Number.isFinite(ms)) {\n throw new Error(\"Retry-After header integer value is too large\");\n }\n return ms;\n }\n var date = new Date(retryAfter);\n if (date.toUTCString() !== retryAfter) {\n throw new Error(\"Retry-After header value is not a valid HTTP-date or non-negative decimal integer\");\n }\n return date.getTime() - Date.now();\n }\n return null;\n }\n}\nexport class MatrixError extends HTTPError {\n /**\n * Construct a Matrix error. This is a JavaScript Error with additional\n * information specific to the standard Matrix error response.\n * @param errorJson - The Matrix error JSON returned from the homeserver.\n * @param httpStatus - The numeric HTTP status code given\n * @param httpHeaders - The HTTP response headers given\n */\n constructor() {\n var errorJson = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var httpStatus = arguments.length > 1 ? arguments[1] : undefined;\n var url = arguments.length > 2 ? arguments[2] : undefined;\n var event = arguments.length > 3 ? arguments[3] : undefined;\n var httpHeaders = arguments.length > 4 ? arguments[4] : undefined;\n var message = errorJson.error || \"Unknown message\";\n if (httpStatus) {\n message = \"[\".concat(httpStatus, \"] \").concat(message);\n }\n if (url) {\n message = \"\".concat(message, \" (\").concat(url, \")\");\n }\n super(\"MatrixError: \".concat(message), httpStatus, httpHeaders);\n this.url = url;\n this.event = event;\n // The Matrix 'errcode' value, e.g. \"M_FORBIDDEN\".\n _defineProperty(this, \"errcode\", void 0);\n // The Matrix 'error' value.\n _defineProperty(this, \"error\", void 0);\n // The raw Matrix error JSON used to construct this object.\n _defineProperty(this, \"data\", void 0);\n this.errcode = errorJson.errcode;\n this.error = errorJson.error;\n this.name = errorJson.errcode || \"Unknown error code\";\n this.data = errorJson;\n }\n isRateLimitError() {\n return this.errcode === \"M_LIMIT_EXCEEDED\" || (this.errcode === \"M_UNKNOWN\" || this.errcode === undefined) && super.isRateLimitError();\n }\n getRetryAfterMs() {\n var headerValue = super.getRetryAfterMs();\n if (headerValue !== null) {\n return headerValue;\n }\n // Note: retry_after_ms is deprecated as of spec version v1.10\n if (this.errcode === \"M_LIMIT_EXCEEDED\" && \"retry_after_ms\" in this.data) {\n if (!Number.isInteger(this.data.retry_after_ms)) {\n throw new Error(\"retry_after_ms is not an integer\");\n }\n return this.data.retry_after_ms;\n }\n return null;\n }\n\n /**\n * @returns this error expressed as a JSON payload\n * for use by Widget API error responses.\n */\n asWidgetApiErrorData() {\n var _this$httpStatus, _this$url, _this$errcode, _this$data$error;\n var headers = {};\n if (this.httpHeaders) {\n for (var _ref3 of this.httpHeaders) {\n var _ref2 = _slicedToArray(_ref3, 2);\n var name = _ref2[0];\n var value = _ref2[1];\n headers[name] = value;\n }\n }\n return {\n http_status: (_this$httpStatus = this.httpStatus) !== null && _this$httpStatus !== void 0 ? _this$httpStatus : 400,\n http_headers: headers,\n url: (_this$url = this.url) !== null && _this$url !== void 0 ? _this$url : \"\",\n response: _objectSpread({\n errcode: (_this$errcode = this.errcode) !== null && _this$errcode !== void 0 ? _this$errcode : \"M_UNKNOWN\",\n error: (_this$data$error = this.data.error) !== null && _this$data$error !== void 0 ? _this$data$error : \"Unknown message\"\n }, this.data)\n };\n }\n\n /**\n * @returns a new {@link MatrixError} from a JSON payload\n * received from Widget API error responses.\n */\n static fromWidgetApiErrorData(data) {\n return new MatrixError(data.response, data.http_status, data.url, undefined, new Headers(data.http_headers));\n }\n}\n\n/**\n * @returns The recommended delay in milliseconds to wait before retrying the request.\n * @param error - The error to check for a retry delay.\n * @param defaultMs - The delay to use if the error was not due to rate-limiting or if no valid delay is recommended.\n */\nexport function safeGetRetryAfterMs(error, defaultMs) {\n if (!(error instanceof HTTPError) || !error.isRateLimitError()) {\n return defaultMs;\n }\n try {\n var _error$getRetryAfterM;\n return (_error$getRetryAfterM = error.getRetryAfterMs()) !== null && _error$getRetryAfterM !== void 0 ? _error$getRetryAfterM : defaultMs;\n } catch (_unused) {\n return defaultMs;\n }\n}\n\n/**\n * Construct a ConnectionError. This is a JavaScript Error indicating\n * that a request failed because of some error with the connection, either\n * CORS was not correctly configured on the server, the server didn't response,\n * the request timed out, or the internet connection on the client side went down.\n */\nexport class ConnectionError extends Error {\n constructor(message, cause) {\n super(message + (cause ? \": \".concat(cause.message) : \"\"));\n }\n get name() {\n return \"ConnectionError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token also failed but in a way which was not indicative of token invalidation.\n * Assumed to be a temporary failure.\n */\nexport class TokenRefreshError extends Error {\n constructor(cause) {\n var _cause$message;\n super((_cause$message = cause === null || cause === void 0 ? void 0 : cause.message) !== null && _cause$message !== void 0 ? _cause$message : \"\");\n }\n get name() {\n return \"TokenRefreshError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token failed in a way indicative of token invalidation.\n */\nexport class TokenRefreshLogoutError extends Error {\n constructor(cause) {\n var _cause$message2;\n super((_cause$message2 = cause === null || cause === void 0 ? void 0 : cause.message) !== null && _cause$message2 !== void 0 ? _cause$message2 : \"\");\n }\n get name() {\n return \"TokenRefreshLogoutError\";\n }\n}\nexport var MatrixSafetyErrorCode = new NamespacedValue(null, \"ORG.MATRIX.MSC4387_SAFETY\");\n\n/***\n * This error is thrown when the homeserver refuses to handle an action due to a\n * safety concern.\n * @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387\n */\nexport class MatrixSafetyError extends MatrixError {\n constructor() {\n super(...arguments);\n /**\n * The kinds of harms detected by the server.\n * @see https://github.com/matrix-org/matrix-spec-proposals/pull/4387 for a list of spec defined harms.\n */\n _defineProperty(this, \"harms\", void 0);\n /**\n * The date at which a request can be reattempted.\n */\n _defineProperty(this, \"expiry\", void 0);\n var body = arguments.length <= 0 ? undefined : arguments[0];\n this.harms = new Set(body && \"harms\" in body && Array.isArray(body.harms) ? body.harms : []);\n this.message = \"\".concat(super.message, \" (\").concat([...this.harms].join(\", \"), \")\");\n if (body && \"expiry\" in body && typeof body.expiry === \"number\") {\n this.expiry = new Date(body.expiry);\n }\n }\n}\n//# sourceMappingURL=errors.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * @experimental\n * Unencrypted access and (optional) refresh token\n */\n\n/**\n * @experimental\n * Function that performs token refresh using the given refreshToken.\n * Returns a promise that resolves to the refreshed access and (optional) refresh tokens.\n *\n * Can be passed to HttpApi instance as {@link IHttpOpts.tokenRefreshFunction} during client creation {@link ICreateClientOpts}\n */\n\n/** Options object for `FetchHttpApi` and {@link MatrixHttpApi}. */\n\n/** Options object for `FetchHttpApi.requestOtherUrl`. */\n\nexport var HttpApiEvent = /*#__PURE__*/function (HttpApiEvent) {\n HttpApiEvent[\"SessionLoggedOut\"] = \"Session.logged_out\";\n HttpApiEvent[\"NoConsent\"] = \"no_consent\";\n return HttpApiEvent;\n}({});\n//# sourceMappingURL=interface.js.map","\"use strict\";\n/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.format = format;\nexports.parse = parse;\nconst TEXT_REGEXP = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]*$/;\nconst TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\n/**\n * RegExp to match chars that must be quoted-pair in RFC 9110 sec 5.6.4\n */\nconst QUOTE_REGEXP = /[\\\\\"]/g;\n/**\n * RegExp to match type in RFC 9110 sec 8.3.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nconst TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\n/**\n * Null object perf optimization. Faster than `Object.create(null)` and `{ __proto__: null }`.\n */\nconst NullObject = /* @__PURE__ */ (() => {\n const C = function () { };\n C.prototype = Object.create(null);\n return C;\n})();\n/**\n * Format an object into a `Content-Type` header.\n */\nfunction format(obj) {\n const { type, parameters } = obj;\n if (!type || !TYPE_REGEXP.test(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n let result = type;\n if (parameters) {\n for (const param of Object.keys(parameters)) {\n if (!TOKEN_REGEXP.test(param)) {\n throw new TypeError(`Invalid parameter name: ${param}`);\n }\n result += `; ${param}=${qstring(parameters[param])}`;\n }\n }\n return result;\n}\n/**\n * Parse a `Content-Type` header.\n */\nfunction parse(header, options) {\n const len = header.length;\n let index = skipOWS(header, 0, len);\n const valueStart = index;\n index = skipValue(header, index, len);\n const valueEnd = trailingOWS(header, valueStart, index);\n const type = header.slice(valueStart, valueEnd).toLowerCase();\n const parameters = options?.parameters === false\n ? new NullObject()\n : parseParameters(header, index, len);\n return { type, parameters };\n}\nconst SP = 32; // \" \"\nconst HTAB = 9; // \"\\t\"\nconst SEMI = 59; // \";\"\nconst EQ = 61; // \"=\"\nconst DQUOTE = 34; // '\"'\nconst BSLASH = 92; // \"\\\\\"\n/**\n * Parses the parameters of a `Content-Type` header starting at the given index.\n */\nfunction parseParameters(header, index, len) {\n const parameters = new NullObject();\n parameter: while (index < len) {\n index = skipOWS(header, index + 1 /* Skip over ; */, len);\n const keyStart = index;\n while (index < len) {\n const code = header.charCodeAt(index);\n if (code === SEMI)\n continue parameter;\n if (code === EQ) {\n const keyEnd = trailingOWS(header, keyStart, index);\n const key = header.slice(keyStart, keyEnd).toLowerCase();\n index = skipOWS(header, index + 1, len);\n if (index < len && header.charCodeAt(index) === DQUOTE) {\n index++;\n let value = \"\";\n while (index < len) {\n const code = header.charCodeAt(index++);\n if (code === DQUOTE) {\n index = skipValue(header, index, len);\n if (parameters[key] === undefined)\n parameters[key] = value;\n break;\n }\n if (code === BSLASH && index < len) {\n value += header[index++];\n continue;\n }\n value += String.fromCharCode(code);\n }\n continue parameter;\n }\n const valueStart = index;\n index = skipValue(header, index, len);\n if (parameters[key] === undefined) {\n const valueEnd = trailingOWS(header, valueStart, index);\n parameters[key] = header.slice(valueStart, valueEnd);\n }\n continue parameter;\n }\n index++;\n }\n }\n return parameters;\n}\n/**\n * Skip over characters until a semicolon.\n */\nfunction skipValue(str, index, len) {\n while (index < len) {\n const char = str.charCodeAt(index);\n if (char === SEMI)\n break;\n index++;\n }\n return index;\n}\n/**\n * Skip optional whitespace (OWS) in an HTTP header value.\n *\n * OWS is defined in RFC 9110 sec 5.6.3 as SP (\" \") or HTAB (\"\\t\").\n */\nfunction skipOWS(header, index, len) {\n while (index < len) {\n const char = header.charCodeAt(index);\n if (char !== SP && char !== HTAB)\n break;\n index++;\n }\n return index;\n}\n/**\n * Trim optional whitespace (OWS) from the end of a substring.\n *\n * OWS is defined in RFC 9110 sec 5.6.3 as SP (\" \") or HTAB (\"\\t\").\n */\nfunction trailingOWS(header, start, end) {\n while (end > start) {\n const char = header.charCodeAt(end - 1);\n if (char !== SP && char !== HTAB)\n break;\n end--;\n }\n return end;\n}\n/**\n * Serialize a parameter value.\n */\nfunction qstring(str) {\n if (TOKEN_REGEXP.test(str))\n return str;\n if (TEXT_REGEXP.test(str))\n return `\"${str.replace(QUOTE_REGEXP, \"\\\\$&\")}\"`;\n throw new TypeError(`Invalid parameter value: ${str}`);\n}\n//# sourceMappingURL=index.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2022 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { parse as parseContentType } from \"content-type\";\nimport { logger } from \"../logger.js\";\nimport { sleep } from \"../utils.js\";\nimport { ConnectionError, HTTPError, MatrixError, MatrixSafetyError, MatrixSafetyErrorCode, safeGetRetryAfterMs } from \"./errors.js\";\n\n// Ponyfill for https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout\nexport function timeoutSignal(ms) {\n var controller = new AbortController();\n setTimeout(() => {\n controller.abort();\n }, ms);\n return controller.signal;\n}\nexport function anySignal(signals) {\n var controller = new AbortController();\n function cleanup() {\n for (var signal of signals) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n }\n function onAbort() {\n controller.abort();\n cleanup();\n }\n for (var signal of signals) {\n if (signal.aborted) {\n onAbort();\n break;\n }\n signal.addEventListener(\"abort\", onAbort);\n }\n return {\n signal: controller.signal,\n cleanup\n };\n}\n\n/**\n * Attempt to turn an HTTP error response into a Javascript Error.\n *\n * If it is a JSON response, we will parse it into a MatrixError. Otherwise\n * we return a generic Error.\n *\n * @param response - response object\n * @param body - raw body of the response\n * @returns\n */\nexport function parseErrorResponse(response, body) {\n var _contentType, _contentType2;\n var httpHeaders = isXhr(response) ? new Headers(response.getAllResponseHeaders().trim().split(/[\\r\\n]+/).map(header => {\n var colonIdx = header.indexOf(\":\");\n return [header.substring(0, colonIdx), header.substring(colonIdx + 1)];\n })) : response.headers;\n var contentType;\n try {\n contentType = getResponseContentType(httpHeaders);\n } catch (e) {\n return e;\n }\n if (((_contentType = contentType) === null || _contentType === void 0 ? void 0 : _contentType.type) === \"application/json\" && body) {\n var errorBody = JSON.parse(body);\n if (errorBody.errcode && MatrixSafetyErrorCode.matches(errorBody.errcode)) {\n return new MatrixSafetyError(errorBody, response.status, isXhr(response) ? response.responseURL : response.url, undefined, httpHeaders);\n }\n return new MatrixError(errorBody, response.status, isXhr(response) ? response.responseURL : response.url, undefined, httpHeaders);\n }\n if (((_contentType2 = contentType) === null || _contentType2 === void 0 ? void 0 : _contentType2.type) === \"text/plain\") {\n return new HTTPError(\"Server returned \".concat(response.status, \" error: \").concat(body), response.status, httpHeaders);\n }\n return new HTTPError(\"Server returned \".concat(response.status, \" error\"), response.status, httpHeaders);\n}\nfunction isXhr(response) {\n return \"getResponseHeader\" in response;\n}\n\n/**\n * extract the Content-Type header from response headers, and\n * parse it to a `{type, parameters}` object.\n *\n * returns null if no content-type header could be found.\n *\n * @param response - response object\n * @returns parsed content-type header, or null if not found\n */\nfunction getResponseContentType(headers) {\n var contentType = headers.get(\"Content-Type\");\n if (contentType === null) return null;\n return parseContentType(contentType);\n}\n\n/**\n * Retries a network operation run in a callback.\n * @param maxAttempts - maximum attempts to try\n * @param callback - callback that returns a promise of the network operation. If rejected with ConnectionError, it will be retried by calling the callback again.\n * @returns the result of the network operation\n * @throws {@link ConnectionError} If after maxAttempts the callback still throws ConnectionError\n */\nexport function retryNetworkOperation(_x, _x2) {\n return _retryNetworkOperation.apply(this, arguments);\n}\n\n/**\n * Calculate the backoff time for a request retry attempt.\n * This produces wait times of 2, 4, 8, and 16 seconds (30s total) after which we give up. If the\n * failure was due to a rate limited request, the time specified in the error is returned.\n *\n * Returns -1 if the error is not retryable, or if we reach the maximum number of attempts.\n *\n * @param err - The error thrown by the http call\n * @param attempts - The number of attempts made so far, including the one that just failed.\n * @param retryConnectionError - Whether to retry on {@link ConnectionError} (CORS, connection is down, etc.)\n */\nfunction _retryNetworkOperation() {\n _retryNetworkOperation = _asyncToGenerator(function* (maxAttempts, callback) {\n var attempts = 0;\n var lastConnectionError = null;\n while (attempts < maxAttempts) {\n try {\n if (attempts > 0) {\n var timeout = 1000 * Math.pow(2, attempts);\n logger.log(\"network operation failed \".concat(attempts, \" times, retrying in \").concat(timeout, \"ms...\"));\n yield sleep(timeout);\n }\n return yield callback();\n } catch (err) {\n if (err instanceof ConnectionError) {\n attempts += 1;\n lastConnectionError = err;\n } else {\n throw err;\n }\n }\n }\n throw lastConnectionError;\n });\n return _retryNetworkOperation.apply(this, arguments);\n}\nexport function calculateRetryBackoff(err, attempts, retryConnectionError) {\n if (attempts > 4) {\n return -1; // give up\n }\n if (err instanceof ConnectionError && !retryConnectionError) {\n return -1;\n }\n if (err.httpStatus && Math.floor(err.httpStatus / 100) === 4 && err.httpStatus !== 429) {\n // client error; no amount of retrying will save you now (except for rate limiting which is handled below)\n return -1;\n }\n if (err.name === \"AbortError\") {\n // this is a client timeout, that is already very high 60s/80s\n // we don't want to retry, as it could do it for very long\n return -1;\n }\n\n // If we are trying to send an event (or similar) that is too large in any way, then retrying won't help\n if (err.name === \"M_TOO_LARGE\") {\n return -1;\n }\n return safeGetRetryAfterMs(err, 1000 * Math.pow(2, attempts));\n}\n//# sourceMappingURL=utils.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2025 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MatrixError, TokenRefreshLogoutError } from \"./errors.js\";\nimport { sleep } from \"../utils.js\";\n\n/**\n * This is an internal module. See {@link MatrixHttpApi} for the public class.\n */\n\nexport var TokenRefreshOutcome = /*#__PURE__*/function (TokenRefreshOutcome) {\n TokenRefreshOutcome[\"Success\"] = \"success\";\n TokenRefreshOutcome[\"Failure\"] = \"failure\";\n TokenRefreshOutcome[\"Logout\"] = \"logout\";\n return TokenRefreshOutcome;\n}({});\n// If the token expires in less than this time amount of time, we will eagerly refresh it before making the intended request.\nvar REFRESH_IF_TOKEN_EXPIRES_WITHIN_MS = 500;\n// If we get an unknown token error and the token expires in less than this time amount of time, we will refresh it before making the intended request.\n// Otherwise, we will error as the token should not have expired yet and we need to avoid retrying indefinitely.\nvar REFRESH_ON_ERROR_IF_TOKEN_EXPIRES_WITHIN_MS = 60 * 1000;\n/**\n * This class is responsible for managing the access token and refresh token for authenticated requests.\n * It will automatically refresh the access token when it is about to expire, and will handle unknown token errors.\n */\nexport class TokenRefresher {\n constructor(opts) {\n this.opts = opts;\n /**\n * Promise used to block authenticated requests during a token refresh to avoid repeated expected errors.\n * @private\n */\n _defineProperty(this, \"tokenRefreshPromise\", void 0);\n _defineProperty(this, \"latestTokenRefreshExpiry\", void 0);\n }\n /**\n * This function is called before every request to ensure that the access token is valid.\n * @returns a snapshot containing the access token and other properties which must be passed to the handleUnknownToken\n * handler if an M_UNKNOWN_TOKEN error is encountered.\n */\n prepareForRequest() {\n var _this = this;\n return _asyncToGenerator(function* () {\n // Ensure our token is refreshed before we build the headers/params\n yield _this.refreshIfNeeded();\n return {\n accessToken: _this.opts.accessToken,\n refreshToken: _this.opts.refreshToken,\n expiry: _this.latestTokenRefreshExpiry\n };\n })();\n }\n refreshIfNeeded() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (_this2.tokenRefreshPromise) {\n return _this2.tokenRefreshPromise;\n }\n // If we don't know the token expiry, we can't eagerly refresh\n if (!_this2.latestTokenRefreshExpiry) return;\n var expiresIn = _this2.latestTokenRefreshExpiry.getTime() - Date.now();\n if (expiresIn <= REFRESH_IF_TOKEN_EXPIRES_WITHIN_MS) {\n yield _this2._handleUnknownToken();\n }\n })();\n }\n\n /**\n * This function is called when an M_UNKNOWN_TOKEN error is encountered.\n * It will attempt to refresh the access token if it is unknown, and will return a TokenRefreshOutcome.\n * @param snapshot - the snapshot returned by prepareForRequest\n * @param attempt - the number of attempts made for this request so far\n * @returns a TokenRefreshOutcome indicating the result of the refresh attempt\n */\n handleUnknownToken(snapshot, attempt) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n return _this3._handleUnknownToken(snapshot, attempt);\n })();\n }\n\n /* eslint-disable @typescript-eslint/naming-convention */\n\n _handleUnknownToken(snapshot, attempt) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (snapshot !== null && snapshot !== void 0 && snapshot.expiry) {\n // If our token is unknown, but it should not have expired yet, then we should not refresh\n var expiresIn = snapshot.expiry.getTime() - Date.now();\n // If it still has plenty of time left on the clock, we assume something else must be wrong and\n // do not refresh. Otherwise if it's expired, or will soon, we try refreshing.\n if (expiresIn >= REFRESH_ON_ERROR_IF_TOKEN_EXPIRES_WITHIN_MS) {\n return TokenRefreshOutcome.Logout;\n }\n }\n if (!snapshot || (snapshot === null || snapshot === void 0 ? void 0 : snapshot.accessToken) === _this4.opts.accessToken) {\n var _this4$tokenRefreshPr;\n // If we have a snapshot, but the access token is the same as the current one then a refresh\n // did not happen behind us but one may be ongoing anyway\n (_this4$tokenRefreshPr = _this4.tokenRefreshPromise) !== null && _this4$tokenRefreshPr !== void 0 ? _this4$tokenRefreshPr : _this4.tokenRefreshPromise = _this4.doTokenRefresh(attempt);\n try {\n return yield _this4.tokenRefreshPromise;\n } finally {\n _this4.tokenRefreshPromise = undefined;\n }\n }\n\n // We may end up here if the token was refreshed in the background due to another request\n return TokenRefreshOutcome.Success;\n })();\n }\n\n /**\n * Attempt to refresh access tokens.\n * On success, sets new access and refresh tokens in opts.\n * @returns Promise that resolves to a boolean - true when token was refreshed successfully\n */\n doTokenRefresh(attempt) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n if (!_this5.opts.refreshToken || !_this5.opts.tokenRefreshFunction) {\n var _this5$opts$logger;\n (_this5$opts$logger = _this5.opts.logger) === null || _this5$opts$logger === void 0 || _this5$opts$logger.error(\"Unable to refresh token - no refresh token or refresh function\");\n return TokenRefreshOutcome.Logout;\n }\n if (attempt && attempt > 1) {\n // Exponential backoff to ensure we don't trash the server, up to 2^5 seconds\n yield sleep(1000 * Math.min(32, 2 ** attempt));\n }\n try {\n var _this5$opts$logger2, _this5$opts$logger3;\n (_this5$opts$logger2 = _this5.opts.logger) === null || _this5$opts$logger2 === void 0 || _this5$opts$logger2.debug(\"Attempting to refresh token\");\n var _yield$_this5$opts$to = yield _this5.opts.tokenRefreshFunction(_this5.opts.refreshToken),\n accessToken = _yield$_this5$opts$to.accessToken,\n refreshToken = _yield$_this5$opts$to.refreshToken,\n expiry = _yield$_this5$opts$to.expiry;\n _this5.opts.accessToken = accessToken;\n _this5.opts.refreshToken = refreshToken;\n _this5.latestTokenRefreshExpiry = expiry;\n (_this5$opts$logger3 = _this5.opts.logger) === null || _this5$opts$logger3 === void 0 || _this5$opts$logger3.debug(\"... token refresh complete, new token expiry:\", expiry);\n\n // successfully got new tokens\n return TokenRefreshOutcome.Success;\n } catch (error) {\n var _this5$opts$logger5;\n // If we get a TokenError or MatrixError, we should log out, otherwise assume transient\n if (error instanceof TokenRefreshLogoutError || error instanceof MatrixError) {\n var _this5$opts$logger4;\n (_this5$opts$logger4 = _this5.opts.logger) === null || _this5$opts$logger4 === void 0 || _this5$opts$logger4.error(\"Failed to refresh token\", error);\n return TokenRefreshOutcome.Logout;\n }\n (_this5$opts$logger5 = _this5.opts.logger) === null || _this5$opts$logger5 === void 0 || _this5$opts$logger5.warn(\"Failed to refresh token\", error);\n return TokenRefreshOutcome.Failure;\n }\n })();\n }\n}\n//# sourceMappingURL=refresh.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MatrixHttpApi} for the public class.\n */\n\nimport { checkObjectHasKeys, deepCopy, encodeParams } from \"../utils.js\";\nimport { Method } from \"./method.js\";\nimport { ConnectionError, MatrixError, TokenRefreshError } from \"./errors.js\";\nimport { HttpApiEvent } from \"./interface.js\";\nimport { anySignal, parseErrorResponse, timeoutSignal } from \"./utils.js\";\nimport { TokenRefresher, TokenRefreshOutcome } from \"./refresh.js\";\nexport class FetchHttpApi {\n constructor(eventEmitter, opts) {\n var _opts$useAuthorizatio;\n this.eventEmitter = eventEmitter;\n this.opts = opts;\n _defineProperty(this, \"abortController\", new AbortController());\n _defineProperty(this, \"tokenRefresher\", void 0);\n checkObjectHasKeys(opts, [\"baseUrl\", \"prefix\"]);\n if (!opts.onlyData) {\n throw new Error(\"Constructing FetchHttpApi without `onlyData=true` is no longer supported.\");\n }\n opts.useAuthorizationHeader = (_opts$useAuthorizatio = opts.useAuthorizationHeader) !== null && _opts$useAuthorizatio !== void 0 ? _opts$useAuthorizatio : true;\n this.tokenRefresher = new TokenRefresher(opts);\n }\n abort() {\n this.abortController.abort();\n this.abortController = new AbortController();\n }\n fetch(resource, options) {\n if (this.opts.fetchFn) {\n return this.opts.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n\n /**\n * Sets the base URL for the identity server\n * @param url - The new base url\n */\n setIdBaseUrl(url) {\n this.opts.idBaseUrl = url;\n }\n idServerRequest(method, path, params, prefix, accessToken) {\n if (!this.opts.idBaseUrl) {\n throw new Error(\"No identity server base URL set\");\n }\n var queryParams = undefined;\n var body = undefined;\n if (method === Method.Get) {\n queryParams = params;\n } else {\n body = params;\n }\n var fullUri = this.getUrl(path, queryParams, prefix, this.opts.idBaseUrl);\n var opts = {\n json: true,\n headers: {}\n };\n if (accessToken) {\n opts.headers.Authorization = \"Bearer \".concat(accessToken);\n }\n return this.requestOtherUrl(method, fullUri, body, opts);\n }\n\n /**\n * Perform an authorised request to the homeserver.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param paramOpts - additional options.\n * When `paramOpts.doNotAttemptTokenRefresh` is true, token refresh will not be attempted\n * when an expired token is encountered. Used to only attempt token refresh once.\n *\n * @returns The parsed response.\n * @throws Error if a problem occurred. This includes network problems and Matrix-specific error JSON.\n */\n authedRequest(method, path) {\n var queryParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var body = arguments.length > 3 ? arguments[3] : undefined;\n var paramOpts = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n return this.doAuthedRequest(1, method, path, queryParams, body, paramOpts);\n }\n\n // Wrapper around public method authedRequest to allow for tracking retry attempt counts\n doAuthedRequest(attempt, method, path, queryParams, body) {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n var paramOpts = _arguments.length > 5 && _arguments[5] !== undefined ? _arguments[5] : {};\n // avoid mutating paramOpts so they can be used on retry\n var opts = deepCopy(paramOpts);\n // we have to manually copy the abortSignal over as it is not a plain object\n opts.abortSignal = paramOpts.abortSignal;\n\n // Take a snapshot of the current token state before we start the request so we can reference it if we error\n var requestSnapshot = yield _this.tokenRefresher.prepareForRequest();\n if (requestSnapshot.accessToken) {\n if (_this.opts.useAuthorizationHeader) {\n if (!opts.headers) {\n opts.headers = {};\n }\n if (!opts.headers.Authorization) {\n opts.headers.Authorization = \"Bearer \".concat(requestSnapshot.accessToken);\n }\n if (queryParams.access_token) {\n delete queryParams.access_token;\n }\n } else if (!queryParams.access_token) {\n queryParams.access_token = requestSnapshot.accessToken;\n }\n }\n try {\n var response = yield _this.request(method, path, queryParams, body, opts);\n return response;\n } catch (error) {\n if (!(error instanceof MatrixError)) {\n throw error;\n }\n if (error.errcode === \"M_UNKNOWN_TOKEN\") {\n var outcome = yield _this.tokenRefresher.handleUnknownToken(requestSnapshot, attempt);\n if (outcome === TokenRefreshOutcome.Success) {\n // if we got a new token retry the request\n return _this.doAuthedRequest(attempt + 1, method, path, queryParams, body, paramOpts);\n }\n if (outcome === TokenRefreshOutcome.Failure) {\n throw new TokenRefreshError(error);\n }\n if (!(opts !== null && opts !== void 0 && opts.inhibitLogoutEmit)) {\n _this.eventEmitter.emit(HttpApiEvent.SessionLoggedOut, error);\n }\n } else if (error.errcode == \"M_CONSENT_NOT_GIVEN\") {\n _this.eventEmitter.emit(HttpApiEvent.NoConsent, error.message, error.data.consent_uri);\n }\n throw error;\n }\n })();\n }\n\n /**\n * Perform a request to the homeserver without any credentials.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns The parsed response.\n * @throws Error if a problem occurred. This includes network problems and Matrix-specific error JSON.\n */\n request(method, path, queryParams, body, opts) {\n var fullUri = this.getUrl(path, queryParams, opts === null || opts === void 0 ? void 0 : opts.prefix, opts === null || opts === void 0 ? void 0 : opts.baseUrl);\n return this.requestOtherUrl(method, fullUri, body, opts);\n }\n\n /**\n * Perform a request to an arbitrary URL.\n * @param method - The HTTP method e.g. \"GET\".\n * @param url - The HTTP URL object.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns The parsed response.\n * @throws Error if a problem occurred. This includes network problems and Matrix-specific error JSON.\n */\n requestOtherUrl(method, url, body) {\n var _arguments2 = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var _this2$opts$logger, _opts$localTimeoutMs, _opts$keepAlive, _body$constructor;\n var opts = _arguments2.length > 3 && _arguments2[3] !== undefined ? _arguments2[3] : {};\n if (opts.json !== undefined && opts.rawResponseBody !== undefined) {\n throw new Error(\"Invalid call to `FetchHttpApi` sets both `opts.json` and `opts.rawResponseBody`\");\n }\n var urlForLogs = _this2.sanitizeUrlForLogs(url);\n (_this2$opts$logger = _this2.opts.logger) === null || _this2$opts$logger === void 0 || _this2$opts$logger.debug(\"FetchHttpApi: --> \".concat(method, \" \").concat(urlForLogs));\n var headers = Object.assign({}, opts.headers || {});\n var jsonResponse = !opts.rawResponseBody && opts.json !== false;\n if (jsonResponse) {\n if (!headers[\"Accept\"]) {\n headers[\"Accept\"] = \"application/json\";\n }\n }\n var timeout = (_opts$localTimeoutMs = opts.localTimeoutMs) !== null && _opts$localTimeoutMs !== void 0 ? _opts$localTimeoutMs : _this2.opts.localTimeoutMs;\n var keepAlive = (_opts$keepAlive = opts.keepAlive) !== null && _opts$keepAlive !== void 0 ? _opts$keepAlive : false;\n var signals = [_this2.abortController.signal];\n if (timeout !== undefined) {\n signals.push(timeoutSignal(timeout));\n }\n if (opts.abortSignal) {\n signals.push(opts.abortSignal);\n }\n\n // If the body is an object, encode it as JSON and set the `Content-Type` header,\n // unless that has been explicitly inhibited by setting `opts.json: false`.\n // We can't use getPrototypeOf here as objects made in other contexts e.g. over postMessage won't have same ref\n var data;\n if (opts.json !== false && (body === null || body === void 0 || (_body$constructor = body.constructor) === null || _body$constructor === void 0 ? void 0 : _body$constructor.name) === Object.name) {\n data = JSON.stringify(body);\n if (!headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n } else {\n data = body;\n }\n var _anySignal = anySignal(signals),\n signal = _anySignal.signal,\n cleanup = _anySignal.cleanup;\n\n // Set cache mode based on presence of Authorization header.\n // Browsers/proxies do not cache responses to requests with Authorization headers.\n // So specifying \"no-cache\" is redundant, and actually prevents caching\n // of preflight requests in CORS scenarios. As such, we only set \"no-cache\"\n // when there is no Authorization header.\n var cacheMode = \"Authorization\" in headers ? undefined : \"no-cache\";\n var res;\n var start = Date.now();\n try {\n var _this2$opts$logger2;\n res = yield _this2.fetch(url, {\n signal,\n method,\n body: data,\n headers,\n mode: \"cors\",\n redirect: \"follow\",\n referrer: \"\",\n referrerPolicy: \"no-referrer\",\n cache: cacheMode,\n credentials: \"omit\",\n // we send credentials via headers\n keepalive: keepAlive,\n priority: opts.priority\n });\n (_this2$opts$logger2 = _this2.opts.logger) === null || _this2$opts$logger2 === void 0 || _this2$opts$logger2.debug(\"FetchHttpApi: <-- \".concat(method, \" \").concat(urlForLogs, \" [\").concat(Date.now() - start, \"ms \").concat(res.status, \"]\"));\n } catch (e) {\n var _this2$opts$logger3;\n (_this2$opts$logger3 = _this2.opts.logger) === null || _this2$opts$logger3 === void 0 || _this2$opts$logger3.debug(\"FetchHttpApi: <-- \".concat(method, \" \").concat(urlForLogs, \" [\").concat(Date.now() - start, \"ms \").concat(e, \"]\"));\n if (e.name === \"AbortError\") {\n throw e;\n }\n throw new ConnectionError(\"fetch failed\", e);\n } finally {\n cleanup();\n }\n if (!res.ok) {\n throw parseErrorResponse(res, yield res.text());\n }\n if (opts.rawResponseBody) {\n return yield res.blob();\n } else if (jsonResponse) {\n return yield res.json();\n } else {\n return yield res.text();\n }\n })();\n }\n sanitizeUrlForLogs(url) {\n try {\n var asUrl;\n if (typeof url === \"string\") {\n asUrl = new URL(url);\n } else {\n asUrl = url;\n }\n // Remove the values of any URL params that could contain potential secrets\n var sanitizedQs = new URLSearchParams();\n for (var key of asUrl.searchParams.keys()) {\n sanitizedQs.append(key, \"xxx\");\n }\n var sanitizedQsString = sanitizedQs.toString();\n var sanitizedQsUrlPiece = sanitizedQsString ? \"?\".concat(sanitizedQsString) : \"\";\n return asUrl.origin + asUrl.pathname + sanitizedQsUrlPiece;\n } catch (_unused) {\n // defensive coding for malformed url\n return \"??\";\n }\n }\n /**\n * Form and return a homeserver request URL based on the given path params and prefix.\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g. \"/createRoom\".\n * @param queryParams - A dict of query params (these will NOT be urlencoded).\n * @param prefix - The full prefix to use e.g. \"/_matrix/client/v2_alpha\", defaulting to this.opts.prefix.\n * @param baseUrl - The baseUrl to use e.g. \"https://matrix.org\", defaulting to this.opts.baseUrl.\n * @returns URL\n */\n getUrl(path, queryParams, prefix, baseUrl) {\n var baseUrlWithFallback = baseUrl !== null && baseUrl !== void 0 ? baseUrl : this.opts.baseUrl;\n var baseUrlWithoutTrailingSlash = baseUrlWithFallback.endsWith(\"/\") ? baseUrlWithFallback.slice(0, -1) : baseUrlWithFallback;\n var url = new URL(baseUrlWithoutTrailingSlash + (prefix !== null && prefix !== void 0 ? prefix : this.opts.prefix) + path);\n // If there are any params, encode and append them to the URL.\n if (this.opts.extraParams || queryParams) {\n var mergedParams = _objectSpread(_objectSpread({}, this.opts.extraParams), queryParams);\n encodeParams(mergedParams, url.searchParams);\n }\n return url;\n }\n}\n//# sourceMappingURL=fetch.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var ClientPrefix = /*#__PURE__*/function (ClientPrefix) {\n /**\n * A constant representing the URI path for Client-Server API endpoints versioned at v1.\n */\n ClientPrefix[\"V1\"] = \"/_matrix/client/v1\";\n /**\n * A constant representing the URI path for Client-Server API endpoints versioned at v3.\n */\n ClientPrefix[\"V3\"] = \"/_matrix/client/v3\";\n /**\n * A constant representing the URI path for as-yet unspecified Client-Server HTTP APIs.\n */\n ClientPrefix[\"Unstable\"] = \"/_matrix/client/unstable\";\n return ClientPrefix;\n}({});\nexport var IdentityPrefix = /*#__PURE__*/function (IdentityPrefix) {\n /**\n * URI path for the v2 identity API\n */\n IdentityPrefix[\"V2\"] = \"/_matrix/identity/v2\";\n return IdentityPrefix;\n}({});\nexport var MediaPrefix = /*#__PURE__*/function (MediaPrefix) {\n /**\n * A constant representing the URI path for Client-Server API Media endpoints versioned at v1.\n */\n MediaPrefix[\"V1\"] = \"/_matrix/media/v1\";\n /**\n * A constant representing the URI path for Client-Server API Media endpoints versioned at v3.\n */\n MediaPrefix[\"V3\"] = \"/_matrix/media/v3\";\n return MediaPrefix;\n}({});\n//# sourceMappingURL=prefix.js.map","/*\nCopyright 2016 OpenMarket Ltd\nCopyright 2019 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/* A re-implementation of the javascript callback functions (setTimeout,\n * clearTimeout; setInterval and clearInterval are not yet implemented) which\n * try to improve handling of large clock jumps (as seen when\n * suspending/resuming the system).\n *\n * In particular, if a timeout would have fired while the system was suspended,\n * it will instead fire as soon as possible after resume.\n */\n\nimport { logger } from \"./logger.js\";\n\n// we schedule a callback at least this often, to check if we've missed out on\n// some wall-clock time due to being suspended.\nvar TIMER_CHECK_PERIOD_MS = 1000;\n\n// counter, for making up ids to return from setTimeout\nvar count = 0;\n\n// the key for our callback with the real globalThis.setTimeout\nvar realCallbackKey;\n// a sorted list of the callbacks to be run.\n// each is an object with keys [runAt, func, params, key].\nvar callbackList = [];\n\n// var debuglog = logger.log.bind(logger);\n/* istanbul ignore next */\nvar debuglog = function debuglog() {};\n\n/**\n * reimplementation of window.setTimeout, which will call the callback if\n * the wallclock time goes past the deadline.\n *\n * @param func - callback to be called after a delay\n * @param delayMs - number of milliseconds to delay by\n *\n * @returns an identifier for this callback, which may be passed into\n * clearTimeout later.\n */\nexport function setTimeout(func, delayMs) {\n for (var _len = arguments.length, params = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n params[_key - 2] = arguments[_key];\n }\n delayMs = delayMs || 0;\n if (delayMs < 0) {\n delayMs = 0;\n }\n var runAt = Date.now() + delayMs;\n var key = count++;\n debuglog(\"setTimeout: scheduling cb\", key, \"at\", runAt, \"(delay\", delayMs, \")\");\n var data = {\n runAt: runAt,\n func: func,\n params: params,\n key: key\n };\n\n // figure out where it goes in the list\n var idx = binarySearch(callbackList, function (el) {\n return el.runAt - runAt;\n });\n callbackList.splice(idx, 0, data);\n scheduleRealCallback();\n return key;\n}\n\n/**\n * reimplementation of window.clearTimeout, which mirrors setTimeout\n *\n * @param key - result from an earlier setTimeout call\n */\nexport function clearTimeout(key) {\n if (callbackList.length === 0) {\n return;\n }\n\n // remove the element from the list\n var i;\n for (i = 0; i < callbackList.length; i++) {\n var cb = callbackList[i];\n if (cb.key == key) {\n callbackList.splice(i, 1);\n break;\n }\n }\n\n // iff it was the first one in the list, reschedule our callback.\n if (i === 0) {\n scheduleRealCallback();\n }\n}\n\n// use the real globalThis.setTimeout to schedule a callback to runCallbacks.\nfunction scheduleRealCallback() {\n if (realCallbackKey) {\n globalThis.clearTimeout(realCallbackKey);\n }\n var first = callbackList[0];\n if (!first) {\n debuglog(\"scheduleRealCallback: no more callbacks, not rescheduling\");\n return;\n }\n var timestamp = Date.now();\n var delayMs = Math.min(first.runAt - timestamp, TIMER_CHECK_PERIOD_MS);\n debuglog(\"scheduleRealCallback: now:\", timestamp, \"delay:\", delayMs);\n realCallbackKey = globalThis.setTimeout(runCallbacks, delayMs);\n}\nfunction runCallbacks() {\n var timestamp = Date.now();\n debuglog(\"runCallbacks: now:\", timestamp);\n\n // get the list of things to call\n var callbacksToRun = [];\n // eslint-disable-next-line\n while (true) {\n var first = callbackList[0];\n if (!first || first.runAt > timestamp) {\n break;\n }\n var cb = callbackList.shift();\n debuglog(\"runCallbacks: popping\", cb.key);\n callbacksToRun.push(cb);\n }\n\n // reschedule the real callback before running our functions, to\n // keep the codepaths the same whether or not our functions\n // register their own setTimeouts.\n scheduleRealCallback();\n for (var _cb of callbacksToRun) {\n try {\n _cb.func.apply(globalThis, _cb.params);\n } catch (e) {\n logger.error(\"Uncaught exception in callback function\", e);\n }\n }\n}\n\n/* search in a sorted array.\n *\n * returns the index of the last element for which func returns\n * greater than zero, or array.length if no such element exists.\n */\nfunction binarySearch(array, func) {\n // min is inclusive, max exclusive.\n var min = 0;\n var max = array.length;\n while (min < max) {\n var mid = min + max >> 1;\n var res = func(array[mid]);\n if (res > 0) {\n // the element at 'mid' is too big; set it as the new max.\n max = mid;\n } else {\n // the element at 'mid' is too small. 'min' is inclusive, so +1.\n min = mid + 1;\n }\n }\n // presumably, min==max now.\n return min;\n}\n//# sourceMappingURL=realtime-callbacks.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { FetchHttpApi } from \"./fetch.js\";\nimport { MediaPrefix } from \"./prefix.js\";\nimport { removeElement } from \"../utils.js\";\nimport * as callbacks from \"../realtime-callbacks.js\";\nimport { Method } from \"./method.js\";\nimport { ConnectionError } from \"./errors.js\";\nimport { parseErrorResponse } from \"./utils.js\";\nexport * from \"./interface.js\";\nexport * from \"./prefix.js\";\nexport * from \"./errors.js\";\nexport * from \"./method.js\";\nexport * from \"./utils.js\";\nexport class MatrixHttpApi extends FetchHttpApi {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"uploads\", []);\n }\n /**\n * Upload content to the homeserver\n *\n * @param file - The object to upload. On a browser, something that\n * can be sent to XMLHttpRequest.send (typically a File). Under node.js,\n * a Buffer, String or ReadStream.\n *\n * @param opts - options object\n *\n * @returns Promise which resolves to response object, or rejects with an error (usually a MatrixError).\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n uploadContent(file) {\n var _opts$includeFilename, _opts$abortController, _opts$type, _opts$name;\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var includeFilename = (_opts$includeFilename = opts.includeFilename) !== null && _opts$includeFilename !== void 0 ? _opts$includeFilename : true;\n var abortController = (_opts$abortController = opts.abortController) !== null && _opts$abortController !== void 0 ? _opts$abortController : new AbortController();\n\n // If the file doesn't have a mime type, use a default since the HS errors if we don't supply one.\n var contentType = ((_opts$type = opts.type) !== null && _opts$type !== void 0 ? _opts$type : file.type) || \"application/octet-stream\";\n var fileName = (_opts$name = opts.name) !== null && _opts$name !== void 0 ? _opts$name : file.name;\n var upload = {\n loaded: 0,\n total: 0,\n abortController\n };\n var uploadResolvers = Promise.withResolvers();\n if (globalThis.XMLHttpRequest) {\n var xhr = new globalThis.XMLHttpRequest();\n var timeoutFn = function timeoutFn() {\n xhr.abort();\n uploadResolvers.reject(new Error(\"Timeout\"));\n };\n\n // set an initial timeout of 30s; we'll advance it each time we get a progress notification\n var timeoutTimer = callbacks.setTimeout(timeoutFn, 30000);\n xhr.onreadystatechange = function () {\n switch (xhr.readyState) {\n case globalThis.XMLHttpRequest.DONE:\n callbacks.clearTimeout(timeoutTimer);\n try {\n if (xhr.status === 0) {\n throw new DOMException(xhr.statusText, \"AbortError\"); // mimic fetch API\n }\n if (!xhr.responseText) {\n throw new Error(\"No response body.\");\n }\n if (xhr.status >= 400) {\n uploadResolvers.reject(parseErrorResponse(xhr, xhr.responseText));\n } else {\n uploadResolvers.resolve(JSON.parse(xhr.responseText));\n }\n } catch (err) {\n if (err.name === \"AbortError\") {\n uploadResolvers.reject(err);\n return;\n }\n uploadResolvers.reject(new ConnectionError(\"request failed\", err));\n }\n break;\n }\n };\n xhr.upload.onprogress = ev => {\n var _opts$progressHandler;\n callbacks.clearTimeout(timeoutTimer);\n upload.loaded = ev.loaded;\n upload.total = ev.total;\n timeoutTimer = callbacks.setTimeout(timeoutFn, 30000);\n (_opts$progressHandler = opts.progressHandler) === null || _opts$progressHandler === void 0 || _opts$progressHandler.call(opts, {\n loaded: ev.loaded,\n total: ev.total\n });\n };\n var url = this.getUrl(\"/upload\", undefined, MediaPrefix.V3);\n if (includeFilename && fileName) {\n url.searchParams.set(\"filename\", encodeURIComponent(fileName));\n }\n if (!this.opts.useAuthorizationHeader && this.opts.accessToken) {\n url.searchParams.set(\"access_token\", encodeURIComponent(this.opts.accessToken));\n }\n xhr.open(Method.Post, url.href);\n if (this.opts.useAuthorizationHeader && this.opts.accessToken) {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \" + this.opts.accessToken);\n }\n xhr.setRequestHeader(\"Content-Type\", contentType);\n xhr.send(file);\n abortController.signal.addEventListener(\"abort\", () => {\n xhr.abort();\n });\n } else {\n var queryParams = {};\n if (includeFilename && fileName) {\n queryParams.filename = fileName;\n }\n var headers = {\n \"Content-Type\": contentType\n };\n this.authedRequest(Method.Post, \"/upload\", queryParams, file, {\n prefix: MediaPrefix.V3,\n headers,\n abortSignal: abortController.signal\n }).then(uploadResolvers.resolve, uploadResolvers.reject);\n }\n\n // remove the upload from the list on completion\n upload.promise = uploadResolvers.promise.finally(() => {\n removeElement(this.uploads, elem => elem === upload);\n });\n abortController.signal.addEventListener(\"abort\", () => {\n removeElement(this.uploads, elem => elem === upload);\n uploadResolvers.reject(new DOMException(\"Aborted\", \"AbortError\"));\n });\n this.uploads.push(upload);\n return upload.promise;\n }\n cancelUpload(promise) {\n var upload = this.uploads.find(u => u.promise === promise);\n if (upload) {\n upload.abortController.abort();\n return true;\n }\n return false;\n }\n getCurrentUploads() {\n return this.uploads;\n }\n\n /**\n * Get the content repository url with query parameters.\n * @returns An object with a 'base', 'path' and 'params' for base URL,\n * path and query parameters respectively.\n */\n getContentUri() {\n return {\n base: this.opts.baseUrl,\n path: MediaPrefix.V3 + \"/upload\",\n params: {\n access_token: this.opts.accessToken\n }\n };\n }\n}\n//# sourceMappingURL=index.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { CapabilityPoller } from \"./capabilityPoller.js\";\nimport { Method } from \"./http-api/index.js\";\nexport var RoomVersionStability = /*#__PURE__*/function (RoomVersionStability) {\n RoomVersionStability[\"Stable\"] = \"stable\";\n RoomVersionStability[\"Unstable\"] = \"unstable\";\n return RoomVersionStability;\n}({});\n\n/**\n * A representation of the capabilities advertised by a homeserver as defined by\n * [Capabilities negotiation](https://spec.matrix.org/v1.6/client-server-api/#get_matrixclientv3capabilities).\n */\n\n/**\n * Manages storing and periodically refreshing the server capabilities.\n */\nexport class ServerCapabilities extends CapabilityPoller {\n constructor(logger, http) {\n var _this;\n super(logger, http, \"server capabilities\");\n _this = this;\n /**\n * Fetches the latest server capabilities from the homeserver and returns them, or rejects\n * on failure.\n */\n _defineProperty(this, \"fetch\", /*#__PURE__*/_asyncToGenerator(function* () {\n var resp = yield _this.http.authedRequest(Method.Get, \"/capabilities\");\n _this.cached = resp[\"capabilities\"];\n return _this.cached;\n }));\n }\n}\n//# sourceMappingURL=serverCapabilities.js.map","import _toArray from \"@babel/runtime/helpers/toArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { logger as loggerInstance } from \"../logger.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nvar logger = loggerInstance.getChild(\"RoomStickyEvents\");\nexport var RoomStickyEventsEvent = /*#__PURE__*/function (RoomStickyEventsEvent) {\n RoomStickyEventsEvent[\"Update\"] = \"RoomStickyEvents.Update\";\n return RoomStickyEventsEvent;\n}({});\nfunction assertIsUserId(value) {\n if (typeof value !== \"string\") throw new Error(\"Not a string\");\n if (!value.startsWith(\"@\")) throw new Error(\"Not a userId\");\n}\n\n/**\n * Tracks sticky events on behalf of one room, and fires an event\n * whenever a sticky event is updated or replaced.\n */\nexport class RoomStickyEventsStore extends TypedEventEmitter {\n constructor() {\n super(...arguments);\n /**\n * Sticky event map is a nested map of:\n * eventType -> `content.sticky_key sender` -> StickyMatrixEvent[]\n *\n * The events are ordered in latest to earliest expiry, so that the first event\n * in the array will always be the \"current\" one.\n */\n _defineProperty(this, \"stickyEventsMap\", new Map());\n /**\n * These are sticky events that have no sticky key and therefore exist outside the tuple\n * system above. They are just held in this Set until they expire.\n */\n _defineProperty(this, \"unkeyedStickyEvents\", new Set());\n _defineProperty(this, \"stickyEventTimer\", void 0);\n _defineProperty(this, \"nextStickyEventExpiryTs\", Number.MAX_SAFE_INTEGER);\n /**\n * Clean out any expired sticky events.\n */\n _defineProperty(this, \"cleanExpiredStickyEvents\", () => {\n var now = Date.now();\n var removedEvents = [];\n\n // We will recalculate this as we check all events.\n this.nextStickyEventExpiryTs = Number.MAX_SAFE_INTEGER;\n for (var _ref3 of this.stickyEventsMap.entries()) {\n var _this$stickyEventsMap;\n var _ref2 = _slicedToArray(_ref3, 2);\n var eventType = _ref2[0];\n var innerEvents = _ref2[1];\n for (var _ref6 of innerEvents) {\n var _ref5 = _slicedToArray(_ref6, 2);\n var innerMapKey = _ref5[0];\n var _ref5$ = _toArray(_ref5[1]);\n var currentEvent = _ref5$[0];\n var previousEvents = _arrayLikeToArray(_ref5$).slice(1);\n // we only added items with `sticky` into this map so we can assert non-null here\n if (now >= currentEvent.unstableStickyExpiresAt) {\n logger.debug(\"Expiring sticky event\", currentEvent.getId());\n removedEvents.push(currentEvent);\n this.stickyEventsMap.get(eventType).delete(innerMapKey);\n } else {\n // Ensure we remove any previous events which have now expired, to avoid unbounded memory consumption.\n this.stickyEventsMap.get(eventType).set(innerMapKey, [currentEvent, ...previousEvents.filter(e => e.unstableStickyExpiresAt <= now)]);\n // If not removing the event, check to see if it's the next lowest expiry.\n this.nextStickyEventExpiryTs = Math.min(this.nextStickyEventExpiryTs, currentEvent.unstableStickyExpiresAt);\n }\n }\n // Clean up map after use.\n if (((_this$stickyEventsMap = this.stickyEventsMap.get(eventType)) === null || _this$stickyEventsMap === void 0 ? void 0 : _this$stickyEventsMap.size) === 0) {\n this.stickyEventsMap.delete(eventType);\n }\n }\n for (var event of this.unkeyedStickyEvents) {\n if (now >= event.unstableStickyExpiresAt) {\n logger.debug(\"Expiring sticky event\", event.getId());\n this.unkeyedStickyEvents.delete(event);\n removedEvents.push(event);\n } else {\n // If not removing the event, check to see if it's the next lowest expiry.\n this.nextStickyEventExpiryTs = Math.min(this.nextStickyEventExpiryTs, event.unstableStickyExpiresAt);\n }\n }\n if (removedEvents.length) {\n this.emit(RoomStickyEventsEvent.Update, [], [], removedEvents);\n }\n // Finally, schedule the next run.\n this.scheduleStickyTimer();\n });\n }\n /**\n * Sort two sticky events by order of expiry. This assumes the sticky events have the same\n * `type`, `sticky_key` and `sender`.\n * @returns A positive value if event A will expire sooner, or a negative value if event B will expire sooner.\n */\n static sortStickyEvent(eventA, eventB) {\n var _eventB$getId, _eventA$getId;\n // Sticky events with the same key have to use the same expiration duration.\n // Hence, comparing via `origin_server_ts` yields the exact same result as comparing their expiration time.\n if (eventB.getTs() !== eventA.getTs()) {\n return eventB.getTs() - eventA.getTs();\n }\n if (((_eventB$getId = eventB.getId()) !== null && _eventB$getId !== void 0 ? _eventB$getId : \"\") > ((_eventA$getId = eventA.getId()) !== null && _eventA$getId !== void 0 ? _eventA$getId : \"\")) {\n return 1;\n }\n\n // This should fail as we've got corruption in our sticky array.\n throw Error(\"Comparing two sticky events with the same event ID is not allowed.\");\n }\n\n /**\n * Generate the correct key for an event to be found in the inner maps of `stickyEventsMap`.\n * @param stickyKey The sticky key of an event.\n * @param sender The sender of the event.\n */\n static stickyMapKey(stickyKey, sender) {\n return \"\".concat(stickyKey).concat(sender);\n }\n\n /**\n * Get all sticky events that are currently active.\n * @returns An iterable set of events.\n */\n *getStickyEvents() {\n yield* this.unkeyedStickyEvents;\n for (var innerMap of this.stickyEventsMap.values()) {\n // Inner map contains a map of sender+stickykeys => all sticky events\n for (var events of innerMap.values()) {\n // The first sticky event is the \"current\" one in the sticky map.\n yield events[0];\n }\n }\n }\n\n /**\n * Get an active sticky event that match the given `type`, `sender`, and `stickyKey`\n * @param type The event `type`.\n * @param sender The sender of the sticky event.\n * @param stickyKey The sticky key used by the event.\n * @returns A matching active sticky event, or undefined.\n */\n getKeyedStickyEvent(sender, type, stickyKey) {\n var _this$stickyEventsMap2;\n assertIsUserId(sender);\n return (_this$stickyEventsMap2 = this.stickyEventsMap.get(type)) === null || _this$stickyEventsMap2 === void 0 || (_this$stickyEventsMap2 = _this$stickyEventsMap2.get(RoomStickyEventsStore.stickyMapKey(stickyKey, sender))) === null || _this$stickyEventsMap2 === void 0 ? void 0 : _this$stickyEventsMap2[0];\n }\n\n /**\n * Get active sticky events without a sticky key that match the given `type` and `sender`.\n * @param type The event `type`.\n * @param sender The sender of the sticky event.\n * @returns An array of matching sticky events.\n */\n getUnkeyedStickyEvent(sender, type) {\n return [...this.unkeyedStickyEvents].filter(ev => ev.getType() === type && ev.getSender() === sender);\n }\n\n /**\n * Adds a sticky event into the local sticky event map.\n *\n * NOTE: This will not cause `RoomEvent.StickyEvents` to be emitted.\n *\n * @throws If the `event` does not contain valid sticky data.\n * @param event The MatrixEvent that contains sticky data.\n * @returns An object describing whether the event was added to the map,\n * and the previous event it may have replaced.\n */\n addStickyEvent(event) {\n var _this$stickyEventsMap3, _this$stickyEventsMap4, _this$stickyEventsMap5;\n var stickyKey = event.getContent().msc4354_sticky_key;\n if (typeof stickyKey !== \"string\" && stickyKey !== undefined) {\n throw new Error(\"\".concat(event.getId(), \" is missing msc4354_sticky_key\"));\n }\n\n // With this we have the guarantee, that all events in stickyEventsMap are correctly formatted\n if (event.unstableStickyExpiresAt === undefined) {\n throw new Error(\"\".concat(event.getId(), \" is missing msc4354_sticky.duration_ms\"));\n }\n var sender = event.getSender();\n var type = event.getType();\n assertIsUserId(sender);\n if (event.unstableStickyExpiresAt <= Date.now()) {\n logger.info(\"ignored sticky event with older expiration time than current time\", stickyKey);\n return {\n added: false\n };\n }\n\n // While we fully expect the server to always provide the correct value,\n // this is just insurance to protect against attacks on our Map.\n if (!sender.startsWith(\"@\")) {\n throw new Error(\"Expected sender to start with @\");\n }\n var stickyEvent = event;\n if (stickyKey === undefined) {\n this.unkeyedStickyEvents.add(stickyEvent);\n // Recalculate the next expiry time.\n this.nextStickyEventExpiryTs = Math.min(event.unstableStickyExpiresAt, this.nextStickyEventExpiryTs);\n this.scheduleStickyTimer();\n return {\n added: true\n };\n }\n\n // Why this is safe:\n // A type may contain anything but the *sender* is tightly\n // constrained so that a key will always end with a @<user_id>\n // E.g. Where a malicious event type might be \"rtc.member.event@foo:bar\" the key becomes:\n // \"rtc.member.event.@foo:bar@bar:baz\"\n var innerMapKey = RoomStickyEventsStore.stickyMapKey(stickyKey, sender);\n var currentEventSet = [stickyEvent, ...((_this$stickyEventsMap3 = (_this$stickyEventsMap4 = this.stickyEventsMap.get(type)) === null || _this$stickyEventsMap4 === void 0 ? void 0 : _this$stickyEventsMap4.get(innerMapKey)) !== null && _this$stickyEventsMap3 !== void 0 ? _this$stickyEventsMap3 : [])].sort(RoomStickyEventsStore.sortStickyEvent);\n if (!this.stickyEventsMap.has(type)) {\n this.stickyEventsMap.set(type, new Map());\n }\n (_this$stickyEventsMap5 = this.stickyEventsMap.get(type)) === null || _this$stickyEventsMap5 === void 0 || _this$stickyEventsMap5.set(innerMapKey, currentEventSet);\n\n // Recalculate the next expiry time.\n this.nextStickyEventExpiryTs = Math.min(stickyEvent.unstableStickyExpiresAt, this.nextStickyEventExpiryTs);\n this.scheduleStickyTimer();\n return {\n added: currentEventSet[0] === stickyEvent,\n prevEvent: currentEventSet === null || currentEventSet === void 0 ? void 0 : currentEventSet[1]\n };\n }\n\n /**\n * Add a series of sticky events, emitting `RoomEvent.StickyEvents` if any\n * changes were made.\n * @param events A set of new sticky events.\n */\n addStickyEvents(events) {\n var added = [];\n var updated = [];\n for (var event of events) {\n try {\n var result = this.addStickyEvent(event);\n if (result.added) {\n if (result.prevEvent) {\n // e is validated as a StickyMatrixEvent by virtue of `addStickyEvent` returning added: true.\n updated.push({\n current: event,\n previous: result.prevEvent\n });\n } else {\n added.push(event);\n }\n }\n } catch (ex) {\n logger.warn(\"ignored invalid sticky event\", ex);\n }\n }\n if (added.length || updated.length) this.emit(RoomStickyEventsEvent.Update, added, updated, []);\n this.scheduleStickyTimer();\n }\n\n /**\n * Schedule the sticky event expiry timer. The timer will\n * run immediately if an event has already expired.\n */\n scheduleStickyTimer() {\n if (this.stickyEventTimer) {\n clearTimeout(this.stickyEventTimer);\n this.stickyEventTimer = undefined;\n }\n if (this.nextStickyEventExpiryTs === Number.MAX_SAFE_INTEGER) {\n // We have no events due to expire.\n return;\n } // otherwise, schedule in the future\n this.stickyEventTimer = setTimeout(this.cleanExpiredStickyEvents, this.nextStickyEventExpiryTs - Date.now());\n }\n /**\n * Handles incoming event redactions. Checks the sticky map\n * for any active sticky events being redacted.\n * @param redactedEvent The MatrixEvent OR event ID of the event being redacted. MAY not be a sticky event.\n */\n handleRedaction(redactedEvent) {\n // Note, we do not adjust`nextStickyEventExpiryTs` here.\n // If this event happens to be the most recent expiring event\n // then we may do one extra iteration of cleanExpiredStickyEvents\n // but this saves us having to iterate over all events here to calculate\n // the next expiry time.\n\n // Note, as soon as we find a positive match on an event in this function\n // we can return. There is no need to continue iterating on a positive match\n // as an event can only appear in one map.\n\n // Handle unkeyedStickyEvents first since it's *quick*.\n var redactEventId = typeof redactedEvent === \"string\" ? redactedEvent : redactedEvent.getId();\n for (var event of this.unkeyedStickyEvents) {\n if (event.getId() === redactEventId) {\n this.unkeyedStickyEvents.delete(event);\n this.emit(RoomStickyEventsEvent.Update, [], [], [event]);\n return;\n }\n }\n\n // Faster method of finding the event since we have the event cached.\n if (typeof redactedEvent !== \"string\" && !redactedEvent.isRedacted()) {\n var _innerMap$get, _this$stickyEventsMap6;\n var stickyKey = redactedEvent.getContent().msc4354_sticky_key;\n if (typeof stickyKey !== \"string\" && stickyKey !== undefined) {\n return; // Not a sticky event.\n }\n var eventType = redactedEvent.getType();\n var sender = redactedEvent.getSender();\n assertIsUserId(sender);\n var innerMap = this.stickyEventsMap.get(eventType);\n if (!innerMap) {\n return;\n }\n var mapKey = RoomStickyEventsStore.stickyMapKey(stickyKey, sender);\n var _ref7 = (_innerMap$get = innerMap.get(mapKey)) !== null && _innerMap$get !== void 0 ? _innerMap$get : [],\n _ref8 = _toArray(_ref7),\n currentEvent = _ref8[0],\n previousEvents = _arrayLikeToArray(_ref8).slice(1);\n if (!currentEvent) {\n // No event current in the map so ignore.\n return;\n }\n logger.debug(\"Redaction for \".concat(redactEventId, \" under sticky key \").concat(stickyKey));\n // Revert to previous state, taking care to skip any other redacted events.\n var newEvents = previousEvents.filter(e => !e.isRedacted()).sort(RoomStickyEventsStore.sortStickyEvent);\n (_this$stickyEventsMap6 = this.stickyEventsMap.get(eventType)) === null || _this$stickyEventsMap6 === void 0 || _this$stickyEventsMap6.set(mapKey, newEvents);\n if (newEvents.length) {\n this.emit(RoomStickyEventsEvent.Update, [], [{\n // This looks confusing. This emits that the newer event\n // has been redacted and the previous event has taken it's place.\n previous: currentEvent,\n current: newEvents[0]\n }], []);\n } else {\n // We did not find a previous event, so just expire.\n innerMap.delete(mapKey);\n if (innerMap.size === 0) {\n this.stickyEventsMap.delete(eventType);\n }\n this.emit(RoomStickyEventsEvent.Update, [], [], [currentEvent]);\n }\n return;\n }\n\n // We only know the event ID of the redacted event, so we need to\n // traverse the map to find our event.\n for (var _innerMap of this.stickyEventsMap.values()) {\n for (var _ref1 of _innerMap.values()) {\n var _ref0 = _slicedToArray(_ref1, 1);\n var _currentEvent = _ref0[0];\n if (_currentEvent.getId() !== redactEventId) {\n continue;\n }\n // Found the event.\n return this.handleRedaction(_currentEvent);\n }\n }\n }\n\n /**\n * Clear all events and stop the timer from firing.\n */\n clear() {\n this.stickyEventsMap.clear();\n // Unschedule timer.\n this.nextStickyEventExpiryTs = Number.MAX_SAFE_INTEGER;\n this.scheduleStickyTimer();\n }\n}\n//# sourceMappingURL=room-sticky-events.js.map","import { UnstableValue } from \"../NamespacedValue.js\";\n\n/**\n * Event type for a room policy event.\n * NOTE: While MSC1763 has not been merged, `m.room.retention` is unfortunately\n * already in use in production.\n */\nexport var ROOM_RETENTION_TYPE = new UnstableValue(\"m.room.retention\", \"org.matrix.msc1763.retention\");\n\n/**\n * The content of a `m.room.retention` state event.\n */\n//# sourceMappingURL=retention.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2026 Element Creations Ltd.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MatrixEvent } from \"../models/event.js\";\nimport { RoomEvent } from \"./room.js\";\nimport { RoomStateEvent } from \"./room-state.js\";\nimport { logger as rootLogger } from \"../logger.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { ROOM_RETENTION_TYPE } from \"../@types/retention.js\";\n\n/**\n * Applies https://github.com/matrix-org/matrix-spec-proposals/pull/1763 by checking the current\n * state of the room and applying the *latest* retention policy to all preceeding events.\n * Currently does not:\n * - Apply global server policies (requires Synapse work)\n * - React at all to `min_retention` configs.\n * - Loop\n */\nexport class RoomRetentionPolicy {\n constructor(room, retentionService, store) {\n var _this = this;\n this.room = room;\n this.retentionService = retentionService;\n this.store = store;\n // minRetention is not implemented.\n _defineProperty(this, \"maxRetention\", null);\n _defineProperty(this, \"retentionTimeout\", void 0);\n _defineProperty(this, \"logger\", void 0);\n _defineProperty(this, \"handleRetentionUpdate\", /*#__PURE__*/_asyncToGenerator(function* () {\n // First store if we currently have a retention period.\n var hadRetentionPeriod = _this.maxRetention !== null;\n try {\n yield _this.recalculateRetention(_this.room.currentState);\n } catch (err) {\n _this.logger.warn(\"Failed to recalculate retention policy\", err);\n return;\n }\n\n // Bind/unbind the Timeline event handler based on whether we should be running retention.\n if (hadRetentionPeriod !== (_this.maxRetention !== null)) {\n _this.logger.info(\"retention recalculated to be\", _this.maxRetention);\n // We've changed\n if (_this.maxRetention) {\n _this.room.on(RoomEvent.Timeline, _this.timelineUpdated);\n } else {\n _this.room.off(RoomEvent.Timeline, _this.timelineUpdated);\n }\n }\n }));\n _defineProperty(this, \"recalculateRetention\", /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (roomState) {\n var _serverPolicy$policie, _unstableEvent$getCon, _ref3, _serverPolicy$policie2, _serverPolicy$limits2;\n var unstableEvent = roomState.getStateEvents(ROOM_RETENTION_TYPE.name).find(e => e.getStateKey() === \"\");\n var stableEvent = roomState.getStateEvents(ROOM_RETENTION_TYPE.altName).find(e => e.getStateKey() === \"\");\n var serverPolicy = _this.retentionService.getCached();\n var serverRoomPolicy = serverPolicy === null || serverPolicy === void 0 || (_serverPolicy$policie = serverPolicy.policies) === null || _serverPolicy$policie === void 0 ? void 0 : _serverPolicy$policie[_this.room.roomId];\n var roomStatePolicy = (_unstableEvent$getCon = unstableEvent === null || unstableEvent === void 0 ? void 0 : unstableEvent.getContent()) !== null && _unstableEvent$getCon !== void 0 ? _unstableEvent$getCon : stableEvent === null || stableEvent === void 0 ? void 0 : stableEvent.getContent();\n var content = // * if the homeserver defines a specific retention policy for this room, then use this policy as the effective retention policy of the room.\n (_ref3 = serverRoomPolicy !== null && serverRoomPolicy !== void 0 ? serverRoomPolicy :\n // * otherwise, if the state of the room includes a `m.room.retention` event with an empty state key:\n roomStatePolicy) !== null && _ref3 !== void 0 ? _ref3 : // * otherwise, if the state of the room does not include a m.room.retention event with an empty state key:\n serverPolicy === null || serverPolicy === void 0 || (_serverPolicy$policie2 = serverPolicy.policies) === null || _serverPolicy$policie2 === void 0 ? void 0 : _serverPolicy$policie2[\"*\"];\n if (!content) {\n // * otherwise, don't apply a retention policy in this room.\n _this.maxRetention = null;\n return;\n }\n var validatePolicy = !serverRoomPolicy && roomStatePolicy;\n\n // Parse it\n var maxLifetime = content.max_lifetime;\n if (!maxLifetime && validatePolicy) {\n var _serverPolicy$limits;\n // if there is no value specified in the room's state, use the limit's min value for the effective retention policy of the room (which can be null or absent).\n maxLifetime = serverPolicy === null || serverPolicy === void 0 || (_serverPolicy$limits = serverPolicy.limits) === null || _serverPolicy$limits === void 0 || (_serverPolicy$limits = _serverPolicy$limits.max_lifetime) === null || _serverPolicy$limits === void 0 ? void 0 : _serverPolicy$limits.min;\n if (!maxLifetime) {\n _this.maxRetention = null;\n return;\n }\n }\n if (typeof maxLifetime !== \"number\") {\n throw Error(\"max_lifetime must be a number, got \\\"\".concat(maxLifetime, \"\\\"\"));\n }\n if (maxLifetime < 0 || !Number.isInteger(maxLifetime)) {\n throw Error(\"max_lifetime must be >= 0, got \".concat(maxLifetime));\n }\n _this.maxRetention = maxLifetime;\n if (validatePolicy && serverPolicy !== null && serverPolicy !== void 0 && (_serverPolicy$limits2 = serverPolicy.limits) !== null && _serverPolicy$limits2 !== void 0 && _serverPolicy$limits2.max_lifetime) {\n var _serverPolicy$limits$, _serverPolicy$limits$2;\n // We're using room state so we need to validate this policy matches the server.\n /**\n if the value specified in the room's state complies with the limit, use this value for the effective retention policy of the room.\n if the value specified in the room's state is lower than the limit's min value, use the min value for the effective retention policy of the room.\n if the value specified in the room's state is greater than the limit's max value, use the max value for the effective retention policy of the room.\n */\n _this.maxRetention = Math.max(_this.maxRetention, (_serverPolicy$limits$ = serverPolicy.limits.max_lifetime.min) !== null && _serverPolicy$limits$ !== void 0 ? _serverPolicy$limits$ : 0);\n _this.maxRetention = Math.min(_this.maxRetention, (_serverPolicy$limits$2 = serverPolicy.limits.max_lifetime.max) !== null && _serverPolicy$limits$2 !== void 0 ? _serverPolicy$limits$2 : Number.MAX_SAFE_INTEGER);\n }\n _this.processTimeline();\n });\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }());\n _defineProperty(this, \"timelineUpdated\", () => {\n this.logger.info(\"timelineUpdated\");\n this.scheduleTimelineCheck(200);\n });\n _defineProperty(this, \"scheduleTimelineCheck\", nextTs => {\n if (this.retentionTimeout) {\n clearTimeout(this.retentionTimeout);\n }\n this.retentionTimeout = setTimeout(() => {\n this.processTimeline();\n this.retentionTimeout = undefined;\n }, nextTs);\n });\n this.logger = rootLogger.getChild(\"RetentionPolicy \".concat(room.roomId));\n\n // Recalculate on room state update.\n room.on(RoomStateEvent.Events, event => {\n if (event.getStateKey() !== \"\" || event.getType() !== \"org.matrix.msc1763.retention\" && event.getType() !== \"m.room.retention\") {\n return;\n }\n void this.handleRetentionUpdate();\n });\n\n // Recalculate our retention whenever the global policy changes.\n this.retentionService.on(\"update\", () => {\n this.logger.info(\"Got global retention policy update!\");\n void this.handleRetentionUpdate();\n });\n // Do an initial check on construction.\n void this.handleRetentionUpdate();\n\n // Only bind RoomEvent.Timeline once we know we have a retention policy.\n }\n shouldEventBeRetained(ev) {\n if (!this.maxRetention) {\n return true;\n }\n var expireBefore = Date.now() - this.maxRetention;\n return ev.getTs() > expireBefore;\n }\n processTimeline() {\n if (!this.maxRetention) {\n return; // No policy, skip.\n }\n this.logger.info(\"Running processTimeline\");\n var expireBefore = Date.now() - this.maxRetention;\n var events = this.room.getLiveTimeline().getEvents().filter(ev => ev.getStateKey() === undefined && !ev.isRedacted() && ev.getType() !== \"m.room.redaction\");\n var expiredEvents = events.filter(ev => ev.getTs() < expireBefore);\n var _events$filter$sort = events.filter(ev => ev.getTs() >= expireBefore).sort((a, b) => a.getTs() - b.getTs()),\n _events$filter$sort2 = _slicedToArray(_events$filter$sort, 1),\n earliestExpiringEvent = _events$filter$sort2[0];\n if (earliestExpiringEvent) {\n var nextTs = earliestExpiringEvent.getTs() + this.maxRetention - Date.now();\n this.logger.info(\"Next expiry scheduled for \".concat(nextTs));\n this.scheduleTimelineCheck(nextTs);\n }\n if (expiredEvents.length === 0) {\n this.logger.info(\"Found no expired events\");\n return;\n }\n this.logger.info(\"Found \".concat(expiredEvents.length, \" expired events\"));\n for (var event of expiredEvents) {\n this.room.tryApplyRedaction(new MatrixEvent({\n type: EventType.RoomRedaction,\n sender: event.getSender(),\n event_id: \"$synthetic_redaction\",\n room_id: this.room.roomId,\n redacts: event.getId(),\n content: {\n reason: \"Retention policy\"\n },\n origin_server_ts: Date.now(),\n unsigned: {}\n }));\n }\n void this.store.removeEventsFromRoom(this.room.roomId, expiredEvents.map(e => e.getId())).catch(ex => {\n this.logger.warn(\"Failed to remove events from store\", ex);\n });\n }\n}\n//# sourceMappingURL=room-retention.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2015 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { M_POLL_START } from \"matrix-events-sdk\";\nimport { DuplicateStrategy, EventTimelineSet } from \"./event-timeline-set.js\";\nimport { Direction, EventTimeline } from \"./event-timeline.js\";\nimport { getHttpUriForMxc } from \"../content-repo.js\";\nimport * as utils from \"../utils.js\";\nimport { normalize, noUnsafeEventProps, removeElement } from \"../utils.js\";\nimport { MatrixEvent, MatrixEventEvent } from \"./event.js\";\nimport { EventStatus } from \"./event-status.js\";\nimport { RoomMember } from \"./room-member.js\";\nimport { RoomSummary } from \"./room-summary.js\";\nimport { logger } from \"../logger.js\";\nimport { TypedReEmitter } from \"../ReEmitter.js\";\nimport { EVENT_VISIBILITY_CHANGE_TYPE, EventType, RelationType, RoomCreateTypeField, RoomType, UNSIGNED_THREAD_ID_FIELD, UNSTABLE_ELEMENT_FUNCTIONAL_USERS } from \"../@types/event.js\";\nimport { PendingEventOrdering } from \"../client.js\";\nimport { Filter } from \"../filter.js\";\nimport { RoomStateEvent } from \"./room-state.js\";\nimport { BeaconEvent } from \"./beacon.js\";\nimport { FILTER_RELATED_BY_REL_TYPES, FILTER_RELATED_BY_SENDERS, Thread, THREAD_RELATION_TYPE, ThreadEvent, ThreadFilterType } from \"./thread.js\";\nimport { MAIN_ROOM_TIMELINE, ReceiptType } from \"../@types/read_receipts.js\";\nimport { RelationsContainer } from \"./relations-container.js\";\nimport { ReadReceipt, synthesizeReceipt } from \"./read-receipt.js\";\nimport { isPollEvent, Poll, PollEvent } from \"./poll.js\";\nimport { RoomReceipts } from \"./room-receipts.js\";\nimport { compareEventOrdering } from \"./compare-event-ordering.js\";\nimport { KnownMembership } from \"../@types/membership.js\";\nimport { RoomVersionStability } from \"../serverCapabilities.js\";\nimport { RoomStickyEventsStore, RoomStickyEventsEvent } from \"./room-sticky-events.js\";\nimport { RoomRetentionPolicy } from \"./room-retention.js\";\n\n// These constants are used as sane defaults when the homeserver doesn't support\n// the m.room_versions capability. In practice, KNOWN_SAFE_ROOM_VERSION should be\n// the same as the common default room version whereas SAFE_ROOM_VERSIONS are the\n// room versions which are considered okay for people to run without being asked\n// to upgrade (ie: \"stable\"). Eventually, we should remove these when all homeservers\n// return an m.room_versions capability.\nexport var KNOWN_SAFE_ROOM_VERSION = \"10\";\nvar SAFE_ROOM_VERSIONS = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\"];\n// When inserting a visibility event affecting event `eventId`, we\n// need to scan through existing visibility events for `eventId`.\n// In theory, this could take an unlimited amount of time if:\n//\n// - the visibility event was sent by a moderator; and\n// - `eventId` already has many visibility changes (usually, it should\n// be 2 or less); and\n// - for some reason, the visibility changes are received out of order\n// (usually, this shouldn't happen at all).\n//\n// For this reason, we limit the number of events to scan through,\n// expecting that a broken visibility change for a single event in\n// an extremely uncommon case (possibly a DoS) is a small\n// price to pay to keep matrix-js-sdk responsive.\nvar MAX_NUMBER_OF_VISIBILITY_EVENTS_TO_SCAN_THROUGH = 30;\nexport var NotificationCountType = /*#__PURE__*/function (NotificationCountType) {\n NotificationCountType[\"Highlight\"] = \"highlight\";\n NotificationCountType[\"Total\"] = \"total\";\n return NotificationCountType;\n}({});\nexport var RoomEvent = /*#__PURE__*/function (RoomEvent) {\n RoomEvent[\"MyMembership\"] = \"Room.myMembership\";\n RoomEvent[\"Tags\"] = \"Room.tags\";\n RoomEvent[\"AccountData\"] = \"Room.accountData\";\n RoomEvent[\"Receipt\"] = \"Room.receipt\";\n RoomEvent[\"Name\"] = \"Room.name\";\n RoomEvent[\"Redaction\"] = \"Room.redaction\";\n RoomEvent[\"RedactionCancelled\"] = \"Room.redactionCancelled\";\n RoomEvent[\"LocalEchoUpdated\"] = \"Room.localEchoUpdated\";\n RoomEvent[\"Timeline\"] = \"Room.timeline\";\n RoomEvent[\"TimelineReset\"] = \"Room.timelineReset\";\n RoomEvent[\"TimelineRefresh\"] = \"Room.TimelineRefresh\";\n RoomEvent[\"OldStateUpdated\"] = \"Room.OldStateUpdated\";\n RoomEvent[\"CurrentStateUpdated\"] = \"Room.CurrentStateUpdated\";\n RoomEvent[\"HistoryImportedWithinTimeline\"] = \"Room.historyImportedWithinTimeline\";\n RoomEvent[\"UnreadNotifications\"] = \"Room.UnreadNotifications\";\n RoomEvent[\"Summary\"] = \"Room.Summary\";\n return RoomEvent;\n}({});\nexport class Room extends ReadReceipt {\n /**\n * Construct a new Room.\n *\n * <p>For a room, we store an ordered sequence of timelines, which may or may not\n * be continuous. Each timeline lists a series of events, as well as tracking\n * the room state at the start and the end of the timeline. It also tracks\n * forward and backward pagination tokens, as well as containing links to the\n * next timeline in the sequence.\n *\n * <p>There is one special timeline - the 'live' timeline, which represents the\n * timeline to which events are being added in real-time as they are received\n * from the /sync API. Note that you should not retain references to this\n * timeline - even if it is the current timeline right now, it may not remain\n * so if the server gives us a timeline gap in /sync.\n *\n * <p>In order that we can find events from their ids later, we also maintain a\n * map from event_id to timeline and index.\n *\n * @param roomId - Required. The ID of this room.\n * @param client - Required. The client, used to lazy load members.\n * @param myUserId - Required. The ID of the syncing user.\n * @param opts - Configuration options\n */\n constructor(roomId, client, myUserId) {\n var _this, _this$client;\n var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n // In some cases, we add listeners for every displayed Matrix event, so it's\n // common to have quite a few more than the default limit.\n super();\n _this = this;\n this.roomId = roomId;\n this.client = client;\n this.myUserId = myUserId;\n this.opts = opts;\n _defineProperty(this, \"reEmitter\", void 0);\n _defineProperty(this, \"txnToEvent\", new Map());\n // Pending in-flight requests { string: MatrixEvent }\n _defineProperty(this, \"notificationCounts\", {});\n _defineProperty(this, \"bumpStamp\", undefined);\n _defineProperty(this, \"threadNotifications\", new Map());\n _defineProperty(this, \"cachedThreadReadReceipts\", new Map());\n // Useful to know at what point the current user has started using threads in this room\n _defineProperty(this, \"oldestThreadedReceiptTs\", Infinity);\n /**\n * A record of the latest unthread receipts per user\n * This is useful in determining whether a user has read a thread or not\n */\n _defineProperty(this, \"unthreadedReceipts\", new Map());\n _defineProperty(this, \"timelineSets\", void 0);\n _defineProperty(this, \"polls\", new Map());\n /**\n * Empty array if the timeline sets have not been initialised. After initialisation:\n * 0: All threads\n * 1: Threads the current user has participated in\n */\n _defineProperty(this, \"threadsTimelineSets\", []);\n // any filtered timeline sets we're maintaining for this room\n _defineProperty(this, \"filteredTimelineSets\", {});\n // filter_id: timelineSet\n _defineProperty(this, \"timelineNeedsRefresh\", false);\n _defineProperty(this, \"pendingEventList\", void 0);\n // read by megolm via getter; boolean value - null indicates \"use global value\"\n _defineProperty(this, \"blacklistUnverifiedDevices\", void 0);\n _defineProperty(this, \"selfMembership\", void 0);\n /**\n * A `Hero` is a stripped `m.room.member` event which contains the important renderable fields from the event.\n *\n * It is used in MSC4186 (Simplified Sliding Sync) as a replacement for the old `summary` field.\n *\n * When we are doing old-style (`/v3/sync`) sync, we simulate the SSS behaviour by constructing\n * a `Hero` object based on the user id we get from the summary. Obviously, in that case,\n * the `Hero` will lack a `displayName` or `avatarUrl`.\n */\n _defineProperty(this, \"heroes\", null);\n // flags to stop logspam about missing m.room.create events\n _defineProperty(this, \"getTypeWarning\", false);\n _defineProperty(this, \"membersPromise\", void 0);\n // XXX: These should be read-only\n /**\n * The human-readable display name for this room.\n */\n _defineProperty(this, \"name\", void 0);\n /**\n * The un-homoglyphed name for this room.\n */\n _defineProperty(this, \"normalizedName\", void 0);\n /**\n * Dict of room tags; the keys are the tag name and the values\n * are any metadata associated with the tag - e.g. `{ \"fav\" : { order: 1 } }`\n */\n _defineProperty(this, \"tags\", {});\n // $tagName: { $metadata: $value }\n /**\n * accountData Dict of per-room account_data events; the keys are the\n * event type and the values are the events.\n */\n _defineProperty(this, \"accountData\", new Map());\n // $eventType: $event\n /**\n * The room summary.\n */\n _defineProperty(this, \"summary\", null);\n /**\n * oldState The state of the room at the time of the oldest event in the live timeline.\n *\n * @deprecated Present for backwards compatibility.\n * Use getLiveTimeline().getState(EventTimeline.BACKWARDS) instead\n */\n _defineProperty(this, \"oldState\", void 0);\n /**\n * currentState The state of the room at the time of the newest event in the timeline.\n *\n * @deprecated Present for backwards compatibility.\n * Use getLiveTimeline().getState(EventTimeline.FORWARDS) instead.\n */\n _defineProperty(this, \"currentState\", void 0);\n _defineProperty(this, \"relations\", void 0);\n /**\n * A collection of events known by the client\n * This is not a comprehensive list of the threads that exist in this room\n */\n _defineProperty(this, \"threads\", new Map());\n /**\n * A mapping of eventId to all visibility changes to apply\n * to the event, by chronological order, as per\n * https://github.com/matrix-org/matrix-doc/pull/3531\n *\n * # Invariants\n *\n * - within each list, all events are classed by\n * chronological order;\n * - all events are events such that\n * `asVisibilityEvent()` returns a non-null `IVisibilityChange`;\n * - within each list with key `eventId`, all events\n * are in relation to `eventId`.\n *\n * @experimental\n */\n _defineProperty(this, \"visibilityEvents\", new Map());\n /**\n * The latest receipts (synthetic and real) for each user in each thread\n * (and unthreaded).\n */\n _defineProperty(this, \"roomReceipts\", new RoomReceipts(this));\n /**\n * Stores and tracks sticky events\n */\n _defineProperty(this, \"stickyEvents\", new RoomStickyEventsStore());\n _defineProperty(this, \"retention\", void 0);\n _defineProperty(this, \"threadTimelineSetsPromise\", null);\n _defineProperty(this, \"threadsReady\", false);\n _defineProperty(this, \"updateThreadRootEvents\", (thread, toStartOfTimeline, recreateEvent) => {\n if (thread.length) {\n var _this$threadsTimeline;\n this.updateThreadRootEvent((_this$threadsTimeline = this.threadsTimelineSets) === null || _this$threadsTimeline === void 0 ? void 0 : _this$threadsTimeline[0], thread, toStartOfTimeline, recreateEvent);\n if (thread.hasCurrentUserParticipated) {\n var _this$threadsTimeline2;\n this.updateThreadRootEvent((_this$threadsTimeline2 = this.threadsTimelineSets) === null || _this$threadsTimeline2 === void 0 ? void 0 : _this$threadsTimeline2[1], thread, toStartOfTimeline, recreateEvent);\n }\n }\n });\n _defineProperty(this, \"updateThreadRootEvent\", (timelineSet, thread, toStartOfTimeline, recreateEvent) => {\n if (timelineSet && thread.rootEvent) {\n if (recreateEvent) {\n timelineSet.removeEvent(thread.id);\n }\n if (Thread.hasServerSideSupport) {\n timelineSet.addLiveEvent(thread.rootEvent, {\n duplicateStrategy: DuplicateStrategy.Replace,\n fromCache: false,\n roomState: this.currentState,\n addToState: false\n });\n } else {\n timelineSet.addEventToTimeline(thread.rootEvent, timelineSet.getLiveTimeline(), {\n toStartOfTimeline,\n addToState: false\n });\n }\n }\n });\n _defineProperty(this, \"tryApplyRedaction\", event => {\n // FIXME: apply redactions to notification list\n\n // NB: We continue to add the redaction event to the timeline at the\n // end of this function so clients can say \"so and so redacted an event\"\n // if they wish to. Also this may be needed to trigger an update.\n\n if (event.isRedaction()) {\n var redactId = event.event.redacts;\n\n // if we know about this event, redact its contents now.\n var redactedEvent = redactId ? this.findEventById(redactId) : undefined;\n if (redactId) {\n try {\n this.stickyEvents.handleRedaction(redactedEvent || redactId);\n } catch (ex) {\n // Non-critical failure, but we should warn.\n logger.error(\"Failed to handle redaction for sticky event\", ex);\n }\n }\n if (redactedEvent) {\n this.applyEventAsRedaction(event, redactedEvent);\n }\n } else if (event.getType() === EventType.RoomMember) {\n var membership = event.getContent()[\"membership\"];\n if (membership !== KnownMembership.Ban && !(membership === KnownMembership.Leave && event.getStateKey() !== event.getSender())) {\n // Not a ban or kick, therefore not a membership event we care about here.\n return;\n }\n var redactEvents = event.getContent()[\"org.matrix.msc4293.redact_events\"];\n if (redactEvents !== true) {\n // Invalid or not set - nothing to redact.\n return;\n }\n var state = this.getLiveTimeline().getState(Direction.Forward);\n if (!state.maySendRedactionForEvent(event, event.getSender())) {\n // If the sender can't redact the membership event, then they won't be able to\n // redact any of the target's events either, so skip.\n return;\n }\n\n // The redaction is possible, so let's find all the events and apply it.\n var events = this.getTimelineSets().map(s => s.getTimelines()).reduce((p, c) => {\n p.push(...c);\n return p;\n }, []).map(t => t.getEvents().filter(e => e.getSender() === event.getStateKey())).reduce((p, c) => {\n p.push(...c);\n return c;\n }, []);\n for (var toRedact of events) {\n this.applyEventAsRedaction(event, toRedact);\n }\n }\n });\n this.setMaxListeners(100);\n this.reEmitter = new TypedReEmitter(this);\n opts.pendingEventOrdering = opts.pendingEventOrdering || PendingEventOrdering.Chronological;\n this.name = roomId;\n this.normalizedName = roomId;\n this.relations = new RelationsContainer(this.client, this);\n\n // Listen to our own receipt event as a more modular way of processing our own\n // receipts. No need to remove the listener: it's on ourself anyway.\n this.on(RoomEvent.Receipt, this.onReceipt);\n this.reEmitter.reEmit(this.stickyEvents, [RoomStickyEventsEvent.Update]);\n\n // all our per-room timeline sets. the first one is the unfiltered ones;\n // the subsequent ones are the filtered ones in no particular order.\n this.timelineSets = [new EventTimelineSet(this, opts)];\n this.reEmitter.reEmit(this.getUnfilteredTimelineSet(), [RoomEvent.Timeline, RoomEvent.TimelineReset]);\n this.fixUpLegacyTimelineFields();\n if (this.opts.pendingEventOrdering === PendingEventOrdering.Detached) {\n this.pendingEventList = [];\n this.client.store.getPendingEvents(this.roomId).then(events => {\n var mapper = this.client.getEventMapper({\n decrypt: false\n });\n events.forEach(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (serializedEvent) {\n var event = mapper(serializedEvent);\n yield client.decryptEventIfNeeded(event);\n event.setStatus(EventStatus.NOT_SENT);\n _this.addPendingEvent(event, event.getTxnId());\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n });\n }\n\n // awaited by getEncryptionTargetMembers while room members are loading\n if (!this.opts.lazyLoadMembers) {\n this.membersPromise = Promise.resolve(false);\n } else {\n this.membersPromise = undefined;\n }\n if ((_this$client = this.client) !== null && _this$client !== void 0 && _this$client._unstable_shouldApplyMessageRetention) {\n this.retention = new RoomRetentionPolicy(this, client.retentionPolicyService, client.store);\n }\n }\n createThreadsTimelineSets() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _this2$client;\n if (_this2.threadTimelineSetsPromise) {\n return _this2.threadTimelineSetsPromise;\n }\n if ((_this2$client = _this2.client) !== null && _this2$client !== void 0 && _this2$client.supportsThreads()) {\n try {\n _this2.threadTimelineSetsPromise = Promise.all([_this2.createThreadTimelineSet(), _this2.createThreadTimelineSet(ThreadFilterType.My)]);\n var timelineSets = yield _this2.threadTimelineSetsPromise;\n _this2.threadsTimelineSets[0] = timelineSets[0];\n _this2.threadsTimelineSets[1] = timelineSets[1];\n return timelineSets;\n } catch (_unused) {\n _this2.threadTimelineSetsPromise = null;\n return null;\n }\n }\n return null;\n })();\n }\n\n /**\n * Bulk decrypt critical events in a room\n *\n * Critical events represents the minimal set of events to decrypt\n * for a typical UI to function properly\n *\n * - Last event of every room (to generate likely message preview)\n * - All events up to the read receipt (to calculate an accurate notification count)\n *\n * @returns Signals when all events have been decrypted\n */\n decryptCriticalEvents() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (!_this3.client.getCrypto()) return;\n var readReceiptEventId = _this3.getEventReadUpTo(_this3.client.getUserId(), true);\n var events = _this3.getLiveTimeline().getEvents();\n var readReceiptTimelineIndex = events.findIndex(matrixEvent => {\n return matrixEvent.event.event_id === readReceiptEventId;\n });\n var decryptionPromises = events.slice(readReceiptTimelineIndex).reverse().map(event => _this3.client.decryptEventIfNeeded(event));\n yield Promise.allSettled(decryptionPromises);\n })();\n }\n\n /**\n * Bulk decrypt events in a room\n *\n * @returns Signals when all events have been decrypted\n */\n decryptAllEvents() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (!_this4.client.getCrypto()) return;\n var decryptionPromises = _this4.getUnfilteredTimelineSet().getLiveTimeline().getEvents().slice(0) // copy before reversing\n .reverse().map(event => _this4.client.decryptEventIfNeeded(event));\n yield Promise.allSettled(decryptionPromises);\n })();\n }\n\n /**\n * Gets the creator of the room\n * @returns The creator of the room, or null if it could not be determined\n */\n getCreator() {\n var _createEvent$getSende;\n var createEvent = this.currentState.getStateEvents(EventType.RoomCreate, \"\");\n return (_createEvent$getSende = createEvent === null || createEvent === void 0 ? void 0 : createEvent.getSender()) !== null && _createEvent$getSende !== void 0 ? _createEvent$getSende : null;\n }\n\n /**\n * Gets the version of the room\n * @returns The version of the room\n */\n getVersion() {\n return this.currentState.getRoomVersion();\n }\n\n /**\n * Determines the recommended room version for the room. This returns an\n * object with 3 properties: `version` as the new version the\n * room should be upgraded to (may be the same as the current version);\n * `needsUpgrade` to indicate if the room actually can be\n * upgraded (ie: does the current version not match?); and `urgent`\n * to indicate if the new version patches a vulnerability in a previous\n * version.\n * @returns\n * Resolves to the version the room should be upgraded to.\n */\n getRecommendedVersion() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var capabilities = {};\n try {\n capabilities = yield _this5.client.getCapabilities();\n } catch (_unused2) {}\n var versionCap = capabilities[\"m.room_versions\"];\n if (!versionCap) {\n versionCap = {\n default: KNOWN_SAFE_ROOM_VERSION,\n available: {}\n };\n for (var safeVer of SAFE_ROOM_VERSIONS) {\n versionCap.available[safeVer] = RoomVersionStability.Stable;\n }\n }\n var result = _this5.checkVersionAgainstCapability(versionCap);\n if (result.urgent && result.needsUpgrade) {\n // Something doesn't feel right: we shouldn't need to update\n // because the version we're on should be in the protocol's\n // namespace. This usually means that the server was updated\n // before the client was, making us think the newest possible\n // room version is not stable. As a solution, we'll refresh\n // the capability we're using to determine this.\n logger.warn(\"Refreshing room version capability because the server looks \" + \"to be supporting a newer room version we don't know about.\");\n try {\n capabilities = yield _this5.client.fetchCapabilities();\n } catch (e) {\n logger.warn(\"Failed to refresh room version capabilities\", e);\n }\n versionCap = capabilities[\"m.room_versions\"];\n if (!versionCap) {\n logger.warn(\"No room version capability - assuming upgrade required.\");\n return result;\n } else {\n result = _this5.checkVersionAgainstCapability(versionCap);\n }\n }\n return result;\n })();\n }\n checkVersionAgainstCapability(versionCap) {\n var currentVersion = this.getVersion();\n logger.log(\"[\".concat(this.roomId, \"] Current version: \").concat(currentVersion));\n logger.log(\"[\".concat(this.roomId, \"] Version capability: \"), versionCap);\n var result = {\n version: currentVersion,\n needsUpgrade: false,\n urgent: false\n };\n\n // If the room is on the default version then nothing needs to change\n if (currentVersion === versionCap.default) return result;\n var stableVersions = Object.keys(versionCap.available).filter(v => versionCap.available[v] === \"stable\");\n\n // Check if the room is on an unstable version. We determine urgency based\n // off the version being in the Matrix spec namespace or not (if the version\n // is in the current namespace and unstable, the room is probably vulnerable).\n if (!stableVersions.includes(currentVersion)) {\n result.version = versionCap.default;\n result.needsUpgrade = true;\n result.urgent = !!this.getVersion().match(/^[0-9]+[0-9.]*$/g);\n if (result.urgent) {\n logger.warn(\"URGENT upgrade required on \".concat(this.roomId));\n } else {\n logger.warn(\"Non-urgent upgrade required on \".concat(this.roomId));\n }\n return result;\n }\n\n // The room is on a stable, but non-default, version by this point.\n // No upgrade needed.\n return result;\n }\n\n /**\n * Determines whether the given user is permitted to perform a room upgrade\n * @param userId - The ID of the user to test against\n * @returns True if the given user is permitted to upgrade the room\n */\n userMayUpgradeRoom(userId) {\n return this.currentState.maySendStateEvent(EventType.RoomTombstone, userId);\n }\n\n /**\n * Get the list of pending sent events for this room\n *\n * @returns A list of the sent events\n * waiting for remote echo.\n *\n * @throws If `opts.pendingEventOrdering` was not 'detached'\n */\n getPendingEvents() {\n if (!this.pendingEventList) {\n throw new Error(\"Cannot call getPendingEvents with pendingEventOrdering == \" + this.opts.pendingEventOrdering);\n }\n return this.pendingEventList;\n }\n\n /**\n * Removes a pending event for this room\n *\n * @returns True if an element was removed.\n */\n removePendingEvent(eventId) {\n if (!this.pendingEventList) {\n throw new Error(\"Cannot call removePendingEvent with pendingEventOrdering == \" + this.opts.pendingEventOrdering);\n }\n var removed = removeElement(this.pendingEventList, function (ev) {\n return ev.getId() == eventId;\n }, false);\n this.savePendingEvents();\n return removed;\n }\n\n /**\n * Check whether the pending event list contains a given event by ID.\n * If pending event ordering is not \"detached\" then this returns false.\n *\n * @param eventId - The event ID to check for.\n */\n hasPendingEvent(eventId) {\n var _this$pendingEventLis, _this$pendingEventLis2;\n return (_this$pendingEventLis = (_this$pendingEventLis2 = this.pendingEventList) === null || _this$pendingEventLis2 === void 0 ? void 0 : _this$pendingEventLis2.some(event => event.getId() === eventId)) !== null && _this$pendingEventLis !== void 0 ? _this$pendingEventLis : false;\n }\n\n /**\n * Get a specific event from the pending event list, if configured, null otherwise.\n *\n * @param eventId - The event ID to check for.\n */\n getPendingEvent(eventId) {\n var _this$pendingEventLis3, _this$pendingEventLis4;\n return (_this$pendingEventLis3 = (_this$pendingEventLis4 = this.pendingEventList) === null || _this$pendingEventLis4 === void 0 ? void 0 : _this$pendingEventLis4.find(event => event.getId() === eventId)) !== null && _this$pendingEventLis3 !== void 0 ? _this$pendingEventLis3 : null;\n }\n\n /**\n * Get the live unfiltered timeline for this room.\n *\n * @returns live timeline\n */\n getLiveTimeline() {\n return this.getUnfilteredTimelineSet().getLiveTimeline();\n }\n\n /**\n * The live event timeline for this room, with the oldest event at index 0.\n *\n * @deprecated Present for backwards compatibility.\n * Use getLiveTimeline().getEvents() instead\n */\n get timeline() {\n return this.getLiveTimeline().getEvents();\n }\n\n /**\n * Get the timestamp of the last message in the room\n *\n * @returns the timestamp of the last message in the room\n */\n getLastActiveTimestamp() {\n var timeline = this.getLiveTimeline();\n var events = timeline.getEvents();\n if (events.length) {\n var lastEvent = events[events.length - 1];\n return lastEvent.getTs();\n } else {\n return Number.MIN_SAFE_INTEGER;\n }\n }\n\n /**\n * Returns the last live event of this room.\n * \"last\" means latest timestamp.\n * Instead of using timestamps, it would be better to do the comparison based on the order of the homeserver DAG.\n * Unfortunately, this information is currently not available in the client.\n * See {@link https://github.com/matrix-org/matrix-js-sdk/issues/3325}.\n * \"live of this room\" means from all live timelines: the room and the threads.\n *\n * @returns MatrixEvent if there is a last event; else undefined.\n */\n getLastLiveEvent() {\n var _lastRoomEvent$getTs, _lastThreadEvent$getT;\n var roomEvents = this.getLiveTimeline().getEvents();\n var lastRoomEvent = roomEvents[roomEvents.length - 1];\n var lastThread = this.getLastThread();\n if (!lastThread) return lastRoomEvent;\n var lastThreadEvent = lastThread.events[lastThread.events.length - 1];\n return ((_lastRoomEvent$getTs = lastRoomEvent === null || lastRoomEvent === void 0 ? void 0 : lastRoomEvent.getTs()) !== null && _lastRoomEvent$getTs !== void 0 ? _lastRoomEvent$getTs : 0) > ((_lastThreadEvent$getT = lastThreadEvent === null || lastThreadEvent === void 0 ? void 0 : lastThreadEvent.getTs()) !== null && _lastThreadEvent$getT !== void 0 ? _lastThreadEvent$getT : 0) ? lastRoomEvent : lastThreadEvent;\n }\n\n /**\n * Returns the last thread of this room.\n * \"last\" means latest timestamp of the last thread event.\n * Instead of using timestamps, it would be better to do the comparison based on the order of the homeserver DAG.\n * Unfortunately, this information is currently not available in the client.\n * See {@link https://github.com/matrix-org/matrix-js-sdk/issues/3325}.\n *\n * @returns the thread with the most recent event in its live time line. undefined if there is no thread.\n */\n getLastThread() {\n return this.getThreads().reduce((lastThread, thread) => {\n var _threadEvent$getTs, _lastThreadEvent$getT2;\n if (!lastThread) return thread;\n var threadEvent = thread.events[thread.events.length - 1];\n var lastThreadEvent = lastThread.events[lastThread.events.length - 1];\n if (((_threadEvent$getTs = threadEvent === null || threadEvent === void 0 ? void 0 : threadEvent.getTs()) !== null && _threadEvent$getTs !== void 0 ? _threadEvent$getTs : 0) >= ((_lastThreadEvent$getT2 = lastThreadEvent === null || lastThreadEvent === void 0 ? void 0 : lastThreadEvent.getTs()) !== null && _lastThreadEvent$getT2 !== void 0 ? _lastThreadEvent$getT2 : 0)) {\n // Last message of current thread is newer → new last thread.\n // Equal also means newer, because it was added to the thread map later.\n return thread;\n }\n return lastThread;\n }, undefined);\n }\n\n /**\n * @returns the membership type (join | leave | invite | knock) for the logged in user\n */\n getMyMembership() {\n var _this$selfMembership;\n return (_this$selfMembership = this.selfMembership) !== null && _this$selfMembership !== void 0 ? _this$selfMembership : KnownMembership.Leave;\n }\n\n /**\n * If this room is a DM we're invited to,\n * try to find out who invited us\n * @returns user id of the inviter\n */\n getDMInviter() {\n var me = this.getMember(this.myUserId);\n if (me) {\n return me.getDMInviter();\n }\n if (this.selfMembership === KnownMembership.Invite) {\n // fall back to summary information\n var memberCount = this.getInvitedAndJoinedMemberCount();\n if (memberCount === 2) {\n var _this$heroes;\n return (_this$heroes = this.heroes) === null || _this$heroes === void 0 || (_this$heroes = _this$heroes[0]) === null || _this$heroes === void 0 ? void 0 : _this$heroes.userId;\n }\n }\n }\n\n /**\n * Assuming this room is a DM room, tries to guess with which user.\n * @returns user id of the other member (could be syncing user)\n */\n guessDMUserId() {\n var me = this.getMember(this.myUserId);\n if (me) {\n var inviterId = me.getDMInviter();\n if (inviterId) {\n return inviterId;\n }\n }\n // Remember, we're assuming this room is a DM, so returning the first member we find should be fine\n if (Array.isArray(this.heroes) && this.heroes.length) {\n return this.heroes[0].userId;\n }\n var members = this.currentState.getMembers();\n var anyMember = members.find(m => m.userId !== this.myUserId);\n if (anyMember) {\n return anyMember.userId;\n }\n // it really seems like I'm the only user in the room\n // so I probably created a room with just me in it\n // and marked it as a DM. Ok then\n return this.myUserId;\n }\n\n /**\n * Gets the \"functional members\" in this room.\n *\n * Returns the list of userIDs from the `io.element.functional_members` event. Does not consider the\n * current membership states of those users.\n *\n * @see https://github.com/element-hq/element-meta/blob/develop/spec/functional_members.md.\n */\n getFunctionalMembers() {\n var mFunctionalMembers = this.currentState.getStateEvents(UNSTABLE_ELEMENT_FUNCTIONAL_USERS.name, \"\");\n if (Array.isArray(mFunctionalMembers === null || mFunctionalMembers === void 0 ? void 0 : mFunctionalMembers.getContent().service_members)) {\n return mFunctionalMembers.getContent().service_members;\n }\n return [];\n }\n getAvatarFallbackMember() {\n var _this$heroes2;\n var functionalMembers = this.getFunctionalMembers();\n\n // Only generate a fallback avatar if the conversation is with a single specific other user (a \"DM\").\n var nonFunctionalMemberCount = 0;\n this.getMembers().forEach(m => {\n if (m.membership !== \"join\" && m.membership !== \"invite\") return;\n if (functionalMembers.includes(m.userId)) return;\n nonFunctionalMemberCount++;\n });\n if (nonFunctionalMemberCount > 2) return;\n\n // Prefer the list of heroes, if present. It should only include the single other user in the DM.\n var nonFunctionalHeroes = (_this$heroes2 = this.heroes) === null || _this$heroes2 === void 0 ? void 0 : _this$heroes2.filter(h => !functionalMembers.includes(h.userId));\n var hasHeroes = Array.isArray(nonFunctionalHeroes) && nonFunctionalHeroes.length;\n if (hasHeroes) {\n // use first hero that has a display name or avatar url, or whose user ID\n // can be looked up as a member of the room\n for (var hero of nonFunctionalHeroes) {\n // If the hero was from a legacy sync (`/v3/sync`), we will need to look the user ID up in the room\n // the display name and avatar URL will not be set.\n if (!hero.fromMSC4186) {\n // attempt to look up renderable fields from the m.room.member event if it exists\n var member = this.getMember(hero.userId);\n if (member) {\n return member;\n }\n } else {\n // use the Hero supplied values for the room member.\n // TODO: It's unfortunate that this function, which clearly only cares about the\n // avatar url, returns the entire RoomMember event. We need to fake an event\n // to meet this API shape.\n var heroMember = new RoomMember(this.roomId, hero.userId);\n // set the display name and avatar url\n heroMember.setMembershipEvent(new MatrixEvent({\n // ensure it's unique even if we hit the same millisecond\n event_id: \"$\" + this.roomId + hero.userId + new Date().getTime(),\n type: EventType.RoomMember,\n state_key: hero.userId,\n content: {\n displayname: hero.displayName,\n avatar_url: hero.avatarUrl\n }\n }));\n return heroMember;\n }\n }\n var availableMember = nonFunctionalHeroes.map(hero => {\n return this.getMember(hero.userId);\n }).find(member => !!member);\n if (availableMember) {\n return availableMember;\n }\n }\n\n // Consider *all*, including previous, members, to generate the avatar for DMs where the other user left.\n // Needed to generate a matching avatar for rooms named \"Empty Room (was Alice)\".\n var members = this.getMembers();\n var nonFunctionalMembers = members === null || members === void 0 ? void 0 : members.filter(m => !functionalMembers.includes(m.userId));\n if (nonFunctionalMembers.length <= 2) {\n var _availableMember = nonFunctionalMembers.find(m => {\n return m.userId !== this.myUserId;\n });\n if (_availableMember) {\n return _availableMember;\n }\n }\n\n // If all else failed, but the homeserver gave us heroes that previously could not be found in the room members,\n // trust and try falling back to a hero, creating a one-off member for it\n if (hasHeroes) {\n var availableUser = nonFunctionalHeroes.map(hero => {\n return this.client.getUser(hero.userId);\n }).find(user => !!user);\n if (availableUser) {\n var _member = new RoomMember(this.roomId, availableUser.userId);\n _member.user = availableUser;\n return _member;\n }\n }\n }\n\n /**\n * Sets the membership this room was received as during sync\n * @param membership - join | leave | invite\n */\n updateMyMembership(membership) {\n var prevMembership = this.selfMembership;\n this.selfMembership = membership;\n if (prevMembership !== membership) {\n if (membership === KnownMembership.Leave) {\n this.cleanupAfterLeaving();\n }\n this.emit(RoomEvent.MyMembership, this, membership, prevMembership);\n }\n }\n loadMembersFromServer() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var lastSyncToken = _this6.client.store.getSyncToken();\n var response = yield _this6.client.members(_this6.roomId, undefined, KnownMembership.Leave, lastSyncToken !== null && lastSyncToken !== void 0 ? lastSyncToken : undefined);\n return response.chunk;\n })();\n }\n loadMembers() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n // were the members loaded from the server?\n var fromServer = false;\n var rawMembersEvents = yield _this7.client.store.getOutOfBandMembers(_this7.roomId);\n // If the room is encrypted, we always fetch members from the server at\n // least once, in case the latest state wasn't persisted properly. Note\n // that this function is only called once (unless loading the members\n // fails), since loadMembersIfNeeded always returns this.membersPromise\n // if set, which will be the result of the first (successful) call.\n if (rawMembersEvents === null || _this7.hasEncryptionStateEvent()) {\n fromServer = true;\n rawMembersEvents = yield _this7.loadMembersFromServer();\n logger.log(\"LL: got \".concat(rawMembersEvents.length, \" \") + \"members from server for room \".concat(_this7.roomId));\n }\n var memberEvents = rawMembersEvents.filter(noUnsafeEventProps).map(_this7.client.getEventMapper());\n return {\n memberEvents,\n fromServer\n };\n })();\n }\n\n /**\n * Check if loading of out-of-band-members has completed\n *\n * @returns true if the full membership list of this room has been loaded (including if lazy-loading is disabled).\n * False if the load is not started or is in progress.\n */\n membersLoaded() {\n if (!this.opts.lazyLoadMembers) {\n return true;\n }\n return this.currentState.outOfBandMembersReady();\n }\n\n /**\n * Preloads the member list in case lazy loading\n * of memberships is in use. Can be called multiple times,\n * it will only preload once.\n * @returns when preloading is done and\n * accessing the members on the room will take\n * all members in the room into account\n */\n loadMembersIfNeeded() {\n if (this.membersPromise) {\n return this.membersPromise;\n }\n\n // mark the state so that incoming messages while\n // the request is in flight get marked as superseding\n // the OOB members\n this.currentState.markOutOfBandMembersStarted();\n var inMemoryUpdate = this.loadMembers().then(result => {\n this.currentState.setOutOfBandMembers(result.memberEvents);\n // recalculate the room name: it may have been based on members, so may have changed\n this.recalculate();\n return result.fromServer;\n }).catch(err => {\n // allow retries on fail\n this.membersPromise = undefined;\n this.currentState.markOutOfBandMembersFailed();\n throw err;\n });\n // update members in storage, but don't wait for it\n inMemoryUpdate.then(fromServer => {\n if (fromServer) {\n var oobMembers = this.currentState.getMembers().filter(m => m.isOutOfBand()).map(m => {\n var _m$events$member;\n return (_m$events$member = m.events.member) === null || _m$events$member === void 0 ? void 0 : _m$events$member.event;\n });\n logger.log(\"LL: telling store to write \".concat(oobMembers.length) + \" members for room \".concat(this.roomId));\n var store = this.client.store;\n return store.setOutOfBandMembers(this.roomId, oobMembers)\n // swallow any IDB error as we don't want to fail\n // because of this\n .catch(err => {\n logger.log(\"LL: storing OOB room members failed, oh well\", err);\n });\n }\n }).catch(err => {\n // as this is not awaited anywhere,\n // at least show the error in the console\n logger.error(err);\n });\n this.membersPromise = inMemoryUpdate;\n return this.membersPromise;\n }\n\n /**\n * Removes the lazily loaded members from storage if needed\n */\n clearLoadedMembersIfNeeded() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.opts.lazyLoadMembers && _this8.membersPromise) {\n yield _this8.loadMembersIfNeeded();\n yield _this8.client.store.clearOutOfBandMembers(_this8.roomId);\n _this8.currentState.clearOutOfBandMembers();\n _this8.membersPromise = undefined;\n }\n })();\n }\n\n /**\n * called when sync receives this room in the leave section\n * to do cleanup after leaving a room. Possibly called multiple times.\n */\n cleanupAfterLeaving() {\n this.clearLoadedMembersIfNeeded().catch(err => {\n logger.error(\"error after clearing loaded members from \" + \"room \".concat(this.roomId, \" after leaving\"));\n logger.log(err);\n });\n }\n\n /**\n * Empty out the current live timeline and re-request it. This is used when\n * historical messages are imported into the room via MSC2716 `/batch_send`\n * because the client may already have that section of the timeline loaded.\n * We need to force the client to throw away their current timeline so that\n * when they back paginate over the area again with the historical messages\n * in between, it grabs the newly imported messages. We can listen for\n * `UNSTABLE_MSC2716_MARKER`, in order to tell when historical messages are ready\n * to be discovered in the room and the timeline needs a refresh. The SDK\n * emits a `RoomEvent.HistoryImportedWithinTimeline` event when we detect a\n * valid marker and can check the needs refresh status via\n * `room.getTimelineNeedsRefresh()`.\n */\n refreshLiveTimeline() {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n var liveTimelineBefore = _this9.getLiveTimeline();\n var forwardPaginationToken = liveTimelineBefore.getPaginationToken(EventTimeline.FORWARDS);\n var backwardPaginationToken = liveTimelineBefore.getPaginationToken(EventTimeline.BACKWARDS);\n var eventsBefore = liveTimelineBefore.getEvents();\n var mostRecentEventInTimeline = eventsBefore[eventsBefore.length - 1];\n logger.log(\"[refreshLiveTimeline for \".concat(_this9.roomId, \"] at \") + \"mostRecentEventInTimeline=\".concat(mostRecentEventInTimeline && mostRecentEventInTimeline.getId(), \" \") + \"liveTimelineBefore=\".concat(liveTimelineBefore.toString(), \" \") + \"forwardPaginationToken=\".concat(forwardPaginationToken, \" \") + \"backwardPaginationToken=\".concat(backwardPaginationToken));\n\n // Get the main TimelineSet\n var timelineSet = _this9.getUnfilteredTimelineSet();\n var newTimeline = null;\n // If there isn't any event in the timeline, let's go fetch the latest\n // event and construct a timeline from it.\n //\n // This should only really happen if the user ran into an error\n // with refreshing the timeline before which left them in a blank\n // timeline from `resetLiveTimeline`.\n if (!mostRecentEventInTimeline) {\n newTimeline = yield _this9.client.getLatestTimeline(timelineSet);\n } else {\n // Empty out all of `this.timelineSets`. But we also need to keep the\n // same `timelineSet` references around so the React code updates\n // properly and doesn't ignore the room events we emit because it checks\n // that the `timelineSet` references are the same. We need the\n // `timelineSet` empty so that the `client.getEventTimeline(...)` call\n // later, will call `/context` and create a new timeline instead of\n // returning the same one.\n _this9.resetLiveTimeline(null, null);\n\n // Make the UI timeline show the new blank live timeline we just\n // reset so that if the network fails below it's showing the\n // accurate state of what we're working with instead of the\n // disconnected one in the TimelineWindow which is just hanging\n // around by reference.\n _this9.emit(RoomEvent.TimelineRefresh, _this9, timelineSet);\n\n // Use `client.getEventTimeline(...)` to construct a new timeline from a\n // `/context` response state and events for the most recent event before\n // we reset everything. The `timelineSet` we pass in needs to be empty\n // in order for this function to call `/context` and generate a new\n // timeline.\n newTimeline = yield _this9.client.getEventTimeline(timelineSet, mostRecentEventInTimeline.getId());\n }\n\n // If a racing `/sync` beat us to creating a new timeline, use that\n // instead because it's the latest in the room and any new messages in\n // the scrollback will include the history.\n var liveTimeline = timelineSet.getLiveTimeline();\n if (!liveTimeline || liveTimeline.getPaginationToken(Direction.Forward) === null && liveTimeline.getPaginationToken(Direction.Backward) === null && liveTimeline.getEvents().length === 0) {\n logger.log(\"[refreshLiveTimeline for \".concat(_this9.roomId, \"] using our new live timeline\"));\n // Set the pagination token back to the live sync token (`null`) instead\n // of using the `/context` historical token (ex. `t12-13_0_0_0_0_0_0_0_0`)\n // so that it matches the next response from `/sync` and we can properly\n // continue the timeline.\n newTimeline.setPaginationToken(forwardPaginationToken, EventTimeline.FORWARDS);\n\n // Set our new fresh timeline as the live timeline to continue syncing\n // forwards and back paginating from.\n timelineSet.setLiveTimeline(newTimeline);\n // Fixup `this.oldstate` so that `scrollback` has the pagination tokens\n // available\n _this9.fixUpLegacyTimelineFields();\n } else {\n logger.log(\"[refreshLiveTimeline for \".concat(_this9.roomId, \"] `/sync` or some other request beat us to creating a new \") + \"live timeline after we reset it. We'll use that instead since any events in the scrollback from \" + \"this timeline will include the history.\");\n }\n\n // The timeline has now been refreshed ✅\n _this9.setTimelineNeedsRefresh(false);\n\n // Emit an event which clients can react to and re-load the timeline\n // from the SDK\n _this9.emit(RoomEvent.TimelineRefresh, _this9, timelineSet);\n })();\n }\n\n /**\n * Reset the live timeline of all timelineSets, and start new ones.\n *\n * <p>This is used when /sync returns a 'limited' timeline.\n *\n * @param backPaginationToken - token for back-paginating the new timeline\n * @param forwardPaginationToken - token for forward-paginating the old live timeline,\n * if absent or null, all timelines are reset, removing old ones (including the previous live\n * timeline which would otherwise be unable to paginate forwards without this token).\n * Removing just the old live timeline whilst preserving previous ones is not supported.\n */\n resetLiveTimeline(backPaginationToken, forwardPaginationToken) {\n for (var timelineSet of this.timelineSets) {\n timelineSet.resetLiveTimeline(backPaginationToken !== null && backPaginationToken !== void 0 ? backPaginationToken : undefined, forwardPaginationToken !== null && forwardPaginationToken !== void 0 ? forwardPaginationToken : undefined);\n }\n for (var thread of this.threads.values()) {\n thread.resetLiveTimeline(backPaginationToken, forwardPaginationToken);\n }\n this.fixUpLegacyTimelineFields();\n }\n\n /**\n * Fix up this.timeline, this.oldState and this.currentState\n *\n * @internal\n */\n fixUpLegacyTimelineFields() {\n var previousOldState = this.oldState;\n var previousCurrentState = this.currentState;\n\n // maintain this.oldState and this.currentState as references to the\n // state at the start and end of that timeline. These are more\n // for backwards-compatibility than anything else.\n this.oldState = this.getLiveTimeline().getState(EventTimeline.BACKWARDS);\n this.currentState = this.getLiveTimeline().getState(EventTimeline.FORWARDS);\n\n // Let people know to register new listeners for the new state\n // references. The reference won't necessarily change every time so only\n // emit when we see a change.\n if (previousOldState !== this.oldState) {\n this.emit(RoomEvent.OldStateUpdated, this, previousOldState, this.oldState);\n }\n if (previousCurrentState !== this.currentState) {\n this.emit(RoomEvent.CurrentStateUpdated, this, previousCurrentState, this.currentState);\n\n // Re-emit various events on the current room state\n // TODO: If currentState really only exists for backwards\n // compatibility, shouldn't we be doing this some other way?\n this.reEmitter.stopReEmitting(previousCurrentState, [RoomStateEvent.Events, RoomStateEvent.Members, RoomStateEvent.NewMember, RoomStateEvent.Update, RoomStateEvent.Marker, BeaconEvent.New, BeaconEvent.Update, BeaconEvent.Destroy, BeaconEvent.LivenessChange]);\n this.reEmitter.reEmit(this.currentState, [RoomStateEvent.Events, RoomStateEvent.Members, RoomStateEvent.NewMember, RoomStateEvent.Update, RoomStateEvent.Marker, BeaconEvent.New, BeaconEvent.Update, BeaconEvent.Destroy, BeaconEvent.LivenessChange]);\n }\n }\n onReceipt(event) {\n if (this.hasEncryptionStateEvent()) {\n this.clearNotificationsOnReceipt(event);\n }\n }\n clearNotificationsOnReceipt(event) {\n // Like above, we have to listen for read receipts from ourselves in order to\n // correctly handle notification counts on encrypted rooms.\n // This fixes https://github.com/vector-im/element-web/issues/9421\n\n // Figure out if we've read something or if it's just informational\n // We need to work out what threads we've just recieved receipts for, so we\n // know which ones to update. If we've received an unthreaded receipt, we'll\n // need to update all threads.\n var threadIds = [];\n var hasUnthreadedReceipt = false;\n var content = event.getContent();\n for (var receiptGroup of Object.values(content)) {\n for (var _ref4 of Object.entries(receiptGroup)) {\n var _ref3 = _slicedToArray(_ref4, 2);\n var receiptType = _ref3[0];\n var userReceipt = _ref3[1];\n if (!utils.isSupportedReceiptType(receiptType)) continue;\n if (!userReceipt) continue;\n for (var _ref7 of Object.entries(userReceipt)) {\n var _ref6 = _slicedToArray(_ref7, 2);\n var userId = _ref6[0];\n var singleReceipt = _ref6[1];\n if (!singleReceipt || typeof singleReceipt !== \"object\") continue;\n var typedSingleReceipt = singleReceipt;\n if (userId !== this.client.getUserId()) continue;\n if (typedSingleReceipt.thread_id === undefined) {\n hasUnthreadedReceipt = true;\n } else if (typeof typedSingleReceipt.thread_id === \"string\") {\n threadIds.push(typedSingleReceipt.thread_id);\n }\n }\n }\n }\n if (hasUnthreadedReceipt) {\n // If we have an unthreaded receipt, we need to update any threads that have a notification\n // in them (because we know the receipt can't go backwards so we don't need to check any with\n // no notifications: the number can only decrease from a receipt).\n threadIds = this.getThreads().filter(thread => this.getThreadUnreadNotificationCount(thread.id, NotificationCountType.Total) > 0 || this.getThreadUnreadNotificationCount(thread.id, NotificationCountType.Highlight) > 0).map(thread => thread.id);\n threadIds.push(\"main\");\n }\n for (var threadId of threadIds) {\n var _this$getThread;\n // Work backwards to determine how many events are unread. We also set\n // a limit for how back we'll look to avoid spinning CPU for too long.\n // If we hit the limit, we assume the count is unchanged.\n var maxHistory = 20;\n var timeline = threadId === \"main\" ? this.getLiveTimeline() : (_this$getThread = this.getThread(threadId)) === null || _this$getThread === void 0 ? void 0 : _this$getThread.liveTimeline;\n if (!timeline) {\n logger.warn(\"Couldn't find timeline for thread ID \".concat(threadId, \" in room \").concat(this.roomId));\n continue;\n }\n var events = timeline.getEvents();\n var highlightCount = 0;\n for (var i = events.length - 1; i >= 0; i--) {\n var _pushActions$tweaks;\n if (i === events.length - maxHistory) return; // limit reached\n\n var _event = events[i];\n if (this.hasUserReadEvent(this.client.getUserId(), _event.getId())) {\n // If the user has read the event, then the counting is done.\n break;\n }\n var pushActions = this.client.getPushActionsForEvent(_event);\n highlightCount += pushActions !== null && pushActions !== void 0 && (_pushActions$tweaks = pushActions.tweaks) !== null && _pushActions$tweaks !== void 0 && _pushActions$tweaks.highlight ? 1 : 0;\n }\n\n // Note: we don't need to handle 'total' notifications because the counts\n // will come from the server.\n if (threadId === \"main\") {\n this.setUnreadNotificationCount(NotificationCountType.Highlight, highlightCount);\n } else {\n this.setThreadUnreadNotificationCount(threadId, NotificationCountType.Highlight, highlightCount);\n }\n }\n }\n\n /**\n * Return the timeline sets for this room.\n * @returns array of timeline sets for this room\n */\n getTimelineSets() {\n return this.timelineSets;\n }\n\n /**\n * Helper to return the main unfiltered timeline set for this room\n * @returns room's unfiltered timeline set\n */\n getUnfilteredTimelineSet() {\n return this.timelineSets[0];\n }\n\n /**\n * Get the timeline which contains the given event from the unfiltered set, if any\n *\n * @param eventId - event ID to look for\n * @returns timeline containing\n * the given event, or null if unknown\n */\n getTimelineForEvent(eventId) {\n var event = this.findEventById(eventId);\n var thread = this.findThreadForEvent(event);\n if (thread) {\n return thread.timelineSet.getTimelineForEvent(eventId);\n } else {\n return this.getUnfilteredTimelineSet().getTimelineForEvent(eventId);\n }\n }\n\n /**\n * Add a new timeline to this room's unfiltered timeline set\n *\n * @returns newly-created timeline\n */\n addTimeline() {\n return this.getUnfilteredTimelineSet().addTimeline();\n }\n\n /**\n * Whether the timeline needs to be refreshed in order to pull in new\n * historical messages that were imported.\n * @param value - The value to set\n */\n setTimelineNeedsRefresh(value) {\n this.timelineNeedsRefresh = value;\n }\n\n /**\n * Whether the timeline needs to be refreshed in order to pull in new\n * historical messages that were imported.\n * @returns .\n */\n getTimelineNeedsRefresh() {\n return this.timelineNeedsRefresh;\n }\n\n /**\n * Get an event which is stored in our unfiltered timeline set, or in a thread\n *\n * @param eventId - event ID to look for\n * @returns the given event, or undefined if unknown\n */\n findEventById(eventId) {\n var event = this.getUnfilteredTimelineSet().findEventById(eventId);\n if (!event) {\n var threads = this.getThreads();\n for (var i = 0; i < threads.length; i++) {\n var thread = threads[i];\n event = thread.findEventById(eventId);\n if (event) {\n return event;\n }\n }\n }\n return event;\n }\n\n /**\n * Get one of the notification counts for this room\n * @param type - The type of notification count to get. default: 'total'\n * @returns The notification count, or undefined if there is no count\n * for this type.\n */\n getUnreadNotificationCount() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : NotificationCountType.Total;\n var count = this.getRoomUnreadNotificationCount(type);\n for (var threadNotification of this.threadNotifications.values()) {\n var _threadNotification$t;\n count += (_threadNotification$t = threadNotification[type]) !== null && _threadNotification$t !== void 0 ? _threadNotification$t : 0;\n }\n return count;\n }\n\n /**\n * Get the notification for the event context (room or thread timeline)\n */\n getUnreadCountForEventContext() {\n var _ref8;\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : NotificationCountType.Total;\n var event = arguments.length > 1 ? arguments[1] : undefined;\n var isThreadEvent = !!event.threadRootId && !event.isThreadRoot;\n return (_ref8 = isThreadEvent ? this.getThreadUnreadNotificationCount(event.threadRootId, type) : this.getRoomUnreadNotificationCount(type)) !== null && _ref8 !== void 0 ? _ref8 : 0;\n }\n\n /**\n * Get one of the notification counts for this room\n * @param type - The type of notification count to get. default: 'total'\n * @returns The notification count, or undefined if there is no count\n * for this type.\n */\n getRoomUnreadNotificationCount() {\n var _this$notificationCou;\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : NotificationCountType.Total;\n return (_this$notificationCou = this.notificationCounts[type]) !== null && _this$notificationCou !== void 0 ? _this$notificationCou : 0;\n }\n\n /**\n * Get one of the notification counts for a thread\n * @param threadId - the root event ID\n * @param type - The type of notification count to get. default: 'total'\n * @returns The notification count, or undefined if there is no count\n * for this type.\n */\n getThreadUnreadNotificationCount(threadId) {\n var _this$threadNotificat, _this$threadNotificat2;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NotificationCountType.Total;\n return (_this$threadNotificat = (_this$threadNotificat2 = this.threadNotifications.get(threadId)) === null || _this$threadNotificat2 === void 0 ? void 0 : _this$threadNotificat2[type]) !== null && _this$threadNotificat !== void 0 ? _this$threadNotificat : 0;\n }\n\n /**\n * Checks if the current room has unread thread notifications\n * @returns\n */\n hasThreadUnreadNotification() {\n for (var notification of this.threadNotifications.values()) {\n var _notification$highlig, _notification$total;\n if (((_notification$highlig = notification.highlight) !== null && _notification$highlig !== void 0 ? _notification$highlig : 0) > 0 || ((_notification$total = notification.total) !== null && _notification$total !== void 0 ? _notification$total : 0) > 0) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Swet one of the notification count for a thread\n * @param threadId - the root event ID\n * @param type - The type of notification count to get. default: 'total'\n * @returns\n */\n setThreadUnreadNotificationCount(threadId, type, count) {\n var _this$threadNotificat3, _this$threadNotificat4;\n var notification = _objectSpread({\n highlight: (_this$threadNotificat3 = this.threadNotifications.get(threadId)) === null || _this$threadNotificat3 === void 0 ? void 0 : _this$threadNotificat3.highlight,\n total: (_this$threadNotificat4 = this.threadNotifications.get(threadId)) === null || _this$threadNotificat4 === void 0 ? void 0 : _this$threadNotificat4.total\n }, {\n [type]: count\n });\n this.threadNotifications.set(threadId, notification);\n this.emit(RoomEvent.UnreadNotifications, notification, threadId);\n }\n\n /**\n * @returns the notification count type for all the threads in the room\n */\n get threadsAggregateNotificationType() {\n var type = null;\n for (var threadNotification of this.threadNotifications.values()) {\n var _threadNotification$h, _threadNotification$t2;\n if (((_threadNotification$h = threadNotification.highlight) !== null && _threadNotification$h !== void 0 ? _threadNotification$h : 0) > 0) {\n return NotificationCountType.Highlight;\n } else if (((_threadNotification$t2 = threadNotification.total) !== null && _threadNotification$t2 !== void 0 ? _threadNotification$t2 : 0) > 0 && !type) {\n type = NotificationCountType.Total;\n }\n }\n return type;\n }\n\n /**\n * Resets the total thread notifications for all threads in this room to zero,\n * excluding any threads whose IDs are given in `exceptThreadIds`.\n *\n * If the room is not encrypted, also resets the highlight notification count to zero\n * for the same set of threads.\n *\n * This is intended for use from the sync code since we calculate highlight notification\n * counts locally from decrypted messages. We want to partially trust the total from the\n * server such that we clear notifications when read receipts arrive. The weird name is\n * intended to reflect this. You probably do not want to use this.\n *\n * @param exceptThreadIds - The thread IDs to exclude from the reset.\n */\n resetThreadUnreadNotificationCountFromSync() {\n var exceptThreadIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var isEncrypted = this.hasEncryptionStateEvent();\n for (var _ref1 of this.threadNotifications) {\n var _ref0 = _slicedToArray(_ref1, 2);\n var threadId = _ref0[0];\n var notifs = _ref0[1];\n if (!exceptThreadIds.includes(threadId)) {\n notifs.total = 0;\n if (!isEncrypted) {\n notifs.highlight = 0;\n }\n }\n }\n this.emit(RoomEvent.UnreadNotifications);\n }\n\n /**\n * Set the bump stamp for this room. This can be used for sorting rooms when the timeline\n * entries are unknown. Used in MSC4186: Simplified Sliding Sync.\n * @param bumpStamp The bump_stamp value from the server\n */\n setBumpStamp(bumpStamp) {\n this.bumpStamp = bumpStamp;\n }\n\n /**\n * Get the bump stamp for this room. This can be used for sorting rooms when the timeline\n * entries are unknown. Used in MSC4186: Simplified Sliding Sync.\n * @returns The bump stamp for the room, if it exists.\n */\n getBumpStamp() {\n return this.bumpStamp;\n }\n\n /**\n * Set one of the notification counts for this room\n * @param type - The type of notification count to set.\n * @param count - The new count\n */\n setUnreadNotificationCount(type, count) {\n this.notificationCounts[type] = count;\n this.emit(RoomEvent.UnreadNotifications, this.notificationCounts);\n }\n setUnread(type, count) {\n return this.setUnreadNotificationCount(type, count);\n }\n\n /**\n * Takes a legacy room summary (/v3/sync as opposed to MSC4186) and updates the room with it.\n *\n * @param summary - The room summary to update the room with\n */\n setSummary(summary) {\n var _summary$mHeroes;\n var heroes = (_summary$mHeroes = summary[\"m.heroes\"]) === null || _summary$mHeroes === void 0 ? void 0 : _summary$mHeroes.map(h => ({\n userId: h,\n fromMSC4186: false\n }));\n var joinedCount = summary[\"m.joined_member_count\"];\n var invitedCount = summary[\"m.invited_member_count\"];\n if (Number.isInteger(joinedCount)) {\n this.currentState.setJoinedMemberCount(joinedCount);\n }\n if (Number.isInteger(invitedCount)) {\n this.currentState.setInvitedMemberCount(invitedCount);\n }\n if (Array.isArray(heroes)) {\n // filter out ourselves just in case\n this.heroes = heroes.filter(h => {\n return h.userId != this.myUserId;\n });\n }\n this.emit(RoomEvent.Summary, summary);\n }\n\n /**\n * Takes information from the MSC4186 room summary and updates the room with it.\n *\n * @param heroes - The room's hero members\n * @param joinedCount - The number of joined members\n * @param invitedCount - The number of invited members\n */\n setMSC4186SummaryData(heroes, joinedCount, invitedCount) {\n if (heroes) {\n this.heroes = heroes.filter(h => h.user_id !== this.myUserId).map(h => ({\n userId: h.user_id,\n displayName: h.displayname,\n avatarUrl: h.avatar_url,\n fromMSC4186: true\n }));\n }\n if (joinedCount !== undefined && Number.isInteger(joinedCount)) {\n this.currentState.setJoinedMemberCount(joinedCount);\n }\n if (invitedCount !== undefined && Number.isInteger(invitedCount)) {\n this.currentState.setInvitedMemberCount(invitedCount);\n }\n\n // Construct a summary object to emit as the event wants the info in a single object\n // more like old-style (/v3/sync) summaries.\n this.emit(RoomEvent.Summary, {\n \"m.heroes\": this.heroes ? this.heroes.map(h => h.userId) : [],\n \"m.joined_member_count\": joinedCount,\n \"m.invited_member_count\": invitedCount\n });\n }\n\n /**\n * Whether to send encrypted messages to devices within this room.\n * @param value - true to blacklist unverified devices, null\n * to use the global value for this room.\n */\n setBlacklistUnverifiedDevices(value) {\n this.blacklistUnverifiedDevices = value;\n }\n\n /**\n * Whether to send encrypted messages to devices within this room.\n * @returns true if blacklisting unverified devices, null\n * if the global value should be used for this room.\n */\n getBlacklistUnverifiedDevices() {\n if (this.blacklistUnverifiedDevices === undefined) return null;\n return this.blacklistUnverifiedDevices;\n }\n\n /**\n * Get the avatar URL for a room if one was set.\n * @param baseUrl - The homeserver base URL. See\n * {@link MatrixClient#getHomeserverUrl}.\n * @param width - The desired width of the thumbnail.\n * @param height - The desired height of the thumbnail.\n * @param resizeMethod - The thumbnail resize method to use, either\n * \"crop\" or \"scale\".\n * @param allowDefault - True to allow an identicon for this room if an\n * avatar URL wasn't explicitly set. Default: true. (Deprecated)\n * @param useAuthentication - (optional) If true, the caller supports authenticated\n * media and wants an authentication-required URL. Note that server support for\n * authenticated media will not be checked - it is the caller's responsibility\n * to do so before calling this function. Note also that useAuthentication\n * implies allowRedirects. Defaults to false (unauthenticated endpoints).\n * @returns the avatar URL or null.\n */\n getAvatarUrl(baseUrl, width, height, resizeMethod) {\n var allowDefault = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var useAuthentication = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var mainUrl = this.getMxcAvatarUrl();\n if (!mainUrl && !allowDefault) {\n return null;\n }\n if (mainUrl) {\n return getHttpUriForMxc(baseUrl, mainUrl, width, height, resizeMethod, undefined, undefined, useAuthentication);\n }\n return null;\n }\n\n /**\n * Get the mxc avatar url for the room, if one was set.\n * @returns the mxc avatar url or falsy\n */\n getMxcAvatarUrl() {\n var _this$currentState$ge;\n var url = (_this$currentState$ge = this.currentState.getStateEvents(EventType.RoomAvatar, \"\")) === null || _this$currentState$ge === void 0 ? void 0 : _this$currentState$ge.getContent().url;\n return url && typeof url === \"string\" ? url : null;\n }\n\n /**\n * Get this room's canonical alias\n * The alias returned by this function may not necessarily\n * still point to this room.\n * @returns The room's canonical alias, or null if there is none\n */\n getCanonicalAlias() {\n var _this$currentState$ge2;\n var canonicalAlias = (_this$currentState$ge2 = this.currentState.getStateEvents(EventType.RoomCanonicalAlias, \"\")) === null || _this$currentState$ge2 === void 0 ? void 0 : _this$currentState$ge2.getContent().alias;\n return canonicalAlias && typeof canonicalAlias === \"string\" ? canonicalAlias : null;\n }\n\n /**\n * Get this room's alternative aliases\n * @returns The room's alternative aliases, or an empty array\n */\n getAltAliases() {\n var _this$currentState$ge3;\n var altAliases = (_this$currentState$ge3 = this.currentState.getStateEvents(EventType.RoomCanonicalAlias, \"\")) === null || _this$currentState$ge3 === void 0 ? void 0 : _this$currentState$ge3.getContent().alt_aliases;\n if (Array.isArray(altAliases)) {\n return altAliases.filter(alias => typeof alias === \"string\");\n }\n return [];\n }\n\n /**\n * Add events to a timeline\n *\n * <p>Will fire \"Room.timeline\" for each event added.\n *\n * @param events - A list of events to add.\n *\n * @param toStartOfTimeline - True to add these events to the start\n * (oldest) instead of the end (newest) of the timeline. If true, the oldest\n * event will be the <b>last</b> element of 'events'.\n *\n * @param timeline - timeline to\n * add events to.\n *\n * @param paginationToken - token for the next batch of events\n *\n * @remarks\n * Fires {@link RoomEvent.Timeline}\n */\n addEventsToTimeline(events, toStartOfTimeline, addToState, timeline, paginationToken) {\n // ALWAYS filter out any events that are past retention\n events = events.filter(e => {\n var _this$retention$shoul, _this$retention;\n return (_this$retention$shoul = (_this$retention = this.retention) === null || _this$retention === void 0 ? void 0 : _this$retention.shouldEventBeRetained(e)) !== null && _this$retention$shoul !== void 0 ? _this$retention$shoul : true;\n });\n timeline.getTimelineSet().addEventsToTimeline(events, toStartOfTimeline, addToState, timeline, paginationToken);\n }\n\n /**\n * Get the instance of the thread associated with the current event\n * @param eventId - the ID of the current event\n * @returns a thread instance if known\n */\n getThread(eventId) {\n var _this$threads$get;\n return (_this$threads$get = this.threads.get(eventId)) !== null && _this$threads$get !== void 0 ? _this$threads$get : null;\n }\n\n /**\n * Get all the known threads in the room\n */\n getThreads() {\n return Array.from(this.threads.values());\n }\n\n /**\n * Get a member from the current room state.\n * @param userId - The user ID of the member.\n * @returns The member or `null`.\n */\n getMember(userId) {\n return this.currentState.getMember(userId);\n }\n\n /**\n * Get all currently loaded members from the current\n * room state.\n * @returns Room members\n */\n getMembers() {\n return this.currentState.getMembers();\n }\n\n /**\n * Get a list of members whose membership state is \"join\".\n * @returns A list of currently joined members.\n */\n getJoinedMembers() {\n return this.getMembersWithMembership(KnownMembership.Join);\n }\n\n /**\n * Returns the number of joined members in this room\n * This method caches the result.\n * This is a wrapper around the method of the same name in roomState, returning\n * its result for the room's current state.\n * @returns The number of members in this room whose membership is 'join'\n */\n getJoinedMemberCount() {\n return this.currentState.getJoinedMemberCount();\n }\n\n /**\n * Returns the number of invited members in this room\n * @returns The number of members in this room whose membership is 'invite'\n */\n getInvitedMemberCount() {\n return this.currentState.getInvitedMemberCount();\n }\n\n /**\n * Returns the number of invited + joined members in this room\n * @returns The number of members in this room whose membership is 'invite' or 'join'\n */\n getInvitedAndJoinedMemberCount() {\n return this.getInvitedMemberCount() + this.getJoinedMemberCount();\n }\n\n /**\n * Get a list of members with given membership state.\n * @param membership - The membership state.\n * @returns A list of members with the given membership state.\n */\n getMembersWithMembership(membership) {\n return this.currentState.getMembers().filter(function (m) {\n return m.membership === membership;\n });\n }\n\n /**\n * Get a list of members we should be encrypting for in this room\n * @returns A list of members who\n * we should encrypt messages for in this room.\n */\n getEncryptionTargetMembers() {\n var _this0 = this;\n return _asyncToGenerator(function* () {\n yield _this0.loadMembersIfNeeded();\n var members = _this0.getMembersWithMembership(KnownMembership.Join);\n if (_this0.shouldEncryptForInvitedMembers()) {\n members = members.concat(_this0.getMembersWithMembership(KnownMembership.Invite));\n }\n return members;\n })();\n }\n\n /**\n * Determine whether we should encrypt messages for invited users in this room\n * @returns if we should encrypt messages for invited users\n */\n shouldEncryptForInvitedMembers() {\n var _ev$getContent;\n var ev = this.currentState.getStateEvents(EventType.RoomHistoryVisibility, \"\");\n return (ev === null || ev === void 0 || (_ev$getContent = ev.getContent()) === null || _ev$getContent === void 0 ? void 0 : _ev$getContent.history_visibility) !== \"joined\";\n }\n\n /**\n * Get the default room name (i.e. what a given user would see if the\n * room had no m.room.name)\n * @param userId - The userId from whose perspective we want\n * to calculate the default name\n * @returns The default room name\n */\n getDefaultRoomName(userId) {\n return this.calculateRoomName(userId, true);\n }\n\n /**\n * Check if the given user_id has the given membership state.\n * @param userId - The user ID to check.\n * @param membership - The membership e.g. `'join'`\n * @returns True if this user_id has the given membership state.\n */\n hasMembershipState(userId, membership) {\n var member = this.getMember(userId);\n if (!member) {\n return false;\n }\n return member.membership === membership;\n }\n\n /**\n * Add a timelineSet for this room with the given filter\n * @param filter - The filter to be applied to this timelineSet\n * @param opts - Configuration options\n * @returns The timelineSet\n */\n getOrCreateFilteredTimelineSet(filter) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$prepopulateTim = _ref10.prepopulateTimeline,\n prepopulateTimeline = _ref10$prepopulateTim === void 0 ? true : _ref10$prepopulateTim,\n _ref10$useSyncEvents = _ref10.useSyncEvents,\n useSyncEvents = _ref10$useSyncEvents === void 0 ? true : _ref10$useSyncEvents,\n _ref10$pendingEvents = _ref10.pendingEvents,\n pendingEvents = _ref10$pendingEvents === void 0 ? true : _ref10$pendingEvents;\n if (this.filteredTimelineSets[filter.filterId]) {\n return this.filteredTimelineSets[filter.filterId];\n }\n var opts = Object.assign({\n filter,\n pendingEvents\n }, this.opts);\n var timelineSet = new EventTimelineSet(this, opts);\n this.reEmitter.reEmit(timelineSet, [RoomEvent.Timeline, RoomEvent.TimelineReset]);\n if (useSyncEvents) {\n this.filteredTimelineSets[filter.filterId] = timelineSet;\n this.timelineSets.push(timelineSet);\n }\n var unfilteredLiveTimeline = this.getLiveTimeline();\n // Not all filter are possible to replicate client-side only\n // When that's the case we do not want to prepopulate from the live timeline\n // as we would get incorrect results compared to what the server would send back\n if (prepopulateTimeline) {\n // populate up the new timelineSet with filtered events from our live\n // unfiltered timeline.\n //\n // XXX: This is risky as our timeline\n // may have grown huge and so take a long time to filter.\n // see https://github.com/vector-im/vector-web/issues/2109\n\n unfilteredLiveTimeline.getEvents().forEach(function (event) {\n timelineSet.addLiveEvent(event, {\n addToState: false\n }); // Filtered timeline sets should not track state\n });\n\n // find the earliest unfiltered timeline\n var timeline = unfilteredLiveTimeline;\n while (timeline.getNeighbouringTimeline(EventTimeline.BACKWARDS)) {\n timeline = timeline.getNeighbouringTimeline(EventTimeline.BACKWARDS);\n }\n timelineSet.getLiveTimeline().setPaginationToken(timeline.getPaginationToken(EventTimeline.BACKWARDS), EventTimeline.BACKWARDS);\n } else if (useSyncEvents) {\n var livePaginationToken = unfilteredLiveTimeline.getPaginationToken(Direction.Forward);\n timelineSet.getLiveTimeline().setPaginationToken(livePaginationToken, Direction.Backward);\n }\n\n // alternatively, we could try to do something like this to try and re-paginate\n // in the filtered events from nothing, but Mark says it's an abuse of the API\n // to do so:\n //\n // timelineSet.resetLiveTimeline(\n // unfilteredLiveTimeline.getPaginationToken(EventTimeline.FORWARDS)\n // );\n\n return timelineSet;\n }\n getThreadListFilter() {\n var _arguments = arguments,\n _this1 = this;\n return _asyncToGenerator(function* () {\n var filterType = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : ThreadFilterType.All;\n var myUserId = _this1.client.getUserId();\n var filter = new Filter(myUserId);\n var definition = {\n room: {\n timeline: {\n [FILTER_RELATED_BY_REL_TYPES.name]: [THREAD_RELATION_TYPE.name]\n }\n }\n };\n if (filterType === ThreadFilterType.My) {\n definition.room.timeline[FILTER_RELATED_BY_SENDERS.name] = [myUserId];\n }\n filter.setDefinition(definition);\n var filterId = yield _this1.client.getOrCreateFilter(\"THREAD_PANEL_\".concat(_this1.roomId, \"_\").concat(filterType), filter);\n filter.filterId = filterId;\n return filter;\n })();\n }\n createThreadTimelineSet(filterType) {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n var timelineSet;\n if (Thread.hasServerSideListSupport) {\n timelineSet = new EventTimelineSet(_this10, _objectSpread(_objectSpread({}, _this10.opts), {}, {\n pendingEvents: false\n }), undefined, undefined, filterType !== null && filterType !== void 0 ? filterType : ThreadFilterType.All);\n _this10.reEmitter.reEmit(timelineSet, [RoomEvent.Timeline, RoomEvent.TimelineReset]);\n } else if (Thread.hasServerSideSupport) {\n var filter = yield _this10.getThreadListFilter(filterType);\n timelineSet = _this10.getOrCreateFilteredTimelineSet(filter, {\n prepopulateTimeline: false,\n useSyncEvents: false,\n pendingEvents: false\n });\n } else {\n timelineSet = new EventTimelineSet(_this10, {\n pendingEvents: false\n });\n Array.from(_this10.threads).forEach(_ref11 => {\n var _ref12 = _slicedToArray(_ref11, 2),\n thread = _ref12[1];\n if (thread.length === 0) return;\n var currentUserParticipated = thread.timeline.some(event => {\n return event.getSender() === _this10.client.getUserId();\n });\n if (filterType !== ThreadFilterType.My || currentUserParticipated) {\n timelineSet.getLiveTimeline().addEvent(thread.rootEvent, {\n toStartOfTimeline: false,\n addToState: false\n });\n }\n });\n }\n return timelineSet;\n })();\n }\n /**\n * Takes the given thread root events and creates threads for them.\n */\n processThreadRoots(events, toStartOfTimeline) {\n if (!this.client.supportsThreads()) return;\n for (var rootEvent of events) {\n EventTimeline.setEventMetadata(rootEvent, this.currentState, toStartOfTimeline);\n if (!this.getThread(rootEvent.getId())) {\n this.createThread(rootEvent.getId(), rootEvent, [], toStartOfTimeline);\n }\n }\n }\n\n /**\n * Fetch the bare minimum of room threads required for the thread list to work reliably.\n * With server support that means fetching one page.\n * Without server support that means fetching as much at once as the server allows us to.\n */\n fetchRoomThreads() {\n var _this11 = this;\n return _asyncToGenerator(function* () {\n if (_this11.threadsReady || !_this11.client.supportsThreads()) {\n return;\n }\n if (Thread.hasServerSideListSupport) {\n yield Promise.all([_this11.fetchRoomThreadList(ThreadFilterType.All), _this11.fetchRoomThreadList(ThreadFilterType.My)]);\n } else {\n var allThreadsFilter = yield _this11.getThreadListFilter();\n var _yield$_this11$client = yield _this11.client.createMessagesRequest(_this11.roomId, \"\", Number.MAX_SAFE_INTEGER, Direction.Backward, allThreadsFilter),\n events = _yield$_this11$client.chunk;\n if (!events.length) return;\n\n // Sorted by last_reply origin_server_ts\n var threadRoots = events.map(_this11.client.getEventMapper()).sort((eventA, eventB) => {\n /**\n * `origin_server_ts` in a decentralised world is far from ideal\n * but for lack of any better, we will have to use this\n * Long term the sorting should be handled by homeservers and this\n * is only meant as a short term patch\n */\n var threadAMetadata = eventA.getServerAggregatedRelation(THREAD_RELATION_TYPE.name);\n var threadBMetadata = eventB.getServerAggregatedRelation(THREAD_RELATION_TYPE.name);\n return threadAMetadata.latest_event.origin_server_ts - threadBMetadata.latest_event.origin_server_ts;\n });\n var latestMyThreadsRootEvent;\n var roomState = _this11.getLiveTimeline().getState(EventTimeline.FORWARDS);\n for (var rootEvent of threadRoots) {\n var _this11$threadsTimeli;\n var _opts = {\n duplicateStrategy: DuplicateStrategy.Ignore,\n fromCache: false,\n addToState: false,\n roomState\n };\n (_this11$threadsTimeli = _this11.threadsTimelineSets[0]) === null || _this11$threadsTimeli === void 0 || _this11$threadsTimeli.addLiveEvent(rootEvent, _opts);\n var threadRelationship = rootEvent.getServerAggregatedRelation(THREAD_RELATION_TYPE.name);\n if (threadRelationship !== null && threadRelationship !== void 0 && threadRelationship.current_user_participated) {\n var _this11$threadsTimeli2;\n (_this11$threadsTimeli2 = _this11.threadsTimelineSets[1]) === null || _this11$threadsTimeli2 === void 0 || _this11$threadsTimeli2.addLiveEvent(rootEvent, _opts);\n latestMyThreadsRootEvent = rootEvent;\n }\n }\n _this11.processThreadRoots(threadRoots, true);\n _this11.client.decryptEventIfNeeded(threadRoots[threadRoots.length - 1]);\n if (latestMyThreadsRootEvent) {\n _this11.client.decryptEventIfNeeded(latestMyThreadsRootEvent);\n }\n }\n _this11.on(ThreadEvent.NewReply, _this11.onThreadReply);\n _this11.on(ThreadEvent.Update, _this11.onThreadUpdate);\n _this11.on(ThreadEvent.Delete, _this11.onThreadDelete);\n _this11.threadsReady = true;\n })();\n }\n\n /**\n * Process a list of poll events.\n *\n * @param events - List of events\n */\n processPollEvents(events) {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n for (var event of events) {\n try {\n // Continue if the event is a clear text, non-poll event.\n if (!event.isEncrypted() && !isPollEvent(event)) continue;\n\n /**\n * Try to decrypt the event. Promise resolution does not guarantee a successful decryption.\n * Retry is handled in {@link processPollEvent}.\n */\n yield _this12.client.decryptEventIfNeeded(event);\n _this12.processPollEvent(event);\n } catch (err) {\n logger.warn(\"Error processing poll event\", event.getId(), err);\n }\n }\n })();\n }\n\n /**\n * Processes poll events:\n * If the event has a decryption failure, it will listen for decryption and tries again.\n * If it is a poll start event (`m.poll.start`),\n * it creates and stores a Poll model and emits a PollEvent.New event.\n * If the event is related to a poll, it will add it to the poll.\n * Noop for other cases.\n *\n * @param event - Event that could be a poll event\n */\n processPollEvent(event) {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n if (event.isDecryptionFailure()) {\n event.once(MatrixEventEvent.Decrypted, maybeDecryptedEvent => {\n _this13.processPollEvent(maybeDecryptedEvent);\n });\n return;\n }\n if (M_POLL_START.matches(event.getType())) {\n try {\n var poll = new Poll(event, _this13.client, _this13);\n _this13.polls.set(event.getId(), poll);\n _this13.emit(PollEvent.New, poll);\n\n // remove the poll when redacted\n event.once(MatrixEventEvent.BeforeRedaction, redactedEvent => {\n _this13.polls.delete(redactedEvent.getId());\n });\n } catch (_unused3) {}\n // poll creation can fail for malformed poll start events\n return;\n }\n var relationEventId = event.relationEventId;\n if (relationEventId && _this13.polls.has(relationEventId)) {\n var _poll = _this13.polls.get(relationEventId);\n _poll === null || _poll === void 0 || _poll.onNewRelation(event);\n }\n })();\n }\n\n /**\n * Fetch a single page of threadlist messages for the specific thread filter\n * @internal\n */\n fetchRoomThreadList(filter) {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n if (!_this14.client.supportsThreads()) return;\n if (_this14.threadsTimelineSets.length === 0) return;\n var timelineSet = filter === ThreadFilterType.My ? _this14.threadsTimelineSets[1] : _this14.threadsTimelineSets[0];\n var _yield$_this14$client = yield _this14.client.createThreadListMessagesRequest(_this14.roomId, null, undefined, Direction.Backward, timelineSet.threadListType, timelineSet.getFilter()),\n events = _yield$_this14$client.chunk,\n end = _yield$_this14$client.end;\n timelineSet.getLiveTimeline().setPaginationToken(end !== null && end !== void 0 ? end : null, Direction.Backward);\n if (!events.length) return;\n var matrixEvents = events.map(_this14.client.getEventMapper());\n _this14.processThreadRoots(matrixEvents, true);\n var roomState = _this14.getLiveTimeline().getState(EventTimeline.FORWARDS);\n for (var rootEvent of matrixEvents) {\n timelineSet.addLiveEvent(rootEvent, {\n duplicateStrategy: DuplicateStrategy.Replace,\n fromCache: false,\n roomState,\n addToState: false\n });\n }\n })();\n }\n onThreadUpdate(thread) {\n this.updateThreadRootEvents(thread, false, false);\n }\n onThreadReply(thread) {\n this.updateThreadRootEvents(thread, false, true);\n }\n onThreadDelete(thread) {\n var _timeline$getEvents;\n this.threads.delete(thread.id);\n var timeline = this.getTimelineForEvent(thread.id);\n var roomEvent = timeline === null || timeline === void 0 || (_timeline$getEvents = timeline.getEvents()) === null || _timeline$getEvents === void 0 ? void 0 : _timeline$getEvents.find(it => it.getId() === thread.id);\n if (roomEvent) {\n thread.clearEventMetadata(roomEvent);\n } else {\n logger.debug(\"onThreadDelete: Could not find root event in room timeline\");\n }\n for (var timelineSet of this.threadsTimelineSets) {\n timelineSet.removeEvent(thread.id);\n }\n }\n\n /**\n * Forget the timelineSet for this room with the given filter\n *\n * @param filter - the filter whose timelineSet is to be forgotten\n */\n removeFilteredTimelineSet(filter) {\n var timelineSet = this.filteredTimelineSets[filter.filterId];\n delete this.filteredTimelineSets[filter.filterId];\n var i = this.timelineSets.indexOf(timelineSet);\n if (i > -1) {\n this.timelineSets.splice(i, 1);\n }\n }\n\n /**\n * Determine which timeline(s) a given event should live in\n * Thread roots live in both the main timeline and their corresponding thread timeline\n * Relations, redactions, replies to thread relation events live only in the thread timeline\n * Relations (other than m.thread), redactions, replies to a thread root live only in the main timeline\n * Relations, redactions, replies where the parent cannot be found live in no timelines but should be aggregated regardless.\n * Otherwise, the event lives in the main timeline only.\n *\n * Note: when a redaction is applied, the redacted event, events relating\n * to it, and the redaction event itself, will all move to the main thread.\n * This method classifies them as inside the thread of the redacted event.\n * They are moved later as part of makeRedacted.\n * This will change if MSC3389 is merged.\n */\n eventShouldLiveIn(event, events, roots) {\n var _this$client2;\n if (!((_this$client2 = this.client) !== null && _this$client2 !== void 0 && _this$client2.supportsThreads())) {\n return {\n shouldLiveInRoom: true,\n shouldLiveInThread: false\n };\n }\n\n // A thread root is the only event shown in both timelines\n if (event.isThreadRoot || roots !== null && roots !== void 0 && roots.has(event.getId())) {\n return {\n shouldLiveInRoom: true,\n shouldLiveInThread: true,\n threadId: event.getId()\n };\n }\n var isThreadRelation = event.isRelation(THREAD_RELATION_TYPE.name);\n var parentEventId = event.getAssociatedId();\n var threadRootId = event.threadRootId;\n\n // Where the parent is the thread root and this is a non-thread relation this should live only in the main timeline\n if (!!parentEventId && !isThreadRelation && (threadRootId === parentEventId || roots !== null && roots !== void 0 && roots.has(parentEventId))) {\n return {\n shouldLiveInRoom: true,\n shouldLiveInThread: false\n };\n }\n var parentEvent;\n if (parentEventId) {\n var _this$findEventById;\n parentEvent = (_this$findEventById = this.findEventById(parentEventId)) !== null && _this$findEventById !== void 0 ? _this$findEventById : events === null || events === void 0 ? void 0 : events.find(e => e.getId() === parentEventId);\n }\n\n // Treat non-thread-relations, redactions, and replies as extensions of their parents so evaluate parentEvent instead\n if (parentEvent && !isThreadRelation) {\n return this.eventShouldLiveIn(parentEvent, events, roots);\n }\n\n // A thread relation (1st and 2nd order) is always only shown in a thread\n if (threadRootId != undefined) {\n return {\n shouldLiveInRoom: false,\n shouldLiveInThread: true,\n threadId: threadRootId\n };\n }\n\n // Due to replies not being typical relations and being used as fallbacks for threads relations\n // If we bypass the if case above then we know we are not a thread, so if we are still a reply\n // then we know that we must be in the main timeline. Same goes if we have no associated parent event.\n if (!parentEventId || !!event.replyEventId) {\n return {\n shouldLiveInRoom: true,\n shouldLiveInThread: false\n };\n }\n\n // We've exhausted all scenarios,\n // we cannot assume that it lives in the main timeline as this may be a relation for an unknown thread\n // adding the event in the wrong timeline causes stuck notifications and can break ability to send read receipts\n return {\n shouldLiveInRoom: false,\n shouldLiveInThread: false\n };\n }\n findThreadForEvent(event) {\n if (!event) return null;\n var _this$eventShouldLive = this.eventShouldLiveIn(event),\n threadId = _this$eventShouldLive.threadId;\n return threadId ? this.getThread(threadId) : null;\n }\n addThreadedEvents(threadId, events) {\n var toStartOfTimeline = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var thread = this.getThread(threadId);\n if (thread) {\n thread.addEvents(events, toStartOfTimeline);\n } else {\n var _this$findEventById2;\n var rootEvent = (_this$findEventById2 = this.findEventById(threadId)) !== null && _this$findEventById2 !== void 0 ? _this$findEventById2 : events.find(e => e.getId() === threadId);\n this.createThread(threadId, rootEvent, events, toStartOfTimeline);\n }\n }\n\n /**\n * Adds events to a thread's timeline. Will fire \"Thread.update\"\n */\n processThreadedEvents(events, toStartOfTimeline) {\n // ALWAYS filter out any events that are past retention\n events = events.filter(e => {\n var _this$retention$shoul2, _this$retention2;\n return (_this$retention$shoul2 = (_this$retention2 = this.retention) === null || _this$retention2 === void 0 ? void 0 : _this$retention2.shouldEventBeRetained(e)) !== null && _this$retention$shoul2 !== void 0 ? _this$retention$shoul2 : true;\n });\n events.forEach(this.tryApplyRedaction);\n var eventsByThread = {};\n for (var event of events) {\n var _eventsByThread;\n var _this$eventShouldLive2 = this.eventShouldLiveIn(event),\n threadId = _this$eventShouldLive2.threadId,\n shouldLiveInThread = _this$eventShouldLive2.shouldLiveInThread;\n if (shouldLiveInThread && !eventsByThread[threadId]) {\n eventsByThread[threadId] = [];\n }\n (_eventsByThread = eventsByThread[threadId]) === null || _eventsByThread === void 0 || _eventsByThread.push(event);\n }\n Object.entries(eventsByThread).map(_ref13 => {\n var _ref14 = _slicedToArray(_ref13, 2),\n threadId = _ref14[0],\n threadEvents = _ref14[1];\n return this.addThreadedEvents(threadId, threadEvents, toStartOfTimeline);\n });\n }\n createThread(threadId, rootEvent) {\n var _this$cachedThreadRea;\n var events = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var toStartOfTimeline = arguments.length > 3 ? arguments[3] : undefined;\n if (this.threads.has(threadId)) {\n return this.threads.get(threadId);\n }\n if (rootEvent) {\n var relatedEvents = this.relations.getAllChildEventsForEvent(rootEvent.getId());\n if (relatedEvents !== null && relatedEvents !== void 0 && relatedEvents.length) {\n // Include all relations of the root event, given it'll be visible in both timelines,\n // except `m.replace` as that will already be applied atop the event using `MatrixEvent::makeReplaced`\n events = events.concat(relatedEvents.filter(e => !e.isRelation(RelationType.Replace)));\n }\n }\n var thread = new Thread(threadId, rootEvent, {\n room: this,\n client: this.client,\n pendingEventOrdering: this.opts.pendingEventOrdering,\n receipts: (_this$cachedThreadRea = this.cachedThreadReadReceipts.get(threadId)) !== null && _this$cachedThreadRea !== void 0 ? _this$cachedThreadRea : []\n });\n\n // Add the re-emitter before we start adding events to the thread so we don't miss events\n this.reEmitter.reEmit(thread, [ThreadEvent.Delete, ThreadEvent.Update, ThreadEvent.NewReply, RoomEvent.Timeline, RoomEvent.TimelineReset]);\n\n // All read receipts should now come down from sync, we do not need to keep\n // a reference to the cached receipts anymore.\n this.cachedThreadReadReceipts.delete(threadId);\n\n // If we managed to create a thread and figure out its `id` then we can use it\n // This has to happen before thread.addEvents, because that adds events to the eventtimeline, and the\n // eventtimeline sometimes looks up thread information via the room.\n this.threads.set(thread.id, thread);\n\n // This is necessary to be able to jump to events in threads:\n // If we jump to an event in a thread where neither the event, nor the root,\n // nor any thread event are loaded yet, we'll load the event as well as the thread root, create the thread,\n // and pass the event through this.\n thread.addEvents(events, false);\n\n // We need to update the thread root events, but the thread may not be ready yet.\n // If it isn't, it will fire ThreadEvent.Update when it is and we'll call updateThreadRootEvents then.\n if (this.threadsReady && thread.initialEventsFetched) {\n this.updateThreadRootEvents(thread, toStartOfTimeline, false);\n }\n this.emit(ThreadEvent.New, thread, toStartOfTimeline);\n return thread;\n }\n\n /**\n * Applies an event as a redaction of another event, regardless of whether the redacting\n * event is actually a redaction.\n *\n * Callers should use tryApplyRedaction instead.\n *\n * @param redactionEvent The event which redacts an event.\n * @param redactedEvent The event being redacted.\n * @private\n */\n applyEventAsRedaction(redactionEvent, redactedEvent) {\n var threadRootId = redactedEvent.threadRootId;\n redactedEvent.makeRedacted(redactionEvent, this);\n\n // If this is in the current state, replace it with the redacted version\n if (redactedEvent.isState()) {\n var currentStateEvent = this.currentState.getStateEvents(redactedEvent.getType(), redactedEvent.getStateKey());\n if ((currentStateEvent === null || currentStateEvent === void 0 ? void 0 : currentStateEvent.getId()) === redactedEvent.getId()) {\n this.currentState.setStateEvents([redactedEvent]);\n }\n }\n this.emit(RoomEvent.Redaction, redactionEvent, this, threadRootId);\n\n // TODO: we stash user displaynames (among other things) in\n // RoomMember objects which are then attached to other events\n // (in the sender and target fields). We should get those\n // RoomMember objects to update themselves when the events that\n // they are based on are changed.\n\n // Remove any visibility change on this event.\n this.visibilityEvents.delete(redactedEvent.getId());\n\n // If this event is a visibility change event, remove it from the\n // list of visibility changes and update any event affected by it.\n if (redactedEvent.isVisibilityEvent()) {\n this.redactVisibilityChangeEvent(redactionEvent);\n }\n }\n processLiveEvent(event) {\n this.tryApplyRedaction(event);\n\n // Implement MSC3531: hiding messages.\n if (event.isVisibilityEvent()) {\n // This event changes the visibility of another event, record\n // the visibility change, inform clients if necessary.\n this.applyNewVisibilityEvent(event);\n }\n // If any pending visibility change is waiting for this (older) event,\n this.applyPendingVisibilityEvents(event);\n\n // Sliding Sync modifications:\n // The proxy cannot guarantee every sent event will have a transaction_id field, so we need\n // to check the event ID against the list of pending events if there is no transaction ID\n // field. Only do this for events sent by us though as it's potentially expensive to loop\n // the pending events map.\n var txnId = event.getUnsigned().transaction_id;\n if (!txnId && event.getSender() === this.myUserId) {\n // check the txn map for a matching event ID\n for (var _ref17 of this.txnToEvent) {\n var _ref16 = _slicedToArray(_ref17, 2);\n var tid = _ref16[0];\n var localEvent = _ref16[1];\n if (localEvent.getId() === event.getId()) {\n logger.debug(\"processLiveEvent: found sent event without txn ID: \", tid, event.getId());\n // update the unsigned field so we can re-use the same codepaths\n var unsigned = event.getUnsigned();\n unsigned.transaction_id = tid;\n event.setUnsigned(unsigned);\n break;\n }\n }\n }\n }\n\n /**\n * Add an event to the end of this room's live timelines. Will fire\n * \"Room.timeline\".\n *\n * @param event - Event to be added\n * @param addLiveEventOptions - addLiveEvent options\n * @internal\n *\n * @remarks\n * Fires {@link RoomEvent.Timeline}\n */\n addLiveEvent(event, addLiveEventOptions) {\n var duplicateStrategy = addLiveEventOptions.duplicateStrategy,\n timelineWasEmpty = addLiveEventOptions.timelineWasEmpty,\n fromCache = addLiveEventOptions.fromCache,\n addToState = addLiveEventOptions.addToState;\n\n // add to our timeline sets\n for (var timelineSet of this.timelineSets) {\n timelineSet.addLiveEvent(event, {\n duplicateStrategy,\n fromCache,\n timelineWasEmpty,\n addToState\n });\n }\n\n // synthesize and inject implicit read receipts\n // Done after adding the event because otherwise the app would get a read receipt\n // pointing to an event that wasn't yet in the timeline\n // Don't synthesize RR for m.room.redaction as this causes the RR to go missing.\n if (event.sender && event.getType() !== EventType.RoomRedaction) {\n this.addReceipt(synthesizeReceipt(event.sender.userId, event, ReceiptType.Read), true);\n\n // Any live events from a user could be taken as implicit\n // presence information: evidence that they are currently active.\n // ...except in a world where we use 'user.currentlyActive' to reduce\n // presence spam, this isn't very useful - we'll get a transition when\n // they are no longer currently active anyway. So don't bother to\n // reset the lastActiveAgo and lastPresenceTs from the RoomState's user.\n }\n }\n\n /**\n * Add a pending outgoing event to this room.\n *\n * <p>The event is added to either the pendingEventList, or the live timeline,\n * depending on the setting of opts.pendingEventOrdering.\n *\n * <p>This is an internal method, intended for use by MatrixClient.\n *\n * @param event - The event to add.\n *\n * @param txnId - Transaction id for this outgoing event\n *\n * @throws if the event doesn't have status SENDING, or we aren't given a\n * unique transaction id.\n *\n * @remarks\n * Fires {@link RoomEvent.LocalEchoUpdated}\n */\n addPendingEvent(event, txnId) {\n if (event.status !== EventStatus.SENDING && event.status !== EventStatus.NOT_SENT) {\n throw new Error(\"addPendingEvent called on an event with status \" + event.status);\n }\n if (this.txnToEvent.get(txnId)) {\n throw new Error(\"addPendingEvent called on an event with known txnId \" + txnId);\n }\n\n // call setEventMetadata to set up event.sender etc\n // as event is shared over all timelineSets, we set up its metadata based\n // on the unfiltered timelineSet.\n EventTimeline.setEventMetadata(event, this.getLiveTimeline().getState(EventTimeline.FORWARDS), false);\n this.txnToEvent.set(txnId, event);\n if (this.pendingEventList) {\n if (this.pendingEventList.some(e => e.status === EventStatus.NOT_SENT)) {\n logger.warn(\"Setting event as NOT_SENT due to messages in the same state\");\n event.setStatus(EventStatus.NOT_SENT);\n }\n this.pendingEventList.push(event);\n this.savePendingEvents();\n if (event.isRelation()) {\n // For pending events, add them to the relations collection immediately.\n // (The alternate case below already covers this as part of adding to\n // the timeline set.)\n this.aggregateNonLiveRelation(event);\n }\n if (event.isRedaction()) {\n var redactId = event.event.redacts;\n var redactedEvent = this.pendingEventList.find(e => e.getId() === redactId);\n if (!redactedEvent && redactId) {\n redactedEvent = this.findEventById(redactId);\n }\n if (redactedEvent) {\n redactedEvent.markLocallyRedacted(event);\n this.emit(RoomEvent.Redaction, event, this, redactedEvent.threadRootId);\n }\n }\n } else {\n for (var timelineSet of this.timelineSets) {\n if (timelineSet.getFilter()) {\n if (timelineSet.getFilter().filterRoomTimeline([event]).length) {\n timelineSet.addEventToTimeline(event, timelineSet.getLiveTimeline(), {\n toStartOfTimeline: false,\n addToState: false // We don't support localEcho of state events yet\n });\n }\n } else {\n timelineSet.addEventToTimeline(event, timelineSet.getLiveTimeline(), {\n toStartOfTimeline: false,\n addToState: false // We don't support localEcho of state events yet\n });\n }\n }\n }\n this.emit(RoomEvent.LocalEchoUpdated, event, this);\n }\n\n /**\n * Persists all pending events to local storage\n *\n * If the current room is encrypted only encrypted events will be persisted\n * all messages that are not yet encrypted will be discarded\n *\n * This is because the flow of EVENT_STATUS transition is\n * `queued => sending => encrypting => sending => sent`\n *\n * Steps 3 and 4 are skipped for unencrypted room.\n * It is better to discard an unencrypted message rather than persisting\n * it locally for everyone to read\n */\n savePendingEvents() {\n if (this.pendingEventList) {\n var pendingEvents = this.pendingEventList.map(event => {\n return _objectSpread(_objectSpread({}, event.event), {}, {\n txn_id: event.getTxnId()\n });\n }).filter(event => {\n // Filter out the unencrypted messages if the room is encrypted\n var isEventEncrypted = event.type === EventType.RoomMessageEncrypted;\n var isRoomEncrypted = this.hasEncryptionStateEvent();\n return isEventEncrypted || !isRoomEncrypted;\n });\n this.client.store.setPendingEvents(this.roomId, pendingEvents);\n }\n }\n\n /**\n * Used to aggregate the local echo for a relation, and also\n * for re-applying a relation after it's redaction has been cancelled,\n * as the local echo for the redaction of the relation would have\n * un-aggregated the relation. Note that this is different from regular messages,\n * which are just kept detached for their local echo.\n *\n * Also note that live events are aggregated in the live EventTimelineSet.\n * @param event - the relation event that needs to be aggregated.\n */\n aggregateNonLiveRelation(event) {\n this.relations.aggregateChildEvent(event);\n }\n getEventForTxnId(txnId) {\n return this.txnToEvent.get(txnId);\n }\n\n /**\n * Deal with the echo of a message we sent.\n *\n * <p>We move the event to the live timeline if it isn't there already, and\n * update it.\n *\n * @param remoteEvent - The event received from\n * /sync\n * @param localEvent - The local echo, which\n * should be either in the pendingEventList or the timeline.\n *\n * @internal\n *\n * @remarks\n * Fires {@link RoomEvent.LocalEchoUpdated}\n */\n handleRemoteEcho(remoteEvent, localEvent) {\n var oldEventId = localEvent.getId();\n var newEventId = remoteEvent.getId();\n var oldStatus = localEvent.status;\n logger.debug(\"Got remote echo for event \".concat(oldEventId, \" -> \").concat(newEventId, \" old status \").concat(oldStatus));\n\n // no longer pending\n this.txnToEvent.delete(remoteEvent.getUnsigned().transaction_id);\n\n // if it's in the pending list, remove it\n if (this.pendingEventList) {\n this.removePendingEvent(oldEventId);\n }\n\n // replace the event source (this will preserve the plaintext payload if\n // any, which is good, because we don't want to try decoding it again).\n localEvent.handleRemoteEcho(remoteEvent.event);\n var _this$eventShouldLive3 = this.eventShouldLiveIn(remoteEvent),\n shouldLiveInRoom = _this$eventShouldLive3.shouldLiveInRoom,\n threadId = _this$eventShouldLive3.threadId;\n var thread = threadId ? this.getThread(threadId) : null;\n thread === null || thread === void 0 || thread.setEventMetadata(localEvent);\n thread === null || thread === void 0 || thread.timelineSet.handleRemoteEcho(localEvent, oldEventId, newEventId);\n if (shouldLiveInRoom) {\n for (var timelineSet of this.timelineSets) {\n // if it's already in the timeline, update the timeline map. If it's not, add it.\n timelineSet.handleRemoteEcho(localEvent, oldEventId, newEventId);\n }\n }\n this.emit(RoomEvent.LocalEchoUpdated, localEvent, this, oldEventId, oldStatus);\n }\n\n /**\n * Update the status / event id on a pending event, to reflect its transmission\n * progress.\n *\n * <p>This is an internal method.\n *\n * @param event - local echo event\n * @param newStatus - status to assign\n * @param newEventId - new event id to assign. Ignored unless newStatus == EventStatus.SENT.\n *\n * @remarks\n * Fires {@link RoomEvent.LocalEchoUpdated}\n */\n updatePendingEvent(event, newStatus, newEventId) {\n logger.log(\"setting pendingEvent status to \".concat(newStatus, \" in \").concat(event.getRoomId(), \" \") + \"event ID \".concat(event.getId(), \" -> \").concat(newEventId));\n\n // if the message was sent, we expect an event id\n if (newStatus == EventStatus.SENT && !newEventId) {\n throw new Error(\"updatePendingEvent called with status=SENT, but no new event id\");\n }\n\n // SENT races against /sync, so we have to special-case it.\n if (newStatus == EventStatus.SENT) {\n var timeline = this.getTimelineForEvent(newEventId);\n if (timeline) {\n // we've already received the event via the event stream.\n // nothing more to do here, assuming the transaction ID was correctly matched.\n // Let's check that.\n var remoteEvent = this.findEventById(newEventId);\n var remoteTxnId = remoteEvent === null || remoteEvent === void 0 ? void 0 : remoteEvent.getUnsigned().transaction_id;\n if (!remoteTxnId && remoteEvent) {\n // This code path is mostly relevant for the Sliding Sync proxy.\n // The remote event did not contain a transaction ID, so we did not handle\n // the remote echo yet. Handle it now.\n var unsigned = remoteEvent.getUnsigned();\n unsigned.transaction_id = event.getTxnId();\n remoteEvent.setUnsigned(unsigned);\n // the remote event is _already_ in the timeline, so we need to remove it so\n // we can convert the local event into the final event.\n this.removeEvent(remoteEvent.getId());\n this.handleRemoteEcho(remoteEvent, event);\n }\n return;\n }\n }\n var oldStatus = event.status;\n var oldEventId = event.getId();\n if (!oldStatus) {\n throw new Error(\"updatePendingEventStatus called on an event which is not a local echo.\");\n }\n var allowed = ALLOWED_TRANSITIONS[oldStatus];\n if (!(allowed !== null && allowed !== void 0 && allowed.includes(newStatus))) {\n throw new Error(\"Invalid EventStatus transition \".concat(oldStatus, \"->\").concat(newStatus));\n }\n event.setStatus(newStatus);\n if (newStatus == EventStatus.SENT) {\n // update the event id\n event.replaceLocalEventId(newEventId);\n var _this$eventShouldLive4 = this.eventShouldLiveIn(event),\n shouldLiveInRoom = _this$eventShouldLive4.shouldLiveInRoom,\n threadId = _this$eventShouldLive4.threadId;\n var thread = threadId ? this.getThread(threadId) : undefined;\n thread === null || thread === void 0 || thread.setEventMetadata(event);\n thread === null || thread === void 0 || thread.timelineSet.replaceEventId(oldEventId, newEventId);\n if (shouldLiveInRoom) {\n // if the event was already in the timeline (which will be the case if\n // opts.pendingEventOrdering==chronological), we need to update the\n // timeline map.\n for (var timelineSet of this.timelineSets) {\n timelineSet.replaceEventId(oldEventId, newEventId);\n }\n }\n } else if (newStatus == EventStatus.CANCELLED) {\n // remove it from the pending event list, or the timeline.\n if (this.pendingEventList) {\n var removedEvent = this.getPendingEvent(oldEventId);\n this.removePendingEvent(oldEventId);\n if (removedEvent !== null && removedEvent !== void 0 && removedEvent.isRedaction()) {\n this.revertRedactionLocalEcho(removedEvent);\n }\n }\n this.removeEvent(oldEventId);\n }\n this.savePendingEvents();\n this.emit(RoomEvent.LocalEchoUpdated, event, this, oldEventId, oldStatus);\n }\n revertRedactionLocalEcho(redactionEvent) {\n var redactId = redactionEvent.event.redacts;\n if (!redactId) {\n return;\n }\n var redactedEvent = this.getUnfilteredTimelineSet().findEventById(redactId);\n if (redactedEvent) {\n redactedEvent.unmarkLocallyRedacted();\n // re-render after undoing redaction\n this.emit(RoomEvent.RedactionCancelled, redactionEvent, this);\n // reapply relation now redaction failed\n if (redactedEvent.isRelation()) {\n this.aggregateNonLiveRelation(redactedEvent);\n }\n }\n }\n assertTimelineSetsAreLive() {\n for (var i = 0; i < this.timelineSets.length; i++) {\n var liveTimeline = this.timelineSets[i].getLiveTimeline();\n if (liveTimeline.getPaginationToken(EventTimeline.FORWARDS)) {\n throw new Error(\"live timeline \" + i + \" is no longer live - it has a pagination token \" + \"(\" + liveTimeline.getPaginationToken(EventTimeline.FORWARDS) + \")\");\n }\n if (liveTimeline.getNeighbouringTimeline(EventTimeline.FORWARDS)) {\n throw new Error(\"live timeline \".concat(i, \" is no longer live - it has a neighbouring timeline\"));\n }\n }\n }\n\n /**\n * Add some events to this room. This can include state events, message\n * events and typing notifications. These events are treated as \"live\" so\n * they will go to the end of the timeline.\n *\n * @param events - A list of events to add.\n * @param addLiveEventOptions - addLiveEvent options\n * @throws If `duplicateStrategy` is not falsey, 'replace' or 'ignore'.\n */\n addLiveEvents(events, addLiveEventOptions) {\n var _this15 = this;\n return _asyncToGenerator(function* () {\n var duplicateStrategy = addLiveEventOptions.duplicateStrategy,\n fromCache = addLiveEventOptions.fromCache,\n _addLiveEventOptions$ = addLiveEventOptions.timelineWasEmpty,\n timelineWasEmpty = _addLiveEventOptions$ === void 0 ? false : _addLiveEventOptions$,\n addToState = addLiveEventOptions.addToState;\n if (duplicateStrategy && [\"replace\", \"ignore\"].indexOf(duplicateStrategy) === -1) {\n throw new Error(\"duplicateStrategy MUST be either 'replace' or 'ignore'\");\n }\n\n // ALWAYS filter out any events that are past retention\n events = events.filter(e => {\n var _this15$retention$sho, _this15$retention;\n return (_this15$retention$sho = (_this15$retention = _this15.retention) === null || _this15$retention === void 0 ? void 0 : _this15$retention.shouldEventBeRetained(e)) !== null && _this15$retention$sho !== void 0 ? _this15$retention$sho : true;\n });\n\n // sanity check that the live timeline is still live\n _this15.assertTimelineSetsAreLive();\n var threadRoots = _this15.findThreadRoots(events);\n var eventsByThread = {};\n var options = {\n duplicateStrategy,\n fromCache,\n timelineWasEmpty,\n addToState\n };\n\n // List of extra events to check for being parents of any relations encountered\n var neighbouringEvents = [...events];\n for (var event of events) {\n var _eventsByThread$threa;\n // TODO: We should have a filter to say \"only add state event types X Y Z to the timeline\".\n _this15.processLiveEvent(event);\n if (event.getUnsigned().transaction_id) {\n var existingEvent = _this15.txnToEvent.get(event.getUnsigned().transaction_id);\n if (existingEvent) {\n // remote echo of an event we sent earlier\n _this15.handleRemoteEcho(event, existingEvent);\n continue; // we can skip adding the event to the timeline sets, it is already there\n }\n }\n var _this15$eventShouldLi = _this15.eventShouldLiveIn(event, neighbouringEvents, threadRoots),\n shouldLiveInRoom = _this15$eventShouldLi.shouldLiveInRoom,\n shouldLiveInThread = _this15$eventShouldLi.shouldLiveInThread,\n _this15$eventShouldLi2 = _this15$eventShouldLi.threadId,\n threadId = _this15$eventShouldLi2 === void 0 ? \"\" : _this15$eventShouldLi2;\n if (!shouldLiveInThread && !shouldLiveInRoom && event.isRelation()) {\n try {\n var parentEvent = new MatrixEvent(yield _this15.client.fetchRoomEvent(_this15.roomId, event.relationEventId));\n neighbouringEvents.push(parentEvent);\n if (parentEvent.threadRootId) {\n threadRoots.add(parentEvent.threadRootId);\n var unsigned = event.getUnsigned();\n unsigned[UNSIGNED_THREAD_ID_FIELD.name] = parentEvent.threadRootId;\n event.setUnsigned(unsigned);\n }\n var _this15$eventShouldLi3 = _this15.eventShouldLiveIn(event, neighbouringEvents, threadRoots);\n shouldLiveInRoom = _this15$eventShouldLi3.shouldLiveInRoom;\n shouldLiveInThread = _this15$eventShouldLi3.shouldLiveInThread;\n var _this15$eventShouldLi4 = _this15$eventShouldLi3.threadId;\n threadId = _this15$eventShouldLi4 === void 0 ? \"\" : _this15$eventShouldLi4;\n } catch (e) {\n logger.error(\"Failed to load parent event of unhandled relation\", e);\n }\n }\n if (shouldLiveInThread && !eventsByThread[threadId]) {\n eventsByThread[threadId] = [];\n }\n (_eventsByThread$threa = eventsByThread[threadId]) === null || _eventsByThread$threa === void 0 || _eventsByThread$threa.push(event);\n if (shouldLiveInRoom) {\n _this15.addLiveEvent(event, options);\n } else if (!shouldLiveInThread && event.isRelation()) {\n _this15.relations.aggregateChildEvent(event);\n }\n }\n Object.entries(eventsByThread).forEach(_ref18 => {\n var _ref19 = _slicedToArray(_ref18, 2),\n threadId = _ref19[0],\n threadEvents = _ref19[1];\n _this15.addThreadedEvents(threadId, threadEvents, false);\n });\n })();\n }\n partitionThreadedEvents(events) {\n // Indices to the events array, for readability\n var ROOM = 0;\n var THREAD = 1;\n var UNKNOWN_RELATION = 2;\n if (this.client.supportsThreads()) {\n var threadRoots = this.findThreadRoots(events);\n return events.reduce((memo, event) => {\n var _this$eventShouldLive5 = this.eventShouldLiveIn(event, events, threadRoots),\n shouldLiveInRoom = _this$eventShouldLive5.shouldLiveInRoom,\n shouldLiveInThread = _this$eventShouldLive5.shouldLiveInThread,\n threadId = _this$eventShouldLive5.threadId;\n if (shouldLiveInRoom) {\n memo[ROOM].push(event);\n }\n if (shouldLiveInThread) {\n event.setThreadId(threadId !== null && threadId !== void 0 ? threadId : \"\");\n memo[THREAD].push(event);\n }\n if (!shouldLiveInThread && !shouldLiveInRoom) {\n memo[UNKNOWN_RELATION].push(event);\n }\n return memo;\n }, [[], [], []]);\n } else {\n // When `threadSupport` is disabled treat all events as timelineEvents\n return [events, [], []];\n }\n }\n\n /**\n * Given some events, find the IDs of all the thread roots that are referred to by them.\n */\n findThreadRoots(events) {\n var threadRoots = new Set();\n for (var event of events) {\n var threadRootId = event.threadRootId;\n if (threadRootId != undefined) {\n threadRoots.add(threadRootId);\n }\n }\n return threadRoots;\n }\n\n /**\n * Add a receipt event to the room.\n * @param event - The m.receipt event.\n * @param synthetic - True if this event is implicit.\n */\n addReceipt(event) {\n var synthetic = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var content = event.getContent();\n this.roomReceipts.add(content, synthetic);\n\n // TODO: delete the following code when it has been replaced by RoomReceipts\n Object.keys(content).forEach(eventId => {\n Object.keys(content[eventId]).forEach(receiptType => {\n Object.keys(content[eventId][receiptType]).forEach(userId => {\n var _receipt$thread_id, _this$unthreadedRecei, _this$unthreadedRecei2;\n var receipt = content[eventId][receiptType][userId];\n var receiptForMainTimeline = !receipt.thread_id || receipt.thread_id === MAIN_ROOM_TIMELINE;\n var receiptDestination = receiptForMainTimeline ? this : this.threads.get((_receipt$thread_id = receipt.thread_id) !== null && _receipt$thread_id !== void 0 ? _receipt$thread_id : \"\");\n if (receiptDestination) {\n receiptDestination.addReceiptToStructure(eventId, receiptType, userId, receipt, synthetic);\n\n // If the read receipt sent for the logged in user matches\n // the last event of the live timeline, then we know for a fact\n // that the user has read that message, so we can mark the room\n // as read and not wait for the remote echo from synapse.\n //\n // This needs to be done after the initial sync as we do not want this\n // logic to run whilst the room is being initialised\n //\n // We only do this for non-synthetic receipts, because\n // our intention is to do this when the user really did\n // just read a message, not when we are e.g. receiving\n // an event during the sync. More explanation at:\n // https://github.com/matrix-org/matrix-js-sdk/issues/3684\n if (!synthetic && this.client.isInitialSyncComplete() && userId === this.client.getUserId()) {\n var lastEvent = receiptDestination.timeline[receiptDestination.timeline.length - 1];\n if (lastEvent && eventId === lastEvent.getId() && userId === lastEvent.getSender()) {\n receiptDestination.setUnread(NotificationCountType.Total, 0);\n receiptDestination.setUnread(NotificationCountType.Highlight, 0);\n }\n }\n } else {\n var _this$cachedThreadRea2;\n // The thread does not exist locally, keep the read receipt\n // in a cache locally, and re-apply the `addReceipt` logic\n // when the thread is created\n this.cachedThreadReadReceipts.set(receipt.thread_id, [...((_this$cachedThreadRea2 = this.cachedThreadReadReceipts.get(receipt.thread_id)) !== null && _this$cachedThreadRea2 !== void 0 ? _this$cachedThreadRea2 : []), {\n eventId,\n receiptType,\n userId,\n receipt,\n synthetic\n }]);\n }\n var me = this.client.getUserId();\n // Track the time of the current user's oldest threaded receipt in the room.\n if (userId === me && !receiptForMainTimeline && receipt.ts < this.oldestThreadedReceiptTs) {\n this.oldestThreadedReceiptTs = receipt.ts;\n }\n\n // Track each user's unthreaded read receipt.\n if (!receipt.thread_id && receipt.ts > ((_this$unthreadedRecei = (_this$unthreadedRecei2 = this.unthreadedReceipts.get(userId)) === null || _this$unthreadedRecei2 === void 0 ? void 0 : _this$unthreadedRecei2.ts) !== null && _this$unthreadedRecei !== void 0 ? _this$unthreadedRecei : 0)) {\n this.unthreadedReceipts.set(userId, receipt);\n }\n });\n });\n });\n // End of code to delete when replaced by RoomReceipts\n\n // send events after we've regenerated the structure & cache, otherwise things that\n // listened for the event would read stale data.\n this.emit(RoomEvent.Receipt, event, this);\n }\n\n /**\n * Adds/handles ephemeral events such as typing notifications and read receipts.\n * @param events - A list of events to process\n */\n addEphemeralEvents(events) {\n for (var event of events) {\n if (event.getType() === EventType.Typing) {\n this.currentState.setTypingEvent(event);\n } else if (event.getType() === EventType.Receipt) {\n this.addReceipt(event);\n } // else ignore - life is too short for us to care about these events\n }\n }\n\n /**\n * Removes events from this room.\n * @param eventIds - A list of eventIds to remove.\n */\n removeEvents(eventIds) {\n for (var eventId of eventIds) {\n this.removeEvent(eventId);\n }\n }\n\n /**\n * Removes a single event from this room.\n *\n * @param eventId - The id of the event to remove\n *\n * @returns true if the event was removed from any of the room's timeline sets\n */\n removeEvent(eventId) {\n var removedAny = false;\n for (var timelineSet of this.timelineSets) {\n var removed = timelineSet.removeEvent(eventId);\n if (removed) {\n if (removed.isRedaction()) {\n this.revertRedactionLocalEcho(removed);\n }\n removedAny = true;\n }\n }\n return removedAny;\n }\n\n /**\n * Recalculate various aspects of the room, including the room name and\n * room summary. Call this any time the room's current state is modified.\n * May fire \"Room.name\" if the room name is updated.\n *\n * @remarks\n * Fires {@link RoomEvent.Name}\n */\n recalculate() {\n // set fake stripped state events if this is an invite room so logic remains\n // consistent elsewhere.\n var membershipEvent = this.currentState.getStateEvents(EventType.RoomMember, this.myUserId);\n if (membershipEvent) {\n var membership = membershipEvent.getContent().membership;\n this.updateMyMembership(membership);\n if (membership === KnownMembership.Invite) {\n var strippedStateEvents = membershipEvent.getUnsigned().invite_room_state || [];\n strippedStateEvents.forEach(strippedEvent => {\n var existingEvent = this.currentState.getStateEvents(strippedEvent.type, strippedEvent.state_key);\n if (!existingEvent) {\n // set the fake stripped event instead\n this.currentState.setStateEvents([new MatrixEvent({\n type: strippedEvent.type,\n state_key: strippedEvent.state_key,\n content: strippedEvent.content,\n event_id: \"$fake\" + Date.now(),\n room_id: this.roomId,\n sender: this.myUserId // technically a lie\n })]);\n }\n });\n }\n }\n var oldName = this.name;\n this.name = this.calculateRoomName(this.myUserId);\n this.normalizedName = normalize(this.name);\n this.summary = new RoomSummary(this.roomId, {\n title: this.name\n });\n if (oldName !== this.name) {\n this.emit(RoomEvent.Name, this);\n }\n }\n\n /**\n * Update the room-tag event for the room. The previous one is overwritten.\n * @param event - the m.tag event\n */\n addTags(event) {\n // event content looks like:\n // content: {\n // tags: {\n // $tagName: { $metadata: $value },\n // $tagName: { $metadata: $value },\n // }\n // }\n\n // XXX: do we need to deep copy here?\n this.tags = event.getContent().tags || {};\n\n // XXX: we could do a deep-comparison to see if the tags have really\n // changed - but do we want to bother?\n this.emit(RoomEvent.Tags, event, this);\n }\n\n /**\n * Update the account_data events for this room, overwriting events of the same type.\n * @param events - an array of account_data events to add\n */\n addAccountData(events) {\n for (var event of events) {\n if (event.getType() === \"m.tag\") {\n this.addTags(event);\n }\n var eventType = event.getType();\n var lastEvent = this.accountData.get(eventType);\n this.accountData.set(eventType, event);\n this.emit(RoomEvent.AccountData, event, this, lastEvent);\n }\n }\n\n /**\n * Access account_data event of given event type for this room\n * @param type - the type of account_data event to be accessed\n * @returns the account_data event in question\n */\n getAccountData(type) {\n return this.accountData.get(type);\n }\n\n /**\n * Get an iterator of currently active sticky events.\n */\n // eslint-disable-next-line\n _unstable_getStickyEvents() {\n return this.stickyEvents.getStickyEvents();\n }\n\n /**\n * Get a sticky event that match the given `type`, `sender`, and `stickyKey`\n * @param type The event `type`.\n * @param sender The sender of the sticky event.\n * @param stickyKey The sticky key used by the event.\n * @returns A matching active sticky event, or undefined.\n */\n // eslint-disable-next-line\n _unstable_getKeyedStickyEvent(sender, type, stickyKey) {\n return this.stickyEvents.getKeyedStickyEvent(sender, type, stickyKey);\n }\n\n /**\n * Get active sticky events without a sticky key that match the given `type` and `sender`.\n * @param type The event `type`.\n * @param sender The sender of the sticky event.\n * @returns An array of matching sticky events.\n */\n // eslint-disable-next-line\n _unstable_getUnkeyedStickyEvent(sender, type) {\n return this.stickyEvents.getUnkeyedStickyEvent(sender, type);\n }\n\n /**\n * Add a series of sticky events, emitting `RoomEvent.StickyEvents` if any\n * changes were made.\n * @param events A set of new sticky events.\n * @internal\n */\n // eslint-disable-next-line\n _unstable_addStickyEvents(events) {\n // ALWAYS filter out any events that are past retention\n events = events.filter(e => {\n var _this$retention$shoul3, _this$retention3;\n return (_this$retention$shoul3 = (_this$retention3 = this.retention) === null || _this$retention3 === void 0 ? void 0 : _this$retention3.shouldEventBeRetained(e)) !== null && _this$retention$shoul3 !== void 0 ? _this$retention$shoul3 : true;\n });\n return this.stickyEvents.addStickyEvents(events);\n }\n\n /**\n * Returns whether the syncing user has permission to send a message in the room\n * @returns true if the user should be permitted to send\n * message events into the room.\n */\n maySendMessage() {\n return this.getMyMembership() === KnownMembership.Join && (this.hasEncryptionStateEvent() ? this.currentState.maySendEvent(EventType.RoomMessageEncrypted, this.myUserId) : this.currentState.maySendEvent(EventType.RoomMessage, this.myUserId));\n }\n\n /**\n * Returns whether the given user has permissions to issue an invite for this room.\n * @param userId - the ID of the Matrix user to check permissions for\n * @returns true if the user should be permitted to issue invites for this room.\n */\n canInvite(userId) {\n var canInvite = this.getMyMembership() === KnownMembership.Join;\n var powerLevelsEvent = this.currentState.getStateEvents(EventType.RoomPowerLevels, \"\");\n var powerLevels = powerLevelsEvent && powerLevelsEvent.getContent();\n var me = this.getMember(userId);\n if (powerLevels && me && powerLevels.invite > me.powerLevel) {\n canInvite = false;\n }\n return canInvite;\n }\n\n /**\n * Returns the join rule based on the m.room.join_rule state event, defaulting to `invite`.\n * @returns the join_rule applied to this room\n */\n getJoinRule() {\n return this.currentState.getJoinRule();\n }\n\n /**\n * Returns the history visibility based on the m.room.history_visibility state event, defaulting to `shared`.\n * @returns the history_visibility applied to this room\n */\n getHistoryVisibility() {\n return this.currentState.getHistoryVisibility();\n }\n\n /**\n * Returns the history visibility based on the m.room.history_visibility state event, defaulting to `shared`.\n * @returns the history_visibility applied to this room\n */\n getGuestAccess() {\n return this.currentState.getGuestAccess();\n }\n\n /**\n * Returns the type of the room from the `m.room.create` event content or undefined if none is set\n * @returns the type of the room.\n */\n getType() {\n var createEvent = this.currentState.getStateEvents(EventType.RoomCreate, \"\");\n if (!createEvent) {\n if (!this.getTypeWarning) {\n logger.warn(\"[getType] Room \" + this.roomId + \" does not have an m.room.create event\");\n this.getTypeWarning = true;\n }\n return undefined;\n }\n return createEvent.getContent()[RoomCreateTypeField];\n }\n\n /**\n * Returns whether the room is a space-room as defined by MSC1772.\n * @returns true if the room's type is RoomType.Space\n */\n isSpaceRoom() {\n return this.getType() === RoomType.Space;\n }\n\n /**\n * Returns whether the room is a call-room as defined by MSC3417.\n * @returns true if the room's type is RoomType.UnstableCall\n */\n isCallRoom() {\n return this.getType() === RoomType.UnstableCall;\n }\n\n /**\n * Returns whether the room is a video room.\n * @returns true if the room's type is RoomType.ElementVideo\n */\n isElementVideoRoom() {\n return this.getType() === RoomType.ElementVideo;\n }\n\n /**\n * Find the predecessor of this room.\n *\n * @param msc3946ProcessDynamicPredecessor - if true, look for an\n * m.room.predecessor state event and use it if found (MSC3946).\n * @returns null if this room has no predecessor. Otherwise, returns\n * the roomId, last eventId and viaServers of the predecessor room.\n *\n * If msc3946ProcessDynamicPredecessor is true, use m.predecessor events\n * as well as m.room.create events to find predecessors.\n *\n * Note: if an m.predecessor event is used, eventId may be undefined\n * since last_known_event_id is optional.\n *\n * Note: viaServers may be undefined, and will definitely be undefined if\n * this predecessor comes from a RoomCreate event (rather than a\n * RoomPredecessor, which has the optional via_servers property).\n */\n findPredecessor() {\n var msc3946ProcessDynamicPredecessor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var currentState = this.getLiveTimeline().getState(EventTimeline.FORWARDS);\n if (!currentState) {\n return null;\n }\n return currentState.findPredecessor(msc3946ProcessDynamicPredecessor);\n }\n roomNameGenerator(state) {\n if (this.client.roomNameGenerator) {\n var name = this.client.roomNameGenerator(this.roomId, state);\n if (name !== null) {\n return name;\n }\n }\n switch (state.type) {\n case RoomNameType.Actual:\n return state.name;\n case RoomNameType.Generated:\n switch (state.subtype) {\n case \"Inviting\":\n return \"Inviting \".concat(memberNamesToRoomName(state.names, state.count));\n default:\n return memberNamesToRoomName(state.names, state.count);\n }\n case RoomNameType.EmptyRoom:\n if (state.oldName) {\n return \"Empty room (was \".concat(state.oldName, \")\");\n } else {\n return \"Empty room\";\n }\n }\n }\n\n /**\n * This is an internal method. Calculates the name of the room from the current\n * room state.\n * @param userId - The client's user ID. Used to filter room members\n * correctly.\n * @param ignoreRoomNameEvent - Return the implicit room name that we'd see if there\n * was no m.room.name event.\n * @returns The calculated room name.\n */\n calculateRoomName(userId) {\n var ignoreRoomNameEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!ignoreRoomNameEvent) {\n var _this$currentState$ge4;\n var name = (_this$currentState$ge4 = this.currentState.getStateEvents(EventType.RoomName, \"\")) === null || _this$currentState$ge4 === void 0 ? void 0 : _this$currentState$ge4.getContent().name;\n if (name && typeof name === \"string\") {\n return this.roomNameGenerator({\n type: RoomNameType.Actual,\n name\n });\n }\n }\n var alias = this.getCanonicalAlias();\n if (alias) {\n return this.roomNameGenerator({\n type: RoomNameType.Actual,\n name: alias\n });\n }\n var joinedMemberCount = this.currentState.getJoinedMemberCount();\n var invitedMemberCount = this.currentState.getInvitedMemberCount();\n // -1 because these numbers include the syncing user\n var inviteJoinCount = joinedMemberCount + invitedMemberCount - 1;\n\n // get service members (e.g. helper bots) for exclusion\n var excludedUserIds = this.getFunctionalMembers();\n\n // get members from heroes that are NOT ourselves\n var otherNames = [];\n if (this.heroes) {\n // if we have heroes, use those as the names\n this.heroes.forEach(hero => {\n // filter service members\n if (excludedUserIds.includes(hero.userId)) {\n inviteJoinCount--;\n return;\n }\n // If the hero has a display name, use that.\n // Otherwise, look their user ID up in the membership and use\n // the name from there, or the user ID as a last resort.\n if (hero.displayName) {\n otherNames.push(hero.displayName);\n } else {\n var member = this.getMember(hero.userId);\n otherNames.push(member ? member.name : hero.userId);\n }\n });\n } else {\n var otherMembers = this.currentState.getMembers().filter(m => {\n return m.userId !== userId && (m.membership === KnownMembership.Invite || m.membership === KnownMembership.Join);\n });\n otherMembers = otherMembers.filter(_ref20 => {\n var userId = _ref20.userId;\n // filter service members\n if (excludedUserIds.includes(userId)) {\n inviteJoinCount--;\n return false;\n }\n return true;\n });\n // make sure members have stable order\n var collator = new Intl.Collator();\n otherMembers.sort((a, b) => collator.compare(a.userId, b.userId));\n // only 5 first members, immitate summaryHeroes\n otherMembers = otherMembers.slice(0, 5);\n otherNames = otherMembers.map(m => m.name);\n }\n if (inviteJoinCount) {\n return this.roomNameGenerator({\n type: RoomNameType.Generated,\n names: otherNames,\n count: inviteJoinCount\n });\n }\n var myMembership = this.getMyMembership();\n // if I have created a room and invited people through\n // 3rd party invites\n if (myMembership == KnownMembership.Join) {\n var thirdPartyInvites = this.currentState.getStateEvents(EventType.RoomThirdPartyInvite);\n if (thirdPartyInvites !== null && thirdPartyInvites !== void 0 && thirdPartyInvites.length) {\n var thirdPartyNames = thirdPartyInvites.map(i => {\n return i.getContent().display_name;\n });\n return this.roomNameGenerator({\n type: RoomNameType.Generated,\n subtype: \"Inviting\",\n names: thirdPartyNames,\n count: thirdPartyNames.length + 1\n });\n }\n }\n\n // let's try to figure out who was here before\n var leftNames = otherNames;\n // if we didn't have heroes, try finding them in the room state\n if (!leftNames.length) {\n leftNames = this.currentState.getMembers().filter(m => {\n return m.userId !== userId && m.membership !== KnownMembership.Invite && m.membership !== KnownMembership.Join;\n }).map(m => m.name);\n }\n var oldName;\n if (leftNames.length) {\n oldName = this.roomNameGenerator({\n type: RoomNameType.Generated,\n names: leftNames,\n count: leftNames.length + 1\n });\n }\n return this.roomNameGenerator({\n type: RoomNameType.EmptyRoom,\n oldName\n });\n }\n\n /**\n * When we receive a new visibility change event:\n *\n * - store this visibility change alongside the timeline, in case we\n * later need to apply it to an event that we haven't received yet;\n * - if we have already received the event whose visibility has changed,\n * patch it to reflect the visibility change and inform listeners.\n */\n applyNewVisibilityEvent(event) {\n var visibilityChange = event.asVisibilityChange();\n if (!visibilityChange) {\n // The event is ill-formed.\n return;\n }\n\n // Ignore visibility change events that are not emitted by moderators.\n var userId = event.getSender();\n if (!userId) {\n return;\n }\n var isPowerSufficient = EVENT_VISIBILITY_CHANGE_TYPE.name && this.currentState.maySendStateEvent(EVENT_VISIBILITY_CHANGE_TYPE.name, userId) || EVENT_VISIBILITY_CHANGE_TYPE.altName && this.currentState.maySendStateEvent(EVENT_VISIBILITY_CHANGE_TYPE.altName, userId);\n if (!isPowerSufficient) {\n // Powerlevel is insufficient.\n return;\n }\n\n // Record this change in visibility.\n // If the event is not in our timeline and we only receive it later,\n // we may need to apply the visibility change at a later date.\n\n var visibilityEventsOnOriginalEvent = this.visibilityEvents.get(visibilityChange.eventId);\n if (visibilityEventsOnOriginalEvent) {\n // It would be tempting to simply erase the latest visibility change\n // but we need to record all of the changes in case the latest change\n // is ever redacted.\n //\n // In practice, linear scans through `visibilityEvents` should be fast.\n // However, to protect against a potential DoS attack, we limit the\n // number of iterations in this loop.\n var index = visibilityEventsOnOriginalEvent.length - 1;\n var min = Math.max(0, visibilityEventsOnOriginalEvent.length - MAX_NUMBER_OF_VISIBILITY_EVENTS_TO_SCAN_THROUGH);\n for (; index >= min; --index) {\n var target = visibilityEventsOnOriginalEvent[index];\n if (target.getTs() < event.getTs()) {\n break;\n }\n }\n if (index === -1) {\n visibilityEventsOnOriginalEvent.unshift(event);\n } else {\n visibilityEventsOnOriginalEvent.splice(index + 1, 0, event);\n }\n } else {\n this.visibilityEvents.set(visibilityChange.eventId, [event]);\n }\n\n // Finally, let's check if the event is already in our timeline.\n // If so, we need to patch it and inform listeners.\n\n var originalEvent = this.findEventById(visibilityChange.eventId);\n if (!originalEvent) {\n return;\n }\n originalEvent.applyVisibilityEvent(visibilityChange);\n }\n redactVisibilityChangeEvent(event) {\n // Sanity checks.\n if (!event.isVisibilityEvent) {\n throw new Error(\"expected a visibility change event\");\n }\n var relation = event.getRelation();\n var originalEventId = relation === null || relation === void 0 ? void 0 : relation.event_id;\n var visibilityEventsOnOriginalEvent = this.visibilityEvents.get(originalEventId);\n if (!visibilityEventsOnOriginalEvent) {\n // No visibility changes on the original event.\n // In particular, this change event was not recorded,\n // most likely because it was ill-formed.\n return;\n }\n var index = visibilityEventsOnOriginalEvent.findIndex(change => change.getId() === event.getId());\n if (index === -1) {\n // This change event was not recorded, most likely because\n // it was ill-formed.\n return;\n }\n // Remove visibility change.\n visibilityEventsOnOriginalEvent.splice(index, 1);\n\n // If we removed the latest visibility change event, propagate changes.\n if (index === visibilityEventsOnOriginalEvent.length) {\n var originalEvent = this.findEventById(originalEventId);\n if (!originalEvent) {\n return;\n }\n if (index === 0) {\n // We have just removed the only visibility change event.\n this.visibilityEvents.delete(originalEventId);\n originalEvent.applyVisibilityEvent();\n } else {\n var newEvent = visibilityEventsOnOriginalEvent[visibilityEventsOnOriginalEvent.length - 1];\n var newVisibility = newEvent.asVisibilityChange();\n if (!newVisibility) {\n // Event is ill-formed.\n // This breaks our invariant.\n throw new Error(\"at this stage, visibility changes should be well-formed\");\n }\n originalEvent.applyVisibilityEvent(newVisibility);\n }\n }\n }\n\n /**\n * When we receive an event whose visibility has been altered by\n * a (more recent) visibility change event, patch the event in\n * place so that clients now not to display it.\n *\n * @param event - Any matrix event. If this event has at least one a\n * pending visibility change event, apply the latest visibility\n * change event.\n */\n applyPendingVisibilityEvents(event) {\n var visibilityEvents = this.visibilityEvents.get(event.getId());\n if (!visibilityEvents || visibilityEvents.length == 0) {\n // No pending visibility change in store.\n return;\n }\n var visibilityEvent = visibilityEvents[visibilityEvents.length - 1];\n var visibilityChange = visibilityEvent.asVisibilityChange();\n if (!visibilityChange) {\n return;\n }\n if (visibilityChange.visible) {\n // Events are visible by default, no need to apply a visibility change.\n // Note that we need to keep the visibility changes in `visibilityEvents`,\n // in case we later fetch an older visibility change event that is superseded\n // by `visibilityChange`.\n }\n if (visibilityEvent.getTs() < event.getTs()) {\n // Something is wrong, the visibility change cannot happen before the\n // event. Presumably an ill-formed event.\n return;\n }\n event.applyVisibilityEvent(visibilityChange);\n }\n\n /**\n * Find when a client has gained thread capabilities by inspecting the oldest\n * threaded receipt\n * @returns the timestamp of the oldest threaded receipt\n */\n getOldestThreadedReceiptTs() {\n return this.oldestThreadedReceiptTs;\n }\n\n /**\n * Determines if the given user has read a particular event ID with the known\n * history of the room. This is not a definitive check as it relies only on\n * what is available to the room at the time of execution.\n *\n * @param userId - The user ID to check the read state of.\n * @param eventId - The event ID to check if the user read.\n * @returns true if the user has read the event, false otherwise.\n */\n hasUserReadEvent(userId, eventId) {\n return this.roomReceipts.hasUserReadEvent(userId, eventId);\n }\n\n /**\n * Returns the most recent unthreaded receipt for a given user\n * @param userId - the MxID of the User\n * @returns an unthreaded Receipt. Can be undefined if receipts have been disabled\n * or a user chooses to use private read receipts (or we have simply not received\n * a receipt from this user yet).\n */\n getLastUnthreadedReceiptFor(userId) {\n return this.unthreadedReceipts.get(userId);\n }\n\n /**\n * This issue should also be addressed on synapse's side and is tracked as part\n * of https://github.com/matrix-org/synapse/issues/14837\n *\n *\n * We consider a room fully read if the current user has sent\n * the last event in the live timeline of that context and if the read receipt\n * we have on record matches.\n * This also detects all unread threads and applies the same logic to those\n * contexts\n */\n fixupNotifications(userId) {\n super.fixupNotifications(userId);\n var unreadThreads = this.getThreads().filter(thread => this.getThreadUnreadNotificationCount(thread.id, NotificationCountType.Total) > 0);\n for (var thread of unreadThreads) {\n thread.fixupNotifications(userId);\n }\n }\n\n /**\n * Determine the order of two events in this room.\n *\n * In principle this should use the same order as the server, but in practice\n * this is difficult for events that were not received over the Sync API. See\n * MSC4033 for details.\n *\n * This implementation leans on the order of events within their timelines, and\n * falls back to comparing event timestamps when they are in different\n * timelines.\n *\n * See https://github.com/matrix-org/matrix-js-sdk/issues/3325 for where we are\n * tracking the work to fix this.\n *\n * @param leftEventId - the id of the first event\n * @param rightEventId - the id of the second event\n * @returns -1 if left \\< right, 1 if left \\> right, 0 if left == right, null if\n * we can't tell (because we can't find the events).\n */\n compareEventOrdering(leftEventId, rightEventId) {\n return compareEventOrdering(this, leftEventId, rightEventId);\n }\n\n /**\n * Return true if this room has an `m.room.encryption` state event.\n *\n * If this returns `true`, events sent to this room should be encrypted (and `MatrixClient.sendEvent` and friends\n * will encrypt outgoing events).\n */\n hasEncryptionStateEvent() {\n var _this$getLiveTimeline;\n return Boolean((_this$getLiveTimeline = this.getLiveTimeline().getState(EventTimeline.FORWARDS)) === null || _this$getLiveTimeline === void 0 ? void 0 : _this$getLiveTimeline.getStateEvents(EventType.RoomEncryption, \"\"));\n }\n}\n\n// a map from current event status to a list of allowed next statuses\nvar ALLOWED_TRANSITIONS = {\n [EventStatus.ENCRYPTING]: [EventStatus.SENDING, EventStatus.NOT_SENT, EventStatus.CANCELLED],\n [EventStatus.SENDING]: [EventStatus.ENCRYPTING, EventStatus.QUEUED, EventStatus.NOT_SENT, EventStatus.SENT],\n [EventStatus.QUEUED]: [EventStatus.SENDING, EventStatus.NOT_SENT, EventStatus.CANCELLED],\n [EventStatus.SENT]: [],\n [EventStatus.NOT_SENT]: [EventStatus.SENDING, EventStatus.QUEUED, EventStatus.CANCELLED],\n [EventStatus.CANCELLED]: []\n};\nexport var RoomNameType = /*#__PURE__*/function (RoomNameType) {\n RoomNameType[RoomNameType[\"EmptyRoom\"] = 0] = \"EmptyRoom\";\n RoomNameType[RoomNameType[\"Generated\"] = 1] = \"Generated\";\n RoomNameType[RoomNameType[\"Actual\"] = 2] = \"Actual\";\n return RoomNameType;\n}({});\n// Can be overriden by IMatrixClientCreateOpts::memberNamesToRoomNameFn\nfunction memberNamesToRoomName(names, count) {\n var countWithoutMe = count - 1;\n if (!names.length) {\n return \"Empty room\";\n } else if (names.length === 1 && countWithoutMe <= 1) {\n return names[0];\n } else if (names.length === 2 && countWithoutMe <= 2) {\n return \"\".concat(names[0], \" and \").concat(names[1]);\n } else {\n var plural = countWithoutMe > 1;\n if (plural) {\n return \"\".concat(names[0], \" and \").concat(countWithoutMe, \" others\");\n } else {\n return \"\".concat(names[0], \" and 1 other\");\n }\n }\n}\n//# sourceMappingURL=room.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var ServerSupport = /*#__PURE__*/function (ServerSupport) {\n ServerSupport[ServerSupport[\"Stable\"] = 0] = \"Stable\";\n ServerSupport[ServerSupport[\"Unstable\"] = 1] = \"Unstable\";\n ServerSupport[ServerSupport[\"Unsupported\"] = 2] = \"Unsupported\";\n return ServerSupport;\n}({});\nexport var Feature = /*#__PURE__*/function (Feature) {\n Feature[\"Thread\"] = \"Thread\";\n Feature[\"ThreadUnreadNotifications\"] = \"ThreadUnreadNotifications\";\n /**\n * @deprecated this is now exposed as a capability not a feature\n */\n Feature[\"LoginTokenRequest\"] = \"LoginTokenRequest\";\n Feature[\"RelationBasedRedactions\"] = \"RelationBasedRedactions\";\n Feature[\"AccountDataDeletion\"] = \"AccountDataDeletion\";\n Feature[\"RelationsRecursion\"] = \"RelationsRecursion\";\n Feature[\"IntentionalMentions\"] = \"IntentionalMentions\";\n return Feature;\n}({});\nvar featureSupportResolver = {\n [Feature.Thread]: {\n unstablePrefixes: [\"org.matrix.msc3440\"],\n matrixVersion: \"v1.3\"\n },\n [Feature.ThreadUnreadNotifications]: {\n unstablePrefixes: [\"org.matrix.msc3771\", \"org.matrix.msc3773\"],\n matrixVersion: \"v1.4\"\n },\n [Feature.LoginTokenRequest]: {\n unstablePrefixes: [\"org.matrix.msc3882\"]\n },\n [Feature.RelationBasedRedactions]: {\n unstablePrefixes: [\"org.matrix.msc3912\"]\n },\n [Feature.AccountDataDeletion]: {\n unstablePrefixes: [\"org.matrix.msc3391\"]\n },\n [Feature.RelationsRecursion]: {\n unstablePrefixes: [\"org.matrix.msc3981\"],\n matrixVersion: \"v1.10\"\n },\n [Feature.IntentionalMentions]: {\n unstablePrefixes: [\"org.matrix.msc3952_intentional_mentions\"],\n matrixVersion: \"v1.7\"\n }\n};\nexport function buildFeatureSupportMap(_x) {\n return _buildFeatureSupportMap.apply(this, arguments);\n}\nfunction _buildFeatureSupportMap() {\n _buildFeatureSupportMap = _asyncToGenerator(function* (versions) {\n var supportMap = new Map();\n for (var _ref3 of Object.entries(featureSupportResolver)) {\n var _versions$versions$in, _versions$versions, _supportCondition$uns, _supportCondition$uns2;\n var _ref2 = _slicedToArray(_ref3, 2);\n var feature = _ref2[0];\n var supportCondition = _ref2[1];\n var supportMatrixVersion = (_versions$versions$in = (_versions$versions = versions.versions) === null || _versions$versions === void 0 ? void 0 : _versions$versions.includes(supportCondition.matrixVersion || \"\")) !== null && _versions$versions$in !== void 0 ? _versions$versions$in : false;\n var supportUnstablePrefixes = (_supportCondition$uns = (_supportCondition$uns2 = supportCondition.unstablePrefixes) === null || _supportCondition$uns2 === void 0 ? void 0 : _supportCondition$uns2.every(unstablePrefix => {\n var _versions$unstable_fe;\n return ((_versions$unstable_fe = versions.unstable_features) === null || _versions$unstable_fe === void 0 ? void 0 : _versions$unstable_fe[unstablePrefix]) === true;\n })) !== null && _supportCondition$uns !== void 0 ? _supportCondition$uns : false;\n if (supportMatrixVersion) {\n supportMap.set(feature, ServerSupport.Stable);\n } else if (supportUnstablePrefixes) {\n supportMap.set(feature, ServerSupport.Unstable);\n } else {\n supportMap.set(feature, ServerSupport.Unsupported);\n }\n }\n return supportMap;\n });\n return _buildFeatureSupportMap.apply(this, arguments);\n}\n//# sourceMappingURL=feature.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2015 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/*\n * TODO:\n * This class mainly serves to take all the syncing logic out of client.js and\n * into a separate file. It's all very fluid, and this class gut wrenches a lot\n * of MatrixClient props (e.g. http). Given we want to support WebSockets as\n * an alternative syncing API, we may want to have a proper syncing interface\n * for HTTP and WS at some point.\n */\n\nimport { User } from \"./models/user.js\";\nimport { NotificationCountType, Room, RoomEvent } from \"./models/room.js\";\nimport { deepCopy, noUnsafeEventProps, unsafeProp } from \"./utils.js\";\nimport { Filter } from \"./filter.js\";\nimport { EventTimeline } from \"./models/event-timeline.js\";\nimport { logger } from \"./logger.js\";\nimport { ClientEvent, PendingEventOrdering } from \"./client.js\";\nimport { MatrixEvent } from \"./models/event.js\";\nimport { Method } from \"./http-api/index.js\";\nimport { EventType } from \"./@types/event.js\";\nimport { RoomStateEvent } from \"./models/room-state.js\";\nimport { RoomMemberEvent } from \"./models/room-member.js\";\nimport { BeaconEvent } from \"./models/beacon.js\";\nimport { UNREAD_THREAD_NOTIFICATIONS } from \"./@types/sync.js\";\nimport { Feature, ServerSupport } from \"./feature.js\";\nimport { KnownMembership } from \"./@types/membership.js\";\n\n// /sync requests allow you to set a timeout= but the request may continue\n// beyond that and wedge forever, so we need to track how long we are willing\n// to keep open the connection. This constant is *ADDED* to the timeout= value\n// to determine the max time we're willing to wait.\nvar BUFFER_PERIOD_MS = 80 * 1000;\n\n// Number of consecutive failed syncs that will lead to a syncState of ERROR as opposed\n// to RECONNECTING. This is needed to inform the client of server issues when the\n// keepAlive is successful but the server /sync fails.\nvar FAILED_SYNC_ERROR_THRESHOLD = 3;\nexport var SyncState = /*#__PURE__*/function (SyncState) {\n /** Emitted after we try to sync more than `FAILED_SYNC_ERROR_THRESHOLD`\n * times and are still failing. Or when we enounter a hard error like the\n * token being invalid. */\n SyncState[\"Error\"] = \"ERROR\";\n /** Emitted after the first sync events are ready (this could even be sync\n * events from the cache) */\n SyncState[\"Prepared\"] = \"PREPARED\";\n /** Emitted when the sync loop is no longer running */\n SyncState[\"Stopped\"] = \"STOPPED\";\n /** Emitted after each sync request happens */\n SyncState[\"Syncing\"] = \"SYNCING\";\n /** Emitted after a connectivity error and we're ready to start syncing again */\n SyncState[\"Catchup\"] = \"CATCHUP\";\n /** Emitted for each time we try reconnecting. Will switch to `Error` after\n * we reach the `FAILED_SYNC_ERROR_THRESHOLD`\n */\n SyncState[\"Reconnecting\"] = \"RECONNECTING\";\n return SyncState;\n}({});\n\n// Room versions where \"insertion\", \"batch\", and \"marker\" events are controlled\n// by power-levels. MSC2716 is supported in existing room versions but they\n// should only have special meaning when the room creator sends them.\nvar MSC2716_ROOM_VERSIONS = [\"org.matrix.msc2716v3\"];\nfunction getFilterName(userId, suffix) {\n // scope this on the user ID because people may login on many accounts\n // and they all need to be stored!\n return \"FILTER_SYNC_\".concat(userId) + (suffix ? \"_\" + suffix : \"\");\n}\n\n/**\n * Options passed into the constructor of SyncApi by MatrixClient\n */\n\nexport var SetPresence = /*#__PURE__*/function (SetPresence) {\n SetPresence[\"Offline\"] = \"offline\";\n SetPresence[\"Online\"] = \"online\";\n SetPresence[\"Unavailable\"] = \"unavailable\";\n return SetPresence;\n}({});\n/** add default settings to an IStoredClientOpts */\nexport function defaultClientOpts(opts) {\n return _objectSpread({\n initialSyncLimit: 8,\n resolveInvitesToProfiles: false,\n pollTimeout: 30 * 1000,\n pendingEventOrdering: PendingEventOrdering.Chronological,\n threadSupport: false\n }, opts);\n}\nexport function defaultSyncApiOpts(syncOpts) {\n return _objectSpread({\n canResetEntireTimeline: _roomId => false\n }, syncOpts);\n}\nexport class SyncApi {\n /**\n * Construct an entity which is able to sync with a homeserver.\n * @param client - The matrix client instance to use.\n * @param opts - client config options\n * @param syncOpts - sync-specific options passed by the client\n * @internal\n */\n constructor(client, opts, syncOpts) {\n var _this = this;\n this.client = client;\n _defineProperty(this, \"opts\", void 0);\n _defineProperty(this, \"syncOpts\", void 0);\n _defineProperty(this, \"_peekRoom\", null);\n _defineProperty(this, \"currentSyncRequest\", void 0);\n _defineProperty(this, \"abortController\", void 0);\n _defineProperty(this, \"syncState\", null);\n _defineProperty(this, \"syncStateData\", void 0);\n // additional data (eg. error object for failed sync)\n _defineProperty(this, \"catchingUp\", false);\n _defineProperty(this, \"running\", false);\n _defineProperty(this, \"keepAliveTimer\", void 0);\n _defineProperty(this, \"connectionReturnedResolvers\", void 0);\n _defineProperty(this, \"notifEvents\", []);\n // accumulator of sync events in the current sync response\n _defineProperty(this, \"failedSyncCount\", 0);\n // Number of consecutive failed /sync requests\n _defineProperty(this, \"storeIsInvalid\", false);\n // flag set if the store needs to be cleared before we can start\n _defineProperty(this, \"presence\", void 0);\n _defineProperty(this, \"getPushRules\", /*#__PURE__*/_asyncToGenerator(function* () {\n try {\n _this.syncOpts.logger.debug(\"Getting push rules...\");\n var result = yield _this.client.getPushRules();\n _this.syncOpts.logger.debug(\"Got push rules\");\n _this.client.pushRules = result;\n } catch (err) {\n _this.syncOpts.logger.error(\"Getting push rules failed\", err);\n if (_this.shouldAbortSync(err)) return;\n // wait for saved sync to complete before doing anything else,\n // otherwise the sync state will end up being incorrect\n _this.syncOpts.logger.debug(\"Waiting for saved sync before retrying push rules...\");\n yield _this.recoverFromSyncStartupError(_this.savedSyncPromise, err);\n return _this.getPushRules(); // try again\n }\n }));\n _defineProperty(this, \"buildDefaultFilter\", () => {\n var filter = new Filter(this.client.credentials.userId);\n if (this.client.canSupport.get(Feature.ThreadUnreadNotifications) !== ServerSupport.Unsupported) {\n filter.setUnreadThreadNotifications(true);\n }\n return filter;\n });\n /**\n * Sets up the sync filter options for lazy loading if enabled,\n * (or force-disables lazy loading entirely if we're a guest).\n */\n _defineProperty(this, \"prepareSyncFilterLazyLoading\", () => {\n this.syncOpts.logger.debug(\"Prepare lazy loading for sync...\");\n if (this.client.isGuest()) {\n this.opts.lazyLoadMembers = false;\n }\n if (this.opts.lazyLoadMembers) {\n this.syncOpts.logger.debug(\"Enabling lazy load on sync filter...\");\n if (!this.opts.filter) {\n this.opts.filter = this.buildDefaultFilter();\n }\n this.opts.filter.setLazyLoadMembers(true);\n }\n });\n /**\n * Preare sync filter options for the unstable MSC4429 user profile fields if enabled.\n */\n _defineProperty(this, \"prepareSyncFilterUserProfiles\", /*#__PURE__*/_asyncToGenerator(function* () {\n var _this$opts$unstableMS;\n if ((_this$opts$unstableMS = _this.opts.unstableMSC4429SyncUserProfileFields) !== null && _this$opts$unstableMS !== void 0 && _this$opts$unstableMS.length) {\n _this.syncOpts.logger.debug(\"Enabling EXPERIMENTAL user profiles on sync filter...\");\n if (!_this.opts.filter) {\n _this.opts.filter = _this.buildDefaultFilter();\n }\n _this.opts.filter.setUnstableMSC4429SyncUserProfiles(_this.opts.unstableMSC4429SyncUserProfileFields, yield _this.client.doesServerSupportUnstableFeature(\"org.matrix.msc4429.stable\"));\n }\n }));\n _defineProperty(this, \"storeClientOptions\", /*#__PURE__*/_asyncToGenerator(function* () {\n try {\n _this.syncOpts.logger.debug(\"Storing client options...\");\n yield _this.client.storeClientOptions();\n _this.syncOpts.logger.debug(\"Stored client options\");\n } catch (err) {\n _this.syncOpts.logger.error(\"Storing client options failed\", err);\n throw err;\n }\n }));\n _defineProperty(this, \"getFilter\", /*#__PURE__*/_asyncToGenerator(function* () {\n _this.syncOpts.logger.debug(\"Getting filter...\");\n var filter;\n if (_this.opts.filter) {\n filter = _this.opts.filter;\n } else {\n filter = _this.buildDefaultFilter();\n }\n var filterId;\n try {\n filterId = yield _this.client.getOrCreateFilter(getFilterName(_this.client.credentials.userId), filter);\n } catch (err) {\n _this.syncOpts.logger.error(\"Getting filter failed\", err);\n if (_this.shouldAbortSync(err)) return {};\n // wait for saved sync to complete before doing anything else,\n // otherwise the sync state will end up being incorrect\n _this.syncOpts.logger.debug(\"Waiting for saved sync before retrying filter...\");\n yield _this.recoverFromSyncStartupError(_this.savedSyncPromise, err);\n return _this.getFilter(); // try again\n }\n return {\n filter,\n filterId\n };\n }));\n _defineProperty(this, \"savedSyncPromise\", void 0);\n /**\n * Event handler for the 'online' event\n * This event is generally unreliable and precise behaviour\n * varies between browsers, so we poll for connectivity too,\n * but this might help us reconnect a little faster.\n */\n _defineProperty(this, \"onOnline\", () => {\n this.syncOpts.logger.debug(\"Browser thinks we are back online\");\n this.startKeepAlives(0);\n });\n this.opts = defaultClientOpts(opts);\n this.syncOpts = defaultSyncApiOpts(syncOpts);\n if (client.getNotifTimelineSet()) {\n client.reEmitter.reEmit(client.getNotifTimelineSet(), [RoomEvent.Timeline, RoomEvent.TimelineReset]);\n }\n }\n createRoom(roomId) {\n var room = _createAndReEmitRoom(this.client, roomId, this.opts);\n room.on(RoomStateEvent.Marker, (markerEvent, markerFoundOptions) => {\n this.onMarkerStateEvent(room, markerEvent, markerFoundOptions);\n });\n return room;\n }\n\n /** When we see the marker state change in the room, we know there is some\n * new historical messages imported by MSC2716 `/batch_send` somewhere in\n * the room and we need to throw away the timeline to make sure the\n * historical messages are shown when we paginate `/messages` again.\n * @param room - The room where the marker event was sent\n * @param markerEvent - The new marker event\n * @param setStateOptions - When `timelineWasEmpty` is set\n * as `true`, the given marker event will be ignored\n */\n onMarkerStateEvent(room, markerEvent) {\n var _ref5 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n timelineWasEmpty = _ref5.timelineWasEmpty;\n // We don't need to refresh the timeline if it was empty before the\n // marker arrived. This could be happen in a variety of cases:\n // 1. From the initial sync\n // 2. If it's from the first state we're seeing after joining the room\n // 3. Or whether it's coming from `syncFromCache`\n if (timelineWasEmpty) {\n this.syncOpts.logger.debug(\"MarkerState: Ignoring markerEventId=\".concat(markerEvent.getId(), \" in roomId=\").concat(room.roomId, \" \") + \"because the timeline was empty before the marker arrived which means there is nothing to refresh.\");\n return;\n }\n var isValidMsc2716Event =\n // Check whether the room version directly supports MSC2716, in\n // which case, \"marker\" events are already auth'ed by\n // power_levels\n MSC2716_ROOM_VERSIONS.includes(room.getVersion()) ||\n // MSC2716 is also supported in all existing room versions but\n // special meaning should only be given to \"insertion\", \"batch\",\n // and \"marker\" events when they come from the room creator\n markerEvent.getSender() === room.getCreator();\n\n // It would be nice if we could also specifically tell whether the\n // historical messages actually affected the locally cached client\n // timeline or not. The problem is we can't see the prev_events of\n // the base insertion event that the marker was pointing to because\n // prev_events aren't available in the client API's. In most cases,\n // the history won't be in people's locally cached timelines in the\n // client, so we don't need to bother everyone about refreshing\n // their timeline. This works for a v1 though and there are use\n // cases like initially bootstrapping your bridged room where people\n // are likely to encounter the historical messages affecting their\n // current timeline (think someone signing up for Beeper and\n // importing their Whatsapp history).\n if (isValidMsc2716Event) {\n // Saw new marker event, let's let the clients know they should\n // refresh the timeline.\n this.syncOpts.logger.debug(\"MarkerState: Timeline needs to be refreshed because \" + \"a new markerEventId=\".concat(markerEvent.getId(), \" was sent in roomId=\").concat(room.roomId));\n room.setTimelineNeedsRefresh(true);\n room.emit(RoomEvent.HistoryImportedWithinTimeline, markerEvent, room);\n } else {\n this.syncOpts.logger.debug(\"MarkerState: Ignoring markerEventId=\".concat(markerEvent.getId(), \" in roomId=\").concat(room.roomId, \" because \") + \"MSC2716 is not supported in the room version or for any room version, the marker wasn't sent \" + \"by the room creator.\");\n }\n }\n\n /**\n * Sync rooms the user has left.\n * @returns Resolved when they've been added to the store.\n */\n syncLeftRooms() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _data$rooms;\n var client = _this2.client;\n\n // grab a filter with limit=1 and include_leave=true\n var filter = new Filter(_this2.client.credentials.userId);\n filter.setTimelineLimit(1);\n filter.setIncludeLeaveRooms(true);\n var localTimeoutMs = _this2.opts.pollTimeout + BUFFER_PERIOD_MS;\n var filterId = yield client.getOrCreateFilter(getFilterName(client.credentials.userId, \"LEFT_ROOMS\"), filter);\n var qps = {\n \"timeout\": 0,\n // don't want to block since this is a single isolated req\n \"filter\": filterId,\n \"org.matrix.msc4222.use_state_after\": true\n };\n var data = yield client.http.authedRequest(Method.Get, \"/sync\", qps, undefined, {\n localTimeoutMs\n });\n var leaveRooms = [];\n if ((_data$rooms = data.rooms) !== null && _data$rooms !== void 0 && _data$rooms.leave) {\n leaveRooms = _this2.mapSyncResponseToRoomArray(data.rooms.leave);\n }\n var rooms = yield Promise.all(leaveRooms.map(/*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(function* (leaveObj) {\n var room = leaveObj.room;\n if (!leaveObj.isBrandNewRoom) {\n // the intention behind syncLeftRooms is to add in rooms which were\n // *omitted* from the initial /sync. Rooms the user were joined to\n // but then left whilst the app is running will appear in this list\n // and we do not want to bother with them since they will have the\n // current state already (and may get dupe messages if we add\n // yet more timeline events!), so skip them.\n // NB: When we persist rooms to localStorage this will be more\n // complicated...\n return;\n }\n leaveObj.timeline = leaveObj.timeline || {\n prev_batch: null,\n events: []\n };\n\n // set the back-pagination token. Do this *before* adding any\n // events so that clients can start back-paginating.\n room.getLiveTimeline().setPaginationToken(leaveObj.timeline.prev_batch, EventTimeline.BACKWARDS);\n var _yield$_this2$mapAndI = yield _this2.mapAndInjectRoomEvents(leaveObj),\n timelineEvents = _yield$_this2$mapAndI.timelineEvents;\n room.recalculate();\n client.store.storeRoom(room);\n client.emit(ClientEvent.Room, room);\n _this2.processEventsForNotifs(room, timelineEvents);\n return room;\n });\n return function (_x) {\n return _ref6.apply(this, arguments);\n };\n }()));\n return rooms.filter(Boolean);\n })();\n }\n\n /**\n * Peek into a room. This will result in the room in question being synced so it\n * is accessible via getRooms(). Live updates for the room will be provided.\n * @param roomId - The room ID to peek into.\n * @param limit - The number of timeline events to initially retrieve.\n * @returns A promise which resolves once the room has been added to the\n * store.\n */\n peek(roomId) {\n var _this$_peekRoom;\n var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n if (((_this$_peekRoom = this._peekRoom) === null || _this$_peekRoom === void 0 ? void 0 : _this$_peekRoom.roomId) === roomId) {\n return Promise.resolve(this._peekRoom);\n }\n var client = this.client;\n this._peekRoom = this.createRoom(roomId);\n return this.client.roomInitialSync(roomId, limit).then(response => {\n var _this$_peekRoom2;\n if (((_this$_peekRoom2 = this._peekRoom) === null || _this$_peekRoom2 === void 0 ? void 0 : _this$_peekRoom2.roomId) !== roomId) {\n throw new Error(\"Peeking aborted\");\n }\n\n // make sure things are init'd\n response.messages = response.messages || {\n chunk: []\n };\n response.messages.chunk = response.messages.chunk || [];\n response.state = response.state || [];\n\n // FIXME: Mostly duplicated from injectRoomEvents but not entirely\n // because \"state\" in this API is at the BEGINNING of the chunk\n var oldStateEvents = deepCopy(response.state).map(client.getEventMapper());\n var stateEvents = response.state.map(client.getEventMapper());\n var messages = response.messages.chunk.map(client.getEventMapper());\n\n // XXX: copypasted from /sync until we kill off this minging v1 API stuff)\n // handle presence events (User objects)\n if (Array.isArray(response.presence)) {\n response.presence.map(client.getEventMapper()).forEach(function (presenceEvent) {\n var user = client.store.getUser(presenceEvent.getContent().user_id);\n if (user) {\n user.setPresenceEvent(presenceEvent);\n } else {\n user = User.createUser(presenceEvent.getContent().user_id, client);\n user.setPresenceEvent(presenceEvent);\n client.store.storeUser(user);\n }\n client.emit(ClientEvent.Event, presenceEvent);\n });\n }\n\n // set the pagination token before adding the events in case people\n // fire off pagination requests in response to the Room.timeline\n // events.\n if (response.messages.start) {\n this._peekRoom.oldState.paginationToken = response.messages.start;\n }\n\n // set the state of the room to as it was after the timeline executes\n this._peekRoom.oldState.setStateEvents(oldStateEvents);\n this._peekRoom.currentState.setStateEvents(stateEvents);\n this.resolveInvites(this._peekRoom);\n this._peekRoom.recalculate();\n\n // roll backwards to diverge old state. addEventsToTimeline\n // will overwrite the pagination token, so make sure it overwrites\n // it with the right thing.\n this._peekRoom.addEventsToTimeline(messages.reverse(), true, true, this._peekRoom.getLiveTimeline(), response.messages.start);\n client.store.storeRoom(this._peekRoom);\n client.emit(ClientEvent.Room, this._peekRoom);\n this.peekPoll(this._peekRoom);\n return this._peekRoom;\n });\n }\n\n /**\n * Stop polling for updates in the peeked room. NOPs if there is no room being\n * peeked.\n */\n stopPeeking() {\n this._peekRoom = null;\n }\n\n /**\n * Do a peek room poll.\n * @param token - from= token\n */\n peekPoll(peekRoom, token) {\n var _this$abortController,\n _this3 = this;\n if (this._peekRoom !== peekRoom) {\n this.syncOpts.logger.debug(\"Stopped peeking in room %s\", peekRoom.roomId);\n return;\n }\n\n // FIXME: gut wrenching; hard-coded timeout values\n this.client.http.authedRequest(Method.Get, \"/events\", {\n room_id: peekRoom.roomId,\n timeout: String(30 * 1000),\n from: token\n }, undefined, {\n localTimeoutMs: 50 * 1000,\n abortSignal: (_this$abortController = this.abortController) === null || _this$abortController === void 0 ? void 0 : _this$abortController.signal\n }).then(/*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(function* (res) {\n if (_this3._peekRoom !== peekRoom) {\n _this3.syncOpts.logger.debug(\"Stopped peeking in room %s\", peekRoom.roomId);\n return;\n }\n // We have a problem that we get presence both from /events and /sync\n // however, /sync only returns presence for users in rooms\n // you're actually joined to.\n // in order to be sure to get presence for all of the users in the\n // peeked room, we handle presence explicitly here. This may result\n // in duplicate presence events firing for some users, which is a\n // performance drain, but such is life.\n // XXX: copypasted from /sync until we can kill this minging v1 stuff.\n\n res.chunk.filter(function (e) {\n return e.type === \"m.presence\";\n }).map(_this3.client.getEventMapper()).forEach(presenceEvent => {\n var user = _this3.client.store.getUser(presenceEvent.getContent().user_id);\n if (user) {\n user.setPresenceEvent(presenceEvent);\n } else {\n user = User.createUser(presenceEvent.getContent().user_id, _this3.client);\n user.setPresenceEvent(presenceEvent);\n _this3.client.store.storeUser(user);\n }\n _this3.client.emit(ClientEvent.Event, presenceEvent);\n });\n\n // strip out events which aren't for the given room_id (e.g presence)\n // and also ephemeral events (which we're assuming is anything without\n // and event ID because the /events API doesn't separate them).\n var events = res.chunk.filter(function (e) {\n return e.room_id === peekRoom.roomId && e.event_id;\n }).map(_this3.client.getEventMapper());\n yield peekRoom.addLiveEvents(events, {\n addToState: true\n });\n _this3.peekPoll(peekRoom, res.end);\n });\n return function (_x2) {\n return _ref7.apply(this, arguments);\n };\n }(), err => {\n this.syncOpts.logger.error(\"[%s] Peek poll failed: %s\", peekRoom.roomId, err);\n setTimeout(() => {\n this.peekPoll(peekRoom, token);\n }, 30 * 1000);\n });\n }\n\n /**\n * Returns the current state of this sync object\n * @see MatrixClient#event:\"sync\"\n */\n getSyncState() {\n return this.syncState;\n }\n\n /**\n * Returns the additional data object associated with\n * the current sync state, or null if there is no\n * such data.\n * Sync errors, if available, are put in the 'error' key of\n * this object.\n */\n getSyncStateData() {\n var _this$syncStateData;\n return (_this$syncStateData = this.syncStateData) !== null && _this$syncStateData !== void 0 ? _this$syncStateData : null;\n }\n recoverFromSyncStartupError(savedSyncPromise, error) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n // Wait for the saved sync to complete - we send the pushrules and filter requests\n // before the saved sync has finished so they can run in parallel, but only process\n // the results after the saved sync is done. Equivalently, we wait for it to finish\n // before reporting failures from these functions.\n yield savedSyncPromise;\n var keepaliveProm = _this4.startKeepAlives();\n _this4.updateSyncState(SyncState.Error, {\n error\n });\n yield keepaliveProm;\n })();\n }\n shouldAbortSync(error) {\n if (error.errcode === \"M_UNKNOWN_TOKEN\") {\n // The logout already happened, we just need to stop.\n this.syncOpts.logger.warn(\"Token no longer valid - assuming logout\");\n this.stop();\n this.updateSyncState(SyncState.Error, {\n error\n });\n return true;\n }\n return false;\n }\n /**\n * Main entry point\n */\n sync() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var _globalThis$window, _globalThis$window$ad;\n _this5.running = true;\n _this5.abortController = new AbortController();\n (_globalThis$window = globalThis.window) === null || _globalThis$window === void 0 || (_globalThis$window$ad = _globalThis$window.addEventListener) === null || _globalThis$window$ad === void 0 || _globalThis$window$ad.call(_globalThis$window, \"online\", _this5.onOnline, false);\n if (_this5.client.isGuest()) {\n // no push rules for guests, no access to POST filter for guests.\n return _this5.doSync({});\n }\n\n // Pull the saved sync token out first, before the worker starts sending\n // all the sync data which could take a while. This will let us send our\n // first incremental sync request before we've processed our saved data.\n _this5.syncOpts.logger.debug(\"Getting saved sync token...\");\n var savedSyncTokenPromise = _this5.client.store.getSavedSyncToken().then(tok => {\n _this5.syncOpts.logger.debug(\"Got saved sync token\");\n return tok;\n });\n _this5.savedSyncPromise = _this5.client.store.getSavedSync().then(savedSync => {\n _this5.syncOpts.logger.debug(\"Got reply from saved sync, exists? \".concat(!!savedSync));\n if (savedSync) {\n return _this5.syncFromCache(savedSync);\n }\n }).catch(err => {\n _this5.syncOpts.logger.error(\"Getting saved sync failed\", err);\n });\n\n // We need to do one-off checks before we can begin the /sync loop.\n // These are:\n // 1) We need to get push rules so we can check if events should bing as we get\n // them from /sync.\n // 2) We need to get/create a filter which we can use for /sync.\n // 3) We need to prepare lazy loading for sync\n // 4) We need to store the client options\n\n // Now start the first incremental sync request: this can also\n // take a while so if we set it going now, we can wait for it\n // to finish while we process our saved sync data.\n yield _this5.getPushRules();\n _this5.prepareSyncFilterLazyLoading();\n yield _this5.prepareSyncFilterUserProfiles();\n yield _this5.storeClientOptions();\n var _yield$_this5$getFilt = yield _this5.getFilter(),\n filterId = _yield$_this5$getFilt.filterId,\n filter = _yield$_this5$getFilt.filter;\n if (!filter) return; // bail, getFilter failed\n\n // reset the notifications timeline to prepare it to paginate from\n // the current point in time.\n // The right solution would be to tie /sync pagination tokens into\n // /notifications API somehow.\n _this5.client.resetNotifTimelineSet();\n if (!_this5.currentSyncRequest) {\n var firstSyncFilter = filterId;\n var savedSyncToken = yield savedSyncTokenPromise;\n if (savedSyncToken) {\n _this5.syncOpts.logger.debug(\"Sending first sync request...\");\n } else {\n _this5.syncOpts.logger.debug(\"Sending initial sync request...\");\n var initialFilter = _this5.buildDefaultFilter();\n initialFilter.setDefinition(filter.getDefinition());\n initialFilter.setTimelineLimit(_this5.opts.initialSyncLimit);\n // Use an inline filter, no point uploading it for a single usage\n firstSyncFilter = JSON.stringify(initialFilter.getDefinition());\n }\n\n // Send this first sync request here so we can then wait for the saved\n // sync data to finish processing before we process the results of this one.\n _this5.currentSyncRequest = _this5.doSyncRequest({\n filter: firstSyncFilter\n }, savedSyncToken);\n }\n\n // Now wait for the saved sync to finish...\n _this5.syncOpts.logger.debug(\"Waiting for saved sync before starting sync processing...\");\n yield _this5.savedSyncPromise;\n // process the first sync request and continue syncing with the normal filterId\n return _this5.doSync({\n filter: filterId\n });\n })();\n }\n\n /**\n * Stops the sync object from syncing.\n */\n stop() {\n var _globalThis$window2, _globalThis$window2$r, _this$abortController2;\n this.syncOpts.logger.debug(\"SyncApi.stop\");\n // It is necessary to check for the existance of\n // globalThis.window AND globalThis.window.removeEventListener.\n // Some platforms (e.g. React Native) register globalThis.window,\n // but do not have globalThis.window.removeEventListener.\n (_globalThis$window2 = globalThis.window) === null || _globalThis$window2 === void 0 || (_globalThis$window2$r = _globalThis$window2.removeEventListener) === null || _globalThis$window2$r === void 0 || _globalThis$window2$r.call(_globalThis$window2, \"online\", this.onOnline, false);\n this.running = false;\n (_this$abortController2 = this.abortController) === null || _this$abortController2 === void 0 || _this$abortController2.abort();\n if (this.keepAliveTimer) {\n clearTimeout(this.keepAliveTimer);\n this.keepAliveTimer = undefined;\n }\n }\n\n /**\n * Retry a backed off syncing request immediately. This should only be used when\n * the user <b>explicitly</b> attempts to retry their lost connection.\n * @returns True if this resulted in a request being retried.\n */\n retryImmediately() {\n if (!this.connectionReturnedResolvers) {\n return false;\n }\n this.startKeepAlives(0);\n return true;\n }\n /**\n * Process a single set of cached sync data.\n * @param savedSync - a saved sync that was persisted by a store. This\n * should have been acquired via client.store.getSavedSync().\n */\n syncFromCache(savedSync) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n _this6.syncOpts.logger.debug(\"sync(): not doing HTTP hit, instead returning stored /sync data\");\n var nextSyncToken = savedSync.nextBatch;\n\n // Set sync token for future incremental syncing\n _this6.client.store.setSyncToken(nextSyncToken);\n\n // No previous sync, set old token to null\n var syncEventData = {\n nextSyncToken,\n catchingUp: false,\n fromCache: true\n };\n var data = {\n next_batch: nextSyncToken,\n rooms: savedSync.roomsData,\n account_data: {\n events: savedSync.accountData\n }\n };\n try {\n yield _this6.processSyncResponse(syncEventData, data);\n } catch (e) {\n _this6.syncOpts.logger.error(\"Error processing cached sync\", e);\n }\n\n // Don't emit a prepared if we've bailed because the store is invalid:\n // in this case the client will not be usable until stopped & restarted\n // so this would be useless and misleading.\n if (!_this6.storeIsInvalid) {\n _this6.updateSyncState(SyncState.Prepared, syncEventData);\n }\n })();\n }\n\n /**\n * Invoke me to do /sync calls\n */\n doSync(syncOptions) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n while (_this7.running) {\n var syncToken = _this7.client.store.getSyncToken();\n var data = void 0;\n try {\n if (!_this7.currentSyncRequest) {\n _this7.currentSyncRequest = _this7.doSyncRequest(syncOptions, syncToken);\n }\n data = yield _this7.currentSyncRequest;\n } catch (e) {\n var abort = yield _this7.onSyncError(e);\n if (abort) return;\n continue;\n } finally {\n _this7.currentSyncRequest = undefined;\n }\n\n // set the sync token NOW *before* processing the events. We do this so\n // if something barfs on an event we can skip it rather than constantly\n // polling with the same token.\n _this7.client.store.setSyncToken(data.next_batch);\n\n // Reset after a successful sync\n _this7.failedSyncCount = 0;\n var syncEventData = {\n oldSyncToken: syncToken !== null && syncToken !== void 0 ? syncToken : undefined,\n nextSyncToken: data.next_batch,\n catchingUp: _this7.catchingUp\n };\n try {\n yield _this7.processSyncResponse(syncEventData, data);\n } catch (e) {\n // log the exception with stack if we have it, else fall back\n // to the plain description\n _this7.syncOpts.logger.error(\"Caught /sync error\", e);\n\n // Emit the exception for client handling\n _this7.client.emit(ClientEvent.SyncUnexpectedError, e);\n }\n\n // Persist after processing as `unsigned` may get mutated\n // with an `org.matrix.msc4023.thread_id`\n yield _this7.client.store.setSyncData(data);\n\n // update this as it may have changed\n syncEventData.catchingUp = _this7.catchingUp;\n\n // emit synced events\n if (!syncOptions.hasSyncedBefore) {\n _this7.updateSyncState(SyncState.Prepared, syncEventData);\n syncOptions.hasSyncedBefore = true;\n }\n\n // tell the crypto module to do its processing. It may block (to do a\n // /keys/changes request).\n if (_this7.syncOpts.cryptoCallbacks) {\n yield _this7.syncOpts.cryptoCallbacks.onSyncCompleted(syncEventData);\n }\n\n // keep emitting SYNCING -> SYNCING for clients who want to do bulk updates\n _this7.updateSyncState(SyncState.Syncing, syncEventData);\n if (_this7.client.store.wantsSave()) {\n // tell databases that everything is now in a consistent state and can be saved.\n yield _this7.client.store.save();\n }\n }\n if (!_this7.running) {\n _this7.syncOpts.logger.debug(\"Sync no longer running: exiting.\");\n if (_this7.connectionReturnedResolvers) {\n _this7.connectionReturnedResolvers.reject();\n _this7.connectionReturnedResolvers = undefined;\n }\n _this7.updateSyncState(SyncState.Stopped);\n }\n })();\n }\n doSyncRequest(syncOptions, syncToken) {\n var _this$abortController3;\n var qps = this.getSyncParams(syncOptions, syncToken);\n return this.client.http.authedRequest(Method.Get, \"/sync\", qps, undefined, {\n localTimeoutMs: qps.timeout + BUFFER_PERIOD_MS,\n abortSignal: (_this$abortController3 = this.abortController) === null || _this$abortController3 === void 0 ? void 0 : _this$abortController3.signal\n });\n }\n getSyncParams(syncOptions, syncToken) {\n var timeout = this.opts.pollTimeout;\n if (this.getSyncState() !== SyncState.Syncing || this.catchingUp) {\n // unless we are happily syncing already, we want the server to return\n // as quickly as possible, even if there are no events queued. This\n // serves two purposes:\n //\n // * When the connection dies, we want to know asap when it comes back,\n // so that we can hide the error from the user. (We don't want to\n // have to wait for an event or a timeout).\n //\n // * We want to know if the server has any to_device messages queued up\n // for us. We do that by calling it with a zero timeout until it\n // doesn't give us any more to_device messages.\n this.catchingUp = true;\n timeout = 0;\n }\n var filter = syncOptions.filter;\n if (this.client.isGuest() && !filter) {\n filter = this.getGuestFilter();\n }\n var qps = {\n filter,\n timeout,\n \"org.matrix.msc4222.use_state_after\": true\n };\n if (this.opts.disablePresence) {\n qps.set_presence = SetPresence.Offline;\n } else if (this.presence !== undefined) {\n qps.set_presence = this.presence;\n }\n if (syncToken) {\n qps.since = syncToken;\n } else {\n // use a cachebuster for initialsyncs, to make sure that\n // we don't get a stale sync\n // (https://github.com/vector-im/vector-web/issues/1354)\n qps._cacheBuster = Date.now();\n }\n if ([SyncState.Reconnecting, SyncState.Error].includes(this.getSyncState())) {\n // we think the connection is dead. If it comes back up, we won't know\n // about it till /sync returns. If the timeout= is high, this could\n // be a long time. Set it to 0 when doing retries so we don't have to wait\n // for an event or a timeout before emiting the SYNCING event.\n qps.timeout = 0;\n }\n return qps;\n }\n\n /**\n * Specify the set_presence value to be used for subsequent calls to the Sync API.\n * @param presence - the presence to specify to set_presence of sync calls\n */\n setPresence(presence) {\n this.presence = presence;\n }\n onSyncError(err) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (!_this8.running) {\n _this8.syncOpts.logger.debug(\"Sync no longer running: exiting\");\n if (_this8.connectionReturnedResolvers) {\n _this8.connectionReturnedResolvers.reject();\n _this8.connectionReturnedResolvers = undefined;\n }\n _this8.updateSyncState(SyncState.Stopped);\n return true; // abort\n }\n _this8.syncOpts.logger.error(\"/sync error %s\", err);\n if (_this8.shouldAbortSync(err)) {\n return true; // abort\n }\n _this8.failedSyncCount++;\n _this8.syncOpts.logger.debug(\"Number of consecutive failed sync requests:\", _this8.failedSyncCount);\n _this8.syncOpts.logger.debug(\"Starting keep-alive\");\n // Note that we do *not* mark the sync connection as\n // lost yet: we only do this if a keepalive poke\n // fails, since long lived HTTP connections will\n // go away sometimes and we shouldn't treat this as\n // erroneous. We set the state to 'reconnecting'\n // instead, so that clients can observe this state\n // if they wish.\n var keepAlivePromise = _this8.startKeepAlives();\n _this8.currentSyncRequest = undefined;\n // Transition from RECONNECTING to ERROR after a given number of failed syncs\n _this8.updateSyncState(_this8.failedSyncCount >= FAILED_SYNC_ERROR_THRESHOLD ? SyncState.Error : SyncState.Reconnecting, {\n error: err\n });\n var connDidFail = yield keepAlivePromise;\n\n // Only emit CATCHUP if we detected a connectivity error: if we didn't,\n // it's quite likely the sync will fail again for the same reason and we\n // want to stay in ERROR rather than keep flip-flopping between ERROR\n // and CATCHUP.\n if (connDidFail && _this8.getSyncState() === SyncState.Error) {\n _this8.updateSyncState(SyncState.Catchup, {\n catchingUp: true\n });\n }\n return false;\n })();\n }\n\n /**\n * Process data returned from a sync response and propagate it\n * into the model objects\n *\n * @param syncEventData - Object containing sync tokens associated with this sync\n * @param data - The response from /sync\n */\n processSyncResponse(syncEventData, data) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n var _data$presence, _data$account_data, _data$users, _this9$syncOpts$crypt, _data$device_unused_f;\n var client = _this9.client;\n\n // data looks like:\n // {\n // next_batch: $token,\n // presence: { events: [] },\n // account_data: { events: [] },\n // device_lists: { changed: [\"@user:server\", ... ]},\n // to_device: { events: [] },\n // device_one_time_keys_count: { signed_curve25519: 42 },\n // rooms: {\n // invite: {\n // $roomid: {\n // invite_state: { events: [] }\n // }\n // },\n // join: {\n // $roomid: {\n // state: { events: [] },\n // timeline: { events: [], prev_batch: $token, limited: true },\n // ephemeral: { events: [] },\n // summary: {\n // m.heroes: [ $user_id ],\n // m.joined_member_count: $count,\n // m.invited_member_count: $count\n // },\n // account_data: { events: [] },\n // unread_notifications: {\n // highlight_count: 0,\n // notification_count: 0,\n // }\n // \"org.matrix.msc4222.state_after\": { events: [] }, // only if \"org.matrix.msc4222.use_state_after\" is true\n // msc4354_sticky: { events: [] }, // only if \"org.matrix.msc4354.sticky\" is true\n // }\n // },\n // leave: {\n // $roomid: {\n // state: { events: [] },\n // timeline: { events: [], prev_batch: $token }\n // }\n // }\n // }\n // }\n\n // TODO-arch:\n // - Each event we pass through needs to be emitted via 'event', can we\n // do this in one place?\n // - The isBrandNewRoom boilerplate is boilerplatey.\n\n // handle presence events (User objects)\n if (Array.isArray((_data$presence = data.presence) === null || _data$presence === void 0 ? void 0 : _data$presence.events)) {\n data.presence.events.filter(noUnsafeEventProps).map(client.getEventMapper()).forEach(function (presenceEvent) {\n var user = client.store.getUser(presenceEvent.getSender());\n if (user) {\n user.setPresenceEvent(presenceEvent);\n } else {\n user = User.createUser(presenceEvent.getSender(), client);\n user.setPresenceEvent(presenceEvent);\n client.store.storeUser(user);\n }\n client.emit(ClientEvent.Event, presenceEvent);\n });\n }\n\n // handle non-room account_data\n if (Array.isArray((_data$account_data = data.account_data) === null || _data$account_data === void 0 ? void 0 : _data$account_data.events)) {\n var events = data.account_data.events.filter(noUnsafeEventProps).map(client.getEventMapper());\n var prevEventsMap = events.reduce((m, c) => {\n m[c.getType()] = client.store.getAccountData(c.getType());\n return m;\n }, {});\n client.store.storeAccountDataEvents(events);\n events.forEach(function (accountDataEvent) {\n // Honour push rules that come down the sync stream but also\n // honour push rules that were previously cached. Base rules\n // will be updated when we receive push rules via getPushRules\n // (see sync) before syncing over the network.\n if (accountDataEvent.getType() === EventType.PushRules) {\n var rules = accountDataEvent.getContent();\n client.setPushRules(rules);\n }\n var prevEvent = prevEventsMap[accountDataEvent.getType()];\n client.emit(ClientEvent.AccountData, accountDataEvent, prevEvent);\n return accountDataEvent;\n });\n }\n\n // handle user profile updates (MSC4429)\n var userUpdate = (_data$users = data[\"users\"]) !== null && _data$users !== void 0 ? _data$users : data[\"org.matrix.msc4429.users\"];\n if (typeof userUpdate === \"object\" && userUpdate !== null) {\n var usersToRemove = [];\n var profilesToAmend = new Map();\n for (var _ref0 of Object.entries(userUpdate)) {\n var _ref9 = _slicedToArray(_ref0, 2);\n var userId = _ref9[0];\n var userData = _ref9[1];\n logger.info(\"Storing user profile \".concat(userId), userData);\n if (userData.profile_updates) {\n var existingProfile = yield client.store.getUserProfile(userId);\n profilesToAmend.set(userId, _objectSpread(_objectSpread({}, existingProfile), userData.profile_updates));\n } else if (userData.profile_updates === null) {\n usersToRemove.push(userId);\n }\n }\n if (usersToRemove.length) {\n yield client.store.removeUserProfiles(usersToRemove);\n }\n if (profilesToAmend.size) {\n yield client.store.storeUserProfiles(profilesToAmend);\n }\n\n // emit after we've update the store so that clients can get the updated profile if they want to\n for (var _ref11 of Object.entries(userUpdate)) {\n var _userData$profile_upd;\n var _ref10 = _slicedToArray(_ref11, 2);\n var _userId = _ref10[0];\n var _userData = _ref10[1];\n client.emit(ClientEvent.UserProfileUpdate, _userId, (_userData$profile_upd = _userData.profile_updates) !== null && _userData$profile_upd !== void 0 ? _userData$profile_upd : null);\n }\n }\n\n // handle to-device events\n if (data.to_device && Array.isArray(data.to_device.events) && data.to_device.events.length > 0) {\n var toDeviceMessages = data.to_device.events.filter(noUnsafeEventProps);\n var receivedToDeviceMessages;\n if (_this9.syncOpts.cryptoCallbacks) {\n receivedToDeviceMessages = yield _this9.syncOpts.cryptoCallbacks.preprocessToDeviceMessages(toDeviceMessages);\n } else {\n receivedToDeviceMessages = toDeviceMessages.map(rawEvent => (\n // Crypto is not enabled, so we just return the events.\n {\n message: rawEvent,\n encryptionInfo: null\n }));\n }\n processToDeviceMessages(receivedToDeviceMessages, client);\n } else {\n // no more to-device events: we can stop polling with a short timeout.\n _this9.catchingUp = false;\n }\n\n // the returned json structure is a bit crap, so make it into a\n // nicer form (array) after applying sanity to make sure we don't fail\n // on missing keys (on the off chance)\n var inviteRooms = [];\n var joinRooms = [];\n var leaveRooms = [];\n var knockRooms = [];\n if (data.rooms) {\n if (data.rooms.invite) {\n inviteRooms = _this9.mapSyncResponseToRoomArray(data.rooms.invite);\n }\n if (data.rooms.join) {\n joinRooms = _this9.mapSyncResponseToRoomArray(data.rooms.join);\n }\n if (data.rooms.leave) {\n leaveRooms = _this9.mapSyncResponseToRoomArray(data.rooms.leave);\n }\n if (data.rooms.knock) {\n knockRooms = _this9.mapSyncResponseToRoomArray(data.rooms.knock);\n }\n }\n _this9.notifEvents = [];\n\n // Handle invites\n yield Promise.all(inviteRooms.map(/*#__PURE__*/function () {\n var _ref12 = _asyncToGenerator(function* (inviteObj) {\n var room = inviteObj.room;\n var stateEvents = _this9.mapSyncEventsFormat(inviteObj.invite_state, room);\n yield _this9.injectRoomEvents(room, stateEvents, undefined);\n if (inviteObj.isBrandNewRoom) {\n room.recalculate();\n client.store.storeRoom(room);\n client.emit(ClientEvent.Room, room);\n } else {\n // Update room state for invite->reject->invite cycles\n room.recalculate();\n }\n stateEvents.forEach(function (e) {\n client.emit(ClientEvent.Event, e);\n });\n });\n return function (_x3) {\n return _ref12.apply(this, arguments);\n };\n }()));\n\n // Handle joins\n yield Promise.all(joinRooms.map(/*#__PURE__*/function () {\n var _ref13 = _asyncToGenerator(function* (joinObj) {\n var _joinObj$UNREAD_THREA;\n var room = joinObj.room;\n var stateEvents = _this9.mapSyncEventsFormat(joinObj.state, room);\n var stateAfterEvents = _this9.mapSyncEventsFormat(joinObj[\"org.matrix.msc4222.state_after\"], room);\n // Prevent events from being decrypted ahead of time\n // this helps large account to speed up faster\n // room::decryptCriticalEvent is in charge of decrypting all the events\n // required for a client to function properly\n var timelineEvents = _this9.mapSyncEventsFormat(joinObj.timeline, room, false);\n var ephemeralEvents = _this9.mapSyncEventsFormat(joinObj.ephemeral);\n var accountDataEvents = _this9.mapSyncEventsFormat(joinObj.account_data);\n var stickyEvents = _this9.mapSyncEventsFormat(joinObj.msc4354_sticky);\n\n // If state_after is present, this is the events that form the state at the end of the timeline block and\n // regular timeline events do *not* count towards state. If it's not present, then the state is formed by\n // the state events plus the timeline events. Note mapSyncEventsFormat returns an empty array if the field\n // is absent so we explicitly check the field on the original object.\n var eventsFormingFinalState = joinObj[\"org.matrix.msc4222.state_after\"] ? stateAfterEvents : stateEvents.concat(timelineEvents);\n var encrypted = _this9.isRoomEncrypted(room, eventsFormingFinalState);\n // We store the server-provided value first so it's correct when any of the events fire.\n if (joinObj.unread_notifications) {\n /**\n * We track unread notifications ourselves in encrypted rooms, so don't\n * bother setting it here. We trust our calculations better than the\n * server's for this case, and therefore will assume that our non-zero\n * count is accurate.\n * XXX: this is known faulty as the push rule for `.m.room.encrypted` may be disabled so server\n * may issue notification counts of 0 which we wrongly trust.\n * https://github.com/matrix-org/matrix-spec-proposals/pull/2654 would fix this\n *\n * @see import(\"./client\").fixNotificationCountOnDecryption\n */\n if (!encrypted || joinObj.unread_notifications.notification_count === 0) {\n var _joinObj$unread_notif;\n // In an encrypted room, if the room has notifications enabled then it's typical for\n // the server to flag all new messages as notifying. However, some push rules calculate\n // events as ignored based on their event contents (e.g. ignoring msgtype=m.notice messages)\n // so we want to calculate this figure on the client in all cases.\n room.setUnreadNotificationCount(NotificationCountType.Total, (_joinObj$unread_notif = joinObj.unread_notifications.notification_count) !== null && _joinObj$unread_notif !== void 0 ? _joinObj$unread_notif : 0);\n }\n if (!encrypted || room.getUnreadNotificationCount(NotificationCountType.Highlight) <= 0) {\n var _joinObj$unread_notif2;\n // If the locally stored highlight count is zero, use the server provided value.\n room.setUnreadNotificationCount(NotificationCountType.Highlight, (_joinObj$unread_notif2 = joinObj.unread_notifications.highlight_count) !== null && _joinObj$unread_notif2 !== void 0 ? _joinObj$unread_notif2 : 0);\n }\n }\n var unreadThreadNotifications = (_joinObj$UNREAD_THREA = joinObj[UNREAD_THREAD_NOTIFICATIONS.name]) !== null && _joinObj$UNREAD_THREA !== void 0 ? _joinObj$UNREAD_THREA : joinObj[UNREAD_THREAD_NOTIFICATIONS.altName];\n if (unreadThreadNotifications) {\n // This mirrors the logic above for rooms: take the *total* notification count from\n // the server for unencrypted rooms or is it's zero. Any threads not present in this\n // object implicitly have zero notifications, so start by clearing the total counts\n // for all such threads.\n room.resetThreadUnreadNotificationCountFromSync(Object.keys(unreadThreadNotifications));\n for (var _ref16 of Object.entries(unreadThreadNotifications)) {\n var _ref15 = _slicedToArray(_ref16, 2);\n var threadId = _ref15[0];\n var unreadNotification = _ref15[1];\n if (!encrypted || unreadNotification.notification_count === 0) {\n var _unreadNotification$n;\n room.setThreadUnreadNotificationCount(threadId, NotificationCountType.Total, (_unreadNotification$n = unreadNotification.notification_count) !== null && _unreadNotification$n !== void 0 ? _unreadNotification$n : 0);\n }\n var hasNoNotifications = room.getThreadUnreadNotificationCount(threadId, NotificationCountType.Highlight) <= 0;\n if (!encrypted || encrypted && hasNoNotifications) {\n var _unreadNotification$h;\n room.setThreadUnreadNotificationCount(threadId, NotificationCountType.Highlight, (_unreadNotification$h = unreadNotification.highlight_count) !== null && _unreadNotification$h !== void 0 ? _unreadNotification$h : 0);\n }\n }\n } else {\n room.resetThreadUnreadNotificationCountFromSync();\n }\n joinObj.timeline = joinObj.timeline || {};\n if (joinObj.isBrandNewRoom) {\n // set the back-pagination token. Do this *before* adding any\n // events so that clients can start back-paginating.\n if (joinObj.timeline.prev_batch !== null) {\n room.getLiveTimeline().setPaginationToken(joinObj.timeline.prev_batch, EventTimeline.BACKWARDS);\n }\n } else if (joinObj.timeline.limited) {\n var limited = true;\n\n // we've got a limited sync, so we *probably* have a gap in the\n // timeline, so should reset. But we might have been peeking or\n // paginating and already have some of the events, in which\n // case we just want to append any subsequent events to the end\n // of the existing timeline.\n //\n // This is particularly important in the case that we already have\n // *all* of the events in the timeline - in that case, if we reset\n // the timeline, we'll end up with an entirely empty timeline,\n // which we'll try to paginate but not get any new events (which\n // will stop us linking the empty timeline into the chain).\n //\n for (var i = timelineEvents.length - 1; i >= 0; i--) {\n var eventId = timelineEvents[i].getId();\n if (room.getTimelineForEvent(eventId)) {\n _this9.syncOpts.logger.debug(\"Already have event \".concat(eventId, \" in limited sync - not resetting\"));\n limited = false;\n\n // we might still be missing some of the events before i;\n // we don't want to be adding them to the end of the\n // timeline because that would put them out of order.\n timelineEvents.splice(0, i);\n\n // XXX: there's a problem here if the skipped part of the\n // timeline modifies the state set in stateEvents, because\n // we'll end up using the state from stateEvents rather\n // than the later state from timelineEvents. We probably\n // need to wind stateEvents forward over the events we're\n // skipping.\n\n break;\n }\n }\n if (limited) {\n var _syncEventData$oldSyn;\n room.resetLiveTimeline(joinObj.timeline.prev_batch, _this9.syncOpts.canResetEntireTimeline(room.roomId) ? null : (_syncEventData$oldSyn = syncEventData.oldSyncToken) !== null && _syncEventData$oldSyn !== void 0 ? _syncEventData$oldSyn : null);\n\n // We have to assume any gap in any timeline is\n // reason to stop incrementally tracking notifications and\n // reset the timeline.\n client.resetNotifTimelineSet();\n }\n }\n\n // process any crypto events *before* emitting the RoomStateEvent events. This\n // avoids a race condition if the application tries to send a message after the\n // state event is processed, but before crypto is enabled, which then causes the\n // crypto layer to complain.\n\n if (_this9.syncOpts.cryptoCallbacks) {\n for (var e of eventsFormingFinalState) {\n if (e.isState() && e.getType() === EventType.RoomEncryption && e.getStateKey() === \"\") {\n yield _this9.syncOpts.cryptoCallbacks.onCryptoEvent(room, e);\n }\n }\n }\n\n // Proactively decrypt state events: normally we decrypt on demand, but for state\n // events we need them immediately, so we handle them here. Specifically, consumers\n // (e.g. Element Web) expect state events to be unencrypted upon receipt.\n for (var ev of timelineEvents.filter(ev => ev.isState())) {\n yield _this9.client.decryptEventIfNeeded(ev);\n }\n try {\n if (\"org.matrix.msc4222.state_after\" in joinObj) {\n yield _this9.injectRoomEvents(room, undefined, stateAfterEvents, timelineEvents, syncEventData.fromCache);\n } else {\n yield _this9.injectRoomEvents(room, stateEvents, undefined, timelineEvents, syncEventData.fromCache);\n }\n } catch (e) {\n _this9.syncOpts.logger.error(\"Failed to process events on room \".concat(room.roomId, \":\"), e);\n }\n\n // set summary after processing events,\n // because it will trigger a name calculation\n // which needs the room state to be up to date\n if (joinObj.summary) {\n room.setSummary(joinObj.summary);\n }\n\n // we deliberately don't add ephemeral events to the timeline\n room.addEphemeralEvents(ephemeralEvents);\n\n // we deliberately don't add accountData to the timeline\n room.addAccountData(accountDataEvents);\n\n // Sticky events primarily come via the `timeline` field, with the\n // sticky info field marking them as sticky.\n // If the sync is \"gappy\" (meaning it is skipping events to catch up) then\n // sticky events will instead come down the sticky section.\n // This ensures we collect sticky events from both places.\n var stickyEventsAndStickyEventsFromTheTimeline = stickyEvents.concat(timelineEvents.filter(e => e.unstableStickyInfo !== undefined));\n // Note: We calculate sticky events before emitting `.Room` as it's nice to have\n // sticky events calculated and ready to go.\n room._unstable_addStickyEvents(stickyEventsAndStickyEventsFromTheTimeline);\n room.recalculate();\n if (joinObj.isBrandNewRoom) {\n client.store.storeRoom(room);\n client.emit(ClientEvent.Room, room);\n }\n _this9.processEventsForNotifs(room, timelineEvents);\n var emitEvent = e => client.emit(ClientEvent.Event, e);\n // this fires a couple of times for some events. (eg state events are in the timeline and the state)\n // should this get a sync section as an additional event emission param (e, syncSection))?\n stateEvents.forEach(emitEvent);\n timelineEvents.forEach(emitEvent);\n ephemeralEvents.forEach(emitEvent);\n accountDataEvents.forEach(emitEvent);\n stickyEvents.filter(stickyEvent =>\n // This is highly unlikey, but in the case where a sticky event\n // has appeared in the timeline AND the sticky section, we only\n // want to emit the event once.\n !timelineEvents.some(timelineEvent => timelineEvent.getId() === stickyEvent.getId())).forEach(emitEvent);\n // Decrypt only the last message in all rooms to make sure we can generate a preview\n // And decrypt all events after the recorded read receipt to ensure an accurate\n // notification count\n room.decryptCriticalEvents();\n });\n return function (_x4) {\n return _ref13.apply(this, arguments);\n };\n }()));\n\n // Handle leaves (e.g. kicked rooms)\n yield Promise.all(leaveRooms.map(/*#__PURE__*/function () {\n var _ref17 = _asyncToGenerator(function* (leaveObj) {\n var room = leaveObj.room;\n var _yield$_this9$mapAndI = yield _this9.mapAndInjectRoomEvents(leaveObj),\n timelineEvents = _yield$_this9$mapAndI.timelineEvents,\n stateEvents = _yield$_this9$mapAndI.stateEvents,\n stateAfterEvents = _yield$_this9$mapAndI.stateAfterEvents;\n var accountDataEvents = _this9.mapSyncEventsFormat(leaveObj.account_data);\n room.addAccountData(accountDataEvents);\n room.recalculate();\n if (leaveObj.isBrandNewRoom) {\n client.store.storeRoom(room);\n client.emit(ClientEvent.Room, room);\n }\n _this9.processEventsForNotifs(room, timelineEvents);\n stateEvents === null || stateEvents === void 0 || stateEvents.forEach(function (e) {\n client.emit(ClientEvent.Event, e);\n });\n stateAfterEvents === null || stateAfterEvents === void 0 || stateAfterEvents.forEach(function (e) {\n client.emit(ClientEvent.Event, e);\n });\n timelineEvents.forEach(function (e) {\n client.emit(ClientEvent.Event, e);\n });\n accountDataEvents.forEach(function (e) {\n client.emit(ClientEvent.Event, e);\n });\n });\n return function (_x5) {\n return _ref17.apply(this, arguments);\n };\n }()));\n\n // Handle knocks\n yield Promise.all(knockRooms.map(/*#__PURE__*/function () {\n var _ref18 = _asyncToGenerator(function* (knockObj) {\n var room = knockObj.room;\n var stateEvents = _this9.mapSyncEventsFormat(knockObj.knock_state, room);\n yield _this9.injectRoomEvents(room, stateEvents, undefined);\n if (knockObj.isBrandNewRoom) {\n room.recalculate();\n client.store.storeRoom(room);\n client.emit(ClientEvent.Room, room);\n } else {\n // Update room state for knock->leave->knock cycles\n room.recalculate();\n }\n stateEvents.forEach(function (e) {\n client.emit(ClientEvent.Event, e);\n });\n });\n return function (_x6) {\n return _ref18.apply(this, arguments);\n };\n }()));\n\n // update the notification timeline, if appropriate.\n // we only do this for live events, as otherwise we can't order them sanely\n // in the timeline relative to ones paginated in by /notifications.\n // XXX: we could fix this by making EventTimeline support chronological\n // ordering... but it doesn't, right now.\n if (syncEventData.oldSyncToken && _this9.notifEvents.length) {\n _this9.notifEvents.sort(function (a, b) {\n return a.getTs() - b.getTs();\n });\n _this9.notifEvents.forEach(function (event) {\n var _client$getNotifTimel;\n (_client$getNotifTimel = client.getNotifTimelineSet()) === null || _client$getNotifTimel === void 0 || _client$getNotifTimel.addLiveEvent(event, {\n addToState: true\n });\n });\n }\n\n // Handle device list updates\n if (data.device_lists) {\n if (_this9.syncOpts.cryptoCallbacks) {\n yield _this9.syncOpts.cryptoCallbacks.processDeviceLists(data.device_lists);\n } else {\n // FIXME if we *don't* have a crypto module, we still need to\n // invalidate the device lists. But that would require a\n // substantial bit of rework :/.\n }\n }\n\n // Handle one_time_keys_count and unused fallback keys\n yield (_this9$syncOpts$crypt = _this9.syncOpts.cryptoCallbacks) === null || _this9$syncOpts$crypt === void 0 ? void 0 : _this9$syncOpts$crypt.processKeyCounts(data.device_one_time_keys_count, (_data$device_unused_f = data.device_unused_fallback_key_types) !== null && _data$device_unused_f !== void 0 ? _data$device_unused_f : data[\"org.matrix.msc2732.device_unused_fallback_key_types\"]);\n })();\n }\n\n /**\n * Starts polling the connectivity check endpoint\n * @param delay - How long to delay until the first poll.\n * defaults to a short, randomised interval (to prevent\n * tight-looping if /versions succeeds but /sync etc. fail).\n * @returns which resolves once the connection returns\n */\n startKeepAlives(delay) {\n if (delay === undefined) {\n delay = 2000 + Math.floor(Math.random() * 5000);\n }\n if (this.keepAliveTimer !== null) {\n clearTimeout(this.keepAliveTimer);\n }\n if (delay > 0) {\n this.keepAliveTimer = setTimeout(this.pokeKeepAlive.bind(this), delay);\n } else {\n this.pokeKeepAlive();\n }\n if (!this.connectionReturnedResolvers) {\n this.connectionReturnedResolvers = Promise.withResolvers();\n }\n return this.connectionReturnedResolvers.promise;\n }\n\n /**\n * Make a dummy call to /_matrix/client/versions, to see if the HS is\n * reachable.\n *\n * On failure, schedules a call back to itself. On success, resolves\n * this.connectionReturnedResolvers.\n *\n * @param connDidFail - True if a connectivity failure has been detected. Optional.\n */\n pokeKeepAlive() {\n var _this$abortController4;\n var connDidFail = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (!this.running) {\n // we are in a keepAlive, retrying to connect, but the syncronization\n // was stopped, so we are stopping the retry.\n clearTimeout(this.keepAliveTimer);\n if (this.connectionReturnedResolvers) {\n this.connectionReturnedResolvers.reject(\"SyncApi.stop() was called\");\n this.connectionReturnedResolvers = undefined;\n }\n return;\n }\n var success = () => {\n clearTimeout(this.keepAliveTimer);\n if (this.connectionReturnedResolvers) {\n this.connectionReturnedResolvers.resolve(connDidFail);\n this.connectionReturnedResolvers = undefined;\n }\n };\n this.client.http.request(Method.Get, \"/_matrix/client/versions\", undefined,\n // queryParams\n undefined,\n // data\n {\n prefix: \"\",\n localTimeoutMs: 15 * 1000,\n abortSignal: (_this$abortController4 = this.abortController) === null || _this$abortController4 === void 0 ? void 0 : _this$abortController4.signal\n }).then(() => {\n success();\n }, err => {\n if (err.httpStatus == 400 || err.httpStatus == 404) {\n // treat this as a success because the server probably just doesn't\n // support /versions: point is, we're getting a response.\n // We wait a short time though, just in case somehow the server\n // is in a mode where it 400s /versions responses and sync etc.\n // responses fail, this will mean we don't hammer in a loop.\n this.keepAliveTimer = setTimeout(success, 2000);\n } else {\n connDidFail = true;\n this.keepAliveTimer = setTimeout(this.pokeKeepAlive.bind(this, connDidFail), 5000 + Math.floor(Math.random() * 5000));\n // A keepalive has failed, so we emit the\n // error state (whether or not this is the\n // first failure).\n // Note we do this after setting the timer:\n // this lets the unit tests advance the mock\n // clock when they get the error.\n this.updateSyncState(SyncState.Error, {\n error: err\n });\n }\n });\n }\n mapSyncResponseToRoomArray(obj) {\n // Maps { roomid: {stuff}, roomid: {stuff} }\n // to\n // [{stuff+Room+isBrandNewRoom}, {stuff+Room+isBrandNewRoom}]\n var client = this.client;\n return Object.keys(obj).filter(k => !unsafeProp(k)).map(roomId => {\n var room = client.store.getRoom(roomId);\n var isBrandNewRoom = false;\n if (!room) {\n room = this.createRoom(roomId);\n isBrandNewRoom = true;\n }\n return _objectSpread(_objectSpread({}, obj[roomId]), {}, {\n room,\n isBrandNewRoom\n });\n });\n }\n mapSyncEventsFormat(obj, room) {\n var decrypt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (!obj || !Array.isArray(obj.events)) {\n return [];\n }\n var mapper = this.client.getEventMapper({\n decrypt\n });\n return obj.events.filter(noUnsafeEventProps).map(function (e) {\n if (room) {\n e.room_id = room.roomId;\n }\n return mapper(e);\n });\n }\n\n /**\n */\n resolveInvites(room) {\n if (!room || !this.opts.resolveInvitesToProfiles) {\n return;\n }\n var client = this.client;\n // For each invited room member we want to give them a displayname/avatar url\n // if they have one (the m.room.member invites don't contain this).\n room.getMembersWithMembership(KnownMembership.Invite).forEach(function (member) {\n if (member.requestedProfileInfo) return;\n member.requestedProfileInfo = true;\n // try to get a cached copy first.\n var user = client.getUser(member.userId);\n var promise;\n if (user) {\n promise = Promise.resolve({\n avatar_url: user.avatarUrl,\n displayname: user.displayName\n });\n } else {\n promise = client.getProfileInfo(member.userId);\n }\n promise.then(function (info) {\n // slightly naughty by doctoring the invite event but this means all\n // the code paths remain the same between invite/join display name stuff\n // which is a worthy trade-off for some minor pollution.\n var inviteEvent = member.events.member;\n if ((inviteEvent === null || inviteEvent === void 0 ? void 0 : inviteEvent.getContent().membership) !== KnownMembership.Invite) {\n // between resolving and now they have since joined, so don't clobber\n return;\n }\n inviteEvent.getContent().avatar_url = info.avatar_url;\n inviteEvent.getContent().displayname = info.displayname;\n // fire listeners\n member.setMembershipEvent(inviteEvent, room.currentState);\n }, function (err) {\n // OH WELL.\n });\n });\n }\n findEncryptionEvent(events) {\n return events === null || events === void 0 ? void 0 : events.find(e => e.getType() === EventType.RoomEncryption && e.getStateKey() === \"\");\n }\n\n // When processing the sync response we cannot rely on Room.hasEncryptionStateEvent we actually\n // inject the events into the room object, so we have to inspect the events themselves.\n isRoomEncrypted(room, eventsFormingFinalState) {\n return room.hasEncryptionStateEvent() || !!this.findEncryptionEvent(eventsFormingFinalState);\n }\n mapAndInjectRoomEvents(wrappedRoom) {\n var _this0 = this;\n return _asyncToGenerator(function* () {\n var stateEvents = _this0.mapSyncEventsFormat(wrappedRoom.state, wrappedRoom.room);\n var stateAfterEvents = _this0.mapSyncEventsFormat(wrappedRoom[\"org.matrix.msc4222.state_after\"], wrappedRoom.room);\n var timelineEvents = _this0.mapSyncEventsFormat(wrappedRoom.timeline, wrappedRoom.room);\n if (\"org.matrix.msc4222.state_after\" in wrappedRoom) {\n yield _this0.injectRoomEvents(wrappedRoom.room, undefined, stateAfterEvents, timelineEvents);\n } else {\n yield _this0.injectRoomEvents(wrappedRoom.room, stateEvents, undefined, timelineEvents);\n }\n return {\n timelineEvents,\n stateEvents,\n stateAfterEvents\n };\n })();\n }\n\n /**\n * Injects events into a room's model.\n * @param stateEventList - A list of state events. This is the state\n * at the *START* of the timeline list if it is supplied.\n * @param stateAfterEventList - A list of state events. This is the state\n * at the *END* of the timeline list if it is supplied.\n * @param timelineEventList - A list of timeline events, including threaded. Lower index\n * is earlier in time. Higher index is later.\n * @param fromCache - whether the sync response came from cache\n *\n * No more than one of stateEventList and stateAfterEventList must be supplied. If\n * stateEventList is supplied, the events in timelineEventList are added to the state\n * after stateEventList. If stateAfterEventList is supplied, the events in timelineEventList\n * are not added to the state.\n */\n\n injectRoomEvents(room, stateEventList, stateAfterEventList, timelineEventList) {\n var _arguments = arguments,\n _this1 = this;\n return _asyncToGenerator(function* () {\n var fromCache = _arguments.length > 4 && _arguments[4] !== undefined ? _arguments[4] : false;\n var eitherStateEventList = stateAfterEventList !== null && stateAfterEventList !== void 0 ? stateAfterEventList : stateEventList;\n\n // If there are no events in the timeline yet, initialise it with\n // the given state events\n var liveTimeline = room.getLiveTimeline();\n var timelineWasEmpty = liveTimeline.getEvents().length == 0;\n if (timelineWasEmpty) {\n // Passing these events into initialiseState will freeze them, so we need\n // to compute and cache the push actions for them now, otherwise sync dies\n // with an attempt to assign to read only property.\n // XXX: This is pretty horrible and is assuming all sorts of behaviour from\n // these functions that it shouldn't be. We should probably either store the\n // push actions cache elsewhere so we can freeze MatrixEvents, or otherwise\n // find some solution where MatrixEvents are immutable but allow for a cache\n // field.\n\n for (var ev of eitherStateEventList) {\n _this1.client.getPushActionsForEvent(ev);\n }\n liveTimeline.initialiseState(eitherStateEventList, {\n timelineWasEmpty\n });\n }\n _this1.resolveInvites(room);\n\n // recalculate the room name at this point as adding events to the timeline\n // may make notifications appear which should have the right name.\n // XXX: This looks suspect: we'll end up recalculating the room once here\n // and then again after adding events (processSyncResponse calls it after\n // calling us) even if no state events were added. It also means that if\n // one of the room events in timelineEventList is something that needs\n // a recalculation (like m.room.name) we won't recalculate until we've\n // finished adding all the events, which will cause the notification to have\n // the old room name rather than the new one.\n room.recalculate();\n\n // If the timeline wasn't empty, we process the state events here: they're\n // defined as updates to the state before the start of the timeline, so this\n // starts to roll the state forward.\n // XXX: That's what we *should* do, but this can happen if we were previously\n // peeking in a room, in which case we obviously do *not* want to add the\n // state events here onto the end of the timeline. Historically, the js-sdk\n // has just set these new state events on the old and new state. This seems\n // very wrong because there could be events in the timeline that diverge the\n // state, in which case this is going to leave things out of sync. However,\n // for now I think it;s best to behave the same as the code has done previously.\n if (!timelineWasEmpty) {\n // XXX: As above, don't do this...\n //room.addLiveEvents(stateEventList || []);\n // Do this instead...\n room.oldState.setStateEvents(eitherStateEventList);\n room.currentState.setStateEvents(eitherStateEventList);\n }\n\n // Execute the timeline events. If addToState is true the timeline has any state\n // events in it, this will continue to diverge the current state.\n // This also needs to be done before running push rules on the events as they need\n // to be decorated with sender etc.\n yield room.addLiveEvents(timelineEventList || [], {\n fromCache,\n timelineWasEmpty,\n addToState: stateAfterEventList === undefined\n });\n _this1.client.processBeaconEvents(room, timelineEventList);\n })();\n }\n\n /**\n * Takes a list of timelineEvents and adds and adds to notifEvents\n * as appropriate.\n * This must be called after the room the events belong to has been stored.\n *\n * @param timelineEventList - A list of timeline events. Lower index\n * is earlier in time. Higher index is later.\n */\n processEventsForNotifs(room, timelineEventList) {\n // gather our notifications into this.notifEvents\n if (this.client.getNotifTimelineSet()) {\n for (var event of timelineEventList) {\n var _pushActions$tweaks;\n var pushActions = this.client.getPushActionsForEvent(event);\n if (pushActions !== null && pushActions !== void 0 && pushActions.notify && (_pushActions$tweaks = pushActions.tweaks) !== null && _pushActions$tweaks !== void 0 && _pushActions$tweaks.highlight) {\n this.notifEvents.push(event);\n }\n }\n }\n }\n getGuestFilter() {\n // Dev note: This used to be conditional to return a filter of 20 events maximum, but\n // the condition never went to the other branch. This is now hardcoded.\n return \"{}\";\n }\n\n /**\n * Sets the sync state and emits an event to say so\n * @param newState - The new state string\n * @param data - Object of additional data to emit in the event\n */\n updateSyncState(newState, data) {\n var old = this.syncState;\n this.syncState = newState;\n this.syncStateData = data;\n this.client.emit(ClientEvent.Sync, this.syncState, old, data);\n }\n}\n\n// /!\\ This function is not intended for public use! It's only exported from\n// here in order to share some common logic with sliding-sync-sdk.ts.\nexport function _createAndReEmitRoom(client, roomId, opts) {\n var timelineSupport = client.timelineSupport;\n var room = new Room(roomId, client, client.getUserId(), {\n lazyLoadMembers: opts.lazyLoadMembers,\n pendingEventOrdering: opts.pendingEventOrdering,\n timelineSupport\n });\n client.reEmitter.reEmit(room, [RoomEvent.Name, RoomEvent.Redaction, RoomEvent.RedactionCancelled, RoomEvent.Receipt, RoomEvent.Tags, RoomEvent.LocalEchoUpdated, RoomEvent.AccountData, RoomEvent.MyMembership, RoomEvent.Timeline, RoomEvent.TimelineReset, RoomStateEvent.Events, RoomStateEvent.Members, RoomStateEvent.NewMember, RoomStateEvent.Update, BeaconEvent.New, BeaconEvent.Update, BeaconEvent.Destroy, BeaconEvent.LivenessChange]);\n\n // We need to add a listener for RoomState.members in order to hook them\n // correctly.\n room.on(RoomStateEvent.NewMember, (event, state, member) => {\n var _client$getUser;\n member.user = (_client$getUser = client.getUser(member.userId)) !== null && _client$getUser !== void 0 ? _client$getUser : undefined;\n client.reEmitter.reEmit(member, [RoomMemberEvent.Name, RoomMemberEvent.Typing, RoomMemberEvent.PowerLevel, RoomMemberEvent.Membership]);\n });\n return room;\n}\n\n/**\n * Process a list of (decrypted, where possible) received to-device events.\n *\n * Emits the appropriate {@link ClientEvent.ReceivedToDeviceMessage} event.\n * Also converts the events into `MatrixEvent`s, and emits the now deprecated {@link ClientEvent.ToDeviceEvent} events for compatibility.\n * */\nexport function processToDeviceMessages(toDeviceMessages, client) {\n var cancelledKeyVerificationTxns = [];\n toDeviceMessages.map(processedMessage => {\n // map is a cheap inline forEach\n // We want to flag m.key.verification.start events as cancelled\n // if there's an accompanying m.key.verification.cancel event, so\n // we pull out the transaction IDs from the cancellation events\n // so we can flag the verification events as cancelled in the loop\n // below.\n if (processedMessage.message.type === \"m.key.verification.cancel\") {\n var txnId = processedMessage.message.content[\"transaction_id\"];\n if (txnId) {\n cancelledKeyVerificationTxns.push(txnId);\n }\n }\n\n // as mentioned above, .map is a cheap inline forEach, so return\n // the unmodified event.\n return processedMessage;\n }).forEach(function (processedEvent) {\n // For backwards compatibility, we also emit the event as a `MatrixEvent` using `ClientEvent.ToDeviceEvent`.\n {\n var toDeviceEvent = processedEvent.message;\n var content = toDeviceEvent.content;\n // The message is cloned before being passed to the MatrixEvent constructor, because\n // the `makeEncrypted` method will mutate the type and content properties of the original message and will interfere\n // with the emitted event for `ReceivedToDeviceMessage`.\n var deprecatedCompatibilityEvent = new MatrixEvent(Object.assign({}, toDeviceEvent));\n if (toDeviceEvent.type === \"m.key.verification.start\" || toDeviceEvent.type === \"m.key.verification.request\") {\n var txnId = content[\"transaction_id\"];\n if (cancelledKeyVerificationTxns.includes(txnId)) {\n deprecatedCompatibilityEvent.flagCancelled();\n }\n }\n if (processedEvent.encryptionInfo) {\n // Restore partially the legacy behavior to detect encrypted messages.\n // Now `event.isEncrypted()` will return true.\n deprecatedCompatibilityEvent.makeEncrypted(EventType.RoomMessageEncrypted, {\n ciphertext: \"\"\n }, processedEvent.encryptionInfo.senderCurve25519KeyBase64, \"\");\n }\n client.emit(ClientEvent.ToDeviceEvent, deprecatedCompatibilityEvent);\n }\n client.emit(ClientEvent.ReceivedToDeviceMessage, processedEvent);\n });\n}\n//# sourceMappingURL=sync.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module.\n */\n\n/**\n * Construct a stub store. This does no-ops on most store methods.\n */\nexport class StubStore {\n constructor() {\n _defineProperty(this, \"accountData\", new Map());\n // stub\n _defineProperty(this, \"fromToken\", null);\n }\n /** @returns whether or not the database was newly created in this session. */\n isNewlyCreated() {\n return Promise.resolve(true);\n }\n\n /**\n * Get the sync token.\n */\n getSyncToken() {\n return this.fromToken;\n }\n\n /**\n * Set the sync token.\n */\n setSyncToken(token) {\n this.fromToken = token;\n }\n\n /**\n * No-op.\n */\n storeRoom(room) {}\n\n /**\n * No-op.\n */\n getRoom(roomId) {\n return null;\n }\n\n /**\n * No-op.\n * @returns An empty array.\n */\n getRooms() {\n return [];\n }\n\n /**\n * Permanently delete a room.\n */\n removeRoom(roomId) {\n return;\n }\n\n /**\n * No-op.\n * @returns An empty array.\n */\n getRoomSummaries() {\n return [];\n }\n\n /**\n * No-op.\n */\n storeUser(user) {}\n\n /**\n * No-op.\n */\n getUser(userId) {\n return null;\n }\n\n /**\n * No-op.\n */\n getUsers() {\n return [];\n }\n\n /**\n * No-op.\n */\n scrollback(room, limit) {\n return [];\n }\n\n /**\n * No-op.\n */\n setUserCreator(creator) {\n return;\n }\n\n /**\n * Store events for a room.\n * @param room - The room to store events for.\n * @param events - The events to store.\n * @param token - The token associated with these events.\n * @param toStart - True if these are paginated results.\n */\n storeEvents(room, events, token, toStart) {}\n\n /**\n * Store a filter.\n */\n storeFilter(filter) {}\n\n /**\n * Retrieve a filter.\n * @returns A filter or null.\n */\n getFilter(userId, filterId) {\n return null;\n }\n\n /**\n * Retrieve a filter ID with the given name.\n * @param filterName - The filter name.\n * @returns The filter ID or null.\n */\n getFilterIdByName(filterName) {\n return null;\n }\n\n /**\n * Set a filter name to ID mapping.\n */\n setFilterIdByName(filterName, filterId) {}\n\n /**\n * Store user-scoped account data events\n * @param events - The events to store.\n */\n storeAccountDataEvents(events) {}\n\n /**\n * Get account data event by event type\n * @param eventType - The event type being queried\n */\n getAccountData(eventType) {\n return undefined;\n }\n\n /**\n * setSyncData does nothing as there is no backing data store.\n *\n * @param syncData - The sync data\n * @returns An immediately resolved promise.\n */\n setSyncData(syncData) {\n return Promise.resolve();\n }\n\n /**\n * We never want to save because we have nothing to save to.\n *\n * @returns If the store wants to save\n */\n wantsSave() {\n return false;\n }\n\n /**\n * Save does nothing as there is no backing data store.\n */\n save() {\n return Promise.resolve();\n }\n\n /**\n * Startup does nothing.\n * @returns An immediately resolved promise.\n */\n startup() {\n return Promise.resolve();\n }\n\n /**\n * @returns Promise which resolves with a sync response to restore the\n * client state to where it was at the last save, or null if there\n * is no saved sync data.\n */\n getSavedSync() {\n return Promise.resolve(null);\n }\n\n /**\n * @returns If there is a saved sync, the nextBatch token\n * for this sync, otherwise null.\n */\n getSavedSyncToken() {\n return Promise.resolve(null);\n }\n\n /**\n * Delete all data from this store. Does nothing since this store\n * doesn't store anything.\n * @returns An immediately resolved promise.\n */\n deleteAllData() {\n return Promise.resolve();\n }\n getOutOfBandMembers() {\n return Promise.resolve(null);\n }\n setOutOfBandMembers(roomId, membershipEvents) {\n return Promise.resolve();\n }\n clearOutOfBandMembers() {\n return Promise.resolve();\n }\n getClientOptions() {\n return Promise.resolve(undefined);\n }\n storeClientOptions(options) {\n return Promise.resolve();\n }\n getPendingEvents(roomId) {\n return _asyncToGenerator(function* () {\n return [];\n })();\n }\n setPendingEvents(roomId, events) {\n return Promise.resolve();\n }\n saveToDeviceBatches(batch) {\n return _asyncToGenerator(function* () {\n return Promise.resolve();\n })();\n }\n getOldestToDeviceBatch() {\n return Promise.resolve(null);\n }\n removeToDeviceBatch(id) {\n return _asyncToGenerator(function* () {\n return Promise.resolve();\n })();\n }\n getUserProfile() {\n return _asyncToGenerator(function* () {\n return undefined;\n })();\n }\n storeUserProfiles() {\n return _asyncToGenerator(function* () {\n return;\n })();\n }\n removeUserProfiles() {\n return _asyncToGenerator(function* () {\n return;\n })();\n }\n destroy() {\n return _asyncToGenerator(function* () {})();\n } // Nothing to do\n removeEventsFromRoom(roomId, eventIds) {\n return _asyncToGenerator(function* () {})();\n } // Nothing to do\n}\n//# sourceMappingURL=stub.js.map","var grammar = module.exports = {\n v: [{\n name: 'version',\n reg: /^(\\d*)$/\n }],\n o: [{\n // o=- 20518 0 IN IP4 203.0.113.1\n // NB: sessionId will be a String in most cases because it is huge\n name: 'origin',\n reg: /^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,\n names: ['username', 'sessionId', 'sessionVersion', 'netType', 'ipVer', 'address'],\n format: '%s %s %d %s IP%d %s'\n }],\n // default parsing of these only (though some of these feel outdated)\n s: [{ name: 'name' }],\n i: [{ name: 'description' }],\n u: [{ name: 'uri' }],\n e: [{ name: 'email' }],\n p: [{ name: 'phone' }],\n z: [{ name: 'timezones' }], // TODO: this one can actually be parsed properly...\n r: [{ name: 'repeats' }], // TODO: this one can also be parsed properly\n // k: [{}], // outdated thing ignored\n t: [{\n // t=0 0\n name: 'timing',\n reg: /^(\\d*) (\\d*)/,\n names: ['start', 'stop'],\n format: '%d %d'\n }],\n c: [{\n // c=IN IP4 10.47.197.26\n name: 'connection',\n reg: /^IN IP(\\d) (\\S*)/,\n names: ['version', 'ip'],\n format: 'IN IP%d %s'\n }],\n b: [{\n // b=AS:4000\n push: 'bandwidth',\n reg: /^(TIAS|AS|CT|RR|RS):(\\d*)/,\n names: ['type', 'limit'],\n format: '%s:%s'\n }],\n m: [{\n // m=video 51744 RTP/AVP 126 97 98 34 31\n // NB: special - pushes to session\n // TODO: rtp/fmtp should be filtered by the payloads found here?\n reg: /^(\\w*) (\\d*) ([\\w/]*)(?: (.*))?/,\n names: ['type', 'port', 'protocol', 'payloads'],\n format: '%s %d %s %s'\n }],\n a: [\n {\n // a=rtpmap:110 opus/48000/2\n push: 'rtp',\n reg: /^rtpmap:(\\d*) ([\\w\\-.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,\n names: ['payload', 'codec', 'rate', 'encoding'],\n format: function (o) {\n return (o.encoding)\n ? 'rtpmap:%d %s/%s/%s'\n : o.rate\n ? 'rtpmap:%d %s/%s'\n : 'rtpmap:%d %s';\n }\n },\n {\n // a=fmtp:108 profile-level-id=24;object=23;bitrate=64000\n // a=fmtp:111 minptime=10; useinbandfec=1\n push: 'fmtp',\n reg: /^fmtp:(\\d*) ([\\S| ]*)/,\n names: ['payload', 'config'],\n format: 'fmtp:%d %s'\n },\n {\n // a=control:streamid=0\n name: 'control',\n reg: /^control:(.*)/,\n format: 'control:%s'\n },\n {\n // a=rtcp:65179 IN IP4 193.84.77.194\n name: 'rtcp',\n reg: /^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,\n names: ['port', 'netType', 'ipVer', 'address'],\n format: function (o) {\n return (o.address != null)\n ? 'rtcp:%d %s IP%d %s'\n : 'rtcp:%d';\n }\n },\n {\n // a=rtcp-fb:98 trr-int 100\n push: 'rtcpFbTrrInt',\n reg: /^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,\n names: ['payload', 'value'],\n format: 'rtcp-fb:%s trr-int %d'\n },\n {\n // a=rtcp-fb:98 nack rpsi\n push: 'rtcpFb',\n reg: /^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,\n names: ['payload', 'type', 'subtype'],\n format: function (o) {\n return (o.subtype != null)\n ? 'rtcp-fb:%s %s %s'\n : 'rtcp-fb:%s %s';\n }\n },\n {\n // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n // a=extmap:1/recvonly URI-gps-string\n // a=extmap:3 urn:ietf:params:rtp-hdrext:encrypt urn:ietf:params:rtp-hdrext:smpte-tc 25@600/24\n push: 'ext',\n reg: /^extmap:(\\d+)(?:\\/(\\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\\S*)(?: (\\S*))?/,\n names: ['value', 'direction', 'encrypt-uri', 'uri', 'config'],\n format: function (o) {\n return (\n 'extmap:%d' +\n (o.direction ? '/%s' : '%v') +\n (o['encrypt-uri'] ? ' %s' : '%v') +\n ' %s' +\n (o.config ? ' %s' : '')\n );\n }\n },\n {\n // a=extmap-allow-mixed\n name: 'extmapAllowMixed',\n reg: /^(extmap-allow-mixed)/\n },\n {\n // a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32\n push: 'crypto',\n reg: /^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,\n names: ['id', 'suite', 'config', 'sessionConfig'],\n format: function (o) {\n return (o.sessionConfig != null)\n ? 'crypto:%d %s %s %s'\n : 'crypto:%d %s %s';\n }\n },\n {\n // a=setup:actpass\n name: 'setup',\n reg: /^setup:(\\w*)/,\n format: 'setup:%s'\n },\n {\n // a=connection:new\n name: 'connectionType',\n reg: /^connection:(new|existing)/,\n format: 'connection:%s'\n },\n {\n // a=mid:1\n name: 'mid',\n reg: /^mid:([^\\s]*)/,\n format: 'mid:%s'\n },\n {\n // a=msid:0c8b064d-d807-43b4-b434-f92a889d8587 98178685-d409-46e0-8e16-7ef0db0db64a\n push: 'msid',\n reg: /^msid:([\\w-]+)(?: ([\\w-]+))?/,\n names: ['id', 'appdata'],\n format: 'msid:%s %s'\n },\n {\n // a=ptime:20\n name: 'ptime',\n reg: /^ptime:(\\d*(?:\\.\\d*)*)/,\n format: 'ptime:%d'\n },\n {\n // a=maxptime:60\n name: 'maxptime',\n reg: /^maxptime:(\\d*(?:\\.\\d*)*)/,\n format: 'maxptime:%d'\n },\n {\n // a=sendrecv\n name: 'direction',\n reg: /^(sendrecv|recvonly|sendonly|inactive)/\n },\n {\n // a=ice-lite\n name: 'icelite',\n reg: /^(ice-lite)/\n },\n {\n // a=ice-ufrag:F7gI\n name: 'iceUfrag',\n reg: /^ice-ufrag:(\\S*)/,\n format: 'ice-ufrag:%s'\n },\n {\n // a=ice-pwd:x9cml/YzichV2+XlhiMu8g\n name: 'icePwd',\n reg: /^ice-pwd:(\\S*)/,\n format: 'ice-pwd:%s'\n },\n {\n // a=fingerprint:SHA-1 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33\n name: 'fingerprint',\n reg: /^fingerprint:(\\S*) (\\S*)/,\n names: ['type', 'hash'],\n format: 'fingerprint:%s %s'\n },\n {\n // a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host\n // a=candidate:1162875081 1 udp 2113937151 192.168.34.75 60017 typ host generation 0 network-id 3 network-cost 10\n // a=candidate:3289912957 2 udp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 generation 0 network-id 3 network-cost 10\n // a=candidate:229815620 1 tcp 1518280447 192.168.150.19 60017 typ host tcptype active generation 0 network-id 3 network-cost 10\n // a=candidate:3289912957 2 tcp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 tcptype passive generation 0 network-id 3 network-cost 10\n push:'candidates',\n reg: /^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,\n names: ['foundation', 'component', 'transport', 'priority', 'ip', 'port', 'type', 'raddr', 'rport', 'tcptype', 'generation', 'network-id', 'network-cost'],\n format: function (o) {\n var str = 'candidate:%s %d %s %d %s %d typ %s';\n\n str += (o.raddr != null) ? ' raddr %s rport %d' : '%v%v';\n\n // NB: candidate has three optional chunks, so %void middles one if it's missing\n str += (o.tcptype != null) ? ' tcptype %s' : '%v';\n\n if (o.generation != null) {\n str += ' generation %d';\n }\n\n str += (o['network-id'] != null) ? ' network-id %d' : '%v';\n str += (o['network-cost'] != null) ? ' network-cost %d' : '%v';\n return str;\n }\n },\n {\n // a=end-of-candidates (keep after the candidates line for readability)\n name: 'endOfCandidates',\n reg: /^(end-of-candidates)/\n },\n {\n // a=remote-candidates:1 203.0.113.1 54400 2 203.0.113.1 54401 ...\n name: 'remoteCandidates',\n reg: /^remote-candidates:(.*)/,\n format: 'remote-candidates:%s'\n },\n {\n // a=ice-options:google-ice\n name: 'iceOptions',\n reg: /^ice-options:(\\S*)/,\n format: 'ice-options:%s'\n },\n {\n // a=ssrc:2566107569 cname:t9YU8M1UxTF8Y1A1\n push: 'ssrcs',\n reg: /^ssrc:(\\d*) ([\\w_-]*)(?::(.*))?/,\n names: ['id', 'attribute', 'value'],\n format: function (o) {\n var str = 'ssrc:%d';\n if (o.attribute != null) {\n str += ' %s';\n if (o.value != null) {\n str += ':%s';\n }\n }\n return str;\n }\n },\n {\n // a=ssrc-group:FEC 1 2\n // a=ssrc-group:FEC-FR 3004364195 1080772241\n push: 'ssrcGroups',\n // token-char = %x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39 / %x41-5A / %x5E-7E\n reg: /^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,\n names: ['semantics', 'ssrcs'],\n format: 'ssrc-group:%s %s'\n },\n {\n // a=msid-semantic: WMS Jvlam5X3SX1OP6pn20zWogvaKJz5Hjf9OnlV\n name: 'msidSemantic',\n reg: /^msid-semantic:\\s?(\\w*) (\\S*)/,\n names: ['semantic', 'token'],\n format: 'msid-semantic: %s %s' // space after ':' is not accidental\n },\n {\n // a=group:BUNDLE audio video\n push: 'groups',\n reg: /^group:(\\w*) (.*)/,\n names: ['type', 'mids'],\n format: 'group:%s %s'\n },\n {\n // a=rtcp-mux\n name: 'rtcpMux',\n reg: /^(rtcp-mux)/\n },\n {\n // a=rtcp-rsize\n name: 'rtcpRsize',\n reg: /^(rtcp-rsize)/\n },\n {\n // a=sctpmap:5000 webrtc-datachannel 1024\n name: 'sctpmap',\n reg: /^sctpmap:([\\w_/]*) (\\S*)(?: (\\S*))?/,\n names: ['sctpmapNumber', 'app', 'maxMessageSize'],\n format: function (o) {\n return (o.maxMessageSize != null)\n ? 'sctpmap:%s %s %s'\n : 'sctpmap:%s %s';\n }\n },\n {\n // a=x-google-flag:conference\n name: 'xGoogleFlag',\n reg: /^x-google-flag:([^\\s]*)/,\n format: 'x-google-flag:%s'\n },\n {\n // a=rid:1 send max-width=1280;max-height=720;max-fps=30;depend=0\n push: 'rids',\n reg: /^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,\n names: ['id', 'direction', 'params'],\n format: function (o) {\n return (o.params) ? 'rid:%s %s %s' : 'rid:%s %s';\n }\n },\n {\n // a=imageattr:97 send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320] recv [x=330,y=250]\n // a=imageattr:* send [x=800,y=640] recv *\n // a=imageattr:100 recv [x=320,y=240]\n push: 'imageattrs',\n reg: new RegExp(\n // a=imageattr:97\n '^imageattr:(\\\\d+|\\\\*)' +\n // send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320]\n '[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)' +\n // recv [x=330,y=250]\n '(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?'\n ),\n names: ['pt', 'dir1', 'attrs1', 'dir2', 'attrs2'],\n format: function (o) {\n return 'imageattr:%s %s %s' + (o.dir2 ? ' %s %s' : '');\n }\n },\n {\n // a=simulcast:send 1,2,3;~4,~5 recv 6;~7,~8\n // a=simulcast:recv 1;4,5 send 6;7\n name: 'simulcast',\n reg: new RegExp(\n // a=simulcast:\n '^simulcast:' +\n // send 1,2,3;~4,~5\n '(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)' +\n // space + recv 6;~7,~8\n '(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?' +\n // end\n '$'\n ),\n names: ['dir1', 'list1', 'dir2', 'list2'],\n format: function (o) {\n return 'simulcast:%s %s' + (o.dir2 ? ' %s %s' : '');\n }\n },\n {\n // old simulcast draft 03 (implemented by Firefox)\n // https://tools.ietf.org/html/draft-ietf-mmusic-sdp-simulcast-03\n // a=simulcast: recv pt=97;98 send pt=97\n // a=simulcast: send rid=5;6;7 paused=6,7\n name: 'simulcast_03',\n reg: /^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,\n names: ['value'],\n format: 'simulcast: %s'\n },\n {\n // a=framerate:25\n // a=framerate:29.97\n name: 'framerate',\n reg: /^framerate:(\\d+(?:$|\\.\\d+))/,\n format: 'framerate:%s'\n },\n {\n // RFC4570\n // a=source-filter: incl IN IP4 239.5.2.31 10.1.15.5\n name: 'sourceFilter',\n reg: /^source-filter: *(excl|incl) (\\S*) (IP4|IP6|\\*) (\\S*) (.*)/,\n names: ['filterMode', 'netType', 'addressTypes', 'destAddress', 'srcList'],\n format: 'source-filter: %s %s %s %s %s'\n },\n {\n // a=bundle-only\n name: 'bundleOnly',\n reg: /^(bundle-only)/\n },\n {\n // a=label:1\n name: 'label',\n reg: /^label:(.+)/,\n format: 'label:%s'\n },\n {\n // RFC version 26 for SCTP over DTLS\n // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-5\n name: 'sctpPort',\n reg: /^sctp-port:(\\d+)$/,\n format: 'sctp-port:%s'\n },\n {\n // RFC version 26 for SCTP over DTLS\n // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-6\n name: 'maxMessageSize',\n reg: /^max-message-size:(\\d+)$/,\n format: 'max-message-size:%s'\n },\n {\n // RFC7273\n // a=ts-refclk:ptp=IEEE1588-2008:39-A7-94-FF-FE-07-CB-D0:37\n push:'tsRefClocks',\n reg: /^ts-refclk:([^\\s=]*)(?:=(\\S*))?/,\n names: ['clksrc', 'clksrcExt'],\n format: function (o) {\n return 'ts-refclk:%s' + (o.clksrcExt != null ? '=%s' : '');\n }\n },\n {\n // RFC7273\n // a=mediaclk:direct=963214424\n name:'mediaClk',\n reg: /^mediaclk:(?:id=(\\S*))? *([^\\s=]*)(?:=(\\S*))?(?: *rate=(\\d+)\\/(\\d+))?/,\n names: ['id', 'mediaClockName', 'mediaClockValue', 'rateNumerator', 'rateDenominator'],\n format: function (o) {\n var str = 'mediaclk:';\n str += (o.id != null ? 'id=%s %s' : '%v%s');\n str += (o.mediaClockValue != null ? '=%s' : '');\n str += (o.rateNumerator != null ? ' rate=%s' : '');\n str += (o.rateDenominator != null ? '/%s' : '');\n return str;\n }\n },\n {\n // a=keywds:keywords\n name: 'keywords',\n reg: /^keywds:(.+)$/,\n format: 'keywds:%s'\n },\n {\n // a=content:main\n name: 'content',\n reg: /^content:(.+)/,\n format: 'content:%s'\n },\n // BFCP https://tools.ietf.org/html/rfc4583\n {\n // a=floorctrl:c-s\n name: 'bfcpFloorCtrl',\n reg: /^floorctrl:(c-only|s-only|c-s)/,\n format: 'floorctrl:%s'\n },\n {\n // a=confid:1\n name: 'bfcpConfId',\n reg: /^confid:(\\d+)/,\n format: 'confid:%s'\n },\n {\n // a=userid:1\n name: 'bfcpUserId',\n reg: /^userid:(\\d+)/,\n format: 'userid:%s'\n },\n {\n // a=floorid:1\n name: 'bfcpFloorId',\n reg: /^floorid:(.+) (?:m-stream|mstrm):(.+)/,\n names: ['id', 'mStream'],\n format: 'floorid:%s mstrm:%s'\n },\n {\n // any a= that we don't understand is kept verbatim on media.invalid\n push: 'invalid',\n names: ['value']\n }\n ]\n};\n\n// set sensible defaults to avoid polluting the grammar with boring details\nObject.keys(grammar).forEach(function (key) {\n var objs = grammar[key];\n objs.forEach(function (obj) {\n if (!obj.reg) {\n obj.reg = /(.*)/;\n }\n if (!obj.format) {\n obj.format = '%s';\n }\n });\n});\n","var toIntIfInt = function (v) {\n return String(Number(v)) === v ? Number(v) : v;\n};\n\nvar attachProperties = function (match, location, names, rawName) {\n if (rawName && !names) {\n location[rawName] = toIntIfInt(match[1]);\n }\n else {\n for (var i = 0; i < names.length; i += 1) {\n if (match[i+1] != null) {\n location[names[i]] = toIntIfInt(match[i+1]);\n }\n }\n }\n};\n\nvar parseReg = function (obj, location, content) {\n var needsBlank = obj.name && obj.names;\n if (obj.push && !location[obj.push]) {\n location[obj.push] = [];\n }\n else if (needsBlank && !location[obj.name]) {\n location[obj.name] = {};\n }\n var keyLocation = obj.push ?\n {} : // blank object that will be pushed\n needsBlank ? location[obj.name] : location; // otherwise, named location or root\n\n attachProperties(content.match(obj.reg), keyLocation, obj.names, obj.name);\n\n if (obj.push) {\n location[obj.push].push(keyLocation);\n }\n};\n\nvar grammar = require('./grammar');\nvar validLine = RegExp.prototype.test.bind(/^([a-z])=(.*)/);\n\nexports.parse = function (sdp) {\n var session = {}\n , media = []\n , location = session; // points at where properties go under (one of the above)\n\n // parse lines we understand\n sdp.split(/(\\r\\n|\\r|\\n)/).filter(validLine).forEach(function (l) {\n var type = l[0];\n var content = l.slice(2);\n if (type === 'm') {\n media.push({rtp: [], fmtp: []});\n location = media[media.length-1]; // point at latest media line\n }\n\n for (var j = 0; j < (grammar[type] || []).length; j += 1) {\n var obj = grammar[type][j];\n if (obj.reg.test(content)) {\n return parseReg(obj, location, content);\n }\n }\n });\n\n session.media = media; // link it up\n return session;\n};\n\nvar paramReducer = function (acc, expr) {\n var s = expr.split(/=(.+)/, 2);\n if (s.length === 2) {\n acc[s[0]] = toIntIfInt(s[1]);\n } else if (s.length === 1 && expr.length > 1) {\n acc[s[0]] = undefined;\n }\n return acc;\n};\n\nexports.parseParams = function (str) {\n return str.split(/;\\s?/).reduce(paramReducer, {});\n};\n\n// For backward compatibility - alias will be removed in 3.0.0\nexports.parseFmtpConfig = exports.parseParams;\n\nexports.parsePayloads = function (str) {\n return str.toString().split(' ').map(Number);\n};\n\nexports.parseRemoteCandidates = function (str) {\n var candidates = [];\n var parts = str.split(' ').map(toIntIfInt);\n for (var i = 0; i < parts.length; i += 3) {\n candidates.push({\n component: parts[i],\n ip: parts[i + 1],\n port: parts[i + 2]\n });\n }\n return candidates;\n};\n\nexports.parseImageAttributes = function (str) {\n return str.split(' ').map(function (item) {\n return item.substring(1, item.length-1).split(',').reduce(paramReducer, {});\n });\n};\n\nexports.parseSimulcastStreamList = function (str) {\n return str.split(';').map(function (stream) {\n return stream.split(',').map(function (format) {\n var scid, paused = false;\n\n if (format[0] !== '~') {\n scid = toIntIfInt(format);\n } else {\n scid = toIntIfInt(format.substring(1, format.length));\n paused = true;\n }\n\n return {\n scid: scid,\n paused: paused\n };\n });\n });\n};\n","var grammar = require('./grammar');\n\n// customized util.format - discards excess arguments and can void middle ones\nvar formatRegExp = /%[sdv%]/g;\nvar format = function (formatStr) {\n var i = 1;\n var args = arguments;\n var len = args.length;\n return formatStr.replace(formatRegExp, function (x) {\n if (i >= len) {\n return x; // missing argument\n }\n var arg = args[i];\n i += 1;\n switch (x) {\n case '%%':\n return '%';\n case '%s':\n return String(arg);\n case '%d':\n return Number(arg);\n case '%v':\n return '';\n }\n });\n // NB: we discard excess arguments - they are typically undefined from makeLine\n};\n\nvar makeLine = function (type, obj, location) {\n var str = obj.format instanceof Function ?\n (obj.format(obj.push ? location : location[obj.name])) :\n obj.format;\n\n var args = [type + '=' + str];\n if (obj.names) {\n for (var i = 0; i < obj.names.length; i += 1) {\n var n = obj.names[i];\n if (obj.name) {\n args.push(location[obj.name][n]);\n }\n else { // for mLine and push attributes\n args.push(location[obj.names[i]]);\n }\n }\n }\n else {\n args.push(location[obj.name]);\n }\n return format.apply(null, args);\n};\n\n// RFC specified order\n// TODO: extend this with all the rest\nvar defaultOuterOrder = [\n 'v', 'o', 's', 'i',\n 'u', 'e', 'p', 'c',\n 'b', 't', 'r', 'z', 'a'\n];\nvar defaultInnerOrder = ['i', 'c', 'b', 'a'];\n\n\nmodule.exports = function (session, opts) {\n opts = opts || {};\n // ensure certain properties exist\n if (session.version == null) {\n session.version = 0; // 'v=0' must be there (only defined version atm)\n }\n if (session.name == null) {\n session.name = ' '; // 's= ' must be there if no meaningful name set\n }\n session.media.forEach(function (mLine) {\n if (mLine.payloads == null) {\n mLine.payloads = '';\n }\n });\n\n var outerOrder = opts.outerOrder || defaultOuterOrder;\n var innerOrder = opts.innerOrder || defaultInnerOrder;\n var sdp = [];\n\n // loop through outerOrder for matching properties on session\n outerOrder.forEach(function (type) {\n grammar[type].forEach(function (obj) {\n if (obj.name in session && session[obj.name] != null) {\n sdp.push(makeLine(type, obj, session));\n }\n else if (obj.push in session && session[obj.push] != null) {\n session[obj.push].forEach(function (el) {\n sdp.push(makeLine(type, obj, el));\n });\n }\n });\n });\n\n // then for each media line, follow the innerOrder\n session.media.forEach(function (mLine) {\n sdp.push(makeLine('m', grammar.m[0], mLine));\n\n innerOrder.forEach(function (type) {\n grammar[type].forEach(function (obj) {\n if (obj.name in mLine && mLine[obj.name] != null) {\n sdp.push(makeLine(type, obj, mLine));\n }\n else if (obj.push in mLine && mLine[obj.push] != null) {\n mLine[obj.push].forEach(function (el) {\n sdp.push(makeLine(type, obj, el));\n });\n }\n });\n });\n });\n\n return sdp.join('\\r\\n') + '\\r\\n';\n};\n","var parser = require('./parser');\nvar writer = require('./writer');\nvar grammar = require('./grammar');\n\nexports.grammar = grammar;\nexports.write = writer;\nexports.parse = parser.parse;\nexports.parseParams = parser.parseParams;\nexports.parseFmtpConfig = parser.parseFmtpConfig; // Alias of parseParams().\nexports.parsePayloads = parser.parsePayloads;\nexports.parseRemoteCandidates = parser.parseRemoteCandidates;\nexports.parseImageAttributes = parser.parseImageAttributes;\nexports.parseSimulcastStreamList = parser.parseSimulcastStreamList;\n","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Base64 encoding and decoding utilities\n */\n\nfunction toBase64(uint8Array, options) {\n if (typeof uint8Array.toBase64 === \"function\") {\n // Currently this is only supported in Firefox,\n // but we match the options in the hope in the future we can rely on it for all environments.\n // https://tc39.es/proposal-arraybuffer-base64/spec/#sec-uint8array.prototype.tobase64\n return uint8Array.toBase64(options);\n }\n var base64 = btoa(uint8Array.reduce((acc, current) => acc + String.fromCharCode(current), \"\"));\n if (options.omitPadding) {\n base64 = base64.replace(/={1,2}$/, \"\");\n }\n if (options.alphabet === \"base64url\") {\n base64 = base64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n }\n return base64;\n}\n\n/**\n * Encode a typed array of uint8 as base64.\n * @param uint8Array - The data to encode.\n * @returns The base64.\n */\nexport function encodeBase64(uint8Array) {\n return toBase64(uint8Array, {\n alphabet: \"base64\",\n omitPadding: false\n });\n}\n\n/**\n * Encode a typed array of uint8 as unpadded base64.\n * @param uint8Array - The data to encode.\n * @returns The unpadded base64.\n */\nexport function encodeUnpaddedBase64(uint8Array) {\n return toBase64(uint8Array, {\n alphabet: \"base64\",\n omitPadding: true\n });\n}\n\n/**\n * Encode a typed array of uint8 as unpadded base64 using the URL-safe encoding.\n * @param uint8Array - The data to encode.\n * @returns The unpadded base64.\n */\nexport function encodeUnpaddedBase64Url(uint8Array) {\n return toBase64(uint8Array, {\n alphabet: \"base64url\",\n omitPadding: true\n });\n}\nfunction fromBase64(base64, options) {\n if (typeof Uint8Array.fromBase64 === \"function\") {\n // Currently this is only supported in Firefox,\n // but we match the options in the hope in the future we can rely on it for all environments.\n // https://tc39.es/proposal-arraybuffer-base64/spec/#sec-uint8array.frombase64\n return Uint8Array.fromBase64(base64, options);\n }\n return Uint8Array.from(atob(base64), c => c.charCodeAt(0));\n}\n\n/**\n * Decode a base64 (or base64url) string to a typed array of uint8.\n * @param base64 - The base64 to decode.\n * @returns The decoded data.\n */\nexport function decodeBase64(base64) {\n // The function requires us to select an alphabet, but we don't know if base64url was used so we convert.\n return fromBase64(base64.replace(/-/g, \"+\").replace(/_/g, \"/\"), {\n alphabet: \"base64\",\n lastChunkHandling: \"loose\"\n });\n}\n//# sourceMappingURL=base64.js.map","/*\nCopyright 2018 New Vector Ltd\nCopyright 2019 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { encodeUnpaddedBase64Url } from \"./base64.js\";\n\n/**\n * String representing the lowercase latin alphabet for use in {@link secureRandomStringFrom}\n * (can be combined with other such exports or other characters by appending strings)\n */\nexport var LOWERCASE = \"abcdefghijklmnopqrstuvwxyz\";\n\n/**\n * String representing the uppercase latin alphabet for use in secureRandomStringFrom\n * (can be combined with other such exports or other characters by appending strings)\n */\nexport var UPPERCASE = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n/**\n * String representing the arabic numerals for use in secureRandomStringFrom\n * (can be combined with other such exports or other characters by appending strings)\n */\nexport var DIGITS = \"0123456789\";\nexport function secureRandomBase64Url(len) {\n var key = new Uint8Array(len);\n globalThis.crypto.getRandomValues(key);\n return encodeUnpaddedBase64Url(key);\n}\n\n/**\n * Generates a random string of uppercase and lowercase letters plus digits using a\n * cryptographically secure random number generator.\n * @param len The length of the string to generate\n * @returns Random string of uppercase and lowercase letters plus digits of length `len`\n */\nexport function secureRandomString(len) {\n return secureRandomStringFrom(len, UPPERCASE + LOWERCASE + DIGITS);\n}\n\n/**\n * Generate a cryptographically secure random string using characters given.\n *\n * @param len - The length of the string to generate (must be positive and less than 32768).\n * @param chars - The characters to use in the random string (between 2 and 256 characters long).\n * @returns Random string of characters of length `len`.\n */\nexport function secureRandomStringFrom(len, chars) {\n // This is intended for latin strings so 256 possibilities should be more than enough and\n // means we can use random bytes, minimising the amount of entropy we need to ask for.\n if (chars.length < 2 || chars.length > 256) {\n throw new Error(\"Character set must be between 2 and 256 characters long\");\n }\n if (len < 1 || len > 32768) {\n throw new Error(\"Requested random string length must be between 1 and 32768\");\n }\n\n // We'll generate random unsigned bytes, so get the largest number less than 256 that is a multiple\n // of the length of the character set: We'll need to discard any random values that are larger than\n // this as we can't possibly map them onto the character set while keeping each character equally\n // likely to be chosen (minus 1 to convert to indices in a string). (Essentially, we're using a d8\n // to choose between 7 possibilities and re-rolling on an 8, keeping all 7 outcomes equally likely.)\n // Our random values must be strictly less than this\n var randomValueCutoff = 256 - 256 % chars.length;\n\n // Grab 30% more entropy than we need. This should be enough that we can discard the values that are\n // too high without having to go back and grab more unless we're super unlucky.\n var entropyBuffer = new Uint8Array(Math.floor(len * 1.3));\n // Mark all of this buffer as used to start with (we haven't populated it with entropy yet) so it will\n // be filled on the first iteration.\n var entropyBufferPos = entropyBuffer.length;\n var result = [];\n while (result.length < len) {\n if (entropyBufferPos === entropyBuffer.length) {\n globalThis.crypto.getRandomValues(entropyBuffer);\n entropyBufferPos = 0;\n }\n var randomByte = entropyBuffer[entropyBufferPos++];\n if (randomByte < randomValueCutoff) {\n result.push(chars[randomByte % chars.length]);\n }\n }\n return result.join(\"\");\n}\n//# sourceMappingURL=randomstring.js.map","// allow non-camelcase as these are events type that go onto the wire\n/* eslint-disable camelcase */\n\nimport { NamespacedValue } from \"../NamespacedValue.js\";\nexport var SDPStreamMetadataKey = new NamespacedValue(\"sdp_stream_metadata\", \"org.matrix.msc3077.sdp_stream_metadata\");\nexport var SDPStreamMetadataPurpose = /*#__PURE__*/function (SDPStreamMetadataPurpose) {\n SDPStreamMetadataPurpose[\"Usermedia\"] = \"m.usermedia\";\n SDPStreamMetadataPurpose[\"Screenshare\"] = \"m.screenshare\";\n return SDPStreamMetadataPurpose;\n}({});\n\n/* eslint-enable camelcase */\n//# sourceMappingURL=callEventTypes.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nvar audioContext = null;\nvar refCount = 0;\n\n/**\n * Acquires a reference to the shared AudioContext.\n * It's highly recommended to reuse this AudioContext rather than creating your\n * own, because multiple AudioContexts can be problematic in some browsers.\n * Make sure to call releaseContext when you're done using it.\n * @returns The shared AudioContext\n */\nexport var acquireContext = () => {\n if (audioContext === null) audioContext = new AudioContext();\n refCount++;\n return audioContext;\n};\n\n/**\n * Signals that one of the references to the shared AudioContext has been\n * released, allowing the context and associated hardware resources to be\n * cleaned up if nothing else is using it.\n */\nexport var releaseContext = () => {\n refCount--;\n if (refCount === 0) {\n var _audioContext;\n (_audioContext = audioContext) === null || _audioContext === void 0 || _audioContext.close();\n audioContext = null;\n }\n};\n//# sourceMappingURL=audioContext.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { SDPStreamMetadataPurpose } from \"./callEventTypes.js\";\nimport { acquireContext, releaseContext } from \"./audioContext.js\";\nimport { logger } from \"../logger.js\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { CallEvent, CallState } from \"./call.js\";\nvar POLLING_INTERVAL = 200; // ms\nexport var SPEAKING_THRESHOLD = -60; // dB\nvar SPEAKING_SAMPLE_COUNT = 8; // samples\n\nexport var CallFeedEvent = /*#__PURE__*/function (CallFeedEvent) {\n CallFeedEvent[\"NewStream\"] = \"new_stream\";\n CallFeedEvent[\"MuteStateChanged\"] = \"mute_state_changed\";\n CallFeedEvent[\"LocalVolumeChanged\"] = \"local_volume_changed\";\n CallFeedEvent[\"VolumeChanged\"] = \"volume_changed\";\n CallFeedEvent[\"ConnectedChanged\"] = \"connected_changed\";\n CallFeedEvent[\"Speaking\"] = \"speaking\";\n CallFeedEvent[\"Disposed\"] = \"disposed\";\n return CallFeedEvent;\n}({});\nexport class CallFeed extends TypedEventEmitter {\n constructor(opts) {\n super();\n _defineProperty(this, \"stream\", void 0);\n _defineProperty(this, \"sdpMetadataStreamId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"deviceId\", void 0);\n _defineProperty(this, \"purpose\", void 0);\n _defineProperty(this, \"speakingVolumeSamples\", void 0);\n _defineProperty(this, \"client\", void 0);\n _defineProperty(this, \"call\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"audioMuted\", void 0);\n _defineProperty(this, \"videoMuted\", void 0);\n _defineProperty(this, \"localVolume\", 1);\n _defineProperty(this, \"measuringVolumeActivity\", false);\n _defineProperty(this, \"audioContext\", void 0);\n _defineProperty(this, \"analyser\", void 0);\n _defineProperty(this, \"frequencyBinCount\", void 0);\n _defineProperty(this, \"speakingThreshold\", SPEAKING_THRESHOLD);\n _defineProperty(this, \"speaking\", false);\n _defineProperty(this, \"volumeLooperTimeout\", void 0);\n _defineProperty(this, \"_disposed\", false);\n _defineProperty(this, \"_connected\", false);\n _defineProperty(this, \"onAddTrack\", () => {\n this.emit(CallFeedEvent.NewStream, this.stream);\n });\n _defineProperty(this, \"onCallState\", state => {\n if (state === CallState.Connected) {\n this.connected = true;\n } else if (state === CallState.Connecting) {\n this.connected = false;\n }\n });\n _defineProperty(this, \"volumeLooper\", () => {\n if (!this.analyser) return;\n if (!this.measuringVolumeActivity) return;\n this.analyser.getFloatFrequencyData(this.frequencyBinCount);\n var maxVolume = -Infinity;\n for (var volume of this.frequencyBinCount) {\n if (volume > maxVolume) {\n maxVolume = volume;\n }\n }\n this.speakingVolumeSamples.shift();\n this.speakingVolumeSamples.push(maxVolume);\n this.emit(CallFeedEvent.VolumeChanged, maxVolume);\n var newSpeaking = false;\n for (var _volume of this.speakingVolumeSamples) {\n if (_volume > this.speakingThreshold) {\n newSpeaking = true;\n break;\n }\n }\n if (this.speaking !== newSpeaking) {\n this.speaking = newSpeaking;\n this.emit(CallFeedEvent.Speaking, this.speaking);\n }\n this.volumeLooperTimeout = setTimeout(this.volumeLooper, POLLING_INTERVAL);\n });\n this.client = opts.client;\n this.call = opts.call;\n this.roomId = opts.roomId;\n this.userId = opts.userId;\n this.deviceId = opts.deviceId;\n this.purpose = opts.purpose;\n this.audioMuted = opts.audioMuted;\n this.videoMuted = opts.videoMuted;\n this.speakingVolumeSamples = new Array(SPEAKING_SAMPLE_COUNT).fill(-Infinity);\n this.sdpMetadataStreamId = opts.stream.id;\n this.updateStream(null, opts.stream);\n this.stream = opts.stream; // updateStream does this, but this makes TS happier\n\n if (this.hasAudioTrack) {\n this.initVolumeMeasuring();\n }\n if (opts.call) {\n opts.call.addListener(CallEvent.State, this.onCallState);\n this.onCallState(opts.call.state);\n }\n }\n get connected() {\n // Local feeds are always considered connected\n return this.isLocal() || this._connected;\n }\n set connected(connected) {\n this._connected = connected;\n this.emit(CallFeedEvent.ConnectedChanged, this.connected);\n }\n get hasAudioTrack() {\n return this.stream.getAudioTracks().length > 0;\n }\n updateStream(oldStream, newStream) {\n if (newStream === oldStream) return;\n var wasMeasuringVolumeActivity = this.measuringVolumeActivity;\n if (oldStream) {\n oldStream.removeEventListener(\"addtrack\", this.onAddTrack);\n this.measureVolumeActivity(false);\n }\n this.stream = newStream;\n newStream.addEventListener(\"addtrack\", this.onAddTrack);\n if (this.hasAudioTrack) {\n this.initVolumeMeasuring();\n if (wasMeasuringVolumeActivity) this.measureVolumeActivity(true);\n } else {\n this.measureVolumeActivity(false);\n }\n this.emit(CallFeedEvent.NewStream, this.stream);\n }\n initVolumeMeasuring() {\n if (!this.hasAudioTrack) return;\n if (!this.audioContext) this.audioContext = acquireContext();\n this.analyser = this.audioContext.createAnalyser();\n this.analyser.fftSize = 512;\n this.analyser.smoothingTimeConstant = 0.1;\n var mediaStreamAudioSourceNode = this.audioContext.createMediaStreamSource(this.stream);\n mediaStreamAudioSourceNode.connect(this.analyser);\n this.frequencyBinCount = new Float32Array(this.analyser.frequencyBinCount);\n }\n /**\n * Returns callRoom member\n * @returns member of the callRoom\n */\n getMember() {\n var _callRoom$getMember;\n var callRoom = this.client.getRoom(this.roomId);\n return (_callRoom$getMember = callRoom === null || callRoom === void 0 ? void 0 : callRoom.getMember(this.userId)) !== null && _callRoom$getMember !== void 0 ? _callRoom$getMember : null;\n }\n\n /**\n * Returns true if CallFeed is local, otherwise returns false\n * @returns is local?\n */\n isLocal() {\n return this.userId === this.client.getUserId() && (this.deviceId === undefined || this.deviceId === this.client.getDeviceId());\n }\n\n /**\n * Returns true if audio is muted or if there are no audio\n * tracks, otherwise returns false\n * @returns is audio muted?\n */\n isAudioMuted() {\n return this.stream.getAudioTracks().length === 0 || this.audioMuted;\n }\n\n /**\n * Returns true video is muted or if there are no video\n * tracks, otherwise returns false\n * @returns is video muted?\n */\n isVideoMuted() {\n // We assume only one video track\n return this.stream.getVideoTracks().length === 0 || this.videoMuted;\n }\n isSpeaking() {\n return this.speaking;\n }\n\n /**\n * Replaces the current MediaStream with a new one.\n * The stream will be different and new stream as remote parties are\n * concerned, but this can be used for convenience locally to set up\n * volume listeners automatically on the new stream etc.\n * @param newStream - new stream with which to replace the current one\n */\n setNewStream(newStream) {\n this.updateStream(this.stream, newStream);\n }\n\n /**\n * Set one or both of feed's internal audio and video video mute state\n * Either value may be null to leave it as-is\n * @param audioMuted - is the feed's audio muted?\n * @param videoMuted - is the feed's video muted?\n */\n setAudioVideoMuted(audioMuted, videoMuted) {\n if (audioMuted !== null) {\n if (this.audioMuted !== audioMuted) {\n this.speakingVolumeSamples.fill(-Infinity);\n }\n this.audioMuted = audioMuted;\n }\n if (videoMuted !== null) this.videoMuted = videoMuted;\n this.emit(CallFeedEvent.MuteStateChanged, this.audioMuted, this.videoMuted);\n }\n\n /**\n * Starts emitting volume_changed events where the emitter value is in decibels\n * @param enabled - emit volume changes\n */\n measureVolumeActivity(enabled) {\n if (enabled) {\n if (!this.analyser || !this.frequencyBinCount || !this.hasAudioTrack) return;\n this.measuringVolumeActivity = true;\n this.volumeLooper();\n } else {\n this.measuringVolumeActivity = false;\n this.speakingVolumeSamples.fill(-Infinity);\n this.emit(CallFeedEvent.VolumeChanged, -Infinity);\n }\n }\n setSpeakingThreshold(threshold) {\n this.speakingThreshold = threshold;\n }\n clone() {\n var mediaHandler = this.client.getMediaHandler();\n var stream = this.stream.clone();\n logger.log(\"CallFeed clone() cloning stream (originalStreamId=\".concat(this.stream.id, \", newStreamId\").concat(stream.id, \")\"));\n if (this.purpose === SDPStreamMetadataPurpose.Usermedia) {\n mediaHandler.userMediaStreams.push(stream);\n } else {\n mediaHandler.screensharingStreams.push(stream);\n }\n return new CallFeed({\n client: this.client,\n roomId: this.roomId,\n userId: this.userId,\n deviceId: this.deviceId,\n stream,\n purpose: this.purpose,\n audioMuted: this.audioMuted,\n videoMuted: this.videoMuted\n });\n }\n dispose() {\n var _this$stream, _this$call;\n clearTimeout(this.volumeLooperTimeout);\n (_this$stream = this.stream) === null || _this$stream === void 0 || _this$stream.removeEventListener(\"addtrack\", this.onAddTrack);\n (_this$call = this.call) === null || _this$call === void 0 || _this$call.removeListener(CallEvent.State, this.onCallState);\n if (this.audioContext) {\n this.audioContext = undefined;\n this.analyser = undefined;\n releaseContext();\n }\n this._disposed = true;\n this.emit(CallFeedEvent.Disposed);\n }\n get disposed() {\n return this._disposed;\n }\n set disposed(value) {\n this._disposed = value;\n }\n getLocalVolume() {\n return this.localVolume;\n }\n setLocalVolume(localVolume) {\n this.localVolume = localVolume;\n this.emit(CallFeedEvent.LocalVolumeChanged, localVolume);\n }\n}\n//# sourceMappingURL=callFeed.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2020 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"../logger.js\";\nimport { CallDirection, CallError, CallErrorCode, CallState, createNewMatrixCall } from \"./call.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { ClientEvent } from \"../client.js\";\nimport { GroupCallErrorCode, GroupCallEvent, GroupCallUnknownDeviceError } from \"./groupCall.js\";\nimport { RoomEvent } from \"../models/room.js\";\n\n// Don't ring unless we'd be ringing for at least 3 seconds: the user needs some\n// time to press the 'accept' button\nvar RING_GRACE_PERIOD = 3000;\nexport var CallEventHandlerEvent = /*#__PURE__*/function (CallEventHandlerEvent) {\n CallEventHandlerEvent[\"Incoming\"] = \"Call.incoming\";\n return CallEventHandlerEvent;\n}({});\nexport class CallEventHandler {\n constructor(client) {\n // XXX: Most of these are only public because of the tests\n _defineProperty(this, \"calls\", void 0);\n _defineProperty(this, \"callEventBuffer\", void 0);\n _defineProperty(this, \"nextSeqByCall\", new Map());\n _defineProperty(this, \"toDeviceEventBuffers\", new Map());\n _defineProperty(this, \"client\", void 0);\n _defineProperty(this, \"candidateEventsByCall\", void 0);\n _defineProperty(this, \"eventBufferPromiseChain\", void 0);\n _defineProperty(this, \"onSync\", () => {\n // Process the current event buffer and start queuing into a new one.\n var currentEventBuffer = this.callEventBuffer;\n this.callEventBuffer = [];\n\n // Ensure correct ordering by only processing this queue after the previous one has finished processing\n if (this.eventBufferPromiseChain) {\n this.eventBufferPromiseChain = this.eventBufferPromiseChain.then(() => this.evaluateEventBuffer(currentEventBuffer));\n } else {\n this.eventBufferPromiseChain = this.evaluateEventBuffer(currentEventBuffer);\n }\n });\n _defineProperty(this, \"onRoomTimeline\", event => {\n this.callEventBuffer.push(event);\n });\n _defineProperty(this, \"onToDeviceEvent\", event => {\n var content = event.getContent();\n if (!content.call_id) {\n this.callEventBuffer.push(event);\n return;\n }\n if (!this.nextSeqByCall.has(content.call_id)) {\n this.nextSeqByCall.set(content.call_id, 0);\n }\n if (content.seq === undefined) {\n this.callEventBuffer.push(event);\n return;\n }\n var nextSeq = this.nextSeqByCall.get(content.call_id) || 0;\n if (content.seq !== nextSeq) {\n if (!this.toDeviceEventBuffers.has(content.call_id)) {\n this.toDeviceEventBuffers.set(content.call_id, []);\n }\n var buffer = this.toDeviceEventBuffers.get(content.call_id);\n var index = buffer.findIndex(e => e.getContent().seq > content.seq);\n if (index === -1) {\n buffer.push(event);\n } else {\n buffer.splice(index, 0, event);\n }\n } else {\n var callId = content.call_id;\n this.callEventBuffer.push(event);\n this.nextSeqByCall.set(callId, content.seq + 1);\n var _buffer = this.toDeviceEventBuffers.get(callId);\n var nextEvent = _buffer && _buffer.shift();\n while (nextEvent && nextEvent.getContent().seq === this.nextSeqByCall.get(callId)) {\n this.callEventBuffer.push(nextEvent);\n this.nextSeqByCall.set(callId, nextEvent.getContent().seq + 1);\n nextEvent = _buffer.shift();\n }\n }\n });\n this.client = client;\n this.calls = new Map();\n // The sync code always emits one event at a time, so it will patiently\n // wait for us to finish processing a call invite before delivering the\n // next event, even if that next event is a hangup. We therefore accumulate\n // all our call events and then process them on the 'sync' event, ie.\n // each time a sync has completed. This way, we can avoid emitting incoming\n // call events if we get both the invite and answer/hangup in the same sync.\n // This happens quite often, eg. replaying sync from storage, catchup sync\n // after loading and after we've been offline for a bit.\n this.callEventBuffer = [];\n this.candidateEventsByCall = new Map();\n }\n start() {\n this.client.on(ClientEvent.Sync, this.onSync);\n this.client.on(RoomEvent.Timeline, this.onRoomTimeline);\n this.client.on(ClientEvent.ToDeviceEvent, this.onToDeviceEvent);\n }\n stop() {\n this.client.removeListener(ClientEvent.Sync, this.onSync);\n this.client.removeListener(RoomEvent.Timeline, this.onRoomTimeline);\n this.client.removeListener(ClientEvent.ToDeviceEvent, this.onToDeviceEvent);\n }\n evaluateEventBuffer(eventBuffer) {\n var _this = this;\n return _asyncToGenerator(function* () {\n yield Promise.all(eventBuffer.map(event => _this.client.decryptEventIfNeeded(event)));\n var callEvents = eventBuffer.filter(event => {\n var eventType = event.getType();\n return eventType.startsWith(\"m.call.\") || eventType.startsWith(\"org.matrix.call.\");\n });\n var ignoreCallIds = new Set();\n\n // inspect the buffer and mark all calls which have been answered\n // or hung up before passing them to the call event handler.\n for (var event of callEvents) {\n var eventType = event.getType();\n if (eventType === EventType.CallAnswer || eventType === EventType.CallHangup) {\n ignoreCallIds.add(event.getContent().call_id);\n }\n }\n\n // Process call events in the order that they were received\n for (var _event of callEvents) {\n var _eventType = _event.getType();\n var callId = _event.getContent().call_id;\n if (_eventType === EventType.CallInvite && ignoreCallIds.has(callId)) {\n // This call has previously been answered or hung up: ignore it\n continue;\n }\n try {\n yield _this.handleCallEvent(_event);\n } catch (e) {\n logger.error(\"CallEventHandler evaluateEventBuffer() caught exception handling call event\", e);\n }\n }\n })();\n }\n handleCallEvent(event) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _getGroupCallById;\n _this2.client.emit(ClientEvent.ReceivedVoipEvent, event);\n var content = event.getContent();\n var callRoomId = event.getRoomId() || ((_getGroupCallById = _this2.client.groupCallEventHandler.getGroupCallById(content.conf_id)) === null || _getGroupCallById === void 0 || (_getGroupCallById = _getGroupCallById.room) === null || _getGroupCallById === void 0 ? void 0 : _getGroupCallById.roomId);\n var groupCallId = content.conf_id;\n var type = event.getType();\n var senderId = event.getSender();\n var call = content.call_id ? _this2.calls.get(content.call_id) : undefined;\n var opponentDeviceId;\n var groupCall;\n if (groupCallId) {\n groupCall = _this2.client.groupCallEventHandler.getGroupCallById(groupCallId);\n if (!groupCall) {\n logger.warn(\"CallEventHandler handleCallEvent() could not find a group call - ignoring event (groupCallId=\".concat(groupCallId, \", type=\").concat(type, \")\"));\n return;\n }\n opponentDeviceId = content.device_id;\n if (!opponentDeviceId) {\n logger.warn(\"CallEventHandler handleCallEvent() could not find a device id - ignoring event (senderId=\".concat(senderId, \")\"));\n groupCall.emit(GroupCallEvent.Error, new GroupCallUnknownDeviceError(senderId));\n return;\n }\n if (content.dest_session_id !== _this2.client.getSessionId()) {\n logger.warn(\"CallEventHandler handleCallEvent() call event does not match current session id - ignoring\");\n return;\n }\n }\n var weSentTheEvent = senderId === _this2.client.credentials.userId && (opponentDeviceId === undefined || opponentDeviceId === _this2.client.getDeviceId());\n if (!callRoomId) return;\n if (type === EventType.CallInvite) {\n var _this2$client$getTurn, _createNewMatrixCall, _groupCall;\n // ignore invites you send\n if (weSentTheEvent) return;\n // expired call\n if (event.getLocalAge() > content.lifetime - RING_GRACE_PERIOD) return;\n // stale/old invite event\n if (call && call.state === CallState.Ended) return;\n if (call) {\n logger.warn(\"CallEventHandler handleCallEvent() already has a call but got an invite - clobbering (callId=\".concat(content.call_id, \")\"));\n }\n if (content.invitee && content.invitee !== _this2.client.getUserId()) {\n return; // This invite was meant for another user in the room\n }\n var timeUntilTurnCresExpire = ((_this2$client$getTurn = _this2.client.getTurnServersExpiry()) !== null && _this2$client$getTurn !== void 0 ? _this2$client$getTurn : 0) - Date.now();\n logger.info(\"CallEventHandler handleCallEvent() current turn creds expire in \" + timeUntilTurnCresExpire + \" ms\");\n call = (_createNewMatrixCall = createNewMatrixCall(_this2.client, callRoomId, {\n forceTURN: _this2.client.forceTURN,\n opponentDeviceId,\n groupCallId,\n opponentSessionId: content.sender_session_id\n })) !== null && _createNewMatrixCall !== void 0 ? _createNewMatrixCall : undefined;\n if (!call) {\n logger.log(\"CallEventHandler handleCallEvent() this client does not support WebRTC (callId=\".concat(content.call_id, \")\"));\n // don't hang up the call: there could be other clients\n // connected that do support WebRTC and declining the\n // the call on their behalf would be really annoying.\n return;\n }\n call.callId = content.call_id;\n var stats = (_groupCall = groupCall) === null || _groupCall === void 0 ? void 0 : _groupCall.getGroupCallStats();\n if (stats) {\n call.initStats(stats);\n }\n try {\n yield call.initWithInvite(event);\n } catch (e) {\n if (e instanceof CallError) {\n if (e.code === GroupCallErrorCode.UnknownDevice) {\n var _groupCall2;\n (_groupCall2 = groupCall) === null || _groupCall2 === void 0 || _groupCall2.emit(GroupCallEvent.Error, e);\n } else {\n logger.error(e);\n }\n }\n }\n _this2.calls.set(call.callId, call);\n\n // if we stashed candidate events for that call ID, play them back now\n if (_this2.candidateEventsByCall.get(call.callId)) {\n for (var ev of _this2.candidateEventsByCall.get(call.callId)) {\n call.onRemoteIceCandidatesReceived(ev);\n }\n }\n\n // Were we trying to call that user (room)?\n var existingCall;\n for (var thisCall of _this2.calls.values()) {\n var _call$getOpponentMemb;\n var isCalling = [CallState.WaitLocalMedia, CallState.CreateOffer, CallState.InviteSent].includes(thisCall.state);\n if (call.roomId === thisCall.roomId && thisCall.direction === CallDirection.Outbound && ((_call$getOpponentMemb = call.getOpponentMember()) === null || _call$getOpponentMemb === void 0 ? void 0 : _call$getOpponentMemb.userId) === thisCall.invitee && isCalling) {\n existingCall = thisCall;\n break;\n }\n }\n if (existingCall) {\n if (existingCall.callId > call.callId) {\n logger.log(\"CallEventHandler handleCallEvent() detected glare - answering incoming call and canceling outgoing call (incomingId=\".concat(call.callId, \", outgoingId=\").concat(existingCall.callId, \")\"));\n existingCall.replacedBy(call);\n } else {\n logger.log(\"CallEventHandler handleCallEvent() detected glare - hanging up incoming call (incomingId=\".concat(call.callId, \", outgoingId=\").concat(existingCall.callId, \")\"));\n call.hangup(CallErrorCode.Replaced, true);\n }\n } else {\n _this2.client.emit(CallEventHandlerEvent.Incoming, call);\n }\n return;\n } else if (type === EventType.CallCandidates) {\n if (weSentTheEvent) return;\n if (!call) {\n // store the candidates; we may get a call eventually.\n if (!_this2.candidateEventsByCall.has(content.call_id)) {\n _this2.candidateEventsByCall.set(content.call_id, []);\n }\n _this2.candidateEventsByCall.get(content.call_id).push(event);\n } else {\n call.onRemoteIceCandidatesReceived(event);\n }\n return;\n } else if ([EventType.CallHangup, EventType.CallReject].includes(type)) {\n // Note that we also observe our own hangups here so we can see\n // if we've already rejected a call that would otherwise be valid\n if (!call) {\n var _createNewMatrixCall2;\n // if not live, store the fact that the call has ended because\n // we're probably getting events backwards so\n // the hangup will come before the invite\n call = (_createNewMatrixCall2 = createNewMatrixCall(_this2.client, callRoomId, {\n opponentDeviceId,\n opponentSessionId: content.sender_session_id\n })) !== null && _createNewMatrixCall2 !== void 0 ? _createNewMatrixCall2 : undefined;\n if (call) {\n call.callId = content.call_id;\n call.initWithHangup(event);\n _this2.calls.set(content.call_id, call);\n }\n } else {\n if (call.state !== CallState.Ended) {\n if (type === EventType.CallHangup) {\n call.onHangupReceived(content);\n } else {\n call.onRejectReceived(content);\n }\n\n // @ts-expect-error typescript thinks the state can't be 'ended' because we're\n // inside the if block where it wasn't, but it could have changed because\n // on[Hangup|Reject]Received are side-effecty.\n if (call.state === CallState.Ended) _this2.calls.delete(content.call_id);\n }\n }\n return;\n }\n\n // The following events need a call and a peer connection\n if (!call || !call.hasPeerConnection) {\n logger.info(\"CallEventHandler handleCallEvent() discarding possible call event as we don't have a call (type=\".concat(type, \")\"));\n return;\n }\n // Ignore remote echo\n if (event.getContent().party_id === call.ourPartyId) return;\n switch (type) {\n case EventType.CallAnswer:\n if (weSentTheEvent) {\n if (call.state === CallState.Ringing) {\n call.onAnsweredElsewhere(content);\n }\n } else {\n call.onAnswerReceived(event);\n }\n break;\n case EventType.CallSelectAnswer:\n call.onSelectAnswerReceived(event);\n break;\n case EventType.CallNegotiate:\n call.onNegotiateReceived(event);\n break;\n case EventType.CallAssertedIdentity:\n case EventType.CallAssertedIdentityPrefix:\n call.onAssertedIdentityReceived(event);\n break;\n case EventType.CallSDPStreamMetadataChanged:\n case EventType.CallSDPStreamMetadataChangedPrefix:\n call.onSDPStreamMetadataChangedReceived(event);\n break;\n }\n })();\n }\n}\n//# sourceMappingURL=callEventHandler.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { ClientEvent } from \"../client.js\";\nimport { GroupCall, GroupCallIntent, GroupCallType } from \"./groupCall.js\";\nimport { RoomStateEvent } from \"../models/room-state.js\";\nimport { logger } from \"../logger.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { SyncState } from \"../sync.js\";\nexport var GroupCallEventHandlerEvent = /*#__PURE__*/function (GroupCallEventHandlerEvent) {\n GroupCallEventHandlerEvent[\"Incoming\"] = \"GroupCall.incoming\";\n GroupCallEventHandlerEvent[\"Outgoing\"] = \"GroupCall.outgoing\";\n GroupCallEventHandlerEvent[\"Ended\"] = \"GroupCall.ended\";\n GroupCallEventHandlerEvent[\"Participants\"] = \"GroupCall.participants\";\n return GroupCallEventHandlerEvent;\n}({});\nexport class GroupCallEventHandler {\n constructor(client) {\n this.client = client;\n _defineProperty(this, \"groupCalls\", new Map());\n // roomId -> GroupCall\n // All rooms we know about and whether we've seen a 'Room' event\n // for them. The promise will be fulfilled once we've processed that\n // event which means we're \"up to date\" on what calls are in a room\n // and get\n _defineProperty(this, \"roomDeferreds\", new Map());\n _defineProperty(this, \"onRoomsChanged\", room => {\n this.createGroupCallForRoom(room);\n });\n _defineProperty(this, \"onRoomStateChanged\", (event, state) => {\n var eventType = event.getType();\n if (eventType === EventType.GroupCallPrefix) {\n var groupCallId = event.getStateKey();\n var content = event.getContent();\n var currentGroupCall = this.groupCalls.get(state.roomId);\n if (!currentGroupCall && !content[\"m.terminated\"] && !event.isRedacted()) {\n this.createGroupCallFromRoomStateEvent(event);\n } else if (currentGroupCall && currentGroupCall.groupCallId === groupCallId) {\n if (content[\"m.terminated\"] || event.isRedacted()) {\n currentGroupCall.terminate(false);\n } else if (content[\"m.type\"] !== currentGroupCall.type) {\n // TODO: Handle the callType changing when the room state changes\n logger.warn(\"GroupCallEventHandler onRoomStateChanged() currently does not support changing type (roomId=\".concat(state.roomId, \")\"));\n }\n } else if (currentGroupCall && currentGroupCall.groupCallId !== groupCallId) {\n // TODO: Handle new group calls and multiple group calls\n logger.warn(\"GroupCallEventHandler onRoomStateChanged() currently does not support multiple calls (roomId=\".concat(state.roomId, \")\"));\n }\n }\n });\n }\n start() {\n var _this = this;\n return _asyncToGenerator(function* () {\n // We wait until the client has started syncing for real.\n // This is because we only support one call at a time, and want\n // the latest. We therefore want the latest state of the room before\n // we create a group call for the room so we can be fairly sure that\n // the group call we create is really the latest one.\n if (_this.client.getSyncState() !== SyncState.Syncing) {\n logger.debug(\"GroupCallEventHandler start() waiting for client to start syncing\");\n yield new Promise(resolve => {\n var onSync = () => {\n if (_this.client.getSyncState() === SyncState.Syncing) {\n _this.client.off(ClientEvent.Sync, onSync);\n return resolve();\n }\n };\n _this.client.on(ClientEvent.Sync, onSync);\n });\n }\n var rooms = _this.client.getRooms();\n for (var room of rooms) {\n _this.createGroupCallForRoom(room);\n }\n _this.client.on(ClientEvent.Room, _this.onRoomsChanged);\n _this.client.on(RoomStateEvent.Events, _this.onRoomStateChanged);\n })();\n }\n stop() {\n this.client.removeListener(ClientEvent.Room, this.onRoomsChanged);\n this.client.removeListener(RoomStateEvent.Events, this.onRoomStateChanged);\n }\n getRoomDeferred(roomId) {\n var deferred = this.roomDeferreds.get(roomId);\n if (deferred === undefined) {\n var resolveFunc;\n deferred = {\n prom: new Promise(resolve => {\n resolveFunc = resolve;\n })\n };\n deferred.resolve = resolveFunc;\n this.roomDeferreds.set(roomId, deferred);\n }\n return deferred;\n }\n waitUntilRoomReadyForGroupCalls(roomId) {\n return this.getRoomDeferred(roomId).prom;\n }\n getGroupCallById(groupCallId) {\n return [...this.groupCalls.values()].find(groupCall => groupCall.groupCallId === groupCallId);\n }\n createGroupCallForRoom(room) {\n var callEvents = room.currentState.getStateEvents(EventType.GroupCallPrefix);\n var sortedCallEvents = callEvents.sort((a, b) => b.getTs() - a.getTs());\n for (var callEvent of sortedCallEvents) {\n var content = callEvent.getContent();\n if (content[\"m.terminated\"] || callEvent.isRedacted()) {\n continue;\n }\n logger.debug(\"GroupCallEventHandler createGroupCallForRoom() choosing group call from possible calls (stateKey=\".concat(callEvent.getStateKey(), \", ts=\").concat(callEvent.getTs(), \", roomId=\").concat(room.roomId, \", numOfPossibleCalls=\").concat(callEvents.length, \")\"));\n this.createGroupCallFromRoomStateEvent(callEvent);\n break;\n }\n this.getRoomDeferred(room.roomId).resolve();\n }\n createGroupCallFromRoomStateEvent(event) {\n var roomId = event.getRoomId();\n var content = event.getContent();\n var room = this.client.getRoom(roomId);\n if (!room) {\n logger.warn(\"GroupCallEventHandler createGroupCallFromRoomStateEvent() couldn't find room for call (roomId=\".concat(roomId, \")\"));\n return;\n }\n var groupCallId = event.getStateKey();\n var callType = content[\"m.type\"];\n if (!Object.values(GroupCallType).includes(callType)) {\n logger.warn(\"GroupCallEventHandler createGroupCallFromRoomStateEvent() received invalid call type (type=\".concat(callType, \", roomId=\").concat(roomId, \")\"));\n return;\n }\n var callIntent = content[\"m.intent\"];\n if (!Object.values(GroupCallIntent).includes(callIntent)) {\n logger.warn(\"Received invalid group call intent (type=\".concat(callType, \", roomId=\").concat(roomId, \")\"));\n return;\n }\n var isPtt = Boolean(content[\"io.element.ptt\"]);\n var dataChannelOptions;\n if (content !== null && content !== void 0 && content.dataChannelsEnabled && content !== null && content !== void 0 && content.dataChannelOptions) {\n // Pull out just the dataChannelOptions we want to support.\n var _content$dataChannelO = content.dataChannelOptions,\n ordered = _content$dataChannelO.ordered,\n maxPacketLifeTime = _content$dataChannelO.maxPacketLifeTime,\n maxRetransmits = _content$dataChannelO.maxRetransmits,\n protocol = _content$dataChannelO.protocol;\n dataChannelOptions = {\n ordered,\n maxPacketLifeTime,\n maxRetransmits,\n protocol\n };\n }\n var groupCall = new GroupCall(this.client, room, callType, isPtt, callIntent, groupCallId,\n // Because without Media section a WebRTC connection is not possible, so need a RTCDataChannel to set up a\n // no media WebRTC connection anyway.\n (content === null || content === void 0 ? void 0 : content.dataChannelsEnabled) || this.client.isVoipWithNoMediaAllowed, dataChannelOptions, this.client.isVoipWithNoMediaAllowed, this.client.useLivekitForGroupCalls, content[\"io.element.livekit_service_url\"]);\n this.groupCalls.set(room.roomId, groupCall);\n this.client.emit(GroupCallEventHandlerEvent.Incoming, groupCall);\n return groupCall;\n }\n}\n//# sourceMappingURL=groupCallEventHandler.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class ConnectionStats {\n constructor() {\n _defineProperty(this, \"bandwidth\", {});\n _defineProperty(this, \"bitrate\", {});\n _defineProperty(this, \"packetLoss\", {});\n _defineProperty(this, \"transport\", []);\n }\n}\n//# sourceMappingURL=connectionStats.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class ConnectionStatsBuilder {\n static buildBandwidthReport(now) {\n var availableIncomingBitrate = now.availableIncomingBitrate;\n var availableOutgoingBitrate = now.availableOutgoingBitrate;\n return {\n download: availableIncomingBitrate ? Math.round(availableIncomingBitrate / 1000) : 0,\n upload: availableOutgoingBitrate ? Math.round(availableOutgoingBitrate / 1000) : 0\n };\n }\n}\n//# sourceMappingURL=connectionStatsBuilder.js.map","export class TransportStatsBuilder {\n static buildReport(report, now, conferenceStatsTransport, isFocus) {\n var localUsedCandidate = report === null || report === void 0 ? void 0 : report.get(now.localCandidateId);\n var remoteUsedCandidate = report === null || report === void 0 ? void 0 : report.get(now.remoteCandidateId);\n\n // RTCIceCandidateStats\n // https://w3c.github.io/webrtc-stats/#icecandidate-dict*\n if (remoteUsedCandidate && localUsedCandidate) {\n var remoteIpAddress = remoteUsedCandidate.ip !== undefined ? remoteUsedCandidate.ip : remoteUsedCandidate.address;\n var remotePort = remoteUsedCandidate.port;\n var ip = \"\".concat(remoteIpAddress, \":\").concat(remotePort);\n var localIpAddress = localUsedCandidate.ip !== undefined ? localUsedCandidate.ip : localUsedCandidate.address;\n var localPort = localUsedCandidate.port;\n var localIp = \"\".concat(localIpAddress, \":\").concat(localPort);\n var type = remoteUsedCandidate.protocol;\n\n // Save the address unless it has been saved already.\n if (!conferenceStatsTransport.some(t => t.ip === ip && t.type === type && t.localIp === localIp)) {\n conferenceStatsTransport.push({\n ip,\n type,\n localIp,\n isFocus,\n localCandidateType: localUsedCandidate.candidateType,\n remoteCandidateType: remoteUsedCandidate.candidateType,\n networkType: localUsedCandidate.networkType,\n rtt: now.currentRoundTripTime ? now.currentRoundTripTime * 1000 : NaN\n });\n }\n }\n return conferenceStatsTransport;\n }\n}\n//# sourceMappingURL=transportStatsBuilder.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { parse as parseSdp } from \"sdp-transform\";\nexport class MediaSsrcHandler {\n constructor() {\n _defineProperty(this, \"ssrcToMid\", {\n local: new Map(),\n remote: new Map()\n });\n }\n findMidBySsrc(ssrc, type) {\n var mid;\n this.ssrcToMid[type].forEach((ssrcs, m) => {\n if (ssrcs.find(s => s == ssrc)) {\n mid = m;\n return;\n }\n });\n return mid;\n }\n parse(description, type) {\n var sdp = parseSdp(description);\n var ssrcToMid = new Map();\n sdp.media.forEach(m => {\n if (!!m.mid && m.type === \"video\" || m.type === \"audio\") {\n var _m$ssrcs;\n var ssrcs = [];\n (_m$ssrcs = m.ssrcs) === null || _m$ssrcs === void 0 || _m$ssrcs.forEach(ssrc => {\n if (ssrc.attribute === \"cname\") {\n ssrcs.push(\"\".concat(ssrc.id));\n }\n });\n ssrcToMid.set(\"\".concat(m.mid), ssrcs);\n }\n });\n this.ssrcToMid[type] = ssrcToMid;\n }\n getSsrcToMidMap(type) {\n return this.ssrcToMid[type];\n }\n}\n//# sourceMappingURL=mediaSsrcHandler.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class MediaTrackHandler {\n constructor(pc) {\n this.pc = pc;\n }\n getLocalTracks(kind) {\n var isNotNullAndKind = track => {\n return track !== null && track.kind === kind;\n };\n return this.pc.getTransceivers().filter(t => t.currentDirection === \"sendonly\" || t.currentDirection === \"sendrecv\").filter(t => t.sender !== null).map(t => t.sender).map(s => s.track).filter(isNotNullAndKind);\n }\n getTackById(trackId) {\n return this.pc.getTransceivers().map(t => {\n if ((t === null || t === void 0 ? void 0 : t.sender.track) !== null && t.sender.track.id === trackId) {\n return t.sender.track;\n }\n if ((t === null || t === void 0 ? void 0 : t.receiver.track) !== null && t.receiver.track.id === trackId) {\n return t.receiver.track;\n }\n return undefined;\n }).find(t => t !== undefined);\n }\n getLocalTrackIdByMid(mid) {\n var _transceiver$sender;\n var transceiver = this.pc.getTransceivers().find(t => t.mid === mid);\n return transceiver === null || transceiver === void 0 || (_transceiver$sender = transceiver.sender) === null || _transceiver$sender === void 0 || (_transceiver$sender = _transceiver$sender.track) === null || _transceiver$sender === void 0 ? void 0 : _transceiver$sender.id;\n }\n getRemoteTrackIdByMid(mid) {\n var _transceiver$receiver;\n var transceiver = this.pc.getTransceivers().find(t => t.mid === mid);\n return transceiver === null || transceiver === void 0 || (_transceiver$receiver = transceiver.receiver) === null || _transceiver$receiver === void 0 || (_transceiver$receiver = _transceiver$receiver.track) === null || _transceiver$receiver === void 0 ? void 0 : _transceiver$receiver.id;\n }\n getActiveSimulcastStreams() {\n //@TODO implement this right.. Check how many layer configured\n return 3;\n }\n getTransceiverByTrackId(trackId) {\n return this.pc.getTransceivers().find(t => {\n return t.receiver.track.id === trackId || t.sender.track !== null && t.sender.track.id === trackId;\n });\n }\n}\n//# sourceMappingURL=mediaTrackHandler.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class MediaTrackStats {\n constructor(trackId, type, kind) {\n this.trackId = trackId;\n this.type = type;\n this.kind = kind;\n _defineProperty(this, \"loss\", {\n packetsTotal: 0,\n packetsLost: 0,\n isDownloadStream: false\n });\n _defineProperty(this, \"bitrate\", {\n download: 0,\n upload: 0\n });\n _defineProperty(this, \"resolution\", {\n width: -1,\n height: -1\n });\n _defineProperty(this, \"audioConcealment\", {\n concealedAudio: 0,\n totalAudioDuration: 0\n });\n _defineProperty(this, \"framerate\", 0);\n _defineProperty(this, \"jitter\", 0);\n _defineProperty(this, \"codec\", \"\");\n _defineProperty(this, \"isAlive\", true);\n _defineProperty(this, \"isMuted\", false);\n _defineProperty(this, \"isEnabled\", true);\n }\n getType() {\n return this.type;\n }\n setLoss(loss) {\n this.loss = loss;\n }\n getLoss() {\n return this.loss;\n }\n setResolution(resolution) {\n this.resolution = resolution;\n }\n getResolution() {\n return this.resolution;\n }\n setFramerate(framerate) {\n this.framerate = framerate;\n }\n getFramerate() {\n return this.framerate;\n }\n setBitrate(bitrate) {\n this.bitrate = bitrate;\n }\n getBitrate() {\n return this.bitrate;\n }\n setCodec(codecShortType) {\n this.codec = codecShortType;\n return true;\n }\n getCodec() {\n return this.codec;\n }\n resetBitrate() {\n this.bitrate = {\n download: 0,\n upload: 0\n };\n }\n set alive(isAlive) {\n this.isAlive = isAlive;\n }\n\n /**\n * A MediaTrackState is alive if the corresponding MediaStreamTrack track bound to a transceiver and the\n * MediaStreamTrack is in state MediaStreamTrack.readyState === live\n */\n get alive() {\n return this.isAlive;\n }\n set muted(isMuted) {\n this.isMuted = isMuted;\n }\n\n /**\n * A MediaTrackState.isMuted corresponding to MediaStreamTrack.muted.\n * But these values only match if MediaTrackState.isAlive.\n */\n get muted() {\n return this.isMuted;\n }\n set enabled(isEnabled) {\n this.isEnabled = isEnabled;\n }\n\n /**\n * A MediaTrackState.isEnabled corresponding to MediaStreamTrack.enabled.\n * But these values only match if MediaTrackState.isAlive.\n */\n get enabled() {\n return this.isEnabled;\n }\n setJitter(jitter) {\n this.jitter = jitter;\n }\n\n /**\n * Jitter in milliseconds\n */\n getJitter() {\n return this.jitter;\n }\n\n /**\n * Audio concealment ration (conceled duration / total duration)\n */\n setAudioConcealment(concealedAudioDuration, totalAudioDuration) {\n this.audioConcealment.concealedAudio = concealedAudioDuration;\n this.audioConcealment.totalAudioDuration = totalAudioDuration;\n }\n getAudioConcealment() {\n return this.audioConcealment;\n }\n}\n//# sourceMappingURL=mediaTrackStats.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MediaTrackStats } from \"./mediaTrackStats.js\";\nexport class MediaTrackStatsHandler {\n constructor(mediaSsrcHandler, mediaTrackHandler) {\n this.mediaSsrcHandler = mediaSsrcHandler;\n this.mediaTrackHandler = mediaTrackHandler;\n _defineProperty(this, \"track2stats\", new Map());\n }\n\n /**\n * Find tracks by rtc stats\n * Argument report is any because the stats api is not consistent:\n * For example `trackIdentifier`, `mid` not existing in every implementations\n * https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats\n * https://developer.mozilla.org/en-US/docs/Web/API/RTCInboundRtpStreamStats\n */\n findTrack2Stats(report, type) {\n var trackID;\n if (report.trackIdentifier) {\n trackID = report.trackIdentifier;\n } else if (report.mid) {\n trackID = type === \"remote\" ? this.mediaTrackHandler.getRemoteTrackIdByMid(report.mid) : this.mediaTrackHandler.getLocalTrackIdByMid(report.mid);\n } else if (report.ssrc) {\n var mid = this.mediaSsrcHandler.findMidBySsrc(report.ssrc, type);\n if (!mid) {\n return undefined;\n }\n trackID = type === \"remote\" ? this.mediaTrackHandler.getRemoteTrackIdByMid(report.mid) : this.mediaTrackHandler.getLocalTrackIdByMid(report.mid);\n }\n if (!trackID) {\n return undefined;\n }\n var trackStats = this.track2stats.get(trackID);\n if (!trackStats) {\n var track = this.mediaTrackHandler.getTackById(trackID);\n if (track !== undefined) {\n var kind = track.kind === \"audio\" ? track.kind : \"video\";\n trackStats = new MediaTrackStats(trackID, type, kind);\n this.track2stats.set(trackID, trackStats);\n } else {\n return undefined;\n }\n }\n return trackStats;\n }\n findLocalVideoTrackStats(report) {\n var localVideoTracks = this.mediaTrackHandler.getLocalTracks(\"video\");\n if (localVideoTracks.length === 0) {\n return undefined;\n }\n return this.findTrack2Stats(report, \"local\");\n }\n getTrack2stats() {\n return this.track2stats;\n }\n findTransceiverByTrackId(trackID) {\n return this.mediaTrackHandler.getTransceiverByTrackId(trackID);\n }\n}\n//# sourceMappingURL=mediaTrackStatsHandler.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\nexport class ValueFormatter {\n static getNonNegativeValue(imput) {\n var value = imput;\n if (typeof value !== \"number\") {\n value = Number(value);\n }\n if (isNaN(value)) {\n return 0;\n }\n return Math.max(0, value);\n }\n}\n//# sourceMappingURL=valueFormatter.js.map","import { ValueFormatter } from \"./valueFormatter.js\";\nexport class TrackStatsBuilder {\n static buildFramerateResolution(trackStats, now) {\n var resolution = {\n height: now.frameHeight,\n width: now.frameWidth\n };\n var frameRate = now.framesPerSecond;\n if (resolution.height && resolution.width) {\n trackStats.setResolution(resolution);\n }\n trackStats.setFramerate(Math.round(frameRate || 0));\n }\n static calculateSimulcastFramerate(trackStats, now, before, layer) {\n var frameRate = trackStats.getFramerate();\n if (!frameRate) {\n if (before) {\n var timeMs = now.timestamp - before.timestamp;\n if (timeMs > 0 && now.framesSent) {\n var numberOfFramesSinceBefore = now.framesSent - before.framesSent;\n frameRate = numberOfFramesSinceBefore / timeMs * 1000;\n }\n }\n if (!frameRate) {\n return;\n }\n }\n\n // Reset frame rate to 0 when video is suspended as a result of endpoint falling out of last-n.\n frameRate = layer ? Math.round(frameRate / layer) : 0;\n trackStats.setFramerate(frameRate);\n }\n static buildCodec(report, trackStats, now) {\n var codec = report === null || report === void 0 ? void 0 : report.get(now.codecId);\n if (codec) {\n /**\n * The mime type has the following form: video/VP8 or audio/ISAC,\n * so we what to keep just the type after the '/', audio and video\n * keys will be added on the processing side.\n */\n var codecShortType = codec.mimeType.split(\"/\")[1];\n if (codecShortType) trackStats.setCodec(codecShortType);\n }\n }\n static buildBitrateReceived(trackStats, now, before) {\n trackStats.setBitrate({\n download: TrackStatsBuilder.calculateBitrate(now.bytesReceived, before.bytesReceived, now.timestamp, before.timestamp),\n upload: 0\n });\n }\n static buildBitrateSend(trackStats, now, before) {\n trackStats.setBitrate({\n download: 0,\n upload: this.calculateBitrate(now.bytesSent, before.bytesSent, now.timestamp, before.timestamp)\n });\n }\n static buildPacketsLost(trackStats, now, before) {\n var key = now.type === \"outbound-rtp\" ? \"packetsSent\" : \"packetsReceived\";\n var packetsNow = now[key];\n if (!packetsNow || packetsNow < 0) {\n packetsNow = 0;\n }\n var packetsBefore = ValueFormatter.getNonNegativeValue(before[key]);\n var packetsDiff = Math.max(0, packetsNow - packetsBefore);\n var packetsLostNow = ValueFormatter.getNonNegativeValue(now.packetsLost);\n var packetsLostBefore = ValueFormatter.getNonNegativeValue(before.packetsLost);\n var packetsLostDiff = Math.max(0, packetsLostNow - packetsLostBefore);\n trackStats.setLoss({\n packetsTotal: packetsDiff + packetsLostDiff,\n packetsLost: packetsLostDiff,\n isDownloadStream: now.type !== \"outbound-rtp\"\n });\n }\n static calculateBitrate(bytesNowAny, bytesBeforeAny, nowTimestamp, beforeTimestamp) {\n var bytesNow = ValueFormatter.getNonNegativeValue(bytesNowAny);\n var bytesBefore = ValueFormatter.getNonNegativeValue(bytesBeforeAny);\n var bytesProcessed = Math.max(0, bytesNow - bytesBefore);\n var timeMs = nowTimestamp - beforeTimestamp;\n var bitrateKbps = 0;\n if (timeMs > 0) {\n bitrateKbps = Math.round(bytesProcessed * 8 / timeMs);\n }\n return bitrateKbps;\n }\n static setTrackStatsState(trackStats, transceiver) {\n var _transceiver$sender;\n if (transceiver === undefined) {\n trackStats.alive = false;\n return;\n }\n var track = trackStats.getType() === \"remote\" ? transceiver.receiver.track : transceiver === null || transceiver === void 0 || (_transceiver$sender = transceiver.sender) === null || _transceiver$sender === void 0 ? void 0 : _transceiver$sender.track;\n if (track === undefined || track === null) {\n trackStats.alive = false;\n return;\n }\n if (track.readyState === \"ended\") {\n trackStats.alive = false;\n return;\n }\n trackStats.muted = track.muted;\n trackStats.enabled = track.enabled;\n trackStats.alive = true;\n }\n static buildTrackSummary(trackStatsList) {\n var videoTrackSummary = {\n count: 0,\n muted: 0,\n maxJitter: 0,\n maxPacketLoss: 0,\n concealedAudio: 0,\n totalAudio: 0\n };\n var audioTrackSummary = {\n count: 0,\n muted: 0,\n maxJitter: 0,\n maxPacketLoss: 0,\n concealedAudio: 0,\n totalAudio: 0\n };\n var remoteTrackList = trackStatsList.filter(t => t.getType() === \"remote\");\n var audioTrackList = remoteTrackList.filter(t => t.kind === \"audio\");\n remoteTrackList.forEach(stats => {\n var trackSummary = stats.kind === \"video\" ? videoTrackSummary : audioTrackSummary;\n trackSummary.count++;\n if (stats.alive && stats.muted) {\n trackSummary.muted++;\n }\n if (trackSummary.maxJitter < stats.getJitter()) {\n trackSummary.maxJitter = stats.getJitter();\n }\n if (trackSummary.maxPacketLoss < stats.getLoss().packetsLost) {\n trackSummary.maxPacketLoss = stats.getLoss().packetsLost;\n }\n if (audioTrackList.length > 0) {\n var _stats$getAudioConcea, _stats$getAudioConcea2;\n trackSummary.concealedAudio += (_stats$getAudioConcea = stats.getAudioConcealment()) === null || _stats$getAudioConcea === void 0 ? void 0 : _stats$getAudioConcea.concealedAudio;\n trackSummary.totalAudio += (_stats$getAudioConcea2 = stats.getAudioConcealment()) === null || _stats$getAudioConcea2 === void 0 ? void 0 : _stats$getAudioConcea2.totalAudioDuration;\n }\n });\n return {\n audioTrackSummary,\n videoTrackSummary\n };\n }\n static buildJitter(trackStats, statsReport) {\n if (statsReport.type !== \"inbound-rtp\") {\n return;\n }\n var jitterStr = statsReport === null || statsReport === void 0 ? void 0 : statsReport.jitter;\n if (jitterStr !== undefined) {\n var jitter = ValueFormatter.getNonNegativeValue(jitterStr);\n trackStats.setJitter(Math.round(jitter * 1000));\n } else {\n trackStats.setJitter(-1);\n }\n }\n static buildAudioConcealment(trackStats, statsReport) {\n if (statsReport.type !== \"inbound-rtp\") {\n return;\n }\n var msPerSample = 1000 * (statsReport === null || statsReport === void 0 ? void 0 : statsReport.totalSamplesDuration) / (statsReport === null || statsReport === void 0 ? void 0 : statsReport.totalSamplesReceived);\n var concealedAudioDuration = msPerSample * (statsReport === null || statsReport === void 0 ? void 0 : statsReport.concealedSamples);\n var totalAudioDuration = 1000 * (statsReport === null || statsReport === void 0 ? void 0 : statsReport.totalSamplesDuration);\n trackStats.setAudioConcealment(concealedAudioDuration, totalAudioDuration);\n }\n}\n//# sourceMappingURL=trackStatsBuilder.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class ConnectionStatsReportBuilder {\n static build(stats) {\n var report = {};\n\n // process stats\n var totalPackets = {\n download: 0,\n upload: 0\n };\n var lostPackets = {\n download: 0,\n upload: 0\n };\n var bitrateDownload = 0;\n var bitrateUpload = 0;\n var resolutions = {\n local: new Map(),\n remote: new Map()\n };\n var framerates = {\n local: new Map(),\n remote: new Map()\n };\n var codecs = {\n local: new Map(),\n remote: new Map()\n };\n var jitter = new Map();\n var audioConcealment = new Map();\n var audioBitrateDownload = 0;\n var audioBitrateUpload = 0;\n var videoBitrateDownload = 0;\n var videoBitrateUpload = 0;\n var totalConcealedAudio = 0;\n var totalAudioDuration = 0;\n for (var _ref3 of stats) {\n var _ref2 = _slicedToArray(_ref3, 2);\n var trackId = _ref2[0];\n var trackStats = _ref2[1];\n // process packet loss stats\n var loss = trackStats.getLoss();\n var type = loss.isDownloadStream ? \"download\" : \"upload\";\n totalPackets[type] += loss.packetsTotal;\n lostPackets[type] += loss.packetsLost;\n\n // process bitrate stats\n bitrateDownload += trackStats.getBitrate().download;\n bitrateUpload += trackStats.getBitrate().upload;\n\n // collect resolutions and framerates\n if (trackStats.kind === \"audio\") {\n // process audio quality stats\n var audioConcealmentForTrack = trackStats.getAudioConcealment();\n totalConcealedAudio += audioConcealmentForTrack.concealedAudio;\n totalAudioDuration += audioConcealmentForTrack.totalAudioDuration;\n audioBitrateDownload += trackStats.getBitrate().download;\n audioBitrateUpload += trackStats.getBitrate().upload;\n } else {\n videoBitrateDownload += trackStats.getBitrate().download;\n videoBitrateUpload += trackStats.getBitrate().upload;\n }\n resolutions[trackStats.getType()].set(trackId, trackStats.getResolution());\n framerates[trackStats.getType()].set(trackId, trackStats.getFramerate());\n codecs[trackStats.getType()].set(trackId, trackStats.getCodec());\n if (trackStats.getType() === \"remote\") {\n jitter.set(trackId, trackStats.getJitter());\n if (trackStats.kind === \"audio\") {\n audioConcealment.set(trackId, trackStats.getAudioConcealment());\n }\n }\n trackStats.resetBitrate();\n }\n report.bitrate = {\n upload: bitrateUpload,\n download: bitrateDownload\n };\n report.bitrate.audio = {\n upload: audioBitrateUpload,\n download: audioBitrateDownload\n };\n report.bitrate.video = {\n upload: videoBitrateUpload,\n download: videoBitrateDownload\n };\n report.packetLoss = {\n total: ConnectionStatsReportBuilder.calculatePacketLoss(lostPackets.download + lostPackets.upload, totalPackets.download + totalPackets.upload),\n download: ConnectionStatsReportBuilder.calculatePacketLoss(lostPackets.download, totalPackets.download),\n upload: ConnectionStatsReportBuilder.calculatePacketLoss(lostPackets.upload, totalPackets.upload)\n };\n report.audioConcealment = audioConcealment;\n report.totalAudioConcealment = {\n concealedAudio: totalConcealedAudio,\n totalAudioDuration\n };\n report.framerate = framerates;\n report.resolution = resolutions;\n report.codec = codecs;\n report.jitter = jitter;\n return report;\n }\n static calculatePacketLoss(lostPackets, totalPackets) {\n if (!totalPackets || totalPackets <= 0 || !lostPackets || lostPackets <= 0) {\n return 0;\n }\n return Math.round(lostPackets / totalPackets * 100);\n }\n}\n//# sourceMappingURL=connectionStatsReportBuilder.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class CallFeedStatsReporter {\n static buildCallFeedReport(callId, opponentMemberId, pc) {\n var rtpTransceivers = pc.getTransceivers();\n var transceiver = [];\n var callFeeds = [];\n rtpTransceivers.forEach(t => {\n var _t$sender;\n var sender = (_t$sender = t.sender) !== null && _t$sender !== void 0 && _t$sender.track ? CallFeedStatsReporter.buildTrackStats(t.sender.track, \"sender\") : null;\n var receiver = CallFeedStatsReporter.buildTrackStats(t.receiver.track, \"receiver\");\n transceiver.push({\n mid: t.mid == null ? \"null\" : t.mid,\n direction: t.direction,\n currentDirection: t.currentDirection == null ? \"null\" : t.currentDirection,\n sender,\n receiver\n });\n });\n return {\n callId,\n opponentMemberId,\n transceiver,\n callFeeds\n };\n }\n static buildTrackStats(track) {\n var _track$getSettings, _track$getConstraints;\n var label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"--\";\n var settingDeviceId = (_track$getSettings = track.getSettings()) === null || _track$getSettings === void 0 ? void 0 : _track$getSettings.deviceId;\n var constrainDeviceId = (_track$getConstraints = track.getConstraints()) === null || _track$getConstraints === void 0 ? void 0 : _track$getConstraints.deviceId;\n return {\n id: track.id,\n kind: track.kind,\n settingDeviceId: settingDeviceId !== null && settingDeviceId !== void 0 ? settingDeviceId : \"unknown\",\n constrainDeviceId: constrainDeviceId !== null && constrainDeviceId !== void 0 ? constrainDeviceId : \"unknown\",\n muted: track.muted,\n enabled: track.enabled,\n readyState: track.readyState,\n label\n };\n }\n static expandCallFeedReport(report, callFeeds) {\n var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"unknown\";\n callFeeds.forEach(feed => {\n var audioTracks = feed.stream.getAudioTracks();\n var videoTracks = feed.stream.getVideoTracks();\n var audio = audioTracks.length > 0 ? CallFeedStatsReporter.buildTrackStats(feed.stream.getAudioTracks()[0], feed.purpose) : null;\n var video = videoTracks.length > 0 ? CallFeedStatsReporter.buildTrackStats(feed.stream.getVideoTracks()[0], feed.purpose) : null;\n var feedStats = {\n stream: feed.stream.id,\n type: feed.isLocal() ? \"local\" : \"remote\",\n audio,\n video,\n purpose: feed.purpose,\n prefix,\n isVideoMuted: feed.isVideoMuted(),\n isAudioMuted: feed.isAudioMuted()\n };\n report.callFeeds.push(feedStats);\n });\n return report;\n }\n}\n//# sourceMappingURL=callFeedStatsReporter.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { ConnectionStats } from \"./connectionStats.js\";\nimport { ConnectionStatsBuilder } from \"./connectionStatsBuilder.js\";\nimport { TransportStatsBuilder } from \"./transportStatsBuilder.js\";\nimport { MediaSsrcHandler } from \"./media/mediaSsrcHandler.js\";\nimport { MediaTrackHandler } from \"./media/mediaTrackHandler.js\";\nimport { MediaTrackStatsHandler } from \"./media/mediaTrackStatsHandler.js\";\nimport { TrackStatsBuilder } from \"./trackStatsBuilder.js\";\nimport { ConnectionStatsReportBuilder } from \"./connectionStatsReportBuilder.js\";\nimport { ValueFormatter } from \"./valueFormatter.js\";\nimport { logger } from \"../../logger.js\";\nimport { CallFeedStatsReporter } from \"./callFeedStatsReporter.js\";\nexport class CallStatsReportGatherer {\n constructor(callId, opponentMemberId, pc, emitter) {\n var isFocus = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n this.callId = callId;\n this.opponentMemberId = opponentMemberId;\n this.pc = pc;\n this.emitter = emitter;\n this.isFocus = isFocus;\n _defineProperty(this, \"isActive\", true);\n _defineProperty(this, \"previousStatsReport\", void 0);\n _defineProperty(this, \"currentStatsReport\", void 0);\n _defineProperty(this, \"connectionStats\", new ConnectionStats());\n _defineProperty(this, \"trackStats\", void 0);\n pc.addEventListener(\"signalingstatechange\", this.onSignalStateChange.bind(this));\n this.trackStats = new MediaTrackStatsHandler(new MediaSsrcHandler(), new MediaTrackHandler(pc));\n }\n processStats(groupCallId, localUserId) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var summary = {\n isFirstCollection: _this.previousStatsReport === undefined,\n receivedMedia: 0,\n receivedAudioMedia: 0,\n receivedVideoMedia: 0,\n audioTrackSummary: {\n count: 0,\n muted: 0,\n maxPacketLoss: 0,\n maxJitter: 0,\n concealedAudio: 0,\n totalAudio: 0\n },\n videoTrackSummary: {\n count: 0,\n muted: 0,\n maxPacketLoss: 0,\n maxJitter: 0,\n concealedAudio: 0,\n totalAudio: 0\n }\n };\n if (_this.isActive) {\n var statsPromise = _this.pc.getStats();\n if (typeof (statsPromise === null || statsPromise === void 0 ? void 0 : statsPromise.then) === \"function\") {\n return statsPromise.then(report => {\n var _this$connectionStats, _this$connectionStats2;\n // @ts-ignore\n _this.currentStatsReport = typeof (report === null || report === void 0 ? void 0 : report.result) === \"function\" ? report.result() : report;\n try {\n _this.processStatsReport(groupCallId, localUserId);\n } catch (error) {\n _this.handleError(error);\n return summary;\n }\n _this.previousStatsReport = _this.currentStatsReport;\n summary.receivedMedia = _this.connectionStats.bitrate.download;\n summary.receivedAudioMedia = ((_this$connectionStats = _this.connectionStats.bitrate.audio) === null || _this$connectionStats === void 0 ? void 0 : _this$connectionStats.download) || 0;\n summary.receivedVideoMedia = ((_this$connectionStats2 = _this.connectionStats.bitrate.video) === null || _this$connectionStats2 === void 0 ? void 0 : _this$connectionStats2.download) || 0;\n var trackSummary = TrackStatsBuilder.buildTrackSummary(Array.from(_this.trackStats.getTrack2stats().values()));\n return _objectSpread(_objectSpread({}, summary), {}, {\n audioTrackSummary: trackSummary.audioTrackSummary,\n videoTrackSummary: trackSummary.videoTrackSummary\n });\n }).catch(error => {\n _this.handleError(error);\n return summary;\n });\n }\n _this.isActive = false;\n }\n return Promise.resolve(summary);\n })();\n }\n processStatsReport(groupCallId, localUserId) {\n var _this$currentStatsRep;\n var byteSentStatsReport = new Map();\n byteSentStatsReport.callId = this.callId;\n byteSentStatsReport.opponentMemberId = this.opponentMemberId;\n (_this$currentStatsRep = this.currentStatsReport) === null || _this$currentStatsRep === void 0 || _this$currentStatsRep.forEach(now => {\n var before = this.previousStatsReport ? this.previousStatsReport.get(now.id) : null;\n // RTCIceCandidatePairStats - https://w3c.github.io/webrtc-stats/#candidatepair-dict*\n if (now.type === \"candidate-pair\" && now.nominated && now.state === \"succeeded\") {\n this.connectionStats.bandwidth = ConnectionStatsBuilder.buildBandwidthReport(now);\n this.connectionStats.transport = TransportStatsBuilder.buildReport(this.currentStatsReport, now, this.connectionStats.transport, this.isFocus);\n\n // RTCReceivedRtpStreamStats\n // https://w3c.github.io/webrtc-stats/#receivedrtpstats-dict*\n // RTCSentRtpStreamStats\n // https://w3c.github.io/webrtc-stats/#sentrtpstats-dict*\n } else if (now.type === \"inbound-rtp\" || now.type === \"outbound-rtp\") {\n var trackStats = this.trackStats.findTrack2Stats(now, now.type === \"inbound-rtp\" ? \"remote\" : \"local\");\n if (!trackStats) {\n return;\n }\n if (before) {\n TrackStatsBuilder.buildPacketsLost(trackStats, now, before);\n }\n\n // Get the resolution and framerate for only remote video sources here. For the local video sources,\n // 'track' stats will be used since they have the updated resolution based on the simulcast streams\n // currently being sent. Promise based getStats reports three 'outbound-rtp' streams and there will be\n // more calculations needed to determine what is the highest resolution stream sent by the client if the\n // 'outbound-rtp' stats are used.\n if (now.type === \"inbound-rtp\") {\n TrackStatsBuilder.buildFramerateResolution(trackStats, now);\n if (before) {\n TrackStatsBuilder.buildBitrateReceived(trackStats, now, before);\n }\n var ts = this.trackStats.findTransceiverByTrackId(trackStats.trackId);\n TrackStatsBuilder.setTrackStatsState(trackStats, ts);\n TrackStatsBuilder.buildJitter(trackStats, now);\n TrackStatsBuilder.buildAudioConcealment(trackStats, now);\n } else if (before) {\n byteSentStatsReport.set(trackStats.trackId, ValueFormatter.getNonNegativeValue(now.bytesSent));\n TrackStatsBuilder.buildBitrateSend(trackStats, now, before);\n }\n TrackStatsBuilder.buildCodec(this.currentStatsReport, trackStats, now);\n } else if (now.type === \"track\" && now.kind === \"video\" && !now.remoteSource) {\n var _trackStats = this.trackStats.findLocalVideoTrackStats(now);\n if (!_trackStats) {\n return;\n }\n TrackStatsBuilder.buildFramerateResolution(_trackStats, now);\n TrackStatsBuilder.calculateSimulcastFramerate(_trackStats, now, before, this.trackStats.mediaTrackHandler.getActiveSimulcastStreams());\n }\n });\n this.emitter.emitByteSendReport(byteSentStatsReport);\n this.emitter.emitCallFeedReport(CallFeedStatsReporter.buildCallFeedReport(this.callId, this.opponentMemberId, this.pc));\n this.processAndEmitConnectionStatsReport();\n }\n setActive(isActive) {\n this.isActive = isActive;\n }\n getActive() {\n return this.isActive;\n }\n handleError(error) {\n this.isActive = false;\n logger.warn(\"CallStatsReportGatherer \".concat(this.callId, \" processStatsReport fails and set to inactive \").concat(error));\n }\n processAndEmitConnectionStatsReport() {\n var report = ConnectionStatsReportBuilder.build(this.trackStats.getTrack2stats());\n report.callId = this.callId;\n report.opponentMemberId = this.opponentMemberId;\n this.connectionStats.bandwidth = report.bandwidth;\n this.connectionStats.bitrate = report.bitrate;\n this.connectionStats.packetLoss = report.packetLoss;\n this.emitter.emitConnectionStatsReport(_objectSpread(_objectSpread({}, report), {}, {\n transport: this.connectionStats.transport\n }));\n this.connectionStats.transport = [];\n }\n stopProcessingStats() {}\n onSignalStateChange() {\n if (this.pc.signalingState === \"stable\") {\n if (this.pc.currentRemoteDescription) {\n this.trackStats.mediaSsrcHandler.parse(this.pc.currentRemoteDescription.sdp, \"remote\");\n }\n if (this.pc.currentLocalDescription) {\n this.trackStats.mediaSsrcHandler.parse(this.pc.currentLocalDescription.sdp, \"local\");\n }\n }\n }\n setOpponentMemberId(id) {\n this.opponentMemberId = id;\n }\n}\n//# sourceMappingURL=callStatsReportGatherer.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var StatsReport = /*#__PURE__*/function (StatsReport) {\n StatsReport[\"CONNECTION_STATS\"] = \"StatsReport.connection_stats\";\n StatsReport[\"CALL_FEED_REPORT\"] = \"StatsReport.call_feed_report\";\n StatsReport[\"BYTE_SENT_STATS\"] = \"StatsReport.byte_sent_stats\";\n StatsReport[\"SUMMARY_STATS\"] = \"StatsReport.summary_stats\";\n return StatsReport;\n}({});\n\n/// ByteSentStatsReport ################################################################################################\n\n/// ConnectionStatsReport ##############################################################################################\n\n/// SummaryStatsReport #################################################################################################\n\n/// CallFeedReport #####################################################################################################\n//# sourceMappingURL=statsReport.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { TypedEventEmitter } from \"../../models/typed-event-emitter.js\";\nimport { StatsReport } from \"./statsReport.js\";\nexport class StatsReportEmitter extends TypedEventEmitter {\n emitByteSendReport(byteSentStats) {\n this.emit(StatsReport.BYTE_SENT_STATS, byteSentStats);\n }\n emitConnectionStatsReport(report) {\n this.emit(StatsReport.CONNECTION_STATS, report);\n }\n emitCallFeedReport(report) {\n this.emit(StatsReport.CALL_FEED_REPORT, report);\n }\n emitSummaryStatsReport(report) {\n this.emit(StatsReport.SUMMARY_STATS, report);\n }\n}\n//# sourceMappingURL=statsReportEmitter.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class SummaryStatsReportGatherer {\n constructor(emitter) {\n this.emitter = emitter;\n }\n build(allSummary) {\n // Filter all stats which collect the first time webrtc stats.\n // Because stats based on time interval and the first collection of a summery stats has no previous\n // webrtcStats as basement all the calculation are 0. We don't want track the 0 stats.\n var summary = allSummary.filter(s => !s.isFirstCollection);\n var summaryTotalCount = summary.length;\n // For counting the peer connections we also want to consider the ignored summaries\n var peerConnectionsCount = allSummary.length;\n if (summaryTotalCount === 0) {\n return;\n }\n var summaryCounter = {\n receivedAudio: 0,\n receivedVideo: 0,\n receivedMedia: 0,\n concealedAudio: 0,\n totalAudio: 0\n };\n var maxJitter = 0;\n var maxPacketLoss = 0;\n summary.forEach(stats => {\n this.countTrackListReceivedMedia(summaryCounter, stats);\n this.countConcealedAudio(summaryCounter, stats);\n maxJitter = this.buildMaxJitter(maxJitter, stats);\n maxPacketLoss = this.buildMaxPacketLoss(maxPacketLoss, stats);\n });\n var decimalPlaces = 5;\n var report = {\n percentageReceivedMedia: Number((summaryCounter.receivedMedia / summaryTotalCount).toFixed(decimalPlaces)),\n percentageReceivedVideoMedia: Number((summaryCounter.receivedVideo / summaryTotalCount).toFixed(decimalPlaces)),\n percentageReceivedAudioMedia: Number((summaryCounter.receivedAudio / summaryTotalCount).toFixed(decimalPlaces)),\n maxJitter,\n maxPacketLoss,\n percentageConcealedAudio: Number(summaryCounter.totalAudio > 0 ? (summaryCounter.concealedAudio / summaryCounter.totalAudio).toFixed(decimalPlaces) : 0),\n peerConnections: peerConnectionsCount\n };\n this.emitter.emitSummaryStatsReport(report);\n }\n static extendSummaryReport(report, callParticipants) {\n // Calculate the actual number of devices based on the participants state event\n // (this is used, to compare the expected participant count from the room state with the acutal peer connections)\n // const devices = callParticipants.()\n var devices = [];\n var users = [];\n for (var userEntry of callParticipants) {\n users.push(userEntry);\n for (var device of userEntry[1]) {\n devices.push(device);\n }\n }\n report.opponentDevicesInCall = Math.max(0, devices.length - 1);\n report.opponentUsersInCall = Math.max(0, users.length - 1);\n report.diffDevicesToPeerConnections = Math.max(0, devices.length - 1) - report.peerConnections;\n report.ratioPeerConnectionToDevices = Math.max(0, devices.length - 1) == 0 ? 0 : report.peerConnections / (devices.length - 1);\n }\n countTrackListReceivedMedia(counter, stats) {\n var hasReceivedAudio = false;\n var hasReceivedVideo = false;\n if (stats.receivedAudioMedia > 0 || stats.audioTrackSummary.count === 0) {\n counter.receivedAudio++;\n hasReceivedAudio = true;\n }\n if (stats.receivedVideoMedia > 0 || stats.videoTrackSummary.count === 0) {\n counter.receivedVideo++;\n hasReceivedVideo = true;\n } else {\n if (stats.videoTrackSummary.muted > 0 && stats.videoTrackSummary.muted === stats.videoTrackSummary.count) {\n counter.receivedVideo++;\n hasReceivedVideo = true;\n }\n }\n if (hasReceivedVideo && hasReceivedAudio) {\n counter.receivedMedia++;\n }\n }\n buildMaxJitter(maxJitter, stats) {\n if (maxJitter < stats.videoTrackSummary.maxJitter) {\n maxJitter = stats.videoTrackSummary.maxJitter;\n }\n if (maxJitter < stats.audioTrackSummary.maxJitter) {\n maxJitter = stats.audioTrackSummary.maxJitter;\n }\n return maxJitter;\n }\n buildMaxPacketLoss(maxPacketLoss, stats) {\n if (maxPacketLoss < stats.videoTrackSummary.maxPacketLoss) {\n maxPacketLoss = stats.videoTrackSummary.maxPacketLoss;\n }\n if (maxPacketLoss < stats.audioTrackSummary.maxPacketLoss) {\n maxPacketLoss = stats.audioTrackSummary.maxPacketLoss;\n }\n return maxPacketLoss;\n }\n countConcealedAudio(summaryCounter, stats) {\n summaryCounter.concealedAudio += stats.audioTrackSummary.concealedAudio;\n summaryCounter.totalAudio += stats.audioTrackSummary.totalAudio;\n }\n}\n//# sourceMappingURL=summaryStatsReportGatherer.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\nimport { CallStatsReportGatherer } from \"./callStatsReportGatherer.js\";\nimport { StatsReportEmitter } from \"./statsReportEmitter.js\";\nimport { SummaryStatsReportGatherer } from \"./summaryStatsReportGatherer.js\";\nimport { logger } from \"../../logger.js\";\nexport class GroupCallStats {\n constructor(groupCallId, userId) {\n var interval = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10000;\n this.groupCallId = groupCallId;\n this.userId = userId;\n this.interval = interval;\n _defineProperty(this, \"timer\", void 0);\n _defineProperty(this, \"gatherers\", new Map());\n _defineProperty(this, \"reports\", new StatsReportEmitter());\n _defineProperty(this, \"summaryStatsReportGatherer\", new SummaryStatsReportGatherer(this.reports));\n }\n start() {\n if (this.timer === undefined && this.interval > 0) {\n this.timer = setInterval(() => {\n this.processStats();\n }, this.interval);\n }\n }\n stop() {\n if (this.timer !== undefined) {\n clearInterval(this.timer);\n this.gatherers.forEach(c => c.stopProcessingStats());\n }\n }\n hasStatsReportGatherer(callId) {\n return this.gatherers.has(callId);\n }\n addStatsReportGatherer(callId, opponentMemberId, peerConnection) {\n if (this.hasStatsReportGatherer(callId)) {\n return false;\n }\n this.gatherers.set(callId, new CallStatsReportGatherer(callId, opponentMemberId, peerConnection, this.reports));\n return true;\n }\n removeStatsReportGatherer(callId) {\n return this.gatherers.delete(callId);\n }\n getStatsReportGatherer(callId) {\n return this.hasStatsReportGatherer(callId) ? this.gatherers.get(callId) : undefined;\n }\n updateOpponentMember(callId, opponentMember) {\n var _this$getStatsReportG;\n (_this$getStatsReportG = this.getStatsReportGatherer(callId)) === null || _this$getStatsReportG === void 0 || _this$getStatsReportG.setOpponentMemberId(opponentMember);\n }\n processStats() {\n var summary = [];\n this.gatherers.forEach(c => {\n summary.push(c.processStats(this.groupCallId, this.userId));\n });\n Promise.all(summary).then(s => this.summaryStatsReportGatherer.build(s)).catch(err => {\n logger.error(\"Could not build summary stats report\", err);\n });\n }\n setInterval(interval) {\n this.interval = interval;\n }\n}\n//# sourceMappingURL=groupCallStats.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { CallFeed, SPEAKING_THRESHOLD } from \"./callFeed.js\";\nimport { CallErrorCode, CallEvent, CallState, genCallID, setTracksEnabled, createNewMatrixCall, CallError } from \"./call.js\";\nimport { RoomStateEvent } from \"../models/room-state.js\";\nimport { logger } from \"../logger.js\";\nimport { ReEmitter } from \"../ReEmitter.js\";\nimport { SDPStreamMetadataPurpose } from \"./callEventTypes.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { CallEventHandlerEvent } from \"./callEventHandler.js\";\nimport { GroupCallEventHandlerEvent } from \"./groupCallEventHandler.js\";\nimport { mapsEqual } from \"../utils.js\";\nimport { GroupCallStats } from \"./stats/groupCallStats.js\";\nimport { StatsReport } from \"./stats/statsReport.js\";\nimport { SummaryStatsReportGatherer } from \"./stats/summaryStatsReportGatherer.js\";\nimport { CallFeedStatsReporter } from \"./stats/callFeedStatsReporter.js\";\nimport { KnownMembership } from \"../@types/membership.js\";\nexport var GroupCallIntent = /*#__PURE__*/function (GroupCallIntent) {\n GroupCallIntent[\"Ring\"] = \"m.ring\";\n GroupCallIntent[\"Prompt\"] = \"m.prompt\";\n GroupCallIntent[\"Room\"] = \"m.room\";\n return GroupCallIntent;\n}({});\nexport var GroupCallType = /*#__PURE__*/function (GroupCallType) {\n GroupCallType[\"Video\"] = \"m.video\";\n GroupCallType[\"Voice\"] = \"m.voice\";\n return GroupCallType;\n}({});\nexport var GroupCallTerminationReason = /*#__PURE__*/function (GroupCallTerminationReason) {\n GroupCallTerminationReason[\"CallEnded\"] = \"call_ended\";\n return GroupCallTerminationReason;\n}({});\n/**\n * Because event names are just strings, they do need\n * to be unique over all event types of event emitter.\n * Some objects could emit more then one set of events.\n */\nexport var GroupCallEvent = /*#__PURE__*/function (GroupCallEvent) {\n GroupCallEvent[\"GroupCallStateChanged\"] = \"group_call_state_changed\";\n GroupCallEvent[\"ActiveSpeakerChanged\"] = \"active_speaker_changed\";\n GroupCallEvent[\"CallsChanged\"] = \"calls_changed\";\n GroupCallEvent[\"UserMediaFeedsChanged\"] = \"user_media_feeds_changed\";\n GroupCallEvent[\"ScreenshareFeedsChanged\"] = \"screenshare_feeds_changed\";\n GroupCallEvent[\"LocalScreenshareStateChanged\"] = \"local_screenshare_state_changed\";\n GroupCallEvent[\"LocalMuteStateChanged\"] = \"local_mute_state_changed\";\n GroupCallEvent[\"ParticipantsChanged\"] = \"participants_changed\";\n GroupCallEvent[\"Error\"] = \"group_call_error\";\n return GroupCallEvent;\n}({});\nexport var GroupCallStatsReportEvent = /*#__PURE__*/function (GroupCallStatsReportEvent) {\n GroupCallStatsReportEvent[\"ConnectionStats\"] = \"GroupCall.connection_stats\";\n GroupCallStatsReportEvent[\"ByteSentStats\"] = \"GroupCall.byte_sent_stats\";\n GroupCallStatsReportEvent[\"SummaryStats\"] = \"GroupCall.summary_stats\";\n GroupCallStatsReportEvent[\"CallFeedStats\"] = \"GroupCall.call_feed_stats\";\n return GroupCallStatsReportEvent;\n}({});\n\n/**\n * The final report-events that get consumed by client.\n */\n\nexport var GroupCallErrorCode = /*#__PURE__*/function (GroupCallErrorCode) {\n GroupCallErrorCode[\"NoUserMedia\"] = \"no_user_media\";\n GroupCallErrorCode[\"UnknownDevice\"] = \"unknown_device\";\n GroupCallErrorCode[\"PlaceCallFailed\"] = \"place_call_failed\";\n return GroupCallErrorCode;\n}({});\nexport class GroupCallError extends Error {\n constructor(code, msg, err) {\n // Still don't think there's any way to have proper nested errors\n if (err) {\n super(msg + \": \" + err);\n _defineProperty(this, \"code\", void 0);\n } else {\n super(msg);\n _defineProperty(this, \"code\", void 0);\n }\n this.code = code;\n }\n}\nexport class GroupCallUnknownDeviceError extends GroupCallError {\n constructor(userId) {\n super(GroupCallErrorCode.UnknownDevice, \"No device found for \" + userId);\n this.userId = userId;\n }\n}\nexport class OtherUserSpeakingError extends Error {\n constructor() {\n super(\"Cannot unmute: another user is speaking\");\n }\n}\nexport var GroupCallState = /*#__PURE__*/function (GroupCallState) {\n GroupCallState[\"LocalCallFeedUninitialized\"] = \"local_call_feed_uninitialized\";\n GroupCallState[\"InitializingLocalCallFeed\"] = \"initializing_local_call_feed\";\n GroupCallState[\"LocalCallFeedInitialized\"] = \"local_call_feed_initialized\";\n GroupCallState[\"Entered\"] = \"entered\";\n GroupCallState[\"Ended\"] = \"ended\";\n return GroupCallState;\n}({});\nvar DEVICE_TIMEOUT = 1000 * 60 * 60; // 1 hour\n\nfunction getCallUserId(call) {\n var _call$getOpponentMemb;\n return ((_call$getOpponentMemb = call.getOpponentMember()) === null || _call$getOpponentMemb === void 0 ? void 0 : _call$getOpponentMemb.userId) || call.invitee || null;\n}\nexport class GroupCall extends TypedEventEmitter {\n constructor(client, room, type, isPtt, intent, groupCallId, dataChannelsEnabled, dataChannelOptions, isCallWithoutVideoAndAudio) {\n var _room$currentState$ge, _room$currentState$ge2;\n var useLivekit = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false;\n var livekitServiceURL = arguments.length > 10 ? arguments[10] : undefined;\n super();\n this.client = client;\n this.room = room;\n this.type = type;\n this.isPtt = isPtt;\n this.intent = intent;\n this.dataChannelsEnabled = dataChannelsEnabled;\n this.dataChannelOptions = dataChannelOptions;\n this.useLivekit = useLivekit;\n // Config\n _defineProperty(this, \"activeSpeakerInterval\", 1000);\n _defineProperty(this, \"retryCallInterval\", 5000);\n _defineProperty(this, \"participantTimeout\", 1000 * 15);\n _defineProperty(this, \"pttMaxTransmitTime\", 1000 * 20);\n _defineProperty(this, \"activeSpeaker\", void 0);\n _defineProperty(this, \"localCallFeed\", void 0);\n _defineProperty(this, \"localScreenshareFeed\", void 0);\n _defineProperty(this, \"localDesktopCapturerSourceId\", void 0);\n _defineProperty(this, \"userMediaFeeds\", []);\n _defineProperty(this, \"screenshareFeeds\", []);\n _defineProperty(this, \"groupCallId\", void 0);\n _defineProperty(this, \"allowCallWithoutVideoAndAudio\", void 0);\n _defineProperty(this, \"calls\", new Map());\n // user_id -> device_id -> MatrixCall\n _defineProperty(this, \"callHandlers\", new Map());\n // user_id -> device_id -> ICallHandlers\n _defineProperty(this, \"activeSpeakerLoopInterval\", void 0);\n _defineProperty(this, \"retryCallLoopInterval\", void 0);\n _defineProperty(this, \"retryCallCounts\", new Map());\n // user_id -> device_id -> count\n _defineProperty(this, \"reEmitter\", void 0);\n _defineProperty(this, \"transmitTimer\", null);\n _defineProperty(this, \"participantsExpirationTimer\", null);\n _defineProperty(this, \"resendMemberStateTimer\", null);\n _defineProperty(this, \"initWithAudioMuted\", false);\n _defineProperty(this, \"initWithVideoMuted\", false);\n _defineProperty(this, \"initCallFeedPromise\", void 0);\n _defineProperty(this, \"_livekitServiceURL\", void 0);\n _defineProperty(this, \"stats\", void 0);\n /**\n * Configure default webrtc stats collection interval in ms\n * Disable collecting webrtc stats by setting interval to 0\n */\n _defineProperty(this, \"statsCollectIntervalTime\", 0);\n _defineProperty(this, \"onConnectionStats\", report => {\n // Final emit of the summary event, to be consumed by the client\n this.emit(GroupCallStatsReportEvent.ConnectionStats, {\n report\n });\n });\n _defineProperty(this, \"onByteSentStats\", report => {\n // Final emit of the summary event, to be consumed by the client\n this.emit(GroupCallStatsReportEvent.ByteSentStats, {\n report\n });\n });\n _defineProperty(this, \"onSummaryStats\", report => {\n SummaryStatsReportGatherer.extendSummaryReport(report, this.participants);\n // Final emit of the summary event, to be consumed by the client\n this.emit(GroupCallStatsReportEvent.SummaryStats, {\n report\n });\n });\n _defineProperty(this, \"onCallFeedReport\", report => {\n if (this.localCallFeed) {\n report = CallFeedStatsReporter.expandCallFeedReport(report, [this.localCallFeed], \"from-local-feed\");\n }\n var callFeeds = [];\n this.forEachCall(call => {\n if (call.callId === report.callId) {\n call.getFeeds().forEach(f => callFeeds.push(f));\n }\n });\n report = CallFeedStatsReporter.expandCallFeedReport(report, callFeeds, \"from-call-feed\");\n this.emit(GroupCallStatsReportEvent.CallFeedStats, {\n report\n });\n });\n _defineProperty(this, \"_state\", GroupCallState.LocalCallFeedUninitialized);\n _defineProperty(this, \"_participants\", new Map());\n _defineProperty(this, \"_creationTs\", null);\n _defineProperty(this, \"_enteredViaAnotherSession\", false);\n /*\n * Call Setup\n *\n * There are two different paths for calls to be created:\n * 1. Incoming calls triggered by the Call.incoming event.\n * 2. Outgoing calls to the initial members of a room or new members\n * as they are observed by the RoomState.members event.\n */\n _defineProperty(this, \"onIncomingCall\", newCall => {\n var _newCall$getOpponentM, _this$calls$get;\n // The incoming calls may be for another room, which we will ignore.\n if (newCall.roomId !== this.room.roomId) {\n return;\n }\n if (newCall.state !== CallState.Ringing) {\n logger.warn(\"GroupCall \".concat(this.groupCallId, \" onIncomingCall() incoming call no longer in ringing state - ignoring\"));\n return;\n }\n if (!newCall.groupCallId || newCall.groupCallId !== this.groupCallId) {\n logger.log(\"GroupCall \".concat(this.groupCallId, \" onIncomingCall() ignored because it doesn't match the current group call\"));\n newCall.reject();\n return;\n }\n var opponentUserId = (_newCall$getOpponentM = newCall.getOpponentMember()) === null || _newCall$getOpponentM === void 0 ? void 0 : _newCall$getOpponentM.userId;\n if (opponentUserId === undefined) {\n logger.warn(\"GroupCall \".concat(this.groupCallId, \" onIncomingCall() incoming call with no member - ignoring\"));\n return;\n }\n if (this.useLivekit) {\n logger.info(\"Received incoming call whilst in signaling-only mode! Ignoring.\");\n return;\n }\n var deviceMap = (_this$calls$get = this.calls.get(opponentUserId)) !== null && _this$calls$get !== void 0 ? _this$calls$get : new Map();\n var prevCall = deviceMap.get(newCall.getOpponentDeviceId());\n if ((prevCall === null || prevCall === void 0 ? void 0 : prevCall.callId) === newCall.callId) return;\n logger.log(\"GroupCall \".concat(this.groupCallId, \" onIncomingCall() incoming call (userId=\").concat(opponentUserId, \", callId=\").concat(newCall.callId, \")\"));\n if (prevCall) prevCall.hangup(CallErrorCode.Replaced, false);\n // We must do this before we start initialising / answering the call as we\n // need to know it is the active call for this user+deviceId and to not ignore\n // events from it.\n deviceMap.set(newCall.getOpponentDeviceId(), newCall);\n this.calls.set(opponentUserId, deviceMap);\n this.initCall(newCall);\n var feeds = this.getLocalFeeds().map(feed => feed.clone());\n if (!this.callExpected(newCall)) {\n // Disable our tracks for users not explicitly participating in the\n // call but trying to receive the feeds\n for (var feed of feeds) {\n setTracksEnabled(feed.stream.getAudioTracks(), false);\n setTracksEnabled(feed.stream.getVideoTracks(), false);\n }\n }\n newCall.answerWithCallFeeds(feeds);\n this.emit(GroupCallEvent.CallsChanged, this.calls);\n });\n _defineProperty(this, \"onRetryCallLoop\", () => {\n var needsRetry = false;\n for (var _ref3 of this.participants) {\n var _ref2 = _slicedToArray(_ref3, 2);\n var _userId = _ref2[0].userId;\n var participantMap = _ref2[1];\n var callMap = this.calls.get(_userId);\n var retriesMap = this.retryCallCounts.get(_userId);\n for (var _ref6 of participantMap) {\n var _retriesMap$get, _retriesMap;\n var _ref5 = _slicedToArray(_ref6, 2);\n var deviceId = _ref5[0];\n var participant = _ref5[1];\n var call = callMap === null || callMap === void 0 ? void 0 : callMap.get(deviceId);\n var retries = (_retriesMap$get = (_retriesMap = retriesMap) === null || _retriesMap === void 0 ? void 0 : _retriesMap.get(deviceId)) !== null && _retriesMap$get !== void 0 ? _retriesMap$get : 0;\n if ((call === null || call === void 0 ? void 0 : call.getOpponentSessionId()) !== participant.sessionId && this.wantsOutgoingCall(_userId, deviceId) && retries < 3) {\n if (retriesMap === undefined) {\n retriesMap = new Map();\n this.retryCallCounts.set(_userId, retriesMap);\n }\n retriesMap.set(deviceId, retries + 1);\n needsRetry = true;\n }\n }\n }\n if (needsRetry) this.placeOutgoingCalls();\n });\n _defineProperty(this, \"onCallFeedsChanged\", call => {\n var opponentMemberId = getCallUserId(call);\n var opponentDeviceId = call.getOpponentDeviceId();\n if (!opponentMemberId) {\n throw new Error(\"Cannot change call feeds without user id\");\n }\n var currentUserMediaFeed = this.getUserMediaFeed(opponentMemberId, opponentDeviceId);\n var remoteUsermediaFeed = call.remoteUsermediaFeed;\n var remoteFeedChanged = remoteUsermediaFeed !== currentUserMediaFeed;\n var deviceMap = this.calls.get(opponentMemberId);\n var currentCallForUserDevice = deviceMap === null || deviceMap === void 0 ? void 0 : deviceMap.get(opponentDeviceId);\n if ((currentCallForUserDevice === null || currentCallForUserDevice === void 0 ? void 0 : currentCallForUserDevice.callId) !== call.callId) {\n // the call in question is not the current call for this user/deviceId\n // so ignore feed events from it otherwise we'll remove our real feeds\n return;\n }\n if (remoteFeedChanged) {\n if (!currentUserMediaFeed && remoteUsermediaFeed) {\n this.addUserMediaFeed(remoteUsermediaFeed);\n } else if (currentUserMediaFeed && remoteUsermediaFeed) {\n this.replaceUserMediaFeed(currentUserMediaFeed, remoteUsermediaFeed);\n } else if (currentUserMediaFeed && !remoteUsermediaFeed) {\n this.removeUserMediaFeed(currentUserMediaFeed);\n }\n }\n var currentScreenshareFeed = this.getScreenshareFeed(opponentMemberId, opponentDeviceId);\n var remoteScreensharingFeed = call.remoteScreensharingFeed;\n var remoteScreenshareFeedChanged = remoteScreensharingFeed !== currentScreenshareFeed;\n if (remoteScreenshareFeedChanged) {\n if (!currentScreenshareFeed && remoteScreensharingFeed) {\n this.addScreenshareFeed(remoteScreensharingFeed);\n } else if (currentScreenshareFeed && remoteScreensharingFeed) {\n this.replaceScreenshareFeed(currentScreenshareFeed, remoteScreensharingFeed);\n } else if (currentScreenshareFeed && !remoteScreensharingFeed) {\n this.removeScreenshareFeed(currentScreenshareFeed);\n }\n }\n });\n _defineProperty(this, \"onCallStateChanged\", (call, state, _oldState) => {\n var _call$getOpponentMemb2;\n if (state === CallState.Ended) return;\n var audioMuted = this.localCallFeed.isAudioMuted();\n if (call.localUsermediaStream && call.isMicrophoneMuted() !== audioMuted) {\n call.setMicrophoneMuted(audioMuted);\n }\n var videoMuted = this.localCallFeed.isVideoMuted();\n if (call.localUsermediaStream && call.isLocalVideoMuted() !== videoMuted) {\n call.setLocalVideoMuted(videoMuted);\n }\n var opponentUserId = (_call$getOpponentMemb2 = call.getOpponentMember()) === null || _call$getOpponentMemb2 === void 0 ? void 0 : _call$getOpponentMemb2.userId;\n if (state === CallState.Connected && opponentUserId) {\n var retriesMap = this.retryCallCounts.get(opponentUserId);\n retriesMap === null || retriesMap === void 0 || retriesMap.delete(call.getOpponentDeviceId());\n if ((retriesMap === null || retriesMap === void 0 ? void 0 : retriesMap.size) === 0) this.retryCallCounts.delete(opponentUserId);\n }\n });\n _defineProperty(this, \"onCallHangup\", call => {\n var _call$getOpponentMemb3, _call$getOpponentMemb4;\n if (call.hangupReason === CallErrorCode.Replaced) return;\n var opponentUserId = (_call$getOpponentMemb3 = (_call$getOpponentMemb4 = call.getOpponentMember()) === null || _call$getOpponentMemb4 === void 0 ? void 0 : _call$getOpponentMemb4.userId) !== null && _call$getOpponentMemb3 !== void 0 ? _call$getOpponentMemb3 : this.room.getMember(call.invitee).userId;\n var deviceMap = this.calls.get(opponentUserId);\n\n // Sanity check that this call is in fact in the map\n if ((deviceMap === null || deviceMap === void 0 ? void 0 : deviceMap.get(call.getOpponentDeviceId())) === call) {\n this.disposeCall(call, call.hangupReason);\n deviceMap.delete(call.getOpponentDeviceId());\n if (deviceMap.size === 0) this.calls.delete(opponentUserId);\n this.emit(GroupCallEvent.CallsChanged, this.calls);\n }\n });\n _defineProperty(this, \"onCallReplaced\", (prevCall, newCall) => {\n var opponentUserId = prevCall.getOpponentMember().userId;\n var deviceMap = this.calls.get(opponentUserId);\n if (deviceMap === undefined) {\n deviceMap = new Map();\n this.calls.set(opponentUserId, deviceMap);\n }\n prevCall.hangup(CallErrorCode.Replaced, false);\n this.initCall(newCall);\n deviceMap.set(prevCall.getOpponentDeviceId(), newCall);\n this.emit(GroupCallEvent.CallsChanged, this.calls);\n });\n _defineProperty(this, \"onActiveSpeakerLoop\", () => {\n var topAvg = undefined;\n var nextActiveSpeaker = undefined;\n for (var callFeed of this.userMediaFeeds) {\n if (callFeed.isLocal() && this.userMediaFeeds.length > 1) continue;\n var total = callFeed.speakingVolumeSamples.reduce((acc, volume) => acc + Math.max(volume, SPEAKING_THRESHOLD));\n var avg = total / callFeed.speakingVolumeSamples.length;\n if (!topAvg || avg > topAvg) {\n topAvg = avg;\n nextActiveSpeaker = callFeed;\n }\n }\n if (nextActiveSpeaker && this.activeSpeaker !== nextActiveSpeaker && topAvg && topAvg > SPEAKING_THRESHOLD) {\n this.activeSpeaker = nextActiveSpeaker;\n this.emit(GroupCallEvent.ActiveSpeakerChanged, this.activeSpeaker);\n }\n });\n _defineProperty(this, \"onRoomState\", () => this.updateParticipants());\n _defineProperty(this, \"onParticipantsChanged\", () => {\n // Re-run setTracksEnabled on all calls, so that participants that just\n // left get denied access to our media, and participants that just\n // joined get granted access\n this.forEachCall(call => {\n var expected = this.callExpected(call);\n for (var feed of call.getLocalFeeds()) {\n setTracksEnabled(feed.stream.getAudioTracks(), !feed.isAudioMuted() && expected);\n setTracksEnabled(feed.stream.getVideoTracks(), !feed.isVideoMuted() && expected);\n }\n });\n if (this.state === GroupCallState.Entered && !this.useLivekit) this.placeOutgoingCalls();\n\n // Update the participants stored in the stats object\n });\n _defineProperty(this, \"onStateChanged\", (newState, oldState) => {\n if (newState === GroupCallState.Entered || oldState === GroupCallState.Entered || newState === GroupCallState.Ended) {\n // We either entered, left, or ended the call\n this.updateParticipants();\n this.updateMemberState().catch(e => logger.error(\"GroupCall \".concat(this.groupCallId, \" onStateChanged() failed to update member state devices\\\"\"), e));\n }\n });\n _defineProperty(this, \"onLocalFeedsChanged\", () => {\n if (this.state === GroupCallState.Entered) {\n this.updateMemberState().catch(e => logger.error(\"GroupCall \".concat(this.groupCallId, \" onLocalFeedsChanged() failed to update member state feeds\"), e));\n }\n });\n this.reEmitter = new ReEmitter(this);\n this.groupCallId = groupCallId !== null && groupCallId !== void 0 ? groupCallId : genCallID();\n this._livekitServiceURL = livekitServiceURL;\n this.creationTs = (_room$currentState$ge = (_room$currentState$ge2 = room.currentState.getStateEvents(EventType.GroupCallPrefix, this.groupCallId)) === null || _room$currentState$ge2 === void 0 ? void 0 : _room$currentState$ge2.getTs()) !== null && _room$currentState$ge !== void 0 ? _room$currentState$ge : null;\n this.updateParticipants();\n room.on(RoomStateEvent.Update, this.onRoomState);\n this.on(GroupCallEvent.ParticipantsChanged, this.onParticipantsChanged);\n this.on(GroupCallEvent.GroupCallStateChanged, this.onStateChanged);\n this.on(GroupCallEvent.LocalScreenshareStateChanged, this.onLocalFeedsChanged);\n this.allowCallWithoutVideoAndAudio = !!isCallWithoutVideoAndAudio;\n }\n create() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.creationTs = Date.now();\n _this.client.groupCallEventHandler.groupCalls.set(_this.room.roomId, _this);\n _this.client.emit(GroupCallEventHandlerEvent.Outgoing, _this);\n yield _this.sendCallStateEvent();\n return _this;\n })();\n }\n sendCallStateEvent() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var groupCallState = {\n \"m.intent\": _this2.intent,\n \"m.type\": _this2.type,\n \"io.element.ptt\": _this2.isPtt,\n // TODO: Specify data-channels better\n \"dataChannelsEnabled\": _this2.dataChannelsEnabled,\n \"dataChannelOptions\": _this2.dataChannelsEnabled ? _this2.dataChannelOptions : undefined\n };\n if (_this2.livekitServiceURL) {\n groupCallState[\"io.element.livekit_service_url\"] = _this2.livekitServiceURL;\n }\n yield _this2.client.sendStateEvent(_this2.room.roomId, EventType.GroupCallPrefix, groupCallState, _this2.groupCallId);\n })();\n }\n get livekitServiceURL() {\n return this._livekitServiceURL;\n }\n updateLivekitServiceURL(newURL) {\n this._livekitServiceURL = newURL;\n return this.sendCallStateEvent();\n }\n /**\n * The group call's state.\n */\n get state() {\n return this._state;\n }\n set state(value) {\n var prevValue = this._state;\n if (value !== prevValue) {\n this._state = value;\n this.emit(GroupCallEvent.GroupCallStateChanged, value, prevValue);\n }\n }\n /**\n * The current participants in the call, as a map from members to device IDs\n * to participant info.\n */\n get participants() {\n return this._participants;\n }\n set participants(value) {\n var prevValue = this._participants;\n var participantStateEqual = (x, y) => x.sessionId === y.sessionId && x.screensharing === y.screensharing;\n var deviceMapsEqual = (x, y) => mapsEqual(x, y, participantStateEqual);\n\n // Only update if the map actually changed\n if (!mapsEqual(value, prevValue, deviceMapsEqual)) {\n this._participants = value;\n this.emit(GroupCallEvent.ParticipantsChanged, value);\n }\n }\n /**\n * The timestamp at which the call was created, or null if it has not yet\n * been created.\n */\n get creationTs() {\n return this._creationTs;\n }\n set creationTs(value) {\n this._creationTs = value;\n }\n /**\n * Whether the local device has entered this call via another session, such\n * as a widget.\n */\n get enteredViaAnotherSession() {\n return this._enteredViaAnotherSession;\n }\n set enteredViaAnotherSession(value) {\n this._enteredViaAnotherSession = value;\n this.updateParticipants();\n }\n\n /**\n * Executes the given callback on all calls in this group call.\n * @param f - The callback.\n */\n forEachCall(f) {\n for (var deviceMap of this.calls.values()) {\n for (var call of deviceMap.values()) f(call);\n }\n }\n getLocalFeeds() {\n var feeds = [];\n if (this.localCallFeed) feeds.push(this.localCallFeed);\n if (this.localScreenshareFeed) feeds.push(this.localScreenshareFeed);\n return feeds;\n }\n hasLocalParticipant() {\n var _this$participants$ge, _this$participants$ge2;\n return (_this$participants$ge = (_this$participants$ge2 = this.participants.get(this.room.getMember(this.client.getUserId()))) === null || _this$participants$ge2 === void 0 ? void 0 : _this$participants$ge2.has(this.client.getDeviceId())) !== null && _this$participants$ge !== void 0 ? _this$participants$ge : false;\n }\n\n /**\n * Determines whether the given call is one that we were expecting to exist\n * given our knowledge of who is participating in the group call.\n */\n callExpected(call) {\n var _this$participants$ge3;\n var userId = getCallUserId(call);\n var member = userId === null ? null : this.room.getMember(userId);\n var deviceId = call.getOpponentDeviceId();\n return member !== null && deviceId !== undefined && ((_this$participants$ge3 = this.participants.get(member)) === null || _this$participants$ge3 === void 0 ? void 0 : _this$participants$ge3.get(deviceId)) !== undefined;\n }\n initLocalCallFeed() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (_this3.useLivekit) {\n logger.info(\"Livekit group call: not starting local call feed.\");\n return;\n }\n if (_this3.state !== GroupCallState.LocalCallFeedUninitialized) {\n throw new Error(\"Cannot initialize local call feed in the \\\"\".concat(_this3.state, \"\\\" state.\"));\n }\n _this3.state = GroupCallState.InitializingLocalCallFeed;\n\n // wraps the real method to serialise calls, because we don't want to try starting\n // multiple call feeds at once\n if (_this3.initCallFeedPromise) return _this3.initCallFeedPromise;\n try {\n _this3.initCallFeedPromise = _this3.initLocalCallFeedInternal();\n yield _this3.initCallFeedPromise;\n } finally {\n _this3.initCallFeedPromise = undefined;\n }\n })();\n }\n initLocalCallFeedInternal() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n logger.log(\"GroupCall \".concat(_this4.groupCallId, \" initLocalCallFeedInternal() running\"));\n var stream;\n try {\n stream = yield _this4.client.getMediaHandler().getUserMediaStream(true, _this4.type === GroupCallType.Video);\n } catch (error) {\n // If is allowed to join a call without a media stream, then we\n // don't throw an error here. But we need an empty Local Feed to establish\n // a connection later.\n if (_this4.allowCallWithoutVideoAndAudio) {\n stream = new MediaStream();\n } else {\n _this4.state = GroupCallState.LocalCallFeedUninitialized;\n throw error;\n }\n }\n\n // The call could've been disposed while we were waiting, and could\n // also have been started back up again (hello, React 18) so if we're\n // still in this 'initializing' state, carry on, otherwise bail.\n if (_this4._state !== GroupCallState.InitializingLocalCallFeed) {\n _this4.client.getMediaHandler().stopUserMediaStream(stream);\n throw new Error(\"Group call disposed while gathering media stream\");\n }\n var callFeed = new CallFeed({\n client: _this4.client,\n roomId: _this4.room.roomId,\n userId: _this4.client.getUserId(),\n deviceId: _this4.client.getDeviceId(),\n stream,\n purpose: SDPStreamMetadataPurpose.Usermedia,\n audioMuted: _this4.initWithAudioMuted || stream.getAudioTracks().length === 0 || _this4.isPtt,\n videoMuted: _this4.initWithVideoMuted || stream.getVideoTracks().length === 0\n });\n setTracksEnabled(stream.getAudioTracks(), !callFeed.isAudioMuted());\n setTracksEnabled(stream.getVideoTracks(), !callFeed.isVideoMuted());\n _this4.localCallFeed = callFeed;\n _this4.addUserMediaFeed(callFeed);\n _this4.state = GroupCallState.LocalCallFeedInitialized;\n })();\n }\n updateLocalUsermediaStream(stream) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n if (_this5.localCallFeed) {\n var oldStream = _this5.localCallFeed.stream;\n _this5.localCallFeed.setNewStream(stream);\n var micShouldBeMuted = _this5.localCallFeed.isAudioMuted();\n var vidShouldBeMuted = _this5.localCallFeed.isVideoMuted();\n logger.log(\"GroupCall \".concat(_this5.groupCallId, \" updateLocalUsermediaStream() (oldStreamId=\").concat(oldStream.id, \", newStreamId=\").concat(stream.id, \", micShouldBeMuted=\").concat(micShouldBeMuted, \", vidShouldBeMuted=\").concat(vidShouldBeMuted, \")\"));\n setTracksEnabled(stream.getAudioTracks(), !micShouldBeMuted);\n setTracksEnabled(stream.getVideoTracks(), !vidShouldBeMuted);\n _this5.client.getMediaHandler().stopUserMediaStream(oldStream);\n }\n })();\n }\n enter() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (_this6.state === GroupCallState.LocalCallFeedUninitialized) {\n yield _this6.initLocalCallFeed();\n } else if (_this6.state !== GroupCallState.LocalCallFeedInitialized) {\n throw new Error(\"Cannot enter call in the \\\"\".concat(_this6.state, \"\\\" state\"));\n }\n logger.log(\"GroupCall \".concat(_this6.groupCallId, \" enter() running\"));\n _this6.state = GroupCallState.Entered;\n _this6.client.on(CallEventHandlerEvent.Incoming, _this6.onIncomingCall);\n for (var call of _this6.client.callEventHandler.calls.values()) {\n _this6.onIncomingCall(call);\n }\n if (!_this6.useLivekit) {\n _this6.retryCallLoopInterval = setInterval(_this6.onRetryCallLoop, _this6.retryCallInterval);\n _this6.activeSpeaker = undefined;\n _this6.onActiveSpeakerLoop();\n _this6.activeSpeakerLoopInterval = setInterval(_this6.onActiveSpeakerLoop, _this6.activeSpeakerInterval);\n }\n })();\n }\n dispose() {\n var _this$stats;\n if (this.localCallFeed) {\n this.removeUserMediaFeed(this.localCallFeed);\n this.localCallFeed = undefined;\n }\n if (this.localScreenshareFeed) {\n this.client.getMediaHandler().stopScreensharingStream(this.localScreenshareFeed.stream);\n this.removeScreenshareFeed(this.localScreenshareFeed);\n this.localScreenshareFeed = undefined;\n this.localDesktopCapturerSourceId = undefined;\n }\n this.client.getMediaHandler().stopAllStreams();\n if (this.transmitTimer !== null) {\n clearTimeout(this.transmitTimer);\n this.transmitTimer = null;\n }\n if (this.retryCallLoopInterval !== undefined) {\n clearInterval(this.retryCallLoopInterval);\n this.retryCallLoopInterval = undefined;\n }\n if (this.participantsExpirationTimer !== null) {\n clearTimeout(this.participantsExpirationTimer);\n this.participantsExpirationTimer = null;\n }\n if (this.state !== GroupCallState.Entered) {\n return;\n }\n this.forEachCall(call => call.hangup(CallErrorCode.UserHangup, false));\n this.activeSpeaker = undefined;\n clearInterval(this.activeSpeakerLoopInterval);\n this.retryCallCounts.clear();\n clearInterval(this.retryCallLoopInterval);\n this.client.removeListener(CallEventHandlerEvent.Incoming, this.onIncomingCall);\n (_this$stats = this.stats) === null || _this$stats === void 0 || _this$stats.stop();\n }\n leave() {\n this.dispose();\n this.state = GroupCallState.LocalCallFeedUninitialized;\n }\n terminate() {\n var _arguments = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var emitStateEvent = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : true;\n _this7.dispose();\n _this7.room.off(RoomStateEvent.Update, _this7.onRoomState);\n _this7.client.groupCallEventHandler.groupCalls.delete(_this7.room.roomId);\n _this7.client.emit(GroupCallEventHandlerEvent.Ended, _this7);\n _this7.state = GroupCallState.Ended;\n if (emitStateEvent) {\n var existingStateEvent = _this7.room.currentState.getStateEvents(EventType.GroupCallPrefix, _this7.groupCallId);\n yield _this7.client.sendStateEvent(_this7.room.roomId, EventType.GroupCallPrefix, _objectSpread(_objectSpread({}, existingStateEvent.getContent()), {}, {\n \"m.terminated\": GroupCallTerminationReason.CallEnded\n }), _this7.groupCallId);\n }\n })();\n }\n\n /*\n * Local Usermedia\n */\n\n isLocalVideoMuted() {\n if (this.localCallFeed) {\n return this.localCallFeed.isVideoMuted();\n }\n return true;\n }\n isMicrophoneMuted() {\n if (this.localCallFeed) {\n return this.localCallFeed.isAudioMuted();\n }\n return true;\n }\n\n /**\n * Sets the mute state of the local participants's microphone.\n * @param muted - Whether to mute the microphone\n * @returns Whether muting/unmuting was successful\n */\n setMicrophoneMuted(muted) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n // hasAudioDevice can block indefinitely if the window has lost focus,\n // and it doesn't make much sense to keep a device from being muted, so\n // we always allow muted = true changes to go through\n if (!muted && !(yield _this8.client.getMediaHandler().hasAudioDevice())) {\n return false;\n }\n var sendUpdatesBefore = !muted && _this8.isPtt;\n\n // set a timer for the maximum transmit time on PTT calls\n if (_this8.isPtt) {\n // Set or clear the max transmit timer\n if (!muted && _this8.isMicrophoneMuted()) {\n _this8.transmitTimer = setTimeout(() => {\n _this8.setMicrophoneMuted(true);\n }, _this8.pttMaxTransmitTime);\n } else if (muted && !_this8.isMicrophoneMuted()) {\n if (_this8.transmitTimer !== null) clearTimeout(_this8.transmitTimer);\n _this8.transmitTimer = null;\n }\n }\n _this8.forEachCall(call => {\n var _call$localUsermediaF;\n return (_call$localUsermediaF = call.localUsermediaFeed) === null || _call$localUsermediaF === void 0 ? void 0 : _call$localUsermediaF.setAudioVideoMuted(muted, null);\n });\n var sendUpdates = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(function* () {\n var updates = [];\n _this8.forEachCall(call => updates.push(call.sendMetadataUpdate()));\n yield Promise.all(updates).catch(e => logger.info(\"GroupCall \".concat(_this8.groupCallId, \" setMicrophoneMuted() failed to send some metadata updates\"), e));\n });\n return function sendUpdates() {\n return _ref7.apply(this, arguments);\n };\n }();\n if (sendUpdatesBefore) yield sendUpdates();\n if (_this8.localCallFeed) {\n logger.log(\"GroupCall \".concat(_this8.groupCallId, \" setMicrophoneMuted() (streamId=\").concat(_this8.localCallFeed.stream.id, \", muted=\").concat(muted, \")\"));\n var hasPermission = yield _this8.checkAudioPermissionIfNecessary(muted);\n if (!hasPermission) {\n return false;\n }\n _this8.localCallFeed.setAudioVideoMuted(muted, null);\n // I don't believe its actually necessary to enable these tracks: they\n // are the one on the GroupCall's own CallFeed and are cloned before being\n // given to any of the actual calls, so these tracks don't actually go\n // anywhere. Let's do it anyway to avoid confusion.\n setTracksEnabled(_this8.localCallFeed.stream.getAudioTracks(), !muted);\n } else {\n logger.log(\"GroupCall \".concat(_this8.groupCallId, \" setMicrophoneMuted() no stream muted (muted=\").concat(muted, \")\"));\n _this8.initWithAudioMuted = muted;\n }\n _this8.forEachCall(call => setTracksEnabled(call.localUsermediaFeed.stream.getAudioTracks(), !muted && _this8.callExpected(call)));\n _this8.emit(GroupCallEvent.LocalMuteStateChanged, muted, _this8.isLocalVideoMuted());\n if (!sendUpdatesBefore) yield sendUpdates();\n return true;\n })();\n }\n\n /**\n * If we allow entering a call without a camera and without video, it can happen that the access rights to the\n * devices have not yet been queried. If a stream does not yet have an audio track, we assume that the rights have\n * not yet been checked.\n *\n * `this.client.getMediaHandler().getUserMediaStream` clones the current stream, so it only wanted to be called when\n * not Audio Track exists.\n * As such, this is a compromise, because, the access rights should always be queried before the call.\n */\n checkAudioPermissionIfNecessary(muted) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n // We needed this here to avoid an error in case user join a call without a device.\n try {\n if (!muted && _this9.localCallFeed && !_this9.localCallFeed.hasAudioTrack) {\n var stream = yield _this9.client.getMediaHandler().getUserMediaStream(true, !_this9.localCallFeed.isVideoMuted());\n if ((stream === null || stream === void 0 ? void 0 : stream.getTracks().length) === 0) {\n // if case permission denied to get a stream stop this here\n /* istanbul ignore next */\n logger.log(\"GroupCall \".concat(_this9.groupCallId, \" setMicrophoneMuted() no device to receive local stream, muted=\").concat(muted));\n return false;\n }\n }\n } catch (_unused) {\n /* istanbul ignore next */\n logger.log(\"GroupCall \".concat(_this9.groupCallId, \" setMicrophoneMuted() no device or permission to receive local stream, muted=\").concat(muted));\n return false;\n }\n return true;\n })();\n }\n\n /**\n * Sets the mute state of the local participants's video.\n * @param muted - Whether to mute the video\n * @returns Whether muting/unmuting was successful\n */\n setLocalVideoMuted(muted) {\n var _this0 = this;\n return _asyncToGenerator(function* () {\n // hasAudioDevice can block indefinitely if the window has lost focus,\n // and it doesn't make much sense to keep a device from being muted, so\n // we always allow muted = true changes to go through\n if (!muted && !(yield _this0.client.getMediaHandler().hasVideoDevice())) {\n return false;\n }\n if (_this0.localCallFeed) {\n /* istanbul ignore next */\n logger.log(\"GroupCall \".concat(_this0.groupCallId, \" setLocalVideoMuted() (stream=\").concat(_this0.localCallFeed.stream.id, \", muted=\").concat(muted, \")\"));\n try {\n var stream = yield _this0.client.getMediaHandler().getUserMediaStream(true, !muted);\n yield _this0.updateLocalUsermediaStream(stream);\n _this0.localCallFeed.setAudioVideoMuted(null, muted);\n setTracksEnabled(_this0.localCallFeed.stream.getVideoTracks(), !muted);\n } catch (_unused2) {\n // No permission to video device\n /* istanbul ignore next */\n logger.log(\"GroupCall \".concat(_this0.groupCallId, \" setLocalVideoMuted() no device or permission to receive local stream, muted=\").concat(muted));\n return false;\n }\n } else {\n logger.log(\"GroupCall \".concat(_this0.groupCallId, \" setLocalVideoMuted() no stream muted (muted=\").concat(muted, \")\"));\n _this0.initWithVideoMuted = muted;\n }\n var updates = [];\n _this0.forEachCall(call => updates.push(call.setLocalVideoMuted(muted)));\n yield Promise.all(updates);\n\n // We setTracksEnabled again, independently from the call doing it\n // internally, since we might not be expecting the call\n _this0.forEachCall(call => setTracksEnabled(call.localUsermediaFeed.stream.getVideoTracks(), !muted && _this0.callExpected(call)));\n _this0.emit(GroupCallEvent.LocalMuteStateChanged, _this0.isMicrophoneMuted(), muted);\n return true;\n })();\n }\n setScreensharingEnabled(enabled) {\n var _arguments2 = arguments,\n _this1 = this;\n return _asyncToGenerator(function* () {\n var opts = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n if (enabled === _this1.isScreensharing()) {\n return enabled;\n }\n if (enabled) {\n try {\n logger.log(\"GroupCall \".concat(_this1.groupCallId, \" setScreensharingEnabled() is asking for screensharing permissions\"));\n var stream = yield _this1.client.getMediaHandler().getScreensharingStream(opts);\n var _loop = function* _loop(track) {\n var onTrackEnded = () => {\n _this1.setScreensharingEnabled(false);\n track.removeEventListener(\"ended\", onTrackEnded);\n };\n track.addEventListener(\"ended\", onTrackEnded);\n };\n for (var track of stream.getTracks()) {\n yield* _loop(track);\n }\n logger.log(\"GroupCall \".concat(_this1.groupCallId, \" setScreensharingEnabled() granted screensharing permissions. Setting screensharing enabled on all calls\"));\n _this1.localDesktopCapturerSourceId = opts.desktopCapturerSourceId;\n _this1.localScreenshareFeed = new CallFeed({\n client: _this1.client,\n roomId: _this1.room.roomId,\n userId: _this1.client.getUserId(),\n deviceId: _this1.client.getDeviceId(),\n stream,\n purpose: SDPStreamMetadataPurpose.Screenshare,\n audioMuted: false,\n videoMuted: false\n });\n _this1.addScreenshareFeed(_this1.localScreenshareFeed);\n _this1.emit(GroupCallEvent.LocalScreenshareStateChanged, true, _this1.localScreenshareFeed, _this1.localDesktopCapturerSourceId);\n\n // TODO: handle errors\n _this1.forEachCall(call => call.pushLocalFeed(_this1.localScreenshareFeed.clone()));\n return true;\n } catch (error) {\n if (opts.throwOnFail) throw error;\n logger.error(\"GroupCall \".concat(_this1.groupCallId, \" setScreensharingEnabled() enabling screensharing error\"), error);\n _this1.emit(GroupCallEvent.Error, new GroupCallError(GroupCallErrorCode.NoUserMedia, \"Failed to get screen-sharing stream: \", error));\n return false;\n }\n } else {\n _this1.forEachCall(call => {\n if (call.localScreensharingFeed) call.removeLocalFeed(call.localScreensharingFeed);\n });\n _this1.client.getMediaHandler().stopScreensharingStream(_this1.localScreenshareFeed.stream);\n _this1.removeScreenshareFeed(_this1.localScreenshareFeed);\n _this1.localScreenshareFeed = undefined;\n _this1.localDesktopCapturerSourceId = undefined;\n _this1.emit(GroupCallEvent.LocalScreenshareStateChanged, false, undefined, undefined);\n return false;\n }\n })();\n }\n isScreensharing() {\n return !!this.localScreenshareFeed;\n }\n /**\n * Determines whether a given participant expects us to call them (versus\n * them calling us).\n * @param userId - The participant's user ID.\n * @param deviceId - The participant's device ID.\n * @returns Whether we need to place an outgoing call to the participant.\n */\n wantsOutgoingCall(userId, deviceId) {\n var localUserId = this.client.getUserId();\n var localDeviceId = this.client.getDeviceId();\n return (\n // If a user's ID is less than our own, they'll call us\n userId >= localUserId && (\n // If this is another one of our devices, compare device IDs to tell whether it'll call us\n userId !== localUserId || deviceId > localDeviceId)\n );\n }\n\n /**\n * Places calls to all participants that we're responsible for calling.\n */\n placeOutgoingCalls() {\n var _this10 = this;\n var callsChanged = false;\n var _loop2 = function _loop2() {\n var _this10$calls$get;\n _ref9 = _slicedToArray(_ref0, 2);\n var userId = _ref9[0].userId;\n var participantMap = _ref9[1];\n var callMap = (_this10$calls$get = _this10.calls.get(userId)) !== null && _this10$calls$get !== void 0 ? _this10$calls$get : new Map();\n var _loop3 = function _loop3() {\n _ref10 = _slicedToArray(_ref11, 2);\n var deviceId = _ref10[0];\n var participant = _ref10[1];\n var prevCall = callMap.get(deviceId);\n if ((prevCall === null || prevCall === void 0 ? void 0 : prevCall.getOpponentSessionId()) !== participant.sessionId && _this10.wantsOutgoingCall(userId, deviceId)) {\n callsChanged = true;\n if (prevCall !== undefined) {\n logger.debug(\"GroupCall \".concat(_this10.groupCallId, \" placeOutgoingCalls() replacing call (userId=\").concat(userId, \", deviceId=\").concat(deviceId, \", callId=\").concat(prevCall.callId, \")\"));\n prevCall.hangup(CallErrorCode.NewSession, false);\n }\n var newCall = createNewMatrixCall(_this10.client, _this10.room.roomId, {\n invitee: userId,\n opponentDeviceId: deviceId,\n opponentSessionId: participant.sessionId,\n groupCallId: _this10.groupCallId\n });\n if (newCall === null) {\n logger.error(\"GroupCall \".concat(_this10.groupCallId, \" placeOutgoingCalls() failed to create call (userId=\").concat(userId, \", device=\").concat(deviceId, \")\"));\n callMap.delete(deviceId);\n } else {\n _this10.initCall(newCall);\n callMap.set(deviceId, newCall);\n logger.debug(\"GroupCall \".concat(_this10.groupCallId, \" placeOutgoingCalls() placing call (userId=\").concat(userId, \", deviceId=\").concat(deviceId, \", sessionId=\").concat(participant.sessionId, \")\"));\n newCall.placeCallWithCallFeeds(_this10.getLocalFeeds().map(feed => feed.clone()), participant.screensharing).then(() => {\n if (_this10.dataChannelsEnabled) {\n newCall.createDataChannel(\"datachannel\", _this10.dataChannelOptions);\n }\n }).catch(e => {\n logger.warn(\"GroupCall \".concat(_this10.groupCallId, \" placeOutgoingCalls() failed to place call (userId=\").concat(userId, \")\"), e);\n if (e instanceof CallError && e.code === GroupCallErrorCode.UnknownDevice) {\n _this10.emit(GroupCallEvent.Error, e);\n } else {\n _this10.emit(GroupCallEvent.Error, new GroupCallError(GroupCallErrorCode.PlaceCallFailed, \"Failed to place call to \".concat(userId)));\n }\n newCall.hangup(CallErrorCode.SignallingFailed, false);\n if (callMap.get(deviceId) === newCall) callMap.delete(deviceId);\n });\n }\n }\n },\n _ref10;\n for (var _ref11 of participantMap) {\n _loop3();\n }\n if (callMap.size > 0) {\n _this10.calls.set(userId, callMap);\n } else {\n _this10.calls.delete(userId);\n }\n },\n _ref9;\n for (var _ref0 of this.participants) {\n _loop2();\n }\n if (callsChanged) this.emit(GroupCallEvent.CallsChanged, this.calls);\n }\n\n /*\n * Room Member State\n */\n\n getMemberStateEvents(userId) {\n return userId === undefined ? this.room.currentState.getStateEvents(EventType.GroupCallMemberPrefix) : this.room.currentState.getStateEvents(EventType.GroupCallMemberPrefix, userId);\n }\n initCall(call) {\n var opponentMemberId = getCallUserId(call);\n if (!opponentMemberId) {\n throw new Error(\"Cannot init call without user id\");\n }\n var onCallFeedsChanged = () => this.onCallFeedsChanged(call);\n var onCallStateChanged = (state, oldState) => this.onCallStateChanged(call, state, oldState);\n var onCallHangup = this.onCallHangup;\n var onCallReplaced = newCall => this.onCallReplaced(call, newCall);\n var deviceMap = this.callHandlers.get(opponentMemberId);\n if (deviceMap === undefined) {\n deviceMap = new Map();\n this.callHandlers.set(opponentMemberId, deviceMap);\n }\n deviceMap.set(call.getOpponentDeviceId(), {\n onCallFeedsChanged,\n onCallStateChanged,\n onCallHangup,\n onCallReplaced\n });\n call.on(CallEvent.FeedsChanged, onCallFeedsChanged);\n call.on(CallEvent.State, onCallStateChanged);\n call.on(CallEvent.Hangup, onCallHangup);\n call.on(CallEvent.Replaced, onCallReplaced);\n call.isPtt = this.isPtt;\n this.reEmitter.reEmit(call, Object.values(CallEvent));\n call.initStats(this.getGroupCallStats());\n onCallFeedsChanged();\n }\n disposeCall(call, hangupReason) {\n var opponentMemberId = getCallUserId(call);\n var opponentDeviceId = call.getOpponentDeviceId();\n if (!opponentMemberId) {\n throw new Error(\"Cannot dispose call without user id\");\n }\n var deviceMap = this.callHandlers.get(opponentMemberId);\n var _ref12 = deviceMap.get(opponentDeviceId),\n onCallFeedsChanged = _ref12.onCallFeedsChanged,\n onCallStateChanged = _ref12.onCallStateChanged,\n onCallHangup = _ref12.onCallHangup,\n onCallReplaced = _ref12.onCallReplaced;\n call.removeListener(CallEvent.FeedsChanged, onCallFeedsChanged);\n call.removeListener(CallEvent.State, onCallStateChanged);\n call.removeListener(CallEvent.Hangup, onCallHangup);\n call.removeListener(CallEvent.Replaced, onCallReplaced);\n deviceMap.delete(opponentMemberId);\n if (deviceMap.size === 0) this.callHandlers.delete(opponentMemberId);\n if (call.hangupReason === CallErrorCode.Replaced) {\n return;\n }\n var usermediaFeed = this.getUserMediaFeed(opponentMemberId, opponentDeviceId);\n if (usermediaFeed) {\n this.removeUserMediaFeed(usermediaFeed);\n }\n var screenshareFeed = this.getScreenshareFeed(opponentMemberId, opponentDeviceId);\n if (screenshareFeed) {\n this.removeScreenshareFeed(screenshareFeed);\n }\n }\n /*\n * UserMedia CallFeed Event Handlers\n */\n\n getUserMediaFeed(userId, deviceId) {\n return this.userMediaFeeds.find(f => f.userId === userId && f.deviceId === deviceId);\n }\n addUserMediaFeed(callFeed) {\n this.userMediaFeeds.push(callFeed);\n callFeed.measureVolumeActivity(true);\n this.emit(GroupCallEvent.UserMediaFeedsChanged, this.userMediaFeeds);\n }\n replaceUserMediaFeed(existingFeed, replacementFeed) {\n var feedIndex = this.userMediaFeeds.findIndex(f => f.userId === existingFeed.userId && f.deviceId === existingFeed.deviceId);\n if (feedIndex === -1) {\n throw new Error(\"Couldn't find user media feed to replace\");\n }\n this.userMediaFeeds.splice(feedIndex, 1, replacementFeed);\n existingFeed.dispose();\n replacementFeed.measureVolumeActivity(true);\n this.emit(GroupCallEvent.UserMediaFeedsChanged, this.userMediaFeeds);\n }\n removeUserMediaFeed(callFeed) {\n var feedIndex = this.userMediaFeeds.findIndex(f => f.userId === callFeed.userId && f.deviceId === callFeed.deviceId);\n if (feedIndex === -1) {\n throw new Error(\"Couldn't find user media feed to remove\");\n }\n this.userMediaFeeds.splice(feedIndex, 1);\n callFeed.dispose();\n this.emit(GroupCallEvent.UserMediaFeedsChanged, this.userMediaFeeds);\n if (this.activeSpeaker === callFeed) {\n this.activeSpeaker = this.userMediaFeeds[0];\n this.emit(GroupCallEvent.ActiveSpeakerChanged, this.activeSpeaker);\n }\n }\n /*\n * Screenshare Call Feed Event Handlers\n */\n\n getScreenshareFeed(userId, deviceId) {\n return this.screenshareFeeds.find(f => f.userId === userId && f.deviceId === deviceId);\n }\n addScreenshareFeed(callFeed) {\n this.screenshareFeeds.push(callFeed);\n this.emit(GroupCallEvent.ScreenshareFeedsChanged, this.screenshareFeeds);\n }\n replaceScreenshareFeed(existingFeed, replacementFeed) {\n var feedIndex = this.screenshareFeeds.findIndex(f => f.userId === existingFeed.userId && f.deviceId === existingFeed.deviceId);\n if (feedIndex === -1) {\n throw new Error(\"Couldn't find screenshare feed to replace\");\n }\n this.screenshareFeeds.splice(feedIndex, 1, replacementFeed);\n existingFeed.dispose();\n this.emit(GroupCallEvent.ScreenshareFeedsChanged, this.screenshareFeeds);\n }\n removeScreenshareFeed(callFeed) {\n var feedIndex = this.screenshareFeeds.findIndex(f => f.userId === callFeed.userId && f.deviceId === callFeed.deviceId);\n if (feedIndex === -1) {\n throw new Error(\"Couldn't find screenshare feed to remove\");\n }\n this.screenshareFeeds.splice(feedIndex, 1);\n callFeed.dispose();\n this.emit(GroupCallEvent.ScreenshareFeedsChanged, this.screenshareFeeds);\n }\n\n /**\n * Recalculates and updates the participant map to match the room state.\n */\n updateParticipants() {\n var localMember = this.room.getMember(this.client.getSafeUserId());\n if (!localMember) {\n // The client hasn't fetched enough of the room state to get our own member\n // event. This probably shouldn't happen, but sanity check & exit for now.\n logger.warn(\"GroupCall \".concat(this.groupCallId, \" updateParticipants() tried to update participants before local room member is available\"));\n return;\n }\n if (this.participantsExpirationTimer !== null) {\n clearTimeout(this.participantsExpirationTimer);\n this.participantsExpirationTimer = null;\n }\n if (this.state === GroupCallState.Ended) {\n this.participants = new Map();\n return;\n }\n var participants = new Map();\n var now = Date.now();\n var entered = this.state === GroupCallState.Entered || this.enteredViaAnotherSession;\n var nextExpiration = Infinity;\n for (var e of this.getMemberStateEvents()) {\n var member = this.room.getMember(e.getStateKey());\n var content = e.getContent();\n var calls = Array.isArray(content[\"m.calls\"]) ? content[\"m.calls\"] : [];\n var call = calls.find(call => call[\"m.call_id\"] === this.groupCallId);\n var devices = Array.isArray(call === null || call === void 0 ? void 0 : call[\"m.devices\"]) ? call[\"m.devices\"] : [];\n\n // Filter out invalid and expired devices\n var validDevices = devices.filter(d => typeof d.device_id === \"string\" && typeof d.session_id === \"string\" && typeof d.expires_ts === \"number\" && d.expires_ts > now && Array.isArray(d.feeds));\n\n // Apply local echo for the unentered case\n if (!entered && (member === null || member === void 0 ? void 0 : member.userId) === this.client.getUserId()) {\n validDevices = validDevices.filter(d => d.device_id !== this.client.getDeviceId());\n }\n\n // Must have a connected device and be joined to the room\n if (validDevices.length > 0 && (member === null || member === void 0 ? void 0 : member.membership) === KnownMembership.Join) {\n var deviceMap = new Map();\n participants.set(member, deviceMap);\n for (var d of validDevices) {\n deviceMap.set(d.device_id, {\n sessionId: d.session_id,\n screensharing: d.feeds.some(f => f.purpose === SDPStreamMetadataPurpose.Screenshare)\n });\n if (d.expires_ts < nextExpiration) nextExpiration = d.expires_ts;\n }\n }\n }\n\n // Apply local echo for the entered case\n if (entered) {\n var _deviceMap = participants.get(localMember);\n if (_deviceMap === undefined) {\n _deviceMap = new Map();\n participants.set(localMember, _deviceMap);\n }\n if (!_deviceMap.has(this.client.getDeviceId())) {\n _deviceMap.set(this.client.getDeviceId(), {\n sessionId: this.client.getSessionId(),\n screensharing: this.getLocalFeeds().some(f => f.purpose === SDPStreamMetadataPurpose.Screenshare)\n });\n }\n }\n this.participants = participants;\n if (nextExpiration < Infinity) {\n this.participantsExpirationTimer = setTimeout(() => this.updateParticipants(), nextExpiration - now);\n }\n }\n\n /**\n * Updates the local user's member state with the devices returned by the given function.\n * @param fn - A function from the current devices to the new devices. If it\n * returns null, the update will be skipped.\n * @param keepAlive - Whether the request should outlive the window.\n */\n updateDevices(fn) {\n var _arguments3 = arguments,\n _this11 = this;\n return _asyncToGenerator(function* () {\n var _event$getContent;\n var keepAlive = _arguments3.length > 1 && _arguments3[1] !== undefined ? _arguments3[1] : false;\n var now = Date.now();\n var localUserId = _this11.client.getUserId();\n var event = _this11.getMemberStateEvents(localUserId);\n var content = (_event$getContent = event === null || event === void 0 ? void 0 : event.getContent()) !== null && _event$getContent !== void 0 ? _event$getContent : {};\n var calls = Array.isArray(content[\"m.calls\"]) ? content[\"m.calls\"] : [];\n var call = null;\n var otherCalls = [];\n for (var c of calls) {\n if (c[\"m.call_id\"] === _this11.groupCallId) {\n call = c;\n } else {\n otherCalls.push(c);\n }\n }\n if (call === null) call = {};\n var devices = Array.isArray(call[\"m.devices\"]) ? call[\"m.devices\"] : [];\n\n // Filter out invalid and expired devices\n var validDevices = devices.filter(d => typeof d.device_id === \"string\" && typeof d.session_id === \"string\" && typeof d.expires_ts === \"number\" && d.expires_ts > now && Array.isArray(d.feeds));\n var newDevices = fn(validDevices);\n if (newDevices === null) return;\n var newCalls = [...otherCalls];\n if (newDevices.length > 0) {\n newCalls.push(_objectSpread(_objectSpread({}, call), {}, {\n \"m.call_id\": _this11.groupCallId,\n \"m.devices\": newDevices\n }));\n }\n var newContent = {\n \"m.calls\": newCalls\n };\n yield _this11.client.sendStateEvent(_this11.room.roomId, EventType.GroupCallMemberPrefix, newContent, localUserId, {\n keepAlive\n });\n })();\n }\n addDeviceToMemberState() {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n yield _this12.updateDevices(devices => [...devices.filter(d => d.device_id !== _this12.client.getDeviceId()), {\n device_id: _this12.client.getDeviceId(),\n session_id: _this12.client.getSessionId(),\n expires_ts: Date.now() + DEVICE_TIMEOUT,\n feeds: _this12.getLocalFeeds().map(feed => ({\n purpose: feed.purpose\n }))\n // TODO: Add data channels\n }]);\n })();\n }\n updateMemberState() {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n // Clear the old update interval before proceeding\n if (_this13.resendMemberStateTimer !== null) {\n clearInterval(_this13.resendMemberStateTimer);\n _this13.resendMemberStateTimer = null;\n }\n if (_this13.state === GroupCallState.Entered) {\n // Add the local device\n yield _this13.addDeviceToMemberState();\n\n // Resend the state event every so often so it doesn't become stale\n _this13.resendMemberStateTimer = setInterval(/*#__PURE__*/_asyncToGenerator(function* () {\n logger.log(\"GroupCall \".concat(_this13.groupCallId, \" updateMemberState() resending call member state\\\"\"));\n try {\n yield _this13.addDeviceToMemberState();\n } catch (e) {\n logger.error(\"GroupCall \".concat(_this13.groupCallId, \" updateMemberState() failed to resend call member state\"), e);\n }\n }), DEVICE_TIMEOUT * 3 / 4);\n } else {\n // Remove the local device\n yield _this13.updateDevices(devices => devices.filter(d => d.device_id !== _this13.client.getDeviceId()), true);\n }\n })();\n }\n\n /**\n * Cleans up our member state by filtering out logged out devices, inactive\n * devices, and our own device (if we know we haven't entered).\n */\n cleanMemberState() {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n var _yield$_this14$client = yield _this14.client.getDevices(),\n myDevices = _yield$_this14$client.devices;\n var deviceMap = new Map(myDevices.map(d => [d.device_id, d]));\n\n // updateDevices takes care of filtering out inactive devices for us\n yield _this14.updateDevices(devices => {\n var newDevices = devices.filter(d => {\n var device = deviceMap.get(d.device_id);\n return (device === null || device === void 0 ? void 0 : device.last_seen_ts) !== undefined && !(d.device_id === _this14.client.getDeviceId() && _this14.state !== GroupCallState.Entered && !_this14.enteredViaAnotherSession);\n });\n\n // Skip the update if the devices are unchanged\n return newDevices.length === devices.length ? null : newDevices;\n });\n })();\n }\n getGroupCallStats() {\n if (this.stats === undefined) {\n var userID = this.client.getUserId() || \"unknown\";\n this.stats = new GroupCallStats(this.groupCallId, userID, this.statsCollectIntervalTime);\n this.stats.reports.on(StatsReport.CONNECTION_STATS, this.onConnectionStats);\n this.stats.reports.on(StatsReport.BYTE_SENT_STATS, this.onByteSentStats);\n this.stats.reports.on(StatsReport.SUMMARY_STATS, this.onSummaryStats);\n this.stats.reports.on(StatsReport.CALL_FEED_REPORT, this.onCallFeedReport);\n }\n return this.stats;\n }\n setGroupCallStatsInterval(interval) {\n this.statsCollectIntervalTime = interval;\n if (this.stats !== undefined) {\n this.stats.stop();\n this.stats.setInterval(interval);\n if (interval > 0) {\n this.stats.start();\n }\n }\n }\n}\n//# sourceMappingURL=groupCall.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2015, 2016 OpenMarket Ltd\nCopyright 2017 New Vector Ltd\nCopyright 2019, 2020 The Matrix.org Foundation C.I.C.\nCopyright 2021 - 2022 Šimon Brandner <simon.bra.ag@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link createNewMatrixCall} for the public API.\n */\n\nimport { parse as parseSdp, write as writeSdp } from \"sdp-transform\";\nimport { logger } from \"../logger.js\";\nimport { checkObjectHasKeys, isNullOrUndefined, recursivelyAssign } from \"../utils.js\";\nimport { EventType, ToDeviceMessageId } from \"../@types/event.js\";\nimport { secureRandomString } from \"../randomstring.js\";\nimport { SDPStreamMetadataPurpose, SDPStreamMetadataKey } from \"./callEventTypes.js\";\nimport { CallFeed } from \"./callFeed.js\";\nimport { EventEmitterEvents, TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { GroupCallUnknownDeviceError } from \"./groupCall.js\";\nimport { MatrixError } from \"../http-api/index.js\";\nvar MediaType = /*#__PURE__*/function (MediaType) {\n MediaType[\"AUDIO\"] = \"audio\";\n MediaType[\"VIDEO\"] = \"video\";\n return MediaType;\n}(MediaType || {});\nvar CodecName = /*#__PURE__*/function (CodecName) {\n CodecName[\"OPUS\"] = \"opus\"; // add more as needed\n return CodecName;\n}(CodecName || {}); // Used internally to specify modifications to codec parameters in SDP\nexport var CallState = /*#__PURE__*/function (CallState) {\n CallState[\"Fledgling\"] = \"fledgling\";\n CallState[\"InviteSent\"] = \"invite_sent\";\n CallState[\"WaitLocalMedia\"] = \"wait_local_media\";\n CallState[\"CreateOffer\"] = \"create_offer\";\n CallState[\"CreateAnswer\"] = \"create_answer\";\n CallState[\"Connecting\"] = \"connecting\";\n CallState[\"Connected\"] = \"connected\";\n CallState[\"Ringing\"] = \"ringing\";\n CallState[\"Ended\"] = \"ended\";\n return CallState;\n}({});\nexport var CallType = /*#__PURE__*/function (CallType) {\n CallType[\"Voice\"] = \"voice\";\n CallType[\"Video\"] = \"video\";\n return CallType;\n}({});\nexport var CallDirection = /*#__PURE__*/function (CallDirection) {\n CallDirection[\"Inbound\"] = \"inbound\";\n CallDirection[\"Outbound\"] = \"outbound\";\n return CallDirection;\n}({});\nexport var CallParty = /*#__PURE__*/function (CallParty) {\n CallParty[\"Local\"] = \"local\";\n CallParty[\"Remote\"] = \"remote\";\n return CallParty;\n}({});\nexport var CallEvent = /*#__PURE__*/function (CallEvent) {\n CallEvent[\"Hangup\"] = \"hangup\";\n CallEvent[\"State\"] = \"state\";\n CallEvent[\"Error\"] = \"error\";\n CallEvent[\"Replaced\"] = \"replaced\";\n // The value of isLocalOnHold() has changed\n CallEvent[\"LocalHoldUnhold\"] = \"local_hold_unhold\";\n // The value of isRemoteOnHold() has changed\n CallEvent[\"RemoteHoldUnhold\"] = \"remote_hold_unhold\";\n // backwards compat alias for LocalHoldUnhold: remove in a major version bump\n CallEvent[\"HoldUnhold\"] = \"hold_unhold\";\n // Feeds have changed\n CallEvent[\"FeedsChanged\"] = \"feeds_changed\";\n CallEvent[\"AssertedIdentityChanged\"] = \"asserted_identity_changed\";\n CallEvent[\"LengthChanged\"] = \"length_changed\";\n CallEvent[\"DataChannel\"] = \"datachannel\";\n CallEvent[\"SendVoipEvent\"] = \"send_voip_event\";\n // When the call instantiates its peer connection\n // For apps that want to access the underlying peer connection, eg for debugging\n CallEvent[\"PeerConnectionCreated\"] = \"peer_connection_created\";\n return CallEvent;\n}({});\nexport var CallErrorCode = /*#__PURE__*/function (CallErrorCode) {\n /** The user chose to end the call */\n CallErrorCode[\"UserHangup\"] = \"user_hangup\";\n /** An error code when the local client failed to create an offer. */\n CallErrorCode[\"LocalOfferFailed\"] = \"local_offer_failed\";\n /**\n * An error code when there is no local mic/camera to use. This may be because\n * the hardware isn't plugged in, or the user has explicitly denied access.\n */\n CallErrorCode[\"NoUserMedia\"] = \"no_user_media\";\n /**\n * Error code used when a call event failed to send\n * because unknown devices were present in the room\n */\n CallErrorCode[\"UnknownDevices\"] = \"unknown_devices\";\n /**\n * Error code used when we fail to send the invite\n * for some reason other than there being unknown devices\n */\n CallErrorCode[\"SendInvite\"] = \"send_invite\";\n /**\n * An answer could not be created\n */\n CallErrorCode[\"CreateAnswer\"] = \"create_answer\";\n /**\n * An offer could not be created\n */\n CallErrorCode[\"CreateOffer\"] = \"create_offer\";\n /**\n * Error code used when we fail to send the answer\n * for some reason other than there being unknown devices\n */\n CallErrorCode[\"SendAnswer\"] = \"send_answer\";\n /**\n * The session description from the other side could not be set\n */\n CallErrorCode[\"SetRemoteDescription\"] = \"set_remote_description\";\n /**\n * The session description from this side could not be set\n */\n CallErrorCode[\"SetLocalDescription\"] = \"set_local_description\";\n /**\n * A different device answered the call\n */\n CallErrorCode[\"AnsweredElsewhere\"] = \"answered_elsewhere\";\n /**\n * No media connection could be established to the other party\n */\n CallErrorCode[\"IceFailed\"] = \"ice_failed\";\n /**\n * The invite timed out whilst waiting for an answer\n */\n CallErrorCode[\"InviteTimeout\"] = \"invite_timeout\";\n /**\n * The call was replaced by another call\n */\n CallErrorCode[\"Replaced\"] = \"replaced\";\n /**\n * Signalling for the call could not be sent (other than the initial invite)\n */\n CallErrorCode[\"SignallingFailed\"] = \"signalling_timeout\";\n /**\n * The remote party is busy\n */\n CallErrorCode[\"UserBusy\"] = \"user_busy\";\n /**\n * We transferred the call off to somewhere else\n */\n CallErrorCode[\"Transferred\"] = \"transferred\";\n /**\n * A call from the same user was found with a new session id\n */\n CallErrorCode[\"NewSession\"] = \"new_session\";\n return CallErrorCode;\n}({});\n\n/**\n * The version field that we set in m.call.* events\n */\nvar VOIP_PROTO_VERSION = \"1\";\n\n/** The fallback ICE server to use for STUN or TURN protocols. */\nexport var FALLBACK_ICE_SERVER = \"stun:turn.matrix.org\";\n\n/** The length of time a call can be ringing for. */\nvar CALL_TIMEOUT_MS = 60 * 1000; // ms\n/** The time after which we increment callLength */\nvar CALL_LENGTH_INTERVAL = 1000; // ms\n/** The time after which we end the call, if ICE got disconnected */\nvar ICE_DISCONNECTED_TIMEOUT = 30 * 1000; // ms\n/** The time after which we try a ICE restart, if ICE got disconnected */\nvar ICE_RECONNECTING_TIMEOUT = 2 * 1000; // ms\nexport class CallError extends Error {\n constructor(code, msg, err) {\n // Still don't think there's any way to have proper nested errors\n super(msg + \": \" + err);\n _defineProperty(this, \"code\", void 0);\n this.code = code;\n }\n}\nexport function genCallID() {\n return Date.now().toString() + secureRandomString(16);\n}\nfunction getCodecParamMods(isPtt) {\n var mods = [{\n mediaType: \"audio\",\n codec: \"opus\",\n enableDtx: true,\n maxAverageBitrate: isPtt ? 12000 : undefined\n }];\n return mods;\n}\n\n/**\n * These now all have the call object as an argument. Why? Well, to know which call a given event is\n * about you have three options:\n * 1. Use a closure as the callback that remembers what call it's listening to. This can be\n * a pain because you need to pass the listener function again when you remove the listener,\n * which might be somewhere else.\n * 2. Use not-very-well-known fact that EventEmitter sets 'this' to the emitter object in the\n * callback. This doesn't really play well with modern Typescript and eslint and doesn't work\n * with our pattern of re-emitting events.\n * 3. Pass the object in question as an argument to the callback.\n *\n * Now that we have group calls which have to deal with multiple call objects, this will\n * become more important, and I think methods 1 and 2 are just going to cause issues.\n */\n\n// The key of the transceiver map (purpose + media type, separated by ':')\n\n// generates keys for the map of transceivers\n// kind is unfortunately a string rather than MediaType as this is the type of\n// track.kind\nfunction getTransceiverKey(purpose, kind) {\n return purpose + \":\" + kind;\n}\nexport class MatrixCall extends TypedEventEmitter {\n /**\n * Construct a new Matrix Call.\n * @param opts - Config options.\n */\n constructor(opts) {\n var _this, _opts$forceTURN;\n super();\n _this = this;\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"callId\", void 0);\n _defineProperty(this, \"invitee\", void 0);\n _defineProperty(this, \"hangupParty\", void 0);\n _defineProperty(this, \"hangupReason\", void 0);\n _defineProperty(this, \"direction\", void 0);\n _defineProperty(this, \"ourPartyId\", void 0);\n _defineProperty(this, \"peerConn\", void 0);\n _defineProperty(this, \"toDeviceSeq\", 0);\n // whether this call should have push-to-talk semantics\n // This should be set by the consumer on incoming & outgoing calls.\n _defineProperty(this, \"isPtt\", false);\n _defineProperty(this, \"_state\", CallState.Fledgling);\n _defineProperty(this, \"client\", void 0);\n _defineProperty(this, \"forceTURN\", void 0);\n _defineProperty(this, \"turnServers\", void 0);\n // A queue for candidates waiting to go out.\n // We try to amalgamate candidates into a single candidate message where\n // possible\n _defineProperty(this, \"candidateSendQueue\", []);\n _defineProperty(this, \"candidateSendTries\", 0);\n _defineProperty(this, \"candidatesEnded\", false);\n _defineProperty(this, \"feeds\", []);\n // our transceivers for each purpose and type of media\n _defineProperty(this, \"transceivers\", new Map());\n _defineProperty(this, \"inviteOrAnswerSent\", false);\n _defineProperty(this, \"waitForLocalAVStream\", false);\n _defineProperty(this, \"successor\", void 0);\n _defineProperty(this, \"opponentMember\", void 0);\n _defineProperty(this, \"opponentVersion\", void 0);\n // The party ID of the other side: undefined if we haven't chosen a partner\n // yet, null if we have but they didn't send a party ID.\n _defineProperty(this, \"opponentPartyId\", void 0);\n _defineProperty(this, \"opponentCaps\", void 0);\n _defineProperty(this, \"iceDisconnectedTimeout\", void 0);\n _defineProperty(this, \"iceReconnectionTimeOut\", void 0);\n _defineProperty(this, \"inviteTimeout\", void 0);\n _defineProperty(this, \"removeTrackListeners\", new Map());\n // The logic of when & if a call is on hold is nontrivial and explained in is*OnHold\n // This flag represents whether we want the other party to be on hold\n _defineProperty(this, \"remoteOnHold\", false);\n // the stats for the call at the point it ended. We can't get these after we\n // tear the call down, so we just grab a snapshot before we stop the call.\n // The typescript definitions have this type as 'any' :(\n _defineProperty(this, \"callStatsAtEnd\", void 0);\n // Perfect negotiation state: https://www.w3.org/TR/webrtc/#perfect-negotiation-example\n _defineProperty(this, \"makingOffer\", false);\n _defineProperty(this, \"ignoreOffer\", false);\n _defineProperty(this, \"isSettingRemoteAnswerPending\", false);\n _defineProperty(this, \"responsePromiseChain\", void 0);\n // If candidates arrive before we've picked an opponent (which, in particular,\n // will happen if the opponent sends candidates eagerly before the user answers\n // the call) we buffer them up here so we can then add the ones from the party we pick\n _defineProperty(this, \"remoteCandidateBuffer\", new Map());\n _defineProperty(this, \"remoteAssertedIdentity\", void 0);\n _defineProperty(this, \"remoteSDPStreamMetadata\", void 0);\n _defineProperty(this, \"callLengthInterval\", void 0);\n _defineProperty(this, \"callStartTime\", void 0);\n _defineProperty(this, \"opponentDeviceId\", void 0);\n _defineProperty(this, \"hasOpponentDeviceInfo\", void 0);\n _defineProperty(this, \"opponentSessionId\", void 0);\n _defineProperty(this, \"groupCallId\", void 0);\n // Used to keep the timer for the delay before actually stopping our\n // video track after muting (see setLocalVideoMuted)\n _defineProperty(this, \"stopVideoTrackTimer\", void 0);\n // Used to allow connection without Video and Audio. To establish a webrtc connection without media a Data channel is\n // needed At the moment this property is true if we allow MatrixClient with isVoipWithNoMediaAllowed = true\n _defineProperty(this, \"isOnlyDataChannelAllowed\", void 0);\n _defineProperty(this, \"stats\", void 0);\n /**\n * Internal\n */\n _defineProperty(this, \"gotLocalIceCandidate\", event => {\n if (event.candidate) {\n if (this.candidatesEnded) {\n logger.warn(\"Call \".concat(this.callId, \" gotLocalIceCandidate() got candidate after candidates have ended!\"));\n }\n logger.debug(\"Call \".concat(this.callId, \" got local ICE \").concat(event.candidate.sdpMid, \" \").concat(event.candidate.candidate));\n if (this.callHasEnded()) return;\n\n // As with the offer, note we need to make a copy of this object, not\n // pass the original: that broke in Chrome ~m43.\n if (event.candidate.candidate === \"\") {\n this.queueCandidate(null);\n } else {\n this.queueCandidate(event.candidate);\n }\n }\n });\n _defineProperty(this, \"onIceGatheringStateChange\", event => {\n var _this$peerConn;\n logger.debug(\"Call \".concat(this.callId, \" onIceGatheringStateChange() ice gathering state changed to \").concat(this.peerConn.iceGatheringState));\n if (((_this$peerConn = this.peerConn) === null || _this$peerConn === void 0 ? void 0 : _this$peerConn.iceGatheringState) === \"complete\") {\n this.queueCandidate(null); // We should leave it to WebRTC to announce the end\n logger.debug(\"Call \".concat(this.callId, \" onIceGatheringStateChange() ice gathering state complete, set candidates have ended\"));\n }\n });\n _defineProperty(this, \"getLocalOfferFailed\", err => {\n logger.error(\"Call \".concat(this.callId, \" getLocalOfferFailed() running\"), err);\n this.emit(CallEvent.Error, new CallError(CallErrorCode.LocalOfferFailed, \"Failed to get local offer!\", err), this);\n this.terminate(CallParty.Local, CallErrorCode.LocalOfferFailed, false);\n });\n _defineProperty(this, \"getUserMediaFailed\", err => {\n if (this.successor) {\n this.successor.getUserMediaFailed(err);\n return;\n }\n logger.warn(\"Call \".concat(this.callId, \" getUserMediaFailed() failed to get user media - ending call\"), err);\n this.emit(CallEvent.Error, new CallError(CallErrorCode.NoUserMedia, \"Couldn't start capturing media! Is your microphone set up and does this app have permission?\", err), this);\n this.terminate(CallParty.Local, CallErrorCode.NoUserMedia, false);\n });\n _defineProperty(this, \"placeCallFailed\", err => {\n if (this.successor) {\n this.successor.placeCallFailed(err);\n return;\n }\n logger.warn(\"Call \".concat(this.callId, \" placeCallWithCallFeeds() failed - ending call\"), err);\n this.emit(CallEvent.Error, new CallError(CallErrorCode.IceFailed, \"Couldn't start call! Invalid ICE server configuration.\", err), this);\n this.terminate(CallParty.Local, CallErrorCode.IceFailed, false);\n });\n _defineProperty(this, \"onIceConnectionStateChanged\", () => {\n var _this$peerConn2, _this$peerConn3, _this$peerConn$iceCon, _this$peerConn4, _this$peerConn5, _this$peerConn8;\n if (this.callHasEnded()) {\n return; // because ICE can still complete as we're ending the call\n }\n logger.debug(\"Call \".concat(this.callId, \" onIceConnectionStateChanged() running (state=\").concat((_this$peerConn2 = this.peerConn) === null || _this$peerConn2 === void 0 ? void 0 : _this$peerConn2.iceConnectionState, \", conn=\").concat((_this$peerConn3 = this.peerConn) === null || _this$peerConn3 === void 0 ? void 0 : _this$peerConn3.connectionState, \")\"));\n\n // ideally we'd consider the call to be connected when we get media but\n // chrome doesn't implement any of the 'onstarted' events yet\n if ([\"connected\", \"completed\"].includes((_this$peerConn$iceCon = (_this$peerConn4 = this.peerConn) === null || _this$peerConn4 === void 0 ? void 0 : _this$peerConn4.iceConnectionState) !== null && _this$peerConn$iceCon !== void 0 ? _this$peerConn$iceCon : \"\")) {\n clearTimeout(this.iceDisconnectedTimeout);\n this.iceDisconnectedTimeout = undefined;\n if (this.iceReconnectionTimeOut) {\n clearTimeout(this.iceReconnectionTimeOut);\n }\n this.state = CallState.Connected;\n if (!this.callLengthInterval && !this.callStartTime) {\n this.callStartTime = Date.now();\n this.callLengthInterval = setInterval(() => {\n this.emit(CallEvent.LengthChanged, Math.round((Date.now() - this.callStartTime) / 1000), this);\n }, CALL_LENGTH_INTERVAL);\n }\n } else if (((_this$peerConn5 = this.peerConn) === null || _this$peerConn5 === void 0 ? void 0 : _this$peerConn5.iceConnectionState) == \"failed\") {\n var _this$peerConn6;\n this.candidatesEnded = false;\n // Firefox for Android does not yet have support for restartIce()\n // (the types say it's always defined though, so we have to cast\n // to prevent typescript from warning).\n if ((_this$peerConn6 = this.peerConn) !== null && _this$peerConn6 !== void 0 && _this$peerConn6.restartIce) {\n var _this$peerConn7;\n this.candidatesEnded = false;\n logger.debug(\"Call \".concat(this.callId, \" onIceConnectionStateChanged() ice restart (state=\").concat((_this$peerConn7 = this.peerConn) === null || _this$peerConn7 === void 0 ? void 0 : _this$peerConn7.iceConnectionState, \")\"));\n this.peerConn.restartIce();\n } else {\n logger.info(\"Call \".concat(this.callId, \" onIceConnectionStateChanged() hanging up call (ICE failed and no ICE restart method)\"));\n this.hangup(CallErrorCode.IceFailed, false);\n }\n } else if (((_this$peerConn8 = this.peerConn) === null || _this$peerConn8 === void 0 ? void 0 : _this$peerConn8.iceConnectionState) == \"disconnected\") {\n this.candidatesEnded = false;\n this.iceReconnectionTimeOut = setTimeout(() => {\n var _this$peerConn9, _this$peerConn0, _this$peerConn1;\n logger.info(\"Call \".concat(this.callId, \" onIceConnectionStateChanged() ICE restarting because of ICE disconnected, (state=\").concat((_this$peerConn9 = this.peerConn) === null || _this$peerConn9 === void 0 ? void 0 : _this$peerConn9.iceConnectionState, \", conn=\").concat((_this$peerConn0 = this.peerConn) === null || _this$peerConn0 === void 0 ? void 0 : _this$peerConn0.connectionState, \")\"));\n if ((_this$peerConn1 = this.peerConn) !== null && _this$peerConn1 !== void 0 && _this$peerConn1.restartIce) {\n this.candidatesEnded = false;\n this.peerConn.restartIce();\n }\n this.iceReconnectionTimeOut = undefined;\n }, ICE_RECONNECTING_TIMEOUT);\n this.iceDisconnectedTimeout = setTimeout(() => {\n logger.info(\"Call \".concat(this.callId, \" onIceConnectionStateChanged() hanging up call (ICE disconnected for too long)\"));\n this.hangup(CallErrorCode.IceFailed, false);\n }, ICE_DISCONNECTED_TIMEOUT);\n this.state = CallState.Connecting;\n }\n\n // In PTT mode, override feed status to muted when we lose connection to\n // the peer, since we don't want to block the line if they're not saying anything.\n // Experimenting in Chrome, this happens after 5 or 6 seconds, which is probably\n // fast enough.\n if (this.isPtt && [\"failed\", \"disconnected\"].includes(this.peerConn.iceConnectionState)) {\n for (var feed of this.getRemoteFeeds()) {\n feed.setAudioVideoMuted(true, true);\n }\n }\n });\n _defineProperty(this, \"onSignallingStateChanged\", () => {\n var _this$peerConn10;\n logger.debug(\"Call \".concat(this.callId, \" onSignallingStateChanged() running (state=\").concat((_this$peerConn10 = this.peerConn) === null || _this$peerConn10 === void 0 ? void 0 : _this$peerConn10.signalingState, \")\"));\n });\n _defineProperty(this, \"onTrack\", ev => {\n if (ev.streams.length === 0) {\n logger.warn(\"Call \".concat(this.callId, \" onTrack() called with streamless track streamless (kind=\").concat(ev.track.kind, \")\"));\n return;\n }\n var stream = ev.streams[0];\n this.pushRemoteFeed(stream);\n if (!this.removeTrackListeners.has(stream)) {\n var onRemoveTrack = () => {\n if (stream.getTracks().length === 0) {\n logger.info(\"Call \".concat(this.callId, \" onTrack() removing track (streamId=\").concat(stream.id, \")\"));\n this.deleteFeedByStream(stream);\n stream.removeEventListener(\"removetrack\", onRemoveTrack);\n this.removeTrackListeners.delete(stream);\n }\n };\n stream.addEventListener(\"removetrack\", onRemoveTrack);\n this.removeTrackListeners.set(stream, onRemoveTrack);\n }\n });\n _defineProperty(this, \"onDataChannel\", ev => {\n this.emit(CallEvent.DataChannel, ev.channel, this);\n });\n _defineProperty(this, \"onNegotiationNeeded\", /*#__PURE__*/_asyncToGenerator(function* () {\n logger.info(\"Call \".concat(_this.callId, \" onNegotiationNeeded() negotiation is needed!\"));\n if (_this.state !== CallState.CreateOffer && _this.opponentVersion === 0) {\n logger.info(\"Call \".concat(_this.callId, \" onNegotiationNeeded() opponent does not support renegotiation: ignoring negotiationneeded event\"));\n return;\n }\n _this.queueGotLocalOffer();\n }));\n _defineProperty(this, \"onHangupReceived\", msg => {\n logger.debug(\"Call \".concat(this.callId, \" onHangupReceived() running\"));\n\n // party ID must match (our chosen partner hanging up the call) or be undefined (we haven't chosen\n // a partner yet but we're treating the hangup as a reject as per VoIP v0)\n if (this.partyIdMatches(msg) || this.state === CallState.Ringing) {\n // default reason is user_hangup\n this.terminate(CallParty.Remote, msg.reason || CallErrorCode.UserHangup, true);\n } else {\n logger.info(\"Call \".concat(this.callId, \" onHangupReceived() ignoring message from party ID \").concat(msg.party_id, \": our partner is \").concat(this.opponentPartyId));\n }\n });\n _defineProperty(this, \"onRejectReceived\", msg => {\n logger.debug(\"Call \".concat(this.callId, \" onRejectReceived() running\"));\n\n // No need to check party_id for reject because if we'd received either\n // an answer or reject, we wouldn't be in state InviteSent\n\n var shouldTerminate =\n // reject events also end the call if it's ringing: it's another of\n // our devices rejecting the call.\n [CallState.InviteSent, CallState.Ringing].includes(this.state) ||\n // also if we're in the init state and it's an inbound call, since\n // this means we just haven't entered the ringing state yet\n this.state === CallState.Fledgling && this.direction === CallDirection.Inbound;\n if (shouldTerminate) {\n this.terminate(CallParty.Remote, msg.reason || CallErrorCode.UserHangup, true);\n } else {\n logger.debug(\"Call \".concat(this.callId, \" onRejectReceived() called in wrong state (state=\").concat(this.state, \")\"));\n }\n });\n _defineProperty(this, \"onAnsweredElsewhere\", msg => {\n logger.debug(\"Call \".concat(this.callId, \" onAnsweredElsewhere() running\"));\n this.terminate(CallParty.Remote, CallErrorCode.AnsweredElsewhere, true);\n });\n this.roomId = opts.roomId;\n this.invitee = opts.invitee;\n this.client = opts.client;\n if (!this.client.deviceId) throw new Error(\"Client must have a device ID to start calls\");\n this.forceTURN = (_opts$forceTURN = opts.forceTURN) !== null && _opts$forceTURN !== void 0 ? _opts$forceTURN : false;\n this.ourPartyId = this.client.deviceId;\n this.opponentDeviceId = opts.opponentDeviceId;\n this.opponentSessionId = opts.opponentSessionId;\n this.groupCallId = opts.groupCallId;\n // Array of Objects with urls, username, credential keys\n this.turnServers = opts.turnServers || [];\n if (this.turnServers.length === 0 && this.client.isFallbackICEServerAllowed()) {\n this.turnServers.push({\n urls: [FALLBACK_ICE_SERVER]\n });\n }\n for (var server of this.turnServers) {\n checkObjectHasKeys(server, [\"urls\"]);\n }\n this.callId = genCallID();\n // If the Client provides calls without audio and video we need a datachannel for a webrtc connection\n this.isOnlyDataChannelAllowed = this.client.isVoipWithNoMediaAllowed;\n }\n\n /**\n * Place a voice call to this room.\n * @throws If you have not specified a listener for 'error' events.\n */\n placeVoiceCall() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n yield _this2.placeCall(true, false);\n })();\n }\n\n /**\n * Place a video call to this room.\n * @throws If you have not specified a listener for 'error' events.\n */\n placeVideoCall() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n yield _this3.placeCall(true, true);\n })();\n }\n\n /**\n * Create a datachannel using this call's peer connection.\n * @param label - A human readable label for this datachannel\n * @param options - An object providing configuration options for the data channel.\n */\n createDataChannel(label, options) {\n var dataChannel = this.peerConn.createDataChannel(label, options);\n this.emit(CallEvent.DataChannel, dataChannel, this);\n return dataChannel;\n }\n getOpponentMember() {\n return this.opponentMember;\n }\n getOpponentDeviceId() {\n return this.opponentDeviceId;\n }\n getOpponentSessionId() {\n return this.opponentSessionId;\n }\n opponentCanBeTransferred() {\n return Boolean(this.opponentCaps && this.opponentCaps[\"m.call.transferee\"]);\n }\n opponentSupportsDTMF() {\n return Boolean(this.opponentCaps && this.opponentCaps[\"m.call.dtmf\"]);\n }\n getRemoteAssertedIdentity() {\n return this.remoteAssertedIdentity;\n }\n get state() {\n return this._state;\n }\n set state(state) {\n var oldState = this._state;\n this._state = state;\n this.emit(CallEvent.State, state, oldState, this);\n }\n get type() {\n // we may want to look for a video receiver here rather than a track to match the\n // sender behaviour, although in practice they should be the same thing\n return this.hasUserMediaVideoSender || this.hasRemoteUserMediaVideoTrack ? CallType.Video : CallType.Voice;\n }\n get hasLocalUserMediaVideoTrack() {\n var _this$localUsermediaS;\n return !!((_this$localUsermediaS = this.localUsermediaStream) !== null && _this$localUsermediaS !== void 0 && _this$localUsermediaS.getVideoTracks().length);\n }\n get hasRemoteUserMediaVideoTrack() {\n return this.getRemoteFeeds().some(feed => {\n var _feed$stream;\n return feed.purpose === SDPStreamMetadataPurpose.Usermedia && ((_feed$stream = feed.stream) === null || _feed$stream === void 0 ? void 0 : _feed$stream.getVideoTracks().length);\n });\n }\n get hasLocalUserMediaAudioTrack() {\n var _this$localUsermediaS2;\n return !!((_this$localUsermediaS2 = this.localUsermediaStream) !== null && _this$localUsermediaS2 !== void 0 && _this$localUsermediaS2.getAudioTracks().length);\n }\n get hasRemoteUserMediaAudioTrack() {\n return this.getRemoteFeeds().some(feed => {\n var _feed$stream2;\n return feed.purpose === SDPStreamMetadataPurpose.Usermedia && !!((_feed$stream2 = feed.stream) !== null && _feed$stream2 !== void 0 && _feed$stream2.getAudioTracks().length);\n });\n }\n get hasUserMediaAudioSender() {\n var _this$transceivers$ge;\n return Boolean((_this$transceivers$ge = this.transceivers.get(getTransceiverKey(SDPStreamMetadataPurpose.Usermedia, \"audio\"))) === null || _this$transceivers$ge === void 0 ? void 0 : _this$transceivers$ge.sender);\n }\n get hasUserMediaVideoSender() {\n var _this$transceivers$ge2;\n return Boolean((_this$transceivers$ge2 = this.transceivers.get(getTransceiverKey(SDPStreamMetadataPurpose.Usermedia, \"video\"))) === null || _this$transceivers$ge2 === void 0 ? void 0 : _this$transceivers$ge2.sender);\n }\n get localUsermediaFeed() {\n return this.getLocalFeeds().find(feed => feed.purpose === SDPStreamMetadataPurpose.Usermedia);\n }\n get localScreensharingFeed() {\n return this.getLocalFeeds().find(feed => feed.purpose === SDPStreamMetadataPurpose.Screenshare);\n }\n get localUsermediaStream() {\n var _this$localUsermediaF;\n return (_this$localUsermediaF = this.localUsermediaFeed) === null || _this$localUsermediaF === void 0 ? void 0 : _this$localUsermediaF.stream;\n }\n get localScreensharingStream() {\n var _this$localScreenshar;\n return (_this$localScreenshar = this.localScreensharingFeed) === null || _this$localScreenshar === void 0 ? void 0 : _this$localScreenshar.stream;\n }\n get remoteUsermediaFeed() {\n return this.getRemoteFeeds().find(feed => feed.purpose === SDPStreamMetadataPurpose.Usermedia);\n }\n get remoteScreensharingFeed() {\n return this.getRemoteFeeds().find(feed => feed.purpose === SDPStreamMetadataPurpose.Screenshare);\n }\n get remoteUsermediaStream() {\n var _this$remoteUsermedia;\n return (_this$remoteUsermedia = this.remoteUsermediaFeed) === null || _this$remoteUsermedia === void 0 ? void 0 : _this$remoteUsermedia.stream;\n }\n get remoteScreensharingStream() {\n var _this$remoteScreensha;\n return (_this$remoteScreensha = this.remoteScreensharingFeed) === null || _this$remoteScreensha === void 0 ? void 0 : _this$remoteScreensha.stream;\n }\n getFeedByStreamId(streamId) {\n return this.getFeeds().find(feed => feed.stream.id === streamId);\n }\n\n /**\n * Returns an array of all CallFeeds\n * @returns CallFeeds\n */\n getFeeds() {\n return this.feeds;\n }\n\n /**\n * Returns an array of all local CallFeeds\n * @returns local CallFeeds\n */\n getLocalFeeds() {\n return this.feeds.filter(feed => feed.isLocal());\n }\n\n /**\n * Returns an array of all remote CallFeeds\n * @returns remote CallFeeds\n */\n getRemoteFeeds() {\n return this.feeds.filter(feed => !feed.isLocal());\n }\n initOpponentCrypto() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var _this4$getOpponentMem;\n if (!_this4.opponentDeviceId) return;\n if (!_this4.client.getUseE2eForGroupCall()) return;\n // It's possible to want E2EE and yet not have the means to manage E2EE\n // ourselves (for example if the client is a RoomWidgetClient)\n if (!_this4.client.getCrypto()) {\n // All we know is the device ID\n _this4.hasOpponentDeviceInfo = true;\n return;\n }\n var userId = _this4.invitee || ((_this4$getOpponentMem = _this4.getOpponentMember()) === null || _this4$getOpponentMem === void 0 ? void 0 : _this4$getOpponentMem.userId);\n if (!userId) throw new Error(\"Couldn't find opponent user ID to init crypto\");\n\n // Here we were calling `MatrixClient.crypto.deviceList.downloadKeys` which is not supported by the rust cryptography.\n _this4.hasOpponentDeviceInfo = false;\n throw new GroupCallUnknownDeviceError(userId);\n })();\n }\n\n /**\n * Generates and returns localSDPStreamMetadata\n * @returns localSDPStreamMetadata\n */\n getLocalSDPStreamMetadata() {\n var updateStreamIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var metadata = {};\n for (var localFeed of this.getLocalFeeds()) {\n if (updateStreamIds) {\n localFeed.sdpMetadataStreamId = localFeed.stream.id;\n }\n metadata[localFeed.sdpMetadataStreamId] = {\n purpose: localFeed.purpose,\n audio_muted: localFeed.isAudioMuted(),\n video_muted: localFeed.isVideoMuted()\n };\n }\n return metadata;\n }\n\n /**\n * Returns true if there are no incoming feeds,\n * otherwise returns false\n * @returns no incoming feeds\n */\n noIncomingFeeds() {\n return !this.feeds.some(feed => !feed.isLocal());\n }\n pushRemoteFeed(stream) {\n // Fallback to old behavior if the other side doesn't support SDPStreamMetadata\n if (!this.opponentSupportsSDPStreamMetadata()) {\n this.pushRemoteFeedWithoutMetadata(stream);\n return;\n }\n var userId = this.getOpponentMember().userId;\n var purpose = this.remoteSDPStreamMetadata[stream.id].purpose;\n var audioMuted = this.remoteSDPStreamMetadata[stream.id].audio_muted;\n var videoMuted = this.remoteSDPStreamMetadata[stream.id].video_muted;\n if (!purpose) {\n logger.warn(\"Call \".concat(this.callId, \" pushRemoteFeed() ignoring stream because we didn't get any metadata about it (streamId=\").concat(stream.id, \")\"));\n return;\n }\n if (this.getFeedByStreamId(stream.id)) {\n logger.warn(\"Call \".concat(this.callId, \" pushRemoteFeed() ignoring stream because we already have a feed for it (streamId=\").concat(stream.id, \")\"));\n return;\n }\n this.feeds.push(new CallFeed({\n client: this.client,\n call: this,\n roomId: this.roomId,\n userId,\n deviceId: this.getOpponentDeviceId(),\n stream,\n purpose,\n audioMuted,\n videoMuted\n }));\n this.emit(CallEvent.FeedsChanged, this.feeds, this);\n logger.info(\"Call \".concat(this.callId, \" pushRemoteFeed() pushed stream (streamId=\").concat(stream.id, \", active=\").concat(stream.active, \", purpose=\").concat(purpose, \")\"));\n }\n\n /**\n * This method is used ONLY if the other client doesn't support sending SDPStreamMetadata\n */\n pushRemoteFeedWithoutMetadata(stream) {\n var _this$feeds$find;\n var userId = this.getOpponentMember().userId;\n // We can guess the purpose here since the other client can only send one stream\n var purpose = SDPStreamMetadataPurpose.Usermedia;\n var oldRemoteStream = (_this$feeds$find = this.feeds.find(feed => !feed.isLocal())) === null || _this$feeds$find === void 0 ? void 0 : _this$feeds$find.stream;\n\n // Note that we check by ID and always set the remote stream: Chrome appears\n // to make new stream objects when transceiver directionality is changed and the 'active'\n // status of streams change - Dave\n // If we already have a stream, check this stream has the same id\n if (oldRemoteStream && stream.id !== oldRemoteStream.id) {\n logger.warn(\"Call \".concat(this.callId, \" pushRemoteFeedWithoutMetadata() ignoring new stream because we already have stream (streamId=\").concat(stream.id, \")\"));\n return;\n }\n if (this.getFeedByStreamId(stream.id)) {\n logger.warn(\"Call \".concat(this.callId, \" pushRemoteFeedWithoutMetadata() ignoring stream because we already have a feed for it (streamId=\").concat(stream.id, \")\"));\n return;\n }\n this.feeds.push(new CallFeed({\n client: this.client,\n call: this,\n roomId: this.roomId,\n audioMuted: false,\n videoMuted: false,\n userId,\n deviceId: this.getOpponentDeviceId(),\n stream,\n purpose\n }));\n this.emit(CallEvent.FeedsChanged, this.feeds, this);\n logger.info(\"Call \".concat(this.callId, \" pushRemoteFeedWithoutMetadata() pushed stream (streamId=\").concat(stream.id, \", active=\").concat(stream.active, \")\"));\n }\n pushNewLocalFeed(stream, purpose) {\n var addToPeerConnection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var userId = this.client.getUserId();\n\n // Tracks don't always start off enabled, eg. chrome will give a disabled\n // audio track if you ask for user media audio and already had one that\n // you'd set to disabled (presumably because it clones them internally).\n setTracksEnabled(stream.getAudioTracks(), true);\n setTracksEnabled(stream.getVideoTracks(), true);\n if (this.getFeedByStreamId(stream.id)) {\n logger.warn(\"Call \".concat(this.callId, \" pushNewLocalFeed() ignoring stream because we already have a feed for it (streamId=\").concat(stream.id, \")\"));\n return;\n }\n this.pushLocalFeed(new CallFeed({\n client: this.client,\n roomId: this.roomId,\n audioMuted: false,\n videoMuted: false,\n userId,\n deviceId: this.getOpponentDeviceId(),\n stream,\n purpose\n }), addToPeerConnection);\n }\n\n /**\n * Pushes supplied feed to the call\n * @param callFeed - to push\n * @param addToPeerConnection - whether to add the tracks to the peer connection\n */\n pushLocalFeed(callFeed) {\n var _this5 = this;\n var addToPeerConnection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (this.feeds.some(feed => callFeed.stream.id === feed.stream.id)) {\n logger.info(\"Call \".concat(this.callId, \" pushLocalFeed() ignoring duplicate local stream (streamId=\").concat(callFeed.stream.id, \")\"));\n return;\n }\n this.feeds.push(callFeed);\n if (addToPeerConnection) {\n var _loop = function _loop() {\n logger.info(\"Call \".concat(_this5.callId, \" pushLocalFeed() adding track to peer connection (id=\").concat(track.id, \", kind=\").concat(track.kind, \", streamId=\").concat(callFeed.stream.id, \", streamPurpose=\").concat(callFeed.purpose, \", enabled=\").concat(track.enabled, \")\"));\n var tKey = getTransceiverKey(callFeed.purpose, track.kind);\n if (_this5.transceivers.has(tKey)) {\n // we already have a sender, so we re-use it. We try to re-use transceivers as much\n // as possible because they can't be removed once added, so otherwise they just\n // accumulate which makes the SDP very large very quickly: in fact it only takes\n // about 6 video tracks to exceed the maximum size of an Olm-encrypted\n // Matrix event.\n var transceiver = _this5.transceivers.get(tKey);\n transceiver.sender.replaceTrack(track);\n // set the direction to indicate we're going to start sending again\n // (this will trigger the re-negotiation)\n transceiver.direction = transceiver.direction === \"inactive\" ? \"sendonly\" : \"sendrecv\";\n } else {\n // create a new one. We need to use addTrack rather addTransceiver for this because firefox\n // doesn't yet implement RTCRTPSender.setStreams()\n // (https://bugzilla.mozilla.org/show_bug.cgi?id=1510802) so we'd have no way to group the\n // two tracks together into a stream.\n var newSender = _this5.peerConn.addTrack(track, callFeed.stream);\n\n // now go & fish for the new transceiver\n var newTransceiver = _this5.peerConn.getTransceivers().find(t => t.sender === newSender);\n if (newTransceiver) {\n _this5.transceivers.set(tKey, newTransceiver);\n } else {\n logger.warn(\"Call \".concat(_this5.callId, \" pushLocalFeed() didn't find a matching transceiver after adding track!\"));\n }\n }\n };\n for (var track of callFeed.stream.getTracks()) {\n _loop();\n }\n }\n logger.info(\"Call \".concat(this.callId, \" pushLocalFeed() pushed stream (id=\").concat(callFeed.stream.id, \", active=\").concat(callFeed.stream.active, \", purpose=\").concat(callFeed.purpose, \")\"));\n this.emit(CallEvent.FeedsChanged, this.feeds, this);\n }\n\n /**\n * Removes local call feed from the call and its tracks from the peer\n * connection\n * @param callFeed - to remove\n */\n removeLocalFeed(callFeed) {\n var audioTransceiverKey = getTransceiverKey(callFeed.purpose, \"audio\");\n var videoTransceiverKey = getTransceiverKey(callFeed.purpose, \"video\");\n for (var transceiverKey of [audioTransceiverKey, videoTransceiverKey]) {\n // this is slightly mixing the track and transceiver API but is basically just shorthand.\n // There is no way to actually remove a transceiver, so this just sets it to inactive\n // (or recvonly) and replaces the source with nothing.\n if (this.transceivers.has(transceiverKey)) {\n var transceiver = this.transceivers.get(transceiverKey);\n if (transceiver.sender) this.peerConn.removeTrack(transceiver.sender);\n }\n }\n if (callFeed.purpose === SDPStreamMetadataPurpose.Screenshare) {\n this.client.getMediaHandler().stopScreensharingStream(callFeed.stream);\n }\n this.deleteFeed(callFeed);\n }\n deleteAllFeeds() {\n for (var feed of this.feeds) {\n if (!feed.isLocal() || !this.groupCallId) {\n feed.dispose();\n }\n }\n this.feeds = [];\n this.emit(CallEvent.FeedsChanged, this.feeds, this);\n }\n deleteFeedByStream(stream) {\n var feed = this.getFeedByStreamId(stream.id);\n if (!feed) {\n logger.warn(\"Call \".concat(this.callId, \" deleteFeedByStream() didn't find the feed to delete (streamId=\").concat(stream.id, \")\"));\n return;\n }\n this.deleteFeed(feed);\n }\n deleteFeed(feed) {\n feed.dispose();\n this.feeds.splice(this.feeds.indexOf(feed), 1);\n this.emit(CallEvent.FeedsChanged, this.feeds, this);\n }\n\n // The typescript definitions have this type as 'any' :(\n getCurrentCallStats() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (_this6.callHasEnded()) {\n return _this6.callStatsAtEnd;\n }\n return _this6.collectCallStats();\n })();\n }\n collectCallStats() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n // This happens when the call fails before it starts.\n // For example when we fail to get capture sources\n if (!_this7.peerConn) return;\n var statsReport = yield _this7.peerConn.getStats();\n var stats = [];\n statsReport.forEach(item => {\n stats.push(item);\n });\n return stats;\n })();\n }\n\n /**\n * Configure this call from an invite event. Used by MatrixClient.\n * @param event - The m.call.invite event\n */\n initWithInvite(event) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n var _this8$feeds$find;\n var invite = event.getContent();\n _this8.direction = CallDirection.Inbound;\n\n // make sure we have valid turn creds. Unless something's gone wrong, it should\n // poll and keep the credentials valid so this should be instant.\n var haveTurnCreds = yield _this8.client.checkTurnServers();\n if (!haveTurnCreds) {\n logger.warn(\"Call \".concat(_this8.callId, \" initWithInvite() failed to get TURN credentials! Proceeding with call anyway...\"));\n }\n var sdpStreamMetadata = SDPStreamMetadataKey.findIn(invite);\n if (sdpStreamMetadata) {\n _this8.updateRemoteSDPStreamMetadata(sdpStreamMetadata);\n } else {\n logger.debug(\"Call \".concat(_this8.callId, \" initWithInvite() did not get any SDPStreamMetadata! Can not send/receive multiple streams\"));\n }\n _this8.peerConn = _this8.createPeerConnection();\n _this8.emit(CallEvent.PeerConnectionCreated, _this8.peerConn, _this8);\n // we must set the party ID before await-ing on anything: the call event\n // handler will start giving us more call events (eg. candidates) so if\n // we haven't set the party ID, we'll ignore them.\n _this8.chooseOpponent(event);\n yield _this8.initOpponentCrypto();\n try {\n yield _this8.peerConn.setRemoteDescription(invite.offer);\n logger.debug(\"Call \".concat(_this8.callId, \" initWithInvite() set remote description: \").concat(invite.offer.type));\n yield _this8.addBufferedIceCandidates();\n } catch (e) {\n logger.debug(\"Call \".concat(_this8.callId, \" initWithInvite() failed to set remote description\"), e);\n _this8.terminate(CallParty.Local, CallErrorCode.SetRemoteDescription, false);\n return;\n }\n var remoteStream = (_this8$feeds$find = _this8.feeds.find(feed => !feed.isLocal())) === null || _this8$feeds$find === void 0 ? void 0 : _this8$feeds$find.stream;\n\n // According to previous comments in this file, firefox at some point did not\n // add streams until media started arriving on them. Testing latest firefox\n // (81 at time of writing), this is no longer a problem, so let's do it the correct way.\n //\n // For example in case of no media webrtc connections like screen share only call we have to allow webrtc\n // connections without remote media. In this case we always use a data channel. At the moment we allow as well\n // only data channel as media in the WebRTC connection with this setup here.\n if (!_this8.isOnlyDataChannelAllowed && (!remoteStream || remoteStream.getTracks().length === 0)) {\n logger.error(\"Call \".concat(_this8.callId, \" initWithInvite() no remote stream or no tracks after setting remote description!\"));\n _this8.terminate(CallParty.Local, CallErrorCode.SetRemoteDescription, false);\n return;\n }\n _this8.state = CallState.Ringing;\n if (event.getLocalAge()) {\n // Time out the call if it's ringing for too long\n var ringingTimer = setTimeout(() => {\n if (_this8.state == CallState.Ringing) {\n var _this8$stats;\n logger.debug(\"Call \".concat(_this8.callId, \" initWithInvite() invite has expired. Hanging up.\"));\n _this8.hangupParty = CallParty.Remote; // effectively\n _this8.state = CallState.Ended;\n _this8.stopAllMedia();\n if (_this8.peerConn.signalingState != \"closed\") {\n _this8.peerConn.close();\n }\n (_this8$stats = _this8.stats) === null || _this8$stats === void 0 || _this8$stats.removeStatsReportGatherer(_this8.callId);\n _this8.emit(CallEvent.Hangup, _this8);\n }\n }, invite.lifetime - event.getLocalAge());\n var onState = state => {\n if (state !== CallState.Ringing) {\n clearTimeout(ringingTimer);\n _this8.off(CallEvent.State, onState);\n }\n };\n _this8.on(CallEvent.State, onState);\n }\n })();\n }\n\n /**\n * Configure this call from a hangup or reject event. Used by MatrixClient.\n * @param event - The m.call.hangup event\n */\n initWithHangup(event) {\n // perverse as it may seem, sometimes we want to instantiate a call with a\n // hangup message (because when getting the state of the room on load, events\n // come in reverse order and we want to remember that a call has been hung up)\n this.state = CallState.Ended;\n }\n shouldAnswerWithMediaType(wantedValue, valueOfTheOtherSide, type) {\n if (wantedValue && !valueOfTheOtherSide) {\n // TODO: Figure out how to do this\n logger.warn(\"Call \".concat(this.callId, \" shouldAnswerWithMediaType() unable to answer with \").concat(type, \" because the other side isn't sending it either.\"));\n return false;\n } else if (!isNullOrUndefined(wantedValue) && wantedValue !== valueOfTheOtherSide && !this.opponentSupportsSDPStreamMetadata()) {\n logger.warn(\"Call \".concat(this.callId, \" shouldAnswerWithMediaType() unable to answer with \").concat(type, \"=\").concat(wantedValue, \" because the other side doesn't support it. Answering with \").concat(type, \"=\").concat(valueOfTheOtherSide, \".\"));\n return valueOfTheOtherSide;\n }\n return wantedValue !== null && wantedValue !== void 0 ? wantedValue : valueOfTheOtherSide;\n }\n\n /**\n * Answer a call.\n */\n answer(audio, video) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n if (_this9.inviteOrAnswerSent) return;\n // TODO: Figure out how to do this\n if (audio === false && video === false) throw new Error(\"You CANNOT answer a call without media\");\n if (!_this9.localUsermediaStream && !_this9.waitForLocalAVStream) {\n var prevState = _this9.state;\n var answerWithAudio = _this9.shouldAnswerWithMediaType(audio, _this9.hasRemoteUserMediaAudioTrack, \"audio\");\n var answerWithVideo = _this9.shouldAnswerWithMediaType(video, _this9.hasRemoteUserMediaVideoTrack, \"video\");\n _this9.state = CallState.WaitLocalMedia;\n _this9.waitForLocalAVStream = true;\n try {\n var _this9$client$getDevi;\n var stream = yield _this9.client.getMediaHandler().getUserMediaStream(answerWithAudio, answerWithVideo);\n _this9.waitForLocalAVStream = false;\n var usermediaFeed = new CallFeed({\n client: _this9.client,\n roomId: _this9.roomId,\n userId: _this9.client.getUserId(),\n deviceId: (_this9$client$getDevi = _this9.client.getDeviceId()) !== null && _this9$client$getDevi !== void 0 ? _this9$client$getDevi : undefined,\n stream,\n purpose: SDPStreamMetadataPurpose.Usermedia,\n audioMuted: false,\n videoMuted: false\n });\n var feeds = [usermediaFeed];\n if (_this9.localScreensharingFeed) {\n feeds.push(_this9.localScreensharingFeed);\n }\n _this9.answerWithCallFeeds(feeds);\n } catch (e) {\n if (answerWithVideo) {\n // Try to answer without video\n logger.warn(\"Call \".concat(_this9.callId, \" answer() failed to getUserMedia(), trying to getUserMedia() without video\"));\n _this9.state = prevState;\n _this9.waitForLocalAVStream = false;\n yield _this9.answer(answerWithAudio, false);\n } else {\n _this9.getUserMediaFailed(e);\n return;\n }\n }\n } else if (_this9.waitForLocalAVStream) {\n _this9.state = CallState.WaitLocalMedia;\n }\n })();\n }\n answerWithCallFeeds(callFeeds) {\n if (this.inviteOrAnswerSent) return;\n this.queueGotCallFeedsForAnswer(callFeeds);\n }\n\n /**\n * Replace this call with a new call, e.g. for glare resolution. Used by\n * MatrixClient.\n * @param newCall - The new call.\n */\n replacedBy(newCall) {\n logger.debug(\"Call \".concat(this.callId, \" replacedBy() running (newCallId=\").concat(newCall.callId, \")\"));\n if (this.state === CallState.WaitLocalMedia) {\n logger.debug(\"Call \".concat(this.callId, \" replacedBy() telling new call to wait for local media (newCallId=\").concat(newCall.callId, \")\"));\n newCall.waitForLocalAVStream = true;\n } else if ([CallState.CreateOffer, CallState.InviteSent].includes(this.state)) {\n if (newCall.direction === CallDirection.Outbound) {\n newCall.queueGotCallFeedsForAnswer([]);\n } else {\n logger.debug(\"Call \".concat(this.callId, \" replacedBy() handing local stream to new call(newCallId=\").concat(newCall.callId, \")\"));\n newCall.queueGotCallFeedsForAnswer(this.getLocalFeeds().map(feed => feed.clone()));\n }\n }\n this.successor = newCall;\n this.emit(CallEvent.Replaced, newCall, this);\n this.hangup(CallErrorCode.Replaced, true);\n }\n\n /**\n * Hangup a call.\n * @param reason - The reason why the call is being hung up.\n * @param suppressEvent - True to suppress emitting an event.\n */\n hangup(reason, suppressEvent) {\n if (this.callHasEnded()) return;\n logger.debug(\"Call \".concat(this.callId, \" hangup() ending call (reason=\").concat(reason, \")\"));\n this.terminate(CallParty.Local, reason, !suppressEvent);\n // We don't want to send hangup here if we didn't even get to sending an invite\n if ([CallState.Fledgling, CallState.WaitLocalMedia].includes(this.state)) return;\n var content = {};\n // Don't send UserHangup reason to older clients\n if (this.opponentVersion && this.opponentVersion !== 0 || reason !== CallErrorCode.UserHangup) {\n content[\"reason\"] = reason;\n }\n this.sendVoipEvent(EventType.CallHangup, content);\n }\n\n /**\n * Reject a call\n * This used to be done by calling hangup, but is a separate method and protocol\n * event as of MSC2746.\n */\n reject() {\n if (this.state !== CallState.Ringing) {\n throw Error(\"Call must be in 'ringing' state to reject!\");\n }\n if (this.opponentVersion === 0) {\n logger.info(\"Call \".concat(this.callId, \" reject() opponent version is less than 1: sending hangup instead of reject (opponentVersion=\").concat(this.opponentVersion, \")\"));\n this.hangup(CallErrorCode.UserHangup, true);\n return;\n }\n logger.debug(\"Rejecting call: \" + this.callId);\n this.terminate(CallParty.Local, CallErrorCode.UserHangup, true);\n this.sendVoipEvent(EventType.CallReject, {});\n }\n\n /**\n * Adds an audio and/or video track - upgrades the call\n * @param audio - should add an audio track\n * @param video - should add an video track\n */\n upgradeCall(audio, video) {\n var _this0 = this;\n return _asyncToGenerator(function* () {\n // We don't do call downgrades\n if (!audio && !video) return;\n if (!_this0.opponentSupportsSDPStreamMetadata()) return;\n try {\n logger.debug(\"Call \".concat(_this0.callId, \" upgradeCall() upgrading call (audio=\").concat(audio, \", video=\").concat(video, \")\"));\n var getAudio = audio || _this0.hasLocalUserMediaAudioTrack;\n var getVideo = video || _this0.hasLocalUserMediaVideoTrack;\n\n // updateLocalUsermediaStream() will take the tracks, use them as\n // replacement and throw the stream away, so it isn't reusable\n var stream = yield _this0.client.getMediaHandler().getUserMediaStream(getAudio, getVideo, false);\n yield _this0.updateLocalUsermediaStream(stream, audio, video);\n } catch (error) {\n logger.error(\"Call \".concat(_this0.callId, \" upgradeCall() failed to upgrade the call\"), error);\n _this0.emit(CallEvent.Error, new CallError(CallErrorCode.NoUserMedia, \"Failed to get camera access: \", error), _this0);\n }\n })();\n }\n\n /**\n * Returns true if this.remoteSDPStreamMetadata is defined, otherwise returns false\n * @returns can screenshare\n */\n opponentSupportsSDPStreamMetadata() {\n return Boolean(this.remoteSDPStreamMetadata);\n }\n\n /**\n * If there is a screensharing stream returns true, otherwise returns false\n * @returns is screensharing\n */\n isScreensharing() {\n return Boolean(this.localScreensharingStream);\n }\n\n /**\n * Starts/stops screensharing\n * @param enabled - the desired screensharing state\n * @param opts - screen sharing options\n * @returns new screensharing state\n */\n setScreensharingEnabled(enabled, opts) {\n var _this1 = this;\n return _asyncToGenerator(function* () {\n // Skip if there is nothing to do\n if (enabled && _this1.isScreensharing()) {\n logger.warn(\"Call \".concat(_this1.callId, \" setScreensharingEnabled() there is already a screensharing stream - there is nothing to do!\"));\n return true;\n } else if (!enabled && !_this1.isScreensharing()) {\n logger.warn(\"Call \".concat(_this1.callId, \" setScreensharingEnabled() there already isn't a screensharing stream - there is nothing to do!\"));\n return false;\n }\n\n // Fallback to replaceTrack()\n if (!_this1.opponentSupportsSDPStreamMetadata()) {\n return _this1.setScreensharingEnabledWithoutMetadataSupport(enabled, opts);\n }\n logger.debug(\"Call \".concat(_this1.callId, \" setScreensharingEnabled() running (enabled=\").concat(enabled, \")\"));\n if (enabled) {\n try {\n var stream = yield _this1.client.getMediaHandler().getScreensharingStream(opts);\n if (!stream) return false;\n _this1.pushNewLocalFeed(stream, SDPStreamMetadataPurpose.Screenshare);\n return true;\n } catch (err) {\n logger.error(\"Call \".concat(_this1.callId, \" setScreensharingEnabled() failed to get screen-sharing stream:\"), err);\n return false;\n }\n } else {\n var audioTransceiver = _this1.transceivers.get(getTransceiverKey(SDPStreamMetadataPurpose.Screenshare, \"audio\"));\n var videoTransceiver = _this1.transceivers.get(getTransceiverKey(SDPStreamMetadataPurpose.Screenshare, \"video\"));\n for (var transceiver of [audioTransceiver, videoTransceiver]) {\n // this is slightly mixing the track and transceiver API but is basically just shorthand\n // for removing the sender.\n if (transceiver && transceiver.sender) _this1.peerConn.removeTrack(transceiver.sender);\n }\n _this1.client.getMediaHandler().stopScreensharingStream(_this1.localScreensharingStream);\n _this1.deleteFeedByStream(_this1.localScreensharingStream);\n return false;\n }\n })();\n }\n\n /**\n * Starts/stops screensharing\n * Should be used ONLY if the opponent doesn't support SDPStreamMetadata\n * @param enabled - the desired screensharing state\n * @param opts - screen sharing options\n * @returns new screensharing state\n */\n setScreensharingEnabledWithoutMetadataSupport(enabled, opts) {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n logger.debug(\"Call \".concat(_this10.callId, \" setScreensharingEnabledWithoutMetadataSupport() running (enabled=\").concat(enabled, \")\"));\n if (enabled) {\n try {\n var _this10$transceivers$;\n var stream = yield _this10.client.getMediaHandler().getScreensharingStream(opts);\n if (!stream) return false;\n var track = stream.getTracks().find(track => track.kind === \"video\");\n var sender = (_this10$transceivers$ = _this10.transceivers.get(getTransceiverKey(SDPStreamMetadataPurpose.Usermedia, \"video\"))) === null || _this10$transceivers$ === void 0 ? void 0 : _this10$transceivers$.sender;\n sender === null || sender === void 0 || sender.replaceTrack(track !== null && track !== void 0 ? track : null);\n _this10.pushNewLocalFeed(stream, SDPStreamMetadataPurpose.Screenshare, false);\n return true;\n } catch (err) {\n logger.error(\"Call \".concat(_this10.callId, \" setScreensharingEnabledWithoutMetadataSupport() failed to get screen-sharing stream:\"), err);\n return false;\n }\n } else {\n var _this10$localUsermedi, _this10$transceivers$2;\n var _track = (_this10$localUsermedi = _this10.localUsermediaStream) === null || _this10$localUsermedi === void 0 ? void 0 : _this10$localUsermedi.getTracks().find(track => track.kind === \"video\");\n var _sender = (_this10$transceivers$2 = _this10.transceivers.get(getTransceiverKey(SDPStreamMetadataPurpose.Usermedia, \"video\"))) === null || _this10$transceivers$2 === void 0 ? void 0 : _this10$transceivers$2.sender;\n _sender === null || _sender === void 0 || _sender.replaceTrack(_track !== null && _track !== void 0 ? _track : null);\n _this10.client.getMediaHandler().stopScreensharingStream(_this10.localScreensharingStream);\n _this10.deleteFeedByStream(_this10.localScreensharingStream);\n return false;\n }\n })();\n }\n\n /**\n * Replaces/adds the tracks from the passed stream to the localUsermediaStream\n * @param stream - to use a replacement for the local usermedia stream\n */\n updateLocalUsermediaStream(stream) {\n var _arguments = arguments,\n _this11 = this;\n return _asyncToGenerator(function* () {\n var forceAudio = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var forceVideo = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : false;\n var callFeed = _this11.localUsermediaFeed;\n var audioEnabled = forceAudio || !callFeed.isAudioMuted() && !_this11.remoteOnHold;\n var videoEnabled = forceVideo || !callFeed.isVideoMuted() && !_this11.remoteOnHold;\n logger.log(\"Call \".concat(_this11.callId, \" updateLocalUsermediaStream() running (streamId=\").concat(stream.id, \", audio=\").concat(audioEnabled, \", video=\").concat(videoEnabled, \")\"));\n setTracksEnabled(stream.getAudioTracks(), audioEnabled);\n setTracksEnabled(stream.getVideoTracks(), videoEnabled);\n\n // We want to keep the same stream id, so we replace the tracks rather\n // than the whole stream.\n\n // Firstly, we replace the tracks in our localUsermediaStream.\n for (var track of _this11.localUsermediaStream.getTracks()) {\n _this11.localUsermediaStream.removeTrack(track);\n track.stop();\n }\n for (var _track2 of stream.getTracks()) {\n _this11.localUsermediaStream.addTrack(_track2);\n }\n\n // Then replace the old tracks, if possible.\n var _loop2 = function* _loop2() {\n var tKey = getTransceiverKey(SDPStreamMetadataPurpose.Usermedia, _track3.kind);\n var transceiver = _this11.transceivers.get(tKey);\n var oldSender = transceiver === null || transceiver === void 0 ? void 0 : transceiver.sender;\n var added = false;\n if (oldSender) {\n try {\n logger.info(\"Call \".concat(_this11.callId, \" updateLocalUsermediaStream() replacing track (id=\").concat(_track3.id, \", kind=\").concat(_track3.kind, \", streamId=\").concat(stream.id, \", streamPurpose=\").concat(callFeed.purpose, \")\"));\n yield oldSender.replaceTrack(_track3);\n // Set the direction to indicate we're going to be sending.\n // This is only necessary in the cases where we're upgrading\n // the call to video after downgrading it.\n transceiver.direction = transceiver.direction === \"inactive\" ? \"sendonly\" : \"sendrecv\";\n added = true;\n } catch (error) {\n logger.warn(\"Call \".concat(_this11.callId, \" updateLocalUsermediaStream() replaceTrack failed: adding new transceiver instead\"), error);\n }\n }\n if (!added) {\n logger.info(\"Call \".concat(_this11.callId, \" updateLocalUsermediaStream() adding track to peer connection (id=\").concat(_track3.id, \", kind=\").concat(_track3.kind, \", streamId=\").concat(stream.id, \", streamPurpose=\").concat(callFeed.purpose, \")\"));\n var newSender = _this11.peerConn.addTrack(_track3, _this11.localUsermediaStream);\n var newTransceiver = _this11.peerConn.getTransceivers().find(t => t.sender === newSender);\n if (newTransceiver) {\n _this11.transceivers.set(tKey, newTransceiver);\n } else {\n logger.warn(\"Call \".concat(_this11.callId, \" updateLocalUsermediaStream() couldn't find matching transceiver for newly added track!\"));\n }\n }\n };\n for (var _track3 of stream.getTracks()) {\n yield* _loop2();\n }\n })();\n }\n\n /**\n * Set whether our outbound video should be muted or not.\n * @param muted - True to mute the outbound video.\n * @returns the new mute state\n */\n setLocalVideoMuted(muted) {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n var _this12$localUsermedi2;\n logger.log(\"Call \".concat(_this12.callId, \" setLocalVideoMuted() running \").concat(muted));\n\n // if we were still thinking about stopping and removing the video\n // track: don't, because we want it back.\n if (!muted && _this12.stopVideoTrackTimer !== undefined) {\n clearTimeout(_this12.stopVideoTrackTimer);\n _this12.stopVideoTrackTimer = undefined;\n }\n if (!(yield _this12.client.getMediaHandler().hasVideoDevice())) {\n return _this12.isLocalVideoMuted();\n }\n if (!_this12.hasUserMediaVideoSender && !muted) {\n var _this12$localUsermedi;\n (_this12$localUsermedi = _this12.localUsermediaFeed) === null || _this12$localUsermedi === void 0 || _this12$localUsermedi.setAudioVideoMuted(null, muted);\n yield _this12.upgradeCall(false, true);\n return _this12.isLocalVideoMuted();\n }\n\n // we may not have a video track - if not, re-request usermedia\n if (!muted && _this12.localUsermediaStream.getVideoTracks().length === 0) {\n var stream = yield _this12.client.getMediaHandler().getUserMediaStream(true, true);\n yield _this12.updateLocalUsermediaStream(stream);\n }\n (_this12$localUsermedi2 = _this12.localUsermediaFeed) === null || _this12$localUsermedi2 === void 0 || _this12$localUsermedi2.setAudioVideoMuted(null, muted);\n _this12.updateMuteStatus();\n yield _this12.sendMetadataUpdate();\n\n // if we're muting video, set a timeout to stop & remove the video track so we release\n // the camera. We wait a short time to do this because when we disable a track, WebRTC\n // will send black video for it. If we just stop and remove it straight away, the video\n // will just freeze which means that when we unmute video, the other side will briefly\n // get a static frame of us from before we muted. This way, the still frame is just black.\n // A very small delay is not always enough so the theory here is that it needs to be long\n // enough for WebRTC to encode a frame: 120ms should be long enough even if we're only\n // doing 10fps.\n if (muted) {\n _this12.stopVideoTrackTimer = setTimeout(() => {\n for (var t of _this12.localUsermediaStream.getVideoTracks()) {\n t.stop();\n _this12.localUsermediaStream.removeTrack(t);\n }\n }, 120);\n }\n return _this12.isLocalVideoMuted();\n })();\n }\n\n /**\n * Check if local video is muted.\n *\n * If there are multiple video tracks, <i>all</i> of the tracks need to be muted\n * for this to return true. This means if there are no video tracks, this will\n * return true.\n * @returns True if the local preview video is muted, else false\n * (including if the call is not set up yet).\n */\n isLocalVideoMuted() {\n var _this$localUsermediaF2, _this$localUsermediaF3;\n return (_this$localUsermediaF2 = (_this$localUsermediaF3 = this.localUsermediaFeed) === null || _this$localUsermediaF3 === void 0 ? void 0 : _this$localUsermediaF3.isVideoMuted()) !== null && _this$localUsermediaF2 !== void 0 ? _this$localUsermediaF2 : false;\n }\n\n /**\n * Set whether the microphone should be muted or not.\n * @param muted - True to mute the mic.\n * @returns the new mute state\n */\n setMicrophoneMuted(muted) {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n var _this13$localUsermedi;\n logger.log(\"Call \".concat(_this13.callId, \" setMicrophoneMuted() running \").concat(muted));\n if (!(yield _this13.client.getMediaHandler().hasAudioDevice())) {\n return _this13.isMicrophoneMuted();\n }\n if (!muted && (!_this13.hasUserMediaAudioSender || !_this13.hasLocalUserMediaAudioTrack)) {\n yield _this13.upgradeCall(true, false);\n return _this13.isMicrophoneMuted();\n }\n (_this13$localUsermedi = _this13.localUsermediaFeed) === null || _this13$localUsermedi === void 0 || _this13$localUsermedi.setAudioVideoMuted(muted, null);\n _this13.updateMuteStatus();\n yield _this13.sendMetadataUpdate();\n return _this13.isMicrophoneMuted();\n })();\n }\n\n /**\n * Check if the microphone is muted.\n *\n * If there are multiple audio tracks, <i>all</i> of the tracks need to be muted\n * for this to return true. This means if there are no audio tracks, this will\n * return true.\n * @returns True if the mic is muted, else false (including if the call\n * is not set up yet).\n */\n isMicrophoneMuted() {\n var _this$localUsermediaF4, _this$localUsermediaF5;\n return (_this$localUsermediaF4 = (_this$localUsermediaF5 = this.localUsermediaFeed) === null || _this$localUsermediaF5 === void 0 ? void 0 : _this$localUsermediaF5.isAudioMuted()) !== null && _this$localUsermediaF4 !== void 0 ? _this$localUsermediaF4 : false;\n }\n\n /**\n * @returns true if we have put the party on the other side of the call on hold\n * (that is, we are signalling to them that we are not listening)\n */\n isRemoteOnHold() {\n return this.remoteOnHold;\n }\n setRemoteOnHold(onHold) {\n if (this.isRemoteOnHold() === onHold) return;\n this.remoteOnHold = onHold;\n for (var transceiver of this.peerConn.getTransceivers()) {\n // We don't send hold music or anything so we're not actually\n // sending anything, but sendrecv is fairly standard for hold and\n // it makes it a lot easier to figure out who's put who on hold.\n transceiver.direction = onHold ? \"sendonly\" : \"sendrecv\";\n }\n this.updateMuteStatus();\n this.sendMetadataUpdate();\n this.emit(CallEvent.RemoteHoldUnhold, this.remoteOnHold, this);\n }\n\n /**\n * Indicates whether we are 'on hold' to the remote party (ie. if true,\n * they cannot hear us).\n * @returns true if the other party has put us on hold\n */\n isLocalOnHold() {\n if (this.state !== CallState.Connected) return false;\n var callOnHold = true;\n\n // We consider a call to be on hold only if *all* the tracks are on hold\n // (is this the right thing to do?)\n for (var transceiver of this.peerConn.getTransceivers()) {\n var trackOnHold = [\"inactive\", \"recvonly\"].includes(transceiver.currentDirection);\n if (!trackOnHold) callOnHold = false;\n }\n return callOnHold;\n }\n\n /**\n * Sends a DTMF digit to the other party\n * @param digit - The digit (nb. string - '#' and '*' are dtmf too)\n */\n sendDtmfDigit(digit) {\n for (var sender of this.peerConn.getSenders()) {\n var _sender$track;\n if (((_sender$track = sender.track) === null || _sender$track === void 0 ? void 0 : _sender$track.kind) === \"audio\" && sender.dtmf) {\n sender.dtmf.insertDTMF(digit);\n return;\n }\n }\n throw new Error(\"Unable to find a track to send DTMF on\");\n }\n updateMuteStatus() {\n var micShouldBeMuted = this.isMicrophoneMuted() || this.remoteOnHold;\n var vidShouldBeMuted = this.isLocalVideoMuted() || this.remoteOnHold;\n logger.log(\"Call \".concat(this.callId, \" updateMuteStatus stream \").concat(this.localUsermediaStream.id, \" micShouldBeMuted \").concat(micShouldBeMuted, \" vidShouldBeMuted \").concat(vidShouldBeMuted));\n setTracksEnabled(this.localUsermediaStream.getAudioTracks(), !micShouldBeMuted);\n setTracksEnabled(this.localUsermediaStream.getVideoTracks(), !vidShouldBeMuted);\n }\n sendMetadataUpdate() {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n yield _this14.sendVoipEvent(EventType.CallSDPStreamMetadataChanged, {\n [SDPStreamMetadataKey.name]: _this14.getLocalSDPStreamMetadata()\n });\n })();\n }\n gotCallFeedsForInvite(callFeeds) {\n var requestScreenshareFeed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (this.successor) {\n this.successor.queueGotCallFeedsForAnswer(callFeeds);\n return;\n }\n if (this.callHasEnded()) {\n this.stopAllMedia();\n return;\n }\n for (var feed of callFeeds) {\n this.pushLocalFeed(feed);\n }\n if (requestScreenshareFeed) {\n this.peerConn.addTransceiver(\"video\", {\n direction: \"recvonly\"\n });\n }\n this.state = CallState.CreateOffer;\n logger.debug(\"Call \".concat(this.callId, \" gotUserMediaForInvite() run\"));\n // Now we wait for the negotiationneeded event\n }\n sendAnswer() {\n var _this15 = this;\n return _asyncToGenerator(function* () {\n var answerContent = {\n answer: {\n sdp: _this15.peerConn.localDescription.sdp,\n // type is now deprecated as of Matrix VoIP v1, but\n // required to still be sent for backwards compat\n type: _this15.peerConn.localDescription.type\n },\n [SDPStreamMetadataKey.name]: _this15.getLocalSDPStreamMetadata(true)\n };\n answerContent.capabilities = {\n \"m.call.transferee\": _this15.client.supportsCallTransfer,\n \"m.call.dtmf\": false\n };\n\n // We have just taken the local description from the peerConn which will\n // contain all the local candidates added so far, so we can discard any candidates\n // we had queued up because they'll be in the answer.\n var discardCount = _this15.discardDuplicateCandidates();\n logger.info(\"Call \".concat(_this15.callId, \" sendAnswer() discarding \").concat(discardCount, \" candidates that will be sent in answer\"));\n try {\n yield _this15.sendVoipEvent(EventType.CallAnswer, answerContent);\n // If this isn't the first time we've tried to send the answer,\n // we may have candidates queued up, so send them now.\n _this15.inviteOrAnswerSent = true;\n } catch (error) {\n // We've failed to answer: back to the ringing state\n _this15.state = CallState.Ringing;\n if (error instanceof MatrixError && error.event) _this15.client.cancelPendingEvent(error.event);\n var code = CallErrorCode.SendAnswer;\n var message = \"Failed to send answer\";\n if (error.name == \"UnknownDeviceError\") {\n code = CallErrorCode.UnknownDevices;\n message = \"Unknown devices present in the room\";\n }\n _this15.emit(CallEvent.Error, new CallError(code, message, error), _this15);\n throw error;\n }\n\n // error handler re-throws so this won't happen on error, but\n // we don't want the same error handling on the candidate queue\n _this15.sendCandidateQueue();\n })();\n }\n queueGotCallFeedsForAnswer(callFeeds) {\n // Ensure only one negotiate/answer event is being processed at a time.\n if (this.responsePromiseChain) {\n this.responsePromiseChain = this.responsePromiseChain.then(() => this.gotCallFeedsForAnswer(callFeeds));\n } else {\n this.responsePromiseChain = this.gotCallFeedsForAnswer(callFeeds);\n }\n }\n\n // Enables DTX (discontinuous transmission) on the given session to reduce\n // bandwidth when transmitting silence\n mungeSdp(description, mods) {\n // The only way to enable DTX at this time is through SDP munging\n var sdp = parseSdp(description.sdp);\n sdp.media.forEach(media => {\n var payloadTypeToCodecMap = new Map();\n var codecToPayloadTypeMap = new Map();\n for (var rtp of media.rtp) {\n payloadTypeToCodecMap.set(rtp.payload, rtp.codec);\n codecToPayloadTypeMap.set(rtp.codec, rtp.payload);\n }\n for (var mod of mods) {\n if (mod.mediaType !== media.type) continue;\n if (!codecToPayloadTypeMap.has(mod.codec)) {\n logger.info(\"Call \".concat(this.callId, \" mungeSdp() ignoring SDP modifications for \").concat(mod.codec, \" as it's not present.\"));\n continue;\n }\n var extraConfig = [];\n if (mod.enableDtx !== undefined) {\n extraConfig.push(\"usedtx=\".concat(mod.enableDtx ? \"1\" : \"0\"));\n }\n if (mod.maxAverageBitrate !== undefined) {\n extraConfig.push(\"maxaveragebitrate=\".concat(mod.maxAverageBitrate));\n }\n var found = false;\n for (var fmtp of media.fmtp) {\n if (payloadTypeToCodecMap.get(fmtp.payload) === mod.codec) {\n found = true;\n fmtp.config += \";\" + extraConfig.join(\";\");\n }\n }\n if (!found) {\n media.fmtp.push({\n payload: codecToPayloadTypeMap.get(mod.codec),\n config: extraConfig.join(\";\")\n });\n }\n }\n });\n description.sdp = writeSdp(sdp);\n }\n createOffer() {\n var _this16 = this;\n return _asyncToGenerator(function* () {\n var offer = yield _this16.peerConn.createOffer();\n _this16.mungeSdp(offer, getCodecParamMods(_this16.isPtt));\n return offer;\n })();\n }\n createAnswer() {\n var _this17 = this;\n return _asyncToGenerator(function* () {\n var answer = yield _this17.peerConn.createAnswer();\n _this17.mungeSdp(answer, getCodecParamMods(_this17.isPtt));\n return answer;\n })();\n }\n gotCallFeedsForAnswer(callFeeds) {\n var _this18 = this;\n return _asyncToGenerator(function* () {\n if (_this18.callHasEnded()) return;\n _this18.waitForLocalAVStream = false;\n for (var feed of callFeeds) {\n _this18.pushLocalFeed(feed);\n }\n _this18.state = CallState.CreateAnswer;\n var answer;\n try {\n _this18.getRidOfRTXCodecs();\n answer = yield _this18.createAnswer();\n } catch (err) {\n logger.debug(\"Call \".concat(_this18.callId, \" gotCallFeedsForAnswer() failed to create answer: \"), err);\n _this18.terminate(CallParty.Local, CallErrorCode.CreateAnswer, true);\n return;\n }\n try {\n yield _this18.peerConn.setLocalDescription(answer);\n\n // make sure we're still going\n if (_this18.callHasEnded()) return;\n _this18.state = CallState.Connecting;\n\n // Allow a short time for initial candidates to be gathered\n yield new Promise(resolve => {\n setTimeout(resolve, 200);\n });\n\n // make sure the call hasn't ended before we continue\n if (_this18.callHasEnded()) return;\n _this18.sendAnswer();\n } catch (err) {\n logger.debug(\"Call \".concat(_this18.callId, \" gotCallFeedsForAnswer() error setting local description!\"), err);\n _this18.terminate(CallParty.Local, CallErrorCode.SetLocalDescription, true);\n return;\n }\n })();\n }\n onRemoteIceCandidatesReceived(ev) {\n var _this19 = this;\n return _asyncToGenerator(function* () {\n if (_this19.callHasEnded()) {\n //debuglog(\"Ignoring remote ICE candidate because call has ended\");\n return;\n }\n var content = ev.getContent();\n var candidates = content.candidates;\n if (!candidates) {\n logger.info(\"Call \".concat(_this19.callId, \" onRemoteIceCandidatesReceived() ignoring candidates event with no candidates!\"));\n return;\n }\n var fromPartyId = content.version === 0 ? null : content.party_id || null;\n if (_this19.opponentPartyId === undefined) {\n // we haven't picked an opponent yet so save the candidates\n if (fromPartyId) {\n logger.info(\"Call \".concat(_this19.callId, \" onRemoteIceCandidatesReceived() buffering \").concat(candidates.length, \" candidates until we pick an opponent\"));\n var bufferedCandidates = _this19.remoteCandidateBuffer.get(fromPartyId) || [];\n bufferedCandidates.push(...candidates);\n _this19.remoteCandidateBuffer.set(fromPartyId, bufferedCandidates);\n }\n return;\n }\n if (!_this19.partyIdMatches(content)) {\n logger.info(\"Call \".concat(_this19.callId, \" onRemoteIceCandidatesReceived() ignoring candidates from party ID \").concat(content.party_id, \": we have chosen party ID \").concat(_this19.opponentPartyId));\n return;\n }\n yield _this19.addIceCandidates(candidates);\n })();\n }\n\n /**\n * Used by MatrixClient.\n */\n onAnswerReceived(event) {\n var _this20 = this;\n return _asyncToGenerator(function* () {\n var content = event.getContent();\n logger.debug(\"Call \".concat(_this20.callId, \" onAnswerReceived() running (hangupParty=\").concat(content.party_id, \")\"));\n if (_this20.callHasEnded()) {\n logger.debug(\"Call \".concat(_this20.callId, \" onAnswerReceived() ignoring answer because call has ended\"));\n return;\n }\n if (_this20.opponentPartyId !== undefined) {\n logger.info(\"Call \".concat(_this20.callId, \" onAnswerReceived() ignoring answer from party ID \").concat(content.party_id, \": we already have an answer/reject from \").concat(_this20.opponentPartyId));\n return;\n }\n _this20.chooseOpponent(event);\n yield _this20.addBufferedIceCandidates();\n _this20.state = CallState.Connecting;\n var sdpStreamMetadata = SDPStreamMetadataKey.findIn(content);\n if (sdpStreamMetadata) {\n _this20.updateRemoteSDPStreamMetadata(sdpStreamMetadata);\n } else {\n logger.warn(\"Call \".concat(_this20.callId, \" onAnswerReceived() did not get any SDPStreamMetadata! Can not send/receive multiple streams\"));\n }\n try {\n _this20.isSettingRemoteAnswerPending = true;\n yield _this20.peerConn.setRemoteDescription(content.answer);\n _this20.isSettingRemoteAnswerPending = false;\n logger.debug(\"Call \".concat(_this20.callId, \" onAnswerReceived() set remote description: \").concat(content.answer.type));\n } catch (e) {\n _this20.isSettingRemoteAnswerPending = false;\n logger.debug(\"Call \".concat(_this20.callId, \" onAnswerReceived() failed to set remote description\"), e);\n _this20.terminate(CallParty.Local, CallErrorCode.SetRemoteDescription, false);\n return;\n }\n\n // If the answer we selected has a party_id, send a select_answer event\n // We do this after setting the remote description since otherwise we'd block\n // call setup on it\n if (_this20.opponentPartyId !== null) {\n try {\n yield _this20.sendVoipEvent(EventType.CallSelectAnswer, {\n selected_party_id: _this20.opponentPartyId\n });\n } catch (err) {\n // This isn't fatal, and will just mean that if another party has raced to answer\n // the call, they won't know they got rejected, so we carry on & don't retry.\n logger.warn(\"Call \".concat(_this20.callId, \" onAnswerReceived() failed to send select_answer event\"), err);\n }\n }\n })();\n }\n onSelectAnswerReceived(event) {\n var _this21 = this;\n return _asyncToGenerator(function* () {\n if (_this21.direction !== CallDirection.Inbound) {\n logger.warn(\"Call \".concat(_this21.callId, \" onSelectAnswerReceived() got select_answer for an outbound call: ignoring\"));\n return;\n }\n var selectedPartyId = event.getContent().selected_party_id;\n if (selectedPartyId === undefined || selectedPartyId === null) {\n logger.warn(\"Call \".concat(_this21.callId, \" onSelectAnswerReceived() got nonsensical select_answer with null/undefined selected_party_id: ignoring\"));\n return;\n }\n if (selectedPartyId !== _this21.ourPartyId) {\n logger.info(\"Call \".concat(_this21.callId, \" onSelectAnswerReceived() got select_answer for party ID \").concat(selectedPartyId, \": we are party ID \").concat(_this21.ourPartyId, \".\"));\n // The other party has picked somebody else's answer\n yield _this21.terminate(CallParty.Remote, CallErrorCode.AnsweredElsewhere, true);\n }\n })();\n }\n onNegotiateReceived(event) {\n var _this22 = this;\n return _asyncToGenerator(function* () {\n var content = event.getContent();\n var description = content.description;\n if (!description || !description.sdp || !description.type) {\n logger.info(\"Call \".concat(_this22.callId, \" onNegotiateReceived() ignoring invalid m.call.negotiate event\"));\n return;\n }\n // Politeness always follows the direction of the call: in a glare situation,\n // we pick either the inbound or outbound call, so one side will always be\n // inbound and one outbound\n var polite = _this22.direction === CallDirection.Inbound;\n\n // Here we follow the perfect negotiation logic from\n // https://w3c.github.io/webrtc-pc/#perfect-negotiation-example\n var readyForOffer = !_this22.makingOffer && (_this22.peerConn.signalingState === \"stable\" || _this22.isSettingRemoteAnswerPending);\n var offerCollision = description.type === \"offer\" && !readyForOffer;\n _this22.ignoreOffer = !polite && offerCollision;\n if (_this22.ignoreOffer) {\n logger.info(\"Call \".concat(_this22.callId, \" onNegotiateReceived() ignoring colliding negotiate event because we're impolite\"));\n return;\n }\n var prevLocalOnHold = _this22.isLocalOnHold();\n var sdpStreamMetadata = SDPStreamMetadataKey.findIn(content);\n if (sdpStreamMetadata) {\n _this22.updateRemoteSDPStreamMetadata(sdpStreamMetadata);\n } else {\n logger.warn(\"Call \".concat(_this22.callId, \" onNegotiateReceived() received negotiation event without SDPStreamMetadata!\"));\n }\n try {\n _this22.isSettingRemoteAnswerPending = description.type == \"answer\";\n yield _this22.peerConn.setRemoteDescription(description); // SRD rolls back as needed\n _this22.isSettingRemoteAnswerPending = false;\n logger.debug(\"Call \".concat(_this22.callId, \" onNegotiateReceived() set remote description: \").concat(description.type));\n if (description.type === \"offer\") {\n var _localDescription;\n var answer;\n try {\n _this22.getRidOfRTXCodecs();\n answer = yield _this22.createAnswer();\n } catch (err) {\n logger.debug(\"Call \".concat(_this22.callId, \" onNegotiateReceived() failed to create answer: \"), err);\n _this22.terminate(CallParty.Local, CallErrorCode.CreateAnswer, true);\n return;\n }\n yield _this22.peerConn.setLocalDescription(answer);\n logger.debug(\"Call \".concat(_this22.callId, \" onNegotiateReceived() create an answer\"));\n _this22.sendVoipEvent(EventType.CallNegotiate, {\n lifetime: CALL_TIMEOUT_MS,\n description: (_localDescription = _this22.peerConn.localDescription) === null || _localDescription === void 0 ? void 0 : _localDescription.toJSON(),\n [SDPStreamMetadataKey.name]: _this22.getLocalSDPStreamMetadata(true)\n });\n }\n } catch (err) {\n _this22.isSettingRemoteAnswerPending = false;\n logger.warn(\"Call \".concat(_this22.callId, \" onNegotiateReceived() failed to complete negotiation\"), err);\n }\n var newLocalOnHold = _this22.isLocalOnHold();\n if (prevLocalOnHold !== newLocalOnHold) {\n _this22.emit(CallEvent.LocalHoldUnhold, newLocalOnHold, _this22);\n // also this one for backwards compat\n _this22.emit(CallEvent.HoldUnhold, newLocalOnHold);\n }\n })();\n }\n updateRemoteSDPStreamMetadata(metadata) {\n this.remoteSDPStreamMetadata = recursivelyAssign(this.remoteSDPStreamMetadata || {}, metadata, true);\n for (var feed of this.getRemoteFeeds()) {\n var _streamId;\n var streamId = feed.stream.id;\n var _metadata = this.remoteSDPStreamMetadata[streamId];\n feed.setAudioVideoMuted(_metadata === null || _metadata === void 0 ? void 0 : _metadata.audio_muted, _metadata === null || _metadata === void 0 ? void 0 : _metadata.video_muted);\n feed.purpose = (_streamId = this.remoteSDPStreamMetadata[streamId]) === null || _streamId === void 0 ? void 0 : _streamId.purpose;\n }\n }\n onSDPStreamMetadataChangedReceived(event) {\n var content = event.getContent();\n var metadata = SDPStreamMetadataKey.findIn(content);\n if (metadata) {\n this.updateRemoteSDPStreamMetadata(metadata);\n }\n }\n onAssertedIdentityReceived(event) {\n var _this23 = this;\n return _asyncToGenerator(function* () {\n var content = event.getContent();\n if (!content.asserted_identity) return;\n _this23.remoteAssertedIdentity = {\n id: content.asserted_identity.id,\n displayName: content.asserted_identity.display_name\n };\n _this23.emit(CallEvent.AssertedIdentityChanged, _this23);\n })();\n }\n callHasEnded() {\n // This exists as workaround to typescript trying to be clever and erroring\n // when putting if (this.state === CallState.Ended) return; twice in the same\n // function, even though that function is async.\n return this.state === CallState.Ended;\n }\n queueGotLocalOffer() {\n // Ensure only one negotiate/answer event is being processed at a time.\n if (this.responsePromiseChain) {\n this.responsePromiseChain = this.responsePromiseChain.then(() => this.wrappedGotLocalOffer());\n } else {\n this.responsePromiseChain = this.wrappedGotLocalOffer();\n }\n }\n wrappedGotLocalOffer() {\n var _this24 = this;\n return _asyncToGenerator(function* () {\n _this24.makingOffer = true;\n try {\n // XXX: in what situations do we believe gotLocalOffer actually throws? It appears\n // to handle most of its exceptions itself and terminate the call. I'm not entirely\n // sure it would ever throw, so I can't add a test for these lines.\n // Also the tense is different between \"gotLocalOffer\" and \"getLocalOfferFailed\" so\n // it's not entirely clear whether getLocalOfferFailed is just misnamed or whether\n // they've been cross-polinated somehow at some point.\n yield _this24.gotLocalOffer();\n } catch (e) {\n _this24.getLocalOfferFailed(e);\n return;\n } finally {\n _this24.makingOffer = false;\n }\n })();\n }\n gotLocalOffer() {\n var _this25 = this;\n return _asyncToGenerator(function* () {\n logger.debug(\"Call \".concat(_this25.callId, \" gotLocalOffer() running\"));\n if (_this25.callHasEnded()) {\n logger.debug(\"Call \".concat(_this25.callId, \" gotLocalOffer() ignoring newly created offer because the call has ended\\\"\"));\n return;\n }\n var offer;\n try {\n _this25.getRidOfRTXCodecs();\n offer = yield _this25.createOffer();\n } catch (err) {\n logger.debug(\"Call \".concat(_this25.callId, \" gotLocalOffer() failed to create offer: \"), err);\n _this25.terminate(CallParty.Local, CallErrorCode.CreateOffer, true);\n return;\n }\n try {\n yield _this25.peerConn.setLocalDescription(offer);\n } catch (err) {\n logger.debug(\"Call \".concat(_this25.callId, \" gotLocalOffer() error setting local description!\"), err);\n _this25.terminate(CallParty.Local, CallErrorCode.SetLocalDescription, true);\n return;\n }\n if (_this25.peerConn.iceGatheringState === \"gathering\") {\n // Allow a short time for initial candidates to be gathered\n yield new Promise(resolve => {\n setTimeout(resolve, 200);\n });\n }\n if (_this25.callHasEnded()) return;\n var eventType = _this25.state === CallState.CreateOffer ? EventType.CallInvite : EventType.CallNegotiate;\n var content = {\n lifetime: CALL_TIMEOUT_MS\n };\n if (eventType === EventType.CallInvite && _this25.invitee) {\n content.invitee = _this25.invitee;\n }\n\n // clunky because TypeScript can't follow the types through if we use an expression as the key\n if (_this25.state === CallState.CreateOffer) {\n var _localDescription2;\n content.offer = (_localDescription2 = _this25.peerConn.localDescription) === null || _localDescription2 === void 0 ? void 0 : _localDescription2.toJSON();\n } else {\n var _localDescription3;\n content.description = (_localDescription3 = _this25.peerConn.localDescription) === null || _localDescription3 === void 0 ? void 0 : _localDescription3.toJSON();\n }\n content.capabilities = {\n \"m.call.transferee\": _this25.client.supportsCallTransfer,\n \"m.call.dtmf\": false\n };\n content[SDPStreamMetadataKey.name] = _this25.getLocalSDPStreamMetadata(true);\n\n // Get rid of any candidates waiting to be sent: they'll be included in the local\n // description we just got and will send in the offer.\n var discardCount = _this25.discardDuplicateCandidates();\n logger.info(\"Call \".concat(_this25.callId, \" gotLocalOffer() discarding \").concat(discardCount, \" candidates that will be sent in offer\"));\n try {\n yield _this25.sendVoipEvent(eventType, content);\n } catch (error) {\n logger.error(\"Call \".concat(_this25.callId, \" gotLocalOffer() failed to send invite\"), error);\n if (error instanceof MatrixError && error.event) _this25.client.cancelPendingEvent(error.event);\n var code = CallErrorCode.SignallingFailed;\n var message = \"Signalling failed\";\n if (_this25.state === CallState.CreateOffer) {\n code = CallErrorCode.SendInvite;\n message = \"Failed to send invite\";\n }\n if (error.name == \"UnknownDeviceError\") {\n code = CallErrorCode.UnknownDevices;\n message = \"Unknown devices present in the room\";\n }\n _this25.emit(CallEvent.Error, new CallError(code, message, error), _this25);\n _this25.terminate(CallParty.Local, code, false);\n\n // no need to carry on & send the candidate queue, but we also\n // don't want to rethrow the error\n return;\n }\n _this25.sendCandidateQueue();\n if (_this25.state === CallState.CreateOffer) {\n _this25.inviteOrAnswerSent = true;\n _this25.state = CallState.InviteSent;\n _this25.inviteTimeout = setTimeout(() => {\n _this25.inviteTimeout = undefined;\n if (_this25.state === CallState.InviteSent) {\n _this25.hangup(CallErrorCode.InviteTimeout, false);\n }\n }, CALL_TIMEOUT_MS);\n }\n })();\n }\n /**\n * This method removes all video/rtx codecs from screensharing video\n * transceivers. This is necessary since they can cause problems. Without\n * this the following steps should produce an error:\n * Chromium calls Firefox\n * Firefox answers\n * Firefox starts screen-sharing\n * Chromium starts screen-sharing\n * Call crashes for Chromium with:\n * [96685:23:0518/162603.933321:ERROR:webrtc_video_engine.cc(3296)] RTX codec (PT=97) mapped to PT=96 which is not in the codec list.\n * [96685:23:0518/162603.933377:ERROR:webrtc_video_engine.cc(1171)] GetChangedRecvParameters called without any video codecs.\n * [96685:23:0518/162603.933430:ERROR:sdp_offer_answer.cc(4302)] Failed to set local video description recv parameters for m-section with mid='2'. (INVALID_PARAMETER)\n */\n getRidOfRTXCodecs() {\n // RTCRtpReceiver.getCapabilities and RTCRtpSender.getCapabilities don't seem to be supported on FF before v113\n if (!RTCRtpReceiver.getCapabilities || !RTCRtpSender.getCapabilities) return;\n var screenshareVideoTransceiver = this.transceivers.get(getTransceiverKey(SDPStreamMetadataPurpose.Screenshare, \"video\"));\n\n // setCodecPreferences isn't supported on FF (as of v113)\n if (!screenshareVideoTransceiver || !screenshareVideoTransceiver.setCodecPreferences) return;\n var recvCodecs = RTCRtpReceiver.getCapabilities(\"video\").codecs;\n var sendCodecs = RTCRtpSender.getCapabilities(\"video\").codecs;\n var codecs = [];\n for (var codec of [...recvCodecs, ...sendCodecs]) {\n if (codec.mimeType !== \"video/rtx\") {\n codecs.push(codec);\n try {\n screenshareVideoTransceiver.setCodecPreferences(codecs);\n } catch (e) {\n // Specifically, Chrome around version 125 and Electron 30 (which is Chromium 124) return an H.264 codec in\n // the sender's capabilities but throw when you try to set it. Hence... this mess.\n // Specifically, that codec is:\n // {\n // clockRate: 90000,\n // mimeType: \"video/H264\",\n // sdpFmtpLine: \"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640034\",\n // }\n logger.info(\"Working around buggy WebRTC impl: claimed to support codec but threw when setting codec preferences\", codec, e);\n codecs.pop();\n }\n }\n }\n }\n /**\n * @internal\n */\n sendVoipEvent(eventType, content) {\n var _this26 = this;\n return _asyncToGenerator(function* () {\n var realContent = _objectSpread(_objectSpread({}, content), {}, {\n version: VOIP_PROTO_VERSION,\n call_id: _this26.callId,\n party_id: _this26.ourPartyId,\n conf_id: _this26.groupCallId\n });\n if (_this26.opponentDeviceId) {\n var _this26$getOpponentMe;\n var toDeviceSeq = _this26.toDeviceSeq++;\n var _content = _objectSpread(_objectSpread({}, realContent), {}, {\n device_id: _this26.client.deviceId,\n sender_session_id: _this26.client.getSessionId(),\n dest_session_id: _this26.opponentSessionId,\n seq: toDeviceSeq,\n [ToDeviceMessageId]: globalThis.crypto.randomUUID()\n });\n _this26.emit(CallEvent.SendVoipEvent, {\n type: \"toDevice\",\n eventType,\n userId: _this26.invitee || ((_this26$getOpponentMe = _this26.getOpponentMember()) === null || _this26$getOpponentMe === void 0 ? void 0 : _this26$getOpponentMe.userId),\n opponentDeviceId: _this26.opponentDeviceId,\n content: _content\n }, _this26);\n var userId = _this26.invitee || _this26.getOpponentMember().userId;\n if (_this26.client.getUseE2eForGroupCall()) {\n if (!_this26.hasOpponentDeviceInfo) {\n logger.warn(\"Call \".concat(_this26.callId, \" sendVoipEvent() failed: we do not have opponentDeviceInfo\"));\n return;\n }\n\n // TODO: Here we were sending the event to the opponent's device as a to-device message with MatrixClient.encryptAndSendToDevice.\n // However due to the switch to Rust cryptography we need to migrate to the new encryptToDeviceMessages API.\n throw new Error(\"Unimplemented\");\n } else {\n yield _this26.client.sendToDevice(eventType, new Map([[userId, new Map([[_this26.opponentDeviceId, _content]])]]));\n }\n } else {\n var _this26$getOpponentMe2;\n _this26.emit(CallEvent.SendVoipEvent, {\n type: \"sendEvent\",\n eventType,\n roomId: _this26.roomId,\n content: realContent,\n userId: _this26.invitee || ((_this26$getOpponentMe2 = _this26.getOpponentMember()) === null || _this26$getOpponentMe2 === void 0 ? void 0 : _this26$getOpponentMe2.userId)\n }, _this26);\n yield _this26.client.sendEvent(_this26.roomId, eventType, realContent);\n }\n })();\n }\n\n /**\n * Queue a candidate to be sent\n * @param content - The candidate to queue up, or null if candidates have finished being generated\n * and end-of-candidates should be signalled\n */\n queueCandidate(content) {\n // We partially de-trickle candidates by waiting for `delay` before sending them\n // amalgamated, in order to avoid sending too many m.call.candidates events and hitting\n // rate limits in Matrix.\n // In practice, it'd be better to remove rate limits for m.call.*\n\n // N.B. this deliberately lets you queue and send blank candidates, which MSC2746\n // currently proposes as the way to indicate that candidate gathering is complete.\n // This will hopefully be changed to an explicit rather than implicit notification\n // shortly.\n if (content) {\n this.candidateSendQueue.push(content);\n } else {\n this.candidatesEnded = true;\n }\n\n // Don't send the ICE candidates yet if the call is in the ringing state: this\n // means we tried to pick (ie. started generating candidates) and then failed to\n // send the answer and went back to the ringing state. Queue up the candidates\n // to send if we successfully send the answer.\n // Equally don't send if we haven't yet sent the answer because we can send the\n // first batch of candidates along with the answer\n if (this.state === CallState.Ringing || !this.inviteOrAnswerSent) return;\n\n // MSC2746 recommends these values (can be quite long when calling because the\n // callee will need a while to answer the call)\n var delay = this.direction === CallDirection.Inbound ? 500 : 2000;\n if (this.candidateSendTries === 0) {\n setTimeout(() => {\n this.sendCandidateQueue();\n }, delay);\n }\n }\n\n // Discard all non-end-of-candidates messages\n // Return the number of candidate messages that were discarded.\n // Call this method before sending an invite or answer message\n discardDuplicateCandidates() {\n var discardCount = 0;\n var newQueue = [];\n for (var i = 0; i < this.candidateSendQueue.length; i++) {\n var candidate = this.candidateSendQueue[i];\n if (candidate.candidate === \"\") {\n newQueue.push(candidate);\n } else {\n discardCount++;\n }\n }\n this.candidateSendQueue = newQueue;\n return discardCount;\n }\n\n /*\n * Transfers this call to another user\n */\n transfer(targetUserId) {\n var _this27 = this;\n return _asyncToGenerator(function* () {\n // Fetch the target user's global profile info: their room avatar / displayname\n // could be different in whatever room we share with them.\n var profileInfo = yield _this27.client.getProfileInfo(targetUserId);\n var replacementId = genCallID();\n var body = {\n replacement_id: genCallID(),\n target_user: {\n id: targetUserId,\n display_name: profileInfo.displayname,\n avatar_url: profileInfo.avatar_url\n },\n create_call: replacementId\n };\n yield _this27.sendVoipEvent(EventType.CallReplaces, body);\n yield _this27.terminate(CallParty.Local, CallErrorCode.Transferred, true);\n })();\n }\n\n /*\n * Transfers this call to the target call, effectively 'joining' the\n * two calls (so the remote parties on each call are connected together).\n */\n transferToCall(transferTargetCall) {\n var _this28 = this;\n return _asyncToGenerator(function* () {\n var _transferTargetCall$g, _this28$getOpponentMe;\n var targetUserId = (_transferTargetCall$g = transferTargetCall.getOpponentMember()) === null || _transferTargetCall$g === void 0 ? void 0 : _transferTargetCall$g.userId;\n var targetProfileInfo = targetUserId ? yield _this28.client.getProfileInfo(targetUserId) : undefined;\n var opponentUserId = (_this28$getOpponentMe = _this28.getOpponentMember()) === null || _this28$getOpponentMe === void 0 ? void 0 : _this28$getOpponentMe.userId;\n var transfereeProfileInfo = opponentUserId ? yield _this28.client.getProfileInfo(opponentUserId) : undefined;\n var newCallId = genCallID();\n var bodyToTransferTarget = {\n // the replacements on each side have their own ID, and it's distinct from the\n // ID of the new call (but we can use the same function to generate it)\n replacement_id: genCallID(),\n target_user: {\n id: opponentUserId,\n display_name: transfereeProfileInfo === null || transfereeProfileInfo === void 0 ? void 0 : transfereeProfileInfo.displayname,\n avatar_url: transfereeProfileInfo === null || transfereeProfileInfo === void 0 ? void 0 : transfereeProfileInfo.avatar_url\n },\n await_call: newCallId\n };\n yield transferTargetCall.sendVoipEvent(EventType.CallReplaces, bodyToTransferTarget);\n var bodyToTransferee = {\n replacement_id: genCallID(),\n target_user: {\n id: targetUserId,\n display_name: targetProfileInfo === null || targetProfileInfo === void 0 ? void 0 : targetProfileInfo.displayname,\n avatar_url: targetProfileInfo === null || targetProfileInfo === void 0 ? void 0 : targetProfileInfo.avatar_url\n },\n create_call: newCallId\n };\n yield _this28.sendVoipEvent(EventType.CallReplaces, bodyToTransferee);\n yield _this28.terminate(CallParty.Local, CallErrorCode.Transferred, true);\n yield transferTargetCall.terminate(CallParty.Local, CallErrorCode.Transferred, true);\n })();\n }\n terminate(hangupParty, hangupReason, shouldEmit) {\n var _this29 = this;\n return _asyncToGenerator(function* () {\n var _this29$stats;\n if (_this29.callHasEnded()) return;\n _this29.hangupParty = hangupParty;\n _this29.hangupReason = hangupReason;\n _this29.state = CallState.Ended;\n if (_this29.inviteTimeout) {\n clearTimeout(_this29.inviteTimeout);\n _this29.inviteTimeout = undefined;\n }\n if (_this29.iceDisconnectedTimeout !== undefined) {\n clearTimeout(_this29.iceDisconnectedTimeout);\n _this29.iceDisconnectedTimeout = undefined;\n }\n if (_this29.callLengthInterval) {\n clearInterval(_this29.callLengthInterval);\n _this29.callLengthInterval = undefined;\n }\n if (_this29.stopVideoTrackTimer !== undefined) {\n clearTimeout(_this29.stopVideoTrackTimer);\n _this29.stopVideoTrackTimer = undefined;\n }\n for (var _ref4 of _this29.removeTrackListeners) {\n var _ref3 = _slicedToArray(_ref4, 2);\n var stream = _ref3[0];\n var listener = _ref3[1];\n stream.removeEventListener(\"removetrack\", listener);\n }\n _this29.removeTrackListeners.clear();\n _this29.callStatsAtEnd = yield _this29.collectCallStats();\n\n // Order is important here: first we stopAllMedia() and only then we can deleteAllFeeds()\n _this29.stopAllMedia();\n _this29.deleteAllFeeds();\n if (_this29.peerConn && _this29.peerConn.signalingState !== \"closed\") {\n _this29.peerConn.close();\n }\n (_this29$stats = _this29.stats) === null || _this29$stats === void 0 || _this29$stats.removeStatsReportGatherer(_this29.callId);\n if (shouldEmit) {\n _this29.emit(CallEvent.Hangup, _this29);\n }\n _this29.client.callEventHandler.calls.delete(_this29.callId);\n })();\n }\n stopAllMedia() {\n logger.debug(\"Call \".concat(this.callId, \" stopAllMedia() running\"));\n for (var feed of this.feeds) {\n // Slightly awkward as local feed need to go via the correct method on\n // the MediaHandler so they get removed from MediaHandler (remote tracks\n // don't)\n // NB. We clone local streams when passing them to individual calls in a group\n // call, so we can (and should) stop the clones once we no longer need them:\n // the other clones will continue fine.\n if (feed.isLocal() && feed.purpose === SDPStreamMetadataPurpose.Usermedia) {\n this.client.getMediaHandler().stopUserMediaStream(feed.stream);\n } else if (feed.isLocal() && feed.purpose === SDPStreamMetadataPurpose.Screenshare) {\n this.client.getMediaHandler().stopScreensharingStream(feed.stream);\n } else if (!feed.isLocal()) {\n logger.debug(\"Call \".concat(this.callId, \" stopAllMedia() stopping stream (streamId=\").concat(feed.stream.id, \")\"));\n for (var track of feed.stream.getTracks()) {\n track.stop();\n }\n }\n }\n }\n checkForErrorListener() {\n if (this.listeners(EventEmitterEvents.Error).length === 0) {\n throw new Error(\"You MUST attach an error listener using call.on('error', function() {})\");\n }\n }\n sendCandidateQueue() {\n var _this30 = this;\n return _asyncToGenerator(function* () {\n if (_this30.candidateSendQueue.length === 0 || _this30.callHasEnded()) {\n return;\n }\n var candidates = _this30.candidateSendQueue;\n _this30.candidateSendQueue = [];\n ++_this30.candidateSendTries;\n var content = {\n candidates: candidates.map(candidate => candidate.toJSON())\n };\n if (_this30.candidatesEnded) {\n // If there are no more candidates, signal this by adding an empty string candidate\n content.candidates.push({\n candidate: \"\"\n });\n }\n logger.debug(\"Call \".concat(_this30.callId, \" sendCandidateQueue() attempting to send \").concat(candidates.length, \" candidates\"));\n try {\n yield _this30.sendVoipEvent(EventType.CallCandidates, content);\n // reset our retry count if we have successfully sent our candidates\n // otherwise queueCandidate() will refuse to try to flush the queue\n _this30.candidateSendTries = 0;\n\n // Try to send candidates again just in case we received more candidates while sending.\n _this30.sendCandidateQueue();\n } catch (error) {\n // don't retry this event: we'll send another one later as we might\n // have more candidates by then.\n if (error instanceof MatrixError && error.event) _this30.client.cancelPendingEvent(error.event);\n\n // put all the candidates we failed to send back in the queue\n _this30.candidateSendQueue.push(...candidates);\n if (_this30.candidateSendTries > 5) {\n logger.debug(\"Call \".concat(_this30.callId, \" sendCandidateQueue() failed to send candidates on attempt \").concat(_this30.candidateSendTries, \". Giving up on this call.\"), error);\n var code = CallErrorCode.SignallingFailed;\n var message = \"Signalling failed\";\n _this30.emit(CallEvent.Error, new CallError(code, message, error), _this30);\n _this30.hangup(code, false);\n return;\n }\n var delayMs = 500 * Math.pow(2, _this30.candidateSendTries);\n ++_this30.candidateSendTries;\n logger.debug(\"Call \".concat(_this30.callId, \" sendCandidateQueue() failed to send candidates. Retrying in \").concat(delayMs, \"ms\"), error);\n setTimeout(() => {\n _this30.sendCandidateQueue();\n }, delayMs);\n }\n })();\n }\n\n /**\n * Place a call to this room.\n * @throws if you have not specified a listener for 'error' events.\n * @throws if have passed audio=false.\n */\n placeCall(audio, video) {\n var _this31 = this;\n return _asyncToGenerator(function* () {\n if (!audio) {\n throw new Error(\"You CANNOT start a call without audio\");\n }\n _this31.state = CallState.WaitLocalMedia;\n var callFeed;\n try {\n var _this31$client$getDev;\n var stream = yield _this31.client.getMediaHandler().getUserMediaStream(audio, video);\n\n // make sure all the tracks are enabled (same as pushNewLocalFeed -\n // we probably ought to just have one code path for adding streams)\n setTracksEnabled(stream.getAudioTracks(), true);\n setTracksEnabled(stream.getVideoTracks(), true);\n callFeed = new CallFeed({\n client: _this31.client,\n roomId: _this31.roomId,\n userId: _this31.client.getUserId(),\n deviceId: (_this31$client$getDev = _this31.client.getDeviceId()) !== null && _this31$client$getDev !== void 0 ? _this31$client$getDev : undefined,\n stream,\n purpose: SDPStreamMetadataPurpose.Usermedia,\n audioMuted: false,\n videoMuted: false\n });\n } catch (e) {\n _this31.getUserMediaFailed(e);\n return;\n }\n try {\n yield _this31.placeCallWithCallFeeds([callFeed]);\n } catch (e) {\n _this31.placeCallFailed(e);\n return;\n }\n })();\n }\n\n /**\n * Place a call to this room with call feed.\n * @param callFeeds - to use\n * @throws if you have not specified a listener for 'error' events.\n * @throws if have passed audio=false.\n */\n placeCallWithCallFeeds(callFeeds) {\n var _arguments2 = arguments,\n _this32 = this;\n return _asyncToGenerator(function* () {\n var requestScreenshareFeed = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n _this32.checkForErrorListener();\n _this32.direction = CallDirection.Outbound;\n yield _this32.initOpponentCrypto();\n\n // XXX Find a better way to do this\n _this32.client.callEventHandler.calls.set(_this32.callId, _this32);\n\n // make sure we have valid turn creds. Unless something's gone wrong, it should\n // poll and keep the credentials valid so this should be instant.\n var haveTurnCreds = yield _this32.client.checkTurnServers();\n if (!haveTurnCreds) {\n logger.warn(\"Call \".concat(_this32.callId, \" placeCallWithCallFeeds() failed to get TURN credentials! Proceeding with call anyway...\"));\n }\n\n // create the peer connection now so it can be gathering candidates while we get user\n // media (assuming a candidate pool size is configured)\n _this32.peerConn = _this32.createPeerConnection();\n _this32.emit(CallEvent.PeerConnectionCreated, _this32.peerConn, _this32);\n _this32.gotCallFeedsForInvite(callFeeds, requestScreenshareFeed);\n })();\n }\n createPeerConnection() {\n var _this$stats;\n var pc = new window.RTCPeerConnection({\n iceTransportPolicy: this.forceTURN ? \"relay\" : undefined,\n iceServers: this.turnServers.length ? this.turnServers : undefined,\n iceCandidatePoolSize: this.client.iceCandidatePoolSize,\n bundlePolicy: \"max-bundle\"\n });\n\n // 'connectionstatechange' would be better, but firefox doesn't implement that.\n pc.addEventListener(\"iceconnectionstatechange\", this.onIceConnectionStateChanged);\n pc.addEventListener(\"signalingstatechange\", this.onSignallingStateChanged);\n pc.addEventListener(\"icecandidate\", this.gotLocalIceCandidate);\n pc.addEventListener(\"icegatheringstatechange\", this.onIceGatheringStateChange);\n pc.addEventListener(\"track\", this.onTrack);\n pc.addEventListener(\"negotiationneeded\", this.onNegotiationNeeded);\n pc.addEventListener(\"datachannel\", this.onDataChannel);\n var opponentMember = this.getOpponentMember();\n var opponentMemberId = opponentMember ? opponentMember.userId : \"unknown\";\n (_this$stats = this.stats) === null || _this$stats === void 0 || _this$stats.addStatsReportGatherer(this.callId, opponentMemberId, pc);\n return pc;\n }\n partyIdMatches(msg) {\n // They must either match or both be absent (in which case opponentPartyId will be null)\n // Also we ignore party IDs on the invite/offer if the version is 0, so we must do the same\n // here and use null if the version is 0 (woe betide any opponent sending messages in the\n // same call with different versions)\n var msgPartyId = msg.version === 0 ? null : msg.party_id || null;\n return msgPartyId === this.opponentPartyId;\n }\n\n // Commits to an opponent for the call\n // ev: An invite or answer event\n chooseOpponent(ev) {\n var _getMember;\n // I choo-choo-choose you\n var msg = ev.getContent();\n logger.debug(\"Call \".concat(this.callId, \" chooseOpponent() running (partyId=\").concat(msg.party_id, \")\"));\n this.opponentVersion = msg.version;\n if (this.opponentVersion === 0) {\n // set to null to indicate that we've chosen an opponent, but because\n // they're v0 they have no party ID (even if they sent one, we're ignoring it)\n this.opponentPartyId = null;\n } else {\n // set to their party ID, or if they're naughty and didn't send one despite\n // not being v0, set it to null to indicate we picked an opponent with no\n // party ID\n this.opponentPartyId = msg.party_id || null;\n }\n this.opponentCaps = msg.capabilities || {};\n this.opponentMember = (_getMember = this.client.getRoom(this.roomId).getMember(ev.getSender())) !== null && _getMember !== void 0 ? _getMember : undefined;\n if (this.opponentMember) {\n var _this$stats2;\n (_this$stats2 = this.stats) === null || _this$stats2 === void 0 || _this$stats2.updateOpponentMember(this.callId, this.opponentMember.userId);\n }\n }\n addBufferedIceCandidates() {\n var _this33 = this;\n return _asyncToGenerator(function* () {\n var bufferedCandidates = _this33.remoteCandidateBuffer.get(_this33.opponentPartyId);\n if (bufferedCandidates) {\n logger.info(\"Call \".concat(_this33.callId, \" addBufferedIceCandidates() adding \").concat(bufferedCandidates.length, \" buffered candidates for opponent \").concat(_this33.opponentPartyId));\n yield _this33.addIceCandidates(bufferedCandidates);\n }\n _this33.remoteCandidateBuffer.clear();\n })();\n }\n addIceCandidates(candidates) {\n var _this34 = this;\n return _asyncToGenerator(function* () {\n for (var candidate of candidates) {\n if ((candidate.sdpMid === null || candidate.sdpMid === undefined) && (candidate.sdpMLineIndex === null || candidate.sdpMLineIndex === undefined)) {\n logger.debug(\"Call \".concat(_this34.callId, \" addIceCandidates() got remote ICE end-of-candidates\"));\n } else {\n logger.debug(\"Call \".concat(_this34.callId, \" addIceCandidates() got remote ICE candidate (sdpMid=\").concat(candidate.sdpMid, \", candidate=\").concat(candidate.candidate, \")\"));\n }\n try {\n yield _this34.peerConn.addIceCandidate(candidate);\n } catch (err) {\n if (!_this34.ignoreOffer) {\n logger.info(\"Call \".concat(_this34.callId, \" addIceCandidates() failed to add remote ICE candidate\"), err);\n } else {\n logger.debug(\"Call \".concat(_this34.callId, \" addIceCandidates() failed to add remote ICE candidate because ignoring offer\"), err);\n }\n }\n }\n })();\n }\n get hasPeerConnection() {\n return Boolean(this.peerConn);\n }\n initStats(stats) {\n var peerId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"unknown\";\n this.stats = stats;\n this.stats.start();\n }\n}\nexport function setTracksEnabled(tracks, enabled) {\n for (var track of tracks) {\n track.enabled = enabled;\n }\n}\nexport function supportsMatrixCall() {\n // typeof prevents Node from erroring on an undefined reference\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n // NB. We don't log here as apps try to create a call object as a test for\n // whether calls are supported, so we shouldn't fill the logs up.\n return false;\n }\n\n // Firefox throws on so little as accessing the RTCPeerConnection when operating in a secure mode.\n // There's some information at https://bugzilla.mozilla.org/show_bug.cgi?id=1542616 though the concern\n // is that the browser throwing a SecurityError will brick the client creation process.\n try {\n var _ref5, _ref6, _window$RTCPeerConnec;\n var supported = Boolean((_ref5 = (_ref6 = (_window$RTCPeerConnec = window.RTCPeerConnection) !== null && _window$RTCPeerConnec !== void 0 ? _window$RTCPeerConnec : window.RTCSessionDescription) !== null && _ref6 !== void 0 ? _ref6 : window.RTCIceCandidate) !== null && _ref5 !== void 0 ? _ref5 : navigator.mediaDevices);\n if (!supported) {\n /* istanbul ignore if */ // Adds a lot of noise to test runs, so disable logging there.\n if (process.env.NODE_ENV !== \"test\") {\n logger.error(\"WebRTC is not supported in this browser / environment\");\n }\n return false;\n }\n } catch (e) {\n logger.error(\"Exception thrown when trying to access WebRTC\", e);\n return false;\n }\n return true;\n}\n\n/**\n * DEPRECATED\n * Use client.createCall()\n *\n * Create a new Matrix call for the browser.\n * @param client - The client instance to use.\n * @param roomId - The room the call is in.\n * @param options - DEPRECATED optional options map.\n * @returns the call or null if the browser doesn't support calling.\n */\nexport function createNewMatrixCall(client, roomId, options) {\n if (!supportsMatrixCall()) return null;\n var optionsForceTURN = options ? options.forceTURN : false;\n var opts = {\n client: client,\n roomId: roomId,\n invitee: options === null || options === void 0 ? void 0 : options.invitee,\n turnServers: client.getTurnServers(),\n // call level options\n forceTURN: client.forceTURN || optionsForceTURN,\n opponentDeviceId: options === null || options === void 0 ? void 0 : options.opponentDeviceId,\n opponentSessionId: options === null || options === void 0 ? void 0 : options.opponentSessionId,\n groupCallId: options === null || options === void 0 ? void 0 : options.groupCallId\n };\n var call = new MatrixCall(opts);\n client.reEmitter.reEmit(call, Object.values(CallEvent));\n return call;\n}\n//# sourceMappingURL=call.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// allow camelcase as these are things that go onto the wire\n/* eslint-disable camelcase */\n\nexport var PushRuleActionName = /*#__PURE__*/function (PushRuleActionName) {\n PushRuleActionName[\"DontNotify\"] = \"dont_notify\";\n PushRuleActionName[\"Notify\"] = \"notify\";\n PushRuleActionName[\"Coalesce\"] = \"coalesce\";\n return PushRuleActionName;\n}({});\nexport var TweakName = /*#__PURE__*/function (TweakName) {\n TweakName[\"Highlight\"] = \"highlight\";\n TweakName[\"Sound\"] = \"sound\";\n return TweakName;\n}({});\nexport var ConditionOperator = /*#__PURE__*/function (ConditionOperator) {\n ConditionOperator[\"ExactEquals\"] = \"==\";\n ConditionOperator[\"LessThan\"] = \"<\";\n ConditionOperator[\"GreaterThan\"] = \">\";\n ConditionOperator[\"GreaterThanOrEqual\"] = \">=\";\n ConditionOperator[\"LessThanOrEqual\"] = \"<=\";\n return ConditionOperator;\n}({});\nexport var DMMemberCountCondition = \"2\";\nexport function isDmMemberCountCondition(condition) {\n return condition === \"==2\" || condition === \"2\";\n}\nexport var ConditionKind = /*#__PURE__*/function (ConditionKind) {\n ConditionKind[\"EventMatch\"] = \"event_match\";\n ConditionKind[\"EventPropertyIs\"] = \"event_property_is\";\n ConditionKind[\"EventPropertyContains\"] = \"event_property_contains\";\n ConditionKind[\"ContainsDisplayName\"] = \"contains_display_name\";\n ConditionKind[\"RoomMemberCount\"] = \"room_member_count\";\n ConditionKind[\"SenderNotificationPermission\"] = \"sender_notification_permission\";\n ConditionKind[\"CallStarted\"] = \"call_started\";\n ConditionKind[\"CallStartedPrefix\"] = \"org.matrix.msc3914.call_started\";\n return ConditionKind;\n}({});\n\n// XXX: custom conditions are possible but always fail, and break the typescript discriminated union so ignore them here\n// IPushRuleCondition<Exclude<string, ConditionKind>> unfortunately does not resolve this at the time of writing.\n\nexport var PushRuleKind = /*#__PURE__*/function (PushRuleKind) {\n PushRuleKind[\"Override\"] = \"override\";\n PushRuleKind[\"ContentSpecific\"] = \"content\";\n PushRuleKind[\"RoomSpecific\"] = \"room\";\n PushRuleKind[\"SenderSpecific\"] = \"sender\";\n PushRuleKind[\"Underride\"] = \"underride\";\n return PushRuleKind;\n}({});\nexport var RuleId = /*#__PURE__*/function (RuleId) {\n RuleId[\"Master\"] = \".m.rule.master\";\n RuleId[\"IsUserMention\"] = \".m.rule.is_user_mention\";\n RuleId[\"IsRoomMention\"] = \".m.rule.is_room_mention\";\n RuleId[\"ContainsDisplayName\"] = \".m.rule.contains_display_name\";\n RuleId[\"ContainsUserName\"] = \".m.rule.contains_user_name\";\n RuleId[\"AtRoomNotification\"] = \".m.rule.roomnotif\";\n RuleId[\"DM\"] = \".m.rule.room_one_to_one\";\n RuleId[\"EncryptedDM\"] = \".m.rule.encrypted_room_one_to_one\";\n RuleId[\"Message\"] = \".m.rule.message\";\n RuleId[\"EncryptedMessage\"] = \".m.rule.encrypted\";\n RuleId[\"InviteToSelf\"] = \".m.rule.invite_for_me\";\n RuleId[\"MemberEvent\"] = \".m.rule.member_event\";\n RuleId[\"IncomingCall\"] = \".m.rule.call\";\n RuleId[\"SuppressNotices\"] = \".m.rule.suppress_notices\";\n RuleId[\"Tombstone\"] = \".m.rule.tombstone\";\n RuleId[\"PollStart\"] = \".m.rule.poll_start\";\n RuleId[\"PollStartUnstable\"] = \".org.matrix.msc3930.rule.poll_start\";\n RuleId[\"PollEnd\"] = \".m.rule.poll_end\";\n RuleId[\"PollEndUnstable\"] = \".org.matrix.msc3930.rule.poll_end\";\n RuleId[\"PollStartOneToOne\"] = \".m.rule.poll_start_one_to_one\";\n RuleId[\"PollStartOneToOneUnstable\"] = \".org.matrix.msc3930.rule.poll_start_one_to_one\";\n RuleId[\"PollEndOneToOne\"] = \".m.rule.poll_end_one_to_one\";\n RuleId[\"PollEndOneToOneUnstable\"] = \".org.matrix.msc3930.rule.poll_end_one_to_one\";\n return RuleId;\n}({});\n\n/* eslint-enable camelcase */\n//# sourceMappingURL=PushRules.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { deepCompare, escapeRegExp, globToRegexp, isNullOrUndefined } from \"./utils.js\";\nimport { ConditionKind, PushRuleActionName, PushRuleKind, RuleId, TweakName } from \"./@types/PushRules.js\";\nimport { EventType } from \"./@types/event.js\";\nvar RULEKINDS_IN_ORDER = [PushRuleKind.Override, PushRuleKind.ContentSpecific, PushRuleKind.RoomSpecific, PushRuleKind.SenderSpecific, PushRuleKind.Underride];\n\n// The default override rules to apply to the push rules that arrive from the server.\n// We do this for two reasons:\n// 1. Synapse is unlikely to send us the push rule in an incremental sync - see\n// https://github.com/matrix-org/synapse/pull/4867#issuecomment-481446072 for\n// more details.\n// 2. We often want to start using push rules ahead of the server supporting them,\n// and so we can put them here.\nvar DEFAULT_OVERRIDE_RULES = {\n \".m.rule.is_room_mention\": {\n // Matrix v1.7\n rule_id: \".m.rule.is_room_mention\",\n default: true,\n enabled: true,\n conditions: [{\n kind: ConditionKind.EventPropertyIs,\n key: \"content.m\\\\.mentions.room\",\n value: true\n }, {\n kind: ConditionKind.SenderNotificationPermission,\n key: \"room\"\n }],\n actions: [PushRuleActionName.Notify, {\n set_tweak: TweakName.Highlight\n }]\n },\n \".m.rule.reaction\": {\n // For homeservers which don't support MSC2153 yet\n rule_id: \".m.rule.reaction\",\n default: true,\n enabled: true,\n conditions: [{\n kind: ConditionKind.EventMatch,\n key: \"type\",\n pattern: \"m.reaction\"\n }],\n actions: [PushRuleActionName.DontNotify]\n },\n \".org.matrix.msc3786.rule.room.server_acl\": {\n // For homeservers which don't support MSC3786 yet\n rule_id: \".org.matrix.msc3786.rule.room.server_acl\",\n default: true,\n enabled: true,\n conditions: [{\n kind: ConditionKind.EventMatch,\n key: \"type\",\n pattern: EventType.RoomServerAcl\n }, {\n kind: ConditionKind.EventMatch,\n key: \"state_key\",\n pattern: \"\"\n }],\n actions: []\n }\n};\n\n// A special rule id for `EXPECTED_DEFAULT_OVERRIDE_RULE_IDS` and friends which denotes where user-defined rules live in the order.\nvar UserDefinedRules = Symbol(\"UserDefinedRules\");\nvar EXPECTED_DEFAULT_OVERRIDE_RULE_IDS = [RuleId.Master, UserDefinedRules, RuleId.SuppressNotices, RuleId.InviteToSelf, RuleId.MemberEvent, RuleId.IsUserMention, RuleId.ContainsDisplayName, RuleId.IsRoomMention, RuleId.AtRoomNotification, RuleId.Tombstone, \".m.rule.reaction\", \".m.rule.room.server_acl\", \".org.matrix.msc3786.rule.room.server_acl\", \".m.rule.suppress_edits\"];\nvar DEFAULT_UNDERRIDE_RULES = {\n \".org.matrix.msc3914.rule.room.call\": {\n // For homeservers which don't support MSC3914 yet\n rule_id: \".org.matrix.msc3914.rule.room.call\",\n default: true,\n enabled: true,\n conditions: [{\n kind: ConditionKind.EventMatch,\n key: \"type\",\n pattern: \"org.matrix.msc3401.call\"\n }, {\n kind: ConditionKind.CallStarted\n }],\n actions: [PushRuleActionName.Notify, {\n set_tweak: TweakName.Sound,\n value: \"default\"\n }]\n }\n};\nvar EXPECTED_DEFAULT_UNDERRIDE_RULE_IDS = [UserDefinedRules, RuleId.IncomingCall, \".org.matrix.msc3914.rule.room.call\", RuleId.EncryptedDM, RuleId.DM, RuleId.Message, RuleId.EncryptedMessage];\n\n/**\n * Make sure that each of the rules listed in `defaultRuleIds` is listed in the given set of push rules.\n *\n * @param logger - A `Logger` to write log messages to.\n * @param kind - the kind of push rule set being merged.\n * @param incomingRules - the existing set of known push rules for the user.\n * @param defaultRules - a lookup table for the default definitions of push rules.\n * @param orderedRuleIds - the IDs of the expected push rules, in order.\n *\n * @returns A copy of `incomingRules`, with any missing default rules inserted in the right place.\n */\nfunction mergeRulesWithDefaults(logger, kind, incomingRules, defaultRules, orderedRuleIds) {\n // Split the incomingRules into defaults and custom\n var incomingDefaultRules = incomingRules.filter(rule => rule.default);\n var incomingCustomRules = incomingRules.filter(rule => !rule.default);\n function insertDefaultPushRule(ruleId) {\n if (ruleId === UserDefinedRules) {\n // Re-insert any user-defined rules that were in `incomingRules`\n newRules.push(...incomingCustomRules);\n } else if (ruleId in defaultRules) {\n logger.warn(\"Adding default global \".concat(kind, \" push rule \").concat(ruleId));\n newRules.push(defaultRules[ruleId]);\n } else {\n logger.warn(\"Missing default global \".concat(kind, \" push rule \").concat(ruleId));\n }\n }\n var nextExpectedRuleIdIndex = 0;\n var newRules = [];\n // Merge our expected rules (including the incoming custom rules) into the incoming default rules.\n for (var rule of incomingDefaultRules) {\n var ruleIndex = orderedRuleIds.indexOf(rule.rule_id);\n if (ruleIndex === -1) {\n // an unrecognised rule; copy it over\n newRules.push(rule);\n continue;\n }\n while (ruleIndex > nextExpectedRuleIdIndex) {\n // insert new rules\n var defaultRuleId = orderedRuleIds[nextExpectedRuleIdIndex];\n insertDefaultPushRule(defaultRuleId);\n nextExpectedRuleIdIndex += 1;\n }\n // copy over the existing rule\n newRules.push(rule);\n nextExpectedRuleIdIndex += 1;\n }\n\n // Now copy over any remaining default rules\n for (var ruleId of orderedRuleIds.slice(nextExpectedRuleIdIndex)) {\n insertDefaultPushRule(ruleId);\n }\n return newRules;\n}\nexport class PushProcessor {\n /**\n * Construct a Push Processor.\n * @param client - The Matrix client object to use\n */\n constructor(client) {\n this.client = client;\n /**\n * Maps the original key from the push rules to a list of property names\n * after unescaping.\n */\n _defineProperty(this, \"parsedKeys\", new Map());\n }\n /**\n * Convert a list of actions into a object with the actions as keys and their values\n * @example\n * eg. `[ 'notify', { set_tweak: 'sound', value: 'default' } ]`\n * becomes `{ notify: true, tweaks: { sound: 'default' } }`\n * @param actionList - The actions list\n *\n * @returns A object with key 'notify' (true or false) and an object of actions\n */\n static actionListToActionsObject(actionList) {\n var actionObj = {\n notify: false,\n tweaks: {}\n };\n for (var action of actionList) {\n if (action === PushRuleActionName.Notify) {\n actionObj.notify = true;\n } else if (typeof action === \"object\") {\n if (action.value === undefined) {\n action.value = true;\n }\n actionObj.tweaks[action.set_tweak] = action.value;\n }\n }\n return actionObj;\n }\n\n /**\n * Rewrites conditions on a client's push rules to match the defaults\n * where applicable. Useful for upgrading push rules to more strict\n * conditions when the server is falling behind on defaults.\n *\n * @param logger - A `Logger` to write log messages to.\n * @param incomingRules - The client's existing push rules\n * @param userId - The Matrix ID of the client.\n * @returns The rewritten rules\n */\n static rewriteDefaultRules(logger, incomingRules) {\n var userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n var newRules = JSON.parse(JSON.stringify(incomingRules)); // deep clone\n\n // These lines are mostly to make the tests happy. We shouldn't run into these\n // properties missing in practice.\n if (!newRules) newRules = {};\n if (!newRules.global) newRules.global = {};\n if (!newRules.global.override) newRules.global.override = [];\n if (!newRules.global.underride) newRules.global.underride = [];\n\n // Merge the client-level defaults with the ones from the server\n newRules.global.override = mergeRulesWithDefaults(logger, PushRuleKind.Override, newRules.global.override, DEFAULT_OVERRIDE_RULES, EXPECTED_DEFAULT_OVERRIDE_RULE_IDS);\n newRules.global.underride = mergeRulesWithDefaults(logger, PushRuleKind.Underride, newRules.global.underride, DEFAULT_UNDERRIDE_RULES, EXPECTED_DEFAULT_UNDERRIDE_RULE_IDS);\n return newRules;\n }\n\n /**\n * Create a RegExp object for the given glob pattern with a single capture group around the pattern itself, caching the result.\n * No cache invalidation is present currently,\n * as this will be inherently bounded to the size of the user's own push rules.\n * @param pattern - the glob pattern to convert to a RegExp\n * @param alignToWordBoundary - whether to align the pattern to word boundaries,\n * as specified for `content.body` matches, will use lookaround assertions to ensure the match only includes the pattern\n * @param flags - the flags to pass to the RegExp constructor, defaults to case-insensitive\n */\n static getPushRuleGlobRegex(pattern) {\n var alignToWordBoundary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"i\";\n var _ref = alignToWordBoundary ? [\"(?<=^|\\\\W)\", \"(?=\\\\W|$)\"] : [\"^\", \"$\"],\n _ref2 = _slicedToArray(_ref, 2),\n prefix = _ref2[0],\n suffix = _ref2[1];\n var cacheKey = \"\".concat(alignToWordBoundary, \"-\").concat(flags, \"-\").concat(pattern);\n if (!PushProcessor.cachedGlobToRegex[cacheKey]) {\n PushProcessor.cachedGlobToRegex[cacheKey] = new RegExp(prefix + \"(\" + globToRegexp(pattern) + \")\" + suffix, flags);\n }\n return PushProcessor.cachedGlobToRegex[cacheKey];\n }\n\n /**\n * Pre-caches the parsed keys for push rules and cleans out any obsolete cache\n * entries. Should be called after push rules are updated.\n * @param newRules - The new push rules.\n */\n updateCachedPushRuleKeys(newRules) {\n // These lines are mostly to make the tests happy. We shouldn't run into these\n // properties missing in practice.\n if (!newRules) newRules = {};\n if (!newRules.global) newRules.global = {};\n if (!newRules.global.override) newRules.global.override = [];\n if (!newRules.global.room) newRules.global.room = [];\n if (!newRules.global.sender) newRules.global.sender = [];\n if (!newRules.global.underride) newRules.global.underride = [];\n\n // Process the 'key' property on event_match conditions pre-cache the\n // values and clean-out any unused values.\n var toRemoveKeys = new Set(this.parsedKeys.keys());\n for (var ruleset of [newRules.global.override, newRules.global.room, newRules.global.sender, newRules.global.underride]) {\n for (var rule of ruleset) {\n if (!rule.conditions) {\n continue;\n }\n for (var condition of rule.conditions) {\n if (condition.kind !== ConditionKind.EventMatch) {\n continue;\n }\n\n // Ensure we keep this key.\n toRemoveKeys.delete(condition.key);\n\n // Pre-process the key.\n this.parsedKeys.set(condition.key, PushProcessor.partsForDottedKey(condition.key));\n }\n }\n }\n // Any keys that were previously cached, but are no longer needed should\n // be removed.\n toRemoveKeys.forEach(k => this.parsedKeys.delete(k));\n }\n // $glob: RegExp\n\n matchingRuleFromKindSet(ev, kindset) {\n for (var kind of RULEKINDS_IN_ORDER) {\n var ruleset = kindset[kind];\n if (!ruleset) {\n continue;\n }\n for (var rule of ruleset) {\n if (!rule.enabled) {\n continue;\n }\n var rawrule = this.templateRuleToRaw(kind, rule);\n if (!rawrule) {\n continue;\n }\n if (this.ruleMatchesEvent(rawrule, ev)) {\n return _objectSpread(_objectSpread({}, rule), {}, {\n kind\n });\n }\n }\n }\n return null;\n }\n templateRuleToRaw(kind, tprule) {\n var rawrule = {\n rule_id: tprule.rule_id,\n actions: tprule.actions,\n conditions: []\n };\n switch (kind) {\n case PushRuleKind.Underride:\n case PushRuleKind.Override:\n rawrule.conditions = tprule.conditions;\n break;\n case PushRuleKind.RoomSpecific:\n if (!tprule.rule_id) {\n return null;\n }\n rawrule.conditions.push({\n kind: ConditionKind.EventMatch,\n key: \"room_id\",\n value: tprule.rule_id\n });\n break;\n case PushRuleKind.SenderSpecific:\n if (!tprule.rule_id) {\n return null;\n }\n rawrule.conditions.push({\n kind: ConditionKind.EventMatch,\n key: \"user_id\",\n value: tprule.rule_id\n });\n break;\n case PushRuleKind.ContentSpecific:\n if (!tprule.pattern) {\n return null;\n }\n rawrule.conditions.push({\n kind: ConditionKind.EventMatch,\n key: \"content.body\",\n pattern: tprule.pattern\n });\n break;\n }\n return rawrule;\n }\n eventFulfillsCondition(cond, ev) {\n switch (cond.kind) {\n case ConditionKind.EventMatch:\n return this.eventFulfillsEventMatchCondition(cond, ev);\n case ConditionKind.EventPropertyIs:\n return this.eventFulfillsEventPropertyIsCondition(cond, ev);\n case ConditionKind.EventPropertyContains:\n return this.eventFulfillsEventPropertyContains(cond, ev);\n case ConditionKind.ContainsDisplayName:\n return this.eventFulfillsDisplayNameCondition(cond, ev);\n case ConditionKind.RoomMemberCount:\n return this.eventFulfillsRoomMemberCountCondition(cond, ev);\n case ConditionKind.SenderNotificationPermission:\n return this.eventFulfillsSenderNotifPermCondition(cond, ev);\n case ConditionKind.CallStarted:\n case ConditionKind.CallStartedPrefix:\n return this.eventFulfillsCallStartedCondition(cond, ev);\n }\n\n // unknown conditions: we previously matched all unknown conditions,\n // but given that rules can be added to the base rules on a server,\n // it's probably better to not match unknown conditions.\n return false;\n }\n eventFulfillsSenderNotifPermCondition(cond, ev) {\n var notifLevelKey = cond[\"key\"];\n if (!notifLevelKey) {\n return false;\n }\n var room = this.client.getRoom(ev.getRoomId());\n if (!(room !== null && room !== void 0 && room.currentState)) {\n return false;\n }\n\n // Note that this should not be the current state of the room but the state at\n // the point the event is in the DAG. Unfortunately the js-sdk does not store\n // this.\n return room.currentState.mayTriggerNotifOfType(notifLevelKey, ev.getSender());\n }\n eventFulfillsRoomMemberCountCondition(cond, ev) {\n if (!cond.is) {\n return false;\n }\n var room = this.client.getRoom(ev.getRoomId());\n if (!room || !room.currentState || !room.currentState.members) {\n return false;\n }\n var memberCount = room.currentState.getJoinedMemberCount();\n var m = cond.is.match(/^([=<>]*)(\\d*)$/);\n if (!m) {\n return false;\n }\n var ineq = m[1];\n var rhs = parseInt(m[2]);\n if (isNaN(rhs)) {\n return false;\n }\n switch (ineq) {\n case \"\":\n case \"==\":\n return memberCount == rhs;\n case \"<\":\n return memberCount < rhs;\n case \">\":\n return memberCount > rhs;\n case \"<=\":\n return memberCount <= rhs;\n case \">=\":\n return memberCount >= rhs;\n default:\n return false;\n }\n }\n eventFulfillsDisplayNameCondition(cond, ev) {\n var _room$currentState;\n var content = ev.getContent();\n if (ev.isEncrypted() && ev.getClearContent()) {\n content = ev.getClearContent();\n }\n if (!content || !content.body || typeof content.body != \"string\") {\n return false;\n }\n var room = this.client.getRoom(ev.getRoomId());\n var member = room === null || room === void 0 || (_room$currentState = room.currentState) === null || _room$currentState === void 0 ? void 0 : _room$currentState.getMember(this.client.credentials.userId);\n if (!member) {\n return false;\n }\n var displayName = member.name;\n\n // N.B. we can't use \\b as it chokes on unicode. however \\W seems to be okay\n // as shorthand for [^0-9A-Za-z_].\n var pat = new RegExp(\"(^|\\\\W)\" + escapeRegExp(displayName) + \"(\\\\W|$)\", \"i\");\n return content.body.search(pat) > -1;\n }\n\n /**\n * Check whether the given event matches the push rule condition by fetching\n * the property from the event and comparing against the condition's glob-based\n * pattern.\n * @param cond - The push rule condition to check for a match.\n * @param ev - The event to check for a match.\n */\n eventFulfillsEventMatchCondition(cond, ev) {\n if (!cond.key) {\n return false;\n }\n var val = this.valueForDottedKey(cond.key, ev);\n if (typeof val !== \"string\") {\n return false;\n }\n\n // XXX This does not match in a case-insensitive manner.\n //\n // See https://spec.matrix.org/v1.5/client-server-api/#conditions-1\n if (cond.value) {\n return cond.value === val;\n }\n if (typeof cond.pattern !== \"string\") {\n return false;\n }\n\n // Align to word boundary on `content.body` matches, whole string otherwise\n // https://spec.matrix.org/v1.13/client-server-api/#conditions-1\n var regex = PushProcessor.getPushRuleGlobRegex(cond.pattern, cond.key === \"content.body\");\n return !!val.match(regex);\n }\n\n /**\n * Check whether the given event matches the push rule condition by fetching\n * the property from the event and comparing exactly against the condition's\n * value.\n * @param cond - The push rule condition to check for a match.\n * @param ev - The event to check for a match.\n */\n eventFulfillsEventPropertyIsCondition(cond, ev) {\n if (!cond.key || cond.value === undefined) {\n return false;\n }\n return cond.value === this.valueForDottedKey(cond.key, ev);\n }\n\n /**\n * Check whether the given event matches the push rule condition by fetching\n * the property from the event and comparing exactly against the condition's\n * value.\n * @param cond - The push rule condition to check for a match.\n * @param ev - The event to check for a match.\n */\n eventFulfillsEventPropertyContains(cond, ev) {\n if (!cond.key || cond.value === undefined) {\n return false;\n }\n var val = this.valueForDottedKey(cond.key, ev);\n if (!Array.isArray(val)) {\n return false;\n }\n return val.includes(cond.value);\n }\n eventFulfillsCallStartedCondition(_cond, ev) {\n // Since servers don't support properly sending push notification\n // about MSC3401 call events, we do the handling ourselves\n return [\"m.ring\", \"m.prompt\"].includes(ev.getContent()[\"m.intent\"]) && !(\"m.terminated\" in ev.getContent()) && (ev.getPrevContent()[\"m.terminated\"] !== ev.getContent()[\"m.terminated\"] || deepCompare(ev.getPrevContent(), {}));\n }\n\n /**\n * Parse the key into the separate fields to search by splitting on\n * unescaped \".\", and then removing any escape characters.\n *\n * @param str - The key of the push rule condition: a dotted field.\n * @returns The unescaped parts to fetch.\n * @internal\n */\n static partsForDottedKey(str) {\n var result = [];\n\n // The current field and whether the previous character was the escape\n // character (a backslash).\n var part = \"\";\n var escaped = false;\n\n // Iterate over each character, and decide whether to append to the current\n // part (following the escape rules) or to start a new part (based on the\n // field separator).\n for (var c of str) {\n // If the previous character was the escape character (a backslash)\n // then decide what to append to the current part.\n if (escaped) {\n if (c === \"\\\\\" || c === \".\") {\n // An escaped backslash or dot just gets added.\n part += c;\n } else {\n // A character that shouldn't be escaped gets the backslash prepended.\n part += \"\\\\\" + c;\n }\n // This always resets being escaped.\n escaped = false;\n continue;\n }\n if (c == \".\") {\n // The field separator creates a new part.\n result.push(part);\n part = \"\";\n } else if (c == \"\\\\\") {\n // A backslash adds no characters, but starts an escape sequence.\n escaped = true;\n } else {\n // Otherwise, just add the current character.\n part += c;\n }\n }\n\n // Ensure the final part is included. If there's an open escape sequence\n // it should be included.\n if (escaped) {\n part += \"\\\\\";\n }\n result.push(part);\n return result;\n }\n\n /**\n * For a dotted field and event, fetch the value at that position, if one\n * exists.\n *\n * @param key - The key of the push rule condition: a dotted field to fetch.\n * @param ev - The matrix event to fetch the field from.\n * @returns The value at the dotted path given by key.\n */\n valueForDottedKey(key, ev) {\n // The key should already have been parsed via updateCachedPushRuleKeys,\n // but if it hasn't (maybe via an old consumer of the SDK which hasn't\n // been updated?) then lazily calculate it here.\n var parts = this.parsedKeys.get(key);\n if (parts === undefined) {\n parts = PushProcessor.partsForDottedKey(key);\n this.parsedKeys.set(key, parts);\n }\n var val;\n\n // special-case the first component to deal with encrypted messages\n var firstPart = parts[0];\n var currentIndex = 0;\n if (firstPart === \"content\") {\n val = ev.getContent();\n ++currentIndex;\n } else if (firstPart === \"type\") {\n val = ev.getType();\n ++currentIndex;\n } else {\n // use the raw event for any other fields\n val = ev.event;\n }\n for (; currentIndex < parts.length; ++currentIndex) {\n // The previous iteration resulted in null or undefined, bail (and\n // avoid the type error of attempting to retrieve a property).\n if (isNullOrUndefined(val)) {\n return undefined;\n }\n var thisPart = parts[currentIndex];\n val = val[thisPart];\n }\n return val;\n }\n matchingRuleForEventWithRulesets(ev, rulesets) {\n if (!rulesets) {\n return null;\n }\n if (ev.getSender() === this.client.getSafeUserId()) {\n return null;\n }\n return this.matchingRuleFromKindSet(ev, rulesets.global);\n }\n pushActionsForEventAndRulesets(ev, rulesets) {\n var rule = this.matchingRuleForEventWithRulesets(ev, rulesets);\n if (!rule) {\n return {};\n }\n var actionObj = PushProcessor.actionListToActionsObject(rule.actions);\n\n // Some actions are implicit in some situations: we add those here\n if (actionObj.tweaks.highlight === undefined) {\n // if it isn't specified, highlight if it's a content\n // rule but otherwise not\n actionObj.tweaks.highlight = rule.kind == PushRuleKind.ContentSpecific;\n }\n return {\n actions: actionObj,\n rule\n };\n }\n ruleMatchesEvent(rule, ev) {\n var _rule$conditions;\n // Disable the deprecated mentions push rules if the new mentions property exists.\n if (this.client.supportsIntentionalMentions() && ev.getContent()[\"m.mentions\"] !== undefined && (rule.rule_id === RuleId.ContainsUserName || rule.rule_id === RuleId.ContainsDisplayName || rule.rule_id === RuleId.AtRoomNotification)) {\n return false;\n }\n return !((_rule$conditions = rule.conditions) !== null && _rule$conditions !== void 0 && _rule$conditions.some(cond => !this.eventFulfillsCondition(cond, ev)));\n }\n\n /**\n * Get the user's push actions for the given event\n */\n actionsForEvent(ev) {\n var _this$pushActionsForE = this.pushActionsForEventAndRulesets(ev, this.client.pushRules),\n actions = _this$pushActionsForE.actions;\n return actions || {};\n }\n actionsAndRuleForEvent(ev) {\n return this.pushActionsForEventAndRulesets(ev, this.client.pushRules);\n }\n\n /**\n * Get one of the users push rules by its ID\n *\n * @param ruleId - The ID of the rule to search for\n * @returns The push rule, or null if no such rule was found\n */\n getPushRuleById(ruleId) {\n var _result$rule;\n var result = this.getPushRuleAndKindById(ruleId);\n return (_result$rule = result === null || result === void 0 ? void 0 : result.rule) !== null && _result$rule !== void 0 ? _result$rule : null;\n }\n\n /**\n * Get one of the users push rules by its ID\n *\n * @param ruleId - The ID of the rule to search for\n * @returns rule The push rule, or null if no such rule was found\n * @returns kind - The PushRuleKind of the rule to search for\n */\n getPushRuleAndKindById(ruleId) {\n for (var scope of [\"global\"]) {\n var _this$client$pushRule;\n if (((_this$client$pushRule = this.client.pushRules) === null || _this$client$pushRule === void 0 ? void 0 : _this$client$pushRule[scope]) === undefined) continue;\n for (var kind of RULEKINDS_IN_ORDER) {\n if (this.client.pushRules[scope][kind] === undefined) continue;\n for (var rule of this.client.pushRules[scope][kind]) {\n if (rule.rule_id === ruleId) return {\n rule,\n kind\n };\n }\n }\n }\n return null;\n }\n}\n_defineProperty(PushProcessor, \"cachedGlobToRegex\", {});\n//# sourceMappingURL=pushprocessor.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * A list of the spec versions which the js-sdk is compatible with.\n *\n * In practice, this means: when we connect to a server, it must declare support for one of the versions in this list.\n *\n * Note that it does not *necessarily* mean that the js-sdk has good support for all the features in the listed spec\n * versions; only that we should be able to provide a base level of functionality with a server that offers support for\n * any of the listed versions.\n */\nexport var SUPPORTED_MATRIX_VERSIONS = [\"v1.1\", \"v1.2\", \"v1.3\", \"v1.4\", \"v1.5\", \"v1.6\", \"v1.7\", \"v1.8\", \"v1.9\", \"v1.10\", \"v1.11\", \"v1.12\", \"v1.13\"];\n\n/**\n * The oldest Matrix specification version the js-sdk supports.\n */\nexport var MINIMUM_MATRIX_VERSION = SUPPORTED_MATRIX_VERSIONS[0];\n\n/**\n * The most recent Matrix specification version the js-sdk supports.\n */\nexport var MAXIMUM_MATRIX_VERSION = SUPPORTED_MATRIX_VERSIONS[SUPPORTED_MATRIX_VERSIONS.length - 1];\n//# sourceMappingURL=version-support.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2018 New Vector Ltd\nCopyright 2019 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"./logger.js\";\nimport { Method, timeoutSignal } from \"./http-api/index.js\";\nimport { SUPPORTED_MATRIX_VERSIONS } from \"./version-support.js\";\n\n// Dev note: Auto discovery is part of the spec.\n// See: https://matrix.org/docs/spec/client_server/r0.4.0.html#server-discovery\n\nexport var AutoDiscoveryAction = /*#__PURE__*/function (AutoDiscoveryAction) {\n AutoDiscoveryAction[\"SUCCESS\"] = \"SUCCESS\";\n AutoDiscoveryAction[\"IGNORE\"] = \"IGNORE\";\n AutoDiscoveryAction[\"PROMPT\"] = \"PROMPT\";\n AutoDiscoveryAction[\"FAIL_PROMPT\"] = \"FAIL_PROMPT\";\n AutoDiscoveryAction[\"FAIL_ERROR\"] = \"FAIL_ERROR\";\n return AutoDiscoveryAction;\n}({});\nexport var AutoDiscoveryError = /*#__PURE__*/function (AutoDiscoveryError) {\n AutoDiscoveryError[\"Invalid\"] = \"Invalid homeserver discovery response\";\n AutoDiscoveryError[\"GenericFailure\"] = \"Failed to get autodiscovery configuration from server\";\n AutoDiscoveryError[\"InvalidHsBaseUrl\"] = \"Invalid base_url for m.homeserver\";\n AutoDiscoveryError[\"InvalidHomeserver\"] = \"Homeserver URL does not appear to be a valid Matrix homeserver\";\n AutoDiscoveryError[\"InvalidIsBaseUrl\"] = \"Invalid base_url for m.identity_server\";\n AutoDiscoveryError[\"InvalidIdentityServer\"] = \"Identity server URL does not appear to be a valid identity server\";\n AutoDiscoveryError[\"InvalidIs\"] = \"Invalid identity server discovery response\";\n AutoDiscoveryError[\"MissingWellknown\"] = \"No .well-known JSON file found\";\n AutoDiscoveryError[\"InvalidJson\"] = \"Invalid JSON\";\n AutoDiscoveryError[\"UnsupportedHomeserverSpecVersion\"] = \"The homeserver does not meet the version requirements\"; // TODO: Implement when Sydent supports the `/versions` endpoint - https://github.com/matrix-org/sydent/issues/424\n //IdentityServerTooOld = \"The identity server does not meet the minimum version requirements\",\n return AutoDiscoveryError;\n}({});\n/**\n * Utilities for automatically discovery resources, such as homeservers\n * for users to log in to.\n */\nexport class AutoDiscovery {\n /**\n * Validates and verifies client configuration information for purposes\n * of logging in. Such information includes the homeserver URL\n * and identity server URL the client would want. Additional details\n * may also be included, and will be transparently brought into the\n * response object unaltered.\n * @param wellknown - The configuration object itself, as returned\n * by the .well-known auto-discovery endpoint.\n * @returns Promise which resolves to the verified\n * configuration, which may include error states. Rejects on unexpected\n * failure, not when verification fails.\n */\n static fromDiscoveryConfig(wellknown) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _hsVersions$raw;\n // Step 1 is to get the config, which is provided to us here.\n\n // We default to an error state to make the first few checks easier to\n // write. We'll update the properties of this object over the duration\n // of this function.\n var clientConfig = {\n \"m.homeserver\": {\n state: AutoDiscovery.FAIL_ERROR,\n error: AutoDiscovery.ERROR_INVALID,\n base_url: null\n },\n \"m.identity_server\": {\n // Technically, we don't have a problem with the identity server\n // config at this point.\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null\n }\n };\n if (!(wellknown !== null && wellknown !== void 0 && wellknown[\"m.homeserver\"])) {\n logger.error(\"No m.homeserver key in config\");\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID;\n return Promise.resolve(clientConfig);\n }\n if (!wellknown[\"m.homeserver\"][\"base_url\"]) {\n logger.error(\"No m.homeserver base_url in config\");\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HS_BASE_URL;\n return Promise.resolve(clientConfig);\n }\n\n // Step 2: Make sure the homeserver URL is valid *looking*. We'll make\n // sure it points to a homeserver in Step 3.\n var hsUrl = _this.sanitizeWellKnownUrl(wellknown[\"m.homeserver\"][\"base_url\"]);\n if (!hsUrl) {\n logger.error(\"Invalid base_url for m.homeserver\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HS_BASE_URL;\n return Promise.resolve(clientConfig);\n }\n\n // Step 3: Make sure the homeserver URL points to a homeserver.\n var hsVersions = yield _this.fetchWellKnownObject(\"\".concat(hsUrl, \"/_matrix/client/versions\"));\n if (!hsVersions || !Array.isArray((_hsVersions$raw = hsVersions.raw) === null || _hsVersions$raw === void 0 ? void 0 : _hsVersions$raw[\"versions\"])) {\n logger.error(\"Invalid /versions response\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID_HOMESERVER;\n\n // Supply the base_url to the caller because they may be ignoring liveliness\n // errors, like this one.\n clientConfig[\"m.homeserver\"].base_url = hsUrl;\n return Promise.resolve(clientConfig);\n }\n\n // Step 3.1: Non-spec check to ensure the server will actually work for us. We need to check if\n // any of the versions in `SUPPORTED_MATRIX_VERSIONS` are listed in the /versions response.\n var hsVersionSet = new Set(hsVersions.raw[\"versions\"]);\n var supportedVersionFound = false;\n for (var version of SUPPORTED_MATRIX_VERSIONS) {\n if (hsVersionSet.has(version)) {\n supportedVersionFound = true;\n break;\n }\n }\n if (!supportedVersionFound) {\n logger.error(\"Homeserver does not meet version requirements\");\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_UNSUPPORTED_HOMESERVER_SPEC_VERSION;\n\n // Supply the base_url to the caller because they may be ignoring liveliness\n // errors, like this one.\n clientConfig[\"m.homeserver\"].base_url = hsUrl;\n return Promise.resolve(clientConfig);\n }\n\n // Step 4: Now that the homeserver looks valid, update our client config.\n clientConfig[\"m.homeserver\"] = {\n state: AutoDiscovery.SUCCESS,\n error: null,\n base_url: hsUrl\n };\n\n // Step 5: Try to pull out the identity server configuration\n var isUrl = \"\";\n if (wellknown[\"m.identity_server\"]) {\n // We prepare a failing identity server response to save lines later\n // in this branch.\n var failingClientConfig = {\n \"m.homeserver\": clientConfig[\"m.homeserver\"],\n \"m.identity_server\": {\n state: AutoDiscovery.FAIL_PROMPT,\n error: AutoDiscovery.ERROR_INVALID_IS,\n base_url: null\n }\n };\n\n // Step 5a: Make sure the URL is valid *looking*. We'll make sure it\n // points to an identity server in Step 5b.\n isUrl = _this.sanitizeWellKnownUrl(wellknown[\"m.identity_server\"][\"base_url\"]);\n if (!isUrl) {\n logger.error(\"Invalid base_url for m.identity_server\");\n failingClientConfig[\"m.identity_server\"].error = AutoDiscovery.ERROR_INVALID_IS_BASE_URL;\n return Promise.resolve(failingClientConfig);\n }\n\n // Step 5b: Verify there is an identity server listening on the provided\n // URL.\n var isResponse = yield _this.fetchWellKnownObject(\"\".concat(isUrl, \"/_matrix/identity/v2\"));\n if (!(isResponse !== null && isResponse !== void 0 && isResponse.raw) || isResponse.action !== AutoDiscoveryAction.SUCCESS) {\n logger.error(\"Invalid /v2 response\");\n failingClientConfig[\"m.identity_server\"].error = AutoDiscovery.ERROR_INVALID_IDENTITY_SERVER;\n\n // Supply the base_url to the caller because they may be ignoring\n // liveliness errors, like this one.\n failingClientConfig[\"m.identity_server\"].base_url = isUrl;\n return Promise.resolve(failingClientConfig);\n }\n }\n\n // Step 6: Now that the identity server is valid, or never existed,\n // populate the IS section.\n if (isUrl && isUrl.toString().length > 0) {\n clientConfig[\"m.identity_server\"] = {\n state: AutoDiscovery.SUCCESS,\n error: null,\n base_url: isUrl\n };\n }\n\n // Step 7: Copy any other keys directly into the clientConfig. This is for\n // things like custom configuration of services.\n Object.keys(wellknown).forEach(k => {\n if (k === \"m.homeserver\" || k === \"m.identity_server\") {\n // Only copy selected parts of the config to avoid overwriting\n // properties computed by the validation logic above.\n var notProps = [\"error\", \"state\", \"base_url\"];\n for (var prop of Object.keys(wellknown[k])) {\n if (notProps.includes(prop)) continue;\n // @ts-ignore - ts gets unhappy as we're mixing types here\n clientConfig[k][prop] = wellknown[k][prop];\n }\n } else {\n // Just copy the whole thing over otherwise\n clientConfig[k] = wellknown[k];\n }\n });\n\n // Step 8: Give the config to the caller (finally)\n return Promise.resolve(clientConfig);\n })();\n }\n\n /**\n * Attempts to automatically discover client configuration information\n * prior to logging in. Such information includes the homeserver URL\n * and identity server URL the client would want. Additional details\n * may also be discovered, and will be transparently included in the\n * response object unaltered.\n * @param domain - The homeserver domain to perform discovery\n * on. For example, \"matrix.org\".\n * @returns Promise which resolves to the discovered\n * configuration, which may include error states. Rejects on unexpected\n * failure, not when discovery fails.\n */\n static findClientConfig(domain) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (!domain || typeof domain !== \"string\" || domain.length === 0) {\n throw new Error(\"'domain' must be a string of non-zero length\");\n }\n\n // We use a .well-known lookup for all cases. According to the spec, we\n // can do other discovery mechanisms if we want such as custom lookups\n // however we won't bother with that here (mostly because the spec only\n // supports .well-known right now).\n //\n // By using .well-known, we need to ensure we at least pull out a URL\n // for the homeserver. We don't really need an identity server configuration\n // but will return one anyways (with state PROMPT) to make development\n // easier for clients. If we can't get a homeserver URL, all bets are\n // off on the rest of the config and we'll assume it is invalid too.\n\n // We default to an error state to make the first few checks easier to\n // write. We'll update the properties of this object over the duration\n // of this function.\n var clientConfig = {\n \"m.homeserver\": {\n state: AutoDiscovery.FAIL_ERROR,\n error: AutoDiscovery.ERROR_INVALID,\n base_url: null\n },\n \"m.identity_server\": {\n // Technically, we don't have a problem with the identity server\n // config at this point.\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null\n }\n };\n\n // Step 1: Actually request the .well-known JSON file and make sure it\n // at least has a homeserver definition.\n var domainWithProtocol = domain.includes(\"://\") ? domain : \"https://\".concat(domain);\n var wellknown = yield _this2.fetchWellKnownObject(\"\".concat(domainWithProtocol, \"/.well-known/matrix/client\"));\n if (!wellknown || wellknown.action !== AutoDiscoveryAction.SUCCESS) {\n logger.error(\"No response or error when parsing .well-known\");\n if (wellknown.reason) logger.error(wellknown.reason);\n if (wellknown.action === AutoDiscoveryAction.IGNORE) {\n clientConfig[\"m.homeserver\"] = {\n state: AutoDiscovery.PROMPT,\n error: null,\n base_url: null\n };\n } else {\n // this can only ever be FAIL_PROMPT at this point.\n clientConfig[\"m.homeserver\"].state = AutoDiscovery.FAIL_PROMPT;\n clientConfig[\"m.homeserver\"].error = AutoDiscovery.ERROR_INVALID;\n }\n return Promise.resolve(clientConfig);\n }\n\n // Step 2: Validate and parse the config\n return AutoDiscovery.fromDiscoveryConfig(wellknown.raw);\n })();\n }\n\n /**\n * Gets the raw discovery client configuration for the given domain name.\n * Should only be used if there's no validation to be done on the resulting\n * object, otherwise use findClientConfig().\n * @param domain - The domain to get the client config for.\n * @returns Promise which resolves to the domain's client config. Can\n * be an empty object.\n */\n static getRawClientConfig(domain) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var _response$raw;\n if (!domain || typeof domain !== \"string\" || domain.length === 0) {\n throw new Error(\"'domain' must be a string of non-zero length\");\n }\n var response = yield _this3.fetchWellKnownObject(\"https://\".concat(domain, \"/.well-known/matrix/client\"));\n if (!response) return {};\n return (_response$raw = response.raw) !== null && _response$raw !== void 0 ? _response$raw : {};\n })();\n }\n\n /**\n * Sanitizes a given URL to ensure it is either an HTTP or HTTP URL and\n * is suitable for the requirements laid out by .well-known auto discovery.\n * If valid, the URL will also be stripped of any trailing slashes.\n * @param url - The potentially invalid URL to sanitize.\n * @returns The sanitized URL or a falsey value if the URL is invalid.\n * @internal\n */\n static sanitizeWellKnownUrl(url) {\n if (!url) return false;\n try {\n var _parsed;\n var parsed;\n try {\n parsed = new URL(url);\n } catch (e) {\n logger.error(\"Could not parse url\", e);\n }\n if (!((_parsed = parsed) !== null && _parsed !== void 0 && _parsed.hostname)) return false;\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") return false;\n var port = parsed.port ? \":\".concat(parsed.port) : \"\";\n var path = parsed.pathname ? parsed.pathname : \"\";\n var saferUrl = \"\".concat(parsed.protocol, \"//\").concat(parsed.hostname).concat(port).concat(path);\n if (saferUrl.endsWith(\"/\")) {\n saferUrl = saferUrl.substring(0, saferUrl.length - 1);\n }\n return saferUrl;\n } catch (e) {\n logger.error(e);\n return false;\n }\n }\n static fetch(resource, options) {\n if (this.fetchFn) {\n return this.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n static setFetchFn(fetchFn) {\n AutoDiscovery.fetchFn = fetchFn;\n }\n\n /**\n * Fetches a JSON object from a given URL, as expected by all .well-known\n * related lookups. If the server gives a 404 then the `action` will be\n * IGNORE. If the server returns something that isn't JSON, the `action`\n * will be FAIL_PROMPT. For any other failure the `action` will be FAIL_PROMPT.\n *\n * The returned object will be a result of the call in object form with\n * the following properties:\n * raw: The JSON object returned by the server.\n * action: One of SUCCESS, IGNORE, or FAIL_PROMPT.\n * reason: Relatively human-readable description of what went wrong.\n * error: The actual Error, if one exists.\n * @param url - The URL to fetch a JSON object from.\n * @returns Promise which resolves to the returned state.\n * @internal\n */\n static fetchWellKnownObject(url) {\n return _asyncToGenerator(function* () {\n var response;\n try {\n response = yield AutoDiscovery.fetch(url, {\n method: Method.Get,\n signal: timeoutSignal(5000)\n });\n if (response.status === 404) {\n return {\n raw: {},\n action: AutoDiscoveryAction.IGNORE,\n reason: AutoDiscovery.ERROR_MISSING_WELLKNOWN\n };\n }\n if (response.status !== 200) {\n return {\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason: \"General failure\"\n };\n }\n } catch (err) {\n var error = err;\n var reason = \"\";\n if (typeof error === \"object\") {\n reason = error === null || error === void 0 ? void 0 : error.message;\n }\n return {\n error,\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason: reason || \"General failure\"\n };\n }\n try {\n return {\n raw: yield response.json(),\n action: AutoDiscoveryAction.SUCCESS\n };\n } catch (err) {\n var _error = err;\n return {\n error: _error,\n raw: {},\n action: AutoDiscoveryAction.FAIL_PROMPT,\n reason: (_error === null || _error === void 0 ? void 0 : _error.name) === \"SyntaxError\" ? AutoDiscovery.ERROR_INVALID_JSON : AutoDiscovery.ERROR_INVALID\n };\n }\n })();\n }\n}\n// Dev note: the constants defined here are related to but not\n// exactly the same as those in the spec. This is to hopefully\n// translate the meaning of the states in the spec, but also\n// support our own if needed.\n_defineProperty(AutoDiscovery, \"ERROR_INVALID\", AutoDiscoveryError.Invalid);\n_defineProperty(AutoDiscovery, \"ERROR_GENERIC_FAILURE\", AutoDiscoveryError.GenericFailure);\n_defineProperty(AutoDiscovery, \"ERROR_INVALID_HS_BASE_URL\", AutoDiscoveryError.InvalidHsBaseUrl);\n_defineProperty(AutoDiscovery, \"ERROR_INVALID_HOMESERVER\", AutoDiscoveryError.InvalidHomeserver);\n_defineProperty(AutoDiscovery, \"ERROR_INVALID_IS_BASE_URL\", AutoDiscoveryError.InvalidIsBaseUrl);\n_defineProperty(AutoDiscovery, \"ERROR_INVALID_IDENTITY_SERVER\", AutoDiscoveryError.InvalidIdentityServer);\n_defineProperty(AutoDiscovery, \"ERROR_INVALID_IS\", AutoDiscoveryError.InvalidIs);\n_defineProperty(AutoDiscovery, \"ERROR_MISSING_WELLKNOWN\", AutoDiscoveryError.MissingWellknown);\n_defineProperty(AutoDiscovery, \"ERROR_INVALID_JSON\", AutoDiscoveryError.InvalidJson);\n_defineProperty(AutoDiscovery, \"ERROR_UNSUPPORTED_HOMESERVER_SPEC_VERSION\", AutoDiscoveryError.UnsupportedHomeserverSpecVersion);\n_defineProperty(AutoDiscovery, \"ALL_ERRORS\", Object.keys(AutoDiscoveryError));\n/**\n * The auto discovery failed. The client is expected to communicate\n * the error to the user and refuse logging in.\n */\n_defineProperty(AutoDiscovery, \"FAIL_ERROR\", AutoDiscoveryAction.FAIL_ERROR);\n/**\n * The auto discovery failed, however the client may still recover\n * from the problem. The client is recommended to that the same\n * action it would for PROMPT while also warning the user about\n * what went wrong. The client may also treat this the same as\n * a FAIL_ERROR state.\n */\n_defineProperty(AutoDiscovery, \"FAIL_PROMPT\", AutoDiscoveryAction.FAIL_PROMPT);\n/**\n * The auto discovery didn't fail but did not find anything of\n * interest. The client is expected to prompt the user for more\n * information, or fail if it prefers.\n */\n_defineProperty(AutoDiscovery, \"PROMPT\", AutoDiscoveryAction.PROMPT);\n/**\n * The auto discovery was successful.\n */\n_defineProperty(AutoDiscovery, \"SUCCESS\", AutoDiscoveryAction.SUCCESS);\n_defineProperty(AutoDiscovery, \"fetchFn\", void 0);\n//# sourceMappingURL=autodiscovery.js.map","/*\nCopyright 2019 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var SERVICE_TYPES = /*#__PURE__*/function (SERVICE_TYPES) {\n SERVICE_TYPES[\"IS\"] = \"SERVICE_TYPE_IS\";\n // An identity server\n SERVICE_TYPES[\"IM\"] = \"SERVICE_TYPE_IM\"; // An integration manager\n return SERVICE_TYPES;\n}({});\n//# sourceMappingURL=service-types.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { Direction } from \"./event-timeline.js\";\nexport class EventContext {\n /**\n * Construct a new EventContext\n *\n * An eventcontext is used for circumstances such as search results, when we\n * have a particular event of interest, and a bunch of events before and after\n * it.\n *\n * It also stores pagination tokens for going backwards and forwards in the\n * timeline.\n *\n * @param ourEvent - the event at the centre of this context\n */\n constructor(ourEvent) {\n this.ourEvent = ourEvent;\n _defineProperty(this, \"timeline\", void 0);\n _defineProperty(this, \"ourEventIndex\", 0);\n _defineProperty(this, \"paginateTokens\", {\n [Direction.Backward]: null,\n [Direction.Forward]: null\n });\n this.timeline = [ourEvent];\n }\n\n /**\n * Get the main event of interest\n *\n * This is a convenience function for getTimeline()[getOurEventIndex()].\n *\n * @returns The event at the centre of this context.\n */\n getEvent() {\n return this.timeline[this.ourEventIndex];\n }\n\n /**\n * Get the list of events in this context\n *\n * @returns An array of MatrixEvents\n */\n getTimeline() {\n return this.timeline;\n }\n\n /**\n * Get the index in the timeline of our event\n */\n getOurEventIndex() {\n return this.ourEventIndex;\n }\n\n /**\n * Get a pagination token.\n *\n * @param backwards - true to get the pagination token for going\n */\n getPaginateToken() {\n var backwards = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return this.paginateTokens[backwards ? Direction.Backward : Direction.Forward];\n }\n\n /**\n * Set a pagination token.\n *\n * Generally this will be used only by the matrix js sdk.\n *\n * @param token - pagination token\n * @param backwards - true to set the pagination token for going\n * backwards in time\n */\n setPaginateToken(token) {\n var backwards = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.paginateTokens[backwards ? Direction.Backward : Direction.Forward] = token !== null && token !== void 0 ? token : null;\n }\n\n /**\n * Add more events to the timeline\n *\n * @param events - new events, in timeline order\n * @param atStart - true to insert new events at the start\n */\n addEvents(events) {\n var atStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // TODO: should we share logic with Room.addEventsToTimeline?\n // Should Room even use EventContext?\n\n if (atStart) {\n this.timeline = events.concat(this.timeline);\n this.ourEventIndex += events.length;\n } else {\n this.timeline = this.timeline.concat(events);\n }\n }\n}\n//# sourceMappingURL=event-context.js.map","/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { EventContext } from \"./event-context.js\";\nexport class SearchResult {\n /**\n * Create a SearchResponse from the response to /search\n */\n\n static fromJson(jsonObj, eventMapper) {\n var jsonContext = jsonObj.context || {};\n var eventsBefore = (jsonContext.events_before || []).map(eventMapper);\n var eventsAfter = (jsonContext.events_after || []).map(eventMapper);\n var context = new EventContext(eventMapper(jsonObj.result));\n\n // Filter out any contextual events which do not correspond to the same timeline (thread or room)\n var threadRootId = context.ourEvent.threadRootId;\n eventsBefore = eventsBefore.filter(e => e.threadRootId === threadRootId);\n eventsAfter = eventsAfter.filter(e => e.threadRootId === threadRootId);\n context.setPaginateToken(jsonContext.start, true);\n context.addEvents(eventsBefore, true);\n context.addEvents(eventsAfter, false);\n context.setPaginateToken(jsonContext.end, false);\n return new SearchResult(jsonObj.rank, context);\n }\n\n /**\n * Construct a new SearchResult\n *\n * @param rank - where this SearchResult ranks in the results\n * @param context - the matching event and its\n * context\n */\n constructor(rank, context) {\n this.rank = rank;\n this.context = context;\n }\n}\n//# sourceMappingURL=search-result.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n// allow camelcase as these are things that go onto the wire\n/* eslint-disable camelcase */\n\n/** Options object for {@link MatrixClient.invite}. */\n\nexport function isSendDelayedEventRequestOpts(opts) {\n if (\"parent_delay_id\" in opts && typeof opts.parent_delay_id !== \"string\") {\n // Invalid type, reject\n return false;\n }\n if (\"delay\" in opts && typeof opts.delay !== \"number\") {\n // Invalid type, reject.\n return true;\n }\n // At least one of these fields must be specified.\n return \"delay\" in opts || \"parent_delay_id\" in opts;\n}\nexport var UpdateDelayedEventAction = /*#__PURE__*/function (UpdateDelayedEventAction) {\n UpdateDelayedEventAction[\"Cancel\"] = \"cancel\";\n UpdateDelayedEventAction[\"Restart\"] = \"restart\";\n UpdateDelayedEventAction[\"Send\"] = \"send\";\n return UpdateDelayedEventAction;\n}({});\n\n/* eslint-enable camelcase */\n//# sourceMappingURL=requests.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var Visibility = /*#__PURE__*/function (Visibility) {\n Visibility[\"Public\"] = \"public\";\n Visibility[\"Private\"] = \"private\";\n return Visibility;\n}({});\nexport var Preset = /*#__PURE__*/function (Preset) {\n Preset[\"PrivateChat\"] = \"private_chat\";\n Preset[\"TrustedPrivateChat\"] = \"trusted_private_chat\";\n Preset[\"PublicChat\"] = \"public_chat\";\n return Preset;\n}({});\n// Knock and private are reserved keywords which are not yet implemented.\nexport var JoinRule = /*#__PURE__*/function (JoinRule) {\n JoinRule[\"Public\"] = \"public\";\n JoinRule[\"Invite\"] = \"invite\";\n /**\n * @deprecated Reserved keyword. Should not be used. Not yet implemented.\n */\n JoinRule[\"Private\"] = \"private\";\n JoinRule[\"Knock\"] = \"knock\";\n JoinRule[\"Restricted\"] = \"restricted\";\n return JoinRule;\n}({});\nexport var RestrictedAllowType = /*#__PURE__*/function (RestrictedAllowType) {\n RestrictedAllowType[\"RoomMembership\"] = \"m.room_membership\";\n return RestrictedAllowType;\n}({});\nexport var GuestAccess = /*#__PURE__*/function (GuestAccess) {\n GuestAccess[\"CanJoin\"] = \"can_join\";\n GuestAccess[\"Forbidden\"] = \"forbidden\";\n return GuestAccess;\n}({});\nexport var HistoryVisibility = /*#__PURE__*/function (HistoryVisibility) {\n HistoryVisibility[\"Invited\"] = \"invited\";\n HistoryVisibility[\"Joined\"] = \"joined\";\n HistoryVisibility[\"Shared\"] = \"shared\";\n HistoryVisibility[\"WorldReadable\"] = \"world_readable\";\n return HistoryVisibility;\n}({});\n\n/**\n * A policy name & url in a specific internationalisation\n * @see https://spec.matrix.org/v1.13/identity-service-api/#get_matrixidentityv2terms_response-200_internationalised-policy\n */\n\n/**\n * A versioned policy with internationalised variants\n * @see https://spec.matrix.org/v1.13/identity-service-api/#get_matrixidentityv2terms_response-200_policy-object\n */\n\n/**\n * Response from the Terms API for Identity servers\n * @see https://spec.matrix.org/v1.13/identity-service-api/#get_matrixidentityv2terms\n */\n//# sourceMappingURL=partials.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MatrixEvent, MatrixEventEvent } from \"./models/event.js\";\nimport { RelationType } from \"./@types/event.js\";\nexport function eventMapperFor(client, options) {\n var preventReEmit = Boolean(options.preventReEmit);\n var decrypt = options.decrypt !== false;\n function mapper(plainOldJsObject) {\n var room = client.getRoom(plainOldJsObject.room_id);\n var event;\n // If the event is already known to the room, let's re-use the model rather than duplicating.\n // We avoid doing this to state events as they may be forward or backwards looking which tweaks behaviour.\n if (room && plainOldJsObject.state_key === undefined) {\n event = room.findEventById(plainOldJsObject.event_id);\n }\n if (!event || event.status) {\n event = new MatrixEvent(plainOldJsObject);\n } else {\n // merge the latest unsigned data from the server\n event.setUnsigned(_objectSpread(_objectSpread({}, event.getUnsigned()), plainOldJsObject.unsigned));\n // prevent doubling up re-emitters\n preventReEmit = true;\n }\n\n // if there is a complete edit bundled alongside the event, perform the replacement.\n // (prior to MSC3925, events were automatically replaced on the server-side. MSC3925 proposes that that doesn't\n // happen automatically but the server does provide us with the whole content of the edit event.)\n var bundledEdit = event.getServerAggregatedRelation(RelationType.Replace);\n if (bundledEdit !== null && bundledEdit !== void 0 && bundledEdit.content) {\n var replacement = mapper(bundledEdit);\n // XXX: it's worth noting that the spec says we should only respect encrypted edits if, once decrypted, the\n // replacement has a `m.new_content` property. The problem is that we haven't yet decrypted the replacement\n // (it should be happening in the background), so we can't enforce this. Possibly we should for decryption\n // to complete, but that sounds a bit racy. For now, we just assume it's ok.\n event.makeReplaced(replacement);\n }\n var thread = room === null || room === void 0 ? void 0 : room.findThreadForEvent(event);\n if (thread) {\n event.setThread(thread);\n }\n if (event.isEncrypted()) {\n if (!preventReEmit) {\n client.reEmitter.reEmit(event, [MatrixEventEvent.Decrypted]);\n }\n if (decrypt) {\n client.decryptEventIfNeeded(event);\n }\n }\n if (!preventReEmit) {\n client.reEmitter.reEmit(event, [MatrixEventEvent.Replaced, MatrixEventEvent.VisibilityChange]);\n room === null || room === void 0 || room.reEmitter.reEmit(event, [MatrixEventEvent.BeforeRedaction]);\n }\n return event;\n }\n return mapper;\n}\n//# sourceMappingURL=event-mapper.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { RelationType, UNSTABLE_MSC3089_BRANCH } from \"../@types/event.js\";\nimport { EventTimeline } from \"./event-timeline.js\";\n/**\n * Represents a [MSC3089](https://github.com/matrix-org/matrix-doc/pull/3089) branch - a reference\n * to a file (leaf) in the tree. Note that this is UNSTABLE and subject to breaking changes\n * without notice.\n */\nexport class MSC3089Branch {\n constructor(client, indexEvent, directory) {\n this.client = client;\n this.indexEvent = indexEvent;\n this.directory = directory;\n } // Nothing to do\n\n /**\n * The file ID.\n */\n get id() {\n var stateKey = this.indexEvent.getStateKey();\n if (!stateKey) {\n throw new Error(\"State key not found for branch\");\n }\n return stateKey;\n }\n\n /**\n * Whether this branch is active/valid.\n */\n get isActive() {\n return this.indexEvent.getContent()[\"active\"] === true;\n }\n\n /**\n * Version for the file, one-indexed.\n */\n get version() {\n var _this$indexEvent$getC;\n return (_this$indexEvent$getC = this.indexEvent.getContent()[\"version\"]) !== null && _this$indexEvent$getC !== void 0 ? _this$indexEvent$getC : 1;\n }\n get roomId() {\n return this.indexEvent.getRoomId();\n }\n\n /**\n * Deletes the file from the tree, including all prior edits/versions.\n * @returns Promise which resolves when complete.\n */\n delete() {\n var _this = this;\n return _asyncToGenerator(function* () {\n yield _this.client.sendStateEvent(_this.roomId, UNSTABLE_MSC3089_BRANCH.name, {}, _this.id);\n yield _this.client.redactEvent(_this.roomId, _this.id);\n var nextVersion = (yield _this.getVersionHistory())[1]; // [0] will be us\n if (nextVersion) yield nextVersion.delete(); // implicit recursion\n })();\n }\n\n /**\n * Gets the name for this file.\n * @returns The name, or \"Unnamed File\" if unknown.\n */\n getName() {\n return this.indexEvent.getContent()[\"name\"] || \"Unnamed File\";\n }\n\n /**\n * Sets the name for this file.\n * @param name - The new name for this file.\n * @returns Promise which resolves when complete.\n */\n setName(name) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n yield _this2.client.sendStateEvent(_this2.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, _this2.indexEvent.getContent()), {}, {\n name: name\n }), _this2.id);\n })();\n }\n\n /**\n * Gets whether or not a file is locked.\n * @returns True if locked, false otherwise.\n */\n isLocked() {\n return this.indexEvent.getContent()[\"locked\"] || false;\n }\n\n /**\n * Sets a file as locked or unlocked.\n * @param locked - True to lock the file, false otherwise.\n * @returns Promise which resolves when complete.\n */\n setLocked(locked) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n yield _this3.client.sendStateEvent(_this3.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, _this3.indexEvent.getContent()), {}, {\n locked: locked\n }), _this3.id);\n })();\n }\n\n /**\n * Gets information about the file needed to download it.\n * @returns Information about the file.\n */\n getFileInfo() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var event = yield _this4.getFileEvent();\n var file = event.getOriginalContent()[\"file\"];\n var httpUrl = _this4.client.mxcUrlToHttp(file[\"url\"]);\n if (!httpUrl) {\n throw new Error(\"No HTTP URL available for \".concat(file[\"url\"]));\n }\n return {\n info: file,\n httpUrl: httpUrl\n };\n })();\n }\n\n /**\n * Gets the event the file points to.\n * @returns Promise which resolves to the file's event.\n */\n getFileEvent() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var room = _this5.client.getRoom(_this5.roomId);\n if (!room) throw new Error(\"Unknown room\");\n var event = room.getUnfilteredTimelineSet().findEventById(_this5.id);\n\n // keep scrolling back if needed until we find the event or reach the start of the room:\n while (!event && room.getLiveTimeline().getState(EventTimeline.BACKWARDS).paginationToken) {\n yield _this5.client.scrollback(room, 100);\n event = room.getUnfilteredTimelineSet().findEventById(_this5.id);\n }\n if (!event) throw new Error(\"Failed to find event\");\n\n // Sometimes the event isn't decrypted for us, so do that.\n yield _this5.client.decryptEventIfNeeded(event);\n return event;\n })();\n }\n\n /**\n * Creates a new version of this file with contents in a type that is compatible with MatrixClient.uploadContent().\n * @param name - The name of the file.\n * @param encryptedContents - The encrypted contents.\n * @param info - The encrypted file information.\n * @param additionalContent - Optional event content fields to include in the message.\n * @returns Promise which resolves to the file event's sent response.\n */\n createNewVersion(name, encryptedContents, info, additionalContent) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var fileEventResponse = yield _this6.directory.createFile(name, encryptedContents, info, _objectSpread(_objectSpread({}, additionalContent !== null && additionalContent !== void 0 ? additionalContent : {}), {}, {\n \"m.new_content\": true,\n \"m.relates_to\": {\n rel_type: RelationType.Replace,\n event_id: _this6.id\n }\n }));\n\n // Update the version of the new event\n yield _this6.client.sendStateEvent(_this6.roomId, UNSTABLE_MSC3089_BRANCH.name, {\n active: true,\n name: name,\n version: _this6.version + 1\n }, fileEventResponse[\"event_id\"]);\n\n // Deprecate ourselves\n yield _this6.client.sendStateEvent(_this6.roomId, UNSTABLE_MSC3089_BRANCH.name, _objectSpread(_objectSpread({}, _this6.indexEvent.getContent()), {}, {\n active: false\n }), _this6.id);\n return fileEventResponse;\n })();\n }\n\n /**\n * Gets the file's version history, starting at this file.\n * @returns Promise which resolves to the file's version history, with the\n * first element being the current version and the last element being the first version.\n */\n getVersionHistory() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var fileHistory = [];\n fileHistory.push(_this7); // start with ourselves\n\n var room = _this7.client.getRoom(_this7.roomId);\n if (!room) throw new Error(\"Invalid or unknown room\");\n\n // Clone the timeline to reverse it, getting most-recent-first ordering, hopefully\n // shortening the awful loop below. Without the clone, we can unintentionally mutate\n // the timeline.\n var timelineEvents = [...room.getLiveTimeline().getEvents()].reverse();\n\n // XXX: This is a very inefficient search, but it's the best we can do with the\n // relations structure we have in the SDK. As of writing, it is not worth the\n // investment in improving the structure.\n var childEvent;\n var parentEvent = yield _this7.getFileEvent();\n do {\n childEvent = timelineEvents.find(e => e.replacingEventId() === parentEvent.getId());\n if (childEvent) {\n var branch = _this7.directory.getFile(childEvent.getId());\n if (branch) {\n fileHistory.push(branch);\n parentEvent = childEvent;\n } else {\n break; // prevent infinite loop\n }\n }\n } while (childEvent);\n return fileHistory;\n })();\n }\n}\n//# sourceMappingURL=MSC3089Branch.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { EventType, MsgType, UNSTABLE_MSC3089_BRANCH, UNSTABLE_MSC3089_LEAF } from \"../@types/event.js\";\nimport { logger } from \"../logger.js\";\nimport { averageBetweenStrings, DEFAULT_ALPHABET, lexicographicCompare, nextString, prevString, simpleRetryOperation } from \"../utils.js\";\nimport { MSC3089Branch } from \"./MSC3089Branch.js\";\nimport { MatrixError } from \"../http-api/index.js\";\nimport { KnownMembership } from \"../@types/membership.js\";\n/**\n * The recommended defaults for a tree space's power levels. Note that this\n * is UNSTABLE and subject to breaking changes without notice.\n */\nexport var DEFAULT_TREE_POWER_LEVELS_TEMPLATE = {\n // Owner\n invite: 100,\n kick: 100,\n ban: 100,\n // Editor\n redact: 50,\n state_default: 50,\n events_default: 50,\n // Viewer\n users_default: 0,\n // Mixed\n events: {\n [EventType.RoomPowerLevels]: 100,\n [EventType.RoomHistoryVisibility]: 100,\n [EventType.RoomTombstone]: 100,\n [EventType.RoomEncryption]: 100,\n [EventType.RoomName]: 50,\n [EventType.RoomMessage]: 50,\n [EventType.RoomMessageEncrypted]: 50,\n [EventType.Sticker]: 50\n },\n users: {} // defined by calling code\n};\n\n/**\n * Ease-of-use representation for power levels represented as simple roles.\n * Note that this is UNSTABLE and subject to breaking changes without notice.\n */\nexport var TreePermissions = /*#__PURE__*/function (TreePermissions) {\n TreePermissions[\"Viewer\"] = \"viewer\";\n // Default\n TreePermissions[\"Editor\"] = \"editor\";\n // \"Moderator\" or ~PL50\n TreePermissions[\"Owner\"] = \"owner\"; // \"Admin\" or PL100\n return TreePermissions;\n}({});\n/**\n * Represents a [MSC3089](https://github.com/matrix-org/matrix-doc/pull/3089)\n * file tree Space. Note that this is UNSTABLE and subject to breaking changes\n * without notice.\n */\nexport class MSC3089TreeSpace {\n constructor(client, roomId) {\n this.client = client;\n this.roomId = roomId;\n _defineProperty(this, \"room\", void 0);\n this.room = this.client.getRoom(this.roomId);\n if (!this.room) throw new Error(\"Unknown room\");\n }\n\n /**\n * Syntactic sugar for room ID of the Space.\n */\n get id() {\n return this.roomId;\n }\n\n /**\n * Whether or not this is a top level space.\n */\n get isTopLevel() {\n // XXX: This is absolutely not how you find out if the space is top level\n // but is safe for a managed usecase like we offer in the SDK.\n var parentEvents = this.room.currentState.getStateEvents(EventType.SpaceParent);\n if (!(parentEvents !== null && parentEvents !== void 0 && parentEvents.length)) return true;\n return parentEvents.every(e => {\n var _e$getContent;\n return !((_e$getContent = e.getContent()) !== null && _e$getContent !== void 0 && _e$getContent[\"via\"]);\n });\n }\n\n /**\n * Sets the name of the tree space.\n * @param name - The new name for the space.\n * @returns Promise which resolves when complete.\n */\n setName(name) {\n var _this = this;\n return _asyncToGenerator(function* () {\n yield _this.client.sendStateEvent(_this.roomId, EventType.RoomName, {\n name\n }, \"\");\n })();\n }\n\n /**\n * Invites a user to the tree space. They will be given the default Viewer\n * permission level unless specified elsewhere.\n * @param userId - The user ID to invite.\n * @param andSubspaces - True (default) to invite the user to all\n * directories/subspaces too, recursively.\n * @returns Promise which resolves when complete.\n */\n invite(userId) {\n var _arguments = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var andSubspaces = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : true;\n var promises = [_this2.retryInvite(userId)];\n if (andSubspaces) {\n promises.push(..._this2.getDirectories().map(d => d.invite(userId, andSubspaces)));\n }\n yield Promise.all(promises);\n })();\n }\n retryInvite(userId) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n yield simpleRetryOperation(() => _this3.client.invite(_this3.roomId, userId), e => {\n // We don't want to retry permission errors forever...\n if (e instanceof MatrixError && e.errcode === \"M_FORBIDDEN\") {\n return false;\n }\n return true;\n });\n })();\n }\n\n /**\n * Sets the permissions of a user to the given role. Note that if setting a user\n * to Owner then they will NOT be able to be demoted. If the user does not have\n * permission to change the power level of the target, an error will be thrown.\n * @param userId - The user ID to change the role of.\n * @param role - The role to assign.\n * @returns Promise which resolves when complete.\n */\n setPermissions(userId, role) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var _pls$events;\n var currentPls = _this4.room.currentState.getStateEvents(EventType.RoomPowerLevels, \"\");\n if (Array.isArray(currentPls)) throw new Error(\"Unexpected return type for power levels\");\n var pls = (currentPls === null || currentPls === void 0 ? void 0 : currentPls.getContent()) || {};\n var viewLevel = pls[\"users_default\"] || 0;\n var editLevel = pls[\"events_default\"] || 50;\n var adminLevel = ((_pls$events = pls[\"events\"]) === null || _pls$events === void 0 ? void 0 : _pls$events[EventType.RoomPowerLevels]) || 100;\n var users = pls[\"users\"] || {};\n switch (role) {\n case TreePermissions.Viewer:\n users[userId] = viewLevel;\n break;\n case TreePermissions.Editor:\n users[userId] = editLevel;\n break;\n case TreePermissions.Owner:\n users[userId] = adminLevel;\n break;\n default:\n throw new Error(\"Invalid role: \" + role);\n }\n pls[\"users\"] = users;\n yield _this4.client.sendStateEvent(_this4.roomId, EventType.RoomPowerLevels, pls, \"\");\n })();\n }\n\n /**\n * Gets the current permissions of a user. Note that any users missing explicit permissions (or not\n * in the space) will be considered Viewers. Appropriate membership checks need to be performed\n * elsewhere.\n * @param userId - The user ID to check permissions of.\n * @returns The permissions for the user, defaulting to Viewer.\n */\n getPermissions(userId) {\n var _pls$events2, _pls$users;\n var currentPls = this.room.currentState.getStateEvents(EventType.RoomPowerLevels, \"\");\n if (Array.isArray(currentPls)) throw new Error(\"Unexpected return type for power levels\");\n var pls = (currentPls === null || currentPls === void 0 ? void 0 : currentPls.getContent()) || {};\n var viewLevel = pls[\"users_default\"] || 0;\n var editLevel = pls[\"events_default\"] || 50;\n var adminLevel = ((_pls$events2 = pls[\"events\"]) === null || _pls$events2 === void 0 ? void 0 : _pls$events2[EventType.RoomPowerLevels]) || 100;\n var userLevel = ((_pls$users = pls[\"users\"]) === null || _pls$users === void 0 ? void 0 : _pls$users[userId]) || viewLevel;\n if (userLevel >= adminLevel) return TreePermissions.Owner;\n if (userLevel >= editLevel) return TreePermissions.Editor;\n return TreePermissions.Viewer;\n }\n\n /**\n * Creates a directory under this tree space, represented as another tree space.\n * @param name - The name for the directory.\n * @returns Promise which resolves to the created directory.\n */\n createDirectory(name) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var directory = yield _this5.client.unstableCreateFileTree(name);\n yield _this5.client.sendStateEvent(_this5.roomId, EventType.SpaceChild, {\n via: [_this5.client.getDomain()]\n }, directory.roomId);\n yield _this5.client.sendStateEvent(directory.roomId, EventType.SpaceParent, {\n via: [_this5.client.getDomain()]\n }, _this5.roomId);\n return directory;\n })();\n }\n\n /**\n * Gets a list of all known immediate subdirectories to this tree space.\n * @returns The tree spaces (directories). May be empty, but not null.\n */\n getDirectories() {\n var trees = [];\n var children = this.room.currentState.getStateEvents(EventType.SpaceChild);\n for (var child of children) {\n try {\n var stateKey = child.getStateKey();\n if (stateKey) {\n var tree = this.client.unstableGetFileTreeSpace(stateKey);\n if (tree) trees.push(tree);\n }\n } catch (e) {\n logger.warn(\"Unable to create tree space instance for listing. Are we joined?\", e);\n }\n }\n return trees;\n }\n\n /**\n * Gets a subdirectory of a given ID under this tree space. Note that this will not recurse\n * into children and instead only look one level deep.\n * @param roomId - The room ID (directory ID) to find.\n * @returns The directory, or undefined if not found.\n */\n getDirectory(roomId) {\n return this.getDirectories().find(r => r.roomId === roomId);\n }\n\n /**\n * Deletes the tree, kicking all members and deleting **all subdirectories**.\n * @returns Promise which resolves when complete.\n */\n delete() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var subdirectories = _this6.getDirectories();\n for (var dir of subdirectories) {\n yield dir.delete();\n }\n var kickMemberships = [KnownMembership.Invite, KnownMembership.Knock, KnownMembership.Join];\n var members = _this6.room.currentState.getStateEvents(EventType.RoomMember);\n for (var member of members) {\n var isNotUs = member.getStateKey() !== _this6.client.getUserId();\n if (isNotUs && kickMemberships.includes(member.getContent().membership)) {\n var stateKey = member.getStateKey();\n if (!stateKey) {\n throw new Error(\"State key not found for branch\");\n }\n yield _this6.client.kick(_this6.roomId, stateKey, \"Room deleted\");\n }\n }\n yield _this6.client.leave(_this6.roomId);\n })();\n }\n getOrderedChildren(children) {\n var ordered = children.map(c => ({\n roomId: c.getStateKey(),\n order: c.getContent()[\"order\"]\n })).filter(c => c.roomId);\n ordered.sort((a, b) => {\n if (a.order && !b.order) {\n return -1;\n } else if (!a.order && b.order) {\n return 1;\n } else if (!a.order && !b.order) {\n var _roomA$currentState$g, _roomA$currentState$g2, _roomB$currentState$g, _roomB$currentState$g2;\n var roomA = this.client.getRoom(a.roomId);\n var roomB = this.client.getRoom(b.roomId);\n if (!roomA || !roomB) {\n // just don't bother trying to do more partial sorting\n return lexicographicCompare(a.roomId, b.roomId);\n }\n var createTsA = (_roomA$currentState$g = (_roomA$currentState$g2 = roomA.currentState.getStateEvents(EventType.RoomCreate, \"\")) === null || _roomA$currentState$g2 === void 0 ? void 0 : _roomA$currentState$g2.getTs()) !== null && _roomA$currentState$g !== void 0 ? _roomA$currentState$g : 0;\n var createTsB = (_roomB$currentState$g = (_roomB$currentState$g2 = roomB.currentState.getStateEvents(EventType.RoomCreate, \"\")) === null || _roomB$currentState$g2 === void 0 ? void 0 : _roomB$currentState$g2.getTs()) !== null && _roomB$currentState$g !== void 0 ? _roomB$currentState$g : 0;\n if (createTsA === createTsB) {\n return lexicographicCompare(a.roomId, b.roomId);\n }\n return createTsA - createTsB;\n } else {\n // both not-null orders\n return lexicographicCompare(a.order, b.order);\n }\n });\n return ordered;\n }\n getParentRoom() {\n var parents = this.room.currentState.getStateEvents(EventType.SpaceParent);\n var parent = parents[0]; // XXX: Wild assumption\n if (!parent) throw new Error(\"Expected to have a parent in a non-top level space\");\n\n // XXX: We are assuming the parent is a valid tree space.\n // We probably don't need to validate the parent room state for this usecase though.\n var stateKey = parent.getStateKey();\n if (!stateKey) throw new Error(\"No state key found for parent\");\n var parentRoom = this.client.getRoom(stateKey);\n if (!parentRoom) throw new Error(\"Unable to locate room for parent\");\n return parentRoom;\n }\n\n /**\n * Gets the current order index for this directory. Note that if this is the top level space\n * then -1 will be returned.\n * @returns The order index of this space.\n */\n getOrder() {\n if (this.isTopLevel) return -1;\n var parentRoom = this.getParentRoom();\n var children = parentRoom.currentState.getStateEvents(EventType.SpaceChild);\n var ordered = this.getOrderedChildren(children);\n return ordered.findIndex(c => c.roomId === this.roomId);\n }\n\n /**\n * Sets the order index for this directory within its parent. Note that if this is a top level\n * space then an error will be thrown. -1 can be used to move the child to the start, and numbers\n * larger than the number of children can be used to move the child to the end.\n * @param index - The new order index for this space.\n * @returns Promise which resolves when complete.\n * @throws Throws if this is a top level space.\n */\n setOrder(index) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var _currentChild$getCont2;\n if (_this7.isTopLevel) throw new Error(\"Cannot set order of top level spaces currently\");\n var parentRoom = _this7.getParentRoom();\n var children = parentRoom.currentState.getStateEvents(EventType.SpaceChild);\n var ordered = _this7.getOrderedChildren(children);\n index = Math.max(Math.min(index, ordered.length - 1), 0);\n var currentIndex = _this7.getOrder();\n var movingUp = currentIndex < index;\n if (movingUp && index === ordered.length - 1) {\n index--;\n } else if (!movingUp && index === 0) {\n index++;\n }\n var prev = ordered[movingUp ? index : index - 1];\n var next = ordered[movingUp ? index + 1 : index];\n var newOrder = DEFAULT_ALPHABET[0];\n var ensureBeforeIsSane = false;\n if (!prev) {\n // Move to front\n if (next !== null && next !== void 0 && next.order) {\n newOrder = prevString(next.order);\n }\n } else if (index === ordered.length - 1) {\n // Move to back\n if (next !== null && next !== void 0 && next.order) {\n newOrder = nextString(next.order);\n }\n } else {\n // Move somewhere in the middle\n var startOrder = prev === null || prev === void 0 ? void 0 : prev.order;\n var endOrder = next === null || next === void 0 ? void 0 : next.order;\n if (startOrder && endOrder) {\n if (startOrder === endOrder) {\n // Error case: just move +1 to break out of awful math\n newOrder = nextString(startOrder);\n } else {\n newOrder = averageBetweenStrings(startOrder, endOrder);\n }\n } else {\n if (startOrder) {\n // We're at the end (endOrder is null, so no explicit order)\n newOrder = nextString(startOrder);\n } else if (endOrder) {\n // We're at the start (startOrder is null, so nothing before us)\n newOrder = prevString(endOrder);\n } else {\n // Both points are unknown. We're likely in a range where all the children\n // don't have particular order values, so we may need to update them too.\n // The other possibility is there's only us as a child, but we should have\n // shown up in the other states.\n ensureBeforeIsSane = true;\n }\n }\n }\n if (ensureBeforeIsSane) {\n // We were asked by the order algorithm to prepare the moving space for a landing\n // in the undefined order part of the order array, which means we need to update the\n // spaces that come before it with a stable order value.\n var lastOrder;\n for (var i = 0; i <= index; i++) {\n var target = ordered[i];\n if (i === 0) {\n lastOrder = target.order;\n }\n if (!target.order) {\n var _currentChild$getCont;\n // XXX: We should be creating gaps to avoid conflicts\n lastOrder = lastOrder ? nextString(lastOrder) : DEFAULT_ALPHABET[0];\n var _currentChild = parentRoom.currentState.getStateEvents(EventType.SpaceChild, target.roomId);\n var _content = (_currentChild$getCont = _currentChild === null || _currentChild === void 0 ? void 0 : _currentChild.getContent()) !== null && _currentChild$getCont !== void 0 ? _currentChild$getCont : {\n via: [_this7.client.getDomain()]\n };\n yield _this7.client.sendStateEvent(parentRoom.roomId, EventType.SpaceChild, _objectSpread(_objectSpread({}, _content), {}, {\n order: lastOrder\n }), target.roomId);\n } else {\n lastOrder = target.order;\n }\n }\n if (lastOrder) {\n newOrder = nextString(lastOrder);\n }\n }\n\n // TODO: Deal with order conflicts by reordering\n\n // Now we can finally update our own order state\n var currentChild = parentRoom.currentState.getStateEvents(EventType.SpaceChild, _this7.roomId);\n var content = (_currentChild$getCont2 = currentChild === null || currentChild === void 0 ? void 0 : currentChild.getContent()) !== null && _currentChild$getCont2 !== void 0 ? _currentChild$getCont2 : {\n via: [_this7.client.getDomain()]\n };\n yield _this7.client.sendStateEvent(parentRoom.roomId, EventType.SpaceChild, _objectSpread(_objectSpread({}, content), {}, {\n // TODO: Safely constrain to 50 character limit required by spaces.\n order: newOrder\n }), _this7.roomId);\n })();\n }\n\n /**\n * Creates (uploads) a new file to this tree. The file must have already been encrypted for the room.\n * The file contents are in a type that is compatible with MatrixClient.uploadContent().\n * @param name - The name of the file.\n * @param encryptedContents - The encrypted contents.\n * @param info - The encrypted file information.\n * @param additionalContent - Optional event content fields to include in the message.\n * @returns Promise which resolves to the file event's sent response.\n */\n createFile(name, encryptedContents, info, additionalContent) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n var _yield$_this8$client$ = yield _this8.client.uploadContent(encryptedContents, {\n includeFilename: false\n }),\n mxc = _yield$_this8$client$.content_uri;\n info.url = mxc;\n var fileContent = {\n msgtype: MsgType.File,\n body: name,\n url: mxc,\n file: info\n };\n additionalContent = additionalContent !== null && additionalContent !== void 0 ? additionalContent : {};\n if (additionalContent[\"m.new_content\"]) {\n // We do the right thing according to the spec, but due to how relations are\n // handled we also end up duplicating this information to the regular `content`\n // as well.\n additionalContent[\"m.new_content\"] = fileContent;\n }\n var res = yield _this8.client.sendMessage(_this8.roomId, _objectSpread(_objectSpread(_objectSpread({}, additionalContent), fileContent), {}, {\n [UNSTABLE_MSC3089_LEAF.name]: {}\n }));\n yield _this8.client.sendStateEvent(_this8.roomId, UNSTABLE_MSC3089_BRANCH.name, {\n active: true,\n name: name\n }, res[\"event_id\"]);\n return res;\n })();\n }\n\n /**\n * Retrieves a file from the tree.\n * @param fileEventId - The event ID of the file.\n * @returns The file, or null if not found.\n */\n getFile(fileEventId) {\n var branch = this.room.currentState.getStateEvents(UNSTABLE_MSC3089_BRANCH.name, fileEventId);\n return branch ? new MSC3089Branch(this.client, branch, this) : null;\n }\n\n /**\n * Gets an array of all known files for the tree.\n * @returns The known files. May be empty, but not null.\n */\n listFiles() {\n return this.listAllFiles().filter(b => b.isActive);\n }\n\n /**\n * Gets an array of all known files for the tree, including inactive/invalid ones.\n * @returns The known files. May be empty, but not null.\n */\n listAllFiles() {\n var _this$room$currentSta;\n var branches = (_this$room$currentSta = this.room.currentState.getStateEvents(UNSTABLE_MSC3089_BRANCH.name)) !== null && _this$room$currentSta !== void 0 ? _this$room$currentSta : [];\n return branches.map(e => new MSC3089Branch(this.client, e, this));\n }\n}\n//# sourceMappingURL=MSC3089TreeSpace.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n// Types relating to the /search API\n/* eslint-disable camelcase */\nvar GroupKey = /*#__PURE__*/function (GroupKey) {\n GroupKey[\"RoomId\"] = \"room_id\";\n GroupKey[\"Sender\"] = \"sender\";\n return GroupKey;\n}(GroupKey || {});\nexport var SearchOrderBy = /*#__PURE__*/function (SearchOrderBy) {\n SearchOrderBy[\"Recent\"] = \"recent\";\n SearchOrderBy[\"Rank\"] = \"rank\";\n return SearchOrderBy;\n}({});\n\n/* eslint-enable camelcase */\n//# sourceMappingURL=search.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015, 2016 OpenMarket Ltd\nCopyright 2017 New Vector Ltd\nCopyright 2019, 2020 The Matrix.org Foundation C.I.C.\nCopyright 2021 - 2022 Šimon Brandner <simon.bra.ag@gmail.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { GroupCallType, GroupCallState } from \"../webrtc/groupCall.js\";\nimport { logger } from \"../logger.js\";\nexport var MediaHandlerEvent = /*#__PURE__*/function (MediaHandlerEvent) {\n MediaHandlerEvent[\"LocalStreamsChanged\"] = \"local_streams_changed\";\n return MediaHandlerEvent;\n}({});\nexport class MediaHandler extends TypedEventEmitter {\n constructor(client) {\n super();\n this.client = client;\n _defineProperty(this, \"audioInput\", void 0);\n _defineProperty(this, \"audioSettings\", void 0);\n _defineProperty(this, \"videoInput\", void 0);\n _defineProperty(this, \"localUserMediaStream\", void 0);\n _defineProperty(this, \"userMediaStreams\", []);\n _defineProperty(this, \"screensharingStreams\", []);\n // Promise chain to serialise calls to getMediaStream\n _defineProperty(this, \"getMediaStreamPromise\", void 0);\n }\n restoreMediaSettings(audioInput, videoInput) {\n this.audioInput = audioInput;\n this.videoInput = videoInput;\n }\n\n /**\n * Set an audio input device to use for MatrixCalls\n * @param deviceId - the identifier for the device\n * undefined treated as unset\n */\n setAudioInput(deviceId) {\n var _this = this;\n return _asyncToGenerator(function* () {\n logger.info(\"MediaHandler setAudioInput() running (deviceId=\".concat(deviceId, \")\"));\n if (_this.audioInput === deviceId) return;\n _this.audioInput = deviceId;\n yield _this.updateLocalUsermediaStreams();\n })();\n }\n\n /**\n * Set audio settings for MatrixCalls\n * @param opts - audio options to set\n */\n setAudioSettings(opts) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n logger.info(\"MediaHandler setAudioSettings() running (opts=\".concat(JSON.stringify(opts), \")\"));\n _this2.audioSettings = Object.assign({}, opts);\n yield _this2.updateLocalUsermediaStreams();\n })();\n }\n\n /**\n * Set a video input device to use for MatrixCalls\n * @param deviceId - the identifier for the device\n * undefined treated as unset\n */\n setVideoInput(deviceId) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n logger.info(\"MediaHandler setVideoInput() running (deviceId=\".concat(deviceId, \")\"));\n if (_this3.videoInput === deviceId) return;\n _this3.videoInput = deviceId;\n yield _this3.updateLocalUsermediaStreams();\n })();\n }\n\n /**\n * Set media input devices to use for MatrixCalls\n * @param audioInput - the identifier for the audio device\n * @param videoInput - the identifier for the video device\n * undefined treated as unset\n */\n setMediaInputs(audioInput, videoInput) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n logger.log(\"MediaHandler setMediaInputs() running (audioInput: \".concat(audioInput, \" videoInput: \").concat(videoInput, \")\"));\n _this4.audioInput = audioInput;\n _this4.videoInput = videoInput;\n yield _this4.updateLocalUsermediaStreams();\n })();\n }\n\n /*\n * Requests new usermedia streams and replace the old ones\n */\n updateLocalUsermediaStreams() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n if (_this5.userMediaStreams.length === 0) return;\n var callMediaStreamParams = new Map();\n for (var call of _this5.client.callEventHandler.calls.values()) {\n callMediaStreamParams.set(call.callId, {\n audio: call.hasLocalUserMediaAudioTrack,\n video: call.hasLocalUserMediaVideoTrack\n });\n }\n for (var stream of _this5.userMediaStreams) {\n logger.log(\"MediaHandler updateLocalUsermediaStreams() stopping all tracks (streamId=\".concat(stream.id, \")\"));\n for (var track of stream.getTracks()) {\n track.stop();\n }\n }\n _this5.userMediaStreams = [];\n _this5.localUserMediaStream = undefined;\n for (var _call of _this5.client.callEventHandler.calls.values()) {\n if (_call.callHasEnded() || !callMediaStreamParams.has(_call.callId)) {\n continue;\n }\n var _ref = callMediaStreamParams.get(_call.callId),\n audio = _ref.audio,\n video = _ref.video;\n logger.log(\"MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (callId=\".concat(_call.callId, \")\"));\n var _stream = yield _this5.getUserMediaStream(audio, video);\n if (_call.callHasEnded()) {\n continue;\n }\n yield _call.updateLocalUsermediaStream(_stream);\n }\n for (var groupCall of _this5.client.groupCallEventHandler.groupCalls.values()) {\n if (!groupCall.localCallFeed) {\n continue;\n }\n logger.log(\"MediaHandler updateLocalUsermediaStreams() calling getUserMediaStream() (groupCallId=\".concat(groupCall.groupCallId, \")\"));\n var _stream2 = yield _this5.getUserMediaStream(true, groupCall.type === GroupCallType.Video);\n if (groupCall.state === GroupCallState.Ended) {\n continue;\n }\n yield groupCall.updateLocalUsermediaStream(_stream2);\n }\n _this5.emit(MediaHandlerEvent.LocalStreamsChanged);\n })();\n }\n hasAudioDevice() {\n return _asyncToGenerator(function* () {\n try {\n var devices = yield navigator.mediaDevices.enumerateDevices();\n return devices.filter(device => device.kind === \"audioinput\").length > 0;\n } catch (err) {\n logger.log(\"MediaHandler hasAudioDevice() calling navigator.mediaDevices.enumerateDevices with error\", err);\n return false;\n }\n })();\n }\n hasVideoDevice() {\n return _asyncToGenerator(function* () {\n try {\n var devices = yield navigator.mediaDevices.enumerateDevices();\n return devices.filter(device => device.kind === \"videoinput\").length > 0;\n } catch (err) {\n logger.log(\"MediaHandler hasVideoDevice() calling navigator.mediaDevices.enumerateDevices with error\", err);\n return false;\n }\n })();\n }\n\n /**\n * @param audio - should have an audio track\n * @param video - should have a video track\n * @param reusable - is allowed to be reused by the MediaHandler\n * @returns based on passed parameters\n */\n getUserMediaStream(audio, video) {\n var _arguments = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var reusable = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : true;\n // Serialise calls, othertwise we can't sensibly re-use the stream\n if (_this6.getMediaStreamPromise) {\n _this6.getMediaStreamPromise = _this6.getMediaStreamPromise.then(() => {\n return _this6.getUserMediaStreamInternal(audio, video, reusable);\n });\n } else {\n _this6.getMediaStreamPromise = _this6.getUserMediaStreamInternal(audio, video, reusable);\n }\n return _this6.getMediaStreamPromise;\n })();\n }\n getUserMediaStreamInternal(audio, video, reusable) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var shouldRequestAudio = audio && (yield _this7.hasAudioDevice());\n var shouldRequestVideo = video && (yield _this7.hasVideoDevice());\n var stream;\n var canReuseStream = true;\n if (_this7.localUserMediaStream) {\n var _this7$localUserMedia, _this7$localUserMedia2;\n // This figures out if we can reuse the current localUsermediaStream\n // based on whether or not the \"mute state\" (presence of tracks of a\n // given kind) matches what is being requested\n if (shouldRequestAudio !== _this7.localUserMediaStream.getAudioTracks().length > 0) {\n canReuseStream = false;\n }\n if (shouldRequestVideo !== _this7.localUserMediaStream.getVideoTracks().length > 0) {\n canReuseStream = false;\n }\n\n // This code checks that the device ID is the same as the localUserMediaStream stream, but we update\n // the localUserMediaStream whenever the device ID changes (apart from when restoring) so it's not\n // clear why this would ever be different, unless there's a race.\n if (shouldRequestAudio && ((_this7$localUserMedia = _this7.localUserMediaStream.getAudioTracks()[0]) === null || _this7$localUserMedia === void 0 || (_this7$localUserMedia = _this7$localUserMedia.getSettings()) === null || _this7$localUserMedia === void 0 ? void 0 : _this7$localUserMedia.deviceId) !== _this7.audioInput) {\n canReuseStream = false;\n }\n if (shouldRequestVideo && ((_this7$localUserMedia2 = _this7.localUserMediaStream.getVideoTracks()[0]) === null || _this7$localUserMedia2 === void 0 || (_this7$localUserMedia2 = _this7$localUserMedia2.getSettings()) === null || _this7$localUserMedia2 === void 0 ? void 0 : _this7$localUserMedia2.deviceId) !== _this7.videoInput) {\n canReuseStream = false;\n }\n } else {\n canReuseStream = false;\n }\n if (!canReuseStream) {\n var constraints;\n try {\n // Not specifying exact for deviceId means switching devices does not always work,\n // try with exact and fallback to ideal if it fails\n constraints = _this7.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, true);\n stream = yield navigator.mediaDevices.getUserMedia(constraints);\n } catch (e) {\n logger.warn(\"MediaHandler getUserMediaStreamInternal() error (e=\".concat(e, \"), retrying without exact deviceId\"));\n constraints = _this7.getUserMediaContraints(shouldRequestAudio, shouldRequestVideo, false);\n stream = yield navigator.mediaDevices.getUserMedia(constraints);\n }\n logger.log(\"MediaHandler getUserMediaStreamInternal() calling getUserMediaStream (streamId=\".concat(stream.id, \", shouldRequestAudio=\").concat(shouldRequestAudio, \", shouldRequestVideo=\").concat(shouldRequestVideo, \", constraints=\").concat(JSON.stringify(constraints), \")\"));\n for (var track of stream.getTracks()) {\n var settings = track.getSettings();\n if (track.kind === \"audio\") {\n _this7.audioInput = settings.deviceId;\n } else if (track.kind === \"video\") {\n _this7.videoInput = settings.deviceId;\n }\n }\n if (reusable) {\n _this7.localUserMediaStream = stream;\n }\n } else {\n var _this7$localUserMedia3;\n stream = _this7.localUserMediaStream.clone();\n logger.log(\"MediaHandler getUserMediaStreamInternal() cloning (oldStreamId=\".concat((_this7$localUserMedia3 = _this7.localUserMediaStream) === null || _this7$localUserMedia3 === void 0 ? void 0 : _this7$localUserMedia3.id, \" newStreamId=\").concat(stream.id, \" shouldRequestAudio=\").concat(shouldRequestAudio, \" shouldRequestVideo=\").concat(shouldRequestVideo, \")\"));\n if (!shouldRequestAudio) {\n for (var _track of stream.getAudioTracks()) {\n stream.removeTrack(_track);\n }\n }\n if (!shouldRequestVideo) {\n for (var _track2 of stream.getVideoTracks()) {\n stream.removeTrack(_track2);\n }\n }\n }\n if (reusable) {\n _this7.userMediaStreams.push(stream);\n }\n _this7.emit(MediaHandlerEvent.LocalStreamsChanged);\n return stream;\n })();\n }\n\n /**\n * Stops all tracks on the provided usermedia stream\n */\n stopUserMediaStream(mediaStream) {\n logger.log(\"MediaHandler stopUserMediaStream() stopping (streamId=\".concat(mediaStream.id, \")\"));\n for (var track of mediaStream.getTracks()) {\n track.stop();\n }\n var index = this.userMediaStreams.indexOf(mediaStream);\n if (index !== -1) {\n logger.debug(\"MediaHandler stopUserMediaStream() splicing usermedia stream out stream array (streamId=\".concat(mediaStream.id, \")\"), mediaStream.id);\n this.userMediaStreams.splice(index, 1);\n }\n this.emit(MediaHandlerEvent.LocalStreamsChanged);\n if (this.localUserMediaStream === mediaStream) {\n // if we have this stream cahced, remove it, because we've stopped it\n this.localUserMediaStream = undefined;\n } else {\n // If it's not the same stream. remove any tracks from the cached stream that\n // we have just stopped, and if we do stop any, call the same method on the\n // cached stream too in order to stop all its tracks (in case they are different)\n // and un-cache it.\n for (var _track3 of mediaStream.getTracks()) {\n var _this$localUserMediaS;\n if ((_this$localUserMediaS = this.localUserMediaStream) !== null && _this$localUserMediaS !== void 0 && _this$localUserMediaS.getTrackById(_track3.id)) {\n this.stopUserMediaStream(this.localUserMediaStream);\n break;\n }\n }\n }\n }\n\n /**\n * @param opts - screensharing stream options\n * @param reusable - is allowed to be reused by the MediaHandler\n * @returns based on passed parameters\n */\n getScreensharingStream() {\n var _arguments2 = arguments,\n _this8 = this;\n return _asyncToGenerator(function* () {\n var opts = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : {};\n var reusable = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : true;\n var stream;\n if (_this8.screensharingStreams.length === 0) {\n var screenshareConstraints = _this8.getScreenshareContraints(opts);\n if (opts.desktopCapturerSourceId) {\n // We are using Electron\n logger.debug(\"MediaHandler getScreensharingStream() calling getUserMedia() (opts=\".concat(JSON.stringify(opts), \")\"));\n stream = yield navigator.mediaDevices.getUserMedia(screenshareConstraints);\n } else {\n // We are not using Electron\n logger.debug(\"MediaHandler getScreensharingStream() calling getDisplayMedia() (opts=\".concat(JSON.stringify(opts), \")\"));\n stream = yield navigator.mediaDevices.getDisplayMedia(screenshareConstraints);\n }\n } else {\n var matchingStream = _this8.screensharingStreams[_this8.screensharingStreams.length - 1];\n logger.log(\"MediaHandler getScreensharingStream() cloning (streamId=\".concat(matchingStream.id, \")\"));\n stream = matchingStream.clone();\n }\n if (reusable) {\n _this8.screensharingStreams.push(stream);\n }\n _this8.emit(MediaHandlerEvent.LocalStreamsChanged);\n return stream;\n })();\n }\n\n /**\n * Stops all tracks on the provided screensharing stream\n */\n stopScreensharingStream(mediaStream) {\n logger.debug(\"MediaHandler stopScreensharingStream() stopping stream (streamId=\".concat(mediaStream.id, \")\"));\n for (var track of mediaStream.getTracks()) {\n track.stop();\n }\n var index = this.screensharingStreams.indexOf(mediaStream);\n if (index !== -1) {\n logger.debug(\"MediaHandler stopScreensharingStream() splicing stream out (streamId=\".concat(mediaStream.id, \")\"));\n this.screensharingStreams.splice(index, 1);\n }\n this.emit(MediaHandlerEvent.LocalStreamsChanged);\n }\n\n /**\n * Stops all local media tracks\n */\n stopAllStreams() {\n for (var stream of this.userMediaStreams) {\n logger.log(\"MediaHandler stopAllStreams() stopping (streamId=\".concat(stream.id, \")\"));\n for (var track of stream.getTracks()) {\n track.stop();\n }\n }\n for (var _stream3 of this.screensharingStreams) {\n for (var _track4 of _stream3.getTracks()) {\n _track4.stop();\n }\n }\n this.userMediaStreams = [];\n this.screensharingStreams = [];\n this.localUserMediaStream = undefined;\n this.emit(MediaHandlerEvent.LocalStreamsChanged);\n }\n getUserMediaContraints(audio, video, exactDeviceId) {\n var isWebkit = !!navigator.webkitGetUserMedia;\n var deviceIdKey = exactDeviceId ? \"exact\" : \"ideal\";\n var audioConstraints = {};\n if (this.audioInput) {\n audioConstraints.deviceId = {\n [deviceIdKey]: this.audioInput\n };\n }\n if (this.audioSettings) {\n audioConstraints.autoGainControl = {\n ideal: this.audioSettings.autoGainControl\n };\n audioConstraints.echoCancellation = {\n ideal: this.audioSettings.echoCancellation\n };\n audioConstraints.noiseSuppression = {\n ideal: this.audioSettings.noiseSuppression\n };\n }\n var videoConstraints = {\n /* We want 640x360. Chrome will give it only if we ask exactly,\n FF refuses entirely if we ask exactly, so have to ask for ideal\n instead\n XXX: Is this still true?\n */\n width: isWebkit ? {\n exact: 640\n } : {\n ideal: 640\n },\n height: isWebkit ? {\n exact: 360\n } : {\n ideal: 360\n }\n };\n if (this.videoInput) {\n videoConstraints.deviceId = {\n [deviceIdKey]: this.videoInput\n };\n }\n return {\n audio: audio ? audioConstraints : false,\n video: video ? videoConstraints : false\n };\n }\n getScreenshareContraints(opts) {\n var desktopCapturerSourceId = opts.desktopCapturerSourceId,\n audio = opts.audio;\n if (desktopCapturerSourceId) {\n return {\n audio: audio !== null && audio !== void 0 ? audio : false,\n video: {\n mandatory: {\n chromeMediaSource: \"desktop\",\n chromeMediaSourceId: desktopCapturerSourceId\n }\n }\n };\n } else {\n return {\n audio: audio !== null && audio !== void 0 ? audio : false,\n video: true\n };\n }\n }\n}\n//# sourceMappingURL=mediaHandler.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022-2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"./logger.js\";\nimport { TypedEventEmitter } from \"./models/typed-event-emitter.js\";\nimport { sleep } from \"./utils.js\";\n// /sync requests allow you to set a timeout= but the request may continue\n// beyond that and wedge forever, so we need to track how long we are willing\n// to keep open the connection. This constant is *ADDED* to the timeout= value\n// to determine the max time we're willing to wait.\nvar BUFFER_PERIOD_MS = 10 * 1000;\nexport var MSC3575_WILDCARD = \"*\";\nexport var MSC3575_STATE_KEY_ME = \"$ME\";\nexport var MSC3575_STATE_KEY_LAZY = \"$LAZY\";\n\n/**\n * Represents a subscription to a room or set of rooms. Controls which events are returned.\n */\n\n/**\n * Controls which rooms are returned in a given list.\n */\n\n/**\n * Represents a list subscription.\n */\n\n/**\n * A complete Sliding Sync request.\n */\n\n/**\n * New format of hero introduced in MSC4186 with display name and avatar URL\n * in addition to just user_id (as it is on the wire, with underscores)\n * as opposed to Hero in room-summary.ts which has fields in camelCase\n * (and also a flag to note what format the hero came from).\n */\n\n/**\n * A complete Sliding Sync response\n */\n\nexport var SlidingSyncState = /*#__PURE__*/function (SlidingSyncState) {\n /**\n * Fired by SlidingSyncEvent.Lifecycle event immediately before processing the response.\n */\n SlidingSyncState[\"RequestFinished\"] = \"FINISHED\";\n /**\n * Fired by SlidingSyncEvent.Lifecycle event immediately after all room data listeners have been\n * invoked, but before list listeners.\n */\n SlidingSyncState[\"Complete\"] = \"COMPLETE\";\n return SlidingSyncState;\n}({});\n\n/**\n * Internal Class. SlidingList represents a single list in sliding sync. The list can have filters,\n * multiple sliding windows, and maintains the index-\\>room_id mapping.\n */\nclass SlidingList {\n /**\n * Construct a new sliding list.\n * @param list - The range, sort and filter values to use for this list.\n */\n constructor(list) {\n _defineProperty(this, \"list\", void 0);\n _defineProperty(this, \"isModified\", void 0);\n // returned data\n _defineProperty(this, \"joinedCount\", 0);\n this.replaceList(list);\n }\n\n /**\n * Mark this list as modified or not. Modified lists will return sticky params with calls to getList.\n * This is useful for the first time the list is sent, or if the list has changed in some way.\n * @param modified - True to mark this list as modified so all sticky parameters will be re-sent.\n */\n setModified(modified) {\n this.isModified = modified;\n }\n\n /**\n * Update the list range for this list. Does not affect modified status as list ranges are non-sticky.\n * @param newRanges - The new ranges for the list\n */\n updateListRange(newRanges) {\n this.list.ranges = JSON.parse(JSON.stringify(newRanges));\n }\n\n /**\n * Replace list parameters. All fields will be replaced with the new list parameters.\n * @param list - The new list parameters\n */\n replaceList(list) {\n var _list$filters, _list$ranges;\n list.filters = (_list$filters = list.filters) !== null && _list$filters !== void 0 ? _list$filters : {};\n list.ranges = (_list$ranges = list.ranges) !== null && _list$ranges !== void 0 ? _list$ranges : [];\n this.list = JSON.parse(JSON.stringify(list));\n this.isModified = true;\n\n // reset values as the join count may be very different (if filters changed) including the rooms\n // (e.g. sort orders or sliding window ranges changed)\n\n // the total number of joined rooms according to the server, always >= len(roomIndexToRoomId)\n this.joinedCount = 0;\n }\n\n /**\n * Return a copy of the list suitable for a request body.\n * @param forceIncludeAllParams - True to forcibly include all params even if the list\n * hasn't been modified. Callers may want to do this if they are modifying the list prior to calling\n * updateList.\n */\n getList(forceIncludeAllParams) {\n var list = {\n ranges: JSON.parse(JSON.stringify(this.list.ranges))\n };\n if (this.isModified || forceIncludeAllParams) {\n list = JSON.parse(JSON.stringify(this.list));\n }\n return list;\n }\n}\n\n/**\n * When onResponse extensions should be invoked: before or after processing the main response.\n */\nexport var ExtensionState = /*#__PURE__*/function (ExtensionState) {\n // Call onResponse before processing the response body. This is useful when your extension is\n // preparing the ground for the response body e.g. processing to-device messages before the\n // encrypted event arrives.\n ExtensionState[\"PreProcess\"] = \"ExtState.PreProcess\";\n // Call onResponse after processing the response body. This is useful when your extension is\n // decorating data from the client, and you rely on MatrixClient.getRoom returning the Room object\n // e.g. room account data.\n ExtensionState[\"PostProcess\"] = \"ExtState.PostProcess\";\n return ExtensionState;\n}({});\n\n/**\n * An interface that must be satisfied to register extensions\n */\n\n/**\n * Events which can be fired by the SlidingSync class. These are designed to provide different levels\n * of information when processing sync responses.\n * - RoomData: concerns rooms, useful for SlidingSyncSdk to update its knowledge of rooms.\n * - Lifecycle: concerns callbacks at various well-defined points in the sync process.\n * Specifically, the order of event invocation is:\n * - Lifecycle (state=RequestFinished)\n * - RoomData (N times)\n * - Lifecycle (state=Complete)\n */\nexport var SlidingSyncEvent = /*#__PURE__*/function (SlidingSyncEvent) {\n /**\n * This event fires when there are updates for a room. Fired as and when rooms are encountered\n * in the response.\n */\n SlidingSyncEvent[\"RoomData\"] = \"SlidingSync.RoomData\";\n /**\n * This event fires at various points in the /sync loop lifecycle.\n * - SlidingSyncState.RequestFinished: Fires after we receive a valid response but before the\n * response has been processed. Perform any pre-process steps here. If there was a problem syncing,\n * `err` will be set (e.g network errors).\n * - SlidingSyncState.Complete: Fires after the response has been processed.\n */\n SlidingSyncEvent[\"Lifecycle\"] = \"SlidingSync.Lifecycle\";\n return SlidingSyncEvent;\n}({});\n/**\n * SlidingSync is a high-level data structure which controls the majority of sliding sync.\n * It has no hooks into JS SDK except for needing a MatrixClient to perform the HTTP request.\n * This means this class (and everything it uses) can be used in isolation from JS SDK if needed.\n * To hook this up with the JS SDK, you need to use SlidingSyncSdk.\n */\nexport class SlidingSync extends TypedEventEmitter {\n /**\n * Create a new sliding sync instance\n * @param proxyBaseUrl - The base URL of the sliding sync proxy\n * @param lists - The lists to use for sliding sync.\n * @param roomSubscriptionInfo - The params to use for room subscriptions.\n * @param client - The client to use for /sync calls.\n * @param timeoutMS - The number of milliseconds to wait for a response.\n */\n constructor(proxyBaseUrl, lists, roomSubscriptionInfo, client, timeoutMS) {\n super();\n this.proxyBaseUrl = proxyBaseUrl;\n this.roomSubscriptionInfo = roomSubscriptionInfo;\n this.client = client;\n this.timeoutMS = timeoutMS;\n _defineProperty(this, \"lists\", void 0);\n _defineProperty(this, \"listModifiedCount\", 0);\n _defineProperty(this, \"terminated\", false);\n // flag set when resend() is called because we cannot rely on detecting AbortError in JS SDK :(\n _defineProperty(this, \"needsResend\", false);\n // map of extension name to req/resp handler\n _defineProperty(this, \"extensions\", {});\n _defineProperty(this, \"desiredRoomSubscriptions\", new Set());\n // the *desired* room subscriptions\n _defineProperty(this, \"confirmedRoomSubscriptions\", new Set());\n // map of custom subscription name to the subscription\n _defineProperty(this, \"customSubscriptions\", new Map());\n // map of room ID to custom subscription name\n _defineProperty(this, \"roomIdToCustomSubscription\", new Map());\n _defineProperty(this, \"pendingReq\", void 0);\n _defineProperty(this, \"abortController\", void 0);\n this.lists = new Map();\n lists.forEach((list, key) => {\n this.lists.set(key, new SlidingList(list));\n });\n }\n\n /**\n * Add a custom room subscription, referred to by an arbitrary name. If a subscription with this\n * name already exists, it is replaced. No requests are sent by calling this method.\n * @param name - The name of the subscription. Only used to reference this subscription in\n * useCustomSubscription.\n * @param sub - The subscription information.\n */\n addCustomSubscription(name, sub) {\n if (this.customSubscriptions.has(name)) {\n logger.warn(\"addCustomSubscription: \".concat(name, \" already exists as a custom subscription, ignoring.\"));\n return;\n }\n this.customSubscriptions.set(name, sub);\n }\n\n /**\n * Use a custom subscription previously added via addCustomSubscription. No requests are sent\n * by calling this method. Use modifyRoomSubscriptions to resend subscription information.\n * @param roomId - The room to use the subscription in.\n * @param name - The name of the subscription. If this name is unknown, the default subscription\n * will be used.\n */\n useCustomSubscription(roomId, name) {\n // We already know about this custom subscription, as it is immutable,\n // we don't need to unconfirm the subscription.\n if (this.roomIdToCustomSubscription.get(roomId) === name) {\n return;\n }\n this.roomIdToCustomSubscription.set(roomId, name);\n // unconfirm this subscription so a resend() will send it up afresh.\n this.confirmedRoomSubscriptions.delete(roomId);\n }\n\n /**\n * Get the room index data for a list.\n * @param key - The list key\n * @returns The list data which contains the rooms in this list\n */\n getListData(key) {\n var data = this.lists.get(key);\n if (!data) {\n return null;\n }\n return {\n joinedCount: data.joinedCount\n };\n }\n\n /**\n * Get the full request list parameters for a list index. This function is provided for callers to use\n * in conjunction with setList to update fields on an existing list.\n * @param key - The list key to get the params for.\n * @returns A copy of the list params or undefined.\n */\n getListParams(key) {\n var params = this.lists.get(key);\n if (!params) {\n return null;\n }\n return params.getList(true);\n }\n\n /**\n * Set new ranges for an existing list. Calling this function when _only_ the ranges have changed\n * is more efficient than calling setList(index,list) as this function won't resend sticky params,\n * whereas setList always will.\n * @param key - The list key to modify\n * @param ranges - The new ranges to apply.\n * @returns A promise which resolves to the transaction ID when it has been received down sync\n * (or rejects with the transaction ID if the action was not applied e.g the request was cancelled\n * immediately after sending, in which case the action will be applied in the subsequent request)\n */\n setListRanges(key, ranges) {\n var list = this.lists.get(key);\n if (!list) {\n throw new Error(\"no list with key \" + key);\n }\n list.updateListRange(ranges);\n this.resend();\n }\n\n /**\n * Add or replace a list. Calling this function will interrupt the /sync request to resend new\n * lists.\n * @param key - The key to modify\n * @param list - The new list parameters.\n * @returns A promise which resolves to the transaction ID when it has been received down sync\n * (or rejects with the transaction ID if the action was not applied e.g the request was cancelled\n * immediately after sending, in which case the action will be applied in the subsequent request)\n */\n setList(key, list) {\n var existingList = this.lists.get(key);\n if (existingList) {\n existingList.replaceList(list);\n this.lists.set(key, existingList);\n } else {\n this.lists.set(key, new SlidingList(list));\n }\n this.listModifiedCount += 1;\n this.resend();\n }\n\n /**\n * Get the room subscriptions for the sync API.\n * @returns A copy of the desired room subscriptions.\n */\n getRoomSubscriptions() {\n return new Set(Array.from(this.desiredRoomSubscriptions));\n }\n\n /**\n * Modify the room subscriptions for the sync API. Calling this function will interrupt the\n * /sync request to resend new subscriptions. If the /sync stream has not started, this will\n * prepare the room subscriptions for when start() is called.\n * @param s - The new desired room subscriptions.\n */\n modifyRoomSubscriptions(s) {\n this.desiredRoomSubscriptions = s;\n this.resend();\n }\n\n /**\n * Modify which events to retrieve for room subscriptions. Invalidates all room subscriptions\n * such that they will be sent up afresh.\n * @param rs - The new room subscription fields to fetch.\n */\n modifyRoomSubscriptionInfo(rs) {\n this.roomSubscriptionInfo = rs;\n this.confirmedRoomSubscriptions = new Set();\n this.resend();\n }\n\n /**\n * Register an extension to send with the /sync request.\n * @param ext - The extension to register.\n */\n registerExtension(ext) {\n if (this.extensions[ext.name()]) {\n throw new Error(\"registerExtension: \".concat(ext.name(), \" already exists as an extension\"));\n }\n this.extensions[ext.name()] = ext;\n }\n getExtensionRequest(isInitial) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var ext = {};\n for (var extName in _this.extensions) {\n ext[extName] = yield _this.extensions[extName].onRequest(isInitial);\n }\n return ext;\n })();\n }\n onPreExtensionsResponse(ext) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n yield Promise.all(Object.keys(ext).map(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (extName) {\n if (_this2.extensions[extName].when() == ExtensionState.PreProcess) {\n yield _this2.extensions[extName].onResponse(ext[extName]);\n }\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()));\n })();\n }\n onPostExtensionsResponse(ext) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n yield Promise.all(Object.keys(ext).map(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (extName) {\n if (_this3.extensions[extName].when() == ExtensionState.PostProcess) {\n yield _this3.extensions[extName].onResponse(ext[extName]);\n }\n });\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }()));\n })();\n }\n\n /**\n * Invoke all attached room data listeners.\n * @param roomId - The room which received some data.\n * @param roomData - The raw sliding sync response JSON.\n */\n invokeRoomDataListeners(roomId, roomData) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (!roomData.required_state) {\n roomData.required_state = [];\n }\n if (!roomData.timeline) {\n roomData.timeline = [];\n }\n yield _this4.emitPromised(SlidingSyncEvent.RoomData, roomId, roomData);\n })();\n }\n\n /**\n * Invoke all attached lifecycle listeners.\n * @param state - The Lifecycle state\n * @param resp - The raw sync response JSON\n * @param err - Any error that occurred when making the request e.g. network errors.\n */\n invokeLifecycleListeners(state, resp, err) {\n this.emit(SlidingSyncEvent.Lifecycle, state, resp, err);\n }\n\n /**\n * Resend a Sliding Sync request. Used when something has changed in the request.\n */\n resend() {\n var _this$abortController;\n this.needsResend = true;\n (_this$abortController = this.abortController) === null || _this$abortController === void 0 || _this$abortController.abort();\n this.abortController = new AbortController();\n }\n\n /**\n * Stop syncing with the server.\n */\n stop() {\n var _this$abortController2;\n this.terminated = true;\n (_this$abortController2 = this.abortController) === null || _this$abortController2 === void 0 || _this$abortController2.abort();\n // remove all listeners so things can be GC'd\n this.removeAllListeners(SlidingSyncEvent.Lifecycle);\n this.removeAllListeners(SlidingSyncEvent.RoomData);\n }\n\n /**\n * Re-setup this connection e.g in the event of an expired session.\n */\n resetup() {\n logger.warn(\"SlidingSync: resetting connection info\");\n // resend sticky params and de-confirm all subscriptions\n this.lists.forEach(l => {\n l.setModified(true);\n });\n this.confirmedRoomSubscriptions = new Set(); // leave desired ones alone though!\n // reset the connection as we might be wedged\n this.resend();\n }\n\n /**\n * Start syncing with the server. Blocks until stopped.\n */\n start() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n _this5.abortController = new AbortController();\n var currentPos;\n var _loop = function* _loop() {\n _this5.needsResend = false;\n var resp;\n try {\n var _resp$lists, _resp$rooms, _resp$extensions;\n var reqLists = {};\n _this5.lists.forEach((l, key) => {\n reqLists[key] = l.getList(true);\n });\n var reqBody = {\n lists: reqLists,\n pos: currentPos,\n timeout: _this5.timeoutMS,\n clientTimeout: _this5.timeoutMS + BUFFER_PERIOD_MS,\n extensions: yield _this5.getExtensionRequest(currentPos === undefined)\n };\n // check if we are (un)subscribing to a room and modify request this one time for it\n var newSubscriptions = difference(_this5.desiredRoomSubscriptions, _this5.confirmedRoomSubscriptions);\n var unsubscriptions = difference(_this5.confirmedRoomSubscriptions, _this5.desiredRoomSubscriptions);\n if (unsubscriptions.size > 0) {\n reqBody.unsubscribe_rooms = Array.from(unsubscriptions);\n }\n if (newSubscriptions.size > 0) {\n reqBody.room_subscriptions = {};\n for (var roomId of newSubscriptions) {\n var customSubName = _this5.roomIdToCustomSubscription.get(roomId);\n var sub = _this5.roomSubscriptionInfo;\n if (customSubName && _this5.customSubscriptions.has(customSubName)) {\n sub = _this5.customSubscriptions.get(customSubName);\n }\n reqBody.room_subscriptions[roomId] = sub;\n }\n }\n _this5.pendingReq = _this5.client.slidingSync(reqBody, _this5.proxyBaseUrl, _this5.abortController.signal);\n resp = yield _this5.pendingReq;\n currentPos = resp.pos;\n // update what we think we're subscribed to.\n for (var _roomId of newSubscriptions) {\n _this5.confirmedRoomSubscriptions.add(_roomId);\n }\n for (var _roomId2 of unsubscriptions) {\n _this5.confirmedRoomSubscriptions.delete(_roomId2);\n }\n // mark all these lists as having been sent as sticky so we don't keep sending sticky params\n _this5.lists.forEach(l => {\n l.setModified(false);\n });\n // set default empty values so we don't need to null check\n resp.lists = (_resp$lists = resp.lists) !== null && _resp$lists !== void 0 ? _resp$lists : {};\n resp.rooms = (_resp$rooms = resp.rooms) !== null && _resp$rooms !== void 0 ? _resp$rooms : {};\n resp.extensions = (_resp$extensions = resp.extensions) !== null && _resp$extensions !== void 0 ? _resp$extensions : {};\n Object.keys(resp.lists).forEach(key => {\n var list = _this5.lists.get(key);\n if (!list || !resp) {\n return;\n }\n list.joinedCount = resp.lists[key].count;\n });\n _this5.invokeLifecycleListeners(SlidingSyncState.RequestFinished, resp);\n } catch (err) {\n if (err.httpStatus) {\n _this5.invokeLifecycleListeners(SlidingSyncState.RequestFinished, null, err);\n if (err.httpStatus === 400) {\n // session probably expired TODO: assign an errcode\n // so drop state and re-request\n _this5.resetup();\n currentPos = undefined;\n yield sleep(50); // in case the 400 was for something else; don't tightloop\n return 0; // continue\n } // else fallthrough to generic error handling\n } else if (_this5.needsResend || err.name === \"AbortError\") {\n return 0; // continue\n // don't sleep as we caused this error by abort()ing the request.\n }\n logger.error(err);\n yield sleep(5000);\n }\n if (!resp) {\n return 0; // continue\n }\n yield _this5.onPreExtensionsResponse(resp.extensions);\n for (var _roomId3 in resp.rooms) {\n yield _this5.invokeRoomDataListeners(_roomId3, resp.rooms[_roomId3]);\n }\n _this5.invokeLifecycleListeners(SlidingSyncState.Complete, resp);\n yield _this5.onPostExtensionsResponse(resp.extensions);\n },\n _ret;\n while (!_this5.terminated) {\n _ret = yield* _loop();\n if (_ret === 0) continue;\n }\n })();\n }\n}\nvar difference = (setA, setB) => {\n var diff = new Set(setA);\n for (var elem of setB) {\n diff.delete(elem);\n }\n return diff;\n};\n//# sourceMappingURL=sliding-sync.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { NotificationCountType, Room, RoomEvent } from \"./models/room.js\";\nimport { logger } from \"./logger.js\";\nimport { promiseMapSeries } from \"./utils.js\";\nimport { EventTimeline } from \"./models/event-timeline.js\";\nimport { ClientEvent } from \"./client.js\";\nimport { SyncState, _createAndReEmitRoom, defaultClientOpts, defaultSyncApiOpts, processToDeviceMessages } from \"./sync.js\";\nimport { MatrixError } from \"./http-api/index.js\";\nimport { ExtensionState, SlidingSyncEvent, SlidingSyncState } from \"./sliding-sync.js\";\nimport { EventType } from \"./@types/event.js\";\nimport { RoomStateEvent } from \"./models/room-state.js\";\nimport { RoomMemberEvent } from \"./models/room-member.js\";\nimport { KnownMembership } from \"./@types/membership.js\";\n\n// Number of consecutive failed syncs that will lead to a syncState of ERROR as opposed\n// to RECONNECTING. This is needed to inform the client of server issues when the\n// keepAlive is successful but the server /sync fails.\nvar FAILED_SYNC_ERROR_THRESHOLD = 3;\nclass ExtensionE2EE {\n constructor(crypto) {\n this.crypto = crypto;\n }\n name() {\n return \"e2ee\";\n }\n when() {\n return ExtensionState.PreProcess;\n }\n onRequest(isInitial) {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (isInitial) {\n // In SSS, the `?pos=` contains the stream position for device list updates.\n // If we do not have a `?pos=` (e.g because we forgot it, or because the server\n // invalidated our connection) then we MUST invlaidate all device lists because\n // the server will not tell us the delta. This will then cause UTDs as we will fail\n // to encrypt for new devices. This is an expensive call, so we should\n // really really remember `?pos=` wherever possible.\n logger.log(\"ExtensionE2EE: invalidating all device lists due to missing 'pos'\");\n yield _this.crypto.markAllTrackedUsersAsDirty();\n }\n return {\n enabled: true // this is sticky so only send it on the initial request\n };\n })();\n }\n onResponse(data) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n // Handle device list updates\n if (data.device_lists) {\n yield _this2.crypto.processDeviceLists(data.device_lists);\n }\n\n // Handle one_time_keys_count and unused_fallback_key_types\n yield _this2.crypto.processKeyCounts(data.device_one_time_keys_count, data[\"device_unused_fallback_key_types\"] || data[\"org.matrix.msc2732.device_unused_fallback_key_types\"]);\n _this2.crypto.onSyncCompleted({});\n })();\n }\n}\nclass ExtensionToDevice {\n constructor(client, cryptoCallbacks) {\n this.client = client;\n this.cryptoCallbacks = cryptoCallbacks;\n _defineProperty(this, \"nextBatch\", null);\n }\n name() {\n return \"to_device\";\n }\n when() {\n return ExtensionState.PreProcess;\n }\n onRequest(isInitial) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n return {\n since: _this3.nextBatch !== null ? _this3.nextBatch : undefined,\n limit: 100,\n enabled: true\n };\n })();\n }\n onResponse(data) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var events = data[\"events\"] || [];\n var receivedToDeviceMessages;\n if (_this4.cryptoCallbacks) {\n receivedToDeviceMessages = yield _this4.cryptoCallbacks.preprocessToDeviceMessages(events);\n } else {\n receivedToDeviceMessages = events.map(rawEvent => (\n // Crypto is not enabled, so we just return the events.\n {\n message: rawEvent,\n encryptionInfo: null\n }));\n }\n processToDeviceMessages(receivedToDeviceMessages, _this4.client);\n _this4.nextBatch = data.next_batch;\n })();\n }\n}\nclass ExtensionAccountData {\n constructor(client) {\n this.client = client;\n }\n name() {\n return \"account_data\";\n }\n when() {\n return ExtensionState.PostProcess;\n }\n onRequest(isInitial) {\n return _asyncToGenerator(function* () {\n return {\n enabled: true\n };\n })();\n }\n onResponse(data) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n if (data.global && data.global.length > 0) {\n _this5.processGlobalAccountData(data.global);\n }\n for (var roomId in data.rooms) {\n var accountDataEvents = mapEvents(_this5.client, roomId, data.rooms[roomId]);\n var room = _this5.client.getRoom(roomId);\n if (!room) {\n logger.warn(\"got account data for room but room doesn't exist on client:\", roomId);\n continue;\n }\n room.addAccountData(accountDataEvents);\n accountDataEvents.forEach(e => {\n _this5.client.emit(ClientEvent.Event, e);\n });\n }\n })();\n }\n processGlobalAccountData(globalAccountData) {\n var events = mapEvents(this.client, undefined, globalAccountData);\n var prevEventsMap = events.reduce((m, c) => {\n m[c.getType()] = this.client.store.getAccountData(c.getType());\n return m;\n }, {});\n this.client.store.storeAccountDataEvents(events);\n events.forEach(accountDataEvent => {\n // Honour push rules that come down the sync stream but also\n // honour push rules that were previously cached. Base rules\n // will be updated when we receive push rules via getPushRules\n // (see sync) before syncing over the network.\n if (accountDataEvent.getType() === EventType.PushRules) {\n var rules = accountDataEvent.getContent();\n this.client.setPushRules(rules);\n }\n var prevEvent = prevEventsMap[accountDataEvent.getType()];\n this.client.emit(ClientEvent.AccountData, accountDataEvent, prevEvent);\n return accountDataEvent;\n });\n }\n}\nclass ExtensionTyping {\n constructor(client) {\n this.client = client;\n }\n name() {\n return \"typing\";\n }\n when() {\n return ExtensionState.PostProcess;\n }\n onRequest(isInitial) {\n return _asyncToGenerator(function* () {\n return {\n enabled: true\n };\n })();\n }\n onResponse(data) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!(data !== null && data !== void 0 && data.rooms)) {\n return;\n }\n for (var roomId in data.rooms) {\n processEphemeralEvents(_this6.client, roomId, [data.rooms[roomId]]);\n }\n })();\n }\n}\nclass ExtensionReceipts {\n constructor(client) {\n this.client = client;\n }\n name() {\n return \"receipts\";\n }\n when() {\n return ExtensionState.PostProcess;\n }\n onRequest(isInitial) {\n return _asyncToGenerator(function* () {\n return {\n enabled: true\n };\n })();\n }\n onResponse(data) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n if (!(data !== null && data !== void 0 && data.rooms)) {\n return;\n }\n for (var roomId in data.rooms) {\n processEphemeralEvents(_this7.client, roomId, [data.rooms[roomId]]);\n }\n })();\n }\n}\n\n/**\n * A copy of SyncApi such that it can be used as a drop-in replacement for sync v2. For the actual\n * sliding sync API, see sliding-sync.ts or the class SlidingSync.\n */\nexport class SlidingSyncSdk {\n // accumulator of sync events in the current sync response\n\n constructor(slidingSync, client, opts, syncOpts) {\n this.slidingSync = slidingSync;\n this.client = client;\n _defineProperty(this, \"opts\", void 0);\n _defineProperty(this, \"syncOpts\", void 0);\n _defineProperty(this, \"syncState\", null);\n _defineProperty(this, \"syncStateData\", void 0);\n _defineProperty(this, \"lastPos\", null);\n _defineProperty(this, \"failCount\", 0);\n _defineProperty(this, \"notifEvents\", []);\n this.opts = defaultClientOpts(opts);\n this.syncOpts = defaultSyncApiOpts(syncOpts);\n if (client.getNotifTimelineSet()) {\n client.reEmitter.reEmit(client.getNotifTimelineSet(), [RoomEvent.Timeline, RoomEvent.TimelineReset]);\n }\n this.slidingSync.on(SlidingSyncEvent.Lifecycle, this.onLifecycle.bind(this));\n this.slidingSync.on(SlidingSyncEvent.RoomData, this.onRoomData.bind(this));\n var extensions = [new ExtensionToDevice(this.client, this.syncOpts.cryptoCallbacks), new ExtensionAccountData(this.client), new ExtensionTyping(this.client), new ExtensionReceipts(this.client)];\n if (this.syncOpts.cryptoCallbacks) {\n extensions.push(new ExtensionE2EE(this.syncOpts.cryptoCallbacks));\n }\n extensions.forEach(ext => {\n this.slidingSync.registerExtension(ext);\n });\n }\n onRoomData(roomId, roomData) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n var room = _this8.client.store.getRoom(roomId);\n if (!room) {\n if (!roomData.initial) {\n _this8.syncOpts.logger.debug(\"initial flag not set but no stored room exists for room \", roomId, roomData);\n return;\n }\n room = _createAndReEmitRoom(_this8.client, roomId, _this8.opts);\n }\n yield _this8.processRoomData(_this8.client, room, roomData);\n })();\n }\n onLifecycle(state, resp, err) {\n if (err) {\n this.syncOpts.logger.debug(\"onLifecycle\", state, err);\n }\n switch (state) {\n case SlidingSyncState.Complete:\n this.purgeNotifications();\n if (!resp) {\n break;\n }\n // Element won't stop showing the initial loading spinner unless we fire SyncState.Prepared\n if (!this.lastPos) {\n this.updateSyncState(SyncState.Prepared, {\n oldSyncToken: undefined,\n nextSyncToken: resp.pos,\n catchingUp: false,\n fromCache: false\n });\n }\n // Conversely, Element won't show the room list unless there is at least 1x SyncState.Syncing\n // so hence for the very first sync we will fire prepared then immediately syncing.\n this.updateSyncState(SyncState.Syncing, {\n oldSyncToken: this.lastPos,\n nextSyncToken: resp.pos,\n catchingUp: false,\n fromCache: false\n });\n this.lastPos = resp.pos;\n break;\n case SlidingSyncState.RequestFinished:\n if (err) {\n this.failCount += 1;\n this.updateSyncState(this.failCount > FAILED_SYNC_ERROR_THRESHOLD ? SyncState.Error : SyncState.Reconnecting, {\n error: new MatrixError(err)\n });\n if (this.shouldAbortSync(new MatrixError(err))) {\n return; // shouldAbortSync actually stops syncing too so we don't need to do anything.\n }\n } else {\n this.failCount = 0;\n this.syncOpts.logger.debug(\"SlidingSyncState.RequestFinished with \".concat(Object.keys((resp === null || resp === void 0 ? void 0 : resp.rooms) || []).length, \" rooms\"));\n }\n break;\n }\n }\n\n /**\n * Sync rooms the user has left.\n * @returns Resolved when they've been added to the store.\n */\n syncLeftRooms() {\n return _asyncToGenerator(function* () {\n return []; // TODO\n })();\n }\n\n /**\n * Peek into a room. This will result in the room in question being synced so it\n * is accessible via getRooms(). Live updates for the room will be provided.\n * @param roomId - The room ID to peek into.\n * @returns A promise which resolves once the room has been added to the\n * store.\n */\n peek(roomId) {\n return _asyncToGenerator(function* () {\n return null; // TODO\n })();\n }\n\n /**\n * Stop polling for updates in the peeked room. NOPs if there is no room being\n * peeked.\n */\n stopPeeking() {\n // TODO\n }\n\n /**\n * Specify the set_presence value to be used for subsequent calls to the Sync API.\n * @param presence - the presence to specify to set_presence of sync calls\n */\n setPresence(presence) {\n // TODO not possible in sliding sync yet\n }\n\n /**\n * Returns the current state of this sync object\n * @see MatrixClient#event:\"sync\"\n */\n getSyncState() {\n return this.syncState;\n }\n\n /**\n * Returns the additional data object associated with\n * the current sync state, or null if there is no\n * such data.\n * Sync errors, if available, are put in the 'error' key of\n * this object.\n */\n getSyncStateData() {\n var _this$syncStateData;\n return (_this$syncStateData = this.syncStateData) !== null && _this$syncStateData !== void 0 ? _this$syncStateData : null;\n }\n\n // Helper functions which set up JS SDK structs are below and are identical to the sync v2 counterparts\n\n createRoom(roomId) {\n // XXX cargoculted from sync.ts\n var timelineSupport = this.client.timelineSupport;\n var room = new Room(roomId, this.client, this.client.getUserId(), {\n lazyLoadMembers: this.opts.lazyLoadMembers,\n pendingEventOrdering: this.opts.pendingEventOrdering,\n timelineSupport\n });\n this.client.reEmitter.reEmit(room, [RoomEvent.Name, RoomEvent.Redaction, RoomEvent.RedactionCancelled, RoomEvent.Receipt, RoomEvent.Tags, RoomEvent.LocalEchoUpdated, RoomEvent.AccountData, RoomEvent.MyMembership, RoomEvent.Timeline, RoomEvent.TimelineReset]);\n this.registerStateListeners(room);\n return room;\n }\n registerStateListeners(room) {\n // XXX cargoculted from sync.ts\n // we need to also re-emit room state and room member events, so hook it up\n // to the client now. We need to add a listener for RoomState.members in\n // order to hook them correctly.\n this.client.reEmitter.reEmit(room.currentState, [RoomStateEvent.Events, RoomStateEvent.Members, RoomStateEvent.NewMember, RoomStateEvent.Update]);\n room.currentState.on(RoomStateEvent.NewMember, (event, state, member) => {\n var _this$client$getUser;\n member.user = (_this$client$getUser = this.client.getUser(member.userId)) !== null && _this$client$getUser !== void 0 ? _this$client$getUser : undefined;\n this.client.reEmitter.reEmit(member, [RoomMemberEvent.Name, RoomMemberEvent.Typing, RoomMemberEvent.PowerLevel, RoomMemberEvent.Membership]);\n });\n }\n\n /*\n private deregisterStateListeners(room: Room): void { // XXX cargoculted from sync.ts\n // could do with a better way of achieving this.\n room.currentState.removeAllListeners(RoomStateEvent.Events);\n room.currentState.removeAllListeners(RoomStateEvent.Members);\n room.currentState.removeAllListeners(RoomStateEvent.NewMember);\n } */\n\n shouldAbortSync(error) {\n if (error.errcode === \"M_UNKNOWN_TOKEN\") {\n // The logout already happened, we just need to stop.\n this.syncOpts.logger.warn(\"Token no longer valid - assuming logout\");\n this.stop();\n this.updateSyncState(SyncState.Error, {\n error\n });\n return true;\n }\n return false;\n }\n processRoomData(client, room, roomData) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n roomData = ensureNameEvent(client, room.roomId, roomData);\n var stateEvents = mapEvents(_this9.client, room.roomId, roomData.required_state);\n // Prevent events from being decrypted ahead of time\n // this helps large account to speed up faster\n // room::decryptCriticalEvent is in charge of decrypting all the events\n // required for a client to function properly\n var timelineEvents = mapEvents(_this9.client, room.roomId, roomData.timeline, false);\n var ephemeralEvents = []; // TODO this.mapSyncEventsFormat(joinObj.ephemeral);\n\n // TODO: handle threaded / beacon events\n\n if (roomData.limited || roomData.initial) {\n // we should not know about any of these timeline entries if this is a genuinely new room.\n // If we do, then we've effectively done scrollback (e.g requesting timeline_limit: 1 for\n // this room, then timeline_limit: 50).\n var knownEvents = new Set();\n room.getLiveTimeline().getEvents().forEach(e => {\n knownEvents.add(e.getId());\n });\n // all unknown events BEFORE a known event must be scrollback e.g:\n // D E <-- what we know\n // A B C D E F <-- what we just received\n // means:\n // A B C <-- scrollback\n // D E <-- dupes\n // F <-- new event\n // We bucket events based on if we have seen a known event yet.\n var oldEvents = [];\n var newEvents = [];\n var seenKnownEvent = false;\n for (var i = timelineEvents.length - 1; i >= 0; i--) {\n var recvEvent = timelineEvents[i];\n if (knownEvents.has(recvEvent.getId())) {\n seenKnownEvent = true;\n continue; // don't include this event, it's a dupe\n }\n if (seenKnownEvent) {\n // old -> new\n oldEvents.push(recvEvent);\n } else {\n // old -> new\n newEvents.unshift(recvEvent);\n }\n }\n timelineEvents = newEvents;\n if (oldEvents.length > 0) {\n // old events are scrollback, insert them now\n room.addEventsToTimeline(oldEvents, true, false, room.getLiveTimeline(), roomData.prev_batch);\n }\n }\n var encrypted = room.hasEncryptionStateEvent();\n // we do this first so it's correct when any of the events fire\n if (roomData.notification_count != null) {\n room.setUnreadNotificationCount(NotificationCountType.Total, roomData.notification_count);\n }\n if (roomData.highlight_count != null) {\n // We track unread notifications ourselves in encrypted rooms, so don't\n // bother setting it here. We trust our calculations better than the\n // server's for this case, and therefore will assume that our non-zero\n // count is accurate.\n if (!encrypted || encrypted && room.getUnreadNotificationCount(NotificationCountType.Highlight) <= 0) {\n room.setUnreadNotificationCount(NotificationCountType.Highlight, roomData.highlight_count);\n }\n }\n if (roomData.bump_stamp) {\n room.setBumpStamp(roomData.bump_stamp);\n }\n if (Number.isInteger(roomData.invited_count)) {\n room.currentState.setInvitedMemberCount(roomData.invited_count);\n }\n if (Number.isInteger(roomData.joined_count)) {\n room.currentState.setJoinedMemberCount(roomData.joined_count);\n }\n if (roomData.invite_state) {\n var inviteStateEvents = mapEvents(_this9.client, room.roomId, roomData.invite_state);\n yield _this9.injectRoomEvents(room, inviteStateEvents);\n if (roomData.initial) {\n room.recalculate();\n _this9.client.store.storeRoom(room);\n _this9.client.emit(ClientEvent.Room, room);\n }\n inviteStateEvents.forEach(e => {\n _this9.client.emit(ClientEvent.Event, e);\n });\n return;\n }\n if (roomData.limited) {\n var _roomData$prev_batch;\n // set the back-pagination token. Do this *before* adding any\n // events so that clients can start back-paginating.\n room.getLiveTimeline().setPaginationToken((_roomData$prev_batch = roomData.prev_batch) !== null && _roomData$prev_batch !== void 0 ? _roomData$prev_batch : null, EventTimeline.BACKWARDS);\n }\n\n /* TODO\n else if (roomData.limited) {\n let limited = true;\n // we've got a limited sync, so we *probably* have a gap in the\n // timeline, so should reset. But we might have been peeking or\n // paginating and already have some of the events, in which\n // case we just want to append any subsequent events to the end\n // of the existing timeline.\n //\n // This is particularly important in the case that we already have\n // *all* of the events in the timeline - in that case, if we reset\n // the timeline, we'll end up with an entirely empty timeline,\n // which we'll try to paginate but not get any new events (which\n // will stop us linking the empty timeline into the chain).\n //\n for (let i = timelineEvents.length - 1; i >= 0; i--) {\n const eventId = timelineEvents[i].getId();\n if (room.getTimelineForEvent(eventId)) {\n this.syncOpts.logger.debug(\"Already have event \" + eventId + \" in limited \" +\n \"sync - not resetting\");\n limited = false;\n // we might still be missing some of the events before i;\n // we don't want to be adding them to the end of the\n // timeline because that would put them out of order.\n timelineEvents.splice(0, i);\n // XXX: there's a problem here if the skipped part of the\n // timeline modifies the state set in stateEvents, because\n // we'll end up using the state from stateEvents rather\n // than the later state from timelineEvents. We probably\n // need to wind stateEvents forward over the events we're\n // skipping.\n break;\n }\n }\n if (limited) {\n room.resetLiveTimeline(\n roomData.prev_batch,\n null, // TODO this.syncOpts.canResetEntireTimeline(room.roomId) ? null : syncEventData.oldSyncToken,\n );\n // We have to assume any gap in any timeline is\n // reason to stop incrementally tracking notifications and\n // reset the timeline.\n this.client.resetNotifTimelineSet();\n this.registerStateListeners(room);\n }\n } */\n\n yield _this9.injectRoomEvents(room, stateEvents, timelineEvents, roomData.num_live);\n\n // we deliberately don't add ephemeral events to the timeline\n room.addEphemeralEvents(ephemeralEvents);\n\n // local fields must be set before any async calls because call site assumes\n // synchronous execution prior to emitting SlidingSyncState.Complete\n room.updateMyMembership(KnownMembership.Join);\n room.setMSC4186SummaryData(roomData.heroes, roomData.joined_count, roomData.invited_count);\n room.recalculate();\n if (roomData.initial) {\n client.store.storeRoom(room);\n client.emit(ClientEvent.Room, room);\n }\n\n // check if any timeline events should bing and add them to the notifEvents array:\n // we'll purge this once we've fully processed the sync response\n _this9.addNotifications(timelineEvents);\n var processRoomEvent = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (e) {\n client.emit(ClientEvent.Event, e);\n if (e.isState() && e.getType() == EventType.RoomEncryption && _this9.syncOpts.cryptoCallbacks) {\n yield _this9.syncOpts.cryptoCallbacks.onCryptoEvent(room, e);\n }\n });\n return function processRoomEvent(_x) {\n return _ref.apply(this, arguments);\n };\n }();\n yield promiseMapSeries(stateEvents, processRoomEvent);\n yield promiseMapSeries(timelineEvents, processRoomEvent);\n ephemeralEvents.forEach(function (e) {\n client.emit(ClientEvent.Event, e);\n });\n\n // Decrypt only the last message in all rooms to make sure we can generate a preview\n // And decrypt all events after the recorded read receipt to ensure an accurate\n // notification count\n room.decryptCriticalEvents();\n })();\n }\n\n /**\n * Injects events into a room's model.\n * @param stateEventList - A list of state events. This is the state\n * at the *END* of the timeline list if it is supplied.\n * @param timelineEventList - A list of timeline events. Lower index\n * is earlier in time. Higher index is later.\n * @param numLive - the number of events in timelineEventList which just happened,\n * supplied from the server.\n */\n injectRoomEvents(room, stateEventList) {\n var _arguments = arguments,\n _this0 = this;\n return _asyncToGenerator(function* () {\n var timelineEventList = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : [];\n var numLive = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : 0;\n // If there are no events in the timeline yet, initialise it with\n // the given state events\n var liveTimeline = room.getLiveTimeline();\n var timelineWasEmpty = liveTimeline.getEvents().length == 0;\n if (timelineWasEmpty) {\n // Passing these events into initialiseState will freeze them, so we need\n // to compute and cache the push actions for them now, otherwise sync dies\n // with an attempt to assign to read only property.\n // XXX: This is pretty horrible and is assuming all sorts of behaviour from\n // these functions that it shouldn't be. We should probably either store the\n // push actions cache elsewhere so we can freeze MatrixEvents, or otherwise\n // find some solution where MatrixEvents are immutable but allow for a cache\n // field.\n for (var ev of stateEventList) {\n _this0.client.getPushActionsForEvent(ev);\n }\n liveTimeline.initialiseState(stateEventList);\n }\n\n // If the timeline wasn't empty, we process the state events here: they're\n // defined as updates to the state before the start of the timeline, so this\n // starts to roll the state forward.\n // XXX: That's what we *should* do, but this can happen if we were previously\n // peeking in a room, in which case we obviously do *not* want to add the\n // state events here onto the end of the timeline. Historically, the js-sdk\n // has just set these new state events on the old and new state. This seems\n // very wrong because there could be events in the timeline that diverge the\n // state, in which case this is going to leave things out of sync. However,\n // for now I think it;s best to behave the same as the code has done previously.\n if (!timelineWasEmpty) {\n // XXX: As above, don't do this...\n //room.addLiveEvents(stateEventList || []);\n // Do this instead...\n room.oldState.setStateEvents(stateEventList);\n room.currentState.setStateEvents(stateEventList);\n }\n\n // the timeline is broken into 'live' events which just happened and normal timeline events\n // which are still to be appended to the end of the live timeline but happened a while ago.\n // The live events are marked as fromCache=false to ensure that downstream components know\n // this is a live event, not historical (from a remote server cache).\n\n var liveTimelineEvents = [];\n if (numLive > 0) {\n // last numLive events are live\n liveTimelineEvents = timelineEventList.slice(-1 * numLive);\n // everything else is not live\n timelineEventList = timelineEventList.slice(0, -1 * liveTimelineEvents.length);\n }\n\n // Execute the timeline events.\n // This also needs to be done before running push rules on the events as they need\n // to be decorated with sender etc.\n yield room.addLiveEvents(timelineEventList, {\n fromCache: true,\n addToState: false\n });\n if (liveTimelineEvents.length > 0) {\n yield room.addLiveEvents(liveTimelineEvents, {\n fromCache: false,\n addToState: false\n });\n }\n room.recalculate();\n\n // resolve invites now we have set the latest state\n _this0.resolveInvites(room);\n })();\n }\n resolveInvites(room) {\n if (!room || !this.opts.resolveInvitesToProfiles) {\n return;\n }\n var client = this.client;\n // For each invited room member we want to give them a displayname/avatar url\n // if they have one (the m.room.member invites don't contain this).\n room.getMembersWithMembership(KnownMembership.Invite).forEach(function (member) {\n if (member.requestedProfileInfo) return;\n member.requestedProfileInfo = true;\n // try to get a cached copy first.\n var user = client.getUser(member.userId);\n var promise;\n if (user) {\n promise = Promise.resolve({\n avatar_url: user.avatarUrl,\n displayname: user.displayName\n });\n } else {\n promise = client.getProfileInfo(member.userId);\n }\n promise.then(function (info) {\n // slightly naughty by doctoring the invite event but this means all\n // the code paths remain the same between invite/join display name stuff\n // which is a worthy trade-off for some minor pollution.\n var inviteEvent = member.events.member;\n if (inviteEvent.getContent().membership !== KnownMembership.Invite) {\n // between resolving and now they have since joined, so don't clobber\n return;\n }\n inviteEvent.getContent().avatar_url = info.avatar_url;\n inviteEvent.getContent().displayname = info.displayname;\n // fire listeners\n member.setMembershipEvent(inviteEvent, room.currentState);\n }, function (_err) {\n // OH WELL.\n });\n });\n }\n retryImmediately() {\n return true;\n }\n\n /**\n * Main entry point. Blocks until stop() is called.\n */\n sync() {\n var _this1 = this;\n return _asyncToGenerator(function* () {\n _this1.syncOpts.logger.debug(\"Sliding sync init loop\");\n\n // 1) We need to get push rules so we can check if events should bing as we get\n // them from /sync.\n while (!_this1.client.isGuest()) {\n try {\n _this1.syncOpts.logger.debug(\"Getting push rules...\");\n var result = yield _this1.client.getPushRules();\n _this1.syncOpts.logger.debug(\"Got push rules\");\n _this1.client.pushRules = result;\n break;\n } catch (err) {\n _this1.syncOpts.logger.error(\"Getting push rules failed\", err);\n if (_this1.shouldAbortSync(err)) {\n return;\n }\n }\n }\n\n // start syncing\n yield _this1.slidingSync.start();\n })();\n }\n\n /**\n * Stops the sync object from syncing.\n */\n stop() {\n this.syncOpts.logger.debug(\"SyncApi.stop\");\n this.slidingSync.stop();\n }\n\n /**\n * Sets the sync state and emits an event to say so\n * @param newState - The new state string\n * @param data - Object of additional data to emit in the event\n */\n updateSyncState(newState, data) {\n var old = this.syncState;\n this.syncState = newState;\n this.syncStateData = data;\n this.client.emit(ClientEvent.Sync, this.syncState, old, data);\n }\n\n /**\n * Takes a list of timelineEvents and adds and adds to notifEvents\n * as appropriate.\n * This must be called after the room the events belong to has been stored.\n *\n * @param timelineEventList - A list of timeline events. Lower index\n * is earlier in time. Higher index is later.\n */\n addNotifications(timelineEventList) {\n // gather our notifications into this.notifEvents\n if (!this.client.getNotifTimelineSet()) {\n return;\n }\n for (var timelineEvent of timelineEventList) {\n var pushActions = this.client.getPushActionsForEvent(timelineEvent);\n if (pushActions && pushActions.notify && pushActions.tweaks && pushActions.tweaks.highlight) {\n this.notifEvents.push(timelineEvent);\n }\n }\n }\n\n /**\n * Purge any events in the notifEvents array. Used after a /sync has been complete.\n * This should not be called at a per-room scope (e.g in onRoomData) because otherwise the ordering\n * will be messed up e.g room A gets a bing, room B gets a newer bing, but both in the same /sync\n * response. If we purge at a per-room scope then we could process room B before room A leading to\n * room B appearing earlier in the notifications timeline, even though it has the higher origin_server_ts.\n */\n purgeNotifications() {\n this.notifEvents.sort(function (a, b) {\n return a.getTs() - b.getTs();\n });\n this.notifEvents.forEach(event => {\n var _this$client$getNotif;\n (_this$client$getNotif = this.client.getNotifTimelineSet()) === null || _this$client$getNotif === void 0 || _this$client$getNotif.addLiveEvent(event, {\n addToState: false\n });\n });\n this.notifEvents = [];\n }\n}\nfunction ensureNameEvent(client, roomId, roomData) {\n // make sure m.room.name is in required_state if there is a name, replacing anything previously\n // there if need be. This ensures clients transparently 'calculate' the right room name. Native\n // sliding sync clients should just read the \"name\" field.\n if (!roomData.name) {\n return roomData;\n }\n for (var stateEvent of roomData.required_state) {\n if (stateEvent.type === EventType.RoomName && stateEvent.state_key === \"\") {\n stateEvent.content = {\n name: roomData.name\n };\n return roomData;\n }\n }\n roomData.required_state.push({\n event_id: \"$fake-sliding-sync-name-event-\" + roomId,\n state_key: \"\",\n type: EventType.RoomName,\n content: {\n name: roomData.name\n },\n sender: client.getUserId(),\n origin_server_ts: new Date().getTime()\n });\n return roomData;\n}\n// Helper functions which set up JS SDK structs are below and are identical to the sync v2 counterparts,\n// just outside the class.\nfunction mapEvents(client, roomId, events) {\n var decrypt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var mapper = client.getEventMapper({\n decrypt\n });\n return events.map(function (e) {\n e.room_id = roomId;\n return mapper(e);\n });\n}\nfunction processEphemeralEvents(client, roomId, ephEvents) {\n var ephemeralEvents = mapEvents(client, roomId, ephEvents);\n var room = client.getRoom(roomId);\n if (!room) {\n logger.warn(\"got ephemeral events for room but room doesn't exist on client:\", roomId);\n return;\n }\n room.addEphemeralEvents(ephemeralEvents);\n ephemeralEvents.forEach(e => {\n client.emit(ClientEvent.Event, e);\n });\n}\n//# sourceMappingURL=sliding-sync-sdk.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { UnstableValue } from \"../NamespacedValue.js\";\n/**\n * Beacon info and beacon event types as described in MSC3672\n * https://github.com/matrix-org/matrix-spec-proposals/pull/3672\n */\n\n/**\n * Beacon info events are state events.\n * We have two requirements for these events:\n * 1. they can only be written by their owner\n * 2. a user can have an arbitrary number of beacon_info events\n *\n * 1. is achieved by setting the state_key to the owners mxid.\n * Event keys in room state are a combination of `type` + `state_key`.\n * To achieve an arbitrary number of only owner-writable state events\n * we introduce a variable suffix to the event type\n *\n * @example\n * ```\n * {\n * \"type\": \"m.beacon_info.@matthew:matrix.org.1\",\n * \"state_key\": \"@matthew:matrix.org\",\n * \"content\": {\n * \"m.beacon_info\": {\n * \"description\": \"The Matthew Tracker\",\n * \"timeout\": 86400000,\n * },\n * // more content as described below\n * }\n * },\n * {\n * \"type\": \"m.beacon_info.@matthew:matrix.org.2\",\n * \"state_key\": \"@matthew:matrix.org\",\n * \"content\": {\n * \"m.beacon_info\": {\n * \"description\": \"Another different Matthew tracker\",\n * \"timeout\": 400000,\n * },\n * // more content as described below\n * }\n * }\n * ```\n */\n\n/**\n * Non-variable type for m.beacon_info event content\n */\nexport var M_BEACON_INFO = new UnstableValue(\"m.beacon_info\", \"org.matrix.msc3672.beacon_info\");\nexport var M_BEACON = new UnstableValue(\"m.beacon\", \"org.matrix.msc3672.beacon\");\n\n/**\n * m.beacon_info Event example from the spec\n * https://github.com/matrix-org/matrix-spec-proposals/pull/3672\n * @example\n * ```\n * {\n * \"type\": \"m.beacon_info\",\n * \"state_key\": \"@matthew:matrix.org\",\n * \"content\": {\n * \"m.beacon_info\": {\n * \"description\": \"The Matthew Tracker\", // same as an `m.location` description\n * \"timeout\": 86400000, // how long from the last event until we consider the beacon inactive in milliseconds\n * },\n * \"m.ts\": 1436829458432, // creation timestamp of the beacon on the client\n * \"m.asset\": {\n * \"type\": \"m.self\" // the type of asset being tracked as per MSC3488\n * }\n * }\n * }\n * ```\n */\n\n/**\n * m.beacon_info.* event content\n */\n\n/**\n * m.beacon event example\n * https://github.com/matrix-org/matrix-spec-proposals/pull/3672\n * @example\n * ```\n * {\n * \"type\": \"m.beacon\",\n * \"sender\": \"@matthew:matrix.org\",\n * \"content\": {\n * \"m.relates_to\": { // from MSC2674: https://github.com/matrix-org/matrix-doc/pull/2674\n * \"rel_type\": \"m.reference\", // from MSC3267: https://github.com/matrix-org/matrix-doc/pull/3267\n * \"event_id\": \"$beacon_info\"\n * },\n * \"m.location\": {\n * \"uri\": \"geo:51.5008,0.1247;u=35\",\n * \"description\": \"Arbitrary beacon information\"\n * },\n * \"m.ts\": 1636829458432,\n * }\n * }\n * ```\n */\n\n/**\n * Content of an m.beacon event\n */\n//# sourceMappingURL=beacon.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module which manages queuing, scheduling and retrying\n * of requests.\n */\nimport { logger } from \"./logger.js\";\nimport { EventType } from \"./@types/event.js\";\nimport { removeElement } from \"./utils.js\";\nimport { calculateRetryBackoff } from \"./http-api/index.js\";\nvar DEBUG = false; // set true to enable console logging.\n\n/**\n * The function to invoke to process (send) events in the queue.\n * @param event - The event to send.\n * @returns Resolved/rejected depending on the outcome of the request.\n */\n\n// eslint-disable-next-line camelcase\nexport class MatrixScheduler {\n /**\n * Default retry algorithm for the matrix scheduler. Retries events up to 4 times with exponential backoff.\n * @param attempts - Number of attempts that have been made, including the one that just failed (ie. starting at 1)\n * @see retryAlgorithm\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static RETRY_BACKOFF_RATELIMIT(event, attempts, err) {\n return calculateRetryBackoff(err, attempts, false);\n }\n\n /**\n * Queues `m.room.message` events and lets other events continue\n * concurrently.\n * @see queueAlgorithm\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static QUEUE_MESSAGES(event) {\n // enqueue messages or events that associate with another event (redactions and relations)\n if (event.getType() === EventType.RoomMessage || event.hasAssociation()) {\n // put these events in the 'message' queue.\n return \"message\";\n }\n // allow all other events continue concurrently.\n return null;\n }\n\n // queueName: [{\n // event: MatrixEvent, // event to send\n // defer: PromiseWithResolvers, // defer to resolve/reject at the END of the retries\n // attempts: Number // number of times we've called processFn\n // }, ...]\n\n /**\n * Construct a scheduler for Matrix. Requires\n * {@link MatrixScheduler#setProcessFunction} to be provided\n * with a way of processing events.\n * @param retryAlgorithm - Optional. The retry\n * algorithm to apply when determining when to try to send an event again.\n * Defaults to {@link MatrixScheduler.RETRY_BACKOFF_RATELIMIT}.\n * @param queueAlgorithm - Optional. The queuing\n * algorithm to apply when determining which events should be sent before the\n * given event. Defaults to {@link MatrixScheduler.QUEUE_MESSAGES}.\n */\n constructor() {\n var retryAlgorithm = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : MatrixScheduler.RETRY_BACKOFF_RATELIMIT;\n var queueAlgorithm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : MatrixScheduler.QUEUE_MESSAGES;\n this.retryAlgorithm = retryAlgorithm;\n this.queueAlgorithm = queueAlgorithm;\n _defineProperty(this, \"queues\", {});\n _defineProperty(this, \"activeQueues\", []);\n _defineProperty(this, \"procFn\", null);\n _defineProperty(this, \"processQueue\", queueName => {\n // get head of queue\n var obj = this.peekNextEvent(queueName);\n if (!obj) {\n this.disableQueue(queueName);\n return;\n }\n debuglog(\"Queue '%s' has %s pending events\", queueName, this.queues[queueName].length);\n // fire the process function and if it resolves, resolve the deferred. Else\n // invoke the retry algorithm.\n\n // First wait for a resolved promise, so the resolve handlers for\n // the deferred of the previously sent event can run.\n // This way enqueued relations/redactions to enqueued events can receive\n // the remove id of their target before being sent.\n Promise.resolve().then(() => {\n return this.procFn(obj.event);\n }).then(res => {\n // remove this from the queue\n this.removeNextEvent(queueName);\n debuglog(\"Queue '%s' sent event %s\", queueName, obj.event.getId());\n obj.resolvers.resolve(res);\n // keep processing\n this.processQueue(queueName);\n }, err => {\n obj.attempts += 1;\n // ask the retry algorithm when/if we should try again\n var waitTimeMs = this.retryAlgorithm(obj.event, obj.attempts, err);\n debuglog(\"retry(%s) err=%s event_id=%s waitTime=%s\", obj.attempts, err, obj.event.getId(), waitTimeMs);\n if (waitTimeMs === -1) {\n // give up (you quitter!)\n logger.info(\"Queue '%s' giving up on event %s\", queueName, obj.event.getId());\n // remove this from the queue\n this.clearQueue(queueName, err);\n } else {\n setTimeout(this.processQueue, waitTimeMs, queueName);\n }\n });\n });\n }\n\n /**\n * Retrieve a queue based on an event. The event provided does not need to be in\n * the queue.\n * @param event - An event to get the queue for.\n * @returns A shallow copy of events in the queue or null.\n * Modifying this array will not modify the list itself. Modifying events in\n * this array <i>will</i> modify the underlying event in the queue.\n * @see MatrixScheduler.removeEventFromQueue To remove an event from the queue.\n */\n getQueueForEvent(event) {\n var name = this.queueAlgorithm(event);\n if (!name || !this.queues[name]) {\n return null;\n }\n return this.queues[name].map(function (obj) {\n return obj.event;\n });\n }\n\n /**\n * Remove this event from the queue. The event is equal to another event if they\n * have the same ID returned from event.getId().\n * @param event - The event to remove.\n * @returns True if this event was removed.\n */\n removeEventFromQueue(event) {\n var name = this.queueAlgorithm(event);\n if (!name || !this.queues[name]) {\n return false;\n }\n var removed = false;\n removeElement(this.queues[name], element => {\n if (element.event.getId() === event.getId()) {\n // XXX we should probably reject the promise?\n // https://github.com/matrix-org/matrix-js-sdk/issues/496\n removed = true;\n return true;\n }\n return false;\n });\n return removed;\n }\n\n /**\n * Set the process function. Required for events in the queue to be processed.\n * If set after events have been added to the queue, this will immediately start\n * processing them.\n * @param fn - The function that can process events\n * in the queue.\n */\n setProcessFunction(fn) {\n this.procFn = fn;\n this.startProcessingQueues();\n }\n\n /**\n * Queue an event if it is required and start processing queues.\n * @param event - The event that may be queued.\n * @returns A promise if the event was queued, which will be\n * resolved or rejected in due time, else null.\n */\n queueEvent(event) {\n var queueName = this.queueAlgorithm(event);\n if (!queueName) {\n return null;\n }\n // add the event to the queue and make a deferred for it.\n if (!this.queues[queueName]) {\n this.queues[queueName] = [];\n }\n var eventResolvers = Promise.withResolvers();\n this.queues[queueName].push({\n event: event,\n resolvers: eventResolvers,\n attempts: 0\n });\n debuglog(\"Queue algorithm dumped event %s into queue '%s'\", event.getId(), queueName);\n this.startProcessingQueues();\n return eventResolvers.promise;\n }\n startProcessingQueues() {\n if (!this.procFn) return;\n // for each inactive queue with events in them\n Object.keys(this.queues).filter(queueName => {\n return this.activeQueues.indexOf(queueName) === -1 && this.queues[queueName].length > 0;\n }).forEach(queueName => {\n // mark the queue as active\n this.activeQueues.push(queueName);\n // begin processing the head of the queue\n debuglog(\"Spinning up queue: '%s'\", queueName);\n this.processQueue(queueName);\n });\n }\n disableQueue(queueName) {\n // queue is empty. Mark as inactive and stop recursing.\n var index = this.activeQueues.indexOf(queueName);\n if (index >= 0) {\n this.activeQueues.splice(index, 1);\n }\n logger.info(\"Stopping queue '%s' as it is now empty\", queueName);\n }\n clearQueue(queueName, err) {\n logger.info(\"clearing queue '%s'\", queueName);\n var obj;\n while (obj = this.removeNextEvent(queueName)) {\n obj.resolvers.reject(err);\n }\n this.disableQueue(queueName);\n }\n peekNextEvent(queueName) {\n var queue = this.queues[queueName];\n if (!Array.isArray(queue)) {\n return undefined;\n }\n return queue[0];\n }\n removeNextEvent(queueName) {\n var queue = this.queues[queueName];\n if (!Array.isArray(queue)) {\n return undefined;\n }\n return queue.shift();\n }\n}\n\n/* istanbul ignore next */\nfunction debuglog() {\n if (DEBUG) {\n logger.log(...arguments);\n }\n}\n//# sourceMappingURL=scheduler.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { ToDeviceMessageId } from \"./@types/event.js\";\nimport { ClientEvent } from \"./client.js\";\nimport { MatrixScheduler } from \"./scheduler.js\";\nimport { SyncState } from \"./sync.js\";\nimport { MapWithDefault } from \"./utils.js\";\nvar MAX_BATCH_SIZE = 20;\n\n/**\n * Maintains a queue of outgoing to-device messages, sending them\n * as soon as the homeserver is reachable.\n */\nexport class ToDeviceMessageQueue {\n constructor(client, logger) {\n var _this = this;\n this.client = client;\n this.logger = logger;\n _defineProperty(this, \"sending\", false);\n _defineProperty(this, \"running\", true);\n _defineProperty(this, \"retryTimeout\", null);\n _defineProperty(this, \"retryAttempts\", 0);\n _defineProperty(this, \"sendQueue\", /*#__PURE__*/_asyncToGenerator(function* () {\n if (_this.retryTimeout !== null) clearTimeout(_this.retryTimeout);\n _this.retryTimeout = null;\n if (_this.sending || !_this.running) return;\n _this.logger.debug(\"Attempting to send queued to-device messages\");\n _this.sending = true;\n var headBatch;\n try {\n while (_this.running) {\n headBatch = yield _this.client.store.getOldestToDeviceBatch();\n if (headBatch === null) break;\n yield _this.sendBatch(headBatch);\n yield _this.client.store.removeToDeviceBatch(headBatch.id);\n _this.retryAttempts = 0;\n }\n\n // Make sure we're still running after the async tasks: if not, stop.\n if (!_this.running) return;\n _this.logger.debug(\"All queued to-device messages sent\");\n } catch (e) {\n ++_this.retryAttempts;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n // eslint-disable-next-line new-cap\n var retryDelay = MatrixScheduler.RETRY_BACKOFF_RATELIMIT(null, _this.retryAttempts, e);\n if (retryDelay === -1) {\n // the scheduler function doesn't differentiate between fatal errors and just getting\n // bored and giving up for now\n if (Math.floor(e.httpStatus / 100) === 4) {\n _this.logger.error(\"Fatal error when sending to-device message - dropping to-device batch!\", e);\n yield _this.client.store.removeToDeviceBatch(headBatch.id);\n } else {\n _this.logger.info(\"Automatic retry limit reached for to-device messages.\");\n }\n return;\n }\n _this.logger.info(\"Failed to send batch of to-device messages. Will retry in \".concat(retryDelay, \"ms\"), e);\n _this.retryTimeout = setTimeout(_this.sendQueue, retryDelay);\n } finally {\n _this.sending = false;\n }\n }));\n /**\n * Listen to sync state changes and automatically resend any pending events\n * once syncing is resumed\n */\n _defineProperty(this, \"onResumedSync\", (state, oldState) => {\n if (state === SyncState.Syncing && oldState !== SyncState.Syncing) {\n this.logger.info(\"Resuming queue after resumed sync\");\n this.sendQueue();\n }\n });\n }\n start() {\n this.running = true;\n this.sendQueue();\n this.client.on(ClientEvent.Sync, this.onResumedSync);\n }\n stop() {\n this.running = false;\n if (this.retryTimeout !== null) clearTimeout(this.retryTimeout);\n this.retryTimeout = null;\n this.client.removeListener(ClientEvent.Sync, this.onResumedSync);\n }\n queueBatch(batch) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var batches = [];\n for (var i = 0; i < batch.batch.length; i += MAX_BATCH_SIZE) {\n var batchWithTxnId = {\n eventType: batch.eventType,\n batch: batch.batch.slice(i, i + MAX_BATCH_SIZE),\n txnId: _this2.client.makeTxnId()\n };\n batches.push(batchWithTxnId);\n var msgmap = batchWithTxnId.batch.map(msg => \"\".concat(msg.userId, \"/\").concat(msg.deviceId, \" (msgid \").concat(msg.payload[ToDeviceMessageId], \")\"));\n _this2.logger.info(\"Enqueuing batch of to-device messages. type=\".concat(batch.eventType, \" txnid=\").concat(batchWithTxnId.txnId), msgmap);\n }\n yield _this2.client.store.saveToDeviceBatches(batches);\n _this2.sendQueue();\n })();\n }\n /**\n * Attempts to send a batch of to-device messages.\n */\n sendBatch(batch) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var contentMap = new MapWithDefault(() => new Map());\n for (var item of batch.batch) {\n contentMap.getOrCreate(item.userId).set(item.deviceId, item.payload);\n }\n _this3.logger.info(\"Sending batch of \".concat(batch.batch.length, \" to-device messages with ID \").concat(batch.id, \" and txnId \").concat(batch.txnId));\n yield _this3.client.sendToDevice(batch.eventType, contentMap, batch.txnId);\n })();\n }\n}\n//# sourceMappingURL=ToDeviceMessageQueue.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { UnstableValue } from \"matrix-events-sdk\";\n\n/// The event type storing the user's individual policies.\n///\n/// Exported for testing purposes.\nexport var POLICIES_ACCOUNT_EVENT_TYPE = new UnstableValue(\"m.policies\", \"org.matrix.msc3847.policies\");\n\n/// The key within the user's individual policies storing the user's ignored invites.\n///\n/// Exported for testing purposes.\nexport var IGNORE_INVITES_ACCOUNT_EVENT_KEY = new UnstableValue(\"m.ignore.invites\", \"org.matrix.msc3847.ignore.invites\");\n\n/// The types of recommendations understood.\nexport var PolicyRecommendation = /*#__PURE__*/function (PolicyRecommendation) {\n PolicyRecommendation[\"Ban\"] = \"m.ban\";\n return PolicyRecommendation;\n}({});\n\n/**\n * The various scopes for policies.\n */\nexport var PolicyScope = /*#__PURE__*/function (PolicyScope) {\n /**\n * The policy deals with an individual user, e.g. reject invites\n * from this user.\n */\n PolicyScope[\"User\"] = \"m.policy.user\";\n /**\n * The policy deals with a room, e.g. reject invites towards\n * a specific room.\n */\n PolicyScope[\"Room\"] = \"m.policy.room\";\n /**\n * The policy deals with a server, e.g. reject invites from\n * this server.\n */\n PolicyScope[\"Server\"] = \"m.policy.server\";\n return PolicyScope;\n}({});\n//# sourceMappingURL=invites-ignorer-types.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { EventTimeline } from \"./event-timeline.js\";\nimport { Preset } from \"../@types/partials.js\";\nimport { globToRegexp } from \"../utils.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { IGNORE_INVITES_ACCOUNT_EVENT_KEY, POLICIES_ACCOUNT_EVENT_TYPE, PolicyRecommendation, PolicyScope } from \"./invites-ignorer-types.js\";\nexport { IGNORE_INVITES_ACCOUNT_EVENT_KEY, POLICIES_ACCOUNT_EVENT_TYPE, PolicyRecommendation, PolicyScope };\nvar scopeToEventTypeMap = {\n [PolicyScope.User]: EventType.PolicyRuleUser,\n [PolicyScope.Room]: EventType.PolicyRuleRoom,\n [PolicyScope.Server]: EventType.PolicyRuleServer\n};\n\n/**\n * A container for ignored invites.\n *\n * # Performance\n *\n * This implementation is extremely naive. It expects that we are dealing\n * with a very short list of sources (e.g. only one). If real-world\n * applications turn out to require longer lists, we may need to rework\n * our data structures.\n */\nexport class IgnoredInvites {\n constructor(client) {\n this.client = client;\n }\n\n /**\n * Add a new rule.\n *\n * @param scope - The scope for this rule.\n * @param entity - The entity covered by this rule. Globs are supported.\n * @param reason - A human-readable reason for introducing this new rule.\n * @returns The event id for the new rule.\n */\n addRule(scope, entity, reason) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var target = yield _this.getOrCreateTargetRoom();\n var response = yield _this.client.sendStateEvent(target.roomId, scopeToEventTypeMap[scope], {\n entity,\n reason,\n recommendation: PolicyRecommendation.Ban\n });\n return response.event_id;\n })();\n }\n\n /**\n * Remove a rule.\n */\n removeRule(event) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n yield _this2.client.redactEvent(event.getRoomId(), event.getId());\n })();\n }\n\n /**\n * Add a new room to the list of sources. If the user isn't a member of the\n * room, attempt to join it.\n *\n * @param roomId - A valid room id. If this room is already in the list\n * of sources, it will not be duplicated.\n * @returns `true` if the source was added, `false` if it was already present.\n * @throws If `roomId` isn't the id of a room that the current user is already\n * member of or can join.\n *\n * # Safety\n *\n * This method will rewrite the `Policies` object in the user's account data.\n * This rewrite is inherently racy and could overwrite or be overwritten by\n * other concurrent rewrites of the same object.\n */\n addSource(roomId) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n // We attempt to join the room *before* calling\n // `await this.getOrCreateSourceRooms()` to decrease the duration\n // of the racy section.\n yield _this3.client.joinRoom(roomId);\n // Race starts.\n var sources = (yield _this3.getOrCreateSourceRooms()).map(room => room.roomId);\n if (sources.includes(roomId)) {\n return false;\n }\n sources.push(roomId);\n yield _this3.withIgnoreInvitesPolicies(ignoreInvitesPolicies => {\n ignoreInvitesPolicies.sources = sources;\n });\n\n // Race ends.\n return true;\n })();\n }\n\n /**\n * Find out whether an invite should be ignored.\n *\n * @param params\n * @param params.sender - The user id for the user who issued the invite.\n * @param params.roomId - The room to which the user is invited.\n * @returns A rule matching the entity, if any was found, `null` otherwise.\n */\n getRuleForInvite(_ref) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var sender = _ref.sender,\n roomId = _ref.roomId;\n // In this implementation, we perform a very naive lookup:\n // - search in each policy room;\n // - turn each (potentially glob) rule entity into a regexp.\n //\n // Real-world testing will tell us whether this is performant enough.\n // In the (unfortunately likely) case it isn't, there are several manners\n // in which we could optimize this:\n // - match several entities per go;\n // - pre-compile each rule entity into a regexp;\n // - pre-compile entire rooms into a single regexp.\n var policyRooms = yield _this4.getOrCreateSourceRooms();\n var senderServer = sender.split(\":\")[1];\n var roomServer = roomId.split(\":\")[1];\n for (var room of policyRooms) {\n var state = room.getUnfilteredTimelineSet().getLiveTimeline().getState(EventTimeline.FORWARDS);\n for (var _ref3 of [{\n scope: PolicyScope.Room,\n entities: [roomId]\n }, {\n scope: PolicyScope.User,\n entities: [sender]\n }, {\n scope: PolicyScope.Server,\n entities: [senderServer, roomServer]\n }]) {\n var scope = _ref3.scope;\n var entities = _ref3.entities;\n var events = state.getStateEvents(scopeToEventTypeMap[scope]);\n for (var event of events) {\n var content = event.getContent();\n if ((content === null || content === void 0 ? void 0 : content.recommendation) != PolicyRecommendation.Ban) {\n // Ignoring invites only looks at `m.ban` recommendations.\n continue;\n }\n var glob = content === null || content === void 0 ? void 0 : content.entity;\n if (!glob) {\n // Invalid event.\n continue;\n }\n var regexp = void 0;\n try {\n regexp = new RegExp(globToRegexp(glob));\n } catch (_unused) {\n // Assume invalid event.\n continue;\n }\n for (var entity of entities) {\n if (entity && regexp.test(entity)) {\n return event;\n }\n }\n // No match.\n }\n }\n }\n return null;\n })();\n }\n\n /**\n * Get the target room, i.e. the room in which any new rule should be written.\n *\n * If there is no target room setup, a target room is created.\n *\n * Note: This method is public for testing reasons. Most clients should not need\n * to call it directly.\n *\n * # Safety\n *\n * This method will rewrite the `Policies` object in the user's account data.\n * This rewrite is inherently racy and could overwrite or be overwritten by\n * other concurrent rewrites of the same object.\n */\n getOrCreateTargetRoom() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var ignoreInvitesPolicies = _this5.getIgnoreInvitesPolicies();\n var target = ignoreInvitesPolicies.target;\n // Validate `target`. If it is invalid, trash out the current `target`\n // and create a new room.\n if (typeof target !== \"string\") {\n target = null;\n }\n if (target) {\n // Check that the room exists and is valid.\n var room = _this5.client.getRoom(target);\n if (room) {\n return room;\n } else {\n target = null;\n }\n }\n // We need to create our own policy room for ignoring invites.\n target = (yield _this5.client.createRoom({\n name: \"Individual Policy Room\",\n preset: Preset.PrivateChat\n })).room_id;\n yield _this5.withIgnoreInvitesPolicies(ignoreInvitesPolicies => {\n ignoreInvitesPolicies.target = target;\n });\n\n // Since we have just called `createRoom`, `getRoom` should not be `null`.\n return _this5.client.getRoom(target);\n })();\n }\n\n /**\n * Get the list of source rooms, i.e. the rooms from which rules need to be read.\n *\n * If no source rooms are setup, the target room is used as sole source room.\n *\n * Note: This method is public for testing reasons. Most clients should not need\n * to call it directly.\n *\n * # Safety\n *\n * This method will rewrite the `Policies` object in the user's account data.\n * This rewrite is inherently racy and could overwrite or be overwritten by\n * other concurrent rewrites of the same object.\n */\n getOrCreateSourceRooms() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var ignoreInvitesPolicies = _this6.getIgnoreInvitesPolicies();\n var sources = ignoreInvitesPolicies.sources;\n\n // Validate `sources`. If it is invalid, trash out the current `sources`\n // and create a new list of sources from `target`.\n var hasChanges = false;\n if (!Array.isArray(sources)) {\n // `sources` could not be an array.\n hasChanges = true;\n sources = [];\n }\n var sourceRooms = sources\n // `sources` could contain non-string / invalid room ids\n .filter(roomId => typeof roomId === \"string\").map(roomId => _this6.client.getRoom(roomId)).filter(room => !!room);\n if (sourceRooms.length != sources.length) {\n hasChanges = true;\n }\n if (sourceRooms.length == 0) {\n // `sources` could be empty (possibly because we've removed\n // invalid content)\n var target = yield _this6.getOrCreateTargetRoom();\n hasChanges = true;\n sourceRooms = [target];\n }\n if (hasChanges) {\n // Reload `policies`/`ignoreInvitesPolicies` in case it has been changed\n // during or by our call to `this.getTargetRoom()`.\n yield _this6.withIgnoreInvitesPolicies(ignoreInvitesPolicies => {\n ignoreInvitesPolicies.sources = sources;\n });\n }\n return sourceRooms;\n })();\n }\n\n /**\n * Fetch the `IGNORE_INVITES_POLICIES` object from account data.\n *\n * If both an unstable prefix version and a stable prefix version are available,\n * it will return the stable prefix version preferentially.\n *\n * The result is *not* validated but is guaranteed to be a non-null object.\n *\n * @returns A non-null object.\n */\n getIgnoreInvitesPolicies() {\n return this.getPoliciesAndIgnoreInvitesPolicies().ignoreInvitesPolicies;\n }\n\n /**\n * Modify in place the `IGNORE_INVITES_POLICIES` object from account data.\n */\n withIgnoreInvitesPolicies(cb) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var _this7$getPoliciesAnd = _this7.getPoliciesAndIgnoreInvitesPolicies(),\n policies = _this7$getPoliciesAnd.policies,\n ignoreInvitesPolicies = _this7$getPoliciesAnd.ignoreInvitesPolicies;\n cb(ignoreInvitesPolicies);\n policies[IGNORE_INVITES_ACCOUNT_EVENT_KEY.name] = ignoreInvitesPolicies;\n yield _this7.client.setAccountData(POLICIES_ACCOUNT_EVENT_TYPE.name, policies);\n })();\n }\n\n /**\n * As `getIgnoreInvitesPolicies` but also return the `POLICIES_ACCOUNT_EVENT_TYPE`\n * object.\n */\n getPoliciesAndIgnoreInvitesPolicies() {\n var policies = {};\n for (var key of [POLICIES_ACCOUNT_EVENT_TYPE.name, POLICIES_ACCOUNT_EVENT_TYPE.altName]) {\n var _this$client$getAccou;\n if (!key) {\n continue;\n }\n var value = (_this$client$getAccou = this.client.getAccountData(key)) === null || _this$client$getAccou === void 0 ? void 0 : _this$client$getAccou.getContent();\n if (value) {\n policies = value;\n break;\n }\n }\n var ignoreInvitesPolicies = {};\n var hasIgnoreInvitesPolicies = false;\n for (var _key of [IGNORE_INVITES_ACCOUNT_EVENT_KEY.name, IGNORE_INVITES_ACCOUNT_EVENT_KEY.altName]) {\n if (!_key) {\n continue;\n }\n var _value = policies[_key];\n if (_value && typeof _value == \"object\") {\n ignoreInvitesPolicies = _value;\n hasIgnoreInvitesPolicies = true;\n break;\n }\n }\n if (!hasIgnoreInvitesPolicies) {\n policies[IGNORE_INVITES_ACCOUNT_EVENT_KEY.name] = ignoreInvitesPolicies;\n }\n return {\n policies,\n ignoreInvitesPolicies\n };\n }\n}\n//# sourceMappingURL=invites-ignorer.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/** The prefix used on indexeddbs created by rust-crypto */\nexport var RUST_SDK_STORE_PREFIX = \"matrix-js-sdk\";\n//# sourceMappingURL=constants.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * An incoming, or outgoing, request to verify a user or a device via cross-signing.\n */\n\n/** Events emitted by {@link VerificationRequest}. */\nexport var VerificationRequestEvent = /*#__PURE__*/function (VerificationRequestEvent) {\n /**\n * Fires whenever the state of the request object has changed.\n *\n * There is no payload to the event.\n */\n VerificationRequestEvent[\"Change\"] = \"change\";\n return VerificationRequestEvent;\n}({});\n\n/**\n * Listener type map for {@link VerificationRequestEvent}s.\n *\n * @internal\n */\n\n/** The current phase of a verification request. */\nexport var VerificationPhase = /*#__PURE__*/function (VerificationPhase) {\n /** Initial state: no event yet exchanged */\n VerificationPhase[VerificationPhase[\"Unsent\"] = 1] = \"Unsent\";\n /** An `m.key.verification.request` event has been sent or received */\n VerificationPhase[VerificationPhase[\"Requested\"] = 2] = \"Requested\";\n /** An `m.key.verification.ready` event has been sent or received, indicating the verification request is accepted. */\n VerificationPhase[VerificationPhase[\"Ready\"] = 3] = \"Ready\";\n /**\n * The verification is in flight.\n *\n * This means that an `m.key.verification.start` event has been sent or received, choosing a verification method;\n * however the verification has not yet completed or been cancelled.\n */\n VerificationPhase[VerificationPhase[\"Started\"] = 4] = \"Started\";\n /**\n * An `m.key.verification.cancel` event has been sent or received at any time before the `done` event, cancelling\n * the verification request\n */\n VerificationPhase[VerificationPhase[\"Cancelled\"] = 5] = \"Cancelled\";\n /**\n * The verification request is complete.\n *\n * Normally this means that `m.key.verification.done` events have been sent and received.\n */\n VerificationPhase[VerificationPhase[\"Done\"] = 6] = \"Done\";\n return VerificationPhase;\n}({});\n\n/**\n * A `Verifier` is responsible for performing the verification using a particular method, such as via QR code or SAS\n * (emojis).\n *\n * A verifier object can be created by calling `VerificationRequest.beginVerification`; one is also created\n * automatically when a `m.key.verification.start` event is received for an existing VerificationRequest.\n *\n * Once a verifier object is created, the verification can be started by calling the {@link Verifier#verify} method.\n */\n\n/** Events emitted by {@link Verifier} */\nexport var VerifierEvent = /*#__PURE__*/function (VerifierEvent) {\n /**\n * The verification has been cancelled, by us or the other side.\n *\n * The payload is either an {@link Error}, or an (incoming or outgoing) {@link MatrixEvent}, depending on\n * unspecified reasons.\n */\n VerifierEvent[\"Cancel\"] = \"cancel\";\n /**\n * SAS data has been exchanged and should be displayed to the user.\n *\n * The payload is the {@link ShowSasCallbacks} object.\n */\n VerifierEvent[\"ShowSas\"] = \"show_sas\";\n /**\n * The user should confirm if the other side has scanned our QR code.\n *\n * The payload is the {@link ShowQrCodeCallbacks} object.\n */\n VerifierEvent[\"ShowReciprocateQr\"] = \"show_reciprocate_qr\";\n return VerifierEvent;\n}({});\n\n/** Listener type map for {@link VerifierEvent}s. */\n\n/**\n * Callbacks for user actions to confirm that the other side has scanned our QR code.\n *\n * This is exposed as the payload of a `VerifierEvent.ShowReciprocateQr` event, or can be retrieved directly from the\n * verifier as `reciprocateQREvent`.\n */\n\n/**\n * Callbacks for user actions while a SAS is displayed.\n *\n * This is exposed as the payload of a `VerifierEvent.ShowSas` event, or directly from the verifier as `sasEvent`.\n */\n\n/** A generated SAS to be shown to the user, in alternative formats */\n\n/**\n * An emoji for the generated SAS. A tuple `[emoji, name]` where `emoji` is the emoji itself and `name` is the\n * English name.\n */\n\n/**\n * True if the request is in a state where it can be accepted (ie, that we're in phases {@link VerificationPhase.Unsent}\n * or {@link VerificationPhase.Requested}, and that we're not in the process of sending a `ready` or `cancel`).\n */\nexport function canAcceptVerificationRequest(req) {\n return req.phase < VerificationPhase.Ready && !req.accepting && !req.declining;\n}\n//# sourceMappingURL=verification.js.map","// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n const BASE_MAP = new Uint8Array(256)\n for (let j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (let i = 0; i < ALPHABET.length; i++) {\n const x = ALPHABET.charAt(i)\n const xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n const BASE = ALPHABET.length\n const LEADER = ALPHABET.charAt(0)\n const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n // eslint-disable-next-line no-empty\n if (source instanceof Uint8Array) { } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n let zeroes = 0\n let length = 0\n let pbegin = 0\n const pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n const size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n const b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n let carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n let i = 0\n for (let it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n let it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n let str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n let psz = 0\n // Skip and count leading '1's.\n let zeroes = 0\n let length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n const size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n const b256 = new Uint8Array(size)\n // Process the characters.\n while (psz < source.length) {\n // Find code of next character\n const charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n let carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n let i = 0\n for (let it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n let it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n const vch = new Uint8Array(zeroes + (size - it4))\n let j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n const buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode,\n decodeUnsafe,\n decode\n }\n}\nexport default base\n","import basex from 'base-x';\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nexport default basex(ALPHABET);\n","/*\n * Copyright 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport bs58 from \"bs58\";\n\n// picked arbitrarily but to try & avoid clashing with any bitcoin ones\n// (which are also base58 encoded, but bitcoin's involve a lot more hashing)\nvar OLM_RECOVERY_KEY_PREFIX = [0x8b, 0x01];\nvar KEY_SIZE = 32;\n\n/**\n * Encode a recovery key using the Matrix {@link https://spec.matrix.org/v1.11/appendices/#cryptographic-key-representation | Cryptographic key representation}\n * @param key\n */\nexport function encodeRecoveryKey(key) {\n var _base58key$match;\n var buf = new Uint8Array(OLM_RECOVERY_KEY_PREFIX.length + key.length + 1);\n buf.set(OLM_RECOVERY_KEY_PREFIX, 0);\n buf.set(key, OLM_RECOVERY_KEY_PREFIX.length);\n var parity = 0;\n for (var i = 0; i < buf.length - 1; ++i) {\n parity ^= buf[i];\n }\n buf[buf.length - 1] = parity;\n var base58key = bs58.encode(buf);\n return (_base58key$match = base58key.match(/.{1,4}/g)) === null || _base58key$match === void 0 ? void 0 : _base58key$match.join(\" \");\n}\n\n/**\n * Decode a recovery key encoded with the Matrix {@link https://spec.matrix.org/v1.11/appendices/#cryptographic-key-representation | Cryptographic key representation} encoding.\n * @param recoveryKey\n */\nexport function decodeRecoveryKey(recoveryKey) {\n var result = bs58.decode(recoveryKey.replace(/ /g, \"\"));\n var parity = 0;\n for (var b of result) {\n parity ^= b;\n }\n if (parity !== 0) {\n throw new Error(\"Incorrect parity\");\n }\n for (var i = 0; i < OLM_RECOVERY_KEY_PREFIX.length; ++i) {\n if (result[i] !== OLM_RECOVERY_KEY_PREFIX[i]) {\n throw new Error(\"Incorrect prefix\");\n }\n }\n if (result.length !== OLM_RECOVERY_KEY_PREFIX.length + KEY_SIZE + 1) {\n throw new Error(\"Incorrect length\");\n }\n return Uint8Array.from(result.slice(OLM_RECOVERY_KEY_PREFIX.length, OLM_RECOVERY_KEY_PREFIX.length + KEY_SIZE));\n}\n//# sourceMappingURL=recovery-key.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\n * Copyright 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar DEFAULT_BIT_SIZE = 256;\n\n/**\n * Derive a recovery key from a passphrase and salt using PBKDF2.\n * @see https://spec.matrix.org/v1.11/client-server-api/#deriving-keys-from-passphrases\n *\n * @param passphrase - The passphrase to derive the key from\n * @param salt - The salt to use in the derivation\n * @param iterations - The number of iterations to use in the derivation\n * @param numBits - The number of bits to derive\n */\nexport function deriveRecoveryKeyFromPassphrase(_x, _x2, _x3) {\n return _deriveRecoveryKeyFromPassphrase.apply(this, arguments);\n}\nfunction _deriveRecoveryKeyFromPassphrase() {\n _deriveRecoveryKeyFromPassphrase = _asyncToGenerator(function* (passphrase, salt, iterations) {\n var numBits = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_BIT_SIZE;\n if (!globalThis.crypto.subtle || !TextEncoder) {\n throw new Error(\"Password-based backup is not available on this platform\");\n }\n var key = yield globalThis.crypto.subtle.importKey(\"raw\", new TextEncoder().encode(passphrase), {\n name: \"PBKDF2\"\n }, false, [\"deriveBits\"]);\n var keybits = yield globalThis.crypto.subtle.deriveBits({\n name: \"PBKDF2\",\n salt: new TextEncoder().encode(salt),\n iterations: iterations,\n hash: \"SHA-512\"\n }, key, numBits);\n return new Uint8Array(keybits);\n });\n return _deriveRecoveryKeyFromPassphrase.apply(this, arguments);\n}\n//# sourceMappingURL=key-passphrase.js.map","/*\n * Copyright 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Cryptography-related events emitted by the {@link matrix.MatrixClient}.\n */\nexport var CryptoEvent = /*#__PURE__*/function (CryptoEvent) {\n /**\n * Fires when the trust status of a user changes.\n * The payload is a pair (userId, userTrustLevel). The trust level is one of the values from UserVerificationStatus.\n */\n CryptoEvent[\"UserTrustStatusChanged\"] = \"userTrustStatusChanged\";\n /**\n * Fires when the key backup status changes.\n * The payload is a boolean indicating whether the key backup is enabled.\n */\n CryptoEvent[\"KeyBackupStatus\"] = \"crypto.keyBackupStatus\";\n /**\n * Fires when we failed to back up the keys\n * The payload is the error code of the error that occurred.\n */\n CryptoEvent[\"KeyBackupFailed\"] = \"crypto.keyBackupFailed\";\n /**\n * Fires when the number of sessions that can be backed up changes.\n * The payload is the remaining number of sessions that can be backed up.\n */\n CryptoEvent[\"KeyBackupSessionsRemaining\"] = \"crypto.keyBackupSessionsRemaining\";\n /**\n * Fires when a new valid backup decryption key is in cache.\n * This will happen when a secret is received from another session, from secret storage,\n * or when a new backup is created from this session.\n *\n * The payload is the version of the backup for which we have the key for.\n *\n * This event is only fired by the rust crypto backend.\n */\n CryptoEvent[\"KeyBackupDecryptionKeyCached\"] = \"crypto.keyBackupDecryptionKeyCached\";\n /**\n * Fires when a key verification request is received.\n * The payload is a VerificationRequest object representing the request.\n */\n CryptoEvent[\"VerificationRequestReceived\"] = \"crypto.verificationRequestReceived\";\n /** @deprecated Use {@link DevicesUpdated} instead when using rust crypto */\n CryptoEvent[\"WillUpdateDevices\"] = \"crypto.willUpdateDevices\";\n /**\n * Fires whenever the stored devices for a user have been updated\n * The payload is a pair (userIds, initialFetch).\n */\n CryptoEvent[\"DevicesUpdated\"] = \"crypto.devicesUpdated\";\n /**\n * Fires when the user's cross-signing keys have changed or cross-signing\n * has been enabled/disabled. The client can use getStoredCrossSigningForUser\n * with the user ID of the logged in user to check if cross-signing is\n * enabled on the account. If enabled, it can test whether the current key\n * is trusted using with checkUserTrust with the user ID of the logged\n * in user. The checkOwnCrossSigningTrust function may be used to reconcile\n * the trust in the account key.\n *\n * The cross-signing API is currently UNSTABLE and may change without notice.\n * @experimental\n */\n CryptoEvent[\"KeysChanged\"] = \"crossSigning.keysChanged\";\n /**\n * Fires when data is being migrated from legacy crypto to rust crypto.\n *\n * The payload is a pair `(progress, total)`, where `progress` is the number of steps completed so far, and\n * `total` is the total number of steps. When migration is complete, a final instance of the event is emitted, with\n * `progress === total === -1`.\n */\n CryptoEvent[\"LegacyCryptoStoreMigrationProgress\"] = \"crypto.legacyCryptoStoreMigrationProgress\";\n /**\n * Fires when a new dehydrated device is created locally.\n *\n * After the client calls {@link CryptoApi.startDehydration}, this event\n * will be fired every time a new dehydrated device is created. It may fire\n * before `startDehydration` returns.\n */\n CryptoEvent[\"DehydratedDeviceCreated\"] = \"dehydration.DehydratedDeviceCreated\";\n /**\n * Fires when a new dehydrated device is successfully uploaded to the server.\n *\n * This should fire shortly after {@link DehydratedDeviceCreated} fires. If\n * upload is unsuccessful, this will be reported either by an error thrown\n * by {@link CryptoApi.startDehydration} (for errors that happen before\n * `startDehydration` returns), or by firing {@link DehydratedDeviceRotationError}\n * (for errors that happen during regular rotation of the dehydrated device)\n */\n CryptoEvent[\"DehydratedDeviceUploaded\"] = \"dehydration.DehydratedDeviceUploaded\";\n /**\n * Fires when rehydration has started.\n *\n * After the client calls {@link CryptoApi.startDehydration}, this event will\n * fire if a dehydrated device is found and we attempt to rehydrate it.\n */\n CryptoEvent[\"RehydrationStarted\"] = \"dehydration.RehydrationStarted\";\n /**\n * Fires during rehydration, to inform the application of rehydration progress.\n *\n * The payload is a pair `[roomKeyCount: number, toDeviceCount: number]`,\n * where `roomKeyCount` is the number of room keys that have been received\n * so far, and `toDeviceCount` is the number of to-device messages received\n * so far (including the messages containing room keys).\n */\n CryptoEvent[\"RehydrationProgress\"] = \"dehydration.RehydrationProgress\";\n /** Fires when rehydration has completed successfully. */\n CryptoEvent[\"RehydrationCompleted\"] = \"dehydration.RehydrationCompleted\";\n /** Fires when there was an error in rehydration.\n *\n * The payload is an error message as a string.\n */\n CryptoEvent[\"RehydrationError\"] = \"dehydration.RehydrationError\";\n /**\n * Fires when a dehydrated device key has been cached in the local database.\n */\n CryptoEvent[\"DehydrationKeyCached\"] = \"dehydration.DehydrationKeyCached\";\n /**\n * Fires when an error occurs during periodic rotation of the dehydrated device.\n *\n * The payload is an error message as a string.\n */\n CryptoEvent[\"DehydratedDeviceRotationError\"] = \"dehydration.DehydratedDeviceRotationError\";\n return CryptoEvent;\n}({});\n//# sourceMappingURL=CryptoEvent.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * `matrix-js-sdk/lib/crypto-api`: End-to-end encryption support.\n *\n * The most important type is {@link CryptoApi}, an instance of which can be retrieved via\n * {@link MatrixClient.getCrypto}.\n *\n * @packageDocumentation\n */\n\n/**\n * The options to start device dehydration.\n */\n\n/**\n * Public interface to the cryptography parts of the js-sdk\n *\n * @remarks Currently, this is a work-in-progress. In time, more methods will be added here.\n */\n\n/** A reason code for a failure to decrypt an event. */\nexport var DecryptionFailureCode = /*#__PURE__*/function (DecryptionFailureCode) {\n /** Message was encrypted with a Megolm session whose keys have not been shared with us. */\n DecryptionFailureCode[\"MEGOLM_UNKNOWN_INBOUND_SESSION_ID\"] = \"MEGOLM_UNKNOWN_INBOUND_SESSION_ID\";\n /** A special case of {@link MEGOLM_UNKNOWN_INBOUND_SESSION_ID}: the sender has told us it is withholding the key. */\n DecryptionFailureCode[\"MEGOLM_KEY_WITHHELD\"] = \"MEGOLM_KEY_WITHHELD\";\n /** A special case of {@link MEGOLM_KEY_WITHHELD}: the sender has told us it is withholding the key, because the current device is unverified. */\n DecryptionFailureCode[\"MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE\"] = \"MEGOLM_KEY_WITHHELD_FOR_UNVERIFIED_DEVICE\";\n /** Message was encrypted with a Megolm session which has been shared with us, but in a later ratchet state. */\n DecryptionFailureCode[\"OLM_UNKNOWN_MESSAGE_INDEX\"] = \"OLM_UNKNOWN_MESSAGE_INDEX\";\n /**\n * Message was sent before the current device was created; there is no key backup on the server, so this\n * decryption failure is expected.\n */\n DecryptionFailureCode[\"HISTORICAL_MESSAGE_NO_KEY_BACKUP\"] = \"HISTORICAL_MESSAGE_NO_KEY_BACKUP\";\n /**\n * Message was sent before the current device was created; there was a key backup on the server, but we don't\n * seem to have access to the backup. (Probably we don't have the right key.)\n */\n DecryptionFailureCode[\"HISTORICAL_MESSAGE_BACKUP_UNCONFIGURED\"] = \"HISTORICAL_MESSAGE_BACKUP_UNCONFIGURED\";\n /**\n * Message was sent before the current device was created; there was a (usable) key backup on the server, but we\n * still can't decrypt. (Either the session isn't in the backup, or we just haven't gotten around to checking yet.)\n */\n DecryptionFailureCode[\"HISTORICAL_MESSAGE_WORKING_BACKUP\"] = \"HISTORICAL_MESSAGE_WORKING_BACKUP\";\n /**\n * Message was sent when the user was not a member of the room.\n */\n DecryptionFailureCode[\"HISTORICAL_MESSAGE_USER_NOT_JOINED\"] = \"HISTORICAL_MESSAGE_USER_NOT_JOINED\";\n /**\n * The sender's identity is not verified, but was previously verified.\n */\n DecryptionFailureCode[\"SENDER_IDENTITY_PREVIOUSLY_VERIFIED\"] = \"SENDER_IDENTITY_PREVIOUSLY_VERIFIED\";\n /**\n * The sender device is not cross-signed. This will only be used if the\n * device isolation mode is set to `OnlySignedDevicesIsolationMode`.\n */\n DecryptionFailureCode[\"UNSIGNED_SENDER_DEVICE\"] = \"UNSIGNED_SENDER_DEVICE\";\n /**\n * We weren't able to link the message back to any known device. This will\n * only be used if the device isolation mode is set to `OnlySignedDevicesIsolationMode`.\n */\n DecryptionFailureCode[\"UNKNOWN_SENDER_DEVICE\"] = \"UNKNOWN_SENDER_DEVICE\";\n /** Unknown or unclassified error. */\n DecryptionFailureCode[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n return DecryptionFailureCode;\n}({});\n\n/** Base {@link DeviceIsolationMode} kind. */\nexport var DeviceIsolationModeKind = /*#__PURE__*/function (DeviceIsolationModeKind) {\n DeviceIsolationModeKind[DeviceIsolationModeKind[\"AllDevicesIsolationMode\"] = 0] = \"AllDevicesIsolationMode\";\n DeviceIsolationModeKind[DeviceIsolationModeKind[\"OnlySignedDevicesIsolationMode\"] = 1] = \"OnlySignedDevicesIsolationMode\";\n return DeviceIsolationModeKind;\n}({});\n\n/**\n * A type of {@link DeviceIsolationMode}.\n *\n * Message encryption keys are shared with all devices in the room, except in case of\n * verified user problems (see {@link errorOnVerifiedUserProblems}).\n *\n * Events from all senders are always decrypted (and should be decorated with message shields in case\n * of authenticity warnings, see {@link EventEncryptionInfo}).\n *\n * `AllDevicesIsolationMode` is used in the legacy, non-'exclude insecure devices' mode in Element Web. It is not\n * recommended (see {@link https://github.com/matrix-org/matrix-spec-proposals/pull/4153 | MSC4153}).\n */\nexport class AllDevicesIsolationMode {\n /**\n *\n * @param errorOnVerifiedUserProblems - Behavior when sharing keys to remote devices.\n *\n * If set to `true`, sharing keys will fail (i.e. message sending will fail) with an error if:\n * - The user was previously verified but is not anymore, or:\n * - A verified user has some unverified devices (not cross-signed).\n *\n * If `false`, the keys will be distributed as usual. In this case, the client UX should display\n * warnings to inform the user about problematic devices/users, and stop them hitting this case.\n */\n constructor(errorOnVerifiedUserProblems) {\n this.errorOnVerifiedUserProblems = errorOnVerifiedUserProblems;\n _defineProperty(this, \"kind\", DeviceIsolationModeKind.AllDevicesIsolationMode);\n }\n}\n\n/**\n * A type of {@link DeviceIsolationMode}.\n *\n * Message encryption keys are only shared with devices that have been cross-signed by their owner.\n * Encryption will throw an error if a verified user replaces their identity.\n *\n * Events are decrypted only if they come from a cross-signed device. Other events will result in a decryption\n * failure. (To access the failure reason, see {@link MatrixEvent.decryptionFailureReason}.)\n *\n * `OnlySignedDevicesIsolationMode` corresponds to the 'Exclude insecure devices' mode in Element Web, which is\n * recommended by {@link https://github.com/matrix-org/matrix-spec-proposals/pull/4153 | MSC4153}.\n */\nexport class OnlySignedDevicesIsolationMode {\n constructor() {\n _defineProperty(this, \"kind\", DeviceIsolationModeKind.OnlySignedDevicesIsolationMode);\n }\n}\n\n/**\n * DeviceIsolationMode represents the mode of device isolation used when encrypting or decrypting messages.\n * It can be one of two types: {@link AllDevicesIsolationMode} or {@link OnlySignedDevicesIsolationMode}.\n *\n * Only supported by rust Crypto.\n */\n\n/**\n * Options object for `CryptoApi.bootstrapCrossSigning`.\n */\n\n/**\n * Represents the ways in which we trust a user\n */\nexport class UserVerificationStatus {\n /** @internal */\n constructor(crossSigningVerified, crossSigningVerifiedBefore, known) {\n var needsUserApproval = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n this.crossSigningVerified = crossSigningVerified;\n this.crossSigningVerifiedBefore = crossSigningVerifiedBefore;\n /**\n * Indicates if we have saved a known identity for this user. Typically, this means that we share a\n * room with them (or have done in the past).\n *\n * If this is `false`, then the other flags ({@link isCrossSigningVerified}, {@link wasCrossSigningVerified},\n * {@link needsUserApproval}) will also be `false`. This means that we haven't seen this user before.\n *\n * If this is `true`, then there are further possibilities:\n *\n * - If {@link isCrossSigningVerified} returns `true`, then we have cryptographically verified the current\n * identity of this user: that is the highest form of trust we have.\n *\n * - If {@link needsUserApproval} is `true`, that means that the user has changed their identity.\n *\n * - Otherwise, the user is \"TOFU trusted\": we have a record of their identity, and, typically, will share\n * encrypted content with them as long as they retain that identity.\n */\n _defineProperty(this, \"known\", void 0);\n /**\n * Indicates if the identity has changed in a way that needs user approval.\n *\n * This happens if the identity has changed since we first saw it, *unless* the new identity has also been verified\n * by our user (eg via an interactive verification).\n *\n * To rectify this, either:\n *\n * * Conduct a verification of the new identity via {@link CryptoApi.requestVerificationDM}.\n * * Pin the new identity, via {@link CryptoApi.pinCurrentUserIdentity}.\n *\n * @returns true if the identity has changed in a way that needs user approval.\n */\n _defineProperty(this, \"needsUserApproval\", void 0);\n this.known = known;\n this.needsUserApproval = needsUserApproval;\n }\n\n /**\n * @returns true if this user is verified via any means\n */\n isVerified() {\n return this.isCrossSigningVerified();\n }\n\n /**\n * @returns true if this user is verified via cross signing\n */\n isCrossSigningVerified() {\n return this.crossSigningVerified;\n }\n\n /**\n * @returns true if we ever verified this user before (at least for\n * the history of verifications observed by this device).\n */\n wasCrossSigningVerified() {\n return this.crossSigningVerifiedBefore;\n }\n\n /**\n * @returns true if this user's key is trusted on first use\n *\n * @deprecated No longer supported, with the Rust crypto stack.\n */\n isTofu() {\n return false;\n }\n}\nexport class DeviceVerificationStatus {\n constructor(opts) {\n var _opts$signedByOwner, _opts$crossSigningVer, _opts$tofu, _opts$localVerified, _opts$trustCrossSigne;\n /**\n * True if this device has been signed by its owner (and that signature verified).\n *\n * This doesn't necessarily mean that we have verified the device, since we may not have verified the\n * owner's cross-signing key.\n */\n _defineProperty(this, \"signedByOwner\", void 0);\n /**\n * True if this device has been verified via cross signing.\n *\n * This does *not* take into account `trustCrossSignedDevices`.\n */\n _defineProperty(this, \"crossSigningVerified\", void 0);\n /**\n * TODO: tofu magic wtf does this do?\n */\n _defineProperty(this, \"tofu\", void 0);\n /**\n * True if the device has been marked as locally verified.\n */\n _defineProperty(this, \"localVerified\", void 0);\n /**\n * True if the client has been configured to trust cross-signed devices via {@link CryptoApi#setTrustCrossSignedDevices}.\n */\n _defineProperty(this, \"trustCrossSignedDevices\", void 0);\n this.signedByOwner = (_opts$signedByOwner = opts.signedByOwner) !== null && _opts$signedByOwner !== void 0 ? _opts$signedByOwner : false;\n this.crossSigningVerified = (_opts$crossSigningVer = opts.crossSigningVerified) !== null && _opts$crossSigningVer !== void 0 ? _opts$crossSigningVer : false;\n this.tofu = (_opts$tofu = opts.tofu) !== null && _opts$tofu !== void 0 ? _opts$tofu : false;\n this.localVerified = (_opts$localVerified = opts.localVerified) !== null && _opts$localVerified !== void 0 ? _opts$localVerified : false;\n this.trustCrossSignedDevices = (_opts$trustCrossSigne = opts.trustCrossSignedDevices) !== null && _opts$trustCrossSigne !== void 0 ? _opts$trustCrossSigne : false;\n }\n\n /**\n * Check if we should consider this device \"verified\".\n *\n * A device is \"verified\" if either:\n * * it has been manually marked as such via {@link CryptoApi.setDeviceVerified}.\n * * it has been cross-signed with a verified signing key, **and** the client has been configured to trust\n * cross-signed devices via {@link CryptoApi.setTrustCrossSignedDevices}.\n *\n * @returns true if this device is verified via any means.\n */\n isVerified() {\n return this.localVerified || this.trustCrossSignedDevices && this.crossSigningVerified;\n }\n}\n\n/**\n * Enum representing the different stages of importing room keys.\n *\n * This is the type of the `stage` property of {@link ImportRoomKeyProgressData}.\n */\nexport var ImportRoomKeyStage = /*#__PURE__*/function (ImportRoomKeyStage) {\n /**\n * The stage where room keys are being fetched.\n *\n * @see {@link ImportRoomKeyFetchProgress}.\n */\n ImportRoomKeyStage[\"Fetch\"] = \"fetch\";\n /**\n * The stage where room keys are being loaded.\n *\n * @see {@link ImportRoomKeyLoadProgress}.\n */\n ImportRoomKeyStage[\"LoadKeys\"] = \"load_keys\";\n return ImportRoomKeyStage;\n}({});\n\n/**\n * Type representing the progress during the 'fetch' stage of the room key import process.\n *\n * @see {@link ImportRoomKeyProgressData}.\n */\n\n/**\n * Type representing the progress during the 'load_keys' stage of the room key import process.\n *\n * @see {@link ImportRoomKeyProgressData}.\n */\n\n/**\n * Room key import progress report.\n * Used when calling {@link CryptoApi#importRoomKeys},\n * {@link CryptoApi#importRoomKeysAsJson} or {@link CryptoApi#restoreKeyBackup} as the parameter of\n * the progressCallback. Used to display feedback.\n */\n\n/**\n * Options object for {@link CryptoApi#importRoomKeys} and\n * {@link CryptoApi#importRoomKeysAsJson}.\n */\n\n/**\n * The result of a call to {@link CryptoApi.getCrossSigningStatus}.\n */\n\n/**\n * Crypto callbacks provided by the application\n */\n\n/**\n * The result of a call to {@link CryptoApi.getSecretStorageStatus}.\n */\n\n/**\n * Parameter of {@link CryptoApi#bootstrapSecretStorage}\n */\n\n/** Types of cross-signing key */\nexport var CrossSigningKey = /*#__PURE__*/function (CrossSigningKey) {\n CrossSigningKey[\"Master\"] = \"master\";\n CrossSigningKey[\"SelfSigning\"] = \"self_signing\";\n CrossSigningKey[\"UserSigning\"] = \"user_signing\";\n return CrossSigningKey;\n}({});\n\n/**\n * Information on one of the cross-signing keys.\n * @see https://spec.matrix.org/v1.7/client-server-api/#post_matrixclientv3keysdevice_signingupload\n */\n\n/**\n * Recovery key created by {@link CryptoApi#createRecoveryKeyFromPassphrase} or {@link CreateSecretStorageOpts#createSecretStorageKey}.\n */\n\n/**\n * Result type of {@link CryptoApi#getEncryptionInfoForEvent}.\n */\n\n/**\n * Types of shield to be shown for {@link EventEncryptionInfo#shieldColour}.\n */\nexport var EventShieldColour = /*#__PURE__*/function (EventShieldColour) {\n EventShieldColour[EventShieldColour[\"NONE\"] = 0] = \"NONE\";\n EventShieldColour[EventShieldColour[\"GREY\"] = 1] = \"GREY\";\n EventShieldColour[EventShieldColour[\"RED\"] = 2] = \"RED\";\n return EventShieldColour;\n}({});\n\n/**\n * Reason codes for {@link EventEncryptionInfo#shieldReason}.\n */\nexport var EventShieldReason = /*#__PURE__*/function (EventShieldReason) {\n /** An unknown reason from the crypto library (if you see this, it is a bug in matrix-js-sdk). */\n EventShieldReason[EventShieldReason[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n /** \"Encrypted by an unverified user.\" */\n EventShieldReason[EventShieldReason[\"UNVERIFIED_IDENTITY\"] = 1] = \"UNVERIFIED_IDENTITY\";\n /** \"Encrypted by a device not verified by its owner.\" */\n EventShieldReason[EventShieldReason[\"UNSIGNED_DEVICE\"] = 2] = \"UNSIGNED_DEVICE\";\n /** \"Encrypted by an unknown or deleted device.\" */\n EventShieldReason[EventShieldReason[\"UNKNOWN_DEVICE\"] = 3] = \"UNKNOWN_DEVICE\";\n /**\n * \"The authenticity of this encrypted message can't be guaranteed on this device.\"\n *\n * ie: the key has been forwarded, or retrieved from an insecure backup.\n */\n EventShieldReason[EventShieldReason[\"AUTHENTICITY_NOT_GUARANTEED\"] = 4] = \"AUTHENTICITY_NOT_GUARANTEED\";\n /**\n * The (deprecated) sender_key field in the event does not match the Ed25519 key of the device that sent us the\n * decryption keys.\n *\n * @deprecated The sender_key field is not checked by matrix-sdk-crypto, and this value is therefore unused since\n * the migration to matrix-sdk-crypto in v37.0.0.\n */\n EventShieldReason[EventShieldReason[\"MISMATCHED_SENDER_KEY\"] = 5] = \"MISMATCHED_SENDER_KEY\";\n /**\n * The event was sent unencrypted in an encrypted room.\n *\n * @deprecated This has never been used. The fact it is here was due to a misunderstanding of the behaviour of\n * `matrix-sdk-crypto`.\n */\n EventShieldReason[EventShieldReason[\"SENT_IN_CLEAR\"] = 6] = \"SENT_IN_CLEAR\";\n /**\n * The sender was previously verified but changed their identity.\n */\n EventShieldReason[EventShieldReason[\"VERIFICATION_VIOLATION\"] = 7] = \"VERIFICATION_VIOLATION\";\n /**\n * The `sender` field on the event does not match the owner of the device\n * that established the Megolm session.\n */\n EventShieldReason[EventShieldReason[\"MISMATCHED_SENDER\"] = 8] = \"MISMATCHED_SENDER\";\n return EventShieldReason;\n}({});\n\n/** The result of a call to {@link CryptoApi.getOwnDeviceKeys} */\n\n/**\n * Information about the encryption of a successfully decrypted to-device message.\n */\n\n/**\n * An error thrown by loadSessionBackupPrivateKeyFromSecretStorage indicating\n * that the decryption key found in secret storage does not match the public key\n * of the latest backup.\n */\nexport class DecryptionKeyDoesNotMatchError extends Error {\n constructor(message) {\n super(message);\n this.name = \"DecryptionKeyDoesNotMatchError\";\n }\n}\nexport * from \"./verification.js\";\nexport * from \"./recovery-key.js\";\nexport * from \"./key-passphrase.js\";\nexport * from \"./CryptoEvent.js\";\n//# sourceMappingURL=index.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\n * Copyright 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// salt for HKDF, with 8 bytes of zeros\nvar zeroSalt = new Uint8Array(8);\n\n/**\n * Derive AES and HMAC keys from a master key.\n *\n * This is used for deriving secret storage keys: see https://spec.matrix.org/v1.11/client-server-api/#msecret_storagev1aes-hmac-sha2 (step 1).\n *\n * @param key\n * @param name\n */\nexport function deriveKeys(_x, _x2) {\n return _deriveKeys.apply(this, arguments);\n}\nfunction _deriveKeys() {\n _deriveKeys = _asyncToGenerator(function* (key, name) {\n var hkdfkey = yield globalThis.crypto.subtle.importKey(\"raw\", key, {\n name: \"HKDF\"\n }, false, [\"deriveBits\"]);\n var keybits = yield globalThis.crypto.subtle.deriveBits({\n name: \"HKDF\",\n salt: zeroSalt,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/879\n info: new TextEncoder().encode(name),\n hash: \"SHA-256\"\n }, hkdfkey, 512);\n var aesKey = keybits.slice(0, 32);\n var hmacKey = keybits.slice(32);\n var aesProm = globalThis.crypto.subtle.importKey(\"raw\", aesKey, {\n name: \"AES-CTR\"\n }, false, [\"encrypt\", \"decrypt\"]);\n var hmacProm = globalThis.crypto.subtle.importKey(\"raw\", hmacKey, {\n name: \"HMAC\",\n hash: {\n name: \"SHA-256\"\n }\n }, false, [\"sign\", \"verify\"]);\n return Promise.all([aesProm, hmacProm]);\n });\n return _deriveKeys.apply(this, arguments);\n}\n//# sourceMappingURL=deriveKeys.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\n * Copyright 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { decodeBase64, encodeBase64 } from \"../base64.js\";\nimport { deriveKeys } from \"./internal/deriveKeys.js\";\n/**\n * Encrypt a string as a secret storage item, using AES-CTR.\n *\n * @param data - the plaintext to encrypt\n * @param key - the encryption key to use as an input to the HKDF function which is used to derive the AES key for\n * encryption. Obviously, the same key must be provided when decrypting.\n * @param name - the name of the secret. Used as an input to the HKDF operation which is used to derive the AES key,\n * so again the same value must be provided when decrypting.\n * @param ivStr - the base64-encoded initialization vector to use. If not supplied, a random one will be generated.\n *\n * @returns The encrypted result, including the ciphertext itself, the initialization vector (as supplied in `ivStr`,\n * or generated), and an HMAC on the ciphertext — all base64-encoded.\n */\nexport default function encryptAESSecretStorageItem(_x, _x2, _x3, _x4) {\n return _encryptAESSecretStorageItem.apply(this, arguments);\n}\nfunction _encryptAESSecretStorageItem() {\n _encryptAESSecretStorageItem = _asyncToGenerator(function* (data, key, name, ivStr) {\n var iv;\n if (ivStr) {\n iv = decodeBase64(ivStr);\n } else {\n iv = new Uint8Array(16);\n globalThis.crypto.getRandomValues(iv);\n\n // clear bit 63 of the IV to stop us hitting the 64-bit counter boundary\n // (which would mean we wouldn't be able to decrypt on Android). The loss\n // of a single bit of iv is a price we have to pay.\n iv[8] &= 0x7f;\n }\n var _yield$deriveKeys = yield deriveKeys(key, name),\n _yield$deriveKeys2 = _slicedToArray(_yield$deriveKeys, 2),\n aesKey = _yield$deriveKeys2[0],\n hmacKey = _yield$deriveKeys2[1];\n var encodedData = new TextEncoder().encode(data);\n var ciphertext = yield globalThis.crypto.subtle.encrypt({\n name: \"AES-CTR\",\n counter: iv,\n length: 64\n }, aesKey, encodedData);\n var hmac = yield globalThis.crypto.subtle.sign({\n name: \"HMAC\"\n }, hmacKey, ciphertext);\n return {\n iv: encodeBase64(iv),\n ciphertext: encodeBase64(new Uint8Array(ciphertext)),\n mac: encodeBase64(new Uint8Array(hmac))\n };\n });\n return _encryptAESSecretStorageItem.apply(this, arguments);\n}\n//# sourceMappingURL=encryptAESSecretStorageItem.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\n * Copyright 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { decodeBase64 } from \"../base64.js\";\nimport { deriveKeys } from \"./internal/deriveKeys.js\";\n/**\n * Decrypt an AES-encrypted Secret Storage item.\n *\n * @param data - the encrypted data, returned by {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.\n * @param key - the encryption key to use as an input to the HKDF function which is used to derive the AES key. Must\n * be the same as provided to {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.\n * @param name - the name of the secret. Also used as an input to the HKDF operation which is used to derive the AES\n * key, so again must be the same as provided to {@link utils/encryptAESSecretStorageItem.default | encryptAESSecretStorageItem}.\n */\nexport default function decryptAESSecretStorageItem(_x, _x2, _x3) {\n return _decryptAESSecretStorageItem.apply(this, arguments);\n}\nfunction _decryptAESSecretStorageItem() {\n _decryptAESSecretStorageItem = _asyncToGenerator(function* (data, key, name) {\n var _yield$deriveKeys = yield deriveKeys(key, name),\n _yield$deriveKeys2 = _slicedToArray(_yield$deriveKeys, 2),\n aesKey = _yield$deriveKeys2[0],\n hmacKey = _yield$deriveKeys2[1];\n var ciphertext = decodeBase64(data.ciphertext);\n if (!(yield globalThis.crypto.subtle.verify({\n name: \"HMAC\"\n }, hmacKey, decodeBase64(data.mac), ciphertext))) {\n throw new Error(\"Error decrypting secret \".concat(name, \": bad MAC\"));\n }\n var plaintext = yield globalThis.crypto.subtle.decrypt({\n name: \"AES-CTR\",\n counter: decodeBase64(data.iv),\n length: 64\n }, aesKey, ciphertext);\n return new TextDecoder().decode(new Uint8Array(plaintext));\n });\n return _decryptAESSecretStorageItem.apply(this, arguments);\n}\n//# sourceMappingURL=decryptAESSecretStorageItem.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2021-2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Implementation of server-side secret storage\n *\n * @see https://spec.matrix.org/v1.6/client-server-api/#storage\n */\n\nimport { ClientEvent } from \"./client.js\";\nimport { secureRandomString } from \"./randomstring.js\";\nimport { logger } from \"./logger.js\";\nimport encryptAESSecretStorageItem from \"./utils/encryptAESSecretStorageItem.js\";\nimport decryptAESSecretStorageItem from \"./utils/decryptAESSecretStorageItem.js\";\nexport var SECRET_STORAGE_ALGORITHM_V1_AES = \"m.secret_storage.v1.aes-hmac-sha2\";\n\n/**\n * Common base interface for Secret Storage Keys.\n *\n * The common properties for all encryption keys used in server-side secret storage.\n *\n * @see https://spec.matrix.org/v1.6/client-server-api/#key-storage\n */\n\n/**\n * Properties for a SSSS key using the `m.secret_storage.v1.aes-hmac-sha2` algorithm.\n *\n * Corresponds to `AesHmacSha2KeyDescription` in the specification.\n *\n * @see https://spec.matrix.org/v1.6/client-server-api/#msecret_storagev1aes-hmac-sha2\n */\n\n/**\n * Union type for secret storage keys.\n *\n * For now, this is only {@link SecretStorageKeyDescriptionAesV1}, but other interfaces may be added in future.\n */\n\n/**\n * Information on how to generate the key from a passphrase.\n *\n * @see https://spec.matrix.org/v1.6/client-server-api/#deriving-keys-from-passphrases\n */\n\n/**\n * Options for {@link ServerSideSecretStorageImpl#addKey}.\n */\n\n/**\n * Return type for {@link ServerSideSecretStorageImpl#getKey}.\n */\n\n/**\n * Return type for {@link ServerSideSecretStorageImpl#addKey}.\n */\n\n/** Interface for managing account data on the server.\n *\n * A subset of {@link MatrixClient}.\n */\n\n/**\n * Application callbacks for use with {@link SecretStorage.ServerSideSecretStorageImpl}\n */\n\n/**\n * Account Data event types which can store secret-storage-encrypted information.\n */\n\n/**\n * Account Data event content type for storing secret-storage-encrypted information.\n *\n * See https://spec.matrix.org/v1.13/client-server-api/#msecret_storagev1aes-hmac-sha2-1\n */\n\n/**\n * Interface provided by SecretStorage implementations\n *\n * Normally this will just be an {@link ServerSideSecretStorageImpl}, but for backwards\n * compatibility some methods allow other implementations.\n */\n\n/**\n * Implementation of Server-side secret storage.\n *\n * Secret *sharing* is *not* implemented here: this class is strictly about the storage component of\n * SSSS.\n *\n * @see https://spec.matrix.org/v1.6/client-server-api/#storage\n */\nexport class ServerSideSecretStorageImpl {\n /**\n * Construct a new `SecretStorage`.\n *\n * Normally, it is unnecessary to call this directly, since MatrixClient automatically constructs one.\n * However, it may be useful to construct a new `SecretStorage`, if custom `callbacks` are required, for example.\n *\n * @param accountDataAdapter - interface for fetching and setting account data on the server. Normally an instance\n * of {@link MatrixClient}.\n * @param callbacks - application level callbacks for retrieving secret keys\n */\n constructor(accountDataAdapter, callbacks) {\n this.accountDataAdapter = accountDataAdapter;\n this.callbacks = callbacks;\n }\n\n /**\n * Get the current default key ID for encrypting secrets.\n *\n * @returns The default key ID or null if no default key ID is set\n */\n getDefaultKeyId() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _defaultKey$key;\n var defaultKey = yield _this.accountDataAdapter.getAccountDataFromServer(\"m.secret_storage.default_key\");\n if (!defaultKey) return null;\n return (_defaultKey$key = defaultKey.key) !== null && _defaultKey$key !== void 0 ? _defaultKey$key : null;\n })();\n }\n\n /**\n * Implementation of {@link ServerSideSecretStorage#setDefaultKeyId}.\n */\n setDefaultKeyId(keyId) {\n return new Promise((resolve, reject) => {\n var listener = ev => {\n if (ev.getType() !== \"m.secret_storage.default_key\") {\n // Different account data item\n return;\n }\n\n // If keyId === null, the content should be an empty object.\n // Otherwise, the `key` in the content object should match keyId.\n var content = ev.getContent();\n var isSameKey = keyId === null ? Object.keys(content).length === 0 : content.key === keyId;\n if (isSameKey) {\n this.accountDataAdapter.removeListener(ClientEvent.AccountData, listener);\n resolve();\n }\n };\n this.accountDataAdapter.on(ClientEvent.AccountData, listener);\n\n // The spec [1] says that the value of the account data entry should be an object with a `key` property.\n // It doesn't specify how to delete the default key; we do it by setting the account data to an empty object.\n //\n // [1]: https://spec.matrix.org/v1.13/client-server-api/#key-storage\n var newValue = keyId === null ? {} : {\n key: keyId\n };\n this.accountDataAdapter.setAccountData(\"m.secret_storage.default_key\", newValue).catch(e => {\n this.accountDataAdapter.removeListener(ClientEvent.AccountData, listener);\n reject(e);\n });\n });\n }\n\n /**\n * Add a key for encrypting secrets.\n *\n * @param algorithm - the algorithm used by the key.\n * @param opts - the options for the algorithm. The properties used\n * depend on the algorithm given.\n * @param keyId - the ID of the key. If not given, a random\n * ID will be generated.\n *\n * @returns An object with:\n * keyId: the ID of the key\n * keyInfo: details about the key (iv, mac, passphrase)\n */\n addKey(algorithm, opts, keyId) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (algorithm !== SECRET_STORAGE_ALGORITHM_V1_AES) {\n throw new Error(\"Unknown key algorithm \".concat(algorithm));\n }\n var keyInfo = {\n algorithm\n };\n if (opts.name) {\n keyInfo.name = opts.name;\n }\n if (opts.passphrase) {\n keyInfo.passphrase = opts.passphrase;\n }\n var _yield$calculateKeyCh = yield calculateKeyCheck(opts.key),\n iv = _yield$calculateKeyCh.iv,\n mac = _yield$calculateKeyCh.mac;\n keyInfo.iv = iv;\n keyInfo.mac = mac;\n\n // Create a unique key id. XXX: this is racey.\n if (!keyId) {\n do {\n keyId = secureRandomString(32);\n } while (yield _this2.accountDataAdapter.getAccountDataFromServer(\"m.secret_storage.key.\".concat(keyId)));\n }\n yield _this2.accountDataAdapter.setAccountData(\"m.secret_storage.key.\".concat(keyId), keyInfo);\n return {\n keyId,\n keyInfo\n };\n })();\n }\n\n /**\n * Get the key information for a given ID.\n *\n * @param keyId - The ID of the key to check\n * for. Defaults to the default key ID if not provided.\n * @returns If the key was found, the return value is an array of\n * the form [keyId, keyInfo]. Otherwise, null is returned.\n * XXX: why is this an array when addKey returns an object?\n */\n getKey(keyId) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (!keyId) {\n keyId = yield _this3.getDefaultKeyId();\n }\n if (!keyId) {\n return null;\n }\n var keyInfo = yield _this3.accountDataAdapter.getAccountDataFromServer(\"m.secret_storage.key.\".concat(keyId));\n return keyInfo ? [keyId, keyInfo] : null;\n })();\n }\n\n /**\n * Check whether we have a key with a given ID.\n *\n * @param keyId - The ID of the key to check\n * for. Defaults to the default key ID if not provided.\n * @returns Whether we have the key.\n */\n hasKey(keyId) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var key = yield _this4.getKey(keyId);\n return Boolean(key);\n })();\n }\n\n /**\n * Check whether a key matches what we expect based on the key info\n *\n * @param key - the key to check\n * @param info - the key info\n *\n * @returns whether or not the key matches\n */\n checkKey(key, info) {\n return _asyncToGenerator(function* () {\n if (info.algorithm === SECRET_STORAGE_ALGORITHM_V1_AES) {\n if (info.mac) {\n var _yield$calculateKeyCh2 = yield calculateKeyCheck(key, info.iv),\n mac = _yield$calculateKeyCh2.mac;\n return trimTrailingEquals(info.mac) === trimTrailingEquals(mac);\n } else {\n // if we have no information, we have to assume the key is right\n return true;\n }\n } else {\n throw new Error(\"Unknown algorithm\");\n }\n })();\n }\n\n /**\n * Implementation of {@link ServerSideSecretStorage#store}.\n */\n store(name, secret, keys) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n if (secret === null) {\n // remove secret\n yield _this5.accountDataAdapter.setAccountData(name, {});\n return;\n }\n var encrypted = {};\n if (!keys) {\n var defaultKeyId = yield _this5.getDefaultKeyId();\n if (!defaultKeyId) {\n throw new Error(\"No keys specified and no default key present\");\n }\n keys = [defaultKeyId];\n }\n if (keys.length === 0) {\n throw new Error(\"Zero keys given to encrypt with!\");\n }\n for (var _keyId of keys) {\n // get key information from key storage\n var _keyInfo = yield _this5.accountDataAdapter.getAccountDataFromServer(\"m.secret_storage.key.\".concat(_keyId));\n if (!_keyInfo) {\n throw new Error(\"Unknown key: \" + _keyId);\n }\n\n // encrypt secret, based on the algorithm\n if (_keyInfo.algorithm === SECRET_STORAGE_ALGORITHM_V1_AES) {\n var _keys = {\n [_keyId]: _keyInfo\n };\n var _yield$_this5$getSecr = yield _this5.getSecretStorageKey(_keys, name),\n _yield$_this5$getSecr2 = _slicedToArray(_yield$_this5$getSecr, 2),\n encryption = _yield$_this5$getSecr2[1];\n encrypted[_keyId] = yield encryption.encrypt(secret);\n } else {\n logger.warn(\"unknown algorithm for secret storage key \" + _keyId + \": \" + _keyInfo.algorithm);\n // do nothing if we don't understand the encryption algorithm\n }\n }\n\n // save encrypted secret\n yield _this5.accountDataAdapter.setAccountData(name, {\n encrypted\n });\n })();\n }\n\n /**\n * Get a secret from storage, and decrypt it.\n *\n * {@link SecretStorageCallbacks#getSecretStorageKey} will be called to obtain a secret storage\n * key to decrypt the secret.\n *\n * @param name - the name of the secret - i.e., the \"event type\" stored in the account data\n *\n * @returns the decrypted contents of the secret, or \"undefined\" if `name` is not found in\n * the user's account data.\n */\n get(name) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var secretInfo = yield _this6.accountDataAdapter.getAccountDataFromServer(name);\n if (!secretInfo) {\n return;\n }\n if (!secretInfo.encrypted) {\n throw new Error(\"Content is not encrypted!\");\n }\n\n // get possible keys to decrypt\n var keys = {};\n for (var _keyId2 of Object.keys(secretInfo.encrypted)) {\n // get key information from key storage\n var _keyInfo2 = yield _this6.accountDataAdapter.getAccountDataFromServer(\"m.secret_storage.key.\".concat(_keyId2));\n var _encInfo = secretInfo.encrypted[_keyId2];\n // only use keys we understand the encryption algorithm of\n if ((_keyInfo2 === null || _keyInfo2 === void 0 ? void 0 : _keyInfo2.algorithm) === SECRET_STORAGE_ALGORITHM_V1_AES) {\n if (_encInfo.iv && _encInfo.ciphertext && _encInfo.mac) {\n keys[_keyId2] = _keyInfo2;\n }\n }\n }\n if (Object.keys(keys).length === 0) {\n throw new Error(\"Could not decrypt \".concat(name, \" because none of \") + \"the keys it is encrypted with are for a supported algorithm\");\n }\n\n // fetch private key from app\n var _yield$_this6$getSecr = yield _this6.getSecretStorageKey(keys, name),\n _yield$_this6$getSecr2 = _slicedToArray(_yield$_this6$getSecr, 2),\n keyId = _yield$_this6$getSecr2[0],\n decryption = _yield$_this6$getSecr2[1];\n var encInfo = secretInfo.encrypted[keyId];\n return decryption.decrypt(encInfo);\n })();\n }\n\n /**\n * Check if a secret is stored on the server.\n *\n * @param name - the name of the secret\n *\n * @returns map of key name to key info the secret is encrypted\n * with, or null if it is not present or not encrypted with a trusted\n * key\n */\n isStored(name) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n // check if secret exists\n var secretInfo = yield _this7.accountDataAdapter.getAccountDataFromServer(name);\n if (!(secretInfo !== null && secretInfo !== void 0 && secretInfo.encrypted)) return null;\n var ret = {};\n\n // filter secret encryption keys with supported algorithm\n for (var _keyId3 of Object.keys(secretInfo.encrypted)) {\n // get key information from key storage\n var _keyInfo3 = yield _this7.accountDataAdapter.getAccountDataFromServer(\"m.secret_storage.key.\".concat(_keyId3));\n if (!_keyInfo3) continue;\n var encInfo = secretInfo.encrypted[_keyId3];\n\n // only use keys we understand the encryption algorithm of\n if (_keyInfo3.algorithm === SECRET_STORAGE_ALGORITHM_V1_AES) {\n if (encInfo.iv && encInfo.ciphertext && encInfo.mac) {\n ret[_keyId3] = _keyInfo3;\n }\n }\n }\n return Object.keys(ret).length ? ret : null;\n })();\n }\n getSecretStorageKey(keys, name) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (!_this8.callbacks.getSecretStorageKey) {\n throw new Error(\"No getSecretStorageKey callback supplied\");\n }\n var returned = yield _this8.callbacks.getSecretStorageKey({\n keys\n }, name);\n if (!returned) {\n throw new Error(\"getSecretStorageKey callback returned falsey\");\n }\n if (returned.length < 2) {\n throw new Error(\"getSecretStorageKey callback returned invalid data\");\n }\n var _returned = _slicedToArray(returned, 2),\n keyId = _returned[0],\n privateKey = _returned[1];\n if (!keys[keyId]) {\n throw new Error(\"App returned unknown key from getSecretStorageKey!\");\n }\n if (keys[keyId].algorithm === SECRET_STORAGE_ALGORITHM_V1_AES) {\n var decryption = {\n encrypt: function encrypt(secret) {\n return encryptAESSecretStorageItem(secret, privateKey, name);\n },\n decrypt: function decrypt(encInfo) {\n return decryptAESSecretStorageItem(encInfo, privateKey, name);\n }\n };\n return [keyId, decryption];\n } else {\n throw new Error(\"Unknown key type: \" + keys[keyId].algorithm);\n }\n })();\n }\n}\n\n/** trim trailing instances of '=' from a string\n *\n * @internal\n *\n * @param input - input string\n */\nexport function trimTrailingEquals(input) {\n // according to Sonar and CodeQL, a regex such as /=+$/ is superlinear.\n // Not sure I believe it, but it's easy enough to work around.\n\n // find the number of characters before the trailing =\n var i = input.length;\n while (i >= 1 && input.charCodeAt(i - 1) == 0x3d) i--;\n\n // trim to the calculated length\n if (i < input.length) {\n return input.substring(0, i);\n } else {\n return input;\n }\n}\n\n// string of zeroes, for calculating the key check\nvar ZERO_STR = \"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Calculate the MAC for checking the key.\n * See https://spec.matrix.org/v1.11/client-server-api/#msecret_storagev1aes-hmac-sha2, steps 3 and 4.\n *\n * @param key - the key to use\n * @param iv - The initialization vector as a base64-encoded string.\n * If omitted, a random initialization vector will be created.\n * @returns An object that contains, `mac` and `iv` properties.\n */\nexport function calculateKeyCheck(key, iv) {\n return encryptAESSecretStorageItem(ZERO_STR, key, \"\", iv);\n}\n//# sourceMappingURL=secret-storage.js.map","/**\n * The string used for the keys in the the encryption key map.\n * `@bob:examle.org:DEVICEID(UUIDRANDOM_MEMBERID_RANDOMUUID)`\n */\nexport function getEncryptionKeyMapKey(membership) {\n return \"\".concat(membership.userId, \":\").concat(membership.deviceId, \"(\").concat(membership.memberId, \")\");\n}\n\n/**\n * This interface is for testing and for making it possible to interchange the encryption manager.\n * @internal\n */\n//# sourceMappingURL=EncryptionManager.js.map","import _toArray from \"@babel/runtime/helpers/toArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/*\nCopyright 2025-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { getEncryptionKeyMapKey } from \"./EncryptionManager.js\";\n/**\n * Detects when a key for a given index is outdated.\n */\nexport class OutdatedKeyFilter {\n constructor() {\n // Map of participantId -> keyIndex -> timestamp\n _defineProperty(this, \"tsBuffer\", new Map());\n }\n\n /**\n * Check if there is a recent key with the same keyId (index) and then use the creationTS to decide what to\n * do with the key. If the key received is older than the one already in the buffer, it is ignored.\n * @param participantId\n * @param item\n */\n isOutdated(membership, item) {\n var _this$tsBuffer$get;\n var mapKey = getEncryptionKeyMapKey(membership);\n if (!this.tsBuffer.has(mapKey)) {\n this.tsBuffer.set(mapKey, new Map());\n }\n var latestTimestamp = (_this$tsBuffer$get = this.tsBuffer.get(mapKey)) === null || _this$tsBuffer$get === void 0 ? void 0 : _this$tsBuffer$get.get(item.keyIndex);\n if (latestTimestamp && latestTimestamp > item.creationTS) {\n // The existing key is more recent, ignore this one\n return true;\n }\n this.tsBuffer.get(mapKey).set(item.keyIndex, item.creationTS);\n return false;\n }\n}\n\n/**\n * Converts a slot ID into it's component application and ID portions.\n * @param slotId e.g. `m.call#call_id`\n * @throws If the format of `slotId` is invalid.\n */\nexport function slotIdToDescription(slotId) {\n var _slotId$split = slotId.split(\"#\"),\n _slotId$split2 = _toArray(_slotId$split),\n application = _slotId$split2[0],\n id = _slotId$split2[1],\n unexpectedAdditionalValues = _arrayLikeToArray(_slotId$split2).slice(2);\n if (unexpectedAdditionalValues.length) {\n throw Error(\"MatrixRTC Slot IDs *must* only contain two components seperated by one '#'. Additional '#' characters detected.\");\n }\n return {\n application,\n id\n };\n}\n\n/**\n * Converts a SlotDescription into it's slot ID format.\n */\nexport function computeSlotId(slotDescription) {\n return \"\".concat(slotDescription.application, \"#\").concat(slotDescription.id);\n}\n//# sourceMappingURL=utils.js.map","/*\nCopyright 2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Thrown when an event is not valid for use with MatrixRTC.\n */\nexport class MatrixRTCMembershipParseError extends AggregateError {\n constructor(type, errors) {\n super(errors, \"Does not match \".concat(type, \":\\n\").concat(errors.join(\"\\n\")));\n this.type = type;\n }\n}\n//# sourceMappingURL=common.js.map","/*\nCopyright 2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MatrixRTCMembershipParseError } from \"./common.js\";\n\n/**\n * (MatrixRTC) session membership data.\n * This represents the *OLD* form of MSC4143, which uses state events to store membership.\n * Represents the `session` in the memberships section of an m.call.member event as it is on the wire.\n **/\n\n/**\n * Validates that `data` matches the format expected by the legacy form of MSC4143.\n * @param data The event content.\n * @returns true if `data` is valid SessionMembershipData\n * @throws {MatrixRTCMembershipParseError} if the content is not valid\n */\nexport var checkSessionsMembershipData = data => {\n var _data$focus_active;\n var prefix = \" - \";\n var errors = [];\n if (typeof data.device_id !== \"string\") errors.push(prefix + \"device_id must be string\");\n if (typeof data.call_id !== \"string\") errors.push(prefix + \"call_id must be string\");\n if (typeof data.application !== \"string\") errors.push(prefix + \"application must be a string\");\n if (data.focus_active === undefined) {\n errors.push(prefix + \"focus_active has an invalid type\");\n }\n if (typeof ((_data$focus_active = data.focus_active) === null || _data$focus_active === void 0 ? void 0 : _data$focus_active.type) !== \"string\") {\n errors.push(prefix + \"focus_active.type must be a string\");\n }\n if (data.foci_preferred !== undefined && !(Array.isArray(data.foci_preferred) && data.foci_preferred.every(f => typeof f === \"object\" && f !== null && typeof f.type === \"string\"))) {\n errors.push(prefix + \"foci_preferred must be an array of transport objects\");\n }\n // optional parameters\n if (data.created_ts !== undefined && typeof data.created_ts !== \"number\") {\n errors.push(prefix + \"created_ts must be number\");\n }\n\n // application specific data (we first need to check if they exist)\n if (data.scope !== undefined && typeof data.scope !== \"string\") errors.push(prefix + \"scope must be string\");\n if (data[\"m.call.intent\"] !== undefined && typeof data[\"m.call.intent\"] !== \"string\") {\n errors.push(prefix + \"m.call.intent must be a string\");\n }\n if (errors.length) {\n throw new MatrixRTCMembershipParseError(\"SessionMembership\", errors);\n }\n return true;\n};\n//# sourceMappingURL=session.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Computes a SHA-256 hash of a string (after utf-8 encoding) and returns it as an ArrayBuffer.\n *\n * @param plaintext The string to hash\n * @returns An Uint8Array containing the SHA-256 hash of the input string\n * @throws If the subtle crypto API is not available, for example if the code is running\n * in a web page with an insecure context (eg. served over plain HTTP).\n */\nexport function sha256(_x) {\n return _sha.apply(this, arguments);\n}\nfunction _sha() {\n _sha = _asyncToGenerator(function* (plaintext) {\n if (!globalThis.crypto.subtle) {\n throw new Error(\"Crypto.subtle is not available: insecure context?\");\n }\n var utf8 = new TextEncoder().encode(plaintext);\n var digest = yield globalThis.crypto.subtle.digest(\"SHA-256\", utf8);\n return new Uint8Array(digest);\n });\n return _sha.apply(this, arguments);\n}\n//# sourceMappingURL=digest.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MXID_PATTERN } from \"../../models/room-member.js\";\nimport { MatrixRTCMembershipParseError } from \"./common.js\";\nimport { sha256 } from \"../../digest.js\";\nimport { encodeUnpaddedBase64 } from \"../../base64.js\";\nimport { slotIdToDescription } from \"../utils.js\";\n\n/**\n * Represents the current form of MSC4143, which uses sticky events to store membership.\n */\n\n/**\n * Validates that `data` matches the format expected by MSC4143.\n * @param data The event content.\n * @param sender The sender of the event.\n * @returns true if `data` is valid RtcMembershipData\n * @throws {MatrixRTCMembershipParseError} if the content is not valid\n */\nexport var checkRtcMembershipData = (data, sender) => {\n var _data$application, _data$sticky_key;\n var errors = [];\n var prefix = \" - \";\n var expectedSlotPrefix = \"\".concat(data === null || data === void 0 || (_data$application = data.application) === null || _data$application === void 0 ? void 0 : _data$application.type, \"#\");\n\n // required fields\n if (typeof data.slot_id !== \"string\") {\n errors.push(prefix + \"slot_id must be string\");\n } else if (!data.slot_id.startsWith(expectedSlotPrefix)) {\n errors.push(prefix + \"slot_id must start with \".concat(expectedSlotPrefix));\n } else {\n try {\n slotIdToDescription(data.slot_id);\n } catch (ex) {\n errors.push(prefix + \"slot_id was badly formed\".concat(ex instanceof Error ? \": \".concat(ex.message) : \"\"));\n }\n }\n if (typeof data.member !== \"object\" || data.member === null) {\n errors.push(prefix + \"member must be an object\");\n } else {\n if (typeof data.member.user_id !== \"string\") {\n errors.push(prefix + \"member.user_id must be string\");\n } else if (!MXID_PATTERN.test(data.member.user_id)) {\n errors.push(prefix + \"member.user_id must be a valid mxid\");\n }\n // This is not what the spec enforces but there currently are no rules what power levels are required to\n // send a m.rtc.member event for a other user. So we add this check for simplicity and to avoid possible attacks until there\n // is a proper definition when this is allowed.\n else if (data.member.user_id !== sender) {\n errors.push(prefix + \"member.user_id must match the sender\");\n }\n if (typeof data.member.device_id !== \"string\") {\n errors.push(prefix + \"member.device_id must be string\");\n }\n if (typeof data.member.id !== \"string\") errors.push(prefix + \"member.id must be string\");\n }\n if (typeof data.application !== \"object\" || data.application === null) {\n errors.push(prefix + \"application must be an object\");\n } else {\n if (typeof data.application.type !== \"string\") {\n errors.push(prefix + \"application.type must be a string\");\n } else {\n if (data.application.type.includes(\"#\")) errors.push(prefix + 'application.type must not include \"#\"');\n }\n }\n if (data.rtc_transports === undefined || !Array.isArray(data.rtc_transports)) {\n errors.push(prefix + \"rtc_transports must be an array\");\n } else {\n // validate that each transport has at least a string 'type'\n for (var t of data.rtc_transports) {\n if (typeof t !== \"object\" || t === null || typeof t.type !== \"string\") {\n errors.push(prefix + \"rtc_transports entries must be objects with a string type\");\n break;\n }\n }\n }\n if (data.versions === undefined || !Array.isArray(data.versions)) {\n errors.push(prefix + \"versions must be an array\");\n } else if (!data.versions.every(v => typeof v === \"string\")) {\n errors.push(prefix + \"versions must be an array of strings\");\n }\n\n // optional fields\n if (((_data$sticky_key = data.sticky_key) !== null && _data$sticky_key !== void 0 ? _data$sticky_key : data.msc4354_sticky_key) === undefined) {\n errors.push(prefix + \"sticky_key or msc4354_sticky_key must be a defined\");\n }\n if (data.sticky_key !== undefined && typeof data.sticky_key !== \"string\") {\n errors.push(prefix + \"sticky_key must be a string\");\n }\n if (data.msc4354_sticky_key !== undefined && typeof data.msc4354_sticky_key !== \"string\") {\n errors.push(prefix + \"msc4354_sticky_key must be a string\");\n }\n if (data.sticky_key !== undefined && data.msc4354_sticky_key !== undefined && data.sticky_key !== data.msc4354_sticky_key) {\n errors.push(prefix + \"sticky_key and msc4354_sticky_key must be equal if both are defined\");\n }\n if (data[\"m.relates_to\"] !== undefined) {\n var rel = data[\"m.relates_to\"];\n if (typeof rel !== \"object\" || rel === null) {\n errors.push(prefix + \"m.relates_to must be an object if provided\");\n } else {\n if (typeof rel.event_id !== \"string\") errors.push(prefix + \"m.relates_to.event_id must be a string\");\n if (rel.rel_type !== \"m.reference\") errors.push(prefix + \"m.relates_to.rel_type must be m.reference\");\n }\n }\n if (errors.length) {\n throw new MatrixRTCMembershipParseError(\"RtcMembership\", errors);\n }\n return true;\n};\nexport function computeRtcIdentityRaw(_x, _x2, _x3) {\n return _computeRtcIdentityRaw.apply(this, arguments);\n}\nfunction _computeRtcIdentityRaw() {\n _computeRtcIdentityRaw = _asyncToGenerator(function* (userId, deviceId, memberId) {\n // canonical JSON serialization (Matrix canonical JSON for arrays)\n var jsonStr = JSON.stringify([userId, deviceId, memberId]);\n var hashBuffer = yield sha256(jsonStr);\n var hashedString = encodeUnpaddedBase64(hashBuffer);\n return hashedString;\n });\n return _computeRtcIdentityRaw.apply(this, arguments);\n}\n//# sourceMappingURL=rtc.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { deepCompare } from \"../utils.js\";\nimport { logger } from \"../logger.js\";\nimport { computeSlotId, slotIdToDescription } from \"./utils.js\";\nimport { checkRtcMembershipData, computeRtcIdentityRaw, checkSessionsMembershipData, MatrixRTCMembershipParseError } from \"./membershipData/index.js\";\nimport { EventType } from \"../@types/event.js\";\n\n/**\n * The default duration in milliseconds that a membership is considered valid for.\n * Ordinarily the client responsible for the session will update the membership before it expires.\n * We use this duration as the fallback case where stale sessions are present for some reason.\n */\nexport var DEFAULT_EXPIRE_DURATION = 1000 * 60 * 60 * 4;\n\n/**\n * Describes the source event type that provided the membership data.\n */\nvar MembershipKind = /*#__PURE__*/function (MembershipKind) {\n /**\n * The modern MSC4143 format event.\n */\n MembershipKind[\"RTC\"] = \"rtc\";\n /**\n * The legacy call event type.\n */\n MembershipKind[\"Session\"] = \"session\";\n return MembershipKind;\n}(MembershipKind || {});\n// TODO: Rename to RtcMembership once we removed the legacy SessionMembership is removed, to avoid confusion.\nexport class CallMembership {\n /**\n * Parse the membershipdata from a call membership event.\n * @param matrixEvent The Matrix event to read.\n * @returns MembershipData in either MembershipKind.RTC or MembershipKind.Session format.\n * @throws If the content is neither format.\n */\n static membershipDataFromMatrixEvent(matrixEvent) {\n var sender = matrixEvent.getSender();\n var evType = matrixEvent.getType();\n var data = matrixEvent.getContent();\n if (sender === undefined) throw new Error(\"matrixEvent is missing sender field\");\n try {\n // Event types are strictly checked here.\n if (evType === EventType.RTCMembership && checkRtcMembershipData(data, sender)) {\n return {\n kind: MembershipKind.RTC,\n data\n };\n } else if (evType === EventType.GroupCallMemberPrefix && checkSessionsMembershipData(data)) {\n return {\n kind: MembershipKind.Session,\n data\n };\n } else {\n throw Error(\"'\".concat(evType, \" is not a known call membership type\"));\n }\n } catch (ex) {\n if (ex instanceof MatrixRTCMembershipParseError) {\n logger.debug(\"CallMembership.MatrixRTCMembershipParseError provided invalid data\", data);\n }\n throw ex;\n }\n }\n\n /**\n * Parse the contents of a MatrixEvent and create a CallMembership instance.\n * @param matrixEvent The Matrix event to read.\n */\n static parseFromEvent(matrixEvent) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var membershipData = _this.membershipDataFromMatrixEvent(matrixEvent);\n var rtcBackendIdentity = membershipData.kind === MembershipKind.RTC ? yield computeRtcIdentityRaw(membershipData.data.member.user_id, membershipData.data.member.device_id, membershipData.data.member.id) : \"\".concat(matrixEvent.getSender(), \":\").concat(membershipData.data.device_id);\n return new CallMembership(matrixEvent, membershipData, rtcBackendIdentity);\n })();\n }\n static equal(a, b) {\n return deepCompare(a === null || a === void 0 ? void 0 : a.membershipData, b === null || b === void 0 ? void 0 : b.membershipData);\n }\n /**\n * Use `parseFromEvent`.\n * Constructor should only be used by tests.\n * @private\n * @param matrixEvent\n * @param membershipData\n * @param rtcBackendIdentity\n */\n constructor(/** The Matrix event that this membership is based on */\n matrixEvent, membershipData, rtcBackendIdentity) {\n this.matrixEvent = matrixEvent;\n this.membershipData = membershipData;\n this.rtcBackendIdentity = rtcBackendIdentity;\n _defineProperty(this, \"logger\", void 0);\n /** The parsed data from the Matrix event.\n * To access checked eventId and sender from the matrixEvent.\n * Class construction will fail if these values cannot get obtained. */\n _defineProperty(this, \"matrixEventData\", void 0);\n var eventId = matrixEvent.getId();\n var sender = matrixEvent.getSender();\n if (eventId === undefined) throw new Error(\"parentEvent is missing eventId field\");\n if (sender === undefined) throw new Error(\"parentEvent is missing sender field\");\n this.logger = logger.getChild(\"[CallMembership \".concat(sender, \":\").concat(this.deviceId, \"]\"));\n this.matrixEventData = {\n eventId,\n sender\n };\n }\n\n /** @deprecated use userId instead */\n get sender() {\n return this.userId;\n }\n get userId() {\n var _this$membershipData = this.membershipData,\n kind = _this$membershipData.kind,\n data = _this$membershipData.data;\n switch (kind) {\n case MembershipKind.RTC:\n return data.member.user_id;\n case MembershipKind.Session:\n default:\n return this.matrixEventData.sender;\n }\n }\n get eventId() {\n return this.matrixEventData.eventId;\n }\n\n /**\n * The ID of the MatrixRTC slot that this membership belongs to (format `{application}#{id}`).\n * This is computed in case SessionMembershipData is used.\n */\n get slotId() {\n var _this$logger2;\n var _this$membershipData2 = this.membershipData,\n kind = _this$membershipData2.kind,\n data = _this$membershipData2.data;\n if (data.application === \"m.call\") {\n switch (kind) {\n case MembershipKind.RTC:\n return data.slot_id;\n case MembershipKind.Session:\n default:\n {\n var _ref = [data.application, data.call_id],\n application = _ref[0],\n id = _ref[1];\n\n // INFO_SLOT_ID_LEGACY_CASE (search for all occurances of this INFO to get the full picture)\n // The spec got changed to use `\"ROOM\"` instead of `\"\"` empyt string for the implicit default call.\n // State events still are sent with `\"\"` however. To find other events that should end up in the same call,\n // we use the slotId.\n // Since the CallMembership is the public representation of a rtc.member event, we just pretend it is a\n // \"ROOM\" slotId/call_id.\n // This makes all the remote members work with just this simple trick.\n //\n // We of course now need to be careful when sending legacy events (state events)\n // They get a slotDescription containing \"ROOM\" since this is what we use starting at the time this comment\n // is commited.\n //\n // See the Other INFO_SLOT_ID_LEGACY_CASE comments to see where we revert back to \"\" just before sending the event.\n var compatibilityAdaptedId;\n if (id === \"\") {\n var _this$logger;\n compatibilityAdaptedId = \"ROOM\";\n (_this$logger = this.logger) === null || _this$logger === void 0 || _this$logger.info(\"use slotId compat hack emptyString -> ROOM\");\n } else {\n compatibilityAdaptedId = id;\n }\n return computeSlotId({\n application,\n id: compatibilityAdaptedId\n });\n }\n }\n }\n (_this$logger2 = this.logger) === null || _this$logger2 === void 0 || _this$logger2.info(\"NOT using slotId compat hack emptyString -> ROOM\");\n // This is what the function should look like for any other application that did not\n // go through a `\"\"`=> `\"ROOM\"` rename\n switch (kind) {\n case MembershipKind.RTC:\n return data.slot_id;\n case MembershipKind.Session:\n default:\n return computeSlotId({\n application: data.application,\n id: data.call_id\n });\n }\n }\n get deviceId() {\n var _this$membershipData3 = this.membershipData,\n kind = _this$membershipData3.kind,\n data = _this$membershipData3.data;\n switch (kind) {\n case MembershipKind.RTC:\n return data.member.device_id;\n case MembershipKind.Session:\n default:\n return data.device_id;\n }\n }\n get callIntent() {\n var intent = this.applicationData[\"m.call.intent\"];\n if (typeof intent === \"string\") {\n return intent;\n }\n this.logger.warn(\"RTC membership has invalid m.call.intent\");\n return undefined;\n }\n\n /**\n * Parsed `slot_id` (format `{application}#{id}`) into its components (application and id).\n */\n get slotDescription() {\n var _this$membershipData4 = this.membershipData,\n kind = _this$membershipData4.kind,\n data = _this$membershipData4.data;\n if (kind === MembershipKind.RTC) {\n var id = data.slot_id.slice(\"\".concat(data.application.type, \"#\").length);\n return {\n application: data.application.type,\n id\n };\n }\n return slotIdToDescription(this.slotId);\n }\n\n /**\n * The application `type`.\n * @deprecated Use @see applicationData\n */\n get application() {\n return this.applicationData.type;\n }\n\n /**\n * Information about the application being used for the RTC session.\n * May contain extra keys specific to the application.\n */\n get applicationData() {\n var _this$membershipData5 = this.membershipData,\n kind = _this$membershipData5.kind,\n data = _this$membershipData5.data;\n switch (kind) {\n case MembershipKind.RTC:\n return data.application;\n case MembershipKind.Session:\n default:\n // SessionData does not have application data as such. We return specific\n // properties in use by other getters in this class, for compatibility.\n return {\n \"type\": data.application,\n \"m.call.intent\": data[\"m.call.intent\"]\n };\n }\n }\n\n /** @deprecated scope is not used and will be removed in future versions. replaced by application specific types.*/\n get scope() {\n var _this$membershipData6 = this.membershipData,\n kind = _this$membershipData6.kind,\n data = _this$membershipData6.data;\n switch (kind) {\n case MembershipKind.RTC:\n return undefined;\n case MembershipKind.Session:\n default:\n return data.scope;\n }\n }\n\n /**\n * This computes the membership ID for the membership.\n * For the sticky event based rtcSessionData this is trivial it is `member.id`.\n * This is not supposed to be used to identity on an rtc backend. This is just a nouance for\n * a generated (sha256) anonymised identity. Only send `rtcBackendIdentity` to any rtc backend service.\n *\n * For the legacy sessionMemberEvents it is a bit more complex. Here we sometimes do not have this data\n * in the event content and we expected the SFU and the client to use `${this.matrixEventData.sender}:${data.device_id}`.\n *\n * So if there is no membershipID we use the hard coded jwt id default (`${this.matrixEventData.sender}:${data.device_id}`)\n * value (used until version 0.16.0)\n *\n * It is also possible for a session event to set a custom membershipID. in that case this will be used.\n */\n get memberId() {\n var _data$membershipID;\n // the createdTs behaves equivalent to the membershipID.\n // we only need the field for the legacy member events where we needed to update them\n // synapse ignores sending state events if they have the same content.\n var _this$membershipData7 = this.membershipData,\n kind = _this$membershipData7.kind,\n data = _this$membershipData7.data;\n switch (kind) {\n case \"rtc\":\n return data.member.id;\n case \"session\":\n return (// best case we have a client already publishing the right custom membershipId\n (_data$membershipID = data.membershipID) !== null && _data$membershipID !== void 0 ? _data$membershipID : // alternativly we use the hard coded jwt id defuatl value (used until version 0.16.0)\n \"\".concat(this.matrixEventData.sender, \":\").concat(data.device_id)\n );\n default:\n throw Error(\"Not possible to get memberID without knowing the membership event kind\");\n }\n }\n\n /**\n * @deprecated renamed to `memberId`\n */\n get membershipID() {\n return this.memberId;\n }\n createdTs() {\n var _data$created_ts;\n var _this$membershipData8 = this.membershipData,\n kind = _this$membershipData8.kind,\n data = _this$membershipData8.data;\n switch (kind) {\n case MembershipKind.RTC:\n // TODO we need to read the referenced (relation) event if available to get the real created_ts\n return this.matrixEvent.getTs();\n case MembershipKind.Session:\n default:\n return (_data$created_ts = data.created_ts) !== null && _data$created_ts !== void 0 ? _data$created_ts : this.matrixEvent.getTs();\n }\n }\n\n /**\n * Gets the absolute expiry timestamp of the membership.\n * @returns The absolute expiry time of the membership as a unix timestamp in milliseconds or undefined if not applicable\n */\n getAbsoluteExpiry() {\n var _data$expires;\n var _this$membershipData9 = this.membershipData,\n kind = _this$membershipData9.kind,\n data = _this$membershipData9.data;\n switch (kind) {\n case MembershipKind.RTC:\n return undefined;\n case MembershipKind.Session:\n default:\n // TODO: calculate this from the MatrixRTCSession join configuration directly\n return this.createdTs() + ((_data$expires = data.expires) !== null && _data$expires !== void 0 ? _data$expires : DEFAULT_EXPIRE_DURATION);\n }\n }\n\n /**\n * @returns The number of milliseconds until the membership expires or undefined if applicable\n * @deprecated Not used by RTC events.\n */\n getMsUntilExpiry() {\n var kind = this.membershipData.kind;\n if (kind === MembershipKind.Session) {\n var absExpiry = this.getAbsoluteExpiry();\n if (absExpiry) {\n // Assume that local clock is sufficiently in sync with other clocks in the distributed system.\n // We used to try and adjust for the local clock being skewed, but there are cases where this is not accurate.\n // The current implementation allows for the local clock to be -infinity to +MatrixRTCSession.MEMBERSHIP_EXPIRY_TIME/2\n return absExpiry - Date.now();\n }\n }\n return undefined;\n }\n\n /**\n * @returns true if the membership has expired, otherwise false\n */\n isExpired() {\n var kind = this.membershipData.kind;\n switch (kind) {\n case MembershipKind.RTC:\n return false;\n case MembershipKind.Session:\n default:\n return this.getMsUntilExpiry() <= 0;\n }\n }\n\n /**\n * ## RTC Membership\n * Gets the primary transport to use for this RTC membership (m.rtc.member).\n * This will return the primary transport that is used by this call membership to publish their media.\n * Directly relates to the `rtc_transports` field.\n *\n * ## Legacy session membership\n * In case of a legacy session membership (m.call.member) this will return the selected transport where\n * media is published. How this selection happens depends on the `focus_active` field of the session membership.\n * If the `focus_selection` is `oldest_membership` this will return the transport of the oldest membership\n * in the room (based on the `created_ts` field of the session membership).\n * If the `focus_selection` is `multi_sfu` it will return the first transport of the `foci_preferred` list.\n * (`multi_sfu` is equivalent to how `m.rtc.member` `rtc_transports` work).\n * @param oldestMembership For backwards compatibility with session membership (legacy). Unused in case of RTC membership.\n * Always required to make the consumer not care if it deals with RTC or session memberships.\n * @returns The transport this membership uses to publish media or undefined if no transport is available.\n */\n getTransport(oldestMembership) {\n var _this$membershipData0 = this.membershipData,\n kind = _this$membershipData0.kind,\n data = _this$membershipData0.data;\n switch (kind) {\n case MembershipKind.RTC:\n return data.rtc_transports[0];\n case MembershipKind.Session:\n switch (data.focus_active.focus_selection) {\n case \"oldest_membership\":\n if (CallMembership.equal(this, oldestMembership)) return data.foci_preferred[0];\n if (oldestMembership !== undefined) return oldestMembership.getTransport(oldestMembership);\n break;\n case \"multi_sfu\":\n return data.foci_preferred[0];\n default:\n // `focus_selection` not understood.\n return undefined;\n }\n break;\n default:\n return undefined;\n }\n }\n\n /**\n * The value of the `rtc_transports` field for RTC memberships (m.rtc.member).\n * Or the value of the `foci_preferred` field for legacy session memberships (m.call.member).\n */\n get transports() {\n var _this$membershipData1 = this.membershipData,\n kind = _this$membershipData1.kind,\n data = _this$membershipData1.data;\n switch (kind) {\n case MembershipKind.RTC:\n return data.rtc_transports;\n case MembershipKind.Session:\n default:\n return data.foci_preferred;\n }\n }\n}\n//# sourceMappingURL=CallMembership.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2023-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * The mxID, deviceId and membership timestamp of a RTC session participant.\n */\n\n/**\n * A type representing the information needed to decrypt video streams.\n */\n\n/**\n * The information about the key used to encrypt video streams.\n */\n\n/**\n * THe content of a to-device event that contains encryption keys.\n */\n\n/**\n * @deprecated Use `RTCNotificationType` instead.\n */\n\n/**\n * @deprecated Use `IRTCNotificationContent` instead.\n */\n\n/**\n * Represents the intention of the call from the perspective of the sending user.\n * May be any string, although `\"audio\"` and `\"video\"` are commonly accepted values.\n */\n\n/**\n * This will check if the content has all the expected fields to be a valid IRTCNotificationContent.\n * It will also cap the lifetime to 90000ms (1.5 min) if a higher value is provided.\n * @param content\n * @throws if the content is invalid\n * @returns a parsed IRTCNotificationContent\n */\nexport function parseCallNotificationContent(content) {\n if (content[\"m.mentions\"] && typeof content[\"m.mentions\"] !== \"object\") {\n throw new Error(\"malformed m.mentions\");\n }\n if (typeof content[\"notification_type\"] !== \"string\") {\n throw new Error(\"Missing or invalid notification_type\");\n }\n if (typeof content[\"sender_ts\"] !== \"number\") {\n throw new Error(\"Missing or invalid sender_ts\");\n }\n if (typeof content[\"lifetime\"] !== \"number\") {\n throw new Error(\"Missing or invalid lifetime\");\n }\n if (content[\"relation\"] && content[\"relation\"][\"rel_type\"] !== \"m.reference\") {\n throw new Error(\"Invalid relation\");\n }\n if (content[\"m.call.intent\"] && typeof content[\"m.call.intent\"] !== \"string\") {\n throw new Error(\"Invalid m.call.intent\");\n }\n var cappedLifetime = content[\"lifetime\"] >= 90000 ? 90000 : content[\"lifetime\"];\n return _objectSpread(_objectSpread({}, content), {}, {\n lifetime: cappedLifetime\n });\n}\n\n/**\n * Interface for `org.matrix.msc4075.rtc.notification` events.\n * Don't cast event content to this directly. Use `parseCallNotificationContent` instead to validate the content first.\n */\n\n/**\n * MSC4310 decline event content for `org.matrix.msc4310.rtc.decline`.\n * Sent as a standard m.reference relation to an `org.matrix.msc4075.rtc.notification` event.\n */\n\nexport var Status = /*#__PURE__*/function (Status) {\n Status[\"Disconnected\"] = \"Disconnected\";\n Status[\"Connecting\"] = \"Connecting\";\n Status[\"Connected\"] = \"Connected\";\n Status[\"Disconnecting\"] = \"Disconnecting\";\n Status[\"Unknown\"] = \"Unknown\";\n return Status;\n}({});\n\n/**\n * A type collecting call encryption statistics for a session.\n */\n\nexport var isMyMembership = (m, userId, deviceId) => m.sender === userId && m.deviceId === deviceId;\n\n/**\n * A RTC transport is a JSON object that describes how to connect to a RTC member.\n */\n\n/**\n * Event content for a `m.rtc.slot` state event.\n */\n\n/**\n * The session description is used to identify a session. Used in the state event.\n */\n//# sourceMappingURL=types.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { logger as rootLogger } from \"../logger.js\";\nimport { sleep } from \"../utils.js\";\nimport { MembershipActionType } from \"./MembershipManager.js\";\n\n/** @internal */\n\n/** @internal */\n\n/**\n * This scheduler tracks the state of the current membership participation\n * and runs one central timer that wakes up a handler callback with the correct action + state\n * whenever necessary.\n *\n * It can also be awakened whenever a new action is added which is\n * earlier then the current \"next awake\".\n * @internal\n */\nexport class ActionScheduler {\n constructor(/** This is the callback called for each scheduled action (`this.addAction()`) */\n membershipLoopHandler, parentLogger) {\n this.membershipLoopHandler = membershipLoopHandler;\n _defineProperty(this, \"logger\", void 0);\n /**\n * This is tracking the state of the scheduler loop.\n * Only used to prevent starting the loop twice.\n */\n _defineProperty(this, \"running\", false);\n // function for the wakeup mechanism (in case we add an action externally and need to leave the current sleep)\n _defineProperty(this, \"wakeup\", update => {\n this.logger.error(\"Cannot call wakeup before calling `startWithJoin()`\");\n });\n _defineProperty(this, \"_actions\", []);\n this.logger = (parentLogger !== null && parentLogger !== void 0 ? parentLogger : rootLogger).getChild(\"[NewMembershipActionScheduler]\");\n }\n get actions() {\n return this._actions;\n }\n\n /**\n * This starts the main loop of the membership manager that handles event sending, delayed event sending and delayed event restarting.\n * @param initialActions The initial actions the manager will start with. It should be enough to pass: DelayedLeaveActionType.Initial\n * @returns Promise that resolves once all actions have run and no more are scheduled.\n * @throws This throws an error if one of the actions throws.\n * In most other error cases the manager will try to handle any server errors by itself.\n */\n startWithJoin() {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (_this.running) {\n _this.logger.error(\"Cannot call startWithJoin() on NewMembershipActionScheduler while already running\");\n return;\n }\n _this.running = true;\n _this._actions = [{\n ts: Date.now(),\n type: MembershipActionType.SendDelayedEvent\n }];\n try {\n var _loop = function* _loop() {\n // Sort so next (smallest ts) action is at the beginning\n _this._actions.sort((a, b) => a.ts - b.ts);\n var nextAction = _this._actions[0];\n var wakeupUpdate = undefined;\n\n // while we await for the next action, wakeup has to resolve the wakeupPromise\n var wakeupPromise = new Promise(resolve => {\n _this.wakeup = update => {\n wakeupUpdate = update;\n resolve();\n };\n });\n if (nextAction.ts > Date.now()) yield Promise.race([wakeupPromise, sleep(nextAction.ts - Date.now())]);\n var handlerResult = {};\n if (!wakeupUpdate) {\n _this.logger.debug(\"Current MembershipManager processing: \".concat(nextAction.type, \"\\nQueue:\"), _this._actions, \"\\nDate.now: \\\"\".concat(Date.now()));\n try {\n // `this.wakeup` can also be called and sets the `wakeupUpdate` object while we are in the handler.\n handlerResult = yield _this.membershipLoopHandler(nextAction.type);\n } catch (e) {\n // Preserve the original error as `cause`.\n throw new Error(\"The MembershipManager shut down because of the end condition: \".concat(e), {\n cause: e\n });\n }\n }\n // remove the processed action only after we are done processing\n _this._actions.splice(0, 1);\n // The wakeupUpdate always wins since that is a direct external update.\n var actionUpdate = wakeupUpdate !== null && wakeupUpdate !== void 0 ? wakeupUpdate : handlerResult;\n if (\"replace\" in actionUpdate) {\n _this._actions = actionUpdate.replace;\n } else if (\"insert\" in actionUpdate) {\n _this._actions.push(...actionUpdate.insert);\n }\n };\n while (_this._actions.length > 0) {\n yield* _loop();\n }\n } finally {\n // Set the rtc session running state since we cannot recover from here and the consumer user of the\n // MatrixRTCSession class needs to manually rejoin.\n _this.running = false;\n }\n _this.logger.debug(\"Leave MembershipManager ActionScheduler loop (no more actions)\");\n })();\n }\n initiateJoin() {\n var _this$wakeup;\n (_this$wakeup = this.wakeup) === null || _this$wakeup === void 0 || _this$wakeup.call(this, {\n replace: [{\n ts: Date.now(),\n type: MembershipActionType.SendDelayedEvent\n }]\n });\n }\n initiateLeave() {\n var _this$wakeup2;\n (_this$wakeup2 = this.wakeup) === null || _this$wakeup2 === void 0 || _this$wakeup2.call(this, {\n replace: [{\n ts: Date.now(),\n type: MembershipActionType.SendScheduledDelayedLeaveEvent\n }]\n });\n }\n}\n//# sourceMappingURL=MembershipManagerActionScheduler.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var InvalidCryptoStoreState = /*#__PURE__*/function (InvalidCryptoStoreState) {\n InvalidCryptoStoreState[\"TooNew\"] = \"TOO_NEW\";\n return InvalidCryptoStoreState;\n}({});\nexport class InvalidCryptoStoreError extends Error {\n constructor(reason) {\n var message = \"Crypto store is invalid because \".concat(reason, \", \") + \"please stop the client, delete all data and start the client again\";\n super(message);\n this.reason = reason;\n this.name = \"InvalidCryptoStoreError\";\n }\n}\n_defineProperty(InvalidCryptoStoreError, \"TOO_NEW\", InvalidCryptoStoreState.TooNew);\nexport class KeySignatureUploadError extends Error {\n constructor(message, value) {\n super(message);\n this.value = value;\n }\n}\n\n/**\n * It is invalid to call most methods once {@link MatrixClient#stopClient} has been called.\n *\n * This error will be thrown if you attempt to do so.\n *\n * {@link MatrixClient#stopClient} itself is an exception to this: it may safely be called multiple times on the same\n * instance.\n */\nexport class ClientStoppedError extends Error {\n constructor() {\n super(\"MatrixClient has been stopped\");\n }\n}\n\n/**\n * This error is thrown when the Homeserver does not support the delayed events endpoints.\n */\nexport class UnsupportedDelayedEventsEndpointError extends Error {\n constructor(message, clientEndpoint) {\n super(message);\n this.clientEndpoint = clientEndpoint;\n this.name = \"UnsupportedDelayedEventsEndpointError\";\n }\n}\n\n/**\n * This error is thrown when the Homeserver does not support the sticky events endpoints.\n */\nexport class UnsupportedStickyEventsEndpointError extends Error {\n constructor(message, clientEndpoint) {\n super(message);\n this.clientEndpoint = clientEndpoint;\n this.name = \"UnsupportedStickyEventsEndpointError\";\n }\n}\n//# sourceMappingURL=errors.js.map","/*\nCopyright 2025 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var MembershipManagerEvent = /*#__PURE__*/function (MembershipManagerEvent) {\n MembershipManagerEvent[\"StatusChanged\"] = \"StatusChanged\";\n /**\n * Emitted when the membership manager has not heard back from the server for the duration\n * of the delayed event and hence failed to restart the delayed event.\n * This means that the user is probably not joined anymore and the leave event was distributed to other session members.\n */\n MembershipManagerEvent[\"ProbablyLeft\"] = \"ProbablyLeft\";\n /**\n * Once the membershipManger has aquired the a delay id (after sending the state event)\n * It will emit and share the delay id.\n */\n MembershipManagerEvent[\"DelayIdChanged\"] = \"DelayIdChanged\";\n return MembershipManagerEvent;\n}({});\n\n/**\n * This interface defines what a MembershipManager uses and exposes.\n * This interface is what we use to write tests and allows changing the actual implementation\n * without breaking tests because of some internal method renaming.\n *\n * @internal\n */\n//# sourceMappingURL=IMembershipManager.js.map","/*\nCopyright 2025 New Vector Ltd\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var isLivekitTransportConfig = object => object.type === \"livekit\" && \"livekit_service_url\" in object;\nexport var isLivekitTransport = object => isLivekitTransportConfig(object) && \"livekit_alias\" in object;\n\n/**\n * @deprecated, this is just needed for the old focus active / focus fields of a call membership.\n * Not needed for new implementations.\n */\n\n/**\n * @deprecated see LivekitFocusSelection\n */\nexport var isLivekitFocusSelection = object => object.type === \"livekit\" && \"focus_selection\" in object;\n//# sourceMappingURL=LivekitTransport.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2025-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\nimport { AbortError } from \"p-retry\";\nimport { EventType, RelationType } from \"../@types/event.js\";\nimport { ConnectionError, HTTPError, MatrixError } from \"../http-api/errors.js\";\nimport { logger as rootLogger } from \"../logger.js\";\nimport { DEFAULT_EXPIRE_DURATION } from \"./CallMembership.js\";\nimport { isMyMembership, Status } from \"./types.js\";\nimport { ActionScheduler } from \"./MembershipManagerActionScheduler.js\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { UnsupportedDelayedEventsEndpointError } from \"../errors.js\";\nimport { MembershipManagerEvent } from \"./IMembershipManager.js\";\nimport { computeSlotId } from \"./utils.js\";\nimport { isLivekitTransportConfig } from \"./LivekitTransport.js\";\n\n/* MembershipActionTypes:\nOn Join: ───────────────┐ ┌───────────────(1)───────────┐\n ▼ ▼ │\n ┌────────────────┐ │\n │SendDelayedEvent│ ──────(2)───┐ │\n └────────────────┘ │ │\n │(3) │ │\n ▼ │ │\n ┌─────────────┐ │ │\n ┌──────(4)───│SendJoinEvent│────(4)─────┐ │ │\n │ └─────────────┘ │ │ │\n │ ┌─────┐ ┌──────┐ │ │ │\n ▼ ▼ │ │ ▼ ▼ ▼ │\n┌────────────┐ │ │ ┌───────────────────┐ │\n│UpdateExpiry│ (s) (s)|RestartDelayedEvent│ │\n└────────────┘ │ │ └───────────────────┘ │\n │ │ │ │ │ │\n └─────┘ └──────┘ └───────┘\n\nOn Leave: ───────── STOP ALL ABOVE\n ▼\n ┌────────────────────────────────┐\n │ SendScheduledDelayedLeaveEvent │\n └────────────────────────────────┘\n │(5)\n ▼\n ┌──────────────┐\n │SendLeaveEvent│\n └──────────────┘\n(1) [Not found error] results in resending the delayed event\n(2) [hasMemberEvent = true] Sending the delayed event if we\n already have a call member event results jumping to the\n RestartDelayedEvent loop directly\n(3) [hasMemberEvent = false] if there is not call member event\n sending it is the next step\n(4) Both (UpdateExpiry and RestartDelayedEvent) actions are\n scheduled when successfully sending the state event\n(5) Only if delayed event sending failed (fallback)\n(s) Successful restart/resend\n*/\n\n/**\n * Call membership should always remain sticky for this amount\n * of time.\n */\nvar MEMBERSHIP_STICKY_DURATION_MS = 60 * 60 * 1000; // 60 minutes\n\n/**\n * The different types of actions the MembershipManager can take.\n * @internal\n */\nexport var MembershipActionType = /*#__PURE__*/function (MembershipActionType) {\n MembershipActionType[\"SendDelayedEvent\"] = \"SendDelayedEvent\";\n // -> MembershipActionType.SendJoinEvent if successful\n // -> DelayedLeaveActionType.SendDelayedEvent on error, retry sending the first delayed event.\n // -> DelayedLeaveActionType.RestartDelayedEvent on success start updating the delayed event\n MembershipActionType[\"SendJoinEvent\"] = \"SendJoinEvent\";\n // -> MembershipActionType.SendJoinEvent if we run into a rate limit and need to retry\n // -> MembershipActionType.Update if we successfully send the join event then schedule the expire event update\n // -> DelayedLeaveActionType.RestartDelayedEvent to recheck the delayed event\n MembershipActionType[\"RestartDelayedEvent\"] = \"RestartDelayedEvent\";\n // -> DelayedLeaveActionType.SendMainDelayedEvent on missing delay id but there is a rtc state event\n // -> DelayedLeaveActionType.SendDelayedEvent on missing delay id and there is no state event\n // -> DelayedLeaveActionType.RestartDelayedEvent on success we schedule the next restart\n MembershipActionType[\"UpdateExpiry\"] = \"UpdateExpiry\";\n // -> MembershipActionType.Update if the timeout has passed so the next update is required.\n MembershipActionType[\"SendScheduledDelayedLeaveEvent\"] = \"SendScheduledDelayedLeaveEvent\";\n // -> MembershipActionType.SendLeaveEvent on failure (not found) we need to send the leave manually and cannot use the scheduled delayed event\n // -> DelayedLeaveActionType.SendScheduledDelayedLeaveEvent on error we try again.\n MembershipActionType[\"SendLeaveEvent\"] = \"SendLeaveEvent\"; // -> MembershipActionType.SendLeaveEvent\n return MembershipActionType;\n}({});\n\n/**\n * @internal\n */\n\nfunction createInsertActionUpdate(type, offset) {\n return {\n insert: [{\n ts: Date.now() + (offset !== null && offset !== void 0 ? offset : 0),\n type\n }]\n };\n}\nfunction createReplaceActionUpdate(type, offset) {\n return {\n replace: [{\n ts: Date.now() + (offset !== null && offset !== void 0 ? offset : 0),\n type\n }]\n };\n}\n/**\n * This class is responsible for sending all events relating to the own membership of a matrixRTC call.\n * It has the following tasks:\n * - Send the users leave delayed event before sending the membership\n * - Send the users membership if the state machine is started\n * - Check if the delayed event was canceled due to sending the membership\n * - update the delayed event (`restart`)\n * - Update the state event every ~5h = `DEFAULT_EXPIRE_DURATION` (so it does not get treated as expired)\n * - When the state machine is stopped:\n * - Disconnect the member\n * - Stop the timer for the delay refresh\n * - Stop the timer for updating the state event\n */\nexport class MembershipManager extends TypedEventEmitter {\n isActivated() {\n return this.activated;\n }\n // DEPRECATED use isActivated\n isJoined() {\n return this.isActivated();\n }\n\n /**\n * Puts the MembershipManager in a state where it tries to be joined.\n * It will send delayed events and membership events\n * @param fociPreferred the list of preferred foci to use in the joined RTC membership event.\n * If multiSfuFocus is set, this is only needed if this client wants to publish to multiple transports simultaneously.\n * @param multiSfuFocus the active focus to use in the joined RTC membership event. Setting this implies the\n * membership manager will operate in a multi-SFU connection mode. If `undefined`, an `oldest_membership`\n * transport selection will be used instead.\n * @param onError This will be called once the membership manager encounters an unrecoverable error.\n * This should bubble up the the frontend to communicate that the call does not work in the current environment.\n * The original underlying error is preserved as `error.cause`, so consumers can `instanceof`-check the typed\n * cause.\n */\n join(fociPreferred, multiSfuFocus, onError) {\n if (this.scheduler.running) {\n this.logger.error(\"MembershipManager is already running. Ignoring join request.\");\n return;\n }\n this.fociPreferred = fociPreferred;\n this.rtcTransport = multiSfuFocus;\n this.leavePromiseResolvers = undefined;\n this.activated = true;\n this.oldStatus = this.status;\n this.state = MembershipManager.defaultState;\n this.scheduler.startWithJoin().catch(e => {\n this.logger.error(\"MembershipManager stopped because: \", e);\n onError === null || onError === void 0 || onError(e);\n }).finally(() => {\n // Should already be set to false when calling `leave` in non error cases.\n this.activated = false;\n // Here the scheduler is not running anymore so we the `membershipLoopHandler` is not called to emit.\n if (this.oldStatus && this.oldStatus !== this.status) {\n this.emit(MembershipManagerEvent.StatusChanged, this.oldStatus, this.status);\n }\n if (!this.scheduler.running) {\n var _this$leavePromiseRes;\n (_this$leavePromiseRes = this.leavePromiseResolvers) === null || _this$leavePromiseRes === void 0 || _this$leavePromiseRes.resolve(true);\n this.leavePromiseResolvers = undefined;\n }\n });\n }\n\n /**\n * Leave from the call (Send an rtc session event with content: `{}`)\n * @param timeout the maximum duration this promise will take to resolve\n * @returns true if it managed to leave and false if the timeout condition happened.\n */\n leave(timeout) {\n if (!this.scheduler.running) {\n this.logger.warn(\"Called MembershipManager.leave() even though the MembershipManager is not running\");\n return Promise.resolve(true);\n }\n\n // We use the promise to track if we already scheduled a leave event\n // So we do not check scheduler.actions/scheduler.insertions\n if (!this.leavePromiseResolvers) {\n // reset scheduled actions so we will not do any new actions.\n this.leavePromiseResolvers = Promise.withResolvers();\n this.activated = false;\n this.scheduler.initiateLeave();\n if (timeout) setTimeout(() => {\n var _this$leavePromiseRes2;\n return (_this$leavePromiseRes2 = this.leavePromiseResolvers) === null || _this$leavePromiseRes2 === void 0 ? void 0 : _this$leavePromiseRes2.resolve(false);\n }, timeout);\n }\n return this.leavePromiseResolvers.promise;\n }\n onRTCSessionMemberUpdate(memberships) {\n if (!this.isActivated()) {\n return Promise.resolve();\n }\n this._ownMembership = memberships.find(m => isMyMembership(m, this.userId, this.deviceId));\n if (!this._ownMembership) {\n // If one of these actions are scheduled or are getting inserted in the next iteration, we should already\n // take care of our missing membership.\n var sendingMembershipActions = [MembershipActionType.SendDelayedEvent, MembershipActionType.SendJoinEvent];\n this.logger.warn(\"Missing own membership: force re-join\");\n this.state.hasMemberStateEvent = false;\n if (this.scheduler.actions.some(a => sendingMembershipActions.includes(a.type))) {\n this.logger.error(\"tried adding another `SendDelayedEvent` actions even though we already have one in the Queue\\nActionQueueOnMemberUpdate:\", this.scheduler.actions);\n } else {\n // Only react to our own membership missing if we have not already scheduled sending a new membership DirectMembershipManagerAction.Join\n this.scheduler.initiateJoin();\n }\n }\n return Promise.resolve();\n }\n updateCallIntent(callIntent) {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (!_this.activated || !_this.ownMembership) {\n throw Error(\"You cannot update your intent before joining the call\");\n }\n if (_this.ownMembership.callIntent === callIntent) {\n return; // No-op\n }\n _this.callIntent = callIntent;\n // Kick off a new membership event as a result.\n yield _this.sendJoinEvent();\n })();\n }\n\n /**\n * @throws if the client does not return user or device id.\n * @param joinConfig\n * @param room\n * @param client\n */\n constructor(joinConfig, room, client, slotDescription, parentLogger) {\n super();\n this.joinConfig = joinConfig;\n this.room = room;\n this.client = client;\n this.slotDescription = slotDescription;\n _defineProperty(this, \"activated\", false);\n _defineProperty(this, \"logger\", void 0);\n _defineProperty(this, \"callIntent\", void 0);\n _defineProperty(this, \"leavePromiseResolvers\", void 0);\n _defineProperty(this, \"_ownMembership\", void 0);\n // scheduler\n _defineProperty(this, \"oldStatus\", void 0);\n _defineProperty(this, \"scheduler\", void 0);\n // MembershipManager mutable state.\n _defineProperty(this, \"state\", void 0);\n // Membership Event static parameters:\n _defineProperty(this, \"deviceId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"stateKey\", void 0);\n _defineProperty(this, \"rtcTransport\", void 0);\n /** @deprecated This will be removed in favor or rtcTransport becoming a list of actively used transports */\n _defineProperty(this, \"fociPreferred\", void 0);\n // Config:\n _defineProperty(this, \"delayedLeaveEventDelayMsOverride\", void 0);\n // an abstraction to switch between sending state or a sticky event\n _defineProperty(this, \"clientSendDelayedDisconnectMembership\", () => this.client._unstable_sendDelayedStateEvent(this.room.roomId, {\n delay: this.delayedLeaveEventDelayMs\n }, EventType.GroupCallMemberPrefix, {}, this.stateKey));\n _defineProperty(this, \"clientSendMembership\", myMembership => {\n return this.client.sendStateEvent(this.room.roomId, EventType.GroupCallMemberPrefix, myMembership, this.stateKey);\n });\n this.logger = (parentLogger !== null && parentLogger !== void 0 ? parentLogger : rootLogger).getChild(\"[MembershipManager]\");\n var _ref = [this.client.getUserId(), this.client.getDeviceId()],\n userId = _ref[0],\n deviceId = _ref[1];\n if (userId === null) throw Error(\"Missing userId in client\");\n if (deviceId === null) throw Error(\"Missing deviceId in client\");\n this.deviceId = deviceId;\n this.userId = userId;\n // this needs to become a uuid so that consecutive join/leaves result in a key rotation.\n // we keep it as a string for now for backwards compatibility.\n this.stateKey = this.makeMembershipStateKey(userId, deviceId);\n this.state = MembershipManager.defaultState;\n this.callIntent = joinConfig === null || joinConfig === void 0 ? void 0 : joinConfig.callIntent;\n this.scheduler = new ActionScheduler(type => {\n if (this.oldStatus) {\n // we put this at the beginning of the actions scheduler loop handle callback since it is a loop this\n // is equivalent to running it at the end of the loop. (just after applying the status/action list changes)\n // This order is required because this method needs to return the action updates.\n this.logger.debug(\"MembershipManager applied action changes. Status: \".concat(this.oldStatus, \" -> \").concat(this.status));\n if (this.oldStatus !== this.status) {\n this.emit(MembershipManagerEvent.StatusChanged, this.oldStatus, this.status);\n }\n }\n this.oldStatus = this.status;\n this.logger.debug(\"MembershipManager before processing action. status=\".concat(this.oldStatus));\n return this.membershipLoopHandler(type);\n }, this.logger);\n }\n get ownMembership() {\n return this._ownMembership;\n }\n static get defaultState() {\n return {\n hasMemberStateEvent: false,\n delayId: undefined,\n startTime: 0,\n rateLimitRetries: new Map(),\n networkErrorRetries: new Map(),\n expireUpdateIterations: 1,\n probablyLeft: false\n };\n }\n get networkErrorRetryMs() {\n var _this$joinConfig$netw, _this$joinConfig;\n return (_this$joinConfig$netw = (_this$joinConfig = this.joinConfig) === null || _this$joinConfig === void 0 ? void 0 : _this$joinConfig.networkErrorRetryMs) !== null && _this$joinConfig$netw !== void 0 ? _this$joinConfig$netw : 3000;\n }\n get membershipEventExpiryMs() {\n var _this$joinConfig$memb, _this$joinConfig2;\n return (_this$joinConfig$memb = (_this$joinConfig2 = this.joinConfig) === null || _this$joinConfig2 === void 0 ? void 0 : _this$joinConfig2.membershipEventExpiryMs) !== null && _this$joinConfig$memb !== void 0 ? _this$joinConfig$memb : DEFAULT_EXPIRE_DURATION;\n }\n get membershipEventExpiryHeadroomMs() {\n var _this$joinConfig$memb2, _this$joinConfig3;\n return (_this$joinConfig$memb2 = (_this$joinConfig3 = this.joinConfig) === null || _this$joinConfig3 === void 0 ? void 0 : _this$joinConfig3.membershipEventExpiryHeadroomMs) !== null && _this$joinConfig$memb2 !== void 0 ? _this$joinConfig$memb2 : 5000;\n }\n computeNextExpiryActionTs(iteration) {\n return this.state.startTime + Math.min(this.membershipEventExpiryMs, MEMBERSHIP_STICKY_DURATION_MS) * iteration - this.membershipEventExpiryHeadroomMs;\n }\n get delayedLeaveEventDelayMs() {\n var _ref2, _this$delayedLeaveEve, _this$joinConfig4;\n return (_ref2 = (_this$delayedLeaveEve = this.delayedLeaveEventDelayMsOverride) !== null && _this$delayedLeaveEve !== void 0 ? _this$delayedLeaveEve : (_this$joinConfig4 = this.joinConfig) === null || _this$joinConfig4 === void 0 ? void 0 : _this$joinConfig4.delayedLeaveEventDelayMs) !== null && _ref2 !== void 0 ? _ref2 : 8000;\n }\n get delayedLeaveEventRestartMs() {\n var _this$joinConfig$dela, _this$joinConfig5;\n return (_this$joinConfig$dela = (_this$joinConfig5 = this.joinConfig) === null || _this$joinConfig5 === void 0 ? void 0 : _this$joinConfig5.delayedLeaveEventRestartMs) !== null && _this$joinConfig$dela !== void 0 ? _this$joinConfig$dela : 5000;\n }\n get maximumRateLimitRetryCount() {\n var _this$joinConfig$maxi, _this$joinConfig6;\n return (_this$joinConfig$maxi = (_this$joinConfig6 = this.joinConfig) === null || _this$joinConfig6 === void 0 ? void 0 : _this$joinConfig6.maximumRateLimitRetryCount) !== null && _this$joinConfig$maxi !== void 0 ? _this$joinConfig$maxi : 10;\n }\n get maximumNetworkErrorRetryCount() {\n var _this$joinConfig$maxi2, _this$joinConfig7;\n return (_this$joinConfig$maxi2 = (_this$joinConfig7 = this.joinConfig) === null || _this$joinConfig7 === void 0 ? void 0 : _this$joinConfig7.maximumNetworkErrorRetryCount) !== null && _this$joinConfig$maxi2 !== void 0 ? _this$joinConfig$maxi2 : 10;\n }\n get delayedLeaveEventRestartLocalTimeoutMs() {\n var _this$joinConfig$dela2, _this$joinConfig8;\n return (_this$joinConfig$dela2 = (_this$joinConfig8 = this.joinConfig) === null || _this$joinConfig8 === void 0 ? void 0 : _this$joinConfig8.delayedLeaveEventRestartLocalTimeoutMs) !== null && _this$joinConfig$dela2 !== void 0 ? _this$joinConfig$dela2 : 2000;\n }\n\n // LOOP HANDLER:\n membershipLoopHandler(type) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n switch (type) {\n case MembershipActionType.SendDelayedEvent:\n {\n // Before we start we check if we come from a state where we have a delay id.\n if (!_this2.state.delayId) {\n return _this2.sendOrResendDelayedLeaveEvent(); // Normal case without any previous delayed id.\n } else {\n // This can happen if someone else (or another client) removes our own membership event.\n // It will trigger `onRTCSessionMemberUpdate` queue `MembershipActionType.SendDelayedEvent`.\n // We might still have our delayed event from the previous participation and dependent on the server this might not\n // get removed automatically if the state changes. Hence, it would remove our membership unexpectedly shortly after the rejoin.\n //\n // In this block we will try to cancel this delayed event before setting up a new one.\n\n return _this2.cancelKnownDelayIdBeforeSendDelayedEvent(_this2.state.delayId);\n }\n }\n case MembershipActionType.RestartDelayedEvent:\n {\n if (!_this2.state.delayId) {\n // Delay id got reset. This action was used to check if the hs canceled the delayed event when the join state got sent.\n return createInsertActionUpdate(MembershipActionType.SendDelayedEvent);\n }\n return _this2.restartDelayedEvent(_this2.state.delayId);\n }\n case MembershipActionType.SendScheduledDelayedLeaveEvent:\n {\n // We are already good\n if (!_this2.state.hasMemberStateEvent) {\n return {\n replace: []\n };\n }\n if (_this2.state.delayId) {\n return _this2.sendScheduledDelayedLeaveEventOrFallbackToSendLeaveEvent(_this2.state.delayId);\n } else {\n return createInsertActionUpdate(MembershipActionType.SendLeaveEvent);\n }\n }\n case MembershipActionType.SendJoinEvent:\n {\n return _this2.sendJoinEvent();\n }\n case MembershipActionType.UpdateExpiry:\n {\n return _this2.updateExpiryOnJoinedEvent();\n }\n case MembershipActionType.SendLeaveEvent:\n {\n // We are good already\n if (!_this2.state.hasMemberStateEvent) {\n return {\n replace: []\n };\n }\n // This is only a fallback in case we do not have working delayed events support.\n // first we should try to just send the scheduled leave event\n return _this2.sendFallbackLeaveEvent();\n }\n }\n })();\n }\n // HANDLERS (used in the membershipLoopHandler)\n sendOrResendDelayedLeaveEvent() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n // We can reach this at the start of a call (where we do not yet have a membership: state.hasMemberStateEvent=false)\n // or during a call if the state event canceled our delayed event or caused by an unexpected error that removed our delayed event.\n // (Another client could have canceled it, the homeserver might have removed/lost it due to a restart, ...)\n // In the `then` and `catch` block we treat both cases differently. \"if (this.state.hasMemberStateEvent) {} else {}\"\n return yield _this3.clientSendDelayedDisconnectMembership().then(response => {\n _this3.state.expectedServerDelayLeaveTs = Date.now() + _this3.delayedLeaveEventDelayMs;\n _this3.setAndEmitProbablyLeft(false);\n // On success we reset retries and set delayId.\n _this3.resetRateLimitCounter(MembershipActionType.SendDelayedEvent);\n _this3.setAndEmitDelayId(response.delay_id);\n if (_this3.state.hasMemberStateEvent) {\n // This action was scheduled because the previous delayed event was cancelled\n // due to lack of https://github.com/element-hq/synapse/pull/17810\n return createInsertActionUpdate(MembershipActionType.RestartDelayedEvent, _this3.delayedLeaveEventRestartMs);\n } else {\n // This action was scheduled because we are in the process of joining\n return createInsertActionUpdate(MembershipActionType.SendJoinEvent);\n }\n }).catch(e => {\n var repeatActionType = MembershipActionType.SendDelayedEvent;\n if (_this3.manageMaxDelayExceededSituation(e)) {\n return createInsertActionUpdate(repeatActionType);\n }\n var update = _this3.actionUpdateFromErrors(e, repeatActionType, \"_unstable_sendDelayedStateEvent\");\n if (update) return update;\n if (_this3.state.hasMemberStateEvent) {\n // This action was scheduled because the previous delayed event was cancelled\n // due to lack of https://github.com/element-hq/synapse/pull/17810\n\n // Don't do any other delayed event work if its not supported.\n if (_this3.isUnsupportedDelayedEndpoint(e)) return {};\n throw Error(\"Could not send delayed event, even though delayed events are supported. \" + e);\n } else {\n // This action was scheduled because we are in the process of joining\n // log and fall through\n if (_this3.isUnsupportedDelayedEndpoint(e)) {\n _this3.logger.info(\"Not using delayed event because the endpoint is not supported\");\n } else {\n _this3.logger.info(\"Not using delayed event because: \" + e);\n }\n // On any other error we fall back to not using delayed events and send the join state event immediately\n return createInsertActionUpdate(MembershipActionType.SendJoinEvent);\n }\n });\n })();\n }\n cancelKnownDelayIdBeforeSendDelayedEvent(delayId) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n // Remove all running updates and restarts\n return yield _this4.client._unstable_cancelScheduledDelayedEvent(delayId).then(() => {\n _this4.setAndEmitDelayId(undefined);\n _this4.resetRateLimitCounter(MembershipActionType.SendDelayedEvent);\n return createReplaceActionUpdate(MembershipActionType.SendDelayedEvent);\n }).catch(e => {\n var repeatActionType = MembershipActionType.SendDelayedEvent;\n var update = _this4.actionUpdateFromErrors(e, repeatActionType, \"cancelScheduledDelayedEvent\");\n if (update) return update;\n if (_this4.isNotFoundError(e)) {\n // If we get a M_NOT_FOUND we know that the delayed event got already removed.\n // This means we are good and can set it to undefined and run this again.\n _this4.setAndEmitDelayId(undefined);\n return createReplaceActionUpdate(repeatActionType);\n }\n if (_this4.isUnsupportedDelayedEndpoint(e)) {\n return createReplaceActionUpdate(MembershipActionType.SendJoinEvent);\n }\n // We do not just ignore and log this error since we would also need to reset the delayId.\n\n // This becomes an unrecoverable error case since something is significantly off if we don't hit any of the above cases\n // when state.delayId !== undefined\n // We do not just ignore and log this error since we would also need to reset the delayId.\n // It is cleaner if we, the frontend, rejoins instead of resetting the delayId here and behaving like in the success case.\n throw Error(\"We failed to cancel a delayed event where we already had a delay id with an error we cannot automatically handle\");\n });\n })();\n }\n setAndEmitProbablyLeft(probablyLeft) {\n if (this.state.probablyLeft === probablyLeft) {\n return;\n }\n this.state.probablyLeft = probablyLeft;\n this.emit(MembershipManagerEvent.ProbablyLeft, this.state.probablyLeft);\n }\n setAndEmitDelayId(delayId) {\n if (this.state.delayId === delayId) return;\n this.state.delayId = delayId;\n this.emit(MembershipManagerEvent.DelayIdChanged, this.state.delayId);\n }\n restartDelayedEvent(delayId) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n // Compute the duration until we expect the server to send the delayed leave event.\n var durationUntilServerDelayedLeave = _this5.state.expectedServerDelayLeaveTs ? _this5.state.expectedServerDelayLeaveTs - Date.now() : undefined;\n var abortPromise = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new AbortError(\"Restart delayed event timed out before the HS responded\"));\n },\n // We abort immediately at the time where we expect the server to send the delayed leave event.\n // At this point we want the catch block to run and set the `probablyLeft` state.\n //\n // While we are already in probablyLeft state, we use the unaltered delayedLeaveEventRestartLocalTimeoutMs.\n durationUntilServerDelayedLeave !== undefined && !_this5.state.probablyLeft ? Math.min(_this5.delayedLeaveEventRestartLocalTimeoutMs, durationUntilServerDelayedLeave) : _this5.delayedLeaveEventRestartLocalTimeoutMs);\n });\n\n // The obvious choice here would be to use the `IRequestOpts` to set the timeout. Since this call might be forwarded\n // to the widget driver this information would get lost. That is why we mimic the AbortError using the race.\n return yield Promise.race([_this5.client._unstable_restartScheduledDelayedEvent(delayId), abortPromise]).then(() => {\n // Whenever we successfully restart the delayed event we update the `state.expectedServerDelayLeaveTs`\n // which stores the predicted timestamp at which the server will send the delayed leave event if there wont be any further\n // successful restart requests.\n _this5.state.expectedServerDelayLeaveTs = Date.now() + _this5.delayedLeaveEventDelayMs;\n _this5.resetRateLimitCounter(MembershipActionType.RestartDelayedEvent);\n _this5.setAndEmitProbablyLeft(false);\n return createInsertActionUpdate(MembershipActionType.RestartDelayedEvent, _this5.delayedLeaveEventRestartMs);\n }).catch(e => {\n if (_this5.state.expectedServerDelayLeaveTs && _this5.state.expectedServerDelayLeaveTs <= Date.now()) {\n // Once we reach this point it's likely that the server is sending the delayed leave event so we emit `probablyLeft = true`.\n // It will emit `probablyLeft = false` once we notice about our leave through sync and successfully setup a new state event.\n _this5.setAndEmitProbablyLeft(true);\n }\n var repeatActionType = MembershipActionType.RestartDelayedEvent;\n if (_this5.isNotFoundError(e)) {\n _this5.setAndEmitDelayId(undefined);\n return createInsertActionUpdate(MembershipActionType.SendDelayedEvent);\n }\n // If the HS does not support delayed events we wont reschedule.\n if (_this5.isUnsupportedDelayedEndpoint(e)) return {};\n\n // TODO this also needs a test: get rate limit while checking id delayed event is scheduled\n var update = _this5.actionUpdateFromErrors(e, repeatActionType, \"restartScheduledDelayedEvent\");\n if (update) return update;\n\n // In other error cases we have no idea what is happening\n throw Error(\"Could not restart delayed event, even though delayed events are supported. \" + e);\n });\n })();\n }\n sendScheduledDelayedLeaveEventOrFallbackToSendLeaveEvent(delayId) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n return yield _this6.client._unstable_sendScheduledDelayedEvent(delayId).then(() => {\n _this6.state.hasMemberStateEvent = false;\n _this6.setAndEmitDelayId(undefined);\n _this6.resetRateLimitCounter(MembershipActionType.SendScheduledDelayedLeaveEvent);\n return {\n replace: []\n };\n }).catch(e => {\n var repeatActionType = MembershipActionType.SendLeaveEvent;\n if (_this6.isUnsupportedDelayedEndpoint(e)) return {};\n if (_this6.isNotFoundError(e)) {\n _this6.setAndEmitDelayId(undefined);\n return createInsertActionUpdate(repeatActionType);\n }\n var update = _this6.actionUpdateFromErrors(e, repeatActionType, \"sendScheduledDelayedEvent\");\n if (update) return update;\n\n // On any other error we fall back to SendLeaveEvent (this includes hard errors from rate limiting)\n _this6.logger.warn(\"Encountered unexpected error during SendScheduledDelayedLeaveEvent. Falling back to SendLeaveEvent\", e);\n return createInsertActionUpdate(repeatActionType);\n });\n })();\n }\n sendJoinEvent() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n return yield _this7.clientSendMembership(_this7.makeMyMembership(_this7.membershipEventExpiryMs)).then(() => {\n _this7.setAndEmitProbablyLeft(false);\n _this7.state.startTime = Date.now();\n // The next update should already use twice the membershipEventExpiryTimeout\n _this7.state.expireUpdateIterations = 1;\n _this7.state.hasMemberStateEvent = true;\n _this7.resetRateLimitCounter(MembershipActionType.SendJoinEvent);\n // An UpdateExpiry action might be left over from a previous join event.\n // We can reach sendJoinEvent when the delayed leave event gets send by the HS.\n // The branch where we might have a leftover UpdateExpiry action is:\n // RestartDelayedEvent (cannot find it, server removed it)\n // -> SendDelayedEvent (send new delayed event)\n // -> SendJoinEvent (here with a still scheduled UpdateExpiry action)\n var actionsWithoutUpdateExpiry = _this7.scheduler.actions.filter(a => a.type !== MembershipActionType.UpdateExpiry &&\n // A new UpdateExpiry action with an updated will be scheduled,\n a.type !== MembershipActionType.SendJoinEvent // Manually remove the SendJoinEvent action,\n );\n return {\n replace: [...actionsWithoutUpdateExpiry,\n // To check if the delayed event is still there or got removed by inserting the stateEvent, we need to restart it.\n {\n ts: Date.now(),\n type: MembershipActionType.RestartDelayedEvent\n }, {\n ts: _this7.computeNextExpiryActionTs(_this7.state.expireUpdateIterations),\n type: MembershipActionType.UpdateExpiry\n }]\n };\n }).catch(e => {\n var update = _this7.actionUpdateFromErrors(e, MembershipActionType.SendJoinEvent, \"sendStateEvent\");\n if (update) return update;\n throw e;\n });\n })();\n }\n updateExpiryOnJoinedEvent() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n var nextExpireUpdateIteration = _this8.state.expireUpdateIterations + 1;\n return yield _this8.clientSendMembership(_this8.makeMyMembership(_this8.membershipEventExpiryMs * nextExpireUpdateIteration)).then(() => {\n // Success, we reset retries and schedule update.\n _this8.resetRateLimitCounter(MembershipActionType.UpdateExpiry);\n _this8.state.expireUpdateIterations = nextExpireUpdateIteration;\n return {\n insert: [{\n ts: _this8.computeNextExpiryActionTs(nextExpireUpdateIteration),\n type: MembershipActionType.UpdateExpiry\n }]\n };\n }).catch(e => {\n var update = _this8.actionUpdateFromErrors(e, MembershipActionType.UpdateExpiry, \"sendStateEvent\");\n if (update) return update;\n throw e;\n });\n })();\n }\n sendFallbackLeaveEvent() {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n return yield _this9.clientSendMembership({}).then(() => {\n _this9.resetRateLimitCounter(MembershipActionType.SendLeaveEvent);\n _this9.state.hasMemberStateEvent = false;\n return {\n replace: []\n };\n }).catch(e => {\n var update = _this9.actionUpdateFromErrors(e, MembershipActionType.SendLeaveEvent, \"sendStateEvent\");\n if (update) return update;\n throw e;\n });\n })();\n }\n\n // HELPERS\n /**\n * this creates `${localUserId}_${localDeviceId}_${this.slotDescription.application}${this.slotDescription.id}`\n * which is not compatible with membershipID of session type member events. They have to be `${localUserId}:${localDeviceId}`\n */\n makeMembershipStateKey(localUserId, localDeviceId) {\n // INFO_SLOT_ID_LEGACY_CASE (search for all occurances of this INFO to get the full picture)\n // Revert back to \"\" just for the state key (state keys are always legacy. we use sticky events for non legacy events)\n var application = this.slotDescription.application;\n var needsEmptyStringRoomFix = application === \"m.call\" && this.slotDescription.id === \"ROOM\";\n var slotId = needsEmptyStringRoomFix ? \"\" : this.slotDescription.id;\n var stateKey = \"\".concat(localUserId, \"_\").concat(localDeviceId, \"_\").concat(application).concat(slotId);\n if (/^org\\.matrix\\.msc(3757|3779)\\b/.exec(this.room.getVersion())) {\n return stateKey;\n } else {\n return \"_\".concat(stateKey);\n }\n }\n\n /**\n * Constructs our own membership\n * @returns Only returns `SessionMembershipData`\n */\n makeMyMembership(expires) {\n var _this$fociPreferred, _this$fociPreferred2;\n var ownMembership = this.ownMembership;\n var needsEmptyStringRoomFix = this.slotDescription.application === \"m.call\" && this.slotDescription.id === \"ROOM\";\n var focusObjects = this.rtcTransport === undefined ? {\n focus_active: {\n type: \"livekit\",\n focus_selection: \"oldest_membership\"\n },\n foci_preferred: (_this$fociPreferred = this.fociPreferred) !== null && _this$fociPreferred !== void 0 ? _this$fociPreferred : []\n } : {\n focus_active: {\n type: \"livekit\",\n focus_selection: \"multi_sfu\"\n },\n foci_preferred: [this.rtcTransport, ...((_this$fociPreferred2 = this.fociPreferred) !== null && _this$fociPreferred2 !== void 0 ? _this$fociPreferred2 : [])]\n };\n return _objectSpread(_objectSpread({\n \"application\": this.slotDescription.application,\n // INFO_SLOT_ID_LEGACY_CASE (search for all occurances of this INFO to get the full picture)\n // Revert back to \"\" just for the sending the event.\n \"call_id\": needsEmptyStringRoomFix ? \"\" : this.slotDescription.id,\n \"scope\": \"m.room\",\n \"device_id\": this.deviceId,\n // DO NOT use this.memberId here since that is the state key (using application...)\n // But for session events we use the colon seperated userId and deviceId. The SFU will automatically\n // assign those values to the media participant for those versions.\n \"membershipID\": \"\".concat(this.userId, \":\").concat(this.deviceId),\n expires,\n \"m.call.intent\": this.callIntent\n }, focusObjects), ownMembership !== undefined ? {\n created_ts: ownMembership.createdTs()\n } : undefined);\n }\n\n // Error checks and handlers\n\n /**\n * Check if its a NOT_FOUND error\n * @param error the error causing this handler check/execution\n * @returns true if its a not found error\n */\n isNotFoundError(error) {\n return error instanceof MatrixError && error.errcode === \"M_NOT_FOUND\";\n }\n\n /**\n * Check if this is a DelayExceeded timeout and update the TimeoutOverride for the next try\n * @param error the error causing this handler check/execution\n * @returns true if its a delay exceeded error and we updated the local TimeoutOverride\n */\n manageMaxDelayExceededSituation(error) {\n if (error instanceof MatrixError && error.errcode === \"M_UNKNOWN\" && error.data[\"org.matrix.msc4140.errcode\"] === \"M_MAX_DELAY_EXCEEDED\") {\n var maxDelayAllowed = error.data[\"org.matrix.msc4140.max_delay\"];\n if (typeof maxDelayAllowed === \"number\" && this.delayedLeaveEventDelayMs > maxDelayAllowed) {\n this.delayedLeaveEventDelayMsOverride = maxDelayAllowed;\n }\n this.logger.warn(\"Retry sending delayed disconnection event due to server timeout limitations:\", error);\n return true;\n }\n return false;\n }\n actionUpdateFromErrors(error, type, method) {\n var updateLimit = this.actionUpdateFromRateLimitError(error, method, type);\n if (updateLimit) return updateLimit;\n var updateNetwork = this.actionUpdateFromNetworkErrorRetry(error, type);\n if (updateNetwork) return updateNetwork;\n }\n /**\n * Check if we have a rate limit error and schedule the same action again if we dont exceed the rate limit retry count yet.\n * @param error the error causing this handler check/execution\n * @param method the method used for the throw message\n * @param type which MembershipActionType we reschedule because of a rate limit.\n * @throws If it is a rate limit error and the retry count got exceeded\n * @returns Returns true if we handled the error by rescheduling the correct next action.\n * Returns false if it is not a network error.\n */\n actionUpdateFromRateLimitError(error, method, type) {\n var _this$state$rateLimit;\n // \"Is rate limit\"-boundary\n if (!((error instanceof HTTPError || error instanceof MatrixError) && error.isRateLimitError())) {\n return undefined;\n }\n\n // retry boundary\n var rateLimitRetries = (_this$state$rateLimit = this.state.rateLimitRetries.get(type)) !== null && _this$state$rateLimit !== void 0 ? _this$state$rateLimit : 0;\n if (rateLimitRetries < this.maximumRateLimitRetryCount) {\n var resendDelay;\n var defaultMs = 5000;\n try {\n var _error$getRetryAfterM;\n resendDelay = (_error$getRetryAfterM = error.getRetryAfterMs()) !== null && _error$getRetryAfterM !== void 0 ? _error$getRetryAfterM : defaultMs;\n this.logger.info(\"Rate limited by server, retrying in \".concat(resendDelay, \"ms\"));\n } catch (e) {\n this.logger.warn(\"Error while retrieving a rate-limit retry delay, retrying after default delay of \".concat(defaultMs), e);\n resendDelay = defaultMs;\n }\n this.state.rateLimitRetries.set(type, rateLimitRetries + 1);\n return createInsertActionUpdate(type, resendDelay);\n }\n throw Error(\"Exceeded maximum retries for \" + type + \" attempts (client.\" + method + \")\", {\n cause: error\n });\n }\n\n /**\n * FIXME Don't Check the error and retry the same MembershipAction again in the configured time and for the configured retry count.\n * @param error the error causing this handler check/execution\n * @param type the action type that we need to repeat because of the error\n * @throws If it is a network error and the retry count got exceeded\n * @returns\n * Returns true if we handled the error by rescheduling the correct next action.\n * Returns false if it is not a network error.\n */\n actionUpdateFromNetworkErrorRetry(error, type) {\n var _this$state$networkEr;\n // \"Is a network error\"-boundary\n var retries = (_this$state$networkEr = this.state.networkErrorRetries.get(type)) !== null && _this$state$networkEr !== void 0 ? _this$state$networkEr : 0;\n\n // Strings for error logging\n var retryDurationString = this.networkErrorRetryMs / 1000 + \"s\";\n var retryCounterString = \"(\" + retries + \"/\" + this.maximumNetworkErrorRetryCount + \")\";\n\n // Variables for scheduling the new event\n var retryDuration = this.networkErrorRetryMs;\n if (error instanceof Error && error.name === \"AbortError\") {\n // We do not wait for the timeout on local timeouts.\n retryDuration = 0;\n this.logger.warn(\"Network local timeout error while sending event, immediate retry (\" + retryCounterString + \")\", error);\n } else if (error instanceof Error && error.message.includes(\"updating delayed event\")) {\n // TODO: We do not want error message matching here but instead the error should be a typed HTTPError\n // and be handled below automatically (the same as in the SPA case).\n //\n // The error originates because of https://github.com/matrix-org/matrix-widget-api/blob/5d81d4a26ff69e4bd3ddc79a884c9527999fb2f4/src/ClientWidgetApi.ts#L698-L701\n // uses `e` instance of HttpError (and not MatrixError)\n // The element web widget driver (only checks for MatrixError) is then failing to process (`processError`) it as a typed error: https://github.com/element-hq/element-web/blob/471712cbf06a067e5499bd5d2d7a75f693d9a12d/src/stores/widgets/StopGapWidgetDriver.ts#L711-L715\n // So it will not call: `error.asWidgetApiErrorData()` which is also missing for `HttpError`\n //\n // A proper fix would be to either find a place to convert the `HttpError` into a `MatrixError` and the `processError`\n // method to handle it as expected or to adjust `processError` to also process `HttpError`'s.\n this.logger.warn(\"delayed event update timeout error, retrying in \" + retryDurationString + \" \" + retryCounterString, error);\n } else if (error instanceof ConnectionError) {\n this.logger.warn(\"Network connection error while sending event, retrying in \" + retryDurationString + \" \" + retryCounterString, error);\n } else if ((error instanceof HTTPError || error instanceof MatrixError) && typeof error.httpStatus === \"number\" && error.httpStatus >= 500 && error.httpStatus < 600) {\n this.logger.warn(\"Server error while sending event, retrying in \" + retryDurationString + \" \" + retryCounterString, error);\n } else {\n return undefined;\n }\n\n // retry boundary\n if (retries < this.maximumNetworkErrorRetryCount) {\n this.state.networkErrorRetries.set(type, retries + 1);\n return createInsertActionUpdate(type, retryDuration);\n }\n\n // Failure\n throw Error(\"Reached maximum (\" + this.maximumNetworkErrorRetryCount + \") retries cause by: \" + error);\n }\n\n /**\n * Check if its an UnsupportedDelayedEventsEndpointError and which implies that we cannot do any delayed event logic\n * @param error The error to check\n * @returns true it its an UnsupportedDelayedEventsEndpointError\n */\n isUnsupportedDelayedEndpoint(error) {\n return error instanceof UnsupportedDelayedEventsEndpointError;\n }\n resetRateLimitCounter(type) {\n this.state.rateLimitRetries.set(type, 0);\n this.state.networkErrorRetries.set(type, 0);\n }\n get status() {\n var actions = this.scheduler.actions;\n if (actions.length === 1) {\n var type = actions[0].type;\n switch (type) {\n case MembershipActionType.SendDelayedEvent:\n case MembershipActionType.SendJoinEvent:\n return Status.Connecting;\n case MembershipActionType.UpdateExpiry:\n // where no delayed events\n return Status.Connected;\n case MembershipActionType.SendScheduledDelayedLeaveEvent:\n case MembershipActionType.SendLeaveEvent:\n return Status.Disconnecting;\n default:\n // pass through as not expected\n }\n } else if (actions.length === 2) {\n var types = actions.map(a => a.type);\n // normal state for connected with delayed events\n if ((types.includes(MembershipActionType.RestartDelayedEvent) || types.includes(MembershipActionType.SendDelayedEvent) && this.state.hasMemberStateEvent) && types.includes(MembershipActionType.UpdateExpiry)) {\n return Status.Connected;\n }\n } else if (actions.length === 3) {\n var _types = actions.map(a => a.type);\n // It is a correct connected state if we already schedule the next Restart but have not yet cleaned up\n // the current restart.\n if (_types.filter(t => t === MembershipActionType.RestartDelayedEvent).length === 2 && _types.includes(MembershipActionType.UpdateExpiry)) {\n return Status.Connected;\n }\n }\n if (!this.scheduler.running) {\n return Status.Disconnected;\n }\n this.logger.error(\"MembershipManager has an unknown state. Actions: \", actions);\n return Status.Unknown;\n }\n get probablyLeft() {\n return this.state.probablyLeft;\n }\n get delayId() {\n return this.state.delayId;\n }\n}\n\n/**\n * Implementation of the Membership manager that uses sticky events\n * rather than state events.\n */\nexport class StickyEventMembershipManager extends MembershipManager {\n constructor(joinConfig, room, clientWithSticky, sessionDescription,\n // this needs to become a uuid so that consecutive join/leaves result in a key rotation.\n // we keep it as a string for now for backwards compatibility.\n memberId, parentLogger) {\n super(joinConfig, room, clientWithSticky, sessionDescription, parentLogger);\n this.clientWithSticky = clientWithSticky;\n this.memberId = memberId;\n _defineProperty(this, \"clientSendDelayedDisconnectMembership\", () => this.clientWithSticky._unstable_sendStickyDelayedEvent(this.room.roomId, MEMBERSHIP_STICKY_DURATION_MS, {\n delay: this.delayedLeaveEventDelayMs\n }, null, EventType.RTCMembership, {\n msc4354_sticky_key: this.memberId\n }));\n _defineProperty(this, \"clientSendMembership\", myMembership => {\n return this.clientWithSticky._unstable_sendStickyEvent(this.room.roomId, MEMBERSHIP_STICKY_DURATION_MS, null, EventType.RTCMembership, _objectSpread(_objectSpread({}, myMembership), {}, {\n msc4354_sticky_key: this.memberId\n }));\n });\n }\n actionUpdateFromErrors(e, t, m) {\n var _StickyEventMembershi;\n return super.actionUpdateFromErrors(e, t, (_StickyEventMembershi = StickyEventMembershipManager.nameMap.get(m)) !== null && _StickyEventMembershi !== void 0 ? _StickyEventMembershi : \"unknown\");\n }\n\n /**\n *\n * @returns Only returns `RtcMembershipData`\n */\n makeMyMembership() {\n var ownMembership = this.ownMembership;\n var livekitTransport = isLivekitTransportConfig(this.rtcTransport) ? this.rtcTransport : undefined;\n var relationObject = ownMembership !== null && ownMembership !== void 0 && ownMembership.eventId ? {\n \"m.relation\": {\n rel_type: RelationType.Reference,\n event_id: ownMembership === null || ownMembership === void 0 ? void 0 : ownMembership.eventId\n }\n } : {};\n return _objectSpread({\n application: _objectSpread({\n type: this.slotDescription.application\n }, this.callIntent ? {\n \"m.call.intent\": this.callIntent\n } : {}),\n slot_id: computeSlotId(this.slotDescription),\n // Make sure we do not add the alias to the transport.\n // It is not needed in matrix2.0. The additional session information will be used to find the right alias on the sfu.\n rtc_transports: livekitTransport ? [{\n type: livekitTransport.type,\n livekit_service_url: livekitTransport.livekit_service_url\n }] : [],\n member: {\n device_id: this.deviceId,\n user_id: this.userId,\n id: this.memberId\n },\n versions: []\n }, relationObject);\n }\n}\n_defineProperty(StickyEventMembershipManager, \"nameMap\", new Map([[\"sendStateEvent\", \"_unstable_sendStickyEvent\"], [\"sendDelayedStateEvent\", \"_unstable_sendStickyDelayedEvent\"]]));\n//# sourceMappingURL=MembershipManager.js.map","/*\nCopyright 2025 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var KeyTransportEvents = /*#__PURE__*/function (KeyTransportEvents) {\n KeyTransportEvents[\"ReceivedKeys\"] = \"received_keys\";\n KeyTransportEvents[\"NotSupportedError\"] = \"not_supported_error\";\n return KeyTransportEvents;\n}({});\n\n/**\n * Generic interface for the transport used to share room keys.\n * Keys can be shared using different transports, e.g. to-device messages or room messages.\n */\n//# sourceMappingURL=IKeyTransport.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2025-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { getEncryptionKeyMapKey } from \"./EncryptionManager.js\";\nimport { decodeBase64, encodeBase64 } from \"../base64.js\";\nimport { KeyTransportEvents } from \"./IKeyTransport.js\";\nimport { sleep } from \"../utils.js\";\nimport { OutdatedKeyFilter } from \"./utils.js\";\nimport { computeRtcIdentityRaw } from \"./membershipData/rtc.js\";\n\n/**\n * RTCEncryptionManager is used to manage the encryption keys for a call.\n *\n * It is responsible for distributing the keys to the other participants and rotating the keys if needed.\n *\n * This manager when used with to-device transport will share the existing key only to new joiners, and rotate\n * if there is a leaver.\n *\n * XXX In the future we want to distribute a ratcheted key not the current one for new joiners.\n */\nexport class RTCEncryptionManager {\n /**\n *\n * @param ownMembership - our own membership info\n * @param getMemberships - function to get current memberships\n * @param transport - key transport (room or to-device)\n * @param statistics - statistics collector\n * @param onEncryptionKeysChanged - callback to notify the media layer of new keys\n * @param parentLogger - optional parent logger\n * @param rtcBackendIdProvider - A function to compute the rtc backend identity, exposed for testing purposes\n */\n constructor(ownMembership, getMemberships, transport,\n // Callback to notify the media layer of new keys\n onEncryptionKeysChanged, parentLogger, rtcBackendIdProvider) {\n this.ownMembership = ownMembership;\n this.getMemberships = getMemberships;\n this.transport = transport;\n this.onEncryptionKeysChanged = onEncryptionKeysChanged;\n // This is a stop-gap solution for now. The preferred way to handle this case would be instead\n // to create a NoOpEncryptionManager that does nothing and use it for the session.\n // This will be done when removing the legacy EncryptionManager.\n _defineProperty(this, \"manageMediaKeys\", false);\n _defineProperty(this, \"useHashedRtcBackendIdentity\", false);\n _defineProperty(this, \"ownRtcBackendIdentityCache\", void 0);\n /**\n * Store the key rings for each participant.\n * The encryption manager stores the keys because the application layer might not be ready yet to handle the keys.\n * The keys are stored and can be retrieved later when the application layer is ready {@link RTCEncryptionManager#getEncryptionKeys}.\n */\n _defineProperty(this, \"participantKeyRings\", new Map());\n // The current per-sender media key for this device\n _defineProperty(this, \"outboundSession\", null);\n /**\n * Ensures that there is only one distribute operation at a time for that call.\n */\n _defineProperty(this, \"currentKeyDistributionPromise\", null);\n /**\n * The time to wait before using the outbound session after it has been distributed.\n * This is to ensure that the key is delivered to all participants before it is used.\n * When creating the first key, this is set to 0 so that the key can be used immediately.\n */\n _defineProperty(this, \"useKeyDelay\", 5000);\n /**\n * We want to avoid rolling out a new outbound key when the previous one was created less than `keyRotationGracePeriodMs` milliseconds ago.\n * This is to avoid expensive key rotations when users quickly join the call in a row.\n *\n * This must be higher than `useKeyDelay` to have an effect.\n * If it is lower, the current key will always be older than the grace period.\n * @private\n */\n _defineProperty(this, \"keyRotationGracePeriodMs\", 10000);\n /**\n * If a new key distribution is being requested while one is going on, we will set this flag to true.\n * This will ensure that a new round is started after the current one.\n * @private\n */\n _defineProperty(this, \"needToEnsureKeyAgain\", false);\n /**\n * There is a possibility that keys arrive in the wrong order.\n * For example, after a quick join/leave/join, there will be 2 keys of index 0 distributed, and\n * if they are received in the wrong order, the stream won't be decryptable.\n * For that reason we keep a small buffer of keys for a limited time to disambiguate.\n * @private\n */\n _defineProperty(this, \"keyBuffer\", new OutdatedKeyFilter());\n _defineProperty(this, \"logger\", undefined);\n _defineProperty(this, \"rtcIdentityProvider\", void 0);\n _defineProperty(this, \"keysWithoutMatchingRTCMembership\", []);\n _defineProperty(this, \"onNewKeyReceived\", (membership, keyBase64Encoded, index, timestamp) => {\n var _this$logger2;\n // `manageMediaKeys` is a stop-gap solution for now. The preferred way to handle this case would be instead\n // to create a NoOpEncryptionManager that does nothing and use it for the session.\n // This will be done when removing the legacy EncryptionManager.\n if (!this.manageMediaKeys) {\n var _this$logger;\n (_this$logger = this.logger) === null || _this$logger === void 0 || _this$logger.warn(\"Received key over transport \".concat(membership.userId, \":\").concat(membership.deviceId, \" at index \").concat(index, \" but media keys are disabled\"));\n return;\n }\n (_this$logger2 = this.logger) === null || _this$logger2 === void 0 || _this$logger2.debug(\"Received key over transport \".concat(membership.userId, \":\").concat(membership.deviceId, \" at index \").concat(index));\n\n // We received a new key, notify the video layer of this new key so that it can decrypt the frames properly.\n var keyBin = decodeBase64(keyBase64Encoded);\n var candidateInboundSession = {\n key: keyBin,\n membership,\n keyIndex: index,\n creationTS: timestamp\n };\n var outdated = this.keyBuffer.isOutdated(membership, candidateInboundSession);\n if (!outdated) {\n this.addKeyToParticipant(candidateInboundSession.key, candidateInboundSession.keyIndex, candidateInboundSession.membership);\n } else {\n var _this$logger3;\n (_this$logger3 = this.logger) === null || _this$logger3 === void 0 || _this$logger3.info(\"Received an out of order key for \".concat(membership.userId, \":\").concat(membership.deviceId, \", dropping it\"));\n }\n });\n this.logger = parentLogger === null || parentLogger === void 0 ? void 0 : parentLogger.getChild(\"[EncryptionManager]\");\n this.rtcIdentityProvider = rtcBackendIdProvider !== null && rtcBackendIdProvider !== void 0 ? rtcBackendIdProvider : computeRtcIdentityRaw;\n }\n getOwnRtcBackendIdentity() {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (_this.ownRtcBackendIdentityCache) return _this.ownRtcBackendIdentityCache;\n if (_this.useHashedRtcBackendIdentity) {\n var _this$logger4;\n var _this$ownMembership = _this.ownMembership,\n userId = _this$ownMembership.userId,\n deviceId = _this$ownMembership.deviceId,\n memberId = _this$ownMembership.memberId;\n (_this$logger4 = _this.logger) === null || _this$logger4 === void 0 || _this$logger4.info(// If we see this log multiple times, we need to reconsider the precompute call of getOwnRtcBackendIdentity\n \"Computing RTC backend identity for \".concat(userId, \":\").concat(deviceId, \":\").concat(memberId, \" (SHOULD ONLY BE CALLED ONCE)\"));\n _this.ownRtcBackendIdentityCache = yield _this.rtcIdentityProvider(userId, deviceId, memberId);\n } else {\n _this.ownRtcBackendIdentityCache = \"\".concat(_this.ownMembership.userId, \":\").concat(_this.ownMembership.deviceId);\n }\n return _this.ownRtcBackendIdentityCache;\n })();\n }\n getEncryptionKeys() {\n return new Map(this.participantKeyRings);\n }\n checkKeysWithoutMatchingRTCMembership() {\n var keyInfoTemp = this.keysWithoutMatchingRTCMembership;\n this.keysWithoutMatchingRTCMembership = [];\n keyInfoTemp.forEach(keyInfo => {\n this.addKeyToParticipant(keyInfo.key, keyInfo.keyIndex, keyInfo.membership);\n });\n }\n addKeyToParticipant(key, keyIndex, membership) {\n var knownRtcMembership = this.getMemberships();\n var fullMembership = knownRtcMembership.find(member => member.userId === membership.userId && member.deviceId === membership.deviceId);\n if (!fullMembership) {\n var _this$logger5;\n (_this$logger5 = this.logger) === null || _this$logger5 === void 0 || _this$logger5.info(\"No matching RTC membership for key from \".concat(membership.userId, \":\").concat(membership.deviceId, \", delaying key addition\"));\n this.keysWithoutMatchingRTCMembership.push({\n key,\n keyIndex,\n membership\n });\n return;\n }\n this.addKeyToParticipantWithBackendIdentity(key, keyIndex, membership, fullMembership.rtcBackendIdentity);\n }\n addKeyToParticipantWithBackendIdentity(key, keyIndex, membership, rtcBackendIdentity) {\n var mapKey = getEncryptionKeyMapKey(membership);\n if (!this.participantKeyRings.has(mapKey)) {\n this.participantKeyRings.set(mapKey, []);\n }\n this.participantKeyRings.get(mapKey).push({\n key,\n keyIndex,\n membership,\n rtcBackendIdentity\n });\n this.onEncryptionKeysChanged(key, keyIndex, membership, rtcBackendIdentity);\n }\n join(joinConfig) {\n var _joinConfig$manageMed, _joinConfig$unstableS, _joinConfig$useKeyDel, _joinConfig$keyRotati, _this$logger6;\n this.manageMediaKeys = (_joinConfig$manageMed = joinConfig === null || joinConfig === void 0 ? void 0 : joinConfig.manageMediaKeys) !== null && _joinConfig$manageMed !== void 0 ? _joinConfig$manageMed : true; // default to true\n this.useHashedRtcBackendIdentity = (_joinConfig$unstableS = joinConfig === null || joinConfig === void 0 ? void 0 : joinConfig.unstableSendStickyEvents) !== null && _joinConfig$unstableS !== void 0 ? _joinConfig$unstableS : false;\n this.useKeyDelay = (_joinConfig$useKeyDel = joinConfig === null || joinConfig === void 0 ? void 0 : joinConfig.useKeyDelay) !== null && _joinConfig$useKeyDel !== void 0 ? _joinConfig$useKeyDel : 1000;\n this.keyRotationGracePeriodMs = (_joinConfig$keyRotati = joinConfig === null || joinConfig === void 0 ? void 0 : joinConfig.keyRotationGracePeriodMs) !== null && _joinConfig$keyRotati !== void 0 ? _joinConfig$keyRotati : 10000;\n this.transport.on(KeyTransportEvents.ReceivedKeys, this.onNewKeyReceived);\n void this.getOwnRtcBackendIdentity(); // precompute own identity\n\n (_this$logger6 = this.logger) === null || _this$logger6 === void 0 || _this$logger6.info(\"Joining room\");\n this.transport.start();\n }\n leave() {\n this.transport.off(KeyTransportEvents.ReceivedKeys, this.onNewKeyReceived);\n this.transport.stop();\n this.participantKeyRings.clear();\n }\n\n /**\n * Will ensure that a new key is distributed and used to encrypt our media.\n * If there is already a key distribution in progress, it will schedule a new distribution round just after the current one is completed.\n * If this function is called repeatedly while a distribution is in progress,\n * the calls will be coalesced to a single new distribution (that will start just after the current one has completed).\n */\n ensureKeyDistribution() {\n // `manageMediaKeys` is a stop-gap solution for now. The preferred way to handle this case would be instead\n // to create a NoOpEncryptionManager that does nothing and use it for the session.\n // This will be done when removing the legacy EncryptionManager.\n if (!this.manageMediaKeys) return;\n if (this.currentKeyDistributionPromise == null) {\n var _this$logger7;\n (_this$logger7 = this.logger) === null || _this$logger7 === void 0 || _this$logger7.debug(\"No active rollout, start a new one\");\n // start a rollout\n this.currentKeyDistributionPromise = this.rolloutOutboundKey().then(() => {\n var _this$logger8;\n (_this$logger8 = this.logger) === null || _this$logger8 === void 0 || _this$logger8.debug(\"Rollout completed\");\n this.currentKeyDistributionPromise = null;\n if (this.needToEnsureKeyAgain) {\n var _this$logger9;\n (_this$logger9 = this.logger) === null || _this$logger9 === void 0 || _this$logger9.debug(\"New Rollout needed\");\n this.needToEnsureKeyAgain = false;\n // rollout a new one\n this.ensureKeyDistribution();\n }\n });\n } else {\n var _this$logger0;\n // There is a rollout in progress, but a key rotation is requested (could be caused by a ownMembership change)\n // Remember that a new rotation is needed after the current one.\n (_this$logger0 = this.logger) === null || _this$logger0 === void 0 || _this$logger0.debug(\"Rollout in progress, a new rollout will be started after the current one\");\n this.needToEnsureKeyAgain = true;\n }\n }\n /**\n * Called when the ownMembership of the call changes.\n * This encryption manager is very basic, it will rotate the key everytime this is called.\n * @param oldMemberships - This parameter is not used here, but it is kept for compatibility with the interface.\n */\n onMembershipsUpdate() {\n var _this$logger1;\n var oldMemberships = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n (_this$logger1 = this.logger) === null || _this$logger1 === void 0 || _this$logger1.trace(\"onMembershipsUpdate\");\n\n // Ensure the key is distributed. This will be no-op if the key is already being distributed to everyone.\n // If there is an ongoing distribution, it will be completed before a new one is started.\n this.ensureKeyDistribution();\n // ensure key emission to the rtc backend\n this.checkKeysWithoutMatchingRTCMembership();\n }\n rolloutOutboundKey() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _this2$outboundSessio, _this2$outboundSessio2;\n var isFirstKey = _this2.outboundSession == null;\n if (isFirstKey) {\n // create the first key\n var firstKey = {\n key: _this2.generateRandomKey(),\n creationTS: Date.now(),\n sharedWith: [],\n keyId: 0\n };\n _this2.outboundSession = firstKey;\n _this2.addKeyToParticipantWithBackendIdentity(firstKey.key, firstKey.keyId, _this2.ownMembership, yield _this2.getOwnRtcBackendIdentity());\n }\n // get current memberships\n var toShareWith = _this2.getMemberships().filter(membership => {\n return membership.sender != undefined;\n }).map(membership => {\n return {\n userId: membership.sender,\n deviceId: membership.deviceId,\n membershipTs: membership.createdTs()\n };\n });\n var alreadySharedWith = (_this2$outboundSessio = (_this2$outboundSessio2 = _this2.outboundSession) === null || _this2$outboundSessio2 === void 0 ? void 0 : _this2$outboundSessio2.sharedWith) !== null && _this2$outboundSessio !== void 0 ? _this2$outboundSessio : [];\n\n // Some users might have rotate their ownMembership event (formally called fingerprint) meaning they might have\n // clear their key. Reset the `alreadySharedWith` flag for them.\n alreadySharedWith = alreadySharedWith.filter(x =>\n // If there was a member with same userId and deviceId but different membershipTs, we need to clear it\n !toShareWith.some(o => x.userId == o.userId && x.deviceId == o.deviceId && x.membershipTs != o.membershipTs));\n var anyLeft = alreadySharedWith.filter(x => !toShareWith.some(o => x.userId == o.userId && x.deviceId == o.deviceId && x.membershipTs == o.membershipTs));\n var anyJoined = toShareWith.filter(x => !alreadySharedWith.some(o => x.userId == o.userId && x.deviceId == o.deviceId && x.membershipTs == o.membershipTs));\n var toDistributeTo = [];\n var outboundKey;\n var hasKeyChanged = false;\n if (anyLeft.length > 0) {\n // We need to rotate the key\n var newOutboundKey = _this2.createNewOutboundSession();\n hasKeyChanged = true;\n toDistributeTo = toShareWith;\n outboundKey = newOutboundKey;\n } else if (anyJoined.length > 0) {\n var now = Date.now();\n var keyAge = now - _this2.outboundSession.creationTS;\n // If the current key is recently created (less than `keyRotationGracePeriodMs`), we can keep it and just distribute it to the new joiners.\n if (keyAge < _this2.keyRotationGracePeriodMs) {\n var _this2$logger;\n // keep the same key\n // XXX In the future we want to distribute a ratcheted key, not the current one\n (_this2$logger = _this2.logger) === null || _this2$logger === void 0 || _this2$logger.debug(\"New joiners detected, but the key is recent enough (age:\".concat(keyAge, \"), keeping it\"));\n toDistributeTo = anyJoined;\n outboundKey = _this2.outboundSession;\n } else {\n var _this2$logger2;\n // We need to rotate the key\n (_this2$logger2 = _this2.logger) === null || _this2$logger2 === void 0 || _this2$logger2.debug(\"New joiners detected, rotating the key\");\n var _newOutboundKey = _this2.createNewOutboundSession();\n hasKeyChanged = true;\n toDistributeTo = toShareWith;\n outboundKey = _newOutboundKey;\n }\n } else {\n // no changes\n return;\n }\n try {\n var _this2$logger3, _this2$logger4;\n (_this2$logger3 = _this2.logger) === null || _this2$logger3 === void 0 || _this2$logger3.trace(\"Sending key...\");\n yield _this2.transport.sendKey(encodeBase64(outboundKey.key), outboundKey.keyId, toDistributeTo);\n outboundKey.sharedWith.push(...toDistributeTo);\n (_this2$logger4 = _this2.logger) === null || _this2$logger4 === void 0 || _this2$logger4.trace(\"key index:\".concat(outboundKey.keyId, \" sent to \").concat(outboundKey.sharedWith.map(m => \"\".concat(m.userId, \":\").concat(m.deviceId)).join(\",\")));\n if (hasKeyChanged) {\n var _this2$logger5, _this2$logger6;\n // Delay a bit before using this key\n // It is recommended not to start using a key immediately but instead wait for a short time to make sure it is delivered.\n (_this2$logger5 = _this2.logger) === null || _this2$logger5 === void 0 || _this2$logger5.trace(\"Delay Rollout for key:\".concat(outboundKey.keyId, \"...\"));\n yield sleep(_this2.useKeyDelay);\n (_this2$logger6 = _this2.logger) === null || _this2$logger6 === void 0 || _this2$logger6.trace(\"...Delayed rollout of index:\".concat(outboundKey.keyId, \" \"));\n _this2.addKeyToParticipantWithBackendIdentity(outboundKey.key, outboundKey.keyId, _this2.ownMembership, yield _this2.getOwnRtcBackendIdentity());\n }\n } catch (err) {\n var _this2$logger7;\n (_this2$logger7 = _this2.logger) === null || _this2$logger7 === void 0 || _this2$logger7.error(\"Failed to rollout key\", err);\n }\n })();\n }\n createNewOutboundSession() {\n var _this$logger10;\n var newOutboundKey = {\n key: this.generateRandomKey(),\n creationTS: Date.now(),\n sharedWith: [],\n keyId: this.nextKeyIndex()\n };\n (_this$logger10 = this.logger) === null || _this$logger10 === void 0 || _this$logger10.info(\"creating new outbound key index:\".concat(newOutboundKey.keyId));\n // Set this new key as the current one\n this.outboundSession = newOutboundKey;\n return newOutboundKey;\n }\n nextKeyIndex() {\n if (this.outboundSession) {\n return (this.outboundSession.keyId + 1) % 256;\n }\n return 0;\n }\n generateRandomKey() {\n var key = new Uint8Array(16);\n globalThis.crypto.getRandomValues(key);\n return key;\n }\n}\n//# sourceMappingURL=RTCEncryptionManager.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2025 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { KeyTransportEvents } from \"./IKeyTransport.js\";\nimport { logger as rootLogger } from \"../logger.js\";\nimport { ClientEvent } from \"../client.js\";\nimport { EventType } from \"../@types/event.js\";\nexport class NotSupportedError extends Error {\n constructor(message) {\n super(message);\n }\n get name() {\n return \"NotSupportedError\";\n }\n}\n/**\n * ToDeviceKeyTransport is used to send MatrixRTC keys to other devices using the\n * to-device CS-API.\n */\nexport class ToDeviceKeyTransport extends TypedEventEmitter {\n setParentLogger(parentLogger) {\n this.logger = parentLogger.getChild(\"[ToDeviceKeyTransport]\");\n }\n constructor(membership, roomId, client, statistics, parentLogger) {\n super();\n this.membership = membership;\n this.roomId = roomId;\n this.client = client;\n this.statistics = statistics;\n _defineProperty(this, \"logger\", rootLogger);\n _defineProperty(this, \"onToDeviceEvent\", event => {\n if (event.getType() !== EventType.CallEncryptionKeysPrefix) {\n // Ignore this is not a call encryption event\n return;\n }\n\n // TODO: Not possible to check if the event is encrypted or not\n // see https://github.com/matrix-org/matrix-rust-sdk/issues/4883\n // if (evnt.getWireType() != EventType.RoomMessageEncrypted) {\n // // WARN: The call keys were sent in clear. Ignore them\n // logger.warn(`Call encryption keys sent in clear from: ${event.getSender()}`);\n // return;\n // }\n\n var content = this.getValidEventContent(event);\n if (!content) return;\n if (!event.getSender()) return;\n this.receiveCallKeyEvent(event.getSender(), content);\n });\n this.setParentLogger(parentLogger !== null && parentLogger !== void 0 ? parentLogger : rootLogger);\n }\n start() {\n this.client.on(ClientEvent.ToDeviceEvent, this.onToDeviceEvent);\n }\n stop() {\n this.client.off(ClientEvent.ToDeviceEvent, this.onToDeviceEvent);\n }\n sendKey(keyBase64Encoded, index, members) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var content = {\n keys: {\n index: index,\n key: keyBase64Encoded\n },\n room_id: _this.roomId,\n member: {\n claimed_device_id: _this.membership.deviceId,\n id: _this.membership.memberId\n },\n session: {\n call_id: \"\",\n application: \"m.call\",\n scope: \"m.room\"\n },\n sent_ts: Date.now()\n };\n var targets = members.map(member => {\n return {\n userId: member.userId,\n deviceId: member.deviceId\n };\n })\n // filter out me\n .filter(member => !(member.userId == _this.membership.userId && member.deviceId == _this.membership.deviceId));\n if (targets.length > 0) {\n yield _this.client.encryptAndSendToDevice(EventType.CallEncryptionKeysPrefix, targets, content).catch(error => {\n var msg = error.message;\n // This is not ideal. We would want to have a custom error type for unsupported actions.\n // This is not part of the widget API spec. Since as of now there are only two implementations:\n // Rust SDK + JS-SDK, and the JS-SDK does support to-device sending, we can assume that\n // this is a widget driver issue error message.\n if (msg.includes(\"unknown variant\") && msg.includes(\"send_to_device\") || msg.includes(\"not supported\")) {\n throw new NotSupportedError(\"The widget driver does not support to-device encryption\");\n }\n });\n _this.statistics.counters.roomEventEncryptionKeysSent += 1;\n } else {\n _this.logger.warn(\"No targets found for sending key\");\n }\n })();\n }\n receiveCallKeyEvent(fromUser, content) {\n var _content$member$id;\n // The event has already been validated at this point.\n\n this.statistics.counters.roomEventEncryptionKeysReceived += 1;\n\n // What is this, and why is it needed?\n // Also to device events do not have an origin server ts\n var now = Date.now();\n var age = now - (typeof content.sent_ts === \"number\" ? content.sent_ts : now);\n this.statistics.totals.roomEventEncryptionKeysReceivedTotalAge += age;\n var hardcodedMemberIdAlternative = \"\".concat(fromUser, \":\").concat(content.member.claimed_device_id);\n this.emit(KeyTransportEvents.ReceivedKeys,\n // TODO userId this is claimed information, deviceId is claimed information\n {\n userId: fromUser,\n deviceId: content.member.claimed_device_id,\n memberId: (_content$member$id = content.member.id) !== null && _content$member$id !== void 0 ? _content$member$id : hardcodedMemberIdAlternative\n }, content.keys.key, content.keys.index, now);\n }\n getValidEventContent(event) {\n var content = event.getContent();\n var roomId = content.room_id;\n if (!roomId) {\n // Invalid event\n this.logger.warn(\"Malformed Event: invalid call encryption keys event, no roomId\");\n return;\n }\n if (roomId !== this.roomId) {\n this.logger.warn(\"Malformed Event: Mismatch roomId\");\n return;\n }\n if (!content.keys || !content.keys.key || typeof content.keys.index !== \"number\") {\n this.logger.warn(\"Malformed Event: Missing keys field\");\n return;\n }\n if (!content.member || !content.member.claimed_device_id) {\n this.logger.warn(\"Malformed Event: Missing claimed_device_id\");\n return;\n }\n\n // TODO check for session related fields once the to-device encryption uses the new format.\n return content;\n }\n}\n//# sourceMappingURL=ToDeviceKeyTransport.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2023 - 2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger as rootLogger } from \"../logger.js\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { EventTimeline } from \"../models/event-timeline.js\";\nimport { EventType, RelationType } from \"../@types/event.js\";\nimport { KnownMembership } from \"../@types/membership.js\";\nimport { CallMembership } from \"./CallMembership.js\";\nimport { RoomStateEvent } from \"../models/room-state.js\";\nimport { MembershipManager, StickyEventMembershipManager } from \"./MembershipManager.js\";\nimport { logDurationSync } from \"../utils.js\";\nimport { MembershipManagerEvent } from \"./IMembershipManager.js\";\nimport { RTCEncryptionManager } from \"./RTCEncryptionManager.js\";\nimport { ToDeviceKeyTransport } from \"./ToDeviceKeyTransport.js\";\nimport { TypedReEmitter } from \"../ReEmitter.js\";\nimport { RoomStickyEventsEvent } from \"../models/room-sticky-events.js\";\nimport { computeSlotId } from \"./utils.js\";\n\n/**\n * Events emitted by MatrixRTCSession\n */\nexport var MatrixRTCSessionEvent = /*#__PURE__*/function (MatrixRTCSessionEvent) {\n // A member joined, left, or updated a property of their membership.\n MatrixRTCSessionEvent[\"MembershipsChanged\"] = \"memberships_changed\";\n // We joined or left the session: our own local idea of whether we are joined,\n // separate from MembershipsChanged, ie. independent of whether our member event\n // has successfully gone through.\n MatrixRTCSessionEvent[\"JoinStateChanged\"] = \"join_state_changed\";\n // The key used to encrypt media has changed\n MatrixRTCSessionEvent[\"EncryptionKeyChanged\"] = \"encryption_key_changed\";\n /** The membership manager had to shut down caused by an unrecoverable error */\n MatrixRTCSessionEvent[\"MembershipManagerError\"] = \"membership_manager_error\";\n /** The RTCSession did send a call notification caused by joining the call as the first member */\n MatrixRTCSessionEvent[\"DidSendCallNotification\"] = \"did_send_call_notification\";\n return MatrixRTCSessionEvent;\n}({});\n\n// The names follow these principles:\n// - we use the technical term delay if the option is related to delayed events.\n// - we use delayedLeaveEvent if the option is related to the delayed leave event.\n// - we use membershipEvent if the option is related to the rtc member state event.\n// - we use the technical term expiry if the option is related to the expiry field of the membership state event.\n// - we use a `Ms` postfix if the option is a duration to avoid using words like:\n// `time`, `duration`, `delay`, `timeout`... that might be mistaken/confused with technical terms.\n\nvar DEFAULT_SESSION_MEMBERSHIPS_FOR_SLOT_OPTS = {\n listenForStickyEvents: true,\n listenForMemberStateEvents: true\n};\n\n/**\n * A MatrixRTCSession manages the membership & properties of a MatrixRTC session.\n * This class doesn't deal with media at all, just membership & properties of a session.\n */\nexport class MatrixRTCSession extends TypedEventEmitter {\n get membershipStatus() {\n var _this$membershipManag;\n return (_this$membershipManag = this.membershipManager) === null || _this$membershipManag === void 0 ? void 0 : _this$membershipManag.status;\n }\n get probablyLeft() {\n var _this$membershipManag2;\n return (_this$membershipManag2 = this.membershipManager) === null || _this$membershipManag2 === void 0 ? void 0 : _this$membershipManag2.probablyLeft;\n }\n get delayId() {\n var _this$membershipManag3;\n return (_this$membershipManag3 = this.membershipManager) === null || _this$membershipManag3 === void 0 ? void 0 : _this$membershipManag3.delayId;\n }\n\n /**\n * The callId (sessionId) of the call.\n *\n * It can be undefined since the callId is only known once the first membership joins.\n * The callId is the property that, per definition, groups memberships into one call.\n * @deprecated use `slotId` instead.\n */\n get callId() {\n var _this$slotDescription;\n return (_this$slotDescription = this.slotDescription) === null || _this$slotDescription === void 0 ? void 0 : _this$slotDescription.id;\n }\n /**\n * The slotId of the call.\n * `{application}#{appSpecificId}`\n * It can be undefined since the slotId is only known once the first membership joins.\n * The slotId is the property that, per definition, groups memberships into one call.\n */\n get slotId() {\n return computeSlotId(this.slotDescription);\n }\n\n /**\n * Returns all the call memberships for a room that match the provided `sessionDescription`,\n * oldest first.\n *\n * By default, this will return *both* sticky and member state events.\n */\n static sessionMembershipsForSlot(room, slotDescription) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var options = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : DEFAULT_SESSION_MEMBERSHIPS_FOR_SLOT_OPTS;\n var logger = rootLogger.getChild(\"[MatrixRTCSession \".concat(room.roomId, \" \").concat(slotDescription.application, \"#\").concat(slotDescription.id, \"]\"));\n var callMemberEvents = collectMembersEvents(room, options, logger);\n var callMemberships = yield computeBackendIdentityAndVerifyMemberEvents(room, callMemberEvents, slotDescription, logger);\n callMemberships.sort((a, b) => a.createdTs() - b.createdTs());\n if (callMemberships.length > 1) {\n logger.debug(\"Call memberships in room \".concat(room.roomId, \", in order: \"), callMemberships.map(m => [m.createdTs(), m.userId]));\n }\n return callMemberships;\n })();\n }\n\n /**\n * Return the MatrixRTC session for the room.\n * This returned session can be used to find out if there are active sessions\n * for the requested room and `slotDescription`.\n */\n static sessionForSlot(client, room, slotDescription, opts) {\n return new MatrixRTCSession(client, room, slotDescription, opts);\n }\n\n /**\n * WARN: this can in theory only be a subset of the room with the properties required by\n * this class.\n * Outside of tests this most likely will be a full room, however.\n * @deprecated Relying on a full Room object being available here is an anti-pattern. You should be tracking\n * the room object in your own code and passing it in when needed.\n */\n get room() {\n return this.roomSubset;\n }\n\n /**\n * This constructs a room session. When using MatrixRTC inside the js-sdk this is expected\n * to be used with the MatrixRTCSessionManager exclusively.\n *\n * In cases where you don't use the js-sdk but build on top of another Matrix stack this class can be used standalone\n * to manage a joined MatrixRTC session.\n *\n * @param client A subset of the {@link MatrixClient} that lets the session interact with the Matrix room.\n * @param roomSubset The room this session is attached to. A subset of a js-sdk Room that the session needs.\n * @param slotDescription The slot description is a virtual address where participants are allowed to meet.\n * This session will only manage memberships that match this slot description.Sessions are distinct if any of\n * those properties are distinct: `roomSubset.roomId`, `slotDescription.application`, `slotDescription.id`.\n * @param calculateMembershipsOpts - Options to configure how memberships are calculated for this session.\n */\n constructor(client, roomSubset, slotDescription, calculateMembershipsOpts) {\n var _this;\n super();\n _this = this;\n this.client = client;\n this.roomSubset = roomSubset;\n this.slotDescription = slotDescription;\n this.calculateMembershipsOpts = calculateMembershipsOpts;\n _defineProperty(this, \"membershipManager\", void 0);\n _defineProperty(this, \"encryptionManager\", void 0);\n _defineProperty(this, \"joinConfig\", void 0);\n _defineProperty(this, \"logger\", void 0);\n _defineProperty(this, \"pendingNotificationToSend\", void 0);\n /**\n * This timeout is responsible to track any expiration. We need to know when we have to start\n * to ignore other call members. There is no callback for this. This timeout will always be configured to\n * emit when the next membership expires.\n */\n _defineProperty(this, \"expiryTimeout\", void 0);\n _defineProperty(this, \"memberships\", []);\n /**\n * Resolves when the session has calculated the initial membership of the session.\n */\n _defineProperty(this, \"initialMembershipCalculated\", void 0);\n /**\n * Does membership need to be recalculated? This is set to false upon\n * recalculation.\n */\n _defineProperty(this, \"membershipNeedsRecalculation\", false);\n /**\n * The statistics for this session.\n */\n _defineProperty(this, \"statistics\", {\n counters: {\n roomEventEncryptionKeysSent: 0,\n roomEventEncryptionKeysReceived: 0\n },\n totals: {\n roomEventEncryptionKeysReceivedTotalAge: 0\n }\n });\n _defineProperty(this, \"reEmitter\", new TypedReEmitter(this));\n /**\n * Call this when the Matrix room members have changed.\n */\n _defineProperty(this, \"onRoomMemberUpdate\", () => {\n void this.ensureRecalculateSessionMembers();\n });\n /**\n * Call this when a sticky event update has occured.\n */\n _defineProperty(this, \"onStickyEventUpdate\", (added, updated, removed) => {\n if ([...added, ...removed, ...updated.flatMap(v => [v.current, v.previous])].some(e => e.getType() === EventType.RTCMembership)) {\n void this.ensureRecalculateSessionMembers();\n }\n });\n /**\n * Call this when something changed that may impacts the current MatrixRTC members in this session.\n */\n // We allow this name schema since this function should only be used for testing purposes.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _defineProperty(this, \"_onRTCSessionMemberUpdate\", /*#__PURE__*/_asyncToGenerator(function* () {\n yield _this.recalculateSessionMembers();\n }));\n // helper variables to make sure we do not have parallel running recalculations.\n _defineProperty(this, \"recalculateSessionMembersPromise\", Promise.resolve());\n /**\n * Call this when anything that could impact rtc memberships has changed: Room Members or RTC members.\n *\n * Examines the latest call memberships and handles any encryption key sending or rotation that is needed.\n *\n * This function should be called when the room members or call memberships might have changed.\n */\n _defineProperty(this, \"recalculateSessionMembers\", /*#__PURE__*/_asyncToGenerator(function* () {\n var _this$encryptionManag;\n // Clear the flag.\n _this.membershipNeedsRecalculation = false;\n var oldMemberships = _this.memberships;\n _this.memberships = yield MatrixRTCSession.sessionMembershipsForSlot(_this.room, _this.slotDescription, _this.calculateMembershipsOpts);\n var changed = oldMemberships.length != _this.memberships.length || oldMemberships.some((m, i) => !CallMembership.equal(m, _this.memberships[i]));\n if (changed) {\n var _this$membershipManag4, _this$membershipManag5;\n _this.logger.info(\"Memberships for call in room \".concat(_this.roomSubset.roomId, \" have changed: emitting (\").concat(_this.memberships.length, \" members)\"));\n logDurationSync(_this.logger, \"emit MatrixRTCSessionEvent.MembershipsChanged\", () => {\n _this.emit(MatrixRTCSessionEvent.MembershipsChanged, oldMemberships, _this.memberships);\n });\n void ((_this$membershipManag4 = _this.membershipManager) === null || _this$membershipManag4 === void 0 ? void 0 : _this$membershipManag4.onRTCSessionMemberUpdate(_this.memberships));\n // The `ownMembership` will be set when calling `onRTCSessionMemberUpdate`.\n var ownMembership = (_this$membershipManag5 = _this.membershipManager) === null || _this$membershipManag5 === void 0 ? void 0 : _this$membershipManag5.ownMembership;\n if (_this.pendingNotificationToSend && ownMembership && oldMemberships.length === 0) {\n var _this$joinConfig;\n // If we're the first member in the call, we're responsible for\n // sending the notification event\n if (ownMembership.eventId && (_this$joinConfig = _this.joinConfig) !== null && _this$joinConfig !== void 0 && _this$joinConfig.notificationType) {\n _this.sendCallNotify(ownMembership.eventId, _this.joinConfig.notificationType, ownMembership.callIntent);\n } else {\n _this.logger.warn(\"Own membership eventId is undefined, cannot send call notification\");\n }\n }\n // If anyone else joins the session it is no longer our responsibility to send the notification.\n // (If we were the joiner we already did sent the notification in the block above.)\n if (_this.memberships.length > 0) _this.pendingNotificationToSend = undefined;\n } else {\n _this.logger.debug(\"No membership changes detected for room \".concat(_this.roomSubset.roomId));\n }\n // This also needs to be done if `changed` = false\n // A member might have updated their fingerprint (created_ts)\n void ((_this$encryptionManag = _this.encryptionManager) === null || _this$encryptionManag === void 0 ? void 0 : _this$encryptionManag.onMembershipsUpdate(oldMemberships));\n _this.setExpiryTimer();\n }));\n this.logger = rootLogger.getChild(\"[MatrixRTCSession \".concat(roomSubset.roomId, \" \").concat(slotDescription.application, \"#\").concat(slotDescription.id, \"]\"));\n this.roomSubset.on(RoomStateEvent.Members, this.onRoomMemberUpdate);\n this.roomSubset.on(RoomStickyEventsEvent.Update, this.onStickyEventUpdate);\n this.initialMembershipCalculated = this.ensureRecalculateSessionMembers();\n this.setExpiryTimer();\n }\n /*\n * Returns true if we intend to be participating in the MatrixRTC session.\n * This is determined by checking if the relativeExpiry has been set.\n */\n isJoined() {\n var _this$membershipManag6, _this$membershipManag7;\n return (_this$membershipManag6 = (_this$membershipManag7 = this.membershipManager) === null || _this$membershipManag7 === void 0 ? void 0 : _this$membershipManag7.isJoined()) !== null && _this$membershipManag6 !== void 0 ? _this$membershipManag6 : false;\n }\n\n /**\n * Performs cleanup & removes timers for client shutdown\n */\n stop() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _this2$membershipMana;\n yield (_this2$membershipMana = _this2.membershipManager) === null || _this2$membershipMana === void 0 ? void 0 : _this2$membershipMana.leave(1000);\n if (_this2.expiryTimeout) {\n clearTimeout(_this2.expiryTimeout);\n _this2.expiryTimeout = undefined;\n }\n _this2.roomSubset.off(RoomStateEvent.Members, _this2.onRoomMemberUpdate);\n _this2.roomSubset.off(RoomStickyEventsEvent.Update, _this2.onStickyEventUpdate);\n })();\n }\n /**\n * Announces this user and device as joined to the MatrixRTC session,\n * and continues to update the membership event to keep it valid until\n * leaveRoomSession() is called\n * This will not subscribe to updates: remember to call subscribe() separately if\n * desired.\n * This method will return immediately and the session will be joined in the background.\n * @param ownMembershipIdentity the identity of the user and device joining the session.\n * This will be put into the content.member.\n * @param fociPreferred the list of preferred foci to use in the joined RTC membership event.\n * If multiSfuFocus is set, this is only needed if this client wants to publish to multiple transports simultaneously.\n * @param multiSfuFocus the active focus to use in the joined RTC membership event. Setting this implies the\n * membership manager will operate in a multi-SFU connection mode. If `undefined`, an `oldest_membership`\n * transport selection will be used instead.\n * @param joinConfig - Additional configuration for the joined session.\n */\n joinRTCSession(ownMembershipIdentity, fociPreferred, multiSfuFocus, joinConfig) {\n var _this$joinConfig2;\n if (this.isJoined()) {\n this.logger.info(\"Already joined to session in room \".concat(this.roomSubset.roomId, \": ignoring join call\"));\n return;\n } else {\n // Create MembershipManager and pass the RTCSession logger (with room id info)\n this.membershipManager = joinConfig !== null && joinConfig !== void 0 && joinConfig.unstableSendStickyEvents ? new StickyEventMembershipManager(joinConfig, this.roomSubset, this.client, this.slotDescription, ownMembershipIdentity.memberId, this.logger) : new MembershipManager(joinConfig, this.roomSubset, this.client, this.slotDescription, this.logger);\n this.reEmitter.reEmit(this.membershipManager, [MembershipManagerEvent.ProbablyLeft, MembershipManagerEvent.StatusChanged, MembershipManagerEvent.DelayIdChanged]);\n // Create Encryption manager\n var _ref3 = [this.roomSubset, this.client, this.statistics],\n room = _ref3[0],\n _client = _ref3[1],\n statistics = _ref3[2];\n var transport = new ToDeviceKeyTransport(ownMembershipIdentity, room.roomId, _client, statistics);\n this.encryptionManager = new RTCEncryptionManager(ownMembershipIdentity, () => this.memberships, transport, (keyBin, encryptionKeyIndex, membership, rtcBackendIdentity) => {\n this.emit(MatrixRTCSessionEvent.EncryptionKeyChanged, keyBin, encryptionKeyIndex, membership, rtcBackendIdentity);\n }, this.logger);\n }\n this.joinConfig = joinConfig;\n this.pendingNotificationToSend = (_this$joinConfig2 = this.joinConfig) === null || _this$joinConfig2 === void 0 ? void 0 : _this$joinConfig2.notificationType;\n\n // Join!\n this.membershipManager.join(fociPreferred, multiSfuFocus, e => {\n this.logger.error(\"MembershipManager encountered an unrecoverable error: \", e);\n this.emit(MatrixRTCSessionEvent.MembershipManagerError, e);\n this.emit(MatrixRTCSessionEvent.JoinStateChanged, this.isJoined());\n });\n this.encryptionManager.join(joinConfig);\n this.emit(MatrixRTCSessionEvent.JoinStateChanged, true);\n }\n\n /**\n *\n * @param fociPreferred\n * @param multiSfuFocus\n * @param joinConfig\n * @deprecated use the joinRTCSession method instead\n */\n joinRoomSession(fociPreferred, multiSfuFocus, joinConfig) {\n var userId = this.client.getUserId(),\n deviceId = this.client.getDeviceId();\n // TODO this wants to become a UUID\n var memberId = \"\".concat(userId, \":\").concat(deviceId);\n this.joinRTCSession({\n userId,\n deviceId,\n memberId\n }, fociPreferred, multiSfuFocus, joinConfig);\n }\n\n /**\n * Announces this user and device as having left the MatrixRTC session\n * and stops scheduled updates.\n * This will not unsubscribe from updates: remember to call unsubscribe() separately if\n * desired.\n * The membership update required to leave the session will retry if it fails.\n * Without network connection the promise will never resolve.\n * A timeout can be provided so that there is a guarantee for the promise to resolve.\n * @returns Whether the membership update was attempted and did not time out.\n */\n leaveRoomSession() {\n var _arguments2 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : undefined;\n if (!_this3.isJoined()) {\n _this3.logger.info(\"Not joined to session in room \".concat(_this3.roomSubset.roomId, \": ignoring leave call\"));\n return false;\n }\n _this3.logger.info(\"Leaving call session in room \".concat(_this3.roomSubset.roomId));\n _this3.encryptionManager.leave();\n var leavePromise = _this3.membershipManager.leave(timeout);\n _this3.emit(MatrixRTCSessionEvent.JoinStateChanged, false);\n return yield leavePromise;\n })();\n }\n /**\n * This returns the focus in use by the oldest membership.\n * Do not use since this might be just the focus for the oldest membership. others might use a different focus.\n * @deprecated use `member.getTransport(session.getOldestMembership())` instead for the specific member you want to get the focus for.\n */\n getFocusInUse() {\n var oldestMembership = this.getOldestMembership();\n return oldestMembership === null || oldestMembership === void 0 ? void 0 : oldestMembership.getTransport(oldestMembership);\n }\n getOldestMembership() {\n return this.memberships[0];\n }\n\n /**\n * Get the call intent for the current call, based on what members are advertising. If one or more\n * members disagree on the current call intent, or nobody specifies one then `undefined` is returned.\n *\n * If all members that specify a call intent agree, that value is returned.\n * @returns A call intent, or `undefined` if no consensus or not given.\n */\n getConsensusCallIntent() {\n var _this$memberships$fin;\n var getFirstCallIntent = (_this$memberships$fin = this.memberships.find(m => !!m.callIntent)) === null || _this$memberships$fin === void 0 ? void 0 : _this$memberships$fin.callIntent;\n if (!getFirstCallIntent) {\n return undefined;\n }\n if (this.memberships.every(m => !m.callIntent || m.callIntent === getFirstCallIntent)) {\n return getFirstCallIntent;\n }\n return undefined;\n }\n updateCallIntent(callIntent) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var _this4$membershipMana, _this4$membershipMana2;\n var myMembership = (_this4$membershipMana = _this4.membershipManager) === null || _this4$membershipMana === void 0 ? void 0 : _this4$membershipMana.ownMembership;\n if (!myMembership) {\n throw Error(\"Not connected yet\");\n }\n yield (_this4$membershipMana2 = _this4.membershipManager) === null || _this4$membershipMana2 === void 0 ? void 0 : _this4$membershipMana2.updateCallIntent(callIntent);\n })();\n }\n\n /**\n * Re-emit an EncryptionKeyChanged event for each tracked encryption key. This can be used to export\n * the keys.\n */\n reemitEncryptionKeys() {\n var _this$encryptionManag2;\n (_this$encryptionManag2 = this.encryptionManager) === null || _this$encryptionManag2 === void 0 || _this$encryptionManag2.getEncryptionKeys().forEach((keyRing, key) => {\n keyRing.forEach(keyInfo => {\n this.emit(MatrixRTCSessionEvent.EncryptionKeyChanged, keyInfo.key, keyInfo.keyIndex, keyInfo.membership, keyInfo.rtcBackendIdentity);\n });\n });\n }\n\n /**\n * Sets a timer for the soonest membership expiry\n */\n setExpiryTimer() {\n if (this.expiryTimeout) {\n clearTimeout(this.expiryTimeout);\n this.expiryTimeout = undefined;\n }\n var soonestExpiry;\n for (var membership of this.memberships) {\n var thisExpiry = membership.getMsUntilExpiry();\n // If getMsUntilExpiry is undefined we have a MSC4143 (MatrixRTC) compliant event - it never expires\n // but will be reliably resent on disconnect.\n if (thisExpiry !== undefined && (soonestExpiry === undefined || thisExpiry < soonestExpiry)) {\n soonestExpiry = thisExpiry;\n }\n }\n if (soonestExpiry != undefined) {\n this.expiryTimeout = setTimeout(() => void this.ensureRecalculateSessionMembers(), soonestExpiry);\n }\n }\n\n /**\n * Sends notification events to indiciate the call has started.\n * Note: This does not return a promise, instead scheduling the notification events to be sent.\n * @param parentEventId Event id linking to your RTC call membership event.\n * @param notificationType The type of notification to send\n * @param callIntent The type of call this is (e.g. \"audio\").\n */\n sendCallNotify(parentEventId, notificationType, callIntent) {\n var _this5 = this;\n var sendNotificationEvent = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* () {\n var content = {\n \"m.mentions\": {\n user_ids: [],\n room: true\n },\n \"notification_type\": notificationType,\n \"m.relates_to\": {\n event_id: parentEventId,\n rel_type: RelationType.Reference\n },\n \"sender_ts\": Date.now(),\n \"lifetime\": 30000 // 30 seconds\n };\n if (callIntent) {\n content[\"m.call.intent\"] = callIntent;\n }\n var response = yield _this5.client.sendEvent(_this5.roomSubset.roomId, EventType.RTCNotification, content);\n return {\n response,\n content\n };\n });\n return function sendNotificationEvent() {\n return _ref4.apply(this, arguments);\n };\n }();\n void sendNotificationEvent().then(notification => {\n // Join event_id and origin event content\n var newResult = _objectSpread(_objectSpread({}, notification.response), notification.content);\n this.emit(MatrixRTCSessionEvent.DidSendCallNotification, newResult);\n }).catch(_ref5 => {\n var _ref6 = _slicedToArray(_ref5, 2),\n errorLegacy = _ref6[0],\n errorNew = _ref6[1];\n return this.logger.error(\"Failed to send call notification\", errorLegacy, errorNew);\n });\n }\n /**\n * Ensures that membership is recalculated when the state of the session may have changed.\n * Also ensures that only one recalculation is made at a time.\n * @returns A promise resolving when the state has been recalculated.\n */\n ensureRecalculateSessionMembers() {\n if (this.membershipNeedsRecalculation) {\n // We have already requested recalcuation, don't attempt a new one.\n return this.recalculateSessionMembersPromise;\n }\n this.membershipNeedsRecalculation = true;\n // Chain the recalculation.\n this.recalculateSessionMembersPromise = this.recalculateSessionMembersPromise.then(() => this.recalculateSessionMembers(), () => this.recalculateSessionMembers());\n return this.recalculateSessionMembersPromise;\n }\n}\n\n/// Private helpers\nfunction computeBackendIdentityAndVerifyMemberEvents(_x, _x2, _x3, _x4) {\n return _computeBackendIdentityAndVerifyMemberEvents.apply(this, arguments);\n}\nfunction _computeBackendIdentityAndVerifyMemberEvents() {\n _computeBackendIdentityAndVerifyMemberEvents = _asyncToGenerator(function* (room, callMemberEvents, slotDescription, logger) {\n var callMemberships = [];\n for (var memberEvent of callMemberEvents) {\n var content = memberEvent.getContent();\n\n // Quick filter to avoid unneeded processing of invalid events or left events.\n if (!quickFilterNonRelevantContents(content, logger)) {\n continue;\n }\n try {\n var membership = yield CallMembership.parseFromEvent(memberEvent);\n if (isValidMembership(membership, room, slotDescription, logger)) {\n callMemberships.push(membership);\n }\n } catch (e) {\n logger.warn(\"Couldn't construct call membership: \", e);\n }\n }\n return callMemberships;\n });\n return _computeBackendIdentityAndVerifyMemberEvents.apply(this, arguments);\n}\nfunction quickFilterNonRelevantContents(content, logger) {\n // Ignore sticky keys for the count\n var eventKeysCount = Object.keys(content).filter(k => k !== \"msc4354_sticky_key\").length;\n // Don't even bother about empty events (saves us from costly type/\"key in\" checks in bigger rooms)\n if (eventKeysCount === 0) return false;\n\n // We first decide if it's a MSC4143 event (per device state key)\n if (eventKeysCount > 1 && \"application\" in content) {\n // We have a MSC4143 event membership event with a proper joined content\n return true;\n } else if (eventKeysCount === 1 && \"memberships\" in content) {\n // Events used to have this format in the past, but are now deprecated.\n // Given that state events ~cannot be deleted, there can be some remaining events in the room, just ignore them.\n return false;\n } else {\n // Invalid or left content\n return false;\n }\n}\nfunction isValidMembership(membership, room, slotDescription, logger) {\n var _membership$userId;\n if (membership.slotDescription.id !== slotDescription.id) {\n logger.info(\"Ignoring membership of user \".concat(membership.userId, \" for a different slot. Theirs: \").concat(JSON.stringify(membership.slotDescription), \", Expected: \").concat(JSON.stringify(slotDescription)));\n return false;\n }\n if (membership.isExpired()) {\n logger.info(\"Ignoring expired device membership \".concat(membership.userId, \"/\").concat(membership.deviceId));\n return false;\n }\n if (!room.hasMembershipState((_membership$userId = membership.userId) !== null && _membership$userId !== void 0 ? _membership$userId : \"\", KnownMembership.Join)) {\n logger.info(\"Ignoring membership of user \".concat(membership.userId, \" who is not in the room.\"));\n return false;\n }\n return true;\n}\n\n/**\n * Collects the raw member events from room state and sticky store.\n */\nfunction collectMembersEvents(room, options, logger) {\n var listenForStickyEvents = options.listenForStickyEvents,\n listenForMemberStateEvents = options.listenForMemberStateEvents;\n var callMemberEvents = [];\n if (listenForStickyEvents) {\n // prefill with sticky events\n callMemberEvents = [...room._unstable_getStickyEvents()].filter(e => e.getType() === EventType.RTCMembership);\n }\n if (listenForMemberStateEvents) {\n var roomState = room.getLiveTimeline().getState(EventTimeline.FORWARDS);\n if (!roomState) {\n logger.warn(\"Couldn't get state for room \" + room.roomId + \"using empty membership array\");\n return [];\n }\n var callMemberStateEvents = roomState.getStateEvents(EventType.GroupCallMemberPrefix);\n callMemberEvents = callMemberEvents.concat(callMemberStateEvents.filter(callMemberStateEvent => !callMemberEvents.some(\n // only care about state events which have keys which we have not yet seen in the sticky events.\n // TODO: I believe this can discard a joined state event if there is a matching left sticky event.\n stickyEvent => stickyEvent.getContent().msc4354_sticky_key === callMemberStateEvent.getStateKey())));\n }\n return callMemberEvents;\n}\n//# sourceMappingURL=MatrixRTCSession.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023-2026 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { ClientEvent } from \"../client.js\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nimport { RoomStateEvent } from \"../models/room-state.js\";\nimport { MatrixRTCSession } from \"./MatrixRTCSession.js\";\nimport { EventType } from \"../@types/event.js\";\nimport { computeSlotId } from \"./utils.js\";\nexport var MatrixRTCSessionManagerEvents = /*#__PURE__*/function (MatrixRTCSessionManagerEvents) {\n // A member has joined the MatrixRTC session, creating an active session in a room where there wasn't previously\n MatrixRTCSessionManagerEvents[\"SessionStarted\"] = \"session_started\";\n // All participants have left a given MatrixRTC session.\n MatrixRTCSessionManagerEvents[\"SessionEnded\"] = \"session_ended\";\n return MatrixRTCSessionManagerEvents;\n}({});\n/**\n * Holds all active MatrixRTC session objects and creates new ones as events arrive.\n * One `MatrixRTCSessionManager` is required for each MatrixRTC sessionDescription (application, session id) that the client wants to support.\n * If no application type is specified in the constructor, the default is \"m.call\".\n *\n * This interface is UNSTABLE and may change without warning.\n */\nexport class MatrixRTCSessionManager extends TypedEventEmitter {\n constructor(rootLogger, client) {\n var slotDescription = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n application: \"m.call\",\n id: \"ROOM\"\n };\n super();\n this.client = client;\n this.slotDescription = slotDescription;\n // All the room-scoped sessions we know about. This will include any where the app\n // has queried for the MatrixRTC sessions in a room, whether it's ever had any members\n // or not). We keep a (lazily created) session object for every room to ensure that there\n // is only ever one single room session object for any given room for the lifetime of the\n // client: that way there can never be any code holding onto a stale object that is no\n // longer the correct session object for the room.\n _defineProperty(this, \"roomSessions\", new Map());\n _defineProperty(this, \"logger\", void 0);\n _defineProperty(this, \"onRoom\", room => {\n void this.refreshRoom(room);\n });\n _defineProperty(this, \"onEvent\", event => {\n if (!event.unstableStickyExpiresAt) return; // Not sticky, not interested.\n\n if (event.getType() !== EventType.RTCMembership) return;\n var room = this.client.getRoom(event.getRoomId());\n if (!room) return;\n void this.refreshRoom(room);\n });\n _defineProperty(this, \"onRoomState\", event => {\n if (event.getType() !== EventType.GroupCallMemberPrefix) {\n return;\n }\n var room = this.client.getRoom(event.getRoomId());\n if (!room) {\n this.logger.error(\"Got room state event for unknown room \".concat(event.getRoomId(), \"!\"));\n return;\n }\n void this.refreshRoom(room);\n });\n this.logger = rootLogger.getChild(\"[MatrixRTCSessionManager \".concat(computeSlotId(slotDescription), \"]\"));\n }\n start() {\n // We shouldn't need to null-check here, but matrix-client.spec.ts mocks getRooms\n // returning nothing, and breaks tests if you change it to return an empty array :'(\n for (var room of (_this$client$getRooms = this.client.getRooms()) !== null && _this$client$getRooms !== void 0 ? _this$client$getRooms : []) {\n var _this$client$getRooms;\n var session = MatrixRTCSession.sessionForSlot(this.client, room, this.slotDescription);\n if (session.memberships.length > 0) {\n this.roomSessions.set(room.roomId, session);\n }\n }\n this.client.on(ClientEvent.Room, this.onRoom);\n this.client.on(ClientEvent.Event, this.onEvent);\n this.client.on(RoomStateEvent.Events, this.onRoomState);\n }\n stop() {\n for (var sess of this.roomSessions.values()) {\n void sess.stop();\n }\n this.roomSessions.clear();\n this.client.off(ClientEvent.Room, this.onRoom);\n this.client.off(ClientEvent.Event, this.onEvent);\n this.client.off(RoomStateEvent.Events, this.onRoomState);\n }\n\n /**\n * Gets the main MatrixRTC session for a room, or undefined if there is\n * no current session\n */\n getActiveRoomSession(room) {\n return this.roomSessions.get(room.roomId);\n }\n\n /**\n * Gets the main MatrixRTC session for a room, returning an empty session\n * if no members are currently participating\n */\n getRoomSession(room) {\n if (!this.roomSessions.has(room.roomId)) {\n this.roomSessions.set(room.roomId, MatrixRTCSession.sessionForSlot(this.client, room, this.slotDescription));\n }\n return this.roomSessions.get(room.roomId);\n }\n refreshRoom(room) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var isNewSession = !_this.roomSessions.has(room.roomId);\n var session = _this.getRoomSession(room);\n var wasActiveAndKnown = session.memberships.length > 0 && !isNewSession;\n // This needs to be here and the event listener cannot be setup in the MatrixRTCSession,\n // because we need the update to happen between:\n // wasActiveAndKnown = session.memberships.length > 0 and\n // nowActive = session.memberships.length\n // Alternatively we would need to setup some event emission when the RTC session ended.\n // TODO we want to add the emission en session end. This makes the responsibility of the session manager more clear.\n\n yield session._onRTCSessionMemberUpdate().catch(error => {\n _this.logger.error(\"Error updating RTC session members for \".concat(room.roomId, \": \").concat(error));\n });\n var nowActive = session.memberships.length > 0;\n if (wasActiveAndKnown && !nowActive) {\n _this.logger.trace(\"Session ended for \".concat(room.roomId, \" (\").concat(session.memberships.length, \" members)\"));\n _this.emit(MatrixRTCSessionManagerEvents.SessionEnded, room.roomId, _this.roomSessions.get(room.roomId));\n } else if (!wasActiveAndKnown && nowActive) {\n _this.logger.trace(\"Session started for \".concat(room.roomId, \" (\").concat(session.memberships.length, \" members)\"));\n _this.emit(MatrixRTCSessionManagerEvents.SessionStarted, room.roomId, _this.roomSessions.get(room.roomId));\n }\n })();\n }\n}\n//# sourceMappingURL=MatrixRTCSessionManager.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { THREAD_RELATION_TYPE } from \"./models/thread.js\";\n/**\n * Returns a filter function for the /relations endpoint to filter out relations directly\n * to the thread root event that should not live in the thread timeline\n *\n * @param threadId - the thread ID (ie. the event ID of the root event of the thread)\n * @returns the filtered list of events\n */\nexport function getRelationsThreadFilter(threadId) {\n return e => {\n var _e$content, _e$content2;\n return ((_e$content = e.content) === null || _e$content === void 0 || (_e$content = _e$content[\"m.relates_to\"]) === null || _e$content === void 0 ? void 0 : _e$content.event_id) !== threadId || ((_e$content2 = e.content) === null || _e$content2 === void 0 || (_e$content2 = _e$content2[\"m.relates_to\"]) === null || _e$content2 === void 0 ? void 0 : _e$content2.rel_type) === THREAD_RELATION_TYPE.name;\n };\n}\n//# sourceMappingURL=thread-utils.js.map","export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n","// src/utils/Logger.ts\nvar nopLogger = {\n debug: () => void 0,\n info: () => void 0,\n warn: () => void 0,\n error: () => void 0\n};\nvar level;\nvar logger;\nvar Log = /* @__PURE__ */ ((Log2) => {\n Log2[Log2[\"NONE\"] = 0] = \"NONE\";\n Log2[Log2[\"ERROR\"] = 1] = \"ERROR\";\n Log2[Log2[\"WARN\"] = 2] = \"WARN\";\n Log2[Log2[\"INFO\"] = 3] = \"INFO\";\n Log2[Log2[\"DEBUG\"] = 4] = \"DEBUG\";\n return Log2;\n})(Log || {});\n((Log2) => {\n function reset() {\n level = 3 /* INFO */;\n logger = nopLogger;\n }\n Log2.reset = reset;\n function setLevel(value) {\n if (!(0 /* NONE */ <= value && value <= 4 /* DEBUG */)) {\n throw new Error(\"Invalid log level\");\n }\n level = value;\n }\n Log2.setLevel = setLevel;\n function setLogger(value) {\n logger = value;\n }\n Log2.setLogger = setLogger;\n})(Log || (Log = {}));\nvar Logger = class _Logger {\n constructor(_name) {\n this._name = _name;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n debug(...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(_Logger._format(this._name, this._method), ...args);\n }\n }\n info(...args) {\n if (level >= 3 /* INFO */) {\n logger.info(_Logger._format(this._name, this._method), ...args);\n }\n }\n warn(...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(_Logger._format(this._name, this._method), ...args);\n }\n }\n error(...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(_Logger._format(this._name, this._method), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n throw(err) {\n this.error(err);\n throw err;\n }\n create(method) {\n const methodLogger = Object.create(this);\n methodLogger._method = method;\n methodLogger.debug(\"begin\");\n return methodLogger;\n }\n static createStatic(name, staticMethod) {\n const staticLogger = new _Logger(`${name}.${staticMethod}`);\n staticLogger.debug(\"begin\");\n return staticLogger;\n }\n static _format(name, method) {\n const prefix = `[${name}]`;\n return method ? `${prefix} ${method}:` : prefix;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n // helpers for static class methods\n static debug(name, ...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(_Logger._format(name), ...args);\n }\n }\n static info(name, ...args) {\n if (level >= 3 /* INFO */) {\n logger.info(_Logger._format(name), ...args);\n }\n }\n static warn(name, ...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(_Logger._format(name), ...args);\n }\n }\n static error(name, ...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(_Logger._format(name), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n};\nLog.reset();\n\n// src/utils/JwtUtils.ts\nimport { jwtDecode } from \"jwt-decode\";\nvar JwtUtils = class {\n // IMPORTANT: doesn't validate the token\n static decode(token) {\n try {\n return jwtDecode(token);\n } catch (err) {\n Logger.error(\"JwtUtils.decode\", err);\n throw err;\n }\n }\n static async generateSignedJwt(header, payload, privateKey) {\n const encodedHeader = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(header)));\n const encodedPayload = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(payload)));\n const encodedToken = `${encodedHeader}.${encodedPayload}`;\n const signature = await window.crypto.subtle.sign(\n {\n name: \"ECDSA\",\n hash: { name: \"SHA-256\" }\n },\n privateKey,\n new TextEncoder().encode(encodedToken)\n );\n const encodedSignature = CryptoUtils.encodeBase64Url(new Uint8Array(signature));\n return `${encodedToken}.${encodedSignature}`;\n }\n static async generateSignedJwtWithHmac(header, payload, secretKey) {\n const encodedHeader = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(header)));\n const encodedPayload = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(payload)));\n const encodedToken = `${encodedHeader}.${encodedPayload}`;\n const signature = await window.crypto.subtle.sign(\n \"HMAC\",\n secretKey,\n new TextEncoder().encode(encodedToken)\n );\n const encodedSignature = CryptoUtils.encodeBase64Url(new Uint8Array(signature));\n return `${encodedToken}.${encodedSignature}`;\n }\n};\n\n// src/utils/CryptoUtils.ts\nvar UUID_V4_TEMPLATE = \"10000000-1000-4000-8000-100000000000\";\nvar toBase64 = (val) => btoa([...new Uint8Array(val)].map((chr) => String.fromCharCode(chr)).join(\"\"));\nvar _CryptoUtils = class _CryptoUtils {\n static _randomWord() {\n const arr = new Uint32Array(1);\n crypto.getRandomValues(arr);\n return arr[0];\n }\n /**\n * Generates RFC4122 version 4 guid\n */\n static generateUUIDv4() {\n const uuid = UUID_V4_TEMPLATE.replace(\n /[018]/g,\n (c) => (+c ^ _CryptoUtils._randomWord() & 15 >> +c / 4).toString(16)\n );\n return uuid.replace(/-/g, \"\");\n }\n /**\n * PKCE: Generate a code verifier\n */\n static generateCodeVerifier() {\n return _CryptoUtils.generateUUIDv4() + _CryptoUtils.generateUUIDv4() + _CryptoUtils.generateUUIDv4();\n }\n /**\n * PKCE: Generate a code challenge\n */\n static async generateCodeChallenge(code_verifier) {\n if (!crypto.subtle) {\n throw new Error(\"Crypto.subtle is available only in secure contexts (HTTPS).\");\n }\n try {\n const encoder = new TextEncoder();\n const data = encoder.encode(code_verifier);\n const hashed = await crypto.subtle.digest(\"SHA-256\", data);\n return toBase64(hashed).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n } catch (err) {\n Logger.error(\"CryptoUtils.generateCodeChallenge\", err);\n throw err;\n }\n }\n /**\n * Generates a base64-encoded string for a basic auth header\n */\n static generateBasicAuth(client_id, client_secret) {\n const encoder = new TextEncoder();\n const data = encoder.encode([client_id, client_secret].join(\":\"));\n return toBase64(data);\n }\n /**\n * Generates a hash of a string using a given algorithm\n * @param alg\n * @param message\n */\n static async hash(alg, message) {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest(alg, msgUint8);\n return new Uint8Array(hashBuffer);\n }\n /**\n * Generates a rfc7638 compliant jwk thumbprint\n * @param jwk\n */\n static async customCalculateJwkThumbprint(jwk) {\n let jsonObject;\n switch (jwk.kty) {\n case \"RSA\":\n jsonObject = {\n \"e\": jwk.e,\n \"kty\": jwk.kty,\n \"n\": jwk.n\n };\n break;\n case \"EC\":\n jsonObject = {\n \"crv\": jwk.crv,\n \"kty\": jwk.kty,\n \"x\": jwk.x,\n \"y\": jwk.y\n };\n break;\n case \"OKP\":\n jsonObject = {\n \"crv\": jwk.crv,\n \"kty\": jwk.kty,\n \"x\": jwk.x\n };\n break;\n case \"oct\":\n jsonObject = {\n \"crv\": jwk.k,\n \"kty\": jwk.kty\n };\n break;\n default:\n throw new Error(\"Unknown jwk type\");\n }\n const utf8encodedAndHashed = await _CryptoUtils.hash(\"SHA-256\", JSON.stringify(jsonObject));\n return _CryptoUtils.encodeBase64Url(utf8encodedAndHashed);\n }\n static async generateDPoPProof({\n url,\n accessToken,\n httpMethod,\n keyPair,\n nonce\n }) {\n let hashedToken;\n let encodedHash;\n const payload = {\n \"jti\": window.crypto.randomUUID(),\n \"htm\": httpMethod != null ? httpMethod : \"GET\",\n \"htu\": url,\n \"iat\": Math.floor(Date.now() / 1e3)\n };\n if (accessToken) {\n hashedToken = await _CryptoUtils.hash(\"SHA-256\", accessToken);\n encodedHash = _CryptoUtils.encodeBase64Url(hashedToken);\n payload.ath = encodedHash;\n }\n if (nonce) {\n payload.nonce = nonce;\n }\n try {\n const publicJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.publicKey);\n const header = {\n \"alg\": \"ES256\",\n \"typ\": \"dpop+jwt\",\n \"jwk\": {\n \"crv\": publicJwk.crv,\n \"kty\": publicJwk.kty,\n \"x\": publicJwk.x,\n \"y\": publicJwk.y\n }\n };\n return await JwtUtils.generateSignedJwt(header, payload, keyPair.privateKey);\n } catch (err) {\n if (err instanceof TypeError) {\n throw new Error(`Error exporting dpop public key: ${err.message}`);\n } else {\n throw err;\n }\n }\n }\n static async generateDPoPJkt(keyPair) {\n try {\n const publicJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.publicKey);\n return await _CryptoUtils.customCalculateJwkThumbprint(publicJwk);\n } catch (err) {\n if (err instanceof TypeError) {\n throw new Error(`Could not retrieve dpop keys from storage: ${err.message}`);\n } else {\n throw err;\n }\n }\n }\n static async generateDPoPKeys() {\n return await window.crypto.subtle.generateKey(\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\"\n },\n false,\n [\"sign\", \"verify\"]\n );\n }\n /**\n * Generates a client assertion JWT for client_secret_jwt authentication\n * @param client_id The client identifier\n * @param client_secret The client secret\n * @param audience The token endpoint URL (audience)\n * @param algorithm The HMAC algorithm to use (HS256, HS384, HS512). Defaults to HS256\n */\n static async generateClientAssertionJwt(client_id, client_secret, audience, algorithm = \"HS256\") {\n const now = Math.floor(Date.now() / 1e3);\n const header = {\n \"alg\": algorithm,\n \"typ\": \"JWT\"\n };\n const payload = {\n \"iss\": client_id,\n \"sub\": client_id,\n \"aud\": audience,\n \"jti\": _CryptoUtils.generateUUIDv4(),\n \"exp\": now + 300,\n // 5 minutes\n \"iat\": now\n };\n const hashMap = {\n \"HS256\": \"SHA-256\",\n \"HS384\": \"SHA-384\",\n \"HS512\": \"SHA-512\"\n };\n const hashFunction = hashMap[algorithm];\n if (!hashFunction) {\n throw new Error(`Unsupported algorithm: ${algorithm}. Supported algorithms are: HS256, HS384, HS512`);\n }\n const encoder = new TextEncoder();\n const secretKey = await crypto.subtle.importKey(\n \"raw\",\n encoder.encode(client_secret),\n { name: \"HMAC\", hash: hashFunction },\n false,\n [\"sign\"]\n );\n return await JwtUtils.generateSignedJwtWithHmac(header, payload, secretKey);\n }\n};\n/**\n * Generates a base64url encoded string\n */\n_CryptoUtils.encodeBase64Url = (input) => {\n return toBase64(input).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n};\nvar CryptoUtils = _CryptoUtils;\n\n// src/utils/Event.ts\nvar Event = class {\n constructor(_name) {\n this._name = _name;\n this._callbacks = [];\n this._logger = new Logger(`Event('${this._name}')`);\n }\n addHandler(cb) {\n this._callbacks.push(cb);\n return () => this.removeHandler(cb);\n }\n removeHandler(cb) {\n const idx = this._callbacks.lastIndexOf(cb);\n if (idx >= 0) {\n this._callbacks.splice(idx, 1);\n }\n }\n async raise(...ev) {\n this._logger.debug(\"raise:\", ...ev);\n for (const cb of this._callbacks) {\n await cb(...ev);\n }\n }\n};\n\n// src/utils/PopupUtils.ts\nvar PopupUtils = class {\n /**\n * Populates a map of window features with a placement centered in front of\n * the current window. If no explicit width is given, a default value is\n * binned into [800, 720, 600, 480, 360] based on the current window's width.\n */\n static center({ ...features }) {\n var _a, _b, _c;\n if (features.width == null)\n features.width = (_a = [800, 720, 600, 480].find((width) => width <= window.outerWidth / 1.618)) != null ? _a : 360;\n (_b = features.left) != null ? _b : features.left = Math.max(0, Math.round(window.screenX + (window.outerWidth - features.width) / 2));\n if (features.height != null)\n (_c = features.top) != null ? _c : features.top = Math.max(0, Math.round(window.screenY + (window.outerHeight - features.height) / 2));\n return features;\n }\n static serialize(features) {\n return Object.entries(features).filter(([, value]) => value != null).map(([key, value]) => `${key}=${typeof value !== \"boolean\" ? value : value ? \"yes\" : \"no\"}`).join(\",\");\n }\n};\n\n// src/utils/Timer.ts\nvar Timer = class _Timer extends Event {\n constructor() {\n super(...arguments);\n this._logger = new Logger(`Timer('${this._name}')`);\n this._timerHandle = null;\n this._expiration = 0;\n this._callback = () => {\n const diff = this._expiration - _Timer.getEpochTime();\n this._logger.debug(\"timer completes in\", diff);\n if (this._expiration <= _Timer.getEpochTime()) {\n this.cancel();\n void super.raise();\n }\n };\n }\n // get the time\n static getEpochTime() {\n return Math.floor(Date.now() / 1e3);\n }\n init(durationInSeconds) {\n const logger2 = this._logger.create(\"init\");\n durationInSeconds = Math.max(Math.floor(durationInSeconds), 1);\n const expiration = _Timer.getEpochTime() + durationInSeconds;\n if (this.expiration === expiration && this._timerHandle) {\n logger2.debug(\"skipping since already initialized for expiration at\", this.expiration);\n return;\n }\n this.cancel();\n logger2.debug(\"using duration\", durationInSeconds);\n this._expiration = expiration;\n const timerDurationInSeconds = Math.min(durationInSeconds, 5);\n this._timerHandle = setInterval(this._callback, timerDurationInSeconds * 1e3);\n }\n get expiration() {\n return this._expiration;\n }\n cancel() {\n this._logger.create(\"cancel\");\n if (this._timerHandle) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n};\n\n// src/utils/UrlUtils.ts\nvar UrlUtils = class {\n static readParams(url, responseMode = \"query\") {\n if (!url) throw new TypeError(\"Invalid URL\");\n const parsedUrl = new URL(url, \"http://127.0.0.1\");\n const params = parsedUrl[responseMode === \"fragment\" ? \"hash\" : \"search\"];\n return new URLSearchParams(params.slice(1));\n }\n};\nvar URL_STATE_DELIMITER = \";\";\n\n// src/errors/ErrorResponse.ts\nvar ErrorResponse = class extends Error {\n constructor(args, form) {\n var _a, _b, _c;\n super(args.error_description || args.error || \"\");\n this.form = form;\n /** Marker to detect class: \"ErrorResponse\" */\n this.name = \"ErrorResponse\";\n if (!args.error) {\n Logger.error(\"ErrorResponse\", \"No error passed\");\n throw new Error(\"No error passed\");\n }\n this.error = args.error;\n this.error_description = (_a = args.error_description) != null ? _a : null;\n this.error_uri = (_b = args.error_uri) != null ? _b : null;\n this.state = args.userState;\n this.session_state = (_c = args.session_state) != null ? _c : null;\n this.url_state = args.url_state;\n }\n};\n\n// src/errors/ErrorTimeout.ts\nvar ErrorTimeout = class extends Error {\n constructor(message) {\n super(message);\n /** Marker to detect class: \"ErrorTimeout\" */\n this.name = \"ErrorTimeout\";\n }\n};\n\n// src/AccessTokenEvents.ts\nvar AccessTokenEvents = class {\n constructor(args) {\n this._logger = new Logger(\"AccessTokenEvents\");\n this._expiringTimer = new Timer(\"Access token expiring\");\n this._expiredTimer = new Timer(\"Access token expired\");\n this._expiringNotificationTimeInSeconds = args.expiringNotificationTimeInSeconds;\n }\n async load(container) {\n const logger2 = this._logger.create(\"load\");\n if (container.access_token && container.expires_in !== void 0) {\n const duration = container.expires_in;\n logger2.debug(\"access token present, remaining duration:\", duration);\n if (duration > 0) {\n let expiring = duration - this._expiringNotificationTimeInSeconds;\n if (expiring <= 0) {\n expiring = 1;\n }\n logger2.debug(\"registering expiring timer, raising in\", expiring, \"seconds\");\n this._expiringTimer.init(expiring);\n } else {\n logger2.debug(\"canceling existing expiring timer because we're past expiration.\");\n this._expiringTimer.cancel();\n }\n const expired = duration + 1;\n logger2.debug(\"registering expired timer, raising in\", expired, \"seconds\");\n this._expiredTimer.init(expired);\n } else {\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n }\n async unload() {\n this._logger.debug(\"unload: canceling existing access token timers\");\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n /**\n * Add callback: Raised prior to the access token expiring.\n */\n addAccessTokenExpiring(cb) {\n return this._expiringTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised prior to the access token expiring.\n */\n removeAccessTokenExpiring(cb) {\n this._expiringTimer.removeHandler(cb);\n }\n /**\n * Add callback: Raised after the access token has expired.\n */\n addAccessTokenExpired(cb) {\n return this._expiredTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised after the access token has expired.\n */\n removeAccessTokenExpired(cb) {\n this._expiredTimer.removeHandler(cb);\n }\n};\n\n// src/CheckSessionIFrame.ts\nvar CheckSessionIFrame = class {\n constructor(_callback, _client_id, url, _intervalInSeconds, _stopOnError) {\n this._callback = _callback;\n this._client_id = _client_id;\n this._intervalInSeconds = _intervalInSeconds;\n this._stopOnError = _stopOnError;\n this._logger = new Logger(\"CheckSessionIFrame\");\n this._timer = null;\n this._session_state = null;\n this._message = (e) => {\n if (e.origin === this._frame_origin && e.source === this._frame.contentWindow) {\n if (e.data === \"error\") {\n this._logger.error(\"error message from check session op iframe\");\n if (this._stopOnError) {\n this.stop();\n }\n } else if (e.data === \"changed\") {\n this._logger.debug(\"changed message from check session op iframe\");\n this.stop();\n void this._callback();\n } else {\n this._logger.debug(e.data + \" message from check session op iframe\");\n }\n }\n };\n const parsedUrl = new URL(url);\n this._frame_origin = parsedUrl.origin;\n this._frame = window.document.createElement(\"iframe\");\n this._frame.style.visibility = \"hidden\";\n this._frame.style.position = \"fixed\";\n this._frame.style.left = \"-1000px\";\n this._frame.style.top = \"0\";\n this._frame.width = \"0\";\n this._frame.height = \"0\";\n this._frame.src = parsedUrl.href;\n }\n load() {\n return new Promise((resolve) => {\n this._frame.onload = () => {\n resolve();\n };\n window.document.body.appendChild(this._frame);\n window.addEventListener(\"message\", this._message, false);\n });\n }\n start(session_state) {\n if (this._session_state === session_state) {\n return;\n }\n this._logger.create(\"start\");\n this.stop();\n this._session_state = session_state;\n const send = () => {\n if (!this._frame.contentWindow || !this._session_state) {\n return;\n }\n this._frame.contentWindow.postMessage(this._client_id + \" \" + this._session_state, this._frame_origin);\n };\n send();\n this._timer = setInterval(send, this._intervalInSeconds * 1e3);\n }\n stop() {\n this._logger.create(\"stop\");\n this._session_state = null;\n if (this._timer) {\n clearInterval(this._timer);\n this._timer = null;\n }\n }\n};\n\n// src/InMemoryWebStorage.ts\nvar InMemoryWebStorage = class {\n constructor() {\n this._logger = new Logger(\"InMemoryWebStorage\");\n this._data = {};\n }\n clear() {\n this._logger.create(\"clear\");\n this._data = {};\n }\n getItem(key) {\n this._logger.create(`getItem('${key}')`);\n return this._data[key];\n }\n setItem(key, value) {\n this._logger.create(`setItem('${key}')`);\n this._data[key] = value;\n }\n removeItem(key) {\n this._logger.create(`removeItem('${key}')`);\n delete this._data[key];\n }\n get length() {\n return Object.getOwnPropertyNames(this._data).length;\n }\n key(index) {\n return Object.getOwnPropertyNames(this._data)[index];\n }\n};\n\n// src/errors/ErrorDPoPNonce.ts\nvar ErrorDPoPNonce = class extends Error {\n constructor(nonce, message) {\n super(message);\n /** Marker to detect class: \"ErrorDPoPNonce\" */\n this.name = \"ErrorDPoPNonce\";\n this.nonce = nonce;\n }\n};\n\n// src/JsonService.ts\nvar JsonService = class {\n constructor(additionalContentTypes = [], _jwtHandler = null, _extraHeaders = {}) {\n this._jwtHandler = _jwtHandler;\n this._extraHeaders = _extraHeaders;\n this._logger = new Logger(\"JsonService\");\n this._contentTypes = [];\n this._contentTypes.push(...additionalContentTypes, \"application/json\");\n if (_jwtHandler) {\n this._contentTypes.push(\"application/jwt\");\n }\n }\n async fetchWithTimeout(input, init = {}) {\n const { timeoutInSeconds, ...initFetch } = init;\n if (!timeoutInSeconds) {\n return await fetch(input, initFetch);\n }\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutInSeconds * 1e3);\n try {\n const response = await fetch(input, {\n ...init,\n signal: controller.signal\n });\n return response;\n } catch (err) {\n if (err instanceof DOMException && err.name === \"AbortError\") {\n throw new ErrorTimeout(\"Network timed out\");\n }\n throw err;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n async getJson(url, {\n token,\n credentials,\n timeoutInSeconds\n } = {}) {\n const logger2 = this._logger.create(\"getJson\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \")\n };\n if (token) {\n logger2.debug(\"token passed, setting Authorization header\");\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n this._appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"GET\", headers, timeoutInSeconds, credentials });\n } catch (err) {\n logger2.error(\"Network Error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n logger2.throw(new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`));\n }\n if (response.ok && this._jwtHandler && (contentType == null ? void 0 : contentType.startsWith(\"application/jwt\"))) {\n return await this._jwtHandler(await response.text());\n }\n let json;\n try {\n json = await response.json();\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n async postForm(url, {\n body,\n basicAuth,\n timeoutInSeconds,\n initCredentials,\n extraHeaders\n }) {\n const logger2 = this._logger.create(\"postForm\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \"),\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n ...extraHeaders\n };\n if (basicAuth !== void 0) {\n headers[\"Authorization\"] = \"Basic \" + basicAuth;\n }\n this._appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"POST\", headers, body, timeoutInSeconds, credentials: initCredentials });\n } catch (err) {\n logger2.error(\"Network error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n throw new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`);\n }\n const responseText = await response.text();\n let json = {};\n if (responseText) {\n try {\n json = JSON.parse(responseText);\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (response.headers.has(\"dpop-nonce\")) {\n const nonce = response.headers.get(\"dpop-nonce\");\n throw new ErrorDPoPNonce(nonce, `${JSON.stringify(json)}`);\n }\n if (json.error) {\n throw new ErrorResponse(json, body);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n _appendExtraHeaders(headers) {\n const logger2 = this._logger.create(\"appendExtraHeaders\");\n const customKeys = Object.keys(this._extraHeaders);\n const protectedHeaders = [\n \"accept\",\n \"content-type\"\n ];\n const preventOverride = [\n \"authorization\"\n ];\n if (customKeys.length === 0) {\n return;\n }\n customKeys.forEach((headerName) => {\n if (protectedHeaders.includes(headerName.toLocaleLowerCase())) {\n logger2.warn(\"Protected header could not be set\", headerName, protectedHeaders);\n return;\n }\n if (preventOverride.includes(headerName.toLocaleLowerCase()) && Object.keys(headers).includes(headerName)) {\n logger2.warn(\"Header could not be overridden\", headerName, preventOverride);\n return;\n }\n const content = typeof this._extraHeaders[headerName] === \"function\" ? this._extraHeaders[headerName]() : this._extraHeaders[headerName];\n if (content && content !== \"\") {\n headers[headerName] = content;\n }\n });\n }\n};\n\n// src/MetadataService.ts\nvar MetadataService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"MetadataService\");\n this._signingKeys = null;\n this._metadata = null;\n this._metadataUrl = this._settings.metadataUrl;\n this._jsonService = new JsonService(\n [\"application/jwk-set+json\"],\n null,\n this._settings.extraHeaders\n );\n if (this._settings.signingKeys) {\n this._logger.debug(\"using signingKeys from settings\");\n this._signingKeys = this._settings.signingKeys;\n }\n if (this._settings.metadata) {\n this._logger.debug(\"using metadata from settings\");\n this._metadata = this._settings.metadata;\n }\n if (this._settings.fetchRequestCredentials) {\n this._logger.debug(\"using fetchRequestCredentials from settings\");\n this._fetchRequestCredentials = this._settings.fetchRequestCredentials;\n }\n }\n resetSigningKeys() {\n this._signingKeys = null;\n }\n async getMetadata() {\n const logger2 = this._logger.create(\"getMetadata\");\n if (this._metadata) {\n logger2.debug(\"using cached values\");\n return this._metadata;\n }\n if (!this._metadataUrl) {\n logger2.throw(new Error(\"No authority or metadataUrl configured on settings\"));\n throw null;\n }\n logger2.debug(\"getting metadata from\", this._metadataUrl);\n const metadata = await this._jsonService.getJson(this._metadataUrl, { credentials: this._fetchRequestCredentials, timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"merging remote JSON with seed metadata\");\n this._metadata = Object.assign({}, metadata, this._settings.metadataSeed);\n return this._metadata;\n }\n getIssuer() {\n return this._getMetadataProperty(\"issuer\");\n }\n getAuthorizationEndpoint() {\n return this._getMetadataProperty(\"authorization_endpoint\");\n }\n getUserInfoEndpoint() {\n return this._getMetadataProperty(\"userinfo_endpoint\");\n }\n getTokenEndpoint(optional = true) {\n return this._getMetadataProperty(\"token_endpoint\", optional);\n }\n getCheckSessionIframe() {\n return this._getMetadataProperty(\"check_session_iframe\", true);\n }\n getEndSessionEndpoint() {\n return this._getMetadataProperty(\"end_session_endpoint\", true);\n }\n getRevocationEndpoint(optional = true) {\n return this._getMetadataProperty(\"revocation_endpoint\", optional);\n }\n getKeysEndpoint(optional = true) {\n return this._getMetadataProperty(\"jwks_uri\", optional);\n }\n async _getMetadataProperty(name, optional = false) {\n const logger2 = this._logger.create(`_getMetadataProperty('${name}')`);\n const metadata = await this.getMetadata();\n logger2.debug(\"resolved\");\n if (metadata[name] === void 0) {\n if (optional === true) {\n logger2.warn(\"Metadata does not contain optional property\");\n return void 0;\n }\n logger2.throw(new Error(\"Metadata does not contain property \" + name));\n }\n return metadata[name];\n }\n async getSigningKeys() {\n const logger2 = this._logger.create(\"getSigningKeys\");\n if (this._signingKeys) {\n logger2.debug(\"returning signingKeys from cache\");\n return this._signingKeys;\n }\n const jwks_uri = await this.getKeysEndpoint(false);\n logger2.debug(\"got jwks_uri\", jwks_uri);\n const keySet = await this._jsonService.getJson(jwks_uri, { timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"got key set\", keySet);\n if (!Array.isArray(keySet.keys)) {\n logger2.throw(new Error(\"Missing keys on keyset\"));\n throw null;\n }\n this._signingKeys = keySet.keys;\n return this._signingKeys;\n }\n};\n\n// src/WebStorageStateStore.ts\nvar WebStorageStateStore = class {\n constructor({\n prefix = \"oidc.\",\n store = localStorage\n } = {}) {\n this._logger = new Logger(\"WebStorageStateStore\");\n this._store = store;\n this._prefix = prefix;\n }\n async set(key, value) {\n this._logger.create(`set('${key}')`);\n key = this._prefix + key;\n await this._store.setItem(key, value);\n }\n async get(key) {\n this._logger.create(`get('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n return item;\n }\n async remove(key) {\n this._logger.create(`remove('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n await this._store.removeItem(key);\n return item;\n }\n async getAllKeys() {\n this._logger.create(\"getAllKeys\");\n const len = await this._store.length;\n const keys = [];\n for (let index = 0; index < len; index++) {\n const key = await this._store.key(index);\n if (key && key.indexOf(this._prefix) === 0) {\n keys.push(key.substr(this._prefix.length));\n }\n }\n return keys;\n }\n};\n\n// src/OidcClientSettings.ts\nvar DefaultResponseType = \"code\";\nvar DefaultScope = \"openid\";\nvar DefaultClientAuthentication = \"client_secret_post\";\nvar DefaultStaleStateAgeInSeconds = 60 * 15;\nvar OidcClientSettingsStore = class {\n constructor({\n // metadata related\n authority,\n metadataUrl,\n metadata,\n signingKeys,\n metadataSeed,\n // client related\n client_id,\n client_secret,\n response_type = DefaultResponseType,\n scope = DefaultScope,\n redirect_uri,\n post_logout_redirect_uri,\n client_authentication = DefaultClientAuthentication,\n token_endpoint_auth_signing_alg = \"HS256\",\n // optional protocol\n prompt,\n display,\n max_age,\n ui_locales,\n acr_values,\n resource,\n response_mode,\n // behavior flags\n filterProtocolClaims = true,\n loadUserInfo = false,\n requestTimeoutInSeconds,\n staleStateAgeInSeconds = DefaultStaleStateAgeInSeconds,\n mergeClaimsStrategy = { array: \"replace\" },\n disablePKCE = false,\n // other behavior\n stateStore,\n revokeTokenAdditionalContentTypes,\n fetchRequestCredentials,\n refreshTokenAllowedScope,\n // extra\n extraQueryParams = {},\n extraTokenParams = {},\n extraHeaders = {},\n dpop,\n omitScopeWhenRequesting = false\n }) {\n var _a;\n this.authority = authority;\n if (metadataUrl) {\n this.metadataUrl = metadataUrl;\n } else {\n this.metadataUrl = authority;\n if (authority) {\n if (!this.metadataUrl.endsWith(\"/\")) {\n this.metadataUrl += \"/\";\n }\n this.metadataUrl += \".well-known/openid-configuration\";\n }\n }\n this.metadata = metadata;\n this.metadataSeed = metadataSeed;\n this.signingKeys = signingKeys;\n this.client_id = client_id;\n this.client_secret = client_secret;\n this.response_type = response_type;\n this.scope = scope;\n this.redirect_uri = redirect_uri;\n this.post_logout_redirect_uri = post_logout_redirect_uri;\n this.client_authentication = client_authentication;\n this.token_endpoint_auth_signing_alg = token_endpoint_auth_signing_alg;\n this.prompt = prompt;\n this.display = display;\n this.max_age = max_age;\n this.ui_locales = ui_locales;\n this.acr_values = acr_values;\n this.resource = resource;\n this.response_mode = response_mode;\n this.filterProtocolClaims = filterProtocolClaims != null ? filterProtocolClaims : true;\n this.loadUserInfo = !!loadUserInfo;\n this.staleStateAgeInSeconds = staleStateAgeInSeconds;\n this.mergeClaimsStrategy = mergeClaimsStrategy;\n this.omitScopeWhenRequesting = omitScopeWhenRequesting;\n this.disablePKCE = !!disablePKCE;\n this.revokeTokenAdditionalContentTypes = revokeTokenAdditionalContentTypes;\n this.fetchRequestCredentials = fetchRequestCredentials ? fetchRequestCredentials : \"same-origin\";\n this.requestTimeoutInSeconds = requestTimeoutInSeconds;\n if (stateStore) {\n this.stateStore = stateStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.localStorage : new InMemoryWebStorage();\n this.stateStore = new WebStorageStateStore({ store });\n }\n this.refreshTokenAllowedScope = refreshTokenAllowedScope;\n this.extraQueryParams = extraQueryParams;\n this.extraTokenParams = extraTokenParams;\n this.extraHeaders = extraHeaders;\n this.dpop = dpop;\n if (this.dpop && !((_a = this.dpop) == null ? void 0 : _a.store)) {\n throw new Error(\"A DPoPStore is required when dpop is enabled\");\n }\n }\n};\n\n// src/UserInfoService.ts\nvar UserInfoService = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"UserInfoService\");\n this._getClaimsFromJwt = async (responseText) => {\n const logger2 = this._logger.create(\"_getClaimsFromJwt\");\n try {\n const payload = JwtUtils.decode(responseText);\n logger2.debug(\"JWT decoding successful\");\n return payload;\n } catch (err) {\n logger2.error(\"Error parsing JWT response\");\n throw err;\n }\n };\n this._jsonService = new JsonService(\n void 0,\n this._getClaimsFromJwt,\n this._settings.extraHeaders\n );\n }\n async getClaims(token) {\n const logger2 = this._logger.create(\"getClaims\");\n if (!token) {\n this._logger.throw(new Error(\"No token passed\"));\n }\n const url = await this._metadataService.getUserInfoEndpoint();\n logger2.debug(\"got userinfo url\", url);\n const claims = await this._jsonService.getJson(url, {\n token,\n credentials: this._settings.fetchRequestCredentials,\n timeoutInSeconds: this._settings.requestTimeoutInSeconds\n });\n logger2.debug(\"got claims\", claims);\n return claims;\n }\n};\n\n// src/TokenClient.ts\nvar TokenClient = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"TokenClient\");\n this._jsonService = new JsonService(\n this._settings.revokeTokenAdditionalContentTypes,\n null,\n this._settings.extraHeaders\n );\n }\n /**\n * Exchange code.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3\n */\n async exchangeCode({\n grant_type = \"authorization_code\",\n redirect_uri = this._settings.redirect_uri,\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n extraHeaders,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCode\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!redirect_uri) {\n logger2.throw(new Error(\"A redirect_uri is required\"));\n }\n if (!args.code) {\n logger2.throw(new Error(\"A code is required\"));\n }\n const params = new URLSearchParams({ grant_type, redirect_uri });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n if ((this._settings.client_authentication === \"client_secret_basic\" || this._settings.client_authentication === \"client_secret_jwt\") && (client_secret === void 0 || client_secret === null)) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n let basicAuth;\n const url = await this._metadataService.getTokenEndpoint(false);\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n case \"client_secret_jwt\": {\n const clientAssertion = await CryptoUtils.generateClientAssertionJwt(client_id, client_secret, url, this._settings.token_endpoint_auth_signing_alg);\n params.append(\"client_id\", client_id);\n params.append(\"client_assertion_type\", \"urn:ietf:params:oauth:client-assertion-type:jwt-bearer\");\n params.append(\"client_assertion\", clientAssertion);\n break;\n }\n }\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, {\n body: params,\n basicAuth,\n timeoutInSeconds: this._settings.requestTimeoutInSeconds,\n initCredentials: this._settings.fetchRequestCredentials,\n extraHeaders\n });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange credentials.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2\n */\n async exchangeCredentials({\n grant_type = \"password\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n scope = this._settings.scope,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCredentials\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n if (!this._settings.omitScopeWhenRequesting) {\n params.set(\"scope\", scope);\n }\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n if ((this._settings.client_authentication === \"client_secret_basic\" || this._settings.client_authentication === \"client_secret_jwt\") && (client_secret === void 0 || client_secret === null)) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n let basicAuth;\n const url = await this._metadataService.getTokenEndpoint(false);\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n case \"client_secret_jwt\": {\n const clientAssertion = await CryptoUtils.generateClientAssertionJwt(client_id, client_secret, url, this._settings.token_endpoint_auth_signing_alg);\n params.append(\"client_id\", client_id);\n params.append(\"client_assertion_type\", \"urn:ietf:params:oauth:client-assertion-type:jwt-bearer\");\n params.append(\"client_assertion\", clientAssertion);\n break;\n }\n }\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds: this._settings.requestTimeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange a refresh token.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-6\n */\n async exchangeRefreshToken({\n grant_type = \"refresh_token\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n timeoutInSeconds,\n extraHeaders,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeRefreshToken\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!args.refresh_token) {\n logger2.throw(new Error(\"A refresh_token is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n for (const [key, value] of Object.entries(args)) {\n if (Array.isArray(value)) {\n value.forEach((param) => params.append(key, param));\n } else if (value != null) {\n params.set(key, value);\n }\n }\n if ((this._settings.client_authentication === \"client_secret_basic\" || this._settings.client_authentication === \"client_secret_jwt\") && (client_secret === void 0 || client_secret === null)) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n let basicAuth;\n const url = await this._metadataService.getTokenEndpoint(false);\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n case \"client_secret_jwt\": {\n const clientAssertion = await CryptoUtils.generateClientAssertionJwt(client_id, client_secret, url, this._settings.token_endpoint_auth_signing_alg);\n params.append(\"client_id\", client_id);\n params.append(\"client_assertion_type\", \"urn:ietf:params:oauth:client-assertion-type:jwt-bearer\");\n params.append(\"client_assertion\", clientAssertion);\n break;\n }\n }\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials, extraHeaders });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Revoke an access or refresh token.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.1\n */\n async revoke(args) {\n var _a;\n const logger2 = this._logger.create(\"revoke\");\n if (!args.token) {\n logger2.throw(new Error(\"A token is required\"));\n }\n const url = await this._metadataService.getRevocationEndpoint(false);\n logger2.debug(`got revocation endpoint, revoking ${(_a = args.token_type_hint) != null ? _a : \"default token type\"}`);\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n params.set(\"client_id\", this._settings.client_id);\n if (this._settings.client_secret) {\n params.set(\"client_secret\", this._settings.client_secret);\n }\n await this._jsonService.postForm(url, { body: params, timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"got response\");\n }\n};\n\n// src/ResponseValidator.ts\nvar ResponseValidator = class {\n constructor(_settings, _metadataService, _claimsService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._claimsService = _claimsService;\n this._logger = new Logger(\"ResponseValidator\");\n this._userInfoService = new UserInfoService(this._settings, this._metadataService);\n this._tokenClient = new TokenClient(this._settings, this._metadataService);\n }\n async validateSigninResponse(response, state, extraHeaders) {\n const logger2 = this._logger.create(\"validateSigninResponse\");\n this._processSigninState(response, state);\n logger2.debug(\"state processed\");\n await this._processCode(response, state, extraHeaders);\n logger2.debug(\"code processed\");\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response, \"\", state.nonce);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, state == null ? void 0 : state.skipUserInfo, response.isOpenId);\n logger2.debug(\"claims processed\");\n }\n async validateCredentialsResponse(response, skipUserInfo) {\n const logger2 = this._logger.create(\"validateCredentialsResponse\");\n const shouldValidateSubClaim = response.isOpenId && !!response.id_token;\n if (shouldValidateSubClaim) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, skipUserInfo, shouldValidateSubClaim);\n logger2.debug(\"claims processed\");\n }\n async validateRefreshResponse(response, state) {\n var _a, _b;\n const logger2 = this._logger.create(\"validateRefreshResponse\");\n response.userState = state.data;\n (_a = response.session_state) != null ? _a : response.session_state = state.session_state;\n (_b = response.scope) != null ? _b : response.scope = state.scope;\n if (response.isOpenId && !!response.id_token) {\n this._validateIdTokenAttributes(response, state.id_token);\n logger2.debug(\"ID Token validated\");\n }\n if (!response.id_token) {\n response.id_token = state.id_token;\n response.profile = state.profile;\n }\n const hasIdToken = response.isOpenId && !!response.id_token;\n await this._processClaims(response, false, hasIdToken);\n logger2.debug(\"claims processed\");\n }\n validateSignoutResponse(response, state) {\n const logger2 = this._logger.create(\"validateSignoutResponse\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n }\n _processSigninState(response, state) {\n var _a;\n const logger2 = this._logger.create(\"_processSigninState\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n if (!state.client_id) {\n logger2.throw(new Error(\"No client_id on state\"));\n }\n if (!state.authority) {\n logger2.throw(new Error(\"No authority on state\"));\n }\n if (this._settings.authority !== state.authority) {\n logger2.throw(new Error(\"authority mismatch on settings vs. signin state\"));\n }\n if (this._settings.client_id && this._settings.client_id !== state.client_id) {\n logger2.throw(new Error(\"client_id mismatch on settings vs. signin state\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n response.url_state = state.url_state;\n (_a = response.scope) != null ? _a : response.scope = state.scope;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n if (state.code_verifier && !response.code) {\n logger2.throw(new Error(\"Expected code in response\"));\n }\n }\n async _processClaims(response, skipUserInfo = false, validateSub = true) {\n const logger2 = this._logger.create(\"_processClaims\");\n response.profile = this._claimsService.filterProtocolClaims(response.profile);\n if (skipUserInfo || !this._settings.loadUserInfo || !response.access_token) {\n logger2.debug(\"not loading user info\");\n return;\n }\n logger2.debug(\"loading user info\");\n const claims = await this._userInfoService.getClaims(response.access_token);\n logger2.debug(\"user info claims received from user info endpoint\");\n if (validateSub && claims.sub !== response.profile.sub) {\n logger2.throw(new Error(\"subject from UserInfo response does not match subject in ID Token\"));\n }\n response.profile = this._claimsService.mergeClaims(response.profile, this._claimsService.filterProtocolClaims(claims));\n logger2.debug(\"user info claims received, updated profile:\", response.profile);\n }\n async _processCode(response, state, extraHeaders) {\n const logger2 = this._logger.create(\"_processCode\");\n if (response.code) {\n logger2.debug(\"Validating code\");\n const tokenResponse = await this._tokenClient.exchangeCode({\n client_id: state.client_id,\n client_secret: state.client_secret,\n code: response.code,\n redirect_uri: state.redirect_uri,\n code_verifier: state.code_verifier,\n extraHeaders,\n ...state.extraTokenParams\n });\n Object.assign(response, tokenResponse);\n } else {\n logger2.debug(\"No code to process\");\n }\n }\n _validateIdTokenAttributes(response, existingToken, nonce) {\n var _a;\n const logger2 = this._logger.create(\"_validateIdTokenAttributes\");\n logger2.debug(\"decoding ID Token JWT\");\n const incoming = JwtUtils.decode((_a = response.id_token) != null ? _a : \"\");\n if (!incoming.sub) {\n logger2.throw(new Error(\"ID Token is missing a subject claim\"));\n }\n if (nonce && incoming.nonce !== nonce) {\n logger2.throw(new Error(\"nonce in id_token does not match nonce in client storage\"));\n }\n if (existingToken) {\n const existing = JwtUtils.decode(existingToken);\n if (incoming.sub !== existing.sub) {\n logger2.throw(new Error(\"sub in id_token does not match current sub\"));\n }\n if (incoming.auth_time && incoming.auth_time !== existing.auth_time) {\n logger2.throw(new Error(\"auth_time in id_token does not match original auth_time\"));\n }\n if (incoming.azp && incoming.azp !== existing.azp) {\n logger2.throw(new Error(\"azp in id_token does not match original azp\"));\n }\n if (!incoming.azp && existing.azp) {\n logger2.throw(new Error(\"azp not in id_token, but present in original id_token\"));\n }\n }\n response.profile = incoming;\n }\n};\n\n// src/State.ts\nvar State = class _State {\n constructor(args) {\n this.id = args.id || CryptoUtils.generateUUIDv4();\n this.data = args.data;\n if (args.created && args.created > 0) {\n this.created = args.created;\n } else {\n this.created = Timer.getEpochTime();\n }\n this.request_type = args.request_type;\n this.url_state = args.url_state;\n }\n toStorageString() {\n new Logger(\"State\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"State\", \"fromStorageString\");\n return Promise.resolve(new _State(JSON.parse(storageString)));\n }\n static async clearStaleState(storage, age) {\n const logger2 = Logger.createStatic(\"State\", \"clearStaleState\");\n const cutoff = Timer.getEpochTime() - age;\n const keys = await storage.getAllKeys();\n logger2.debug(\"got keys\", keys);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const item = await storage.get(key);\n let remove = false;\n if (item) {\n try {\n const state = await _State.fromStorageString(item);\n logger2.debug(\"got item from key:\", key, state.created);\n if (state.created <= cutoff) {\n remove = true;\n }\n } catch (err) {\n logger2.error(\"Error parsing state for key:\", key, err);\n remove = true;\n }\n } else {\n logger2.debug(\"no item in storage for key:\", key);\n remove = true;\n }\n if (remove) {\n logger2.debug(\"removed item for key:\", key);\n void storage.remove(key);\n }\n }\n }\n};\n\n// src/SigninState.ts\nvar SigninState = class _SigninState extends State {\n constructor(args) {\n super(args);\n this.code_verifier = args.code_verifier;\n this.code_challenge = args.code_challenge;\n this.authority = args.authority;\n this.client_id = args.client_id;\n this.redirect_uri = args.redirect_uri;\n this.scope = args.scope;\n this.client_secret = args.client_secret;\n this.extraTokenParams = args.extraTokenParams;\n this.response_mode = args.response_mode;\n this.skipUserInfo = args.skipUserInfo;\n this.nonce = args.nonce;\n }\n static async create(args) {\n const code_verifier = args.code_verifier === true ? CryptoUtils.generateCodeVerifier() : args.code_verifier || void 0;\n const code_challenge = code_verifier ? await CryptoUtils.generateCodeChallenge(code_verifier) : void 0;\n return new _SigninState({\n ...args,\n code_verifier,\n code_challenge\n });\n }\n toStorageString() {\n new Logger(\"SigninState\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state,\n code_verifier: this.code_verifier,\n authority: this.authority,\n client_id: this.client_id,\n redirect_uri: this.redirect_uri,\n scope: this.scope,\n client_secret: this.client_secret,\n extraTokenParams: this.extraTokenParams,\n response_mode: this.response_mode,\n skipUserInfo: this.skipUserInfo,\n nonce: this.nonce\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"SigninState\", \"fromStorageString\");\n const data = JSON.parse(storageString);\n return _SigninState.create(data);\n }\n};\n\n// src/SigninRequest.ts\nvar _SigninRequest = class _SigninRequest {\n constructor(args) {\n this.url = args.url;\n this.state = args.state;\n }\n static async create({\n // mandatory\n url,\n authority,\n client_id,\n redirect_uri,\n response_type,\n scope,\n // optional\n state_data,\n response_mode,\n request_type,\n client_secret,\n nonce,\n url_state,\n resource,\n skipUserInfo,\n extraQueryParams,\n extraTokenParams,\n disablePKCE,\n dpopJkt,\n omitScopeWhenRequesting,\n ...optionalParams\n }) {\n if (!url) {\n this._logger.error(\"create: No url passed\");\n throw new Error(\"url\");\n }\n if (!client_id) {\n this._logger.error(\"create: No client_id passed\");\n throw new Error(\"client_id\");\n }\n if (!redirect_uri) {\n this._logger.error(\"create: No redirect_uri passed\");\n throw new Error(\"redirect_uri\");\n }\n if (!response_type) {\n this._logger.error(\"create: No response_type passed\");\n throw new Error(\"response_type\");\n }\n if (!scope) {\n this._logger.error(\"create: No scope passed\");\n throw new Error(\"scope\");\n }\n if (!authority) {\n this._logger.error(\"create: No authority passed\");\n throw new Error(\"authority\");\n }\n const state = await SigninState.create({\n data: state_data,\n request_type,\n url_state,\n code_verifier: !disablePKCE,\n client_id,\n authority,\n redirect_uri,\n response_mode,\n client_secret,\n scope,\n extraTokenParams,\n skipUserInfo,\n nonce\n });\n const parsedUrl = new URL(url);\n parsedUrl.searchParams.append(\"client_id\", client_id);\n parsedUrl.searchParams.append(\"redirect_uri\", redirect_uri);\n parsedUrl.searchParams.append(\"response_type\", response_type);\n if (!omitScopeWhenRequesting) {\n parsedUrl.searchParams.append(\"scope\", scope);\n }\n if (nonce) {\n parsedUrl.searchParams.append(\"nonce\", nonce);\n }\n if (dpopJkt) {\n parsedUrl.searchParams.append(\"dpop_jkt\", dpopJkt);\n }\n let stateParam = state.id;\n if (url_state) {\n stateParam = `${stateParam}${URL_STATE_DELIMITER}${url_state}`;\n }\n parsedUrl.searchParams.append(\"state\", stateParam);\n if (state.code_challenge) {\n parsedUrl.searchParams.append(\"code_challenge\", state.code_challenge);\n parsedUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n }\n if (resource) {\n const resources = Array.isArray(resource) ? resource : [resource];\n resources.forEach((r) => parsedUrl.searchParams.append(\"resource\", r));\n }\n for (const [key, value] of Object.entries({ response_mode, ...optionalParams, ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n return new _SigninRequest({\n url: parsedUrl.href,\n state\n });\n }\n};\n_SigninRequest._logger = new Logger(\"SigninRequest\");\nvar SigninRequest = _SigninRequest;\n\n// src/SigninResponse.ts\nvar OidcScope = \"openid\";\nvar SigninResponse = class {\n constructor(params) {\n /** @see {@link User.access_token} */\n this.access_token = \"\";\n /** @see {@link User.token_type} */\n this.token_type = \"\";\n /** @see {@link User.profile} */\n this.profile = {};\n this.state = params.get(\"state\");\n this.session_state = params.get(\"session_state\");\n if (this.state) {\n const splitState = decodeURIComponent(this.state).split(URL_STATE_DELIMITER);\n this.state = splitState[0];\n if (splitState.length > 1) {\n this.url_state = splitState.slice(1).join(URL_STATE_DELIMITER);\n }\n }\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n this.code = params.get(\"code\");\n }\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (typeof value === \"string\") value = Number(value);\n if (value !== void 0 && value >= 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n get isOpenId() {\n var _a;\n return ((_a = this.scope) == null ? void 0 : _a.split(\" \").includes(OidcScope)) || !!this.id_token;\n }\n};\n\n// src/SignoutRequest.ts\nvar SignoutRequest = class {\n constructor({\n url,\n state_data,\n id_token_hint,\n post_logout_redirect_uri,\n extraQueryParams,\n request_type,\n client_id,\n url_state\n }) {\n this._logger = new Logger(\"SignoutRequest\");\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n const parsedUrl = new URL(url);\n if (id_token_hint) {\n parsedUrl.searchParams.append(\"id_token_hint\", id_token_hint);\n }\n if (client_id) {\n parsedUrl.searchParams.append(\"client_id\", client_id);\n }\n if (post_logout_redirect_uri) {\n parsedUrl.searchParams.append(\"post_logout_redirect_uri\", post_logout_redirect_uri);\n if (state_data || url_state) {\n this.state = new State({ data: state_data, request_type, url_state });\n let stateParam = this.state.id;\n if (url_state) {\n stateParam = `${stateParam}${URL_STATE_DELIMITER}${url_state}`;\n }\n parsedUrl.searchParams.append(\"state\", stateParam);\n }\n }\n for (const [key, value] of Object.entries({ ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n this.url = parsedUrl.href;\n }\n};\n\n// src/SignoutResponse.ts\nvar SignoutResponse = class {\n constructor(params) {\n this.state = params.get(\"state\");\n if (this.state) {\n const splitState = decodeURIComponent(this.state).split(URL_STATE_DELIMITER);\n this.state = splitState[0];\n if (splitState.length > 1) {\n this.url_state = splitState.slice(1).join(URL_STATE_DELIMITER);\n }\n }\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n }\n};\n\n// src/ClaimsService.ts\nvar DefaultProtocolClaims = [\n \"nbf\",\n \"jti\",\n \"auth_time\",\n \"nonce\",\n \"acr\",\n \"amr\",\n \"azp\",\n \"at_hash\"\n // https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken\n];\nvar InternalRequiredProtocolClaims = [\"sub\", \"iss\", \"aud\", \"exp\", \"iat\"];\nvar ClaimsService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"ClaimsService\");\n }\n filterProtocolClaims(claims) {\n const result = { ...claims };\n if (this._settings.filterProtocolClaims) {\n let protocolClaims;\n if (Array.isArray(this._settings.filterProtocolClaims)) {\n protocolClaims = this._settings.filterProtocolClaims;\n } else {\n protocolClaims = DefaultProtocolClaims;\n }\n for (const claim of protocolClaims) {\n if (!InternalRequiredProtocolClaims.includes(claim)) {\n delete result[claim];\n }\n }\n }\n return result;\n }\n mergeClaims(claims1, claims2) {\n const result = { ...claims1 };\n for (const [claim, values] of Object.entries(claims2)) {\n if (result[claim] !== values) {\n if (Array.isArray(result[claim]) || Array.isArray(values)) {\n if (this._settings.mergeClaimsStrategy.array == \"replace\") {\n result[claim] = values;\n } else {\n const mergedValues = Array.isArray(result[claim]) ? result[claim] : [result[claim]];\n for (const value of Array.isArray(values) ? values : [values]) {\n if (!mergedValues.includes(value)) {\n mergedValues.push(value);\n }\n }\n result[claim] = mergedValues;\n }\n } else if (typeof result[claim] === \"object\" && typeof values === \"object\") {\n result[claim] = this.mergeClaims(result[claim], values);\n } else {\n result[claim] = values;\n }\n }\n }\n return result;\n }\n};\n\n// src/DPoPStore.ts\nvar DPoPState = class {\n constructor(keys, nonce) {\n this.keys = keys;\n this.nonce = nonce;\n }\n};\n\n// src/OidcClient.ts\nvar OidcClient = class {\n constructor(settings, metadataService) {\n this._logger = new Logger(\"OidcClient\");\n this.settings = settings instanceof OidcClientSettingsStore ? settings : new OidcClientSettingsStore(settings);\n this.metadataService = metadataService != null ? metadataService : new MetadataService(this.settings);\n this._claimsService = new ClaimsService(this.settings);\n this._validator = new ResponseValidator(this.settings, this.metadataService, this._claimsService);\n this._tokenClient = new TokenClient(this.settings, this.metadataService);\n }\n async createSigninRequest({\n state,\n request,\n request_uri,\n request_type,\n id_token_hint,\n login_hint,\n skipUserInfo,\n nonce,\n url_state,\n response_type = this.settings.response_type,\n scope = this.settings.scope,\n redirect_uri = this.settings.redirect_uri,\n prompt = this.settings.prompt,\n display = this.settings.display,\n max_age = this.settings.max_age,\n ui_locales = this.settings.ui_locales,\n acr_values = this.settings.acr_values,\n resource = this.settings.resource,\n response_mode = this.settings.response_mode,\n extraQueryParams = this.settings.extraQueryParams,\n extraTokenParams = this.settings.extraTokenParams,\n dpopJkt,\n omitScopeWhenRequesting = this.settings.omitScopeWhenRequesting\n }) {\n const logger2 = this._logger.create(\"createSigninRequest\");\n if (response_type !== \"code\") {\n throw new Error(\"Only the Authorization Code flow (with PKCE) is supported\");\n }\n const url = await this.metadataService.getAuthorizationEndpoint();\n logger2.debug(\"Received authorization endpoint\", url);\n const signinRequest = await SigninRequest.create({\n url,\n authority: this.settings.authority,\n client_id: this.settings.client_id,\n redirect_uri,\n response_type,\n scope,\n state_data: state,\n url_state,\n prompt,\n display,\n max_age,\n ui_locales,\n id_token_hint,\n login_hint,\n acr_values,\n dpopJkt,\n resource,\n request,\n request_uri,\n extraQueryParams,\n extraTokenParams,\n request_type,\n response_mode,\n client_secret: this.settings.client_secret,\n skipUserInfo,\n nonce,\n disablePKCE: this.settings.disablePKCE,\n omitScopeWhenRequesting\n });\n await this.clearStaleState();\n const signinState = signinRequest.state;\n await this.settings.stateStore.set(signinState.id, signinState.toStorageString());\n return signinRequest;\n }\n async readSigninResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSigninResponseState\");\n const response = new SigninResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.throw(new Error(\"No state in response\"));\n throw null;\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = await SigninState.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSigninResponse(url, extraHeaders, removeState = true) {\n const logger2 = this._logger.create(\"processSigninResponse\");\n const { state, response } = await this.readSigninResponseState(url, removeState);\n logger2.debug(\"received state from storage; validating response\");\n if (this.settings.dpop && this.settings.dpop.store) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store);\n extraHeaders = { ...extraHeaders, \"DPoP\": dpopProof };\n }\n try {\n await this._validator.validateSigninResponse(response, state, extraHeaders);\n } catch (err) {\n if (err instanceof ErrorDPoPNonce && this.settings.dpop) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store, err.nonce);\n extraHeaders[\"DPoP\"] = dpopProof;\n await this._validator.validateSigninResponse(response, state, extraHeaders);\n } else {\n throw err;\n }\n }\n return response;\n }\n async getDpopProof(dpopStore, nonce) {\n let keyPair;\n let dpopState;\n if (!(await dpopStore.getAllKeys()).includes(this.settings.client_id)) {\n keyPair = await CryptoUtils.generateDPoPKeys();\n dpopState = new DPoPState(keyPair, nonce);\n await dpopStore.set(this.settings.client_id, dpopState);\n } else {\n dpopState = await dpopStore.get(this.settings.client_id);\n if (dpopState.nonce !== nonce && nonce) {\n dpopState.nonce = nonce;\n await dpopStore.set(this.settings.client_id, dpopState);\n }\n }\n return await CryptoUtils.generateDPoPProof({\n url: await this.metadataService.getTokenEndpoint(false),\n httpMethod: \"POST\",\n keyPair: dpopState.keys,\n nonce: dpopState.nonce\n });\n }\n async processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo = false,\n extraTokenParams = {}\n }) {\n const tokenResponse = await this._tokenClient.exchangeCredentials({ username, password, ...extraTokenParams });\n const signinResponse = new SigninResponse(new URLSearchParams());\n Object.assign(signinResponse, tokenResponse);\n await this._validator.validateCredentialsResponse(signinResponse, skipUserInfo);\n return signinResponse;\n }\n async useRefreshToken({\n state,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n extraTokenParams\n }) {\n var _a;\n const logger2 = this._logger.create(\"useRefreshToken\");\n let scope;\n if (this.settings.refreshTokenAllowedScope === void 0) {\n scope = state.scope;\n } else {\n const allowableScopes = this.settings.refreshTokenAllowedScope.split(\" \");\n const providedScopes = ((_a = state.scope) == null ? void 0 : _a.split(\" \")) || [];\n scope = providedScopes.filter((s) => allowableScopes.includes(s)).join(\" \");\n }\n if (this.settings.dpop && this.settings.dpop.store) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store);\n extraHeaders = { ...extraHeaders, \"DPoP\": dpopProof };\n }\n let result;\n try {\n result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n // provide the (possible filtered) scope list\n scope,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n ...extraTokenParams\n });\n } catch (err) {\n if (err instanceof ErrorDPoPNonce && this.settings.dpop) {\n extraHeaders[\"DPoP\"] = await this.getDpopProof(this.settings.dpop.store, err.nonce);\n result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n // provide the (possible filtered) scope list\n scope,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n ...extraTokenParams\n });\n } else {\n throw err;\n }\n }\n const response = new SigninResponse(new URLSearchParams());\n Object.assign(response, result);\n logger2.debug(\"validating response\", response);\n await this._validator.validateRefreshResponse(response, {\n ...state,\n // override the scope in the state handed over to the validator\n // so it can set the granted scope to the requested scope in case none is included in the response\n scope\n });\n return response;\n }\n async createSignoutRequest({\n state,\n id_token_hint,\n client_id,\n request_type,\n url_state,\n post_logout_redirect_uri = this.settings.post_logout_redirect_uri,\n extraQueryParams = this.settings.extraQueryParams\n } = {}) {\n const logger2 = this._logger.create(\"createSignoutRequest\");\n const url = await this.metadataService.getEndSessionEndpoint();\n if (!url) {\n logger2.throw(new Error(\"No end session endpoint\"));\n throw null;\n }\n logger2.debug(\"Received end session endpoint\", url);\n if (!client_id && post_logout_redirect_uri && !id_token_hint) {\n client_id = this.settings.client_id;\n }\n const request = new SignoutRequest({\n url,\n id_token_hint,\n client_id,\n post_logout_redirect_uri,\n state_data: state,\n extraQueryParams,\n request_type,\n url_state\n });\n await this.clearStaleState();\n const signoutState = request.state;\n if (signoutState) {\n logger2.debug(\"Signout request has state to persist\");\n await this.settings.stateStore.set(signoutState.id, signoutState.toStorageString());\n }\n return request;\n }\n async readSignoutResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSignoutResponseState\");\n const response = new SignoutResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.debug(\"No state in response\");\n if (response.error) {\n logger2.warn(\"Response was error:\", response.error);\n throw new ErrorResponse(response);\n }\n return { state: void 0, response };\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = await State.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSignoutResponse(url) {\n const logger2 = this._logger.create(\"processSignoutResponse\");\n const { state, response } = await this.readSignoutResponseState(url, true);\n if (state) {\n logger2.debug(\"Received state from storage; validating response\");\n this._validator.validateSignoutResponse(response, state);\n } else {\n logger2.debug(\"No state from storage; skipping response validation\");\n }\n return response;\n }\n clearStaleState() {\n this._logger.create(\"clearStaleState\");\n return State.clearStaleState(this.settings.stateStore, this.settings.staleStateAgeInSeconds);\n }\n async revokeToken(token, type) {\n this._logger.create(\"revokeToken\");\n return await this._tokenClient.revoke({\n token,\n token_type_hint: type\n });\n }\n};\n\n// src/SessionMonitor.ts\nvar SessionMonitor = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SessionMonitor\");\n this._start = async (user) => {\n const session_state = user.session_state;\n if (!session_state) {\n return;\n }\n const logger2 = this._logger.create(\"_start\");\n if (user.profile) {\n this._sub = user.profile.sub;\n logger2.debug(\"session_state\", session_state, \", sub\", this._sub);\n } else {\n this._sub = void 0;\n logger2.debug(\"session_state\", session_state, \", anonymous user\");\n }\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.start(session_state);\n return;\n }\n try {\n const url = await this._userManager.metadataService.getCheckSessionIframe();\n if (url) {\n logger2.debug(\"initializing check session iframe\");\n const client_id = this._userManager.settings.client_id;\n const intervalInSeconds = this._userManager.settings.checkSessionIntervalInSeconds;\n const stopOnError = this._userManager.settings.stopCheckSessionOnError;\n const checkSessionIFrame = new CheckSessionIFrame(this._callback, client_id, url, intervalInSeconds, stopOnError);\n await checkSessionIFrame.load();\n this._checkSessionIFrame = checkSessionIFrame;\n checkSessionIFrame.start(session_state);\n } else {\n logger2.warn(\"no check session iframe found in the metadata\");\n }\n } catch (err) {\n logger2.error(\"Error from getCheckSessionIframe:\", err instanceof Error ? err.message : err);\n }\n };\n this._stop = () => {\n const logger2 = this._logger.create(\"_stop\");\n this._sub = void 0;\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.stop();\n }\n if (this._userManager.settings.monitorAnonymousSession) {\n const timerHandle = setInterval(async () => {\n clearInterval(timerHandle);\n try {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub\n } : null\n };\n void this._start(tmpUser);\n }\n } catch (err) {\n logger2.error(\"error from querySessionStatus\", err instanceof Error ? err.message : err);\n }\n }, 1e3);\n }\n };\n this._callback = async () => {\n const logger2 = this._logger.create(\"_callback\");\n try {\n const session = await this._userManager.querySessionStatus();\n let raiseEvent = true;\n if (session && this._checkSessionIFrame) {\n if (session.sub === this._sub) {\n raiseEvent = false;\n this._checkSessionIFrame.start(session.session_state);\n logger2.debug(\"same sub still logged in at OP, session state has changed, restarting check session iframe; session_state\", session.session_state);\n await this._userManager.events._raiseUserSessionChanged();\n } else {\n logger2.debug(\"different subject signed into OP\", session.sub);\n }\n } else {\n logger2.debug(\"subject no longer signed into OP\");\n }\n if (raiseEvent) {\n if (this._sub) {\n await this._userManager.events._raiseUserSignedOut();\n } else {\n await this._userManager.events._raiseUserSignedIn();\n }\n } else {\n logger2.debug(\"no change in session detected, no event to raise\");\n }\n } catch (err) {\n if (this._sub) {\n logger2.debug(\"Error calling queryCurrentSigninSession; raising signed out event\", err);\n await this._userManager.events._raiseUserSignedOut();\n }\n }\n };\n if (!_userManager) {\n this._logger.throw(new Error(\"No user manager passed\"));\n }\n this._userManager.events.addUserLoaded(this._start);\n this._userManager.events.addUserUnloaded(this._stop);\n this._init().catch((err) => {\n this._logger.error(err);\n });\n }\n async _init() {\n this._logger.create(\"_init\");\n const user = await this._userManager.getUser();\n if (user) {\n void this._start(user);\n } else if (this._userManager.settings.monitorAnonymousSession) {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub\n } : null\n };\n void this._start(tmpUser);\n }\n }\n }\n};\n\n// src/User.ts\nvar User = class _User {\n constructor(args) {\n var _a;\n this.id_token = args.id_token;\n this.session_state = (_a = args.session_state) != null ? _a : null;\n this.access_token = args.access_token;\n this.refresh_token = args.refresh_token;\n this.token_type = args.token_type;\n this.scope = args.scope;\n this.profile = args.profile;\n this.expires_at = args.expires_at;\n this.state = args.userState;\n this.url_state = args.url_state;\n }\n /** Computed number of seconds the access token has remaining. */\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (value !== void 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n /** Computed value indicating if the access token is expired. */\n get expired() {\n const expires_in = this.expires_in;\n if (expires_in === void 0) {\n return void 0;\n }\n return expires_in <= 0;\n }\n /** Array representing the parsed values from the `scope`. */\n get scopes() {\n var _a, _b;\n return (_b = (_a = this.scope) == null ? void 0 : _a.split(\" \")) != null ? _b : [];\n }\n toStorageString() {\n new Logger(\"User\").create(\"toStorageString\");\n return JSON.stringify({\n id_token: this.id_token,\n session_state: this.session_state,\n access_token: this.access_token,\n refresh_token: this.refresh_token,\n token_type: this.token_type,\n scope: this.scope,\n profile: this.profile,\n expires_at: this.expires_at\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"User\", \"fromStorageString\");\n return new _User(JSON.parse(storageString));\n }\n};\n\n// src/navigators/AbstractChildWindow.ts\nvar messageSource = \"oidc-client\";\nvar AbstractChildWindow = class {\n constructor() {\n this._abort = new Event(\"Window navigation aborted\");\n this._disposeHandlers = /* @__PURE__ */ new Set();\n this._window = null;\n }\n async navigate(params) {\n const logger2 = this._logger.create(\"navigate\");\n if (!this._window) {\n throw new Error(\"Attempted to navigate on a disposed window\");\n }\n logger2.debug(\"setting URL in window\");\n this._window.location.replace(params.url);\n const { url, keepOpen } = await new Promise((resolve, reject) => {\n const listener = (e) => {\n var _a;\n const data = e.data;\n const origin = (_a = params.scriptOrigin) != null ? _a : window.location.origin;\n if (e.origin !== origin || (data == null ? void 0 : data.source) !== messageSource) {\n return;\n }\n try {\n const state = UrlUtils.readParams(data.url, params.response_mode).get(\"state\");\n if (!state) {\n logger2.warn(\"no state found in response url\");\n }\n if (e.source !== this._window && state !== params.state) {\n return;\n }\n } catch {\n this._dispose();\n reject(new Error(\"Invalid response from window\"));\n }\n resolve(data);\n };\n window.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => window.removeEventListener(\"message\", listener, false));\n const channel = new BroadcastChannel(`oidc-client-popup-${params.state}`);\n channel.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => channel.close());\n this._disposeHandlers.add(this._abort.addHandler((reason) => {\n this._dispose();\n reject(reason);\n }));\n });\n logger2.debug(\"got response from window\");\n this._dispose();\n if (!keepOpen) {\n this.close();\n }\n return { url };\n }\n _dispose() {\n this._logger.create(\"_dispose\");\n for (const dispose of this._disposeHandlers) {\n dispose();\n }\n this._disposeHandlers.clear();\n }\n static _notifyParent(parent, url, keepOpen = false, targetOrigin = window.location.origin) {\n const msgData = {\n source: messageSource,\n url,\n keepOpen\n };\n const logger2 = new Logger(\"_notifyParent\");\n if (parent) {\n logger2.debug(\"With parent. Using parent.postMessage.\");\n parent.postMessage(msgData, targetOrigin);\n } else {\n logger2.debug(\"No parent. Using BroadcastChannel.\");\n const state = new URL(url).searchParams.get(\"state\");\n if (!state) {\n throw new Error(\"No parent and no state in URL. Can't complete notification.\");\n }\n const channel = new BroadcastChannel(`oidc-client-popup-${state}`);\n channel.postMessage(msgData);\n channel.close();\n }\n }\n};\n\n// src/UserManagerSettings.ts\nvar DefaultPopupWindowFeatures = {\n location: false,\n toolbar: false,\n height: 640,\n closePopupWindowAfterInSeconds: -1\n};\nvar DefaultPopupTarget = \"_blank\";\nvar DefaultAccessTokenExpiringNotificationTimeInSeconds = 60;\nvar DefaultCheckSessionIntervalInSeconds = 2;\nvar DefaultSilentRequestTimeoutInSeconds = 10;\nvar UserManagerSettingsStore = class extends OidcClientSettingsStore {\n constructor(args) {\n const {\n popup_redirect_uri = args.redirect_uri,\n popup_post_logout_redirect_uri = args.post_logout_redirect_uri,\n popupWindowFeatures = DefaultPopupWindowFeatures,\n popupWindowTarget = DefaultPopupTarget,\n redirectMethod = \"assign\",\n redirectTarget = \"self\",\n iframeNotifyParentOrigin = args.iframeNotifyParentOrigin,\n iframeScriptOrigin = args.iframeScriptOrigin,\n requestTimeoutInSeconds,\n silent_redirect_uri = args.redirect_uri,\n silentRequestTimeoutInSeconds,\n automaticSilentRenew = true,\n validateSubOnSilentRenew = true,\n includeIdTokenInSilentRenew = false,\n monitorSession = false,\n monitorAnonymousSession = false,\n checkSessionIntervalInSeconds = DefaultCheckSessionIntervalInSeconds,\n query_status_response_type = \"code\",\n stopCheckSessionOnError = true,\n revokeTokenTypes = [\"access_token\", \"refresh_token\"],\n revokeTokensOnSignout = false,\n includeIdTokenInSilentSignout = false,\n accessTokenExpiringNotificationTimeInSeconds = DefaultAccessTokenExpiringNotificationTimeInSeconds,\n maxSilentRenewTimeoutRetries,\n userStore\n } = args;\n super(args);\n this.popup_redirect_uri = popup_redirect_uri;\n this.popup_post_logout_redirect_uri = popup_post_logout_redirect_uri;\n this.popupWindowFeatures = popupWindowFeatures;\n this.popupWindowTarget = popupWindowTarget;\n this.redirectMethod = redirectMethod;\n this.redirectTarget = redirectTarget;\n this.iframeNotifyParentOrigin = iframeNotifyParentOrigin;\n this.iframeScriptOrigin = iframeScriptOrigin;\n this.silent_redirect_uri = silent_redirect_uri;\n this.silentRequestTimeoutInSeconds = silentRequestTimeoutInSeconds || requestTimeoutInSeconds || DefaultSilentRequestTimeoutInSeconds;\n this.automaticSilentRenew = automaticSilentRenew;\n this.validateSubOnSilentRenew = validateSubOnSilentRenew;\n this.includeIdTokenInSilentRenew = includeIdTokenInSilentRenew;\n this.monitorSession = monitorSession;\n this.monitorAnonymousSession = monitorAnonymousSession;\n this.checkSessionIntervalInSeconds = checkSessionIntervalInSeconds;\n this.stopCheckSessionOnError = stopCheckSessionOnError;\n this.query_status_response_type = query_status_response_type;\n this.revokeTokenTypes = revokeTokenTypes;\n this.revokeTokensOnSignout = revokeTokensOnSignout;\n this.includeIdTokenInSilentSignout = includeIdTokenInSilentSignout;\n this.accessTokenExpiringNotificationTimeInSeconds = accessTokenExpiringNotificationTimeInSeconds;\n this.maxSilentRenewTimeoutRetries = maxSilentRenewTimeoutRetries;\n if (userStore) {\n this.userStore = userStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.sessionStorage : new InMemoryWebStorage();\n this.userStore = new WebStorageStateStore({ store });\n }\n }\n};\n\n// src/navigators/IFrameWindow.ts\nvar IFrameWindow = class _IFrameWindow extends AbstractChildWindow {\n constructor({\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds\n }) {\n super();\n this._logger = new Logger(\"IFrameWindow\");\n this._timeoutInSeconds = silentRequestTimeoutInSeconds;\n this._frame = _IFrameWindow.createHiddenIframe();\n this._window = this._frame.contentWindow;\n }\n static createHiddenIframe() {\n const iframe = window.document.createElement(\"iframe\");\n iframe.style.visibility = \"hidden\";\n iframe.style.position = \"fixed\";\n iframe.style.left = \"-1000px\";\n iframe.style.top = \"0\";\n iframe.width = \"0\";\n iframe.height = \"0\";\n window.document.body.appendChild(iframe);\n return iframe;\n }\n async navigate(params) {\n this._logger.debug(\"navigate: Using timeout of:\", this._timeoutInSeconds);\n const timer = setTimeout(() => void this._abort.raise(new ErrorTimeout(\"IFrame timed out without a response\")), this._timeoutInSeconds * 1e3);\n this._disposeHandlers.add(() => clearTimeout(timer));\n return await super.navigate(params);\n }\n close() {\n var _a;\n if (this._frame) {\n if (this._frame.parentNode) {\n this._frame.addEventListener(\"load\", (ev) => {\n var _a2;\n const frame = ev.target;\n (_a2 = frame.parentNode) == null ? void 0 : _a2.removeChild(frame);\n void this._abort.raise(new Error(\"IFrame removed from DOM\"));\n }, true);\n (_a = this._frame.contentWindow) == null ? void 0 : _a.location.replace(\"about:blank\");\n }\n this._frame = null;\n }\n this._window = null;\n }\n static notifyParent(url, targetOrigin) {\n return super._notifyParent(window.parent, url, false, targetOrigin);\n }\n};\n\n// src/navigators/IFrameNavigator.ts\nvar IFrameNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"IFrameNavigator\");\n }\n async prepare({\n silentRequestTimeoutInSeconds = this._settings.silentRequestTimeoutInSeconds\n }) {\n return new IFrameWindow({ silentRequestTimeoutInSeconds });\n }\n async callback(url) {\n this._logger.create(\"callback\");\n IFrameWindow.notifyParent(url, this._settings.iframeNotifyParentOrigin);\n }\n};\n\n// src/navigators/PopupWindow.ts\nvar checkForPopupClosedInterval = 500;\nvar second = 1e3;\nvar PopupWindow = class extends AbstractChildWindow {\n constructor({\n popupWindowTarget = DefaultPopupTarget,\n popupWindowFeatures = {},\n popupSignal,\n popupAbortOnClose\n }) {\n super();\n this._logger = new Logger(\"PopupWindow\");\n const centeredPopup = PopupUtils.center({ ...DefaultPopupWindowFeatures, ...popupWindowFeatures });\n this._window = window.open(void 0, popupWindowTarget, PopupUtils.serialize(centeredPopup));\n this.abortOnClose = Boolean(popupAbortOnClose);\n if (popupSignal) {\n popupSignal.addEventListener(\"abort\", () => {\n var _a;\n void this._abort.raise(new Error((_a = popupSignal.reason) != null ? _a : \"Popup aborted\"));\n });\n }\n if (popupWindowFeatures.closePopupWindowAfterInSeconds && popupWindowFeatures.closePopupWindowAfterInSeconds > 0) {\n setTimeout(() => {\n if (!this._window || typeof this._window.closed !== \"boolean\" || this._window.closed) {\n void this._abort.raise(new Error(\"Popup blocked by user\"));\n return;\n }\n this.close();\n }, popupWindowFeatures.closePopupWindowAfterInSeconds * second);\n }\n }\n async navigate(params) {\n var _a;\n (_a = this._window) == null ? void 0 : _a.focus();\n const popupClosedInterval = setInterval(() => {\n if (!this._window || this._window.closed) {\n this._logger.debug(\"Popup closed by user or isolated by redirect\");\n clearPopupClosedInterval();\n this._disposeHandlers.delete(clearPopupClosedInterval);\n if (this.abortOnClose) {\n void this._abort.raise(new Error(\"Popup closed by user\"));\n }\n }\n }, checkForPopupClosedInterval);\n const clearPopupClosedInterval = () => clearInterval(popupClosedInterval);\n this._disposeHandlers.add(clearPopupClosedInterval);\n return await super.navigate(params);\n }\n close() {\n if (this._window) {\n if (!this._window.closed) {\n this._window.close();\n void this._abort.raise(new Error(\"Popup closed\"));\n }\n }\n this._window = null;\n }\n static notifyOpener(url, keepOpen) {\n super._notifyParent(window.opener, url, keepOpen);\n if (!keepOpen && !window.opener) {\n window.close();\n }\n }\n};\n\n// src/navigators/PopupNavigator.ts\nvar PopupNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"PopupNavigator\");\n }\n async prepare({\n popupWindowFeatures = this._settings.popupWindowFeatures,\n popupWindowTarget = this._settings.popupWindowTarget,\n popupSignal,\n popupAbortOnClose\n }) {\n return new PopupWindow({\n popupWindowFeatures,\n popupWindowTarget,\n popupSignal,\n popupAbortOnClose\n });\n }\n async callback(url, { keepOpen = false }) {\n this._logger.create(\"callback\");\n PopupWindow.notifyOpener(url, keepOpen);\n }\n};\n\n// src/navigators/RedirectNavigator.ts\nvar RedirectNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"RedirectNavigator\");\n }\n async prepare({\n redirectMethod = this._settings.redirectMethod,\n redirectTarget = this._settings.redirectTarget\n }) {\n var _a;\n this._logger.create(\"prepare\");\n let targetWindow = window.self;\n if (redirectTarget === \"top\") {\n targetWindow = (_a = window.top) != null ? _a : window.self;\n }\n const redirect = targetWindow.location[redirectMethod].bind(targetWindow.location);\n let abort;\n return {\n navigate: async (params) => {\n this._logger.create(\"navigate\");\n const promise = new Promise((resolve, reject) => {\n abort = reject;\n window.addEventListener(\"pageshow\", () => resolve(window.location.href));\n redirect(params.url);\n });\n return await promise;\n },\n close: () => {\n this._logger.create(\"close\");\n abort == null ? void 0 : abort(new Error(\"Redirect aborted\"));\n targetWindow.stop();\n }\n };\n }\n async callback() {\n return;\n }\n};\n\n// src/UserManagerEvents.ts\nvar UserManagerEvents = class extends AccessTokenEvents {\n constructor(settings) {\n super({ expiringNotificationTimeInSeconds: settings.accessTokenExpiringNotificationTimeInSeconds });\n this._logger = new Logger(\"UserManagerEvents\");\n this._userLoaded = new Event(\"User loaded\");\n this._userUnloaded = new Event(\"User unloaded\");\n this._silentRenewError = new Event(\"Silent renew error\");\n this._userSignedIn = new Event(\"User signed in\");\n this._userSignedOut = new Event(\"User signed out\");\n this._userSessionChanged = new Event(\"User session changed\");\n }\n async load(user, raiseEvent = true) {\n await super.load(user);\n if (raiseEvent) {\n await this._userLoaded.raise(user);\n }\n }\n async unload() {\n await super.unload();\n await this._userUnloaded.raise();\n }\n /**\n * Add callback: Raised when a user session has been established (or re-established).\n */\n addUserLoaded(cb) {\n return this._userLoaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been established (or re-established).\n */\n removeUserLoaded(cb) {\n return this._userLoaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when a user session has been terminated.\n */\n addUserUnloaded(cb) {\n return this._userUnloaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been terminated.\n */\n removeUserUnloaded(cb) {\n return this._userUnloaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when the automatic silent renew has failed.\n */\n addSilentRenewError(cb) {\n return this._silentRenewError.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the automatic silent renew has failed.\n */\n removeSilentRenewError(cb) {\n return this._silentRenewError.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseSilentRenewError(e) {\n await this._silentRenewError.raise(e);\n }\n /**\n * Add callback: Raised when the user is signed in (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedIn(cb) {\n return this._userSignedIn.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user is signed in (when `monitorSession` is set).\n */\n removeUserSignedIn(cb) {\n this._userSignedIn.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSignedIn() {\n await this._userSignedIn.raise();\n }\n /**\n * Add callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedOut(cb) {\n return this._userSignedOut.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n */\n removeUserSignedOut(cb) {\n this._userSignedOut.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSignedOut() {\n await this._userSignedOut.raise();\n }\n /**\n * Add callback: Raised when the user session changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSessionChanged(cb) {\n return this._userSessionChanged.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user session changed (when `monitorSession` is set).\n */\n removeUserSessionChanged(cb) {\n this._userSessionChanged.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSessionChanged() {\n await this._userSessionChanged.raise();\n }\n};\n\n// src/SilentRenewService.ts\nvar SilentRenewService = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SilentRenewService\");\n this._isStarted = false;\n this._retryTimer = new Timer(\"Retry Silent Renew\");\n this._timeoutRetryCount = 0;\n this._tokenExpiring = async () => {\n const logger2 = this._logger.create(\"_tokenExpiring\");\n try {\n await this._userManager.signinSilent();\n this._timeoutRetryCount = 0;\n logger2.debug(\"silent token renewal successful\");\n } catch (err) {\n if (err instanceof ErrorTimeout) {\n this._timeoutRetryCount++;\n const maxRetries = this._userManager.settings.maxSilentRenewTimeoutRetries;\n const hasReachedLimit = maxRetries !== void 0 && this._timeoutRetryCount > maxRetries;\n if (hasReachedLimit) {\n logger2.error(\n `Timeout retry limit reached (${this._timeoutRetryCount} > ${maxRetries}), raising silentRenewError:`,\n err\n );\n this._timeoutRetryCount = 0;\n await this._userManager.events._raiseSilentRenewError(err);\n return;\n }\n logger2.warn(\n `ErrorTimeout from signinSilent (attempt ${this._timeoutRetryCount}), retry in 5s:`,\n err\n );\n this._retryTimer.init(5);\n return;\n }\n logger2.error(\"Error from signinSilent:\", err);\n this._timeoutRetryCount = 0;\n await this._userManager.events._raiseSilentRenewError(err);\n }\n };\n }\n async start() {\n const logger2 = this._logger.create(\"start\");\n if (!this._isStarted) {\n this._isStarted = true;\n this._userManager.events.addAccessTokenExpiring(this._tokenExpiring);\n this._retryTimer.addHandler(this._tokenExpiring);\n try {\n await this._userManager.getUser();\n } catch (err) {\n logger2.error(\"getUser error\", err);\n }\n }\n }\n stop() {\n if (this._isStarted) {\n this._retryTimer.cancel();\n this._retryTimer.removeHandler(this._tokenExpiring);\n this._userManager.events.removeAccessTokenExpiring(this._tokenExpiring);\n this._isStarted = false;\n }\n }\n};\n\n// src/RefreshState.ts\nvar RefreshState = class {\n constructor(args) {\n this.refresh_token = args.refresh_token;\n this.id_token = args.id_token;\n this.session_state = args.session_state;\n this.scope = args.scope;\n this.profile = args.profile;\n this.data = args.state;\n }\n};\n\n// src/UserManager.ts\nvar UserManager = class {\n constructor(settings, redirectNavigator, popupNavigator, iframeNavigator) {\n this._logger = new Logger(\"UserManager\");\n this.settings = new UserManagerSettingsStore(settings);\n this._client = new OidcClient(settings);\n this._redirectNavigator = redirectNavigator != null ? redirectNavigator : new RedirectNavigator(this.settings);\n this._popupNavigator = popupNavigator != null ? popupNavigator : new PopupNavigator(this.settings);\n this._iframeNavigator = iframeNavigator != null ? iframeNavigator : new IFrameNavigator(this.settings);\n this._events = new UserManagerEvents(this.settings);\n this._silentRenewService = new SilentRenewService(this);\n if (this.settings.automaticSilentRenew) {\n this.startSilentRenew();\n }\n this._sessionMonitor = null;\n if (this.settings.monitorSession) {\n this._sessionMonitor = new SessionMonitor(this);\n }\n }\n /**\n * Get object used to register for events raised by the `UserManager`.\n */\n get events() {\n return this._events;\n }\n /**\n * Get object used to access the metadata configuration of the identity provider.\n */\n get metadataService() {\n return this._client.metadataService;\n }\n /**\n * Load the `User` object for the currently authenticated user.\n *\n * @param raiseEvent - If `true`, the `UserLoaded` event will be raised. Defaults to false.\n * @returns A promise\n */\n async getUser(raiseEvent = false) {\n const logger2 = this._logger.create(\"getUser\");\n const user = await this._loadUser();\n if (user) {\n logger2.info(\"user loaded\");\n await this._events.load(user, raiseEvent);\n return user;\n }\n logger2.info(\"user not found in storage\");\n return null;\n }\n /**\n * Remove from any storage the currently authenticated user.\n *\n * @returns A promise\n */\n async removeUser() {\n const logger2 = this._logger.create(\"removeUser\");\n await this.storeUser(null);\n logger2.info(\"user removed from storage\");\n await this._events.unload();\n }\n /**\n * Trigger a redirect of the current window to the authorization endpoint.\n *\n * @returns A promise\n *\n * @throws `Error` In cases of wrong authentication.\n */\n async signinRedirect(args = {}) {\n var _a;\n this._logger.create(\"signinRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signinStart({\n request_type: \"si:r\",\n dpopJkt,\n ...requestArgs\n }, handle);\n }\n /**\n * Process the response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise containing the authenticated `User`.\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinRedirectCallback\");\n const user = await this._signinEnd(url);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Trigger the signin with user/password.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws {@link ErrorResponse} In cases of wrong authentication.\n */\n async signinResourceOwnerCredentials({\n username,\n password,\n skipUserInfo = false\n }) {\n const logger2 = this._logger.create(\"signinResourceOwnerCredential\");\n const signinResponse = await this._client.processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo,\n extraTokenParams: this.settings.extraTokenParams\n });\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Trigger a request (via a popup window) to the authorization endpoint.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws `Error` In cases of wrong authentication.\n */\n async signinPopup(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signinPopup\");\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const {\n popupWindowFeatures,\n popupWindowTarget,\n popupSignal,\n popupAbortOnClose,\n ...requestArgs\n } = args;\n const url = this.settings.popup_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No popup_redirect_uri configured\"));\n }\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget, popupSignal, popupAbortOnClose });\n const user = await this._signin({\n request_type: \"si:p\",\n redirect_uri: url,\n display: \"popup\",\n dpopJkt,\n ...requestArgs\n }, handle);\n if (user) {\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n /**\n * Notify the opening window of response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signinPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n /**\n * Trigger a silent request (via refresh token or an iframe) to the authorization endpoint.\n *\n * @returns A promise that contains the authenticated `User`.\n */\n async signinSilent(args = {}) {\n var _a, _b;\n const logger2 = this._logger.create(\"signinSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n let user = await this._loadUser();\n if (!args.forceIframeAuth && (user == null ? void 0 : user.refresh_token)) {\n logger2.debug(\"using refresh token\");\n const state = new RefreshState(user);\n return await this._useRefreshToken({\n state,\n redirect_uri: requestArgs.redirect_uri,\n resource: requestArgs.resource,\n extraTokenParams: requestArgs.extraTokenParams,\n timeoutInSeconds: silentRequestTimeoutInSeconds\n });\n }\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n let verifySub;\n if (user && this.settings.validateSubOnSilentRenew) {\n logger2.debug(\"subject prior to silent renew:\", user.profile.sub);\n verifySub = user.profile.sub;\n }\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n user = await this._signin({\n request_type: \"si:s\",\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n dpopJkt,\n ...requestArgs\n }, handle, verifySub);\n if (user) {\n if ((_b = user.profile) == null ? void 0 : _b.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n async _useRefreshToken(args) {\n const response = await this._client.useRefreshToken({\n timeoutInSeconds: this.settings.silentRequestTimeoutInSeconds,\n ...args\n });\n const user = new User({ ...args.state, ...response });\n await this.storeUser(user);\n await this._events.load(user);\n return user;\n }\n /**\n *\n * Notify the parent window of response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n /**\n * Process any response (callback) from the authorization endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signinRedirectCallback}\n * - {@link UserManager.signinPopupCallback}\n * - {@link UserManager.signinSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signin cannot be processed.\n */\n async signinCallback(url = window.location.href) {\n const { state } = await this._client.readSigninResponseState(url);\n switch (state.request_type) {\n case \"si:r\":\n return await this.signinRedirectCallback(url);\n case \"si:p\":\n await this.signinPopupCallback(url);\n break;\n case \"si:s\":\n await this.signinSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid request_type in state\");\n }\n return void 0;\n }\n /**\n * Process any response (callback) from the end session endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signoutRedirectCallback}\n * - {@link UserManager.signoutPopupCallback}\n * - {@link UserManager.signoutSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signout cannot be processed.\n */\n async signoutCallback(url = window.location.href, keepOpen = false) {\n const { state } = await this._client.readSignoutResponseState(url);\n if (!state) {\n return void 0;\n }\n switch (state.request_type) {\n case \"so:r\":\n return await this.signoutRedirectCallback(url);\n case \"so:p\":\n await this.signoutPopupCallback(url, keepOpen);\n break;\n case \"so:s\":\n await this.signoutSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid request_type in state\");\n }\n return void 0;\n }\n /**\n * Query OP for user's current signin status.\n *\n * @returns A promise object with session_state and subject identifier.\n */\n async querySessionStatus(args = {}) {\n const logger2 = this._logger.create(\"querySessionStatus\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n const user = await this._loadUser();\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n const navResponse = await this._signinStart({\n request_type: \"si:s\",\n // this acts like a signin silent\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n response_type: this.settings.query_status_response_type,\n scope: \"openid\",\n skipUserInfo: true,\n ...requestArgs\n }, handle);\n try {\n const extraHeaders = {};\n const signinResponse = await this._client.processSigninResponse(navResponse.url, extraHeaders);\n logger2.debug(\"got signin response\");\n if (signinResponse.session_state && signinResponse.profile.sub) {\n logger2.info(\"success for subject\", signinResponse.profile.sub);\n return {\n session_state: signinResponse.session_state,\n sub: signinResponse.profile.sub\n };\n }\n logger2.info(\"success, user not authenticated\");\n return null;\n } catch (err) {\n if (this.settings.monitorAnonymousSession && err instanceof ErrorResponse) {\n switch (err.error) {\n case \"login_required\":\n case \"consent_required\":\n case \"interaction_required\":\n case \"account_selection_required\":\n logger2.info(\"success for anonymous user\");\n return {\n session_state: err.session_state\n };\n }\n }\n throw err;\n }\n }\n async _signin(args, handle, verifySub) {\n const navResponse = await this._signinStart(args, handle);\n return await this._signinEnd(navResponse.url, verifySub);\n }\n async _signinStart(args, handle) {\n const logger2 = this._logger.create(\"_signinStart\");\n try {\n const signinRequest = await this._client.createSigninRequest(args);\n logger2.debug(\"got signin request\");\n return await handle.navigate({\n url: signinRequest.url,\n state: signinRequest.state.id,\n response_mode: signinRequest.state.response_mode,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signinEnd(url, verifySub) {\n const logger2 = this._logger.create(\"_signinEnd\");\n const extraHeaders = {};\n const signinResponse = await this._client.processSigninResponse(url, extraHeaders);\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse, verifySub);\n return user;\n }\n async _buildUser(signinResponse, verifySub) {\n const logger2 = this._logger.create(\"_buildUser\");\n const user = new User(signinResponse);\n if (verifySub) {\n if (verifySub !== user.profile.sub) {\n logger2.debug(\"current user does not match user returned from signin. sub from signin:\", user.profile.sub);\n throw new ErrorResponse({ ...signinResponse, error: \"login_required\" });\n }\n logger2.debug(\"current user matches user returned from signin\");\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n await this._events.load(user);\n return user;\n }\n /**\n * Trigger a redirect of the current window to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutRedirect(args = {}) {\n const logger2 = this._logger.create(\"signoutRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signoutStart({\n request_type: \"so:r\",\n post_logout_redirect_uri: this.settings.post_logout_redirect_uri,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Process response (callback) from the end session endpoint.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise containing signout response\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutRedirectCallback\");\n const response = await this._signoutEnd(url);\n logger2.info(\"success\");\n return response;\n }\n /**\n * Trigger a redirect of a popup window to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutPopup(args = {}) {\n const logger2 = this._logger.create(\"signoutPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n popupSignal,\n ...requestArgs\n } = args;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget, popupSignal });\n await this._signout({\n request_type: \"so:p\",\n post_logout_redirect_uri: url,\n // we're putting a dummy entry in here because we\n // need a unique id from the state for notification\n // to the parent window, which is necessary if we\n // plan to return back to the client after signout\n // and so we can close the popup after signout\n state: url == null ? void 0 : {},\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Process response (callback) from the end session endpoint from a popup window.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signoutPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n async _signout(args, handle) {\n const navResponse = await this._signoutStart(args, handle);\n return await this._signoutEnd(navResponse.url);\n }\n async _signoutStart(args = {}, handle) {\n var _a;\n const logger2 = this._logger.create(\"_signoutStart\");\n try {\n const user = await this._loadUser();\n logger2.debug(\"loaded current user from storage\");\n if (this.settings.revokeTokensOnSignout) {\n await this._revokeInternal(user);\n }\n const id_token = args.id_token_hint || user && user.id_token;\n if (id_token) {\n logger2.debug(\"setting id_token_hint in signout request\");\n args.id_token_hint = id_token;\n }\n await this.removeUser();\n logger2.debug(\"user removed, creating signout request\");\n const signoutRequest = await this._client.createSignoutRequest(args);\n logger2.debug(\"got signout request\");\n return await handle.navigate({\n url: signoutRequest.url,\n state: (_a = signoutRequest.state) == null ? void 0 : _a.id,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signoutEnd(url) {\n const logger2 = this._logger.create(\"_signoutEnd\");\n const signoutResponse = await this._client.processSignoutResponse(url);\n logger2.debug(\"got signout response\");\n return signoutResponse;\n }\n /**\n * Trigger a silent request (via an iframe) to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutSilent(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signoutSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const id_token_hint = this.settings.includeIdTokenInSilentSignout ? (_a = await this._loadUser()) == null ? void 0 : _a.id_token : void 0;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n await this._signout({\n request_type: \"so:s\",\n post_logout_redirect_uri: url,\n id_token_hint,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Notify the parent window of response (callback) from the end session endpoint.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n async revokeTokens(types) {\n const user = await this._loadUser();\n await this._revokeInternal(user, types);\n }\n async _revokeInternal(user, types = this.settings.revokeTokenTypes) {\n const logger2 = this._logger.create(\"_revokeInternal\");\n if (!user) return;\n const typesPresent = types.filter((type) => typeof user[type] === \"string\");\n if (!typesPresent.length) {\n logger2.debug(\"no need to revoke due to no token(s)\");\n return;\n }\n for (const type of typesPresent) {\n await this._client.revokeToken(\n user[type],\n type\n );\n logger2.info(`${type} revoked successfully`);\n if (type !== \"access_token\") {\n user[type] = null;\n }\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n await this._events.load(user);\n }\n /**\n * Enables silent renew for the `UserManager`.\n */\n startSilentRenew() {\n this._logger.create(\"startSilentRenew\");\n void this._silentRenewService.start();\n }\n /**\n * Disables silent renew for the `UserManager`.\n */\n stopSilentRenew() {\n this._silentRenewService.stop();\n }\n get _userStoreKey() {\n return `user:${this.settings.authority}:${this.settings.client_id}`;\n }\n async _loadUser() {\n const logger2 = this._logger.create(\"_loadUser\");\n const storageString = await this.settings.userStore.get(this._userStoreKey);\n if (storageString) {\n logger2.debug(\"user storageString loaded\");\n return User.fromStorageString(storageString);\n }\n logger2.debug(\"no user storageString\");\n return null;\n }\n async storeUser(user) {\n const logger2 = this._logger.create(\"storeUser\");\n if (user) {\n logger2.debug(\"storing user\");\n const storageString = user.toStorageString();\n await this.settings.userStore.set(this._userStoreKey, storageString);\n } else {\n this._logger.debug(\"removing user\");\n await this.settings.userStore.remove(this._userStoreKey);\n if (this.settings.dpop) {\n await this.settings.dpop.store.remove(this.settings.client_id);\n }\n }\n }\n /**\n * Removes stale state entries in storage for incomplete authorize requests.\n */\n async clearStaleState() {\n await this._client.clearStaleState();\n }\n /**\n * Dynamically generates a DPoP proof for a given user, URL and optional Http method.\n * This method is useful when you need to make a request to a resource server\n * with fetch or similar, and you need to include a DPoP proof in a DPoP header.\n * @param url - The URL to generate the DPoP proof for\n * @param user - The user to generate the DPoP proof for\n * @param httpMethod - Optional, defaults to \"GET\"\n * @param nonce - Optional nonce provided by the resource server\n *\n * @returns A promise containing the DPoP proof or undefined if DPoP is not enabled/no user is found.\n */\n async dpopProof(url, user, httpMethod, nonce) {\n var _a, _b;\n const dpopState = await ((_b = (_a = this.settings.dpop) == null ? void 0 : _a.store) == null ? void 0 : _b.get(this.settings.client_id));\n if (dpopState) {\n return await CryptoUtils.generateDPoPProof({\n url,\n accessToken: user == null ? void 0 : user.access_token,\n httpMethod,\n keyPair: dpopState.keys,\n nonce\n });\n }\n return void 0;\n }\n async generateDPoPJkt(dpopSettings) {\n let dpopState = await dpopSettings.store.get(this.settings.client_id);\n if (!dpopState) {\n const dpopKeys = await CryptoUtils.generateDPoPKeys();\n dpopState = new DPoPState(dpopKeys);\n await dpopSettings.store.set(this.settings.client_id, dpopState);\n }\n return await CryptoUtils.generateDPoPJkt(dpopState.keys);\n }\n};\n\n// package.json\nvar version = \"3.5.0\";\n\n// src/Version.ts\nvar Version = version;\n\n// src/IndexedDbDPoPStore.ts\nvar IndexedDbDPoPStore = class {\n constructor() {\n this._dbName = \"oidc\";\n this._storeName = \"dpop\";\n }\n async set(key, value) {\n const store = await this.createStore(this._dbName, this._storeName);\n await store(\"readwrite\", (str) => {\n str.put(value, key);\n return this.promisifyRequest(str.transaction);\n });\n }\n async get(key) {\n const store = await this.createStore(this._dbName, this._storeName);\n return await store(\"readonly\", (str) => {\n return this.promisifyRequest(str.get(key));\n });\n }\n async remove(key) {\n const item = await this.get(key);\n const store = await this.createStore(this._dbName, this._storeName);\n await store(\"readwrite\", (str) => {\n return this.promisifyRequest(str.delete(key));\n });\n return item;\n }\n async getAllKeys() {\n const store = await this.createStore(this._dbName, this._storeName);\n return await store(\"readonly\", (str) => {\n return this.promisifyRequest(str.getAllKeys());\n });\n }\n promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n request.onabort = request.onerror = () => reject(request.error);\n });\n }\n async createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const db = await this.promisifyRequest(request);\n return async (txMode, callback) => {\n const tx = db.transaction(storeName, txMode);\n const store = tx.objectStore(storeName);\n return await callback(store);\n };\n }\n};\nexport {\n AccessTokenEvents,\n CheckSessionIFrame,\n DPoPState,\n ErrorResponse,\n ErrorTimeout,\n InMemoryWebStorage,\n IndexedDbDPoPStore,\n Log,\n Logger,\n MetadataService,\n OidcClient,\n OidcClientSettingsStore,\n SessionMonitor,\n SigninResponse,\n SigninState,\n SignoutResponse,\n State,\n User,\n UserManager,\n UserManagerSettingsStore,\n Version,\n WebStorageStateStore\n};\n//# sourceMappingURL=oidc-client-ts.js.map\n","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Errors expected to be encountered during OIDC discovery, client registration, and authentication.\n * Not intended to be displayed directly to the user.\n */\nexport var OidcError = /*#__PURE__*/function (OidcError) {\n OidcError[\"NotSupported\"] = \"OIDC authentication not supported\";\n OidcError[\"Misconfigured\"] = \"OIDC is misconfigured\";\n OidcError[\"General\"] = \"Something went wrong with OIDC discovery\";\n OidcError[\"OpSupport\"] = \"Configured OIDC OP does not support required functions\";\n OidcError[\"DynamicRegistrationNotSupported\"] = \"Dynamic registration not supported\";\n OidcError[\"DynamicRegistrationFailed\"] = \"Dynamic registration failed\";\n OidcError[\"DynamicRegistrationInvalid\"] = \"Dynamic registration invalid response\";\n OidcError[\"CodeExchangeFailed\"] = \"Failed to exchange code for token\";\n OidcError[\"InvalidBearerTokenResponse\"] = \"Invalid bearer token response\";\n OidcError[\"InvalidIdToken\"] = \"Invalid ID token\";\n OidcError[\"MissingOrInvalidStoredState\"] = \"State required to finish logging in is not found in storage.\";\n return OidcError;\n}({});\n//# sourceMappingURL=error.js.map","/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { jwtDecode } from \"jwt-decode\";\nimport { logger } from \"../logger.js\";\nimport { OidcError } from \"./error.js\";\nimport { OAuthGrantType } from \"./index.js\";\n\n/**\n * Metadata from OAuth 2.0 client authentication API as per\n * https://spec.matrix.org/v1.17/client-server-api/#get_matrixclientv1auth_metadata\n * With validated properties required in type\n */\n\nvar isRecord = value => !!value && typeof value === \"object\" && !Array.isArray(value);\nvar requiredStringProperty = (wellKnown, key) => {\n if (!wellKnown[key] || !optionalStringProperty(wellKnown, key)) {\n logger.error(\"Missing or invalid property: \".concat(key));\n return false;\n }\n return true;\n};\nvar optionalStringProperty = (wellKnown, key) => {\n if (!!wellKnown[key] && typeof wellKnown[key] !== \"string\") {\n logger.error(\"Invalid property: \".concat(key));\n return false;\n }\n return true;\n};\nvar optionalStringArrayProperty = (wellKnown, key) => {\n if (!!wellKnown[key] && (!Array.isArray(wellKnown[key]) || !wellKnown[key].every(v => typeof v === \"string\"))) {\n logger.error(\"Invalid property: \".concat(key));\n return false;\n }\n return true;\n};\nvar requiredArrayValue = (wellKnown, key, value) => {\n var array = wellKnown[key];\n if (!array || !Array.isArray(array) || !array.includes(value)) {\n logger.error(\"Invalid property: \".concat(key, \". \").concat(value, \" is required.\"));\n return false;\n }\n return true;\n};\n\n/**\n * Validates OAuth 2.0 auth metadata as defined by\n * https://spec.matrix.org/v1.17/client-server-api/#get_matrixclientv1auth_metadata\n * is compatible with Element's OAuth/OIDC flow\n * @param authMetadata - json object\n * @returns valid issuer config\n * @throws Error - when issuer config is not found or is invalid\n */\nexport var validateAuthMetadata = authMetadata => {\n if (!isRecord(authMetadata)) {\n logger.error(\"Issuer configuration not found or malformed\");\n throw new Error(OidcError.OpSupport);\n }\n var isInvalid = [requiredStringProperty(authMetadata, \"issuer\"), requiredStringProperty(authMetadata, \"authorization_endpoint\"), requiredStringProperty(authMetadata, \"token_endpoint\"), requiredStringProperty(authMetadata, \"revocation_endpoint\"), optionalStringProperty(authMetadata, \"registration_endpoint\"), optionalStringProperty(authMetadata, \"account_management_uri\"), optionalStringProperty(authMetadata, \"device_authorization_endpoint\"), optionalStringArrayProperty(authMetadata, \"account_management_actions_supported\"), requiredArrayValue(authMetadata, \"response_types_supported\", \"code\"), requiredArrayValue(authMetadata, \"grant_types_supported\", OAuthGrantType.AuthorizationCode), requiredArrayValue(authMetadata, \"code_challenge_methods_supported\", \"S256\"), optionalStringArrayProperty(authMetadata, \"prompt_values_supported\")].some(isValid => !isValid);\n if (!isInvalid) {\n return authMetadata;\n }\n logger.error(\"Issuer configuration not valid\");\n throw new Error(OidcError.OpSupport);\n};\nexport var decodeIdToken = token => {\n try {\n return jwtDecode(token);\n } catch (error) {\n logger.error(\"Could not decode id_token\", error);\n throw error;\n }\n};\n\n/**\n * Validate idToken\n * https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation\n * @param idToken - id token from token endpoint\n * @param issuer - issuer for the OP as found during discovery\n * @param clientId - this client's id as registered with the OP\n * @param nonce - nonce used in the authentication request\n * @throws when id token is invalid\n */\nexport var validateIdToken = (idToken, issuer, clientId, nonce) => {\n try {\n if (!idToken) {\n throw new Error(\"No ID token\");\n }\n var claims = decodeIdToken(idToken);\n\n // The Issuer Identifier for the OpenID Provider MUST exactly match the value of the iss (issuer) Claim.\n if (claims.iss !== issuer) {\n throw new Error(\"Invalid issuer\");\n }\n /**\n * The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified by the iss (issuer) Claim as an audience.\n * The aud (audience) Claim MAY contain an array with more than one element.\n * The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience, or if it contains additional audiences not trusted by the Client.\n * EW: Don't accept tokens with other untrusted audiences\n * */\n var sanitisedAuds = typeof claims.aud === \"string\" ? [claims.aud] : claims.aud;\n if (!sanitisedAuds.includes(clientId)) {\n throw new Error(\"Invalid audience\");\n }\n\n /**\n * If a nonce value was sent in the Authentication Request, a nonce Claim MUST be present and its value checked\n * to verify that it is the same value as the one that was sent in the Authentication Request.\n */\n if (nonce !== undefined && claims.nonce !== nonce) {\n throw new Error(\"Invalid nonce\");\n }\n\n /**\n * The current time MUST be before the time represented by the exp Claim.\n * exp is an epoch timestamp in seconds\n * */\n if (!claims.exp || Date.now() > claims.exp * 1000) {\n throw new Error(\"Invalid expiry\");\n }\n } catch (error) {\n logger.error(\"Invalid ID token\", error);\n throw new Error(OidcError.InvalidIdToken);\n }\n};\n\n/**\n * State we ask OidcClient to store when starting oidc authorization flow (in `generateOidcAuthorizationUrl`)\n * so that we can access it on return from the OP and complete login\n */\n\n/**\n * Validate stored user state exists and is valid\n * @param userState - userState returned by oidcClient.processSigninResponse\n * @throws when userState is invalid\n */\nexport function validateStoredUserState(userState) {\n if (!isRecord(userState)) {\n logger.error(\"Stored user state not found\");\n throw new Error(OidcError.MissingOrInvalidStoredState);\n }\n var isInvalid = [requiredStringProperty(userState, \"homeserverUrl\"), requiredStringProperty(userState, \"nonce\"), optionalStringProperty(userState, \"identityServerUrl\")].some(isValid => !isValid);\n if (isInvalid) {\n throw new Error(OidcError.MissingOrInvalidStoredState);\n }\n}\n\n/**\n * The expected response type from the token endpoint during authorization code flow\n * Normalized to always use capitalized 'Bearer' for token_type\n *\n * See https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.4,\n * https://openid.net/specs/openid-connect-basic-1_0.html#TokenOK.\n */\n\n/**\n * Make required properties required in type\n */\n\nvar isValidBearerTokenResponse = response => isRecord(response) && requiredStringProperty(response, \"token_type\") &&\n// token_type is case insensitive, some OPs return `token_type: \"bearer\"`\nresponse[\"token_type\"].toLowerCase() === \"bearer\" && requiredStringProperty(response, \"access_token\") && requiredStringProperty(response, \"refresh_token\") && (!(\"expires_in\" in response) || typeof response[\"expires_in\"] === \"number\");\nexport function validateBearerTokenResponse(response) {\n if (!isValidBearerTokenResponse(response)) {\n throw new Error(OidcError.InvalidBearerTokenResponse);\n }\n}\n//# sourceMappingURL=validate.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { OidcError } from \"./error.js\";\nimport { Method } from \"../http-api/index.js\";\nimport { logger } from \"../logger.js\";\n\n/**\n * Client metadata passed to registration endpoint\n */\n\n/**\n * Request body for dynamic registration as defined by https://github.com/matrix-org/matrix-spec-proposals/pull/2966\n */\n\n/**\n * The OAuth 2.0 grant types that are defined for Matrix in https://spec.matrix.org/v1.17/client-server-api/#grant-types\n */\nexport var OAuthGrantType = /*#__PURE__*/function (OAuthGrantType) {\n /**\n * See https://spec.matrix.org/v1.17/client-server-api/#authorization-code-grant\n */\n OAuthGrantType[\"AuthorizationCode\"] = \"authorization_code\";\n /**\n * https://spec.matrix.org/v1.17/client-server-api/#refresh-token-grant\n */\n OAuthGrantType[\"RefreshToken\"] = \"refresh_token\";\n /**\n * The OAuth 2.0 Device Authorization Grant type identifier as per\n * https://www.rfc-editor.org/rfc/rfc8628.html#section-7.2 from\n * [MSC4341](https://github.com/matrix-org/matrix-spec-proposals/pull/4341).\n *\n * @experimental Note that this is UNSTABLE and may have breaking changes without notice.\n */\n OAuthGrantType[\"DeviceAuthorization\"] = \"urn:ietf:params:oauth:grant-type:device_code\";\n return OAuthGrantType;\n}({});\n\n/**\n * The name \"scope\" is a misnomer here as it is actually a \"grant type\".\n *\n * @deprecated use `OAuthGrantType.DeviceAuthorization` instead\n */\nexport var DEVICE_CODE_SCOPE = OAuthGrantType.DeviceAuthorization;\n\n// Check that URIs have a common base, as per the MSC2966 definition\nvar urlHasCommonBase = (base, urlStr) => {\n if (!urlStr) return false;\n var url = new URL(urlStr);\n if (url.protocol !== base.protocol) return false;\n if (url.hostname !== base.hostname && !url.hostname.endsWith(\".\".concat(base.hostname))) return false;\n return true;\n};\n\n/**\n * Attempts dynamic registration against the configured registration endpoint.\n * Will ignore any URIs that do not use client_uri as a common base as per the spec.\n * @param delegatedAuthConfig - Auth config from {@link discoverAndValidateOIDCIssuerWellKnown}\n * @param clientMetadata - The metadata for the client which to register\n * @returns Promise<string> resolved with registered clientId\n * @throws when registration is not supported, on failed request or invalid response\n */\nexport var registerOidcClient = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (delegatedAuthConfig, clientMetadata) {\n if (!delegatedAuthConfig.registration_endpoint) {\n throw new Error(OidcError.DynamicRegistrationNotSupported);\n }\n var grantTypes = [OAuthGrantType.AuthorizationCode, OAuthGrantType.RefreshToken];\n if (grantTypes.some(scope => !delegatedAuthConfig.grant_types_supported.includes(scope))) {\n throw new Error(OidcError.DynamicRegistrationNotSupported);\n }\n\n // ask for device authorization grant if supported\n if (delegatedAuthConfig.grant_types_supported.includes(OAuthGrantType.DeviceAuthorization)) {\n grantTypes.push(OAuthGrantType.DeviceAuthorization);\n }\n var commonBase = new URL(clientMetadata.clientUri);\n\n // https://openid.net/specs/openid-connect-registration-1_0.html\n var metadata = {\n client_name: clientMetadata.clientName,\n client_uri: clientMetadata.clientUri,\n response_types: [\"code\"],\n grant_types: grantTypes,\n redirect_uris: clientMetadata.redirectUris,\n id_token_signed_response_alg: \"RS256\",\n token_endpoint_auth_method: \"none\",\n application_type: clientMetadata.applicationType,\n contacts: clientMetadata.contacts,\n logo_uri: urlHasCommonBase(commonBase, clientMetadata.logoUri) ? clientMetadata.logoUri : undefined,\n policy_uri: urlHasCommonBase(commonBase, clientMetadata.policyUri) ? clientMetadata.policyUri : undefined,\n tos_uri: urlHasCommonBase(commonBase, clientMetadata.tosUri) ? clientMetadata.tosUri : undefined\n };\n var headers = {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\"\n };\n try {\n var response = yield fetch(delegatedAuthConfig.registration_endpoint, {\n method: Method.Post,\n headers,\n body: JSON.stringify(metadata)\n });\n if (response.status >= 400) {\n throw new Error(OidcError.DynamicRegistrationFailed);\n }\n var body = yield response.json();\n var clientId = body[\"client_id\"];\n if (!clientId || typeof clientId !== \"string\") {\n throw new Error(OidcError.DynamicRegistrationInvalid);\n }\n return clientId;\n } catch (error) {\n if (Object.values(OidcError).includes(error.message)) {\n throw error;\n } else {\n logger.error(\"Dynamic registration request failed\", error);\n throw new Error(OidcError.DynamicRegistrationFailed);\n }\n }\n });\n return function registerOidcClient(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceMappingURL=register.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { Log, OidcClient, SigninResponse, SigninState, WebStorageStateStore } from \"oidc-client-ts\";\nimport { logger } from \"../logger.js\";\nimport { secureRandomString } from \"../randomstring.js\";\nimport { OidcError } from \"./error.js\";\nimport { validateBearerTokenResponse, validateIdToken, validateStoredUserState } from \"./validate.js\";\nimport { sha256 } from \"../digest.js\";\nimport { encodeUnpaddedBase64Url } from \"../base64.js\";\nimport { OAuthGrantType } from \"./register.js\";\nimport { sleep } from \"../utils.js\";\nimport { Method } from \"../http-api/index.js\";\n\n// reexport for backwards compatibility\n\n/**\n * Authorization parameters which are used in the authentication request of an OIDC auth code flow.\n *\n * See https://openid.net/specs/openid-connect-basic-1_0.html#RequestParameters.\n */\n\n/**\n * @experimental\n * Generate the scope used in authorization request with OIDC OP\n * @returns scope\n */\nexport var generateScope = deviceId => {\n var safeDeviceId = deviceId !== null && deviceId !== void 0 ? deviceId : secureRandomString(10);\n return \"openid urn:matrix:org.matrix.msc2967.client:api:* urn:matrix:org.matrix.msc2967.client:device:\".concat(safeDeviceId);\n};\n\n// https://www.rfc-editor.org/rfc/rfc7636\nvar generateCodeChallenge = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (codeVerifier) {\n if (!globalThis.crypto.subtle) {\n // @TODO(kerrya) should this be allowed? configurable?\n logger.warn(\"A secure context is required to generate code challenge. Using plain text code challenge\");\n return codeVerifier;\n }\n var hashBuffer = yield sha256(codeVerifier);\n return encodeUnpaddedBase64Url(hashBuffer);\n });\n return function generateCodeChallenge(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * Generate authorization params to pass to {@link generateAuthorizationUrl}.\n *\n * Used as part of an authorization code OIDC flow: see https://openid.net/specs/openid-connect-basic-1_0.html#CodeFlow.\n *\n * @param redirectUri - absolute url for OP to redirect to after authorization\n * @returns AuthorizationParams\n */\nexport var generateAuthorizationParams = _ref2 => {\n var redirectUri = _ref2.redirectUri;\n return {\n scope: generateScope(),\n redirectUri,\n state: secureRandomString(8),\n nonce: secureRandomString(8),\n codeVerifier: secureRandomString(64) // https://tools.ietf.org/html/rfc7636#section-4.1 length needs to be 43-128 characters\n };\n};\n\n/**\n * @deprecated use generateOidcAuthorizationUrl\n * Generate a URL to attempt authorization with the OP\n * See https://openid.net/specs/openid-connect-basic-1_0.html#CodeRequest\n * @param authorizationUrl - endpoint to attempt authorization with the OP\n * @param clientId - id of this client as registered with the OP\n * @param authorizationParams - params to be used in the url\n * @returns a Promise with the url as a string\n */\nexport var generateAuthorizationUrl = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* (authorizationUrl, clientId, _ref3) {\n var scope = _ref3.scope,\n redirectUri = _ref3.redirectUri,\n state = _ref3.state,\n nonce = _ref3.nonce,\n codeVerifier = _ref3.codeVerifier;\n var url = new URL(authorizationUrl);\n url.searchParams.append(\"response_mode\", \"query\");\n url.searchParams.append(\"response_type\", \"code\");\n url.searchParams.append(\"redirect_uri\", redirectUri);\n url.searchParams.append(\"client_id\", clientId);\n url.searchParams.append(\"state\", state);\n url.searchParams.append(\"scope\", scope);\n url.searchParams.append(\"nonce\", nonce);\n url.searchParams.append(\"code_challenge_method\", \"S256\");\n url.searchParams.append(\"code_challenge\", yield generateCodeChallenge(codeVerifier));\n return url.toString();\n });\n return function generateAuthorizationUrl(_x2, _x3, _x4) {\n return _ref4.apply(this, arguments);\n };\n}();\n\n/**\n * @experimental\n * Generate a URL to attempt authorization with the OP\n * See https://openid.net/specs/openid-connect-basic-1_0.html#CodeRequest\n * @param metadata - validated metadata from OP discovery\n * @param clientId - this client's id as registered with the OP\n * @param homeserverUrl - used to establish the session on return from the OP\n * @param identityServerUrl - used to establish the session on return from the OP\n * @param nonce - state\n * @param prompt - indicates to the OP which flow the user should see - eg login or registration\n * See https://openid.net/specs/openid-connect-prompt-create-1_0.html#name-prompt-parameter\n * @param urlState - value to append to the opaque state identifier to uniquely identify the callback\n * @param loginHint - value to send as the `login_hint` to the OP, giving a hint about the login identifier the user might use to log in.\n * See {@link https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest OIDC core 3.1.2.1}.\n * @param responseMode - value to send as the `response_mode` to the OP, selecting how auth is passed back during redirect.\n * See {@link https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest OIDC core 3.1.2.1}.\n * @returns a Promise with the url as a string\n */\nexport var generateOidcAuthorizationUrl = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(function* (_ref5) {\n var metadata = _ref5.metadata,\n redirectUri = _ref5.redirectUri,\n clientId = _ref5.clientId,\n homeserverUrl = _ref5.homeserverUrl,\n identityServerUrl = _ref5.identityServerUrl,\n nonce = _ref5.nonce,\n prompt = _ref5.prompt,\n urlState = _ref5.urlState,\n loginHint = _ref5.loginHint,\n _ref5$responseMode = _ref5.responseMode,\n responseMode = _ref5$responseMode === void 0 ? \"query\" : _ref5$responseMode;\n var scope = generateScope();\n var oidcClient = new OidcClient(_objectSpread(_objectSpread({}, metadata), {}, {\n client_id: clientId,\n redirect_uri: redirectUri,\n authority: metadata.issuer,\n response_mode: responseMode,\n response_type: \"code\",\n scope,\n stateStore: new WebStorageStateStore({\n prefix: \"mx_oidc_\",\n store: window.sessionStorage\n })\n }));\n var userState = {\n homeserverUrl,\n nonce,\n identityServerUrl\n };\n var request = yield oidcClient.createSigninRequest({\n state: userState,\n nonce,\n prompt,\n url_state: urlState,\n login_hint: loginHint\n });\n return request.url;\n });\n return function generateOidcAuthorizationUrl(_x5) {\n return _ref6.apply(this, arguments);\n };\n}();\n\n/**\n * Normalize token_type to use capital case to make consuming the token response easier\n * token_type is case insensitive, and it is spec-compliant for OPs to return token_type: \"bearer\"\n * Later, when used in auth headers it is case sensitive and must be Bearer\n * See: https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.4\n *\n * @param response - validated token response\n * @returns response with token_type set to 'Bearer'\n */\nvar normalizeBearerTokenResponseTokenType = response => ({\n id_token: response.id_token,\n scope: response.scope,\n expires_at: response.expires_at,\n refresh_token: response.refresh_token,\n access_token: response.access_token,\n token_type: \"Bearer\"\n});\n\n/**\n * @experimental\n * Attempt to exchange authorization code for bearer token.\n *\n * Takes the authorization code returned by the OpenID Provider via the authorization URL, and makes a\n * request to the Token Endpoint, to obtain the access token, refresh token, etc.\n *\n * @param code - authorization code as returned by OP during authorization\n * @param state - authorization state param as returned by OP during authorization\n * @param responseMode - the response mode used for authentication\n * @returns valid bearer token response\n * @throws An `Error` with `message` set to an entry in {@link OidcError},\n * when the request fails, or the returned token response is invalid.\n */\nexport var completeAuthorizationCodeGrant = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(function* (code, state) {\n var responseMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"query\";\n /**\n * Element Web strips and changes the url on starting the app\n * Use the code and state from query params to rebuild a url\n * so that oidc-client can parse it\n */\n var reconstructedUrl = new URL(window.location.origin);\n var params = new URLSearchParams({\n code,\n state\n });\n if (responseMode === \"query\") {\n reconstructedUrl.search = params.toString();\n } else {\n reconstructedUrl.hash = \"#\".concat(params.toString());\n }\n\n // set oidc-client to use our logger\n Log.setLogger(logger);\n try {\n var response = new SigninResponse(params);\n var stateStore = new WebStorageStateStore({\n prefix: \"mx_oidc_\",\n store: window.sessionStorage\n });\n\n // retrieve the state we put in storage at the start of oidc auth flow\n var stateString = yield stateStore.get(response.state);\n if (!stateString) {\n throw new Error(OidcError.MissingOrInvalidStoredState);\n }\n\n // hydrate the sign in state and create a client\n // the stored sign in state includes oidc configuration we set at the start of the oidc login flow\n var signInState = yield SigninState.fromStorageString(stateString);\n var client = new OidcClient(_objectSpread(_objectSpread({}, signInState), {}, {\n stateStore\n }));\n\n // validate the code and state, and attempt to swap the code for tokens\n var signinResponse = yield client.processSigninResponse(reconstructedUrl.href);\n\n // extra values we stored at the start of the login flow\n // used to complete login in the client\n var userState = signinResponse.userState;\n validateStoredUserState(userState);\n\n // throws when response is invalid\n validateBearerTokenResponse(signinResponse);\n if (signinResponse.id_token) {\n // The token is not yet in the Matrix spec so consider it optional\n // throws when token is invalid\n validateIdToken(signinResponse.id_token, client.settings.authority, client.settings.client_id, userState.nonce);\n }\n var normalizedTokenResponse = normalizeBearerTokenResponseTokenType(signinResponse);\n return {\n oidcClientSettings: {\n clientId: client.settings.client_id,\n issuer: client.settings.authority\n },\n tokenResponse: normalizedTokenResponse,\n homeserverUrl: userState.homeserverUrl,\n identityServerUrl: userState.identityServerUrl,\n idTokenClaims: signinResponse.profile\n };\n } catch (error) {\n logger.error(\"Oidc login failed\", error);\n var errorType = error.message;\n\n // rethrow errors that we recognise\n if (Object.values(OidcError).includes(errorType)) {\n throw error;\n }\n throw new Error(OidcError.CodeExchangeFailed);\n }\n });\n return function completeAuthorizationCodeGrant(_x6, _x7) {\n return _ref7.apply(this, arguments);\n };\n}();\n\n/**\n * Response from the OIDC token endpoint when exchanging a token for grant_type device_code.\n */\n\n/**\n * Error from the OIDC token endpoint when exchanging a token for grant_type device_code.\n */\n\n/**\n * Response from the OIDC device authorization endpoint.\n */\n\n/**\n * Begin OIDC device authorization flow.\n * @param options - The device authorization parameters.\n * @param options.clientId - the client ID returned from client registration.\n * @param options.scope - the scope to request for authorization.\n * @param options.metadata - the validated OIDC metadata for the Identity Provider.\n * @returns a promise that resolves to a device access token response,\n * or an error response if the user denies authorization or the device code expires.\n */\nexport var startDeviceAuthorization = /*#__PURE__*/function () {\n var _ref9 = _asyncToGenerator(function* (_ref8) {\n var clientId = _ref8.clientId,\n scope = _ref8.scope,\n metadata = _ref8.metadata;\n var body = new URLSearchParams({\n client_id: clientId,\n scope: scope\n }).toString();\n var url = metadata.device_authorization_endpoint;\n if (!url) {\n throw new Error(\"No device_authorization_endpoint given\");\n }\n var response = yield fetch(url, {\n method: Method.Post,\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body\n });\n return yield response.json();\n });\n return function startDeviceAuthorization(_x8) {\n return _ref9.apply(this, arguments);\n };\n}();\n\n/**\n * Polls the OIDC token endpoint until we get a device access token response, or encounter an unrecoverable error.\n * @param options - The device authorization parameters.\n * @param options.session - The session returned from a previous call to {@link startDeviceAuthorization}.\n * @param options.metadata - The validated OIDC metadata for the Identity Provider.\n * @param options.clientId - The client ID returned from client registration.\n * @returns a promise that resolves to a device access token response,\n * or an error response if the user denies authorization or the device code expires.\n */\nexport var waitForDeviceAuthorization = /*#__PURE__*/function () {\n var _ref1 = _asyncToGenerator(function* (_ref0) {\n var _session$interval;\n var session = _ref0.session,\n metadata = _ref0.metadata,\n clientId = _ref0.clientId;\n var interval = ((_session$interval = session.interval) !== null && _session$interval !== void 0 ? _session$interval : 5) * 1000; // poll interval\n var expiration = Date.now() + session.expires_in * 1000;\n do {\n var body = new URLSearchParams({\n device_code: session.device_code,\n grant_type: OAuthGrantType.DeviceAuthorization,\n client_id: clientId\n }).toString();\n var response = yield fetch(metadata.token_endpoint, {\n method: Method.Post,\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body\n });\n if (response.ok) {\n return yield response.json();\n }\n var errorResponse = yield response.json();\n switch (errorResponse.error) {\n case \"authorization_pending\":\n break;\n case \"slow_down\":\n interval += 5000;\n break;\n case \"access_denied\":\n case \"expired_token\":\n return errorResponse;\n }\n yield sleep(interval);\n } while (Date.now() < expiration);\n return {\n error: \"expired\"\n };\n });\n return function waitForDeviceAuthorization(_x9) {\n return _ref1.apply(this, arguments);\n };\n}();\n//# sourceMappingURL=authorize.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MetadataService, OidcClientSettingsStore } from \"oidc-client-ts\";\nimport { validateAuthMetadata } from \"./validate.js\";\nimport { Method, timeoutSignal } from \"../http-api/index.js\";\n/**\n * @experimental\n * Discover and validate delegated auth configuration\n * - delegated auth issuer openid-configuration is reachable\n * - delegated auth issuer openid-configuration is configured correctly for us\n * Fetches https://oidc-issuer.example.com/.well-known/openid-configuration and other files linked therein.\n * When successful, validated metadata is returned\n * @param issuer - the OIDC issuer as returned by the /auth_issuer API\n * @returns validated authentication metadata and optionally signing keys\n * @throws when delegated auth config is invalid or unreachable\n * @deprecated in favour of {@link MatrixClient#getAuthMetadata}\n */\nexport var discoverAndValidateOIDCIssuerWellKnown = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (issuer) {\n var issuerOpenIdConfigUrl = new URL(\".well-known/openid-configuration\", issuer);\n var issuerWellKnownResponse = yield fetch(issuerOpenIdConfigUrl, {\n method: Method.Get,\n signal: timeoutSignal(5000)\n });\n var issuerWellKnown = yield issuerWellKnownResponse.json();\n return validateAuthMetadataAndKeys(issuerWellKnown);\n });\n return function discoverAndValidateOIDCIssuerWellKnown(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\n/**\n * @experimental\n * Validate the authentication metadata and fetch the signing keys from the jwks_uri in the metadata\n * @param authMetadata - the authentication metadata to validate\n * @returns validated authentication metadata and signing keys\n */\nexport var validateAuthMetadataAndKeys = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (authMetadata) {\n var validatedIssuerConfig = validateAuthMetadata(authMetadata);\n\n // create a temporary settings store, so we can use metadata service for discovery\n var settings = new OidcClientSettingsStore({\n authority: validatedIssuerConfig.issuer,\n metadata: validatedIssuerConfig,\n redirect_uri: \"\",\n // Not known yet, this is here to make the type checker happy\n client_id: \"\" // Not known yet, this is here to make the type checker happy\n });\n var metadataService = new MetadataService(settings);\n return _objectSpread(_objectSpread({}, validatedIssuerConfig), {}, {\n signingKeys: validatedIssuerConfig.jwks_uri ? yield metadataService.getSigningKeys() : null\n });\n });\n return function validateAuthMetadataAndKeys(_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n//# sourceMappingURL=discovery.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { OidcClient, WebStorageStateStore, ErrorResponse } from \"oidc-client-ts\";\nimport { TokenRefreshLogoutError } from \"../http-api/index.js\";\nimport { generateScope } from \"./authorize.js\";\nimport { discoverAndValidateOIDCIssuerWellKnown } from \"./discovery.js\";\nimport { logger } from \"../logger.js\";\n\n/**\n * @experimental\n * Class responsible for refreshing OIDC access tokens\n *\n * Client implementations will likely want to override {@link persistTokens} to persist tokens after successful refresh\n *\n */\nexport class OidcTokenRefresher {\n constructor(\n /**\n * The OIDC issuer as returned by the /auth_issuer API\n */\n issuer,\n /**\n * id of this client as registered with the OP\n */\n clientId,\n /**\n * redirectUri as registered with OP\n */\n redirectUri,\n /**\n * Device ID of current session\n */\n deviceId,\n /**\n * idTokenClaims as returned from authorization grant\n * used to validate tokens\n */\n idTokenClaims) {\n this.issuer = issuer;\n this.clientId = clientId;\n this.redirectUri = redirectUri;\n this.deviceId = deviceId;\n this.idTokenClaims = idTokenClaims;\n /**\n * This is now just a resolved promise and will be removed in a future version.\n * Initialisation is done lazily at token refresh time.\n * @deprecated Consumers no longer need to wait for this promise.\n */\n _defineProperty(this, \"oidcClientReady\", void 0);\n // If there is a initialisation attempt in progress, we keep track of it here.\n _defineProperty(this, \"initPromise\", void 0);\n _defineProperty(this, \"oidcClient\", void 0);\n _defineProperty(this, \"inflightRefreshRequest\", void 0);\n this.oidcClientReady = Promise.resolve();\n }\n\n /**\n * Ensures that the client is initialised.\n * @returns Promise that resolves when initialisation is complete\n * @throws if initialisation fails\n */\n ensureInit() {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (!_this.oidcClient) {\n if (_this.initPromise) {\n return _this.initPromise;\n }\n _this.initPromise = _this.initialiseOidcClient(_this.issuer, _this.clientId, _this.deviceId, _this.redirectUri);\n try {\n yield _this.initPromise;\n } finally {\n _this.initPromise = undefined;\n }\n }\n })();\n }\n initialiseOidcClient(issuer, clientId, deviceId, redirectUri) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n try {\n var _config$signingKeys;\n var config = yield discoverAndValidateOIDCIssuerWellKnown(issuer);\n var scope = generateScope(deviceId);\n _this2.oidcClient = new OidcClient({\n metadata: config,\n signingKeys: (_config$signingKeys = config.signingKeys) !== null && _config$signingKeys !== void 0 ? _config$signingKeys : undefined,\n client_id: clientId,\n scope,\n redirect_uri: redirectUri,\n authority: config.issuer,\n stateStore: new WebStorageStateStore({\n prefix: \"mx_oidc_\",\n store: window.sessionStorage\n })\n });\n } catch (error) {\n logger.error(\"Failed to initialise OIDC client.\", error);\n throw new Error(\"Failed to initialise OIDC client.\");\n }\n })();\n }\n\n /**\n * Attempt token refresh using given refresh token\n * @param refreshToken - refresh token to use in request with token issuer\n * @returns tokens - Promise that resolves with new access and refresh tokens\n * @throws when token refresh fails\n */\n doRefreshAccessToken(refreshToken) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n yield _this3.ensureInit();\n if (!_this3.inflightRefreshRequest) {\n _this3.inflightRefreshRequest = _this3.getNewTokens(refreshToken);\n }\n try {\n var tokens = yield _this3.inflightRefreshRequest;\n return tokens;\n } catch (e) {\n // If we encounter an OIDC error then signal that it should cause a logout by upgrading it to a TokenRefreshLogoutError\n if (e instanceof ErrorResponse) {\n throw new TokenRefreshLogoutError(e);\n }\n throw e;\n } finally {\n _this3.inflightRefreshRequest = undefined;\n }\n })();\n }\n\n /**\n * Persist the new tokens, called after tokens are successfully refreshed.\n *\n * This function is intended to be overriden by the consumer when persistence is necessary.\n *\n * @param tokens.accessToken - new access token\n * @param tokens.refreshToken - OPTIONAL new refresh token\n */\n persistTokens(tokens) {\n return _asyncToGenerator(function* () {})();\n } // NOOP\n getNewTokens(refreshToken) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (!_this4.oidcClient) {\n throw new Error(\"Cannot get new token before OIDC client is initialised.\");\n }\n var refreshTokenState = {\n refresh_token: refreshToken,\n session_state: \"test\",\n data: undefined,\n profile: _this4.idTokenClaims\n };\n var requestStart = Date.now();\n var response = yield _this4.oidcClient.useRefreshToken({\n state: refreshTokenState,\n timeoutInSeconds: 300\n });\n var tokens = {\n accessToken: response.access_token,\n refreshToken: response.refresh_token,\n // We use the request start time to calculate the expiry time as we don't know when the server received our request\n expiry: response.expires_in ? new Date(requestStart + response.expires_in * 1000) : undefined\n };\n yield _this4.persistTokens(tokens);\n return tokens;\n })();\n }\n}\n//# sourceMappingURL=tokenRefresher.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { CapabilityPoller } from \"./capabilityPoller.js\";\nimport { ClientPrefix, Method } from \"./http-api/index.js\";\n/**\n * Manages storing and periodically refreshing the server capabilities.\n */\nexport class RetentionPolicyService extends CapabilityPoller {\n constructor(logger, http) {\n var _this;\n super(logger, http, \"retention policy\");\n _this = this;\n /**\n * Fetches the latest server capabilities from the homeserver and returns them, or rejects\n * on failure.\n */\n _defineProperty(this, \"fetch\", /*#__PURE__*/_asyncToGenerator(function* () {\n var resp = yield _this.http.authedRequest(Method.Get, \"/retention/configuration\", undefined, undefined, {\n prefix: \"\".concat(ClientPrefix.Unstable, \"/org.matrix.msc1763\")\n });\n _this.cached = resp;\n return _this.cached;\n }));\n }\n}\n//# sourceMappingURL=retentionPolicy.js.map","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nvar _excluded = [\"server\", \"limit\", \"since\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2015-2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MatrixClient} for the public class.\n */\n\nimport { SyncApi, SyncState } from \"./sync.js\";\nimport { EventStatus, MatrixEvent, MatrixEventEvent } from \"./models/event.js\";\nimport { StubStore } from \"./store/stub.js\";\nimport { createNewMatrixCall, supportsMatrixCall } from \"./webrtc/call.js\";\nimport { Filter } from \"./filter.js\";\nimport { CallEventHandler } from \"./webrtc/callEventHandler.js\";\nimport { GroupCallEventHandler } from \"./webrtc/groupCallEventHandler.js\";\nimport * as utils from \"./utils.js\";\nimport { deepCompare, noUnsafeEventProps, replaceParam, safeSet, sleep } from \"./utils.js\";\nimport { Direction, EventTimeline } from \"./models/event-timeline.js\";\nimport { PushProcessor } from \"./pushprocessor.js\";\nimport { AutoDiscovery } from \"./autodiscovery.js\";\nimport { encodeUnpaddedBase64Url } from \"./base64.js\";\nimport { TypedReEmitter } from \"./ReEmitter.js\";\nimport { logger } from \"./logger.js\";\nimport { SERVICE_TYPES } from \"./service-types.js\";\nimport { ClientPrefix, IdentityPrefix, MatrixError, MatrixHttpApi, MediaPrefix, Method, retryNetworkOperation } from \"./http-api/index.js\";\nimport { User, UserEvent } from \"./models/user.js\";\nimport { getHttpUriForMxc } from \"./content-repo.js\";\nimport { SearchResult } from \"./models/search-result.js\";\nimport * as ContentHelpers from \"./content-helpers.js\";\nimport { NotificationCountType } from \"./models/room.js\";\nimport { RoomMemberEvent } from \"./models/room-member.js\";\nimport { RoomStateEvent } from \"./models/room-state.js\";\nimport { isSendDelayedEventRequestOpts, UpdateDelayedEventAction } from \"./@types/requests.js\";\nimport { EventType, LOCAL_NOTIFICATION_SETTINGS_PREFIX, MSC3912_RELATION_BASED_REDACTIONS_PROP, MsgType, PUSHER_ENABLED, RelationType, RoomCreateTypeField, RoomType, UNSTABLE_MSC3088_ENABLED, UNSTABLE_MSC3088_PURPOSE, UNSTABLE_MSC3089_TREE_SUBTYPE } from \"./@types/event.js\";\nimport { GuestAccess, HistoryVisibility, Preset } from \"./@types/partials.js\";\nimport { eventMapperFor } from \"./event-mapper.js\";\nimport { secureRandomString } from \"./randomstring.js\";\nimport { DEFAULT_TREE_POWER_LEVELS_TEMPLATE, MSC3089TreeSpace } from \"./models/MSC3089TreeSpace.js\";\nimport { SearchOrderBy } from \"./@types/search.js\";\nimport { PushRuleActionName, PushRuleKind } from \"./@types/PushRules.js\";\nimport { GroupCall } from \"./webrtc/groupCall.js\";\nimport { MediaHandler } from \"./webrtc/mediaHandler.js\";\nimport { TypedEventEmitter } from \"./models/typed-event-emitter.js\";\nimport { MAIN_ROOM_TIMELINE, ReceiptType } from \"./@types/read_receipts.js\";\nimport { SlidingSyncSdk } from \"./sliding-sync-sdk.js\";\nimport { determineFeatureSupport, FeatureSupport, Thread, THREAD_RELATION_TYPE, ThreadFilterType, threadFilterTypeToFilter } from \"./models/thread.js\";\nimport { M_BEACON_INFO } from \"./@types/beacon.js\";\nimport { NamespacedValue, UnstableValue } from \"./NamespacedValue.js\";\nimport { ToDeviceMessageQueue } from \"./ToDeviceMessageQueue.js\";\nimport { IgnoredInvites } from \"./models/invites-ignorer.js\";\nimport { buildFeatureSupportMap, Feature, ServerSupport } from \"./feature.js\";\nimport { RUST_SDK_STORE_PREFIX } from \"./rust-crypto/constants.js\";\nimport { CryptoEvent } from \"./crypto-api/index.js\";\nimport { ServerSideSecretStorageImpl } from \"./secret-storage.js\";\nimport { MatrixRTCSessionManager } from \"./matrixrtc/MatrixRTCSessionManager.js\";\nimport { getRelationsThreadFilter } from \"./thread-utils.js\";\nimport { KnownMembership } from \"./@types/membership.js\";\nimport { ServerCapabilities } from \"./serverCapabilities.js\";\nimport { sha256 } from \"./digest.js\";\nimport { discoverAndValidateOIDCIssuerWellKnown, validateAuthMetadataAndKeys } from \"./oidc/index.js\";\nimport { UnsupportedDelayedEventsEndpointError, UnsupportedStickyEventsEndpointError } from \"./errors.js\";\nimport { RetentionPolicyService } from \"./retentionPolicy.js\";\nvar SCROLLBACK_DELAY_MS = 3000;\nvar TURN_CHECK_INTERVAL = 10 * 60 * 1000; // poll for turn credentials every 10 minutes\n\nexport var UNSTABLE_MSC3852_LAST_SEEN_UA = new UnstableValue(\"last_seen_user_agent\", \"org.matrix.msc3852.last_seen_user_agent\");\nexport var PendingEventOrdering = /*#__PURE__*/function (PendingEventOrdering) {\n PendingEventOrdering[\"Chronological\"] = \"chronological\";\n PendingEventOrdering[\"Detached\"] = \"detached\";\n return PendingEventOrdering;\n}({});\nexport var GET_LOGIN_TOKEN_CAPABILITY = new NamespacedValue(\"m.get_login_token\", \"org.matrix.msc3882.get_login_token\");\nexport var UNSTABLE_MSC2666_SHARED_ROOMS = \"uk.half-shot.msc2666\";\nexport var UNSTABLE_MSC2666_MUTUAL_ROOMS = \"uk.half-shot.msc2666.mutual_rooms\";\nexport var UNSTABLE_MSC2666_QUERY_MUTUAL_ROOMS = \"uk.half-shot.msc2666.query_mutual_rooms\";\nexport var UNSTABLE_MSC4140_DELAYED_EVENTS = \"org.matrix.msc4140\";\nexport var UNSTABLE_MSC4354_STICKY_EVENTS = \"org.matrix.msc4354\";\nexport var UNSTABLE_MSC4133_EXTENDED_PROFILES = \"uk.tcpip.msc4133\";\nexport var STABLE_MSC4133_EXTENDED_PROFILES = \"uk.tcpip.msc4133.stable\";\nvar CrossSigningKeyType = /*#__PURE__*/function (CrossSigningKeyType) {\n CrossSigningKeyType[\"MasterKey\"] = \"master_key\";\n CrossSigningKeyType[\"SelfSigningKey\"] = \"self_signing_key\";\n CrossSigningKeyType[\"UserSigningKey\"] = \"user_signing_key\";\n return CrossSigningKeyType;\n}(CrossSigningKeyType || {}); // Re-export for backwards compatibility\n/**\n * The summary of a room as defined by an initial version of MSC3266 and implemented in Synapse\n * Proposed at https://github.com/matrix-org/matrix-doc/pull/3266\n */\n/* eslint-enable camelcase */\n\n// We're using this constant for methods overloading and inspect whether a variable\n// contains an eventId or not. This was required to ensure backwards compatibility\n// of methods for threads\n// Probably not the most graceful solution but does a good enough job for now\nvar EVENT_ID_PREFIX = \"$\";\nexport var ClientEvent = /*#__PURE__*/function (ClientEvent) {\n /**\n * Fires whenever the SDK's syncing state is updated. The state can be one of:\n * <ul>\n *\n * <li>PREPARED: The client has synced with the server at least once and is\n * ready for methods to be called on it. This will be immediately followed by\n * a state of SYNCING. <i>This is the equivalent of \"syncComplete\" in the\n * previous API.</i></li>\n *\n * <li>CATCHUP: The client has detected the connection to the server might be\n * available again and will now try to do a sync again. As this sync might take\n * a long time (depending how long ago was last synced, and general server\n * performance) the client is put in this mode so the UI can reflect trying\n * to catch up with the server after losing connection.</li>\n *\n * <li>SYNCING : The client is currently polling for new events from the server.\n * This will be called <i>after</i> processing latest events from a sync.</li>\n *\n * <li>ERROR : The client has had a problem syncing with the server. If this is\n * called <i>before</i> PREPARED then there was a problem performing the initial\n * sync. If this is called <i>after</i> PREPARED then there was a problem polling\n * the server for updates. This may be called multiple times even if the state is\n * already ERROR. <i>This is the equivalent of \"syncError\" in the previous\n * API.</i></li>\n *\n * <li>RECONNECTING: The sync connection has dropped, but not (yet) in a way that\n * should be considered erroneous.\n * </li>\n *\n * <li>STOPPED: The client has stopped syncing with server due to stopClient\n * being called.\n * </li>\n * </ul>\n * State transition diagram:\n * ```\n * +---->STOPPED\n * |\n * +----->PREPARED -------> SYNCING <--+\n * | ^ | ^ |\n * | CATCHUP ----------+ | | |\n * | ^ V | |\n * null ------+ | +------- RECONNECTING |\n * | V V |\n * +------->ERROR ---------------------+\n *\n * NB: 'null' will never be emitted by this event.\n *\n * ```\n * Transitions:\n * <ul>\n *\n * <li>`null -> PREPARED` : Occurs when the initial sync is completed\n * first time. This involves setting up filters and obtaining push rules.\n *\n * <li>`null -> ERROR` : Occurs when the initial sync failed first time.\n *\n * <li>`ERROR -> PREPARED` : Occurs when the initial sync succeeds\n * after previously failing.\n *\n * <li>`PREPARED -> SYNCING` : Occurs immediately after transitioning\n * to PREPARED. Starts listening for live updates rather than catching up.\n *\n * <li>`SYNCING -> RECONNECTING` : Occurs when the live update fails.\n *\n * <li>`RECONNECTING -> RECONNECTING` : Can occur if the update calls\n * continue to fail, but the keepalive calls (to /versions) succeed.\n *\n * <li>`RECONNECTING -> ERROR` : Occurs when the keepalive call also fails\n *\n * <li>`ERROR -> SYNCING` : Occurs when the client has performed a\n * live update after having previously failed.\n *\n * <li>`ERROR -> ERROR` : Occurs when the client has failed to keepalive\n * for a second time or more.</li>\n *\n * <li>`SYNCING -> SYNCING` : Occurs when the client has performed a live\n * update. This is called <i>after</i> processing.</li>\n *\n * <li>`* -> STOPPED` : Occurs once the client has stopped syncing or\n * trying to sync after stopClient has been called.</li>\n * </ul>\n *\n * The payloads consits of the following 3 parameters:\n *\n * - state - An enum representing the syncing state. One of \"PREPARED\",\n * \"SYNCING\", \"ERROR\", \"STOPPED\".\n *\n * - prevState - An enum representing the previous syncing state.\n * One of \"PREPARED\", \"SYNCING\", \"ERROR\", \"STOPPED\" <b>or null</b>.\n *\n * - data - Data about this transition.\n *\n * @example\n * ```\n * matrixClient.on(\"sync\", function(state, prevState, data) {\n * switch (state) {\n * case \"ERROR\":\n * // update UI to say \"Connection Lost\"\n * break;\n * case \"SYNCING\":\n * // update UI to remove any \"Connection Lost\" message\n * break;\n * case \"PREPARED\":\n * // the client instance is ready to be queried.\n * var rooms = matrixClient.getRooms();\n * break;\n * }\n * });\n * ```\n */\n ClientEvent[\"Sync\"] = \"sync\";\n /**\n * Fires whenever the SDK receives a new event.\n * <p>\n * This is only fired for live events received via /sync - it is not fired for\n * events received over context, search, or pagination APIs.\n *\n * The payload is the matrix event which caused this event to fire.\n * @example\n * ```\n * matrixClient.on(\"event\", function(event){\n * var sender = event.getSender();\n * });\n * ```\n */\n ClientEvent[\"Event\"] = \"event\";\n /** @deprecated Use {@link ReceivedToDeviceMessage}.\n * Fires whenever the SDK receives a new to-device event.\n * The payload is the matrix event ({@link MatrixEvent}) which caused this event to fire.\n * @example\n * ```\n * matrixClient.on(\"toDeviceEvent\", function(event){\n * var sender = event.getSender();\n * });\n * ```\n */\n ClientEvent[\"ToDeviceEvent\"] = \"toDeviceEvent\";\n /**\n * Fires whenever the SDK receives a new (potentially decrypted) to-device message.\n * The payload is the to-device message and the encryption info for that message ({@link ReceivedToDeviceMessage}).\n * @example\n * ```\n * matrixClient.on(\"receivedToDeviceMessage\", function(payload){\n * const { message, encryptionInfo } = payload;\n * var claimed_sender = encryptionInfo ? encryptionInfo.sender : message.sender;\n * var isVerified = encryptionInfo ? encryptionInfo.verified : false;\n * var type = message.type;\n * });\n */\n ClientEvent[\"ReceivedToDeviceMessage\"] = \"receivedToDeviceMessage\";\n /**\n * Fires whenever new user-scoped account_data is added.\n * The payload is a pair of event ({@link MatrixEvent}) describing the account_data just added, and the previous event, if known:\n * - event: The event describing the account_data just added\n * - oldEvent: The previous account data, if known.\n * @example\n * ```\n * matrixClient.on(\"accountData\", function(event, oldEvent){\n * myAccountData[event.type] = event.content;\n * });\n * ```\n */\n ClientEvent[\"AccountData\"] = \"accountData\";\n /**\n * Fires whenever a new Room is added. This will fire when you are invited to a\n * room, as well as when you join a room. <strong>This event is experimental and\n * may change.</strong>\n *\n * The payload is the newly created room, fully populated.\n * @example\n * ```\n * matrixClient.on(\"Room\", function(room){\n * var roomId = room.roomId;\n * });\n * ```\n */\n ClientEvent[\"Room\"] = \"Room\";\n /**\n * Fires whenever a Room is removed. This will fire when you forget a room.\n * <strong>This event is experimental and may change.</strong>\n * The payload is the roomId of the deleted room.\n * @example\n * ```\n * matrixClient.on(\"deleteRoom\", function(roomId){\n * // update UI from getRooms()\n * });\n * ```\n */\n ClientEvent[\"DeleteRoom\"] = \"deleteRoom\";\n ClientEvent[\"SyncUnexpectedError\"] = \"sync.unexpectedError\";\n /**\n * Fires when the client .well-known info is fetched.\n * The payload is the JSON object (see {@link IClientWellKnown}) returned by the server\n */\n ClientEvent[\"ClientWellKnown\"] = \"WellKnown.client\";\n ClientEvent[\"ReceivedVoipEvent\"] = \"received_voip_event\";\n ClientEvent[\"TurnServers\"] = \"turnServers\";\n ClientEvent[\"TurnServersError\"] = \"turnServers.error\";\n ClientEvent[\"UserProfileUpdate\"] = \"userProfileUpdate\";\n return ClientEvent;\n}({});\nvar SSO_ACTION_PARAM = new UnstableValue(\"action\", \"org.matrix.msc3824.action\");\n\n/**\n * Represents a Matrix Client. Only directly construct this if you want to use\n * custom modules. Normally, {@link createClient} should be used\n * as it specifies 'sensible' defaults for these modules.\n */\nexport class MatrixClient extends TypedEventEmitter {\n constructor(opts) {\n var _opts$logger, _opts$usingExternalCr, _this, _opts$disableVoip, _opts$unstableMSC, _opts$enableEncrypted, _opts$cryptoCallbacks;\n // If a custom logger is provided, use it. Otherwise, default to the global\n // one in logger.ts.\n super();\n _this = this;\n _defineProperty(this, \"logger\", void 0);\n _defineProperty(this, \"reEmitter\", new TypedReEmitter(this));\n _defineProperty(this, \"olmVersion\", null);\n // populated after initLegacyCrypto\n _defineProperty(this, \"usingExternalCrypto\", false);\n _defineProperty(this, \"_store\", void 0);\n _defineProperty(this, \"deviceId\", void 0);\n _defineProperty(this, \"credentials\", void 0);\n /**\n * Encryption key used for encrypting sensitive data (such as e2ee keys) in storage.\n *\n * As supplied in the constructor via {@link IMatrixClientCreateOpts#pickleKey}.\n * Used for migration from the legacy crypto to the rust crypto\n */\n _defineProperty(this, \"legacyPickleKey\", void 0);\n _defineProperty(this, \"scheduler\", void 0);\n _defineProperty(this, \"clientRunning\", false);\n _defineProperty(this, \"timelineSupport\", false);\n _defineProperty(this, \"urlPreviewCache\", {});\n _defineProperty(this, \"identityServer\", void 0);\n _defineProperty(this, \"http\", void 0);\n // XXX: Intended private, used in code.\n _defineProperty(this, \"cryptoBackend\", void 0);\n // one of crypto or rustCrypto\n /**\n * Support MSC4362: Simplified Encrypted State Events.\n *\n * The client must be recreated for changes to this setting to take effect\n * reliably.\n *\n * When this setting is true, if we find a state event that is encrypted\n * (within a room that supports encrypted state), we will attempt to decrypt\n * it as specified in MSC4362. If the user was in the room at the time an\n * encrypted state event was received (meaning we have the key), even if\n * this setting was set to false at the time it was received, recreating the\n * client with this setting set to true will allow decrypting that event.\n *\n * When this setting is false, any state event that is encrypted will not be\n * decrypted, meaning it will have no effect. This matched the behaviour of\n * a client that does not support MSC4362.\n */\n _defineProperty(this, \"enableEncryptedStateEvents\", void 0);\n _defineProperty(this, \"cryptoCallbacks\", void 0);\n // XXX: Intended private, used in code.\n _defineProperty(this, \"callEventHandler\", void 0);\n // XXX: Intended private, used in code.\n _defineProperty(this, \"groupCallEventHandler\", void 0);\n _defineProperty(this, \"supportsCallTransfer\", false);\n // XXX: Intended private, used in code.\n _defineProperty(this, \"forceTURN\", false);\n // XXX: Intended private, used in code.\n _defineProperty(this, \"iceCandidatePoolSize\", 0);\n // XXX: Intended private, used in code.\n _defineProperty(this, \"idBaseUrl\", void 0);\n _defineProperty(this, \"baseUrl\", void 0);\n _defineProperty(this, \"isVoipWithNoMediaAllowed\", void 0);\n _defineProperty(this, \"disableVoip\", void 0);\n _defineProperty(this, \"useLivekitForGroupCalls\", void 0);\n // Note: these are all `protected` to let downstream consumers make mistakes if they want to.\n // We don't technically support this usage, but have reasons to do this.\n _defineProperty(this, \"canSupportVoip\", false);\n _defineProperty(this, \"peekSync\", null);\n _defineProperty(this, \"isGuestAccount\", false);\n _defineProperty(this, \"ongoingScrollbacks\", {});\n _defineProperty(this, \"notifTimelineSet\", null);\n /**\n * Legacy crypto store used for migration from the legacy crypto to the rust crypto\n * @private\n */\n _defineProperty(this, \"legacyCryptoStore\", void 0);\n _defineProperty(this, \"verificationMethods\", void 0);\n _defineProperty(this, \"fallbackICEServerAllowed\", false);\n _defineProperty(this, \"syncApi\", void 0);\n _defineProperty(this, \"roomNameGenerator\", void 0);\n _defineProperty(this, \"pushRules\", void 0);\n _defineProperty(this, \"syncLeftRoomsPromise\", void 0);\n _defineProperty(this, \"syncedLeftRooms\", false);\n _defineProperty(this, \"clientOpts\", void 0);\n _defineProperty(this, \"clientWellKnownIntervalID\", void 0);\n _defineProperty(this, \"canResetTimelineCallback\", void 0);\n _defineProperty(this, \"canSupport\", new Map());\n // The pushprocessor caches useful things, so keep one and re-use it\n _defineProperty(this, \"pushProcessor\", new PushProcessor(this));\n // Promise to a response of the server's /versions response\n // TODO: This should expire: https://github.com/matrix-org/matrix-js-sdk/issues/1020\n _defineProperty(this, \"serverVersionsPromise\", void 0);\n _defineProperty(this, \"clientWellKnown\", void 0);\n _defineProperty(this, \"clientWellKnownPromise\", void 0);\n _defineProperty(this, \"turnServers\", []);\n _defineProperty(this, \"turnServersExpiry\", 0);\n _defineProperty(this, \"checkTurnServersIntervalID\", void 0);\n _defineProperty(this, \"txnCtr\", 0);\n _defineProperty(this, \"mediaHandler\", new MediaHandler(this));\n _defineProperty(this, \"sessionId\", void 0);\n /** IDs of events which are currently being encrypted.\n *\n * This is part of the cancellation mechanism: if the event is no longer listed here when encryption completes,\n * that tells us that it has been cancelled, and we should not send it.\n */\n _defineProperty(this, \"eventsBeingEncrypted\", new Set());\n _defineProperty(this, \"useE2eForGroupCall\", true);\n _defineProperty(this, \"toDeviceMessageQueue\", void 0);\n _defineProperty(this, \"livekitServiceURL\", void 0);\n _defineProperty(this, \"_secretStorage\", void 0);\n // A manager for determining which invites should be ignored.\n _defineProperty(this, \"ignoredInvites\", void 0);\n _defineProperty(this, \"matrixRTC\", void 0);\n _defineProperty(this, \"serverCapabilitiesService\", void 0);\n _defineProperty(this, \"retentionPolicyService\", void 0);\n // eslint-disable-next-line\n _defineProperty(this, \"_unstable_shouldApplyMessageRetention\", void 0);\n _defineProperty(this, \"startCallEventHandler\", () => {\n if (this.isInitialSyncComplete()) {\n if (supportsMatrixCall()) {\n this.callEventHandler.start();\n this.groupCallEventHandler.start();\n }\n this.off(ClientEvent.Sync, this.startCallEventHandler);\n }\n });\n _defineProperty(this, \"startMatrixRTC\", () => {\n if (this.isInitialSyncComplete()) {\n this.matrixRTC.start();\n this.off(ClientEvent.Sync, this.startMatrixRTC);\n }\n });\n /**\n * Once the client has been initialised, we want to clear notifications we\n * know for a fact should be here.\n * This issue should also be addressed on synapse's side and is tracked as part\n * of https://github.com/matrix-org/synapse/issues/14837\n *\n * We consider a room or a thread as fully read if the current user has sent\n * the last event in the live timeline of that context and if the read receipt\n * we have on record matches.\n */\n _defineProperty(this, \"fixupRoomNotifications\", () => {\n if (this.isInitialSyncComplete()) {\n var _this$getRooms;\n var unreadRooms = ((_this$getRooms = this.getRooms()) !== null && _this$getRooms !== void 0 ? _this$getRooms : []).filter(room => {\n return room.getUnreadNotificationCount(NotificationCountType.Total) > 0;\n });\n for (var _room of unreadRooms) {\n var currentUserId = this.getSafeUserId();\n _room.fixupNotifications(currentUserId);\n }\n this.off(ClientEvent.Sync, this.fixupRoomNotifications);\n }\n });\n this.logger = (_opts$logger = opts.logger) !== null && _opts$logger !== void 0 ? _opts$logger : logger;\n opts.baseUrl = utils.ensureNoTrailingSlash(opts.baseUrl);\n opts.idBaseUrl = utils.ensureNoTrailingSlash(opts.idBaseUrl);\n this.baseUrl = opts.baseUrl;\n this.idBaseUrl = opts.idBaseUrl;\n this.identityServer = opts.identityServer;\n this.usingExternalCrypto = (_opts$usingExternalCr = opts.usingExternalCrypto) !== null && _opts$usingExternalCr !== void 0 ? _opts$usingExternalCr : false;\n this.store = opts.store || new StubStore();\n this.deviceId = opts.deviceId || null;\n this.sessionId = secureRandomString(10);\n var userId = opts.userId || null;\n this.credentials = {\n userId\n };\n this.http = new MatrixHttpApi(this, {\n fetchFn: opts.fetchFn,\n baseUrl: opts.baseUrl,\n idBaseUrl: opts.idBaseUrl,\n accessToken: opts.accessToken,\n refreshToken: opts.refreshToken,\n tokenRefreshFunction: opts.tokenRefreshFunction,\n prefix: ClientPrefix.V3,\n onlyData: true,\n extraParams: opts.queryParams,\n localTimeoutMs: opts.localTimeoutMs,\n useAuthorizationHeader: opts.useAuthorizationHeader,\n logger: this.logger\n });\n if (opts.pickleKey) {\n this.legacyPickleKey = opts.pickleKey;\n }\n this.useLivekitForGroupCalls = Boolean(opts.useLivekitForGroupCalls);\n this.scheduler = opts.scheduler;\n if (this.scheduler) {\n this.scheduler.setProcessFunction(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (eventToSend) {\n var room = _this.getRoom(eventToSend.getRoomId());\n if (eventToSend.status !== EventStatus.SENDING) {\n _this.updatePendingEventStatus(room, eventToSend, EventStatus.SENDING);\n }\n var res = yield _this.sendEventHttpRequest(eventToSend);\n if (room) {\n // ensure we update pending event before the next scheduler run so that any listeners to event id\n // updates on the synchronous event emitter get a chance to run first.\n room.updatePendingEvent(eventToSend, EventStatus.SENT, res.event_id);\n }\n return res;\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n }\n this.disableVoip = (_opts$disableVoip = opts.disableVoip) !== null && _opts$disableVoip !== void 0 ? _opts$disableVoip : false;\n if (!this.disableVoip && supportsMatrixCall()) {\n this.callEventHandler = new CallEventHandler(this);\n this.groupCallEventHandler = new GroupCallEventHandler(this);\n this.canSupportVoip = true;\n // Start listening for calls after the initial sync is done\n // We do not need to backfill the call event buffer\n // with encrypted events that might never get decrypted\n this.on(ClientEvent.Sync, this.startCallEventHandler);\n }\n\n // NB. We initialise MatrixRTC whether we have call support or not: this is just\n // the underlying session management and doesn't use any actual media capabilities\n this.matrixRTC = new MatrixRTCSessionManager(this.logger, this);\n this.serverCapabilitiesService = new ServerCapabilities(this.logger, this.http);\n this.retentionPolicyService = new RetentionPolicyService(this.logger, this.http);\n this._unstable_shouldApplyMessageRetention = (_opts$unstableMSC = opts.unstableMSC1763Retention) !== null && _opts$unstableMSC !== void 0 ? _opts$unstableMSC : false;\n this.on(ClientEvent.Sync, this.fixupRoomNotifications);\n this.timelineSupport = Boolean(opts.timelineSupport);\n this.legacyCryptoStore = opts.cryptoStore;\n this.verificationMethods = opts.verificationMethods;\n this.cryptoCallbacks = opts.cryptoCallbacks || {};\n this.enableEncryptedStateEvents = (_opts$enableEncrypted = opts.enableEncryptedStateEvents) !== null && _opts$enableEncrypted !== void 0 ? _opts$enableEncrypted : false;\n this.forceTURN = opts.forceTURN || false;\n this.iceCandidatePoolSize = opts.iceCandidatePoolSize === undefined ? 0 : opts.iceCandidatePoolSize;\n this.supportsCallTransfer = opts.supportsCallTransfer || false;\n this.fallbackICEServerAllowed = opts.fallbackICEServerAllowed || false;\n this.isVoipWithNoMediaAllowed = opts.isVoipWithNoMediaAllowed || false;\n if (opts.useE2eForGroupCall !== undefined) this.useE2eForGroupCall = opts.useE2eForGroupCall;\n this.livekitServiceURL = opts.livekitServiceURL;\n this.roomNameGenerator = opts.roomNameGenerator;\n this.toDeviceMessageQueue = new ToDeviceMessageQueue(this, this.logger);\n\n // The SDK doesn't really provide a clean way for events to recalculate the push\n // actions for themselves, so we have to kinda help them out when they are encrypted.\n // We do this so that push rules are correctly executed on events in their decrypted\n // state, such as highlights when the user's name is mentioned.\n this.on(MatrixEventEvent.Decrypted, event => {\n fixNotificationCountOnDecryption(this, event);\n });\n this.ignoredInvites = new IgnoredInvites(this);\n this._secretStorage = new ServerSideSecretStorageImpl(this, (_opts$cryptoCallbacks = opts.cryptoCallbacks) !== null && _opts$cryptoCallbacks !== void 0 ? _opts$cryptoCallbacks : {});\n\n // having lots of event listeners is not unusual. 0 means \"unlimited\".\n this.setMaxListeners(0);\n }\n set store(newStore) {\n this._store = newStore;\n this._store.setUserCreator(userId => User.createUser(userId, this));\n }\n get store() {\n return this._store;\n }\n\n /**\n * High level helper method to begin syncing and poll for new events. To listen for these\n * events, add a listener for {@link ClientEvent.Event}\n * via {@link MatrixClient#on}. Alternatively, listen for specific\n * state change events.\n * @param opts - Options to apply when syncing.\n */\n startClient(opts) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (_this2.clientRunning) {\n // client is already running.\n return;\n }\n _this2.clientRunning = true;\n _this2.on(ClientEvent.Sync, _this2.startMatrixRTC);\n\n // Create our own user object artificially (instead of waiting for sync)\n // so it's always available, even if the user is not in any rooms etc.\n var userId = _this2.getUserId();\n if (userId) {\n _this2.store.storeUser(new User(userId));\n }\n\n // periodically poll for turn servers if we support voip\n if (_this2.supportsVoip()) {\n _this2.checkTurnServersIntervalID = setInterval(() => {\n _this2.checkTurnServers();\n }, TURN_CHECK_INTERVAL);\n // noinspection ES6MissingAwait\n _this2.checkTurnServers();\n }\n if (_this2.syncApi) {\n // This shouldn't happen since we thought the client was not running\n _this2.logger.error(\"Still have sync object whilst not running: stopping old one\");\n _this2.syncApi.stop();\n }\n try {\n yield _this2.getVersions();\n\n // This should be done with `canSupport`\n // TODO: https://github.com/vector-im/element-web/issues/23643\n var _yield$_this2$doesSer = yield _this2.doesServerSupportThread(),\n threads = _yield$_this2$doesSer.threads,\n list = _yield$_this2$doesSer.list,\n fwdPagination = _yield$_this2$doesSer.fwdPagination;\n Thread.setServerSideSupport(threads);\n Thread.setServerSideListSupport(list);\n Thread.setServerSideFwdPaginationSupport(fwdPagination);\n } catch (e) {\n _this2.logger.error(\"Can't fetch server versions, continuing to initialise sync, this will be retried later\", e);\n }\n _this2.clientOpts = opts !== null && opts !== void 0 ? opts : {};\n if (_this2.clientOpts.slidingSync) {\n _this2.syncApi = new SlidingSyncSdk(_this2.clientOpts.slidingSync, _this2, _this2.clientOpts, _this2.buildSyncApiOptions());\n } else {\n _this2.syncApi = new SyncApi(_this2, _this2.clientOpts, _this2.buildSyncApiOptions());\n }\n _this2.syncApi.sync().catch(e => _this2.logger.info(\"Sync startup aborted with an error:\", e));\n if (_this2.clientOpts.clientWellKnownPollPeriod !== undefined) {\n _this2.clientWellKnownIntervalID = setInterval(() => {\n _this2.fetchClientWellKnown();\n }, 1000 * _this2.clientOpts.clientWellKnownPollPeriod);\n _this2.fetchClientWellKnown();\n }\n _this2.toDeviceMessageQueue.start();\n _this2.serverCapabilitiesService.start();\n if (_this2._unstable_shouldApplyMessageRetention) {\n var _this2$retentionPolic;\n (_this2$retentionPolic = _this2.retentionPolicyService) === null || _this2$retentionPolic === void 0 || _this2$retentionPolic.start();\n }\n })();\n }\n\n /**\n * Construct a SyncApiOptions for this client, suitable for passing into the SyncApi constructor\n */\n buildSyncApiOptions() {\n return {\n cryptoCallbacks: this.cryptoBackend,\n canResetEntireTimeline: roomId => {\n if (!this.canResetTimelineCallback) {\n return false;\n }\n return this.canResetTimelineCallback(roomId);\n },\n logger: this.logger.getChild(\"sync\")\n };\n }\n\n /**\n * High level helper method to stop the client from polling and allow a\n * clean shutdown.\n */\n stopClient() {\n var _this$cryptoBackend, _this$syncApi, _this$peekSync, _this$callEventHandle, _this$groupCallEventH;\n (_this$cryptoBackend = this.cryptoBackend) === null || _this$cryptoBackend === void 0 || _this$cryptoBackend.stop(); // crypto might have been initialised even if the client wasn't fully started\n\n this.off(ClientEvent.Sync, this.startMatrixRTC);\n if (!this.clientRunning) return; // already stopped\n\n this.logger.debug(\"stopping MatrixClient\");\n this.clientRunning = false;\n (_this$syncApi = this.syncApi) === null || _this$syncApi === void 0 || _this$syncApi.stop();\n this.syncApi = undefined;\n (_this$peekSync = this.peekSync) === null || _this$peekSync === void 0 || _this$peekSync.stopPeeking();\n (_this$callEventHandle = this.callEventHandler) === null || _this$callEventHandle === void 0 || _this$callEventHandle.stop();\n (_this$groupCallEventH = this.groupCallEventHandler) === null || _this$groupCallEventH === void 0 || _this$groupCallEventH.stop();\n this.callEventHandler = undefined;\n this.groupCallEventHandler = undefined;\n globalThis.clearInterval(this.checkTurnServersIntervalID);\n this.checkTurnServersIntervalID = undefined;\n if (this.clientWellKnownIntervalID !== undefined) {\n globalThis.clearInterval(this.clientWellKnownIntervalID);\n }\n this.toDeviceMessageQueue.stop();\n this.matrixRTC.stop();\n this.serverCapabilitiesService.stop();\n }\n\n /**\n * Clear any data out of the persistent stores used by the client.\n *\n * @param args.cryptoDatabasePrefix - The database name to use for indexeddb, defaults to 'matrix-js-sdk'.\n * @returns Promise which resolves when the stores have been cleared.\n */\n clearStores() {\n var _this3 = this;\n var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (this.clientRunning) {\n throw new Error(\"Cannot clear stores while client is running\");\n }\n var promises = [];\n promises.push(this.store.deleteAllData());\n if (this.legacyCryptoStore) {\n promises.push(this.legacyCryptoStore.deleteAllData());\n }\n\n // delete the stores used by the rust matrix-sdk-crypto, in case they were used\n var deleteRustSdkStore = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* () {\n var indexedDB;\n try {\n indexedDB = globalThis.indexedDB;\n if (!indexedDB) return; // No indexedDB support\n } catch (_unused) {\n // No indexedDB support\n return;\n }\n var _loop = function* _loop(dbname) {\n var prom = new Promise((resolve, reject) => {\n _this3.logger.info(\"Removing IndexedDB instance \".concat(dbname));\n var req = indexedDB.deleteDatabase(dbname);\n req.onsuccess = _ => {\n _this3.logger.info(\"Removed IndexedDB instance \".concat(dbname));\n resolve(0);\n };\n req.onerror = e => {\n // In private browsing, Firefox has a globalThis.indexedDB, but attempts to delete an indexeddb\n // (even a non-existent one) fail with \"DOMException: A mutation operation was attempted on a\n // database that did not allow mutations.\"\n //\n // it seems like the only thing we can really do is ignore the error.\n _this3.logger.warn(\"Failed to remove IndexedDB instance \".concat(dbname, \":\"), e);\n resolve(0);\n };\n req.onblocked = e => {\n _this3.logger.info(\"cannot yet remove IndexedDB instance \".concat(dbname));\n };\n });\n yield prom;\n };\n for (var dbname of [\"\".concat((_args$cryptoDatabaseP = args.cryptoDatabasePrefix) !== null && _args$cryptoDatabaseP !== void 0 ? _args$cryptoDatabaseP : RUST_SDK_STORE_PREFIX, \"::matrix-sdk-crypto\"), \"\".concat((_args$cryptoDatabaseP2 = args.cryptoDatabasePrefix) !== null && _args$cryptoDatabaseP2 !== void 0 ? _args$cryptoDatabaseP2 : RUST_SDK_STORE_PREFIX, \"::matrix-sdk-crypto-meta\")]) {\n var _args$cryptoDatabaseP, _args$cryptoDatabaseP2;\n yield* _loop(dbname);\n }\n });\n return function deleteRustSdkStore() {\n return _ref2.apply(this, arguments);\n };\n }();\n promises.push(deleteRustSdkStore());\n return Promise.all(promises).then(); // .then to fix types\n }\n\n /**\n * Get the user-id of the logged-in user\n *\n * @returns MXID for the logged-in user, or null if not logged in\n */\n getUserId() {\n var _this$credentials$use, _this$credentials;\n return (_this$credentials$use = (_this$credentials = this.credentials) === null || _this$credentials === void 0 ? void 0 : _this$credentials.userId) !== null && _this$credentials$use !== void 0 ? _this$credentials$use : null;\n }\n\n /**\n * Get the user-id of the logged-in user\n *\n * @returns MXID for the logged-in user\n * @throws Error if not logged in\n */\n getSafeUserId() {\n var userId = this.getUserId();\n if (!userId) {\n throw new Error(\"Expected logged in user but found none.\");\n }\n return userId;\n }\n\n /**\n * Get the domain for this client's MXID\n * @returns Domain of this MXID\n */\n getDomain() {\n var _this$credentials2;\n if ((_this$credentials2 = this.credentials) !== null && _this$credentials2 !== void 0 && _this$credentials2.userId) {\n return this.credentials.userId.replace(/^.*?:/, \"\");\n }\n return null;\n }\n\n /**\n * Get the local part of the current user ID e.g. \"foo\" in \"\\@foo:bar\".\n * @returns The user ID localpart or null.\n */\n getUserIdLocalpart() {\n var _this$credentials$use2, _this$credentials3;\n return (_this$credentials$use2 = (_this$credentials3 = this.credentials) === null || _this$credentials3 === void 0 || (_this$credentials3 = _this$credentials3.userId) === null || _this$credentials3 === void 0 ? void 0 : _this$credentials3.split(\":\")[0].substring(1)) !== null && _this$credentials$use2 !== void 0 ? _this$credentials$use2 : null;\n }\n\n /**\n * Get the device ID of this client\n * @returns device ID\n */\n getDeviceId() {\n return this.deviceId;\n }\n\n /**\n * Get the session ID of this client\n * @returns session ID\n */\n getSessionId() {\n return this.sessionId;\n }\n\n /**\n * Check if the runtime environment supports VoIP calling.\n * @returns True if VoIP is supported.\n */\n supportsVoip() {\n return !this.disableVoip && this.canSupportVoip;\n }\n\n /**\n * @returns\n */\n getMediaHandler() {\n return this.mediaHandler;\n }\n\n /**\n * Set whether VoIP calls are forced to use only TURN\n * candidates. This is the same as the forceTURN option\n * when creating the client.\n * @param force - True to force use of TURN servers\n */\n setForceTURN(force) {\n this.forceTURN = force;\n }\n\n /**\n * Set whether to advertise transfer support to other parties on Matrix calls.\n * @param support - True to advertise the 'm.call.transferee' capability\n */\n setSupportsCallTransfer(support) {\n this.supportsCallTransfer = support;\n }\n\n /**\n * Returns true if to-device signalling for group calls will be encrypted with Olm.\n * If false, it will be sent unencrypted.\n * @returns boolean Whether group call signalling will be encrypted\n */\n getUseE2eForGroupCall() {\n return this.useE2eForGroupCall;\n }\n\n /**\n * Creates a new call.\n * The place*Call methods on the returned call can be used to actually place a call\n *\n * @param roomId - The room the call is to be placed in.\n * @returns the call or null if the browser doesn't support calling.\n */\n createCall(roomId) {\n return createNewMatrixCall(this, roomId);\n }\n\n /**\n * Creates a new group call and sends the associated state event\n * to alert other members that the room now has a group call.\n *\n * @param roomId - The room the call is to be placed in.\n */\n createGroupCall(roomId, type, isPtt, intent, dataChannelsEnabled, dataChannelOptions) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (_this4.getGroupCallForRoom(roomId)) {\n throw new Error(\"\".concat(roomId, \" already has an existing group call\"));\n }\n var room = _this4.getRoom(roomId);\n if (!room) {\n throw new Error(\"Cannot find room \".concat(roomId));\n }\n\n // Because without Media section a WebRTC connection is not possible, so need a RTCDataChannel to set up a\n // no media WebRTC connection anyway.\n return new GroupCall(_this4, room, type, isPtt, intent, undefined, dataChannelsEnabled || _this4.isVoipWithNoMediaAllowed, dataChannelOptions, _this4.isVoipWithNoMediaAllowed, _this4.useLivekitForGroupCalls, _this4.livekitServiceURL).create();\n })();\n }\n getLivekitServiceURL() {\n return this.livekitServiceURL;\n }\n\n // This shouldn't need to exist, but the widget API has startup ordering problems that\n // mean it doesn't know the livekit URL fast enough: remove this once this is fixed.\n setLivekitServiceURL(newURL) {\n this.livekitServiceURL = newURL;\n }\n\n /**\n * Wait until an initial state for the given room has been processed by the\n * client and the client is aware of any ongoing group calls. Awaiting on\n * the promise returned by this method before calling getGroupCallForRoom()\n * avoids races where getGroupCallForRoom is called before the state for that\n * room has been processed. It does not, however, fix other races, eg. two\n * clients both creating a group call at the same time.\n * @param roomId - The room ID to wait for\n * @returns A promise that resolves once existing group calls in the room\n * have been processed.\n */\n waitUntilRoomReadyForGroupCalls(roomId) {\n return this.groupCallEventHandler.waitUntilRoomReadyForGroupCalls(roomId);\n }\n\n /**\n * Get an existing group call for the provided room.\n * @returns The group call or null if it doesn't already exist.\n */\n getGroupCallForRoom(roomId) {\n return this.groupCallEventHandler.groupCalls.get(roomId) || null;\n }\n\n /**\n * Get the current sync state.\n * @returns the sync state, which may be null.\n * @see MatrixClient#event:\"sync\"\n */\n getSyncState() {\n var _this$syncApi$getSync, _this$syncApi2;\n return (_this$syncApi$getSync = (_this$syncApi2 = this.syncApi) === null || _this$syncApi2 === void 0 ? void 0 : _this$syncApi2.getSyncState()) !== null && _this$syncApi$getSync !== void 0 ? _this$syncApi$getSync : null;\n }\n\n /**\n * Returns the additional data object associated with\n * the current sync state, or null if there is no\n * such data.\n * Sync errors, if available, are put in the 'error' key of\n * this object.\n */\n getSyncStateData() {\n if (!this.syncApi) {\n return null;\n }\n return this.syncApi.getSyncStateData();\n }\n\n /**\n * Whether the initial sync has completed.\n * @returns True if at least one sync has happened.\n */\n isInitialSyncComplete() {\n var state = this.getSyncState();\n if (!state) {\n return false;\n }\n return state === SyncState.Prepared || state === SyncState.Syncing;\n }\n\n /**\n * Return whether the client is configured for a guest account.\n * @returns True if this is a guest access_token (or no token is supplied).\n */\n isGuest() {\n return this.isGuestAccount;\n }\n\n /**\n * Set whether this client is a guest account. <b>This method is experimental\n * and may change without warning.</b>\n * @param guest - True if this is a guest account.\n * @experimental if the token is a macaroon, it should be encoded in it that it is a 'guest'\n * access token, which means that the SDK can determine this entirely without\n * the dev manually flipping this flag.\n */\n setGuest(guest) {\n this.isGuestAccount = guest;\n }\n\n /**\n * Return the provided scheduler, if any.\n * @returns The scheduler or undefined\n */\n getScheduler() {\n return this.scheduler;\n }\n\n /**\n * Retry a backed off syncing request immediately. This should only be used when\n * the user <b>explicitly</b> attempts to retry their lost connection.\n * Will also retry any outbound to-device messages currently in the queue to be sent\n * (retries of regular outgoing events are handled separately, per-event).\n * @returns True if this resulted in a request being retried.\n */\n retryImmediately() {\n var _this$syncApi$retryIm, _this$syncApi3;\n // don't await for this promise: we just want to kick it off\n this.toDeviceMessageQueue.sendQueue();\n return (_this$syncApi$retryIm = (_this$syncApi3 = this.syncApi) === null || _this$syncApi3 === void 0 ? void 0 : _this$syncApi3.retryImmediately()) !== null && _this$syncApi$retryIm !== void 0 ? _this$syncApi$retryIm : false;\n }\n\n /**\n * Return the global notification EventTimelineSet, if any\n *\n * @returns the globl notification EventTimelineSet\n */\n getNotifTimelineSet() {\n return this.notifTimelineSet;\n }\n\n /**\n * Set the global notification EventTimelineSet\n *\n */\n setNotifTimelineSet(set) {\n this.notifTimelineSet = set;\n }\n\n /**\n * Gets the cached capabilities of the homeserver, returning cached ones if available.\n * If there are no cached capabilities and none can be fetched, throw an exception.\n *\n * @returns Promise resolving with The capabilities of the homeserver\n */\n getCapabilities() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var caps = _this5.serverCapabilitiesService.getCached();\n if (caps) return caps;\n return _this5.serverCapabilitiesService.fetch();\n })();\n }\n\n /**\n * Gets the cached capabilities of the homeserver. If none have been fetched yet,\n * return undefined.\n *\n * @returns The capabilities of the homeserver\n */\n getCachedCapabilities() {\n return this.serverCapabilitiesService.getCached();\n }\n\n /**\n * Fetches the latest capabilities from the homeserver, ignoring any cached\n * versions. The newly returned version is cached.\n *\n * @returns A promise which resolves to the capabilities of the homeserver\n */\n fetchCapabilities() {\n return this.serverCapabilitiesService.fetch();\n }\n\n /**\n * Initialise support for end-to-end encryption in this client, using the rust matrix-sdk-crypto.\n *\n * **WARNING**: the cryptography stack is not thread-safe. Having multiple `MatrixClient` instances connected to\n * the same Indexed DB will cause data corruption and decryption failures. The application layer is responsible for\n * ensuring that only one `MatrixClient` issue is instantiated at a time.\n *\n * @param args.useIndexedDB - True to use an indexeddb store, false to use an in-memory store. Defaults to 'true'.\n * @param args.cryptoDatabasePrefix - The database name to use for indexeddb, defaults to 'matrix-js-sdk'.\n * Unused if useIndexedDB is 'false'.\n * @param args.storageKey - A key with which to encrypt the indexeddb store. If provided, it must be exactly\n * 32 bytes of data, and must be the same each time the client is initialised for a given device.\n * If both this and `storagePassword` are unspecified, the store will be unencrypted.\n * @param args.storagePassword - An alternative to `storageKey`. A password which will be used to derive a key to\n * encrypt the store with. Deriving a key from a password is (deliberately) a slow operation, so prefer\n * to pass a `storageKey` directly where possible.\n *\n * @returns a Promise which will resolve when the crypto layer has been\n * successfully initialised.\n */\n initRustCrypto() {\n var _arguments = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var _args$cryptoDatabaseP3, _this6$legacyPickleKe;\n var args = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {};\n if (_this6.cryptoBackend) {\n _this6.logger.warn(\"Attempt to re-initialise e2e encryption on MatrixClient\");\n return;\n }\n var userId = _this6.getUserId();\n if (userId === null) {\n throw new Error(\"Cannot enable encryption on MatrixClient with unknown userId: \" + \"ensure userId is passed in createClient().\");\n }\n var deviceId = _this6.getDeviceId();\n if (deviceId === null) {\n throw new Error(\"Cannot enable encryption on MatrixClient with unknown deviceId: \" + \"ensure deviceId is passed in createClient().\");\n }\n\n // importing rust-crypto will download the webassembly, so we delay it until we know it will be\n // needed.\n _this6.logger.debug(\"Downloading Rust crypto library\");\n var RustCrypto = yield import(\"./rust-crypto/index.js\");\n var rustCrypto = yield RustCrypto.initRustCrypto({\n logger: _this6.logger,\n http: _this6.http,\n userId: userId,\n deviceId: deviceId,\n secretStorage: _this6.secretStorage,\n cryptoCallbacks: _this6.cryptoCallbacks,\n storePrefix: args.useIndexedDB === false ? null : (_args$cryptoDatabaseP3 = args.cryptoDatabasePrefix) !== null && _args$cryptoDatabaseP3 !== void 0 ? _args$cryptoDatabaseP3 : RUST_SDK_STORE_PREFIX,\n storeKey: args.storageKey,\n storePassphrase: args.storagePassword,\n legacyCryptoStore: _this6.legacyCryptoStore,\n legacyPickleKey: (_this6$legacyPickleKe = _this6.legacyPickleKey) !== null && _this6$legacyPickleKe !== void 0 ? _this6$legacyPickleKe : \"DEFAULT_KEY\",\n legacyMigrationProgressListener: (progress, total) => {\n _this6.emit(CryptoEvent.LegacyCryptoStoreMigrationProgress, progress, total);\n },\n enableEncryptedStateEvents: _this6.enableEncryptedStateEvents\n });\n rustCrypto.setSupportedVerificationMethods(_this6.verificationMethods);\n _this6.cryptoBackend = rustCrypto;\n\n // attach the event listeners needed by RustCrypto\n _this6.on(RoomMemberEvent.Membership, rustCrypto.onRoomMembership.bind(rustCrypto));\n _this6.on(RoomStateEvent.Events, rustCrypto.onRoomStateEvent.bind(rustCrypto));\n _this6.on(ClientEvent.Event, event => {\n rustCrypto.onLiveEventFromSync(event);\n });\n\n // re-emit the events emitted by the crypto impl\n _this6.reEmitter.reEmit(rustCrypto, [CryptoEvent.VerificationRequestReceived, CryptoEvent.UserTrustStatusChanged, CryptoEvent.KeyBackupStatus, CryptoEvent.KeyBackupSessionsRemaining, CryptoEvent.KeyBackupFailed, CryptoEvent.KeyBackupDecryptionKeyCached, CryptoEvent.KeysChanged, CryptoEvent.DevicesUpdated, CryptoEvent.WillUpdateDevices, CryptoEvent.DehydratedDeviceCreated, CryptoEvent.DehydratedDeviceUploaded, CryptoEvent.RehydrationStarted, CryptoEvent.RehydrationProgress, CryptoEvent.RehydrationCompleted, CryptoEvent.RehydrationError, CryptoEvent.DehydrationKeyCached, CryptoEvent.DehydratedDeviceRotationError]);\n })();\n }\n\n /**\n * Access the server-side secret storage API for this client.\n */\n get secretStorage() {\n return this._secretStorage;\n }\n\n /**\n * Access the crypto API for this client.\n *\n * If end-to-end encryption has been enabled for this client (via {@link initRustCrypto}),\n * returns an object giving access to the crypto API. Otherwise, returns `undefined`.\n */\n getCrypto() {\n return this.cryptoBackend;\n }\n\n /**\n * Whether encryption is enabled for a room.\n * @param roomId - the room id to query.\n * @returns whether encryption is enabled.\n *\n * @deprecated Not correctly supported for Rust Cryptography. Use {@link CryptoApi.isEncryptionEnabledInRoom} and/or\n * {@link Room.hasEncryptionStateEvent}.\n */\n isRoomEncrypted(roomId) {\n var room = this.getRoom(roomId);\n if (!room) {\n // we don't know about this room, so can't determine if it should be\n // encrypted. Let's assume not.\n return false;\n }\n\n // if there is an 'm.room.encryption' event in this room, it should be\n // encrypted (independently of whether we actually support encryption)\n return room.hasEncryptionStateEvent();\n }\n\n /**\n * Check whether the key backup private key is stored in secret storage.\n * @returns map of key name to key info the secret is\n * encrypted with, or null if it is not present or not encrypted with a\n * trusted key\n */\n isKeyBackupKeyStored() {\n return Promise.resolve(this.secretStorage.isStored(\"m.megolm_backup.v1\"));\n }\n makeKeyBackupPath(roomId, sessionId, version) {\n var path;\n if (sessionId !== undefined) {\n path = utils.encodeUri(\"/room_keys/keys/$roomId/$sessionId\", {\n $roomId: roomId,\n $sessionId: sessionId\n });\n } else if (roomId !== undefined) {\n path = utils.encodeUri(\"/room_keys/keys/$roomId\", {\n $roomId: roomId\n });\n } else {\n path = \"/room_keys/keys\";\n }\n var queryData = version === undefined ? undefined : {\n version\n };\n return {\n path,\n queryData\n };\n }\n deleteKeysFromBackup(roomId, sessionId, version) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var path = _this7.makeKeyBackupPath(roomId, sessionId, version);\n yield _this7.http.authedRequest(Method.Delete, path.path, path.queryData, undefined, {\n prefix: ClientPrefix.V3\n });\n })();\n }\n\n /**\n * Get the config for the media repository.\n *\n * @param useAuthenticatedMedia - If true, the caller supports authenticated\n * media and wants an authentication-required URL. Note that server support\n * for authenticated media will *not* be checked - it is the caller's responsibility\n * to do so before calling this function.\n *\n * @returns Promise which resolves with an object containing the config.\n */\n getMediaConfig() {\n var useAuthenticatedMedia = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var path = useAuthenticatedMedia ? \"/media/config\" : \"/config\";\n return this.http.authedRequest(Method.Get, path, undefined, undefined, {\n prefix: useAuthenticatedMedia ? ClientPrefix.V1 : MediaPrefix.V3\n });\n }\n\n /**\n * Get the room for the given room ID.\n * This function will return a valid room for any room for which a Room event\n * has been emitted. Note in particular that other events, eg. RoomState.members\n * will be emitted for a room before this function will return the given room.\n * @param roomId - The room ID\n * @returns The Room or null if it doesn't exist or there is no data store.\n */\n getRoom(roomId) {\n if (!roomId) {\n return null;\n }\n return this.store.getRoom(roomId);\n }\n\n /**\n * Retrieve all known rooms.\n * @returns A list of rooms, or an empty list if there is no data store.\n */\n getRooms() {\n return this.store.getRooms();\n }\n\n /**\n * Retrieve all rooms that should be displayed to the user\n * This is essentially getRooms() with some rooms filtered out, eg. old versions\n * of rooms that have been replaced or (in future) other rooms that have been\n * marked at the protocol level as not to be displayed to the user.\n *\n * @param msc3946ProcessDynamicPredecessor - if true, look for an\n * m.room.predecessor state event and\n * use it if found (MSC3946).\n * @returns A list of rooms, or an empty list if there is no data store.\n */\n getVisibleRooms() {\n var msc3946ProcessDynamicPredecessor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var allRooms = this.store.getRooms();\n var visibleRooms = new Set(allRooms);\n for (var _room2 of visibleRooms) {\n var predecessors = this.findPredecessorRooms(_room2, true, msc3946ProcessDynamicPredecessor);\n for (var predecessor of predecessors) {\n visibleRooms.delete(predecessor);\n }\n }\n return Array.from(visibleRooms);\n }\n\n /**\n * Retrieve a user.\n * @param userId - The user ID to retrieve.\n * @returns A user or null if there is no data store or the user does\n * not exist.\n */\n getUser(userId) {\n return this.store.getUser(userId);\n }\n\n /**\n * Retrieve all known users.\n * @returns A list of users, or an empty list if there is no data store.\n */\n getUsers() {\n return this.store.getUsers();\n }\n\n /**\n * Set account data event for the current user, and wait for the result to be echoed over `/sync`.\n *\n * Waiting for the remote echo ensures that a subsequent call to {@link getAccountData} will return the updated\n * value.\n *\n * If called before the client is started with {@link startClient}, logs a warning and falls back to\n * {@link setAccountDataRaw}.\n *\n * Retries the request up to 5 times in the case of an {@link ConnectionError}.\n *\n * @param eventType - The event type\n * @param content - the contents object for the event\n */\n setAccountData(eventType, content) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n // If the sync loop is not running, fall back to setAccountDataRaw.\n if (!_this8.clientRunning) {\n _this8.logger.warn(\"Calling `setAccountData` before the client is started: `getAccountData` may return inconsistent results.\");\n return yield retryNetworkOperation(5, () => _this8.setAccountDataRaw(eventType, content));\n }\n\n // If the account data is already correct, then we cannot expect an update over sync, and the operation\n // is, in any case, a no-op.\n //\n // NB that we rely on this operation being synchronous to avoid a race condition: there must be no `await`\n // between here and `this.addListener` below, in case we miss an update.\n var existingData = _this8.store.getAccountData(eventType);\n if (existingData && deepCompare(existingData.event.content, content)) return {};\n\n // Create a promise which will resolve when the update is received\n var updatedResolvers = Promise.withResolvers();\n function accountDataListener(event) {\n // Note that we cannot safely check that the content matches what we expected, because there is a race:\n // * We set the new content\n // * Another client sets alternative content\n // * Then /sync returns, but only reflects the latest content.\n //\n // Of course there is room for debate over what we should actually do in that case -- a subsequent\n // `getAccountData` isn't going to return the expected value, but whose fault is that? Databases are hard.\n //\n // Anyway, what we *shouldn't* do is get stuck in a loop. I think the best we can do is check that the event\n // type matches.\n if (event.getType() === eventType) updatedResolvers.resolve();\n }\n _this8.addListener(ClientEvent.AccountData, accountDataListener);\n try {\n var result = yield retryNetworkOperation(5, () => _this8.setAccountDataRaw(eventType, content));\n yield updatedResolvers.promise;\n return result;\n } finally {\n _this8.removeListener(ClientEvent.AccountData, accountDataListener);\n }\n })();\n }\n\n /**\n * Set account data event for the current user, without waiting for the remote echo.\n *\n * @param eventType - The event type\n * @param content - the contents object for the event\n */\n setAccountDataRaw(eventType, content) {\n var path = utils.encodeUri(\"/user/$userId/account_data/$type\", {\n $userId: this.credentials.userId,\n $type: eventType\n });\n return this.http.authedRequest(Method.Put, path, undefined, content);\n }\n\n /**\n * Get account data event of given type for the current user.\n * @param eventType - The event type\n * @returns The contents of the given account data event\n */\n getAccountData(eventType) {\n return this.store.getAccountData(eventType);\n }\n\n /**\n * Get account data event of given type for the current user. This variant\n * gets account data directly from the homeserver if the local store is not\n * ready, which can be useful very early in startup before the initial sync.\n * @param eventType - The event type\n * @returns Promise which resolves: The contents of the given account data event.\n * @returns Rejects: with an error response.\n */\n getAccountDataFromServer(eventType) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n if (_this9.isInitialSyncComplete()) {\n var _event = _this9.store.getAccountData(eventType);\n if (!_event) {\n return null;\n }\n // The network version below returns just the content, so this branch\n // does the same to match.\n return _event.getContent();\n }\n var path = utils.encodeUri(\"/user/$userId/account_data/$type\", {\n $userId: _this9.credentials.userId,\n $type: eventType\n });\n try {\n return yield _this9.http.authedRequest(Method.Get, path);\n } catch (e) {\n var _data;\n if (((_data = e.data) === null || _data === void 0 ? void 0 : _data.errcode) === \"M_NOT_FOUND\") {\n return null;\n }\n throw e;\n }\n })();\n }\n deleteAccountData(eventType) {\n var _this0 = this;\n return _asyncToGenerator(function* () {\n var msc3391DeleteAccountDataServerSupport = _this0.canSupport.get(Feature.AccountDataDeletion);\n // if deletion is not supported overwrite with empty content\n if (msc3391DeleteAccountDataServerSupport === ServerSupport.Unsupported) {\n yield _this0.setAccountData(eventType, {});\n return;\n }\n var path = utils.encodeUri(\"/user/$userId/account_data/$type\", {\n $userId: _this0.getSafeUserId(),\n $type: eventType\n });\n var options = msc3391DeleteAccountDataServerSupport === ServerSupport.Unstable ? {\n prefix: \"/_matrix/client/unstable/org.matrix.msc3391\"\n } : undefined;\n return yield _this0.http.authedRequest(Method.Delete, path, undefined, undefined, options);\n })();\n }\n\n /**\n * Gets the users that are ignored by this client\n * @returns The array of users that are ignored (empty if none)\n */\n getIgnoredUsers() {\n var event = this.getAccountData(EventType.IgnoredUserList);\n if (!(event !== null && event !== void 0 && event.getContent()[\"ignored_users\"])) return [];\n return Object.keys(event.getContent()[\"ignored_users\"]);\n }\n\n /**\n * Sets the users that the current user should ignore.\n * @param userIds - the user IDs to ignore\n * @returns Promise which resolves: an empty object\n * @returns Rejects: with an error response.\n */\n setIgnoredUsers(userIds) {\n var content = {\n ignored_users: {}\n };\n userIds.forEach(u => {\n content.ignored_users[u] = {};\n });\n return this.setAccountData(EventType.IgnoredUserList, content);\n }\n\n /**\n * Gets whether or not a specific user is being ignored by this client.\n * @param userId - the user ID to check\n * @returns true if the user is ignored, false otherwise\n */\n isUserIgnored(userId) {\n return this.getIgnoredUsers().includes(userId);\n }\n\n /**\n * Join a room. If you have already joined the room, this will no-op.\n * @param roomIdOrAlias - The room ID or room alias to join.\n * @param opts - Options when joining the room.\n * @returns Promise which resolves: Room object.\n * @returns Rejects: with an error response.\n */\n joinRoom(roomIdOrAlias) {\n var _arguments2 = arguments,\n _this1 = this;\n return _asyncToGenerator(function* () {\n var _roomMember$events$me, _roomMember$events$me2;\n var opts = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n var room = _this1.getRoom(roomIdOrAlias);\n var roomMember = room === null || room === void 0 ? void 0 : room.getMember(_this1.getSafeUserId());\n var preJoinMembership = roomMember === null || roomMember === void 0 ? void 0 : roomMember.membership;\n\n // If we were invited to the room, the ID of the user that sent the invite. Otherwise, `null`.\n var inviter = preJoinMembership == KnownMembership.Invite ? (_roomMember$events$me = roomMember === null || roomMember === void 0 || (_roomMember$events$me2 = roomMember.events.member) === null || _roomMember$events$me2 === void 0 ? void 0 : _roomMember$events$me2.getSender()) !== null && _roomMember$events$me !== void 0 ? _roomMember$events$me : null : null;\n _this1.logger.debug(\"joinRoom[\".concat(roomIdOrAlias, \"]: preJoinMembership=\").concat(preJoinMembership, \", inviter=\").concat(inviter, \", opts=\").concat(JSON.stringify(opts)));\n if (preJoinMembership == KnownMembership.Join) return room;\n var signPromise = Promise.resolve();\n if (opts.inviteSignUrl) {\n var _url = new URL(opts.inviteSignUrl);\n _url.searchParams.set(\"mxid\", _this1.credentials.userId);\n signPromise = _this1.http.requestOtherUrl(Method.Post, _url);\n }\n var queryParams = {};\n if (opts.viaServers) {\n // server_name has been deprecated in favour of via with Matrix >1.11 (MSC4156)\n // We only use the first 3 servers, to avoid URI length issues.\n queryParams.via = queryParams.server_name = opts.viaServers.slice(0, 3);\n }\n var data = {};\n var signedInviteObj = yield signPromise;\n if (signedInviteObj) {\n data.third_party_signed = signedInviteObj;\n }\n var path = utils.encodeUri(\"/join/$roomid\", {\n $roomid: roomIdOrAlias\n });\n var res = yield _this1.http.authedRequest(Method.Post, path, queryParams, data);\n var roomId = res.room_id;\n if (inviter && _this1.cryptoBackend) {\n // Flag upfront that we are waiting for a key bundle, so that if we crash mid-import, we can try again.\n yield _this1.cryptoBackend.markRoomAsPendingKeyBundle(roomId, inviter);\n // Try to accept the room key bundle specified in a `m.room_key_bundle` to-device message we (might have) already received.\n yield _this1.cryptoBackend.maybeAcceptKeyBundle(roomId, inviter);\n }\n\n // In case we were originally given an alias, check the room cache again\n // with the resolved ID - this method is supposed to no-op if we already\n // were in the room, after all.\n var resolvedRoom = _this1.getRoom(roomId);\n if (resolvedRoom !== null && resolvedRoom !== void 0 && resolvedRoom.hasMembershipState(_this1.credentials.userId, KnownMembership.Join)) return resolvedRoom;\n var syncApi = new SyncApi(_this1, _this1.clientOpts, _this1.buildSyncApiOptions());\n return syncApi.createRoom(roomId);\n })();\n }\n\n /**\n * Knock a room. If you have already knocked the room, this will no-op.\n * @param roomIdOrAlias - The room ID or room alias to knock.\n * @param opts - Options when knocking the room.\n * @returns Promise which resolves: `{room_id: {string}}`\n * @returns Rejects: with an error response.\n */\n knockRoom(roomIdOrAlias) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var room = this.getRoom(roomIdOrAlias);\n if (room !== null && room !== void 0 && room.hasMembershipState(this.credentials.userId, KnownMembership.Knock)) {\n return Promise.resolve({\n room_id: room.roomId\n });\n }\n var path = utils.encodeUri(\"/knock/$roomIdOrAlias\", {\n $roomIdOrAlias: roomIdOrAlias\n });\n var queryParams = {};\n if (opts.viaServers) {\n // We only use the first 3 servers, to avoid URI length issues.\n var viaServers = Array.isArray(opts.viaServers) ? opts.viaServers.slice(0, 3) : [opts.viaServers];\n // server_name has been deprecated in favour of via with Matrix >1.11 (MSC4156)\n queryParams.server_name = viaServers;\n queryParams.via = viaServers;\n }\n var body = {};\n if (opts.reason) {\n body.reason = opts.reason;\n }\n return this.http.authedRequest(Method.Post, path, queryParams, body);\n }\n\n /**\n * Resend an event. Will also retry any to-device messages waiting to be sent.\n * @param event - The event to resend.\n * @param room - Optional. The room the event is in. Will update the\n * timeline entry if provided.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n resendEvent(event, room) {\n // also kick the to-device queue to retry\n this.toDeviceMessageQueue.sendQueue();\n this.updatePendingEventStatus(room, event, EventStatus.SENDING);\n return this.encryptAndSendEvent(room, event);\n }\n\n /**\n * Cancel a queued or unsent event.\n *\n * @param event - Event to cancel\n * @throws Error if the event is not in QUEUED, NOT_SENT or ENCRYPTING state\n */\n cancelPendingEvent(event) {\n if (![EventStatus.QUEUED, EventStatus.NOT_SENT, EventStatus.ENCRYPTING].includes(event.status)) {\n throw new Error(\"cannot cancel an event with status \" + event.status);\n }\n\n // If the event is currently being encrypted then remove it from the pending list, to indicate that it should\n // not be sent.\n if (event.status === EventStatus.ENCRYPTING) {\n this.eventsBeingEncrypted.delete(event.getId());\n } else if (this.scheduler && event.status === EventStatus.QUEUED) {\n // tell the scheduler to forget about it, if it's queued\n this.scheduler.removeEventFromQueue(event);\n }\n\n // then tell the room about the change of state, which will remove it\n // from the room's list of pending events.\n var room = this.getRoom(event.getRoomId());\n this.updatePendingEventStatus(room, event, EventStatus.CANCELLED);\n }\n\n /**\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n setRoomName(roomId, name) {\n return this.sendStateEvent(roomId, EventType.RoomName, {\n name: name\n });\n }\n\n /**\n * @param roomId - The room to update the topic in.\n * @param topic - The plaintext topic. May be empty to remove the topic.\n * @param htmlTopic - Optional.\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n setRoomTopic(roomId, topic, htmlTopic) {\n var content = ContentHelpers.makeTopicContent(topic, htmlTopic);\n return this.sendStateEvent(roomId, EventType.RoomTopic, content);\n }\n\n /**\n * @returns Promise which resolves: to an object keyed by tagId with objects containing a numeric order field.\n * @returns Rejects: with an error response.\n */\n getRoomTags(roomId) {\n var path = utils.encodeUri(\"/user/$userId/rooms/$roomId/tags\", {\n $userId: this.credentials.userId,\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * @param tagName - name of room tag to be set\n * @param metadata - associated with that tag to be stored\n * @returns Promise which resolves: to an empty object\n * @returns Rejects: with an error response.\n */\n setRoomTag(roomId, tagName) {\n var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var path = utils.encodeUri(\"/user/$userId/rooms/$roomId/tags/$tag\", {\n $userId: this.credentials.userId,\n $roomId: roomId,\n $tag: tagName\n });\n return this.http.authedRequest(Method.Put, path, undefined, metadata);\n }\n\n /**\n * @param tagName - name of room tag to be removed\n * @returns Promise which resolves: to an empty object\n * @returns Rejects: with an error response.\n */\n deleteRoomTag(roomId, tagName) {\n var path = utils.encodeUri(\"/user/$userId/rooms/$roomId/tags/$tag\", {\n $userId: this.credentials.userId,\n $roomId: roomId,\n $tag: tagName\n });\n return this.http.authedRequest(Method.Delete, path);\n }\n\n /**\n * @param roomId - the ID of the room this event should be stored within\n * @param eventType - event type to be set\n * @param content - event content\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n setRoomAccountData(roomId, eventType, content) {\n var path = utils.encodeUri(\"/user/$userId/rooms/$roomId/account_data/$type\", {\n $userId: this.credentials.userId,\n $roomId: roomId,\n $type: eventType\n });\n return this.http.authedRequest(Method.Put, path, undefined, content);\n }\n\n /**\n * Set a power level to one or multiple users.\n * Will apply changes atop of current power level event from local state if running & synced, falling back\n * to fetching latest from the `/state/` API.\n * @param roomId - the room to update power levels in\n * @param userId - the ID of the user or users to update power levels of\n * @param powerLevel - the numeric power level to update given users to\n * @returns Promise which resolves: to an ISendEventResponse object\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n setPowerLevel(roomId, userId, powerLevel) {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n var _content;\n var content;\n if (_this10.clientRunning && _this10.isInitialSyncComplete()) {\n var _this10$getRoom;\n content = (_this10$getRoom = _this10.getRoom(roomId)) === null || _this10$getRoom === void 0 || (_this10$getRoom = _this10$getRoom.currentState) === null || _this10$getRoom === void 0 || (_this10$getRoom = _this10$getRoom.getStateEvents(EventType.RoomPowerLevels, \"\")) === null || _this10$getRoom === void 0 ? void 0 : _this10$getRoom.getContent();\n }\n if (!content) {\n try {\n content = yield _this10.getStateEvent(roomId, EventType.RoomPowerLevels, \"\");\n } catch (e) {\n // It is possible for a Matrix room to not have a power levels event\n if (e instanceof MatrixError && e.errcode === \"M_NOT_FOUND\") {\n content = {};\n } else {\n throw e;\n }\n }\n }\n\n // take a copy of the content to ensure we don't corrupt\n // existing client state with a failed power level change\n content = utils.deepCopy(content);\n if (!((_content = content) !== null && _content !== void 0 && _content.users)) {\n content.users = {};\n }\n var users = Array.isArray(userId) ? userId : [userId];\n for (var user of users) {\n if (powerLevel == null) {\n delete content.users[user];\n } else {\n content.users[user] = powerLevel;\n }\n }\n return _this10.sendStateEvent(roomId, EventType.RoomPowerLevels, content, \"\");\n })();\n }\n\n /**\n * Create an m.beacon_info event\n * @returns\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n unstable_createLiveBeacon(roomId, beaconInfoContent) {\n var _this11 = this;\n return _asyncToGenerator(function* () {\n return _this11.unstable_setLiveBeacon(roomId, beaconInfoContent);\n })();\n }\n\n /**\n * Upsert a live beacon event\n * using a specific m.beacon_info.* event variable type\n * @param roomId - string\n * @returns\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n unstable_setLiveBeacon(roomId, beaconInfoContent) {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n return _this12.sendStateEvent(roomId, M_BEACON_INFO.name, beaconInfoContent, _this12.getUserId());\n })();\n }\n\n /**\n * Send a Matrix timeline event.\n * @param roomId The room to send to.\n * @param eventType The event type.\n * @param content The event content.\n * @param txnId An optional ID to deduplicate requests in case of repeated attempts.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n sendEvent(roomId, threadIdOrEventType, eventTypeOrContent, contentOrTxnId, txnIdOrVoid) {\n var threadId;\n var eventType;\n var content;\n var txnId;\n if (!(threadIdOrEventType !== null && threadIdOrEventType !== void 0 && threadIdOrEventType.startsWith(EVENT_ID_PREFIX)) && threadIdOrEventType !== null) {\n txnId = contentOrTxnId;\n content = eventTypeOrContent;\n eventType = threadIdOrEventType;\n threadId = null;\n } else {\n txnId = txnIdOrVoid;\n content = contentOrTxnId;\n eventType = eventTypeOrContent;\n threadId = threadIdOrEventType;\n }\n this.addThreadRelationIfNeeded(content, threadId, roomId);\n return this.sendCompleteEvent({\n roomId,\n threadId,\n eventObject: {\n type: eventType,\n content\n },\n txnId\n });\n }\n\n /**\n * If we expect that an event is part of a thread but is missing the relation\n * we need to add it manually, as well as the reply fallback\n */\n addThreadRelationIfNeeded(content, threadId, roomId) {\n var _content$mRelates_to;\n if (threadId && !((_content$mRelates_to = content[\"m.relates_to\"]) !== null && _content$mRelates_to !== void 0 && _content$mRelates_to.rel_type)) {\n var _content$mRelates_to2, _this$getRoom;\n var isReply = !!((_content$mRelates_to2 = content[\"m.relates_to\"]) !== null && _content$mRelates_to2 !== void 0 && _content$mRelates_to2[\"m.in_reply_to\"]);\n content[\"m.relates_to\"] = _objectSpread(_objectSpread({}, content[\"m.relates_to\"]), {}, {\n rel_type: THREAD_RELATION_TYPE.name,\n event_id: threadId,\n // Set is_falling_back to true unless this is actually intended to be a reply\n is_falling_back: !isReply\n });\n var thread = (_this$getRoom = this.getRoom(roomId)) === null || _this$getRoom === void 0 ? void 0 : _this$getRoom.getThread(threadId);\n if (thread && !isReply) {\n var _thread$lastReply$get, _thread$lastReply;\n content[\"m.relates_to\"][\"m.in_reply_to\"] = {\n event_id: (_thread$lastReply$get = (_thread$lastReply = thread.lastReply(ev => {\n return ev.isRelation(THREAD_RELATION_TYPE.name) && !ev.status;\n })) === null || _thread$lastReply === void 0 ? void 0 : _thread$lastReply.getId()) !== null && _thread$lastReply$get !== void 0 ? _thread$lastReply$get : threadId\n };\n }\n }\n }\n\n /**\n * @param eventObject - An object with the partial structure of an event, to which event_id, user_id, room_id and origin_server_ts will be added.\n * @param txnId - Optional.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n\n /**\n * Sends a delayed event (MSC4140).\n * @param eventObject - An object with the partial structure of an event, to which event_id, user_id, room_id and origin_server_ts will be added.\n * @param delayOpts - Properties of the delay for this event.\n * @param txnId - Optional.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n\n sendCompleteEvent(_ref3) {\n var roomId = _ref3.roomId,\n threadId = _ref3.threadId,\n eventObject = _ref3.eventObject,\n delayOpts = _ref3.delayOpts,\n queryDict = _ref3.queryDict,\n txnId = _ref3.txnId;\n if (!txnId) {\n txnId = this.makeTxnId();\n }\n\n // We always construct a MatrixEvent when sending because the store and scheduler use them.\n // We'll extract the params back out if it turns out the client has no scheduler or store.\n var localEvent = new MatrixEvent(Object.assign(eventObject, {\n event_id: \"~\" + roomId + \":\" + txnId,\n user_id: this.credentials.userId,\n sender: this.credentials.userId,\n room_id: roomId,\n origin_server_ts: new Date().getTime()\n }));\n var room = this.getRoom(roomId);\n var thread = threadId ? room === null || room === void 0 ? void 0 : room.getThread(threadId) : undefined;\n if (thread) {\n localEvent.setThread(thread);\n }\n if (!delayOpts) {\n // set up re-emitter for this new event - this is normally the job of EventMapper but we don't use it here\n this.reEmitter.reEmit(localEvent, [MatrixEventEvent.Replaced, MatrixEventEvent.VisibilityChange]);\n room === null || room === void 0 || room.reEmitter.reEmit(localEvent, [MatrixEventEvent.BeforeRedaction]);\n }\n\n // if this is a relation or redaction of an event\n // that hasn't been sent yet (e.g. with a local id starting with a ~)\n // then listen for the remote echo of that event so that by the time\n // this event does get sent, we have the correct event_id\n var targetId = localEvent.getAssociatedId();\n if (targetId !== null && targetId !== void 0 && targetId.startsWith(\"~\")) {\n var target = room === null || room === void 0 ? void 0 : room.getPendingEvents().find(e => e.getId() === targetId);\n target === null || target === void 0 || target.once(MatrixEventEvent.LocalEventIdReplaced, () => {\n localEvent.updateAssociatedId(target.getId());\n });\n }\n var type = localEvent.getType();\n this.logger.debug(\"sendEvent of type \".concat(type, \" in \").concat(roomId, \" with txnId \").concat(txnId).concat(delayOpts ? \" (delayed event)\" : \"\").concat(queryDict ? \" query params: \" + JSON.stringify(queryDict) : \"\"));\n localEvent.setTxnId(txnId);\n localEvent.setStatus(EventStatus.SENDING);\n\n // TODO: separate store for delayed events?\n if (!delayOpts) {\n // add this event immediately to the local store as 'sending'.\n room === null || room === void 0 || room.addPendingEvent(localEvent, txnId);\n\n // addPendingEvent can change the state to NOT_SENT if it believes\n // that there's other events that have failed. We won't bother to\n // try sending the event if the state has changed as such.\n if (localEvent.status === EventStatus.NOT_SENT) {\n return Promise.reject(new Error(\"Event blocked by other events not yet sent\"));\n }\n return this.encryptAndSendEvent(room, localEvent, queryDict);\n } else {\n return this.encryptAndSendEvent(room, localEvent, delayOpts, queryDict);\n }\n }\n\n /**\n * encrypts the event if necessary; adds the event to the queue, or sends it; marks the event as sent/unsent\n * @returns returns a promise which resolves with the result of the send request\n */\n\n /**\n * Simply sends a delayed event without encrypting it.\n * TODO: Allow encrypted delayed events, and encrypt them properly\n * @param delayOpts - Properties of the delay for this event.\n * @returns returns a promise which resolves with the result of the delayed send request\n */\n\n encryptAndSendEvent(room, event, delayOptsOrQuery, queryDict) {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n var queryOpts = queryDict;\n if (delayOptsOrQuery && isSendDelayedEventRequestOpts(delayOptsOrQuery)) {\n return _this13.sendEventHttpRequest(event, delayOptsOrQuery, queryOpts);\n } else if (!queryOpts) {\n queryOpts = delayOptsOrQuery;\n }\n try {\n var cancelled;\n _this13.eventsBeingEncrypted.add(event.getId());\n try {\n yield _this13.encryptEventIfNeeded(event, room !== null && room !== void 0 ? room : undefined);\n } finally {\n cancelled = !_this13.eventsBeingEncrypted.delete(event.getId());\n }\n if (cancelled) {\n // cancelled via MatrixClient::cancelPendingEvent\n return {};\n }\n\n // encryptEventIfNeeded may have updated the status from SENDING to ENCRYPTING. If so, we need\n // to put it back.\n if (event.status === EventStatus.ENCRYPTING) {\n _this13.updatePendingEventStatus(room, event, EventStatus.SENDING);\n }\n var promise = null;\n if (_this13.scheduler) {\n // if this returns a promise then the scheduler has control now and will\n // resolve/reject when it is done. Internally, the scheduler will invoke\n // processFn which is set to this._sendEventHttpRequest so the same code\n // path is executed regardless.\n promise = _this13.scheduler.queueEvent(event);\n if (promise && _this13.scheduler.getQueueForEvent(event).length > 1) {\n // event is processed FIFO so if the length is 2 or more we know\n // this event is stuck behind an earlier event.\n _this13.updatePendingEventStatus(room, event, EventStatus.QUEUED);\n }\n }\n if (!promise) {\n promise = _this13.sendEventHttpRequest(event, queryOpts);\n if (room) {\n promise = promise.then(res => {\n room.updatePendingEvent(event, EventStatus.SENT, res[\"event_id\"]);\n return res;\n });\n }\n }\n return yield promise;\n } catch (err) {\n _this13.logger.error(\"Error sending event\", err);\n try {\n // set the error on the event before we update the status:\n // updating the status emits the event, so the state should be\n // consistent at that point.\n event.error = err;\n _this13.updatePendingEventStatus(room, event, EventStatus.NOT_SENT);\n } catch (e) {\n _this13.logger.error(\"Exception in error handler!\", e);\n }\n if (err instanceof MatrixError) {\n err.event = event;\n }\n throw err;\n }\n })();\n }\n encryptEventIfNeeded(event, room) {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n // If the room is unknown, we cannot encrypt for it\n if (!room) return;\n if (!(yield _this14.shouldEncryptEventForRoom(event, room))) return;\n if (!_this14.cryptoBackend && _this14.usingExternalCrypto) {\n // The client has opted to allow sending messages to encrypted\n // rooms even if the room is encrypted, and we haven't set up\n // crypto. This is useful for users of matrix-org/pantalaimon\n return;\n }\n if (!_this14.cryptoBackend) {\n throw new Error(\"This room is configured to use encryption, but your client does not support encryption.\");\n }\n _this14.updatePendingEventStatus(room, event, EventStatus.ENCRYPTING);\n yield _this14.cryptoBackend.encryptEvent(event, room);\n })();\n }\n\n /**\n * Determine whether a given event should be encrypted when we send it to the given room.\n *\n * This takes into account event type and room configuration.\n */\n shouldEncryptEventForRoom(event, room) {\n var _this15 = this;\n return _asyncToGenerator(function* () {\n var _this15$cryptoBackend;\n if (event.isEncrypted()) {\n // this event has already been encrypted; this happens if the\n // encryption step succeeded, but the send step failed on the first\n // attempt.\n return false;\n }\n if (event.getType() === EventType.Reaction) {\n // For reactions, there is a very little gained by encrypting the entire\n // event, as relation data is already kept in the clear. Event\n // encryption for a reaction effectively only obscures the event type,\n // but the purpose is still obvious from the relation data, so nothing\n // is really gained. It also causes quite a few problems, such as:\n // * triggers notifications via default push rules\n // * prevents server-side bundling for reactions\n // The reaction key / content / emoji value does warrant encrypting, but\n // this will be handled separately by encrypting just this value.\n // See https://github.com/matrix-org/matrix-doc/pull/1849#pullrequestreview-248763642\n return false;\n }\n if (event.isRedaction()) {\n // Redactions do not support encryption in the spec at this time.\n // Whilst it mostly worked in some clients, it wasn't compliant.\n return false;\n }\n\n // If the room has an m.room.encryption event, we should encrypt.\n if (room.hasEncryptionStateEvent()) return true;\n\n // If we have a crypto impl, and *it* thinks we should encrypt, then we should.\n if (yield (_this15$cryptoBackend = _this15.cryptoBackend) === null || _this15$cryptoBackend === void 0 ? void 0 : _this15$cryptoBackend.isEncryptionEnabledInRoom(room.roomId)) return true;\n\n // Otherwise, no need to encrypt.\n return false;\n })();\n }\n\n /**\n * Returns the eventType that should be used taking encryption into account\n * for a given eventType.\n * @param roomId - the room for the events `eventType` relates to\n * @param eventType - the event type\n * @returns the event type taking encryption into account\n */\n getEncryptedIfNeededEventType(roomId, eventType) {\n var _this$getRoom2;\n if (eventType === EventType.Reaction) return eventType;\n return (_this$getRoom2 = this.getRoom(roomId)) !== null && _this$getRoom2 !== void 0 && _this$getRoom2.hasEncryptionStateEvent() ? EventType.RoomMessageEncrypted : eventType;\n }\n updatePendingEventStatus(room, event, newStatus) {\n if (room) {\n room.updatePendingEvent(event, newStatus);\n } else {\n event.setStatus(newStatus);\n }\n }\n sendEventHttpRequest(event, queryOrDelayOpts, queryDict) {\n var txnId = event.getTxnId();\n if (!txnId) {\n txnId = this.makeTxnId();\n event.setTxnId(txnId);\n }\n var pathParams = {\n $roomId: event.getRoomId(),\n $eventType: event.getWireType(),\n $stateKey: event.getStateKey(),\n $txnId: txnId\n };\n var path;\n if (event.isState()) {\n var pathTemplate = \"/rooms/$roomId/state/$eventType\";\n if (event.getStateKey() && event.getStateKey().length > 0) {\n pathTemplate = \"/rooms/$roomId/state/$eventType/$stateKey\";\n }\n path = utils.encodeUri(pathTemplate, pathParams);\n } else if (event.isRedaction() && event.event.redacts) {\n var _pathTemplate = \"/rooms/$roomId/redact/$redactsEventId/$txnId\";\n path = utils.encodeUri(_pathTemplate, _objectSpread({\n $redactsEventId: event.event.redacts\n }, pathParams));\n } else {\n path = utils.encodeUri(\"/rooms/$roomId/send/$eventType/$txnId\", pathParams);\n }\n var delayOpts = queryOrDelayOpts && isSendDelayedEventRequestOpts(queryOrDelayOpts) ? queryOrDelayOpts : undefined;\n var queryOpts = !delayOpts ? queryOrDelayOpts : queryDict;\n var content = event.getWireContent();\n if (delayOpts) {\n return this.http.authedRequest(Method.Put, path, _objectSpread(_objectSpread({}, getUnstableDelayQueryOpts(delayOpts)), queryOpts), content);\n } else {\n return this.http.authedRequest(Method.Put, path, queryOpts, content).then(res => {\n this.logger.debug(\"Event sent to \".concat(event.getRoomId(), \" with event id \").concat(res.event_id));\n return res;\n });\n }\n }\n\n /**\n * @param txnId - transaction id. One will be made up if not supplied.\n * @param opts - Redact options\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n * @throws Error if called with `with_rel_types` (MSC3912) but the server does not support it.\n * Callers should check whether the server supports MSC3912 via `MatrixClient.canSupport`.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n redactEvent(roomId, threadId, eventId, txnId, opts) {\n var _eventId, _opts, _opts2;\n if (!((_eventId = eventId) !== null && _eventId !== void 0 && _eventId.startsWith(EVENT_ID_PREFIX))) {\n opts = txnId;\n txnId = eventId;\n eventId = threadId;\n threadId = null;\n }\n var reason = (_opts = opts) === null || _opts === void 0 ? void 0 : _opts.reason;\n var content = {\n reason\n };\n if (((_opts2 = opts) === null || _opts2 === void 0 ? void 0 : _opts2.with_rel_types) !== undefined) {\n if (this.canSupport.get(Feature.RelationBasedRedactions) === ServerSupport.Unsupported) {\n throw new Error(\"Server does not support relation based redactions \" + \"roomId \".concat(roomId, \" eventId \").concat(eventId, \" txnId: \").concat(txnId, \" threadId \").concat(threadId));\n }\n var withRelTypesPropName = this.canSupport.get(Feature.RelationBasedRedactions) === ServerSupport.Stable ? MSC3912_RELATION_BASED_REDACTIONS_PROP.stable : MSC3912_RELATION_BASED_REDACTIONS_PROP.unstable;\n content[withRelTypesPropName] = opts.with_rel_types;\n }\n return this.sendCompleteEvent({\n roomId,\n threadId,\n eventObject: {\n type: EventType.RoomRedaction,\n content,\n redacts: eventId\n },\n txnId: txnId\n });\n }\n\n /**\n * @param txnId - Optional.\n * @returns Promise which resolves: to an ISendEventResponse object\n * @returns Rejects: with an error response.\n */\n\n sendMessage(roomId, threadId, content, txnId) {\n if (typeof threadId !== \"string\" && threadId !== null) {\n txnId = content;\n content = threadId;\n threadId = null;\n }\n var eventType = EventType.RoomMessage;\n var sendContent = content;\n return this.sendEvent(roomId, threadId, eventType, sendContent, txnId);\n }\n\n /**\n * @param txnId - Optional.\n * @returns\n * @returns Rejects: with an error response.\n */\n\n sendTextMessage(roomId, threadId, body, txnId) {\n var _threadId;\n if (!((_threadId = threadId) !== null && _threadId !== void 0 && _threadId.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n txnId = body;\n body = threadId;\n threadId = null;\n }\n var content = ContentHelpers.makeTextMessage(body);\n return this.sendMessage(roomId, threadId, content, txnId);\n }\n\n /**\n * @param txnId - Optional.\n * @returns Promise which resolves: to a ISendEventResponse object\n * @returns Rejects: with an error response.\n */\n\n sendNotice(roomId, threadId, body, txnId) {\n var _threadId2;\n if (!((_threadId2 = threadId) !== null && _threadId2 !== void 0 && _threadId2.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n txnId = body;\n body = threadId;\n threadId = null;\n }\n var content = ContentHelpers.makeNotice(body);\n return this.sendMessage(roomId, threadId, content, txnId);\n }\n\n /**\n * @param txnId - Optional.\n * @returns Promise which resolves: to a ISendEventResponse object\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n sendEmoteMessage(roomId, threadId, body, txnId) {\n var _threadId3;\n if (!((_threadId3 = threadId) !== null && _threadId3 !== void 0 && _threadId3.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n txnId = body;\n body = threadId;\n threadId = null;\n }\n var content = ContentHelpers.makeEmoteMessage(body);\n return this.sendMessage(roomId, threadId, content, txnId);\n }\n\n /**\n * @returns Promise which resolves: to a ISendEventResponse object\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n sendImageMessage(roomId, threadId, url, info) {\n var _threadId4;\n var text = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : \"Image\";\n if (!((_threadId4 = threadId) !== null && _threadId4 !== void 0 && _threadId4.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n text = info || \"Image\";\n info = url;\n url = threadId;\n threadId = null;\n }\n var content = {\n msgtype: MsgType.Image,\n url: url,\n info: info,\n body: text\n };\n return this.sendMessage(roomId, threadId, content);\n }\n\n /**\n * @returns Promise which resolves: to a ISendEventResponse object\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n sendStickerMessage(roomId, threadId, url, info) {\n var _threadId5;\n var text = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : \"Sticker\";\n if (!((_threadId5 = threadId) !== null && _threadId5 !== void 0 && _threadId5.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n text = info || \"Sticker\";\n info = url;\n url = threadId;\n threadId = null;\n }\n var content = {\n url: url,\n info: info,\n body: text\n };\n return this.sendEvent(roomId, threadId, EventType.Sticker, content);\n }\n\n /**\n * @returns Promise which resolves: to a ISendEventResponse object\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n sendHtmlMessage(roomId, threadId, body, htmlBody) {\n var _threadId6;\n if (!((_threadId6 = threadId) !== null && _threadId6 !== void 0 && _threadId6.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n htmlBody = body;\n body = threadId;\n threadId = null;\n }\n var content = ContentHelpers.makeHtmlMessage(body, htmlBody);\n return this.sendMessage(roomId, threadId, content);\n }\n\n /**\n * @returns Promise which resolves: to a ISendEventResponse object\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n sendHtmlNotice(roomId, threadId, body, htmlBody) {\n var _threadId7;\n if (!((_threadId7 = threadId) !== null && _threadId7 !== void 0 && _threadId7.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n htmlBody = body;\n body = threadId;\n threadId = null;\n }\n var content = ContentHelpers.makeHtmlNotice(body, htmlBody);\n return this.sendMessage(roomId, threadId, content);\n }\n\n /**\n * @returns Promise which resolves: to a ISendEventResponse object\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n\n sendHtmlEmote(roomId, threadId, body, htmlBody) {\n var _threadId8;\n if (!((_threadId8 = threadId) !== null && _threadId8 !== void 0 && _threadId8.startsWith(EVENT_ID_PREFIX)) && threadId !== null) {\n htmlBody = body;\n body = threadId;\n threadId = null;\n }\n var content = ContentHelpers.makeHtmlEmote(body, htmlBody);\n return this.sendMessage(roomId, threadId, content);\n }\n\n /**\n * Send a delayed timeline event.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) for more details.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line\n _unstable_sendDelayedEvent(roomId, delayOpts, threadId, eventType, content, txnId) {\n var _this16 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this16.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"sendDelayedEvent\");\n }\n _this16.addThreadRelationIfNeeded(content, threadId, roomId);\n return _this16.sendCompleteEvent({\n roomId,\n threadId,\n eventObject: {\n type: eventType,\n content\n },\n delayOpts,\n txnId\n });\n })();\n }\n\n /**\n * Send a delayed sticky timeline event.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) and\n * [MSC4354](https://github.com/matrix-org/matrix-spec-proposals/pull/4354) for more details.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line\n _unstable_sendStickyDelayedEvent(roomId, stickDuration, delayOpts, threadId, eventType, content, txnId) {\n var _this17 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this17.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"getDelayedEvents\");\n }\n if (!(yield _this17.doesServerSupportUnstableFeature(UNSTABLE_MSC4354_STICKY_EVENTS))) {\n throw new UnsupportedStickyEventsEndpointError(\"Server does not support the sticky events\", \"sendStickyEvent\");\n }\n _this17.addThreadRelationIfNeeded(content, threadId, roomId);\n return _this17.sendCompleteEvent({\n roomId,\n threadId,\n eventObject: {\n type: eventType,\n content\n },\n queryDict: {\n \"org.matrix.msc4354.sticky_duration_ms\": stickDuration\n },\n delayOpts,\n txnId\n });\n })();\n }\n\n /**\n * Send a delayed state event.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) for more details.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line\n _unstable_sendDelayedStateEvent(roomId, delayOpts, eventType, content) {\n var _arguments3 = arguments,\n _this18 = this;\n return _asyncToGenerator(function* () {\n var stateKey = _arguments3.length > 4 && _arguments3[4] !== undefined ? _arguments3[4] : \"\";\n var opts = _arguments3.length > 5 && _arguments3[5] !== undefined ? _arguments3[5] : {};\n if (!(yield _this18.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"sendDelayedStateEvent\");\n }\n var pathParams = {\n $roomId: roomId,\n $eventType: eventType,\n $stateKey: stateKey\n };\n var path = utils.encodeUri(\"/rooms/$roomId/state/$eventType\", pathParams);\n if (stateKey !== undefined) {\n path = utils.encodeUri(path + \"/$stateKey\", pathParams);\n }\n return _this18.http.authedRequest(Method.Put, path, getUnstableDelayQueryOpts(delayOpts), content, opts);\n })();\n }\n\n /**\n * Send a sticky timeline event.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4354](https://github.com/matrix-org/matrix-spec-proposals/pull/4354) for more details.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line\n _unstable_sendStickyEvent(roomId, stickDuration, threadId, eventType, content, txnId) {\n var _this19 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this19.doesServerSupportUnstableFeature(UNSTABLE_MSC4354_STICKY_EVENTS))) {\n throw new UnsupportedStickyEventsEndpointError(\"Server does not support the sticky events\", \"sendStickyEvent\");\n }\n _this19.addThreadRelationIfNeeded(content, threadId, roomId);\n return _this19.sendCompleteEvent({\n roomId,\n threadId,\n eventObject: {\n type: eventType,\n content\n },\n queryDict: {\n \"org.matrix.msc4354.sticky_duration_ms\": stickDuration\n },\n txnId\n });\n })();\n }\n\n /**\n * Get information about delayed events owned by the requesting user.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) for more details.\n */\n // eslint-disable-next-line\n _unstable_getDelayedEvents(status, delayId, fromToken) {\n var _this20 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this20.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"getDelayedEvents\");\n }\n var queryDict = {\n from: fromToken,\n status,\n delay_id: delayId\n };\n return yield _this20.http.authedRequest(Method.Get, \"/delayed_events\", queryDict, undefined, {\n prefix: \"\".concat(ClientPrefix.Unstable, \"/\").concat(UNSTABLE_MSC4140_DELAYED_EVENTS)\n });\n })();\n }\n\n /**\n * Manage a delayed event associated with the given delay_id.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) for more details.\n *\n * @deprecated Instead use one of:\n * - {@link _unstable_cancelScheduledDelayedEvent}\n * - {@link _unstable_restartScheduledDelayedEvent}\n * - {@link _unstable_sendScheduledDelayedEvent}\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_updateDelayedEvent(delayId, action) {\n var _arguments4 = arguments,\n _this21 = this;\n return _asyncToGenerator(function* () {\n var requestOptions = _arguments4.length > 2 && _arguments4[2] !== undefined ? _arguments4[2] : {};\n if (!(yield _this21.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"updateDelayedEvent\");\n }\n return yield _this21.updateScheduledDelayedEventWithActionInBody(delayId, action, requestOptions);\n })();\n }\n\n /**\n * Cancel the scheduled delivery of the delayed event matching the provided delayId.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) for more details.\n *\n * @throws A M_NOT_FOUND error if no matching delayed event could be found.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_cancelScheduledDelayedEvent(delayId) {\n var _arguments5 = arguments,\n _this22 = this;\n return _asyncToGenerator(function* () {\n var requestOptions = _arguments5.length > 1 && _arguments5[1] !== undefined ? _arguments5[1] : {};\n return yield _this22.updateScheduledDelayedEvent(delayId, UpdateDelayedEventAction.Cancel, requestOptions);\n })();\n }\n\n /**\n * Restart the scheduled delivery of the delayed event matching the given delayId.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) for more details.\n *\n * @throws A M_NOT_FOUND error if no matching delayed event could be found.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_restartScheduledDelayedEvent(delayId) {\n var _arguments6 = arguments,\n _this23 = this;\n return _asyncToGenerator(function* () {\n var requestOptions = _arguments6.length > 1 && _arguments6[1] !== undefined ? _arguments6[1] : {};\n return yield _this23.updateScheduledDelayedEvent(delayId, UpdateDelayedEventAction.Restart, requestOptions);\n })();\n }\n\n /**\n * Immediately send the delayed event matching the given delayId,\n * instead of waiting for its scheduled delivery.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC4140](https://github.com/matrix-org/matrix-spec-proposals/pull/4140) for more details.\n *\n * @throws A M_NOT_FOUND error if no matching delayed event could be found.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_sendScheduledDelayedEvent(delayId) {\n var _arguments7 = arguments,\n _this24 = this;\n return _asyncToGenerator(function* () {\n var requestOptions = _arguments7.length > 1 && _arguments7[1] !== undefined ? _arguments7[1] : {};\n return yield _this24.updateScheduledDelayedEvent(delayId, UpdateDelayedEventAction.Send, requestOptions);\n })();\n }\n updateScheduledDelayedEvent(delayId, action) {\n var _arguments8 = arguments,\n _this25 = this;\n return _asyncToGenerator(function* () {\n var requestOptions = _arguments8.length > 2 && _arguments8[2] !== undefined ? _arguments8[2] : {};\n if (!(yield _this25.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"\".concat(action, \"ScheduledDelayedEvent\"));\n }\n try {\n var path = utils.encodeUri(\"/delayed_events/$delayId/$action\", {\n $delayId: delayId,\n $action: action\n });\n // Although this endpoint supports being used without authentication,\n // do authenticate here to make ratelimiting apply per user instead of per source IP address,\n // if the server supports that\n return yield _this25.http.authedRequest(Method.Post, path, undefined, undefined, _objectSpread(_objectSpread({}, requestOptions), {}, {\n prefix: \"\".concat(ClientPrefix.Unstable, \"/\").concat(UNSTABLE_MSC4140_DELAYED_EVENTS)\n }));\n } catch (e) {\n if (e instanceof MatrixError && e.errcode === \"M_UNRECOGNIZED\") {\n // For backwards compatibility with an older version of this endpoint\n // which put the update action in the request body instead of the path\n return yield _this25.updateScheduledDelayedEventWithActionInBody(delayId, action, requestOptions);\n } else {\n throw e;\n }\n }\n })();\n }\n\n /**\n * @deprecated Present for backwards compatibility with an older version of MSC4140\n * which had a single, authenticated endpoint for updating a delayed event, instead\n * of one unauthenticated endpoint per update action.\n */\n updateScheduledDelayedEventWithActionInBody(delayId, action) {\n var _arguments9 = arguments,\n _this26 = this;\n return _asyncToGenerator(function* () {\n var requestOptions = _arguments9.length > 2 && _arguments9[2] !== undefined ? _arguments9[2] : {};\n var path = utils.encodeUri(\"/delayed_events/$delayId\", {\n $delayId: delayId\n });\n var data = {\n action\n };\n try {\n return yield _this26.http.request(Method.Post, path, undefined, data, _objectSpread(_objectSpread({}, requestOptions), {}, {\n prefix: \"\".concat(ClientPrefix.Unstable, \"/\").concat(UNSTABLE_MSC4140_DELAYED_EVENTS)\n }));\n } catch (e) {\n if (e instanceof MatrixError && e.errcode === \"M_MISSING_TOKEN\") {\n // For backwards compatibility with an older version of this endpoint\n // which required authentication\n return yield _this26.http.authedRequest(Method.Post, path, undefined, data, _objectSpread(_objectSpread({}, requestOptions), {}, {\n prefix: \"\".concat(ClientPrefix.Unstable, \"/\").concat(UNSTABLE_MSC4140_DELAYED_EVENTS)\n }));\n } else {\n throw e;\n }\n }\n })();\n }\n\n /**\n * Send a receipt.\n * @param event - The event being acknowledged\n * @param receiptType - The kind of receipt e.g. \"m.read\". Other than\n * ReceiptType.Read are experimental!\n * @param body - Additional content to send alongside the receipt.\n * @param unthreaded - An unthreaded receipt will clear room+thread notifications\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n sendReceipt(event, receiptType, body) {\n var _arguments0 = arguments,\n _this27 = this;\n return _asyncToGenerator(function* () {\n var unthreaded = _arguments0.length > 3 && _arguments0[3] !== undefined ? _arguments0[3] : false;\n if (_this27.isGuest()) {\n return Promise.resolve({}); // guests cannot send receipts so don't bother.\n }\n var path = utils.encodeUri(\"/rooms/$roomId/receipt/$receiptType/$eventId\", {\n $roomId: event.getRoomId(),\n $receiptType: receiptType,\n $eventId: event.getId()\n });\n\n // Unless we're explicitly making an unthreaded receipt or we don't\n // support threads, include the `thread_id` property in the body.\n var shouldAddThreadId = !unthreaded && _this27.supportsThreads();\n var fullBody = shouldAddThreadId ? _objectSpread(_objectSpread({}, body), {}, {\n thread_id: threadIdForReceipt(event)\n }) : body;\n var promise = _this27.http.authedRequest(Method.Post, path, undefined, fullBody || {});\n var room = _this27.getRoom(event.getRoomId());\n if (room && _this27.credentials.userId) {\n room.addLocalEchoReceipt(_this27.credentials.userId, event, receiptType, unthreaded);\n }\n return promise;\n })();\n }\n\n /**\n * Send a read receipt.\n * @param event - The event that has been read.\n * @param receiptType - other than ReceiptType.Read are experimental! Optional.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n sendReadReceipt(event) {\n var _arguments1 = arguments,\n _this28 = this;\n return _asyncToGenerator(function* () {\n var receiptType = _arguments1.length > 1 && _arguments1[1] !== undefined ? _arguments1[1] : ReceiptType.Read;\n var unthreaded = _arguments1.length > 2 && _arguments1[2] !== undefined ? _arguments1[2] : false;\n if (!event) return;\n var eventId = event.getId();\n var room = _this28.getRoom(event.getRoomId());\n if (room !== null && room !== void 0 && room.hasPendingEvent(eventId)) {\n throw new Error(\"Cannot set read receipt to a pending event (\".concat(eventId, \")\"));\n }\n return _this28.sendReceipt(event, receiptType, {}, unthreaded);\n })();\n }\n\n /**\n * Set a marker to indicate the point in a room before which the user has read every\n * event. This can be retrieved from room account data (the event type is `m.fully_read`)\n * and displayed as a horizontal line in the timeline that is visually distinct to the\n * position of the user's own read receipt.\n * @param roomId - ID of the room that has been read\n * @param rmEventId - ID of the event that has been read\n * @param rrEvent - the event tracked by the read receipt. This is here for\n * convenience because the RR and the RM are commonly updated at the same time as each\n * other. The local echo of this receipt will be done if set. Optional.\n * @param rpEvent - the m.read.private read receipt event for when we don't\n * want other users to see the read receipts. This is experimental. Optional.\n * @returns Promise which resolves: the empty object, `{}`.\n */\n setRoomReadMarkers(roomId, rmEventId, rrEvent, rpEvent) {\n var _this29 = this;\n return _asyncToGenerator(function* () {\n var room = _this29.getRoom(roomId);\n if (room !== null && room !== void 0 && room.hasPendingEvent(rmEventId)) {\n throw new Error(\"Cannot set read marker to a pending event (\".concat(rmEventId, \")\"));\n }\n\n // Add the optional RR update, do local echo like `sendReceipt`\n var rrEventId;\n if (rrEvent) {\n rrEventId = rrEvent.getId();\n if (room !== null && room !== void 0 && room.hasPendingEvent(rrEventId)) {\n throw new Error(\"Cannot set read receipt to a pending event (\".concat(rrEventId, \")\"));\n }\n room === null || room === void 0 || room.addLocalEchoReceipt(_this29.credentials.userId, rrEvent, ReceiptType.Read);\n }\n\n // Add the optional private RR update, do local echo like `sendReceipt`\n var rpEventId;\n if (rpEvent) {\n rpEventId = rpEvent.getId();\n if (room !== null && room !== void 0 && room.hasPendingEvent(rpEventId)) {\n throw new Error(\"Cannot set read receipt to a pending event (\".concat(rpEventId, \")\"));\n }\n room === null || room === void 0 || room.addLocalEchoReceipt(_this29.credentials.userId, rpEvent, ReceiptType.ReadPrivate);\n }\n return yield _this29.setRoomReadMarkersHttpRequest(roomId, rmEventId, rrEventId, rpEventId);\n })();\n }\n\n /**\n *\n * @param roomId\n * @param notificationEventId\n * @returns\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n sendRtcDecline(roomId, notificationEventId) {\n return this.sendEvent(roomId, EventType.RTCDecline, {\n \"m.relates_to\": {\n event_id: notificationEventId,\n rel_type: RelationType.Reference\n }\n });\n }\n\n /**\n * Get a preview of the given URL as of (roughly) the given point in time,\n * described as an object with OpenGraph keys and associated values.\n * Attributes may be synthesized where actual OG metadata is lacking.\n * Caches results to prevent hammering the server.\n * @param url - The URL to get preview data for\n * @param ts - The preferred point in time that the preview should\n * describe (ms since epoch). The preview returned will either be the most\n * recent one preceding this timestamp if available, or failing that the next\n * most recent available preview.\n * @returns Promise which resolves: Object of OG metadata.\n * @returns Rejects: with an error response.\n * May return synthesized attributes if the URL lacked OG meta.\n */\n getUrlPreview(url, ts) {\n var _this30 = this;\n return _asyncToGenerator(function* () {\n // bucket the timestamp to the nearest minute to prevent excessive spam to the server\n // Surely 60-second accuracy is enough for anyone.\n ts = Math.floor(ts / 60000) * 60000;\n var parsed = new URL(url);\n parsed.hash = \"\"; // strip the hash as it won't affect the preview\n url = parsed.toString();\n var key = ts + \"_\" + url;\n\n // If there's already a request in flight (or we've handled it), return that instead.\n if (key in _this30.urlPreviewCache) {\n return _this30.urlPreviewCache[key];\n }\n var supportsNewEndpoint = yield _this30.isVersionSupported(\"v1.11\");\n var resp = _this30.http.authedRequest(Method.Get, supportsNewEndpoint ? \"/media/preview_url\" : \"/preview_url\", {\n url,\n ts: ts.toString()\n }, undefined, {\n prefix: supportsNewEndpoint ? ClientPrefix.V1 : MediaPrefix.V3,\n priority: \"low\"\n });\n // TODO: Expire the URL preview cache sometimes\n _this30.urlPreviewCache[key] = resp;\n return resp;\n })();\n }\n\n /**\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n sendTyping(roomId, isTyping, timeoutMs) {\n if (this.isGuest()) {\n return Promise.resolve({}); // guests cannot send typing notifications so don't bother.\n }\n var path = utils.encodeUri(\"/rooms/$roomId/typing/$userId\", {\n $roomId: roomId,\n $userId: this.getUserId()\n });\n var data = {\n typing: isTyping\n };\n if (isTyping) {\n data.timeout = timeoutMs ? timeoutMs : 20000;\n }\n return this.http.authedRequest(Method.Put, path, undefined, data);\n }\n\n /**\n * Determines the history of room upgrades for a given room, as far as the\n * client can see. Returns an array of Rooms where the first entry is the\n * oldest and the last entry is the newest (likely current) room. If the\n * provided room is not found, this returns an empty list. This works in\n * both directions, looking for older and newer rooms of the given room.\n * @param roomId - The room ID to search from\n * @param verifyLinks - If true, the function will only return rooms\n * which can be proven to be linked. For example, rooms which have a create\n * event pointing to an old room which the client is not aware of or doesn't\n * have a matching tombstone would not be returned.\n * @param msc3946ProcessDynamicPredecessor - if true, look for\n * m.room.predecessor state events as well as create events, and prefer\n * predecessor events where they exist (MSC3946).\n * @returns An array of rooms representing the upgrade\n * history.\n */\n getRoomUpgradeHistory(roomId) {\n var verifyLinks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var msc3946ProcessDynamicPredecessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var currentRoom = this.getRoom(roomId);\n if (!currentRoom) return [];\n var before = this.findPredecessorRooms(currentRoom, verifyLinks, msc3946ProcessDynamicPredecessor);\n var after = this.findSuccessorRooms(currentRoom, verifyLinks, msc3946ProcessDynamicPredecessor);\n return [...before, currentRoom, ...after];\n }\n findPredecessorRooms(room, verifyLinks, msc3946ProcessDynamicPredecessor) {\n var _room$findPredecessor;\n var ret = [];\n var seenRoomIDs = new Set([room.roomId]);\n\n // Work backwards from newer to older rooms\n var predecessorRoomId = (_room$findPredecessor = room.findPredecessor(msc3946ProcessDynamicPredecessor)) === null || _room$findPredecessor === void 0 ? void 0 : _room$findPredecessor.roomId;\n while (predecessorRoomId !== null) {\n var _room$findPredecessor2;\n if (predecessorRoomId) {\n if (seenRoomIDs.has(predecessorRoomId)) break;\n seenRoomIDs.add(predecessorRoomId);\n }\n var predecessorRoom = this.getRoom(predecessorRoomId);\n if (predecessorRoom === null) {\n break;\n }\n if (verifyLinks) {\n var tombstone = predecessorRoom.currentState.getStateEvents(EventType.RoomTombstone, \"\");\n if (!tombstone || tombstone.getContent()[\"replacement_room\"] !== room.roomId) {\n break;\n }\n }\n\n // Insert at the front because we're working backwards from the currentRoom\n ret.splice(0, 0, predecessorRoom);\n room = predecessorRoom;\n predecessorRoomId = (_room$findPredecessor2 = room.findPredecessor(msc3946ProcessDynamicPredecessor)) === null || _room$findPredecessor2 === void 0 ? void 0 : _room$findPredecessor2.roomId;\n }\n return ret;\n }\n findSuccessorRooms(room, verifyLinks, msc3946ProcessDynamicPredecessor) {\n var ret = [];\n\n // Work forwards, looking at tombstone events\n var tombstoneEvent = room.currentState.getStateEvents(EventType.RoomTombstone, \"\");\n while (tombstoneEvent) {\n var successorRoom = this.getRoom(tombstoneEvent.getContent()[\"replacement_room\"]);\n if (!successorRoom) break; // end of the chain\n if (successorRoom.roomId === room.roomId) break; // Tombstone is referencing its own room\n\n if (verifyLinks) {\n var _successorRoom$findPr;\n var predecessorRoomId = (_successorRoom$findPr = successorRoom.findPredecessor(msc3946ProcessDynamicPredecessor)) === null || _successorRoom$findPr === void 0 ? void 0 : _successorRoom$findPr.roomId;\n if (!predecessorRoomId || predecessorRoomId !== room.roomId) {\n break;\n }\n }\n\n // Push to the end because we're looking forwards\n ret.push(successorRoom);\n var roomIds = new Set(ret.map(ref => ref.roomId));\n if (roomIds.size < ret.length) {\n // The last room added to the list introduced a previous roomId\n // To avoid recursion, return the last rooms - 1\n return ret.slice(0, ret.length - 1);\n }\n\n // Set the current room to the reference room so we know where we're at\n room = successorRoom;\n tombstoneEvent = room.currentState.getStateEvents(EventType.RoomTombstone, \"\");\n }\n return ret;\n }\n\n /**\n * Send an invite to the given user to join the given room.\n *\n * @param roomId - The ID of the room to which the user should be invited.\n * @param userId - The ID of the user that should be invited.\n * @param opts - Optional reason object. For backwards compatibility, a string is also accepted, and will be interpreted as a reason.\n *\n * @returns An empty object.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n invite(roomId, userId) {\n var _arguments10 = arguments,\n _this31 = this;\n return _asyncToGenerator(function* () {\n var _this31$getRoom$getHi, _this31$getRoom;\n var opts = _arguments10.length > 2 && _arguments10[2] !== undefined ? _arguments10[2] : {};\n if (typeof opts != \"object\") {\n opts = {\n reason: opts\n };\n }\n var historyVisibility = (_this31$getRoom$getHi = (_this31$getRoom = _this31.getRoom(roomId)) === null || _this31$getRoom === void 0 ? void 0 : _this31$getRoom.getHistoryVisibility()) !== null && _this31$getRoom$getHi !== void 0 ? _this31$getRoom$getHi : HistoryVisibility.Shared;\n // We should only share room history if the *current* visibility allows it.\n if ([HistoryVisibility.Invited, HistoryVisibility.Joined].includes(historyVisibility)) {\n _this31.logger.debug(\"Not sharing message history as the room history visibility is currently unshared\");\n } else {\n var _this31$cryptoBackend;\n yield (_this31$cryptoBackend = _this31.cryptoBackend) === null || _this31$cryptoBackend === void 0 ? void 0 : _this31$cryptoBackend.shareRoomHistoryWithUser(roomId, userId);\n }\n return yield _this31.membershipChange(roomId, userId, KnownMembership.Invite, opts.reason);\n })();\n }\n\n /**\n * Invite a user to a room based on their email address.\n * @param roomId - The room to invite the user to.\n * @param email - The email address to invite.\n * @returns Promise which resolves: `{}` an empty object.\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n inviteByEmail(roomId, email) {\n return this.inviteByThreePid(roomId, \"email\", email);\n }\n\n /**\n * Invite a user to a room based on a third-party identifier.\n * @param roomId - The room to invite the user to.\n * @param medium - The medium to invite the user e.g. \"email\".\n * @param address - The address for the specified medium.\n * @returns Promise which resolves: `{}` an empty object.\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n inviteByThreePid(roomId, medium, address) {\n var _this32 = this;\n return _asyncToGenerator(function* () {\n var _this32$identityServe;\n var path = utils.encodeUri(\"/rooms/$roomId/invite\", {\n $roomId: roomId\n });\n var identityServerUrl = _this32.getIdentityServerUrl(true);\n if (!identityServerUrl) {\n return Promise.reject(new MatrixError({\n error: \"No supplied identity server URL\",\n errcode: \"ORG.MATRIX.JSSDK_MISSING_PARAM\"\n }));\n }\n var params = {\n id_server: identityServerUrl,\n medium: medium,\n address: address\n };\n if ((_this32$identityServe = _this32.identityServer) !== null && _this32$identityServe !== void 0 && _this32$identityServe.getAccessToken) {\n var identityAccessToken = yield _this32.identityServer.getAccessToken();\n if (identityAccessToken) {\n params[\"id_access_token\"] = identityAccessToken;\n }\n }\n return _this32.http.authedRequest(Method.Post, path, undefined, params);\n })();\n }\n\n /**\n * @returns Promise which resolves: `{}` an empty object.\n * @returns Rejects: with an error response.\n */\n leave(roomId) {\n return this.membershipChange(roomId, undefined, KnownMembership.Leave);\n }\n\n /**\n * Leaves all rooms in the chain of room upgrades based on the given room. By\n * default, this will leave all the previous and upgraded rooms, including the\n * given room. To only leave the given room and any previous rooms, keeping the\n * upgraded (modern) rooms untouched supply `false` to `includeFuture`.\n * @param roomId - The room ID to start leaving at\n * @param includeFuture - If true, the whole chain (past and future) of\n * upgraded rooms will be left.\n * @returns Promise which resolves when completed with an object keyed\n * by room ID and value of the error encountered when leaving or null.\n */\n leaveRoomChain(roomId) {\n var includeFuture = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var upgradeHistory = this.getRoomUpgradeHistory(roomId, true);\n var eligibleToLeave = upgradeHistory;\n if (!includeFuture) {\n eligibleToLeave = [];\n for (var _room3 of upgradeHistory) {\n eligibleToLeave.push(_room3);\n if (_room3.roomId === roomId) {\n break;\n }\n }\n }\n var populationResults = {};\n var promises = [];\n var doLeave = roomId => {\n return this.leave(roomId).then(() => {\n delete populationResults[roomId];\n }).catch(err => {\n // suppress error\n populationResults[roomId] = err;\n });\n };\n for (var _room4 of eligibleToLeave) {\n promises.push(doLeave(_room4.roomId));\n }\n return Promise.all(promises).then(() => populationResults);\n }\n\n /**\n * @param reason - Optional.\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n */\n ban(roomId, userId, reason) {\n return this.membershipChange(roomId, userId, KnownMembership.Ban, reason);\n }\n\n /**\n * @param deleteRoom - True to delete the room from the store on success.\n * Default: true.\n * @returns Promise which resolves: `{}` an empty object.\n * @returns Rejects: with an error response.\n */\n forget(roomId) {\n var _arguments11 = arguments,\n _this33 = this;\n return _asyncToGenerator(function* () {\n var deleteRoom = _arguments11.length > 1 && _arguments11[1] !== undefined ? _arguments11[1] : true;\n // API returns an empty object\n var path = utils.encodeUri(\"/rooms/$room_id/forget\", {\n $room_id: roomId\n });\n var response = yield _this33.http.authedRequest(Method.Post, path);\n if (deleteRoom) {\n _this33.store.removeRoom(roomId);\n _this33.emit(ClientEvent.DeleteRoom, roomId);\n }\n return response;\n })();\n }\n\n /**\n * @returns Promise which resolves: Object (currently empty)\n * @returns Rejects: with an error response.\n */\n unban(roomId, userId) {\n // unbanning != set their state to leave: this used to be\n // the case, but was then changed so that leaving was always\n // a revoking of privilege, otherwise two people racing to\n // kick / ban someone could end up banning and then un-banning\n // them.\n var path = utils.encodeUri(\"/rooms/$roomId/unban\", {\n $roomId: roomId\n });\n var data = {\n user_id: userId\n };\n return this.http.authedRequest(Method.Post, path, undefined, data);\n }\n\n /**\n * @param reason - Optional.\n * @returns Promise which resolves: `{}` an empty object.\n * @returns Rejects: with an error response.\n */\n kick(roomId, userId, reason) {\n var path = utils.encodeUri(\"/rooms/$roomId/kick\", {\n $roomId: roomId\n });\n var data = {\n user_id: userId,\n reason: reason\n };\n return this.http.authedRequest(Method.Post, path, undefined, data);\n }\n membershipChange(roomId, userId, membership, reason) {\n // API returns an empty object\n var path = utils.encodeUri(\"/rooms/$room_id/$membership\", {\n $room_id: roomId,\n $membership: membership\n });\n return this.http.authedRequest(Method.Post, path, undefined, {\n user_id: userId,\n // may be undefined e.g. on leave\n reason: reason\n });\n }\n\n /**\n * Obtain a dict of actions which should be performed for this event according\n * to the push rules for this user. Caches the dict on the event.\n * @param event - The event to get push actions for.\n * @param forceRecalculate - forces to recalculate actions for an event\n * Useful when an event just got decrypted\n * @returns A dict of actions to perform.\n */\n getPushActionsForEvent(event) {\n var forceRecalculate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!event.getPushActions() || forceRecalculate) {\n var _this$pushProcessor$a = this.pushProcessor.actionsAndRuleForEvent(event),\n actions = _this$pushProcessor$a.actions,\n rule = _this$pushProcessor$a.rule;\n event.setPushDetails(actions, rule);\n }\n return event.getPushActions();\n }\n\n /**\n * Obtain a dict of actions which should be performed for this event according\n * to the push rules for this user. Caches the dict on the event.\n * @param event - The event to get push actions for.\n * @param forceRecalculate - forces to recalculate actions for an event\n * Useful when an event just got decrypted\n * @returns A dict of actions to perform.\n */\n getPushDetailsForEvent(event) {\n var forceRecalculate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!event.getPushDetails() || forceRecalculate) {\n var _this$pushProcessor$a2 = this.pushProcessor.actionsAndRuleForEvent(event),\n actions = _this$pushProcessor$a2.actions,\n rule = _this$pushProcessor$a2.rule;\n event.setPushDetails(actions, rule);\n }\n return event.getPushDetails();\n }\n\n /**\n * @param info - The kind of info to set (e.g. 'avatar_url')\n * @param data - The JSON object to set.\n * @returns\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n // eslint-disable-next-line camelcase\n\n setProfileInfo(info, data) {\n var path = utils.encodeUri(\"/profile/$userId/$info\", {\n $userId: this.credentials.userId,\n $info: info\n });\n return this.http.authedRequest(Method.Put, path, undefined, data);\n }\n\n /**\n * @returns Promise which resolves: `{}` an empty object.\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n setDisplayName(name) {\n var _this34 = this;\n return _asyncToGenerator(function* () {\n var prom = yield _this34.setProfileInfo(\"displayname\", {\n displayname: name\n });\n // XXX: synthesise a profile update for ourselves because Synapse is broken and won't\n var user = _this34.getUser(_this34.getUserId());\n if (user) {\n user.displayName = name;\n user.emit(UserEvent.DisplayName, user.events.presence, user);\n }\n return prom;\n })();\n }\n\n /**\n * @returns Promise which resolves: `{}` an empty object.\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n setAvatarUrl(url) {\n var _this35 = this;\n return _asyncToGenerator(function* () {\n var prom = yield _this35.setProfileInfo(\"avatar_url\", {\n avatar_url: url\n });\n // XXX: synthesise a profile update for ourselves because Synapse is broken and won't\n var user = _this35.getUser(_this35.getUserId());\n if (user) {\n user.avatarUrl = url;\n user.emit(UserEvent.AvatarUrl, user.events.presence, user);\n }\n return prom;\n })();\n }\n\n /**\n * Turn an MXC URL into an HTTP one. <strong>This method is experimental and\n * may change.</strong>\n * @param mxcUrl - The MXC URL\n * @param width - The desired width of the thumbnail.\n * @param height - The desired height of the thumbnail.\n * @param resizeMethod - The thumbnail resize method to use, either\n * \"crop\" or \"scale\".\n * @param allowDirectLinks - If true, return any non-mxc URLs\n * directly. Fetching such URLs will leak information about the user to\n * anyone they share a room with. If false, will return null for such URLs.\n * @param allowRedirects - If true, the caller supports the URL being 307 or\n * 308 redirected to another resource upon request. If false, redirects\n * are not expected. Implied `true` when `useAuthentication` is `true`.\n * @param useAuthentication - If true, the caller supports authenticated\n * media and wants an authentication-required URL. Note that server support\n * for authenticated media will *not* be checked - it is the caller's responsibility\n * to do so before calling this function. Note also that `useAuthentication`\n * implies `allowRedirects`. Defaults to false (unauthenticated endpoints).\n * @returns the avatar URL or null.\n */\n mxcUrlToHttp(mxcUrl, width, height, resizeMethod, allowDirectLinks, allowRedirects, useAuthentication) {\n return getHttpUriForMxc(this.baseUrl, mxcUrl, width, height, resizeMethod, allowDirectLinks, allowRedirects, useAuthentication);\n }\n\n /**\n * Specify the set_presence value to be used for subsequent calls to the Sync API.\n * This has an advantage over calls to the PUT /presence API in that it\n * doesn't clobber status_msg set by other devices.\n * @param presence - the presence to specify to set_presence of sync calls\n */\n setSyncPresence(presence) {\n var _this36 = this;\n return _asyncToGenerator(function* () {\n var _this36$syncApi;\n (_this36$syncApi = _this36.syncApi) === null || _this36$syncApi === void 0 || _this36$syncApi.setPresence(presence);\n })();\n }\n\n /**\n * @param opts - Options to apply\n * @returns Promise which resolves\n * @returns Rejects: with an error response.\n * @throws If 'presence' isn't a valid presence enum value.\n */\n setPresence(opts) {\n var _this37 = this;\n return _asyncToGenerator(function* () {\n var path = utils.encodeUri(\"/presence/$userId/status\", {\n $userId: _this37.credentials.userId\n });\n var validStates = [\"offline\", \"online\", \"unavailable\"];\n if (validStates.indexOf(opts.presence) === -1) {\n throw new Error(\"Bad presence value: \" + opts.presence);\n }\n yield _this37.http.authedRequest(Method.Put, path, undefined, opts);\n })();\n }\n\n /**\n * @param userId - The user to get presence for\n * @returns Promise which resolves: The presence state for this user.\n * @returns Rejects: with an error response.\n */\n getPresence(userId) {\n var path = utils.encodeUri(\"/presence/$userId/status\", {\n $userId: userId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Retrieve older messages from the given room and put them in the timeline.\n *\n * If this is called multiple times whilst a request is ongoing, the <i>same</i>\n * Promise will be returned. If there was a problem requesting scrollback, there\n * will be a small delay before another request can be made (to prevent tight-looping\n * when there is no connection).\n *\n * @param room - The room to get older messages in.\n * @param limit - Optional. The maximum number of previous events to\n * pull in. Default: 30.\n * @returns Promise which resolves: Room. If you are at the beginning\n * of the timeline, `Room.oldState.paginationToken` will be\n * `null`.\n * @returns Rejects: with an error response.\n */\n scrollback(room) {\n var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 30;\n var timeToWaitMs = 0;\n var info = this.ongoingScrollbacks[room.roomId] || {};\n if (info.promise) {\n return info.promise;\n } else if (info.errorTs) {\n var timeWaitedMs = Date.now() - info.errorTs;\n timeToWaitMs = Math.max(SCROLLBACK_DELAY_MS - timeWaitedMs, 0);\n }\n if (room.oldState.paginationToken === null) {\n return Promise.resolve(room); // already at the start.\n }\n // attempt to grab more events from the store first\n var numAdded = this.store.scrollback(room, limit).length;\n if (numAdded === limit) {\n // store contained everything we needed.\n return Promise.resolve(room);\n }\n // reduce the required number of events appropriately\n limit = limit - numAdded;\n var promise = new Promise((resolve, reject) => {\n // wait for a time before doing this request\n // (which may be 0 in order not to special case the code paths)\n sleep(timeToWaitMs).then(() => {\n return this.createMessagesRequest(room.roomId, room.oldState.paginationToken, limit, Direction.Backward);\n }).then(res => {\n var _res$end, _res$end2;\n var matrixEvents = res.chunk.map(this.getEventMapper());\n if (res.state) {\n var stateEvents = res.state.map(this.getEventMapper());\n room.currentState.setUnknownStateEvents(stateEvents);\n }\n var _room$partitionThread = room.partitionThreadedEvents(matrixEvents),\n _room$partitionThread2 = _slicedToArray(_room$partitionThread, 3),\n timelineEvents = _room$partitionThread2[0],\n threadedEvents = _room$partitionThread2[1],\n unknownRelations = _room$partitionThread2[2];\n this.processAggregatedTimelineEvents(room, timelineEvents);\n room.addEventsToTimeline(timelineEvents, true, true, room.getLiveTimeline());\n this.processThreadEvents(room, threadedEvents, true);\n unknownRelations.forEach(event => room.relations.aggregateChildEvent(event));\n room.oldState.paginationToken = (_res$end = res.end) !== null && _res$end !== void 0 ? _res$end : null;\n if (res.chunk.length === 0) {\n room.oldState.paginationToken = null;\n }\n this.store.storeEvents(room, matrixEvents, (_res$end2 = res.end) !== null && _res$end2 !== void 0 ? _res$end2 : null, true);\n delete this.ongoingScrollbacks[room.roomId];\n resolve(room);\n }).catch(err => {\n this.ongoingScrollbacks[room.roomId] = {\n errorTs: Date.now()\n };\n reject(err);\n });\n });\n info = {\n promise\n };\n this.ongoingScrollbacks[room.roomId] = info;\n return promise;\n }\n getEventMapper(options) {\n return eventMapperFor(this, options || {});\n }\n\n /**\n * Calls the `/context` API for the given room ID & event ID.\n * Returns the response, with `event` asserted and all optional arrays defaulted to an empty array.\n * @param roomId - the room ID to request a context for\n * @param eventId - the event ID to request a context for\n * @throws if `event` in the response is missing\n * @private\n */\n getEventContext(roomId, eventId) {\n var _this38 = this;\n return _asyncToGenerator(function* () {\n var _this38$clientOpts;\n var path = utils.encodeUri(\"/rooms/$roomId/context/$eventId\", {\n $roomId: roomId,\n $eventId: eventId\n });\n var params = {\n limit: \"0\"\n };\n if ((_this38$clientOpts = _this38.clientOpts) !== null && _this38$clientOpts !== void 0 && _this38$clientOpts.lazyLoadMembers) {\n params.filter = JSON.stringify(Filter.LAZY_LOADING_MESSAGES_FILTER);\n }\n\n // TODO: we should implement a backoff (as per scrollback()) to deal more nicely with HTTP errors.\n var res = yield _this38.http.authedRequest(Method.Get, path, params);\n if (res.event) {\n var _res$events_after, _res$events_before, _res$state;\n return {\n start: res.start,\n end: res.end,\n event: res.event,\n events_after: (_res$events_after = res.events_after) !== null && _res$events_after !== void 0 ? _res$events_after : [],\n events_before: (_res$events_before = res.events_before) !== null && _res$events_before !== void 0 ? _res$events_before : [],\n state: (_res$state = res.state) !== null && _res$state !== void 0 ? _res$state : []\n };\n }\n throw new Error(\"'event' not in '/context' result - homeserver too old?\");\n })();\n }\n\n /**\n * Get an EventTimeline for the given event\n *\n * <p>If the EventTimelineSet object already has the given event in its store, the\n * corresponding timeline will be returned. Otherwise, a /context request is\n * made, and used to construct an EventTimeline.\n * If the event does not belong to this EventTimelineSet then undefined will be returned.\n *\n * @param timelineSet - The timelineSet to look for the event in, must be bound to a room\n * @param eventId - The ID of the event to look for\n *\n * @returns Promise which resolves:\n * {@link EventTimeline} including the given event\n */\n getEventTimeline(timelineSet, eventId) {\n var _this39 = this;\n return _asyncToGenerator(function* () {\n var _ref4, _timelineSet$getTimel, _timelineSet$room$fin;\n // don't allow any timeline support unless it's been enabled.\n if (!_this39.timelineSupport) {\n throw new Error(\"timeline support is disabled. Set the 'timelineSupport'\" + \" parameter to true when creating MatrixClient to enable it.\");\n }\n if (!(timelineSet !== null && timelineSet !== void 0 && timelineSet.room)) {\n throw new Error(\"getEventTimeline only supports room timelines\");\n }\n if (timelineSet.getTimelineForEvent(eventId)) {\n return timelineSet.getTimelineForEvent(eventId);\n }\n if (timelineSet.thread && _this39.supportsThreads()) {\n var _yield$_this39$getThr;\n return (_yield$_this39$getThr = yield _this39.getThreadTimeline(timelineSet, eventId)) !== null && _yield$_this39$getThr !== void 0 ? _yield$_this39$getThr : null;\n }\n var res = yield _this39.getEventContext(timelineSet.room.roomId, eventId);\n\n // by the time the request completes, the event might have ended up in the timeline.\n if (timelineSet.getTimelineForEvent(eventId)) {\n return timelineSet.getTimelineForEvent(eventId);\n }\n var mapper = _this39.getEventMapper();\n var event = mapper(res.event);\n if (event.isRelation(THREAD_RELATION_TYPE.name)) {\n _this39.logger.warn(\"Tried loading a regular timeline at the position of a thread event\");\n return null;\n }\n var events = [\n // Order events from most recent to oldest (reverse-chronological).\n // We start with the last event, since that's the point at which we have known state.\n // events_after is already backwards; events_before is forwards.\n ...res.events_after.reverse().map(mapper), event, ...res.events_before.map(mapper)];\n\n // Here we handle non-thread timelines only, but still process any thread events to populate thread summaries.\n var timeline = timelineSet.getTimelineForEvent(events[0].getId());\n if (timeline) {\n timeline.getState(EventTimeline.BACKWARDS).setUnknownStateEvents(res.state.map(mapper));\n } else {\n var _res$end3;\n timeline = timelineSet.addTimeline();\n timeline.initialiseState(res.state.map(mapper));\n timeline.getState(EventTimeline.FORWARDS).paginationToken = (_res$end3 = res.end) !== null && _res$end3 !== void 0 ? _res$end3 : null;\n }\n var _timelineSet$room$par = timelineSet.room.partitionThreadedEvents(events),\n _timelineSet$room$par2 = _slicedToArray(_timelineSet$room$par, 3),\n timelineEvents = _timelineSet$room$par2[0],\n threadedEvents = _timelineSet$room$par2[1],\n unknownRelations = _timelineSet$room$par2[2];\n timelineSet.addEventsToTimeline(timelineEvents, true, false, timeline, res.start);\n // The target event is not in a thread but process the contextual events, so we can show any threads around it.\n _this39.processThreadEvents(timelineSet.room, threadedEvents, true);\n _this39.processAggregatedTimelineEvents(timelineSet.room, timelineEvents);\n unknownRelations.forEach(event => timelineSet.relations.aggregateChildEvent(event));\n\n // There is no guarantee that the event ended up in \"timeline\" (we might have switched to a neighbouring\n // timeline) - so check the room's index again. On the other hand, there's no guarantee the event ended up\n // anywhere, if it was later redacted, so we just return the timeline we first thought of.\n return (_ref4 = (_timelineSet$getTimel = timelineSet.getTimelineForEvent(eventId)) !== null && _timelineSet$getTimel !== void 0 ? _timelineSet$getTimel : (_timelineSet$room$fin = timelineSet.room.findThreadForEvent(event)) === null || _timelineSet$room$fin === void 0 ? void 0 : _timelineSet$room$fin.liveTimeline) !== null && _ref4 !== void 0 ? _ref4 :\n // for Threads degraded support\n timeline;\n })();\n }\n getThreadTimeline(timelineSet, eventId) {\n var _this40 = this;\n return _asyncToGenerator(function* () {\n if (!_this40.supportsThreads()) {\n throw new Error(\"could not get thread timeline: no client support\");\n }\n if (!timelineSet.room) {\n throw new Error(\"could not get thread timeline: not a room timeline\");\n }\n if (!timelineSet.thread) {\n throw new Error(\"could not get thread timeline: not a thread timeline\");\n }\n var res = yield _this40.getEventContext(timelineSet.room.roomId, eventId);\n var mapper = _this40.getEventMapper();\n var event = mapper(res.event);\n if (!timelineSet.canContain(event)) {\n return undefined;\n }\n var recurse = _this40.canSupport.get(Feature.RelationsRecursion) !== ServerSupport.Unsupported;\n if (Thread.hasServerSideSupport) {\n if (Thread.hasServerSideFwdPaginationSupport) {\n var _resOlder$next_batch, _resNewer$next_batch, _timelineSet$getTimel2;\n if (!timelineSet.thread) {\n throw new Error(\"could not get thread timeline: not a thread timeline\");\n }\n var thread = timelineSet.thread;\n var resOlder = yield _this40.fetchRelations(timelineSet.room.roomId, thread.id, null, null, {\n dir: Direction.Backward,\n from: res.start,\n recurse: recurse || undefined\n });\n var resNewer = yield _this40.fetchRelations(timelineSet.room.roomId, thread.id, null, null, {\n dir: Direction.Forward,\n from: res.end,\n recurse: recurse || undefined\n });\n var events = [\n // Order events from most recent to oldest (reverse-chronological).\n // We start with the last event, since that's the point at which we have known state.\n // events_after is already backwards; events_before is forwards.\n ...resNewer.chunk.reverse().filter(getRelationsThreadFilter(thread.id)).map(mapper), event, ...resOlder.chunk.filter(getRelationsThreadFilter(thread.id)).map(mapper)];\n for (var _event2 of events) {\n var _timelineSet$thread;\n yield (_timelineSet$thread = timelineSet.thread) === null || _timelineSet$thread === void 0 ? void 0 : _timelineSet$thread.processEvent(_event2);\n }\n\n // Here we handle non-thread timelines only, but still process any thread events to populate thread summaries.\n var timeline = timelineSet.getTimelineForEvent(event.getId());\n if (timeline) {\n timeline.getState(EventTimeline.BACKWARDS).setUnknownStateEvents(res.state.map(mapper));\n } else {\n timeline = timelineSet.addTimeline();\n timeline.initialiseState(res.state.map(mapper));\n }\n timelineSet.addEventsToTimeline(events, true, false, timeline, resNewer.next_batch);\n if (!resOlder.next_batch) {\n var originalEvent = yield _this40.fetchRoomEvent(timelineSet.room.roomId, thread.id);\n timelineSet.addEventsToTimeline([mapper(originalEvent)], true, false, timeline, null);\n }\n timeline.setPaginationToken((_resOlder$next_batch = resOlder.next_batch) !== null && _resOlder$next_batch !== void 0 ? _resOlder$next_batch : null, Direction.Backward);\n timeline.setPaginationToken((_resNewer$next_batch = resNewer.next_batch) !== null && _resNewer$next_batch !== void 0 ? _resNewer$next_batch : null, Direction.Forward);\n _this40.processAggregatedTimelineEvents(timelineSet.room, events);\n\n // There is no guarantee that the event ended up in \"timeline\" (we might have switched to a neighbouring\n // timeline) - so check the room's index again. On the other hand, there's no guarantee the event ended up\n // anywhere, if it was later redacted, so we just return the timeline we first thought of.\n return (_timelineSet$getTimel2 = timelineSet.getTimelineForEvent(eventId)) !== null && _timelineSet$getTimel2 !== void 0 ? _timelineSet$getTimel2 : timeline;\n } else {\n var _resOlder$next_batch2;\n // Where the event is a thread reply (not a root) and running in MSC-enabled mode the Thread timeline only\n // functions contiguously, so we have to jump through some hoops to get our target event in it.\n // XXX: workaround for https://github.com/vector-im/element-meta/issues/150\n\n var _thread = timelineSet.thread;\n var _resOlder = yield _this40.fetchRelations(timelineSet.room.roomId, _thread.id, THREAD_RELATION_TYPE.name, null, {\n dir: Direction.Backward,\n from: res.start,\n recurse: recurse || undefined\n });\n var eventsNewer = [];\n var nextBatch = res.end;\n while (nextBatch) {\n var _resNewer = yield _this40.fetchRelations(timelineSet.room.roomId, _thread.id, THREAD_RELATION_TYPE.name, null, {\n dir: Direction.Forward,\n from: nextBatch,\n recurse: recurse || undefined\n });\n nextBatch = _resNewer.next_batch;\n eventsNewer.push(..._resNewer.chunk);\n }\n var _events = [\n // Order events from most recent to oldest (reverse-chronological).\n // We start with the last event, since that's the point at which we have known state.\n // events_after is already backwards; events_before is forwards.\n ...eventsNewer.reverse().map(mapper), event, ..._resOlder.chunk.map(mapper)];\n for (var _event3 of _events) {\n var _timelineSet$thread2;\n yield (_timelineSet$thread2 = timelineSet.thread) === null || _timelineSet$thread2 === void 0 ? void 0 : _timelineSet$thread2.processEvent(_event3);\n }\n\n // Here we handle non-thread timelines only, but still process any thread events to populate thread\n // summaries.\n var _timeline = timelineSet.getLiveTimeline();\n _timeline.getState(EventTimeline.BACKWARDS).setUnknownStateEvents(res.state.map(mapper));\n timelineSet.addEventsToTimeline(_events, true, false, _timeline, null);\n if (!_resOlder.next_batch) {\n var _originalEvent = yield _this40.fetchRoomEvent(timelineSet.room.roomId, _thread.id);\n timelineSet.addEventsToTimeline([mapper(_originalEvent)], true, false, _timeline, null);\n }\n _timeline.setPaginationToken((_resOlder$next_batch2 = _resOlder.next_batch) !== null && _resOlder$next_batch2 !== void 0 ? _resOlder$next_batch2 : null, Direction.Backward);\n _timeline.setPaginationToken(null, Direction.Forward);\n _this40.processAggregatedTimelineEvents(timelineSet.room, _events);\n return _timeline;\n }\n }\n })();\n }\n\n /**\n * Get an EventTimeline for the latest events in the room. This will just\n * call `/messages` to get the latest message in the room, then use\n * `client.getEventTimeline(...)` to construct a new timeline from it.\n *\n * @param timelineSet - The timelineSet to find or add the timeline to\n *\n * @returns Promise which resolves:\n * {@link EventTimeline} timeline with the latest events in the room\n */\n getLatestTimeline(timelineSet) {\n var _this41 = this;\n return _asyncToGenerator(function* () {\n // don't allow any timeline support unless it's been enabled.\n if (!_this41.timelineSupport) {\n throw new Error(\"timeline support is disabled. Set the 'timelineSupport'\" + \" parameter to true when creating MatrixClient to enable it.\");\n }\n if (!timelineSet.room) {\n throw new Error(\"getLatestTimeline only supports room timelines\");\n }\n var event;\n if (timelineSet.threadListType !== null) {\n var _res$chunk;\n var res = yield _this41.createThreadListMessagesRequest(timelineSet.room.roomId, null, 1, Direction.Backward, timelineSet.threadListType, timelineSet.getFilter());\n event = (_res$chunk = res.chunk) === null || _res$chunk === void 0 ? void 0 : _res$chunk[0];\n } else if (timelineSet.thread && Thread.hasServerSideSupport) {\n var _res$chunk2;\n var recurse = _this41.canSupport.get(Feature.RelationsRecursion) !== ServerSupport.Unsupported;\n var _res = yield _this41.fetchRelations(timelineSet.room.roomId, timelineSet.thread.id, THREAD_RELATION_TYPE.name, null, {\n dir: Direction.Backward,\n limit: 1,\n recurse: recurse || undefined\n });\n event = (_res$chunk2 = _res.chunk) === null || _res$chunk2 === void 0 ? void 0 : _res$chunk2[0];\n } else {\n var _this41$clientOpts, _res2$chunk;\n var messagesPath = utils.encodeUri(\"/rooms/$roomId/messages\", {\n $roomId: timelineSet.room.roomId\n });\n var _params = {\n dir: \"b\"\n };\n if ((_this41$clientOpts = _this41.clientOpts) !== null && _this41$clientOpts !== void 0 && _this41$clientOpts.lazyLoadMembers) {\n _params.filter = JSON.stringify(Filter.LAZY_LOADING_MESSAGES_FILTER);\n }\n var _res2 = yield _this41.http.authedRequest(Method.Get, messagesPath, _params);\n event = (_res2$chunk = _res2.chunk) === null || _res2$chunk === void 0 ? void 0 : _res2$chunk[0];\n }\n if (!event) {\n throw new Error(\"No message returned when trying to construct getLatestTimeline\");\n }\n return _this41.getEventTimeline(timelineSet, event.event_id);\n })();\n }\n\n /**\n * Makes a request to /messages with the appropriate lazy loading filter set.\n * XXX: if we do get rid of scrollback (as it's not used at the moment),\n * we could inline this method again in paginateEventTimeline as that would\n * then be the only call-site\n * @param limit - the maximum amount of events the retrieve\n * @param dir - 'f' or 'b'\n * @param timelineFilter - the timeline filter to pass\n */\n // XXX: Intended private, used in code.\n createMessagesRequest(roomId, fromToken) {\n var _this$clientOpts;\n var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;\n var dir = arguments.length > 3 ? arguments[3] : undefined;\n var timelineFilter = arguments.length > 4 ? arguments[4] : undefined;\n var path = utils.encodeUri(\"/rooms/$roomId/messages\", {\n $roomId: roomId\n });\n var params = {\n limit: limit.toString(),\n dir: dir\n };\n if (fromToken) {\n params.from = fromToken;\n }\n var filter = null;\n if ((_this$clientOpts = this.clientOpts) !== null && _this$clientOpts !== void 0 && _this$clientOpts.lazyLoadMembers) {\n // create a shallow copy of LAZY_LOADING_MESSAGES_FILTER,\n // so the timelineFilter doesn't get written into it below\n filter = Object.assign({}, Filter.LAZY_LOADING_MESSAGES_FILTER);\n }\n if (timelineFilter) {\n var _timelineFilter$getRo;\n // XXX: it's horrific that /messages' filter parameter doesn't match\n // /sync's one - see https://matrix.org/jira/browse/SPEC-451\n filter = filter || {};\n Object.assign(filter, (_timelineFilter$getRo = timelineFilter.getRoomTimelineFilterComponent()) === null || _timelineFilter$getRo === void 0 ? void 0 : _timelineFilter$getRo.toJSON());\n }\n if (filter) {\n params.filter = JSON.stringify(filter);\n }\n return this.http.authedRequest(Method.Get, path, params);\n }\n\n /**\n * Makes a request to /messages with the appropriate lazy loading filter set.\n * XXX: if we do get rid of scrollback (as it's not used at the moment),\n * we could inline this method again in paginateEventTimeline as that would\n * then be the only call-site\n * @param limit - the maximum amount of events the retrieve\n * @param dir - 'f' or 'b'\n * @param timelineFilter - the timeline filter to pass\n */\n // XXX: Intended private, used by room.fetchRoomThreads\n createThreadListMessagesRequest(roomId, fromToken) {\n var _this$clientOpts2;\n var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;\n var dir = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Direction.Backward;\n var threadListType = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ThreadFilterType.All;\n var timelineFilter = arguments.length > 5 ? arguments[5] : undefined;\n var path = utils.encodeUri(\"/rooms/$roomId/threads\", {\n $roomId: roomId\n });\n var params = {\n limit: limit.toString(),\n dir: dir,\n include: threadFilterTypeToFilter(threadListType)\n };\n if (fromToken) {\n params.from = fromToken;\n }\n var filter = {};\n if ((_this$clientOpts2 = this.clientOpts) !== null && _this$clientOpts2 !== void 0 && _this$clientOpts2.lazyLoadMembers) {\n // create a shallow copy of LAZY_LOADING_MESSAGES_FILTER,\n // so the timelineFilter doesn't get written into it below\n filter = _objectSpread({}, Filter.LAZY_LOADING_MESSAGES_FILTER);\n }\n if (timelineFilter) {\n var _timelineFilter$getRo2;\n // XXX: it's horrific that /messages' filter parameter doesn't match\n // /sync's one - see https://matrix.org/jira/browse/SPEC-451\n filter = _objectSpread(_objectSpread({}, filter), (_timelineFilter$getRo2 = timelineFilter.getRoomTimelineFilterComponent()) === null || _timelineFilter$getRo2 === void 0 ? void 0 : _timelineFilter$getRo2.toJSON());\n }\n if (Object.keys(filter).length) {\n params.filter = JSON.stringify(filter);\n }\n var opts = {\n prefix: Thread.hasServerSideListSupport === FeatureSupport.Stable ? ClientPrefix.V1 : \"/_matrix/client/unstable/org.matrix.msc3856\"\n };\n return this.http.authedRequest(Method.Get, path, params, undefined, opts).then(res => {\n var _res$chunk3;\n return _objectSpread(_objectSpread({}, res), {}, {\n chunk: (_res$chunk3 = res.chunk) === null || _res$chunk3 === void 0 ? void 0 : _res$chunk3.reverse(),\n start: res.prev_batch,\n end: res.next_batch\n });\n });\n }\n\n /**\n * Take an EventTimeline, and back/forward-fill results.\n *\n * @param eventTimeline - timeline object to be updated\n *\n * @returns Promise which resolves to a boolean: false if there are no\n * events and we reached either end of the timeline; else true.\n */\n paginateEventTimeline(eventTimeline, opts) {\n var _this42 = this;\n var isNotifTimeline = eventTimeline.getTimelineSet() === this.notifTimelineSet;\n var room = this.getRoom(eventTimeline.getRoomId());\n var threadListType = eventTimeline.getTimelineSet().threadListType;\n var thread = eventTimeline.getTimelineSet().thread;\n\n // TODO: we should implement a backoff (as per scrollback()) to deal more\n // nicely with HTTP errors.\n opts = opts || {};\n var backwards = opts.backwards || false;\n if (isNotifTimeline) {\n if (!backwards) {\n throw new Error(\"paginateNotifTimeline can only paginate backwards\");\n }\n }\n var dir = backwards ? EventTimeline.BACKWARDS : EventTimeline.FORWARDS;\n var token = eventTimeline.getPaginationToken(dir);\n var pendingRequest = eventTimeline.paginationRequests[dir];\n if (pendingRequest) {\n // already a request in progress - return the existing promise\n return pendingRequest;\n }\n var path;\n var params;\n var promise;\n if (isNotifTimeline) {\n var _opts$limit;\n path = \"/notifications\";\n params = {\n limit: ((_opts$limit = opts.limit) !== null && _opts$limit !== void 0 ? _opts$limit : 30).toString(),\n only: \"highlight\"\n };\n if (token && token !== \"end\") {\n params.from = token;\n }\n promise = this.http.authedRequest(Method.Get, path, params).then(/*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(function* (res) {\n var token = res.next_token;\n var matrixEvents = [];\n res.notifications = res.notifications.filter(noUnsafeEventProps);\n for (var i = 0; i < res.notifications.length; i++) {\n var notification = res.notifications[i];\n var _event4 = _this42.getEventMapper()(notification.event);\n\n // @TODO(kerrya) reprocessing every notification is ugly\n // remove if we get server MSC3994 support\n _this42.getPushDetailsForEvent(_event4, true);\n _event4.event.room_id = notification.room_id; // XXX: gutwrenching\n matrixEvents[i] = _event4;\n }\n\n // No need to partition events for threads here, everything lives\n // in the notification timeline set\n var timelineSet = eventTimeline.getTimelineSet();\n timelineSet.addEventsToTimeline(matrixEvents, backwards, false, eventTimeline, token);\n _this42.processAggregatedTimelineEvents(timelineSet.room, matrixEvents);\n\n // if we've hit the end of the timeline, we need to stop trying to\n // paginate. We need to keep the 'forwards' token though, to make sure\n // we can recover from gappy syncs.\n if (backwards && !res.next_token) {\n eventTimeline.setPaginationToken(null, dir);\n }\n return Boolean(res.next_token);\n });\n return function (_x2) {\n return _ref5.apply(this, arguments);\n };\n }()).finally(() => {\n eventTimeline.paginationRequests[dir] = null;\n });\n eventTimeline.paginationRequests[dir] = promise;\n } else if (threadListType !== null) {\n if (!room) {\n throw new Error(\"Unknown room \" + eventTimeline.getRoomId());\n }\n if (!Thread.hasServerSideFwdPaginationSupport && dir === Direction.Forward) {\n throw new Error(\"Cannot paginate threads forwards without server-side support for MSC 3715\");\n }\n promise = this.createThreadListMessagesRequest(eventTimeline.getRoomId(), token, opts.limit, dir, threadListType, eventTimeline.getFilter()).then(res => {\n if (res.state) {\n var roomState = eventTimeline.getState(dir);\n var stateEvents = res.state.filter(noUnsafeEventProps).map(this.getEventMapper());\n roomState.setUnknownStateEvents(stateEvents);\n }\n var token = res.end;\n var matrixEvents = res.chunk.filter(noUnsafeEventProps).map(this.getEventMapper());\n var timelineSet = eventTimeline.getTimelineSet();\n timelineSet.addEventsToTimeline(matrixEvents, backwards, false, eventTimeline, token);\n this.processAggregatedTimelineEvents(room, matrixEvents);\n this.processThreadRoots(room, matrixEvents, backwards);\n\n // if we've hit the end of the timeline, we need to stop trying to\n // paginate. We need to keep the 'forwards' token though, to make sure\n // we can recover from gappy syncs.\n if (backwards && res.end == res.start) {\n eventTimeline.setPaginationToken(null, dir);\n }\n return res.end !== res.start;\n }).finally(() => {\n eventTimeline.paginationRequests[dir] = null;\n });\n eventTimeline.paginationRequests[dir] = promise;\n } else if (thread) {\n var _eventTimeline$getRoo, _eventTimeline$getRoo2;\n var _room5 = this.getRoom((_eventTimeline$getRoo = eventTimeline.getRoomId()) !== null && _eventTimeline$getRoo !== void 0 ? _eventTimeline$getRoo : undefined);\n if (!_room5) {\n throw new Error(\"Unknown room \" + eventTimeline.getRoomId());\n }\n var recurse = this.canSupport.get(Feature.RelationsRecursion) !== ServerSupport.Unsupported;\n promise = this.fetchRelations((_eventTimeline$getRoo2 = eventTimeline.getRoomId()) !== null && _eventTimeline$getRoo2 !== void 0 ? _eventTimeline$getRoo2 : \"\", thread.id, null, null, {\n dir,\n limit: opts.limit,\n from: token !== null && token !== void 0 ? token : undefined,\n recurse: recurse || undefined\n }).then(/*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(function* (res) {\n var mapper = _this42.getEventMapper();\n var matrixEvents = res.chunk.filter(noUnsafeEventProps).filter(getRelationsThreadFilter(thread.id)).map(mapper);\n\n // Process latest events first\n for (var _event5 of matrixEvents.slice().reverse()) {\n yield thread === null || thread === void 0 ? void 0 : thread.processEvent(_event5);\n var sender = _event5.getSender();\n if (!backwards || (thread === null || thread === void 0 ? void 0 : thread.getEventReadUpTo(sender)) === null) {\n _room5.addLocalEchoReceipt(sender, _event5, ReceiptType.Read);\n }\n }\n var newToken = res.next_batch;\n var timelineSet = eventTimeline.getTimelineSet();\n timelineSet.addEventsToTimeline(matrixEvents, backwards, false, eventTimeline, newToken !== null && newToken !== void 0 ? newToken : null);\n if (!newToken && backwards) {\n var _thread$rootEvent, _eventTimeline$getRoo3;\n var originalEvent = (_thread$rootEvent = thread.rootEvent) !== null && _thread$rootEvent !== void 0 ? _thread$rootEvent : mapper(yield _this42.fetchRoomEvent((_eventTimeline$getRoo3 = eventTimeline.getRoomId()) !== null && _eventTimeline$getRoo3 !== void 0 ? _eventTimeline$getRoo3 : \"\", thread.id));\n timelineSet.addEventsToTimeline([originalEvent], true, false, eventTimeline, null);\n }\n _this42.processAggregatedTimelineEvents(timelineSet.room, matrixEvents);\n\n // if we've hit the end of the timeline, we need to stop trying to\n // paginate. We need to keep the 'forwards' token though, to make sure\n // we can recover from gappy syncs.\n if (backwards && !newToken) {\n eventTimeline.setPaginationToken(null, dir);\n }\n return Boolean(newToken);\n });\n return function (_x3) {\n return _ref6.apply(this, arguments);\n };\n }()).finally(() => {\n eventTimeline.paginationRequests[dir] = null;\n });\n eventTimeline.paginationRequests[dir] = promise;\n } else {\n if (!room) {\n throw new Error(\"Unknown room \" + eventTimeline.getRoomId());\n }\n promise = this.createMessagesRequest(eventTimeline.getRoomId(), token, opts.limit, dir, eventTimeline.getFilter()).then(res => {\n if (res.state) {\n var roomState = eventTimeline.getState(dir);\n var stateEvents = res.state.filter(noUnsafeEventProps).map(this.getEventMapper());\n roomState.setUnknownStateEvents(stateEvents);\n }\n var token = res.end;\n var matrixEvents = res.chunk.filter(noUnsafeEventProps).map(this.getEventMapper());\n var timelineSet = eventTimeline.getTimelineSet();\n var _room$partitionThread3 = room.partitionThreadedEvents(matrixEvents),\n _room$partitionThread4 = _slicedToArray(_room$partitionThread3, 3),\n timelineEvents = _room$partitionThread4[0],\n unknownRelations = _room$partitionThread4[2];\n timelineSet.addEventsToTimeline(timelineEvents, backwards, false, eventTimeline, token);\n this.processAggregatedTimelineEvents(room, timelineEvents);\n this.processThreadRoots(room, timelineEvents.filter(it => it.getServerAggregatedRelation(THREAD_RELATION_TYPE.name)), false);\n unknownRelations.forEach(event => room.relations.aggregateChildEvent(event));\n var atEnd = res.end === undefined || res.end === res.start;\n\n // if we've hit the end of the timeline, we need to stop trying to\n // paginate. We need to keep the 'forwards' token though, to make sure\n // we can recover from gappy syncs.\n if (backwards && atEnd) {\n eventTimeline.setPaginationToken(null, dir);\n }\n return !atEnd;\n }).finally(() => {\n eventTimeline.paginationRequests[dir] = null;\n });\n eventTimeline.paginationRequests[dir] = promise;\n }\n return promise;\n }\n\n /**\n * Reset the notifTimelineSet entirely, paginating in some historical notifs as\n * a starting point for subsequent pagination.\n */\n resetNotifTimelineSet() {\n if (!this.notifTimelineSet) {\n return;\n }\n\n // FIXME: This thing is a total hack, and results in duplicate events being\n // added to the timeline both from /sync and /notifications, and lots of\n // slow and wasteful processing and pagination. The correct solution is to\n // extend /messages or /search or something to filter on notifications.\n\n // use the fictitious token 'end'. in practice we would ideally give it\n // the oldest backwards pagination token from /sync, but /sync doesn't\n // know about /notifications, so we have no choice but to start paginating\n // from the current point in time. This may well overlap with historical\n // notifs which are then inserted into the timeline by /sync responses.\n this.notifTimelineSet.resetLiveTimeline(\"end\");\n\n // we could try to paginate a single event at this point in order to get\n // a more valid pagination token, but it just ends up with an out of order\n // timeline. given what a mess this is and given we're going to have duplicate\n // events anyway, just leave it with the dummy token for now.\n /*\n this.paginateNotifTimeline(this._notifTimelineSet.getLiveTimeline(), {\n backwards: true,\n limit: 1\n });\n */\n }\n\n /**\n * Peek into a room and receive updates about the room. This only works if the\n * history visibility for the room is world_readable.\n * @param roomId - The room to attempt to peek into.\n * @param limit - The number of timeline events to initially retrieve.\n * @returns Promise which resolves: Room object\n * @returns Rejects: with an error response.\n */\n peekInRoom(roomId) {\n var _this$peekSync2;\n var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n (_this$peekSync2 = this.peekSync) === null || _this$peekSync2 === void 0 || _this$peekSync2.stopPeeking();\n this.peekSync = new SyncApi(this, this.clientOpts, this.buildSyncApiOptions());\n return this.peekSync.peek(roomId, limit);\n }\n\n /**\n * Stop any ongoing room peeking.\n */\n stopPeeking() {\n if (this.peekSync) {\n this.peekSync.stopPeeking();\n this.peekSync = null;\n }\n }\n\n /**\n * Set r/w flags for guest access in a room.\n * @param roomId - The room to configure guest access in.\n * @param opts - Options\n * @returns Promise which resolves\n * @returns Rejects: with an error response.\n */\n setGuestAccess(roomId, opts) {\n var writePromise = this.sendStateEvent(roomId, EventType.RoomGuestAccess, {\n guest_access: opts.allowJoin ? GuestAccess.CanJoin : GuestAccess.Forbidden\n }, \"\");\n var readPromise = Promise.resolve();\n if (opts.allowRead) {\n readPromise = this.sendStateEvent(roomId, EventType.RoomHistoryVisibility, {\n history_visibility: HistoryVisibility.WorldReadable\n }, \"\");\n }\n return Promise.all([readPromise, writePromise]).then(); // .then() to hide results for contract\n }\n\n /**\n * Requests an email verification token for the purposes of registration.\n * This API requests a token from the homeserver.\n * The doesServerRequireIdServerParam() method can be used to determine if\n * the server requires the id_server parameter to be provided.\n *\n * Parameters and return value are as for requestEmailToken\n * @param email - As requestEmailToken\n * @param clientSecret - As requestEmailToken\n * @param sendAttempt - As requestEmailToken\n * @param nextLink - As requestEmailToken\n * @returns Promise which resolves: As requestEmailToken\n */\n requestRegisterEmailToken(email, clientSecret, sendAttempt, nextLink) {\n return this.requestTokenFromEndpoint(\"/register/email/requestToken\", {\n email: email,\n client_secret: clientSecret,\n send_attempt: sendAttempt,\n next_link: nextLink\n });\n }\n\n /**\n * Requests a text message verification token for the purposes of registration.\n * This API requests a token from the homeserver.\n * The doesServerRequireIdServerParam() method can be used to determine if\n * the server requires the id_server parameter to be provided.\n *\n * @param phoneCountry - The ISO 3166-1 alpha-2 code for the country in which\n * phoneNumber should be parsed relative to.\n * @param phoneNumber - The phone number, in national or international format\n * @param clientSecret - As requestEmailToken\n * @param sendAttempt - As requestEmailToken\n * @param nextLink - As requestEmailToken\n * @returns Promise which resolves: As requestEmailToken\n */\n requestRegisterMsisdnToken(phoneCountry, phoneNumber, clientSecret, sendAttempt, nextLink) {\n return this.requestTokenFromEndpoint(\"/register/msisdn/requestToken\", {\n country: phoneCountry,\n phone_number: phoneNumber,\n client_secret: clientSecret,\n send_attempt: sendAttempt,\n next_link: nextLink\n });\n }\n\n /**\n * Requests an email verification token for the purposes of adding a\n * third party identifier to an account.\n * This API requests a token from the homeserver.\n * The doesServerRequireIdServerParam() method can be used to determine if\n * the server requires the id_server parameter to be provided.\n * If an account with the given email address already exists and is\n * associated with an account other than the one the user is authed as,\n * it will either send an email to the address informing them of this\n * or return M_THREEPID_IN_USE (which one is up to the homeserver).\n *\n * @param email - As requestEmailToken\n * @param clientSecret - As requestEmailToken\n * @param sendAttempt - As requestEmailToken\n * @param nextLink - As requestEmailToken\n * @returns Promise which resolves: As requestEmailToken\n */\n requestAdd3pidEmailToken(email, clientSecret, sendAttempt, nextLink) {\n return this.requestTokenFromEndpoint(\"/account/3pid/email/requestToken\", {\n email: email,\n client_secret: clientSecret,\n send_attempt: sendAttempt,\n next_link: nextLink\n });\n }\n\n /**\n * Requests a text message verification token for the purposes of adding a\n * third party identifier to an account.\n * This API proxies the identity server /validate/email/requestToken API,\n * adding specific behaviour for the addition of phone numbers to an\n * account, as requestAdd3pidEmailToken.\n *\n * @param phoneCountry - As requestRegisterMsisdnToken\n * @param phoneNumber - As requestRegisterMsisdnToken\n * @param clientSecret - As requestEmailToken\n * @param sendAttempt - As requestEmailToken\n * @param nextLink - As requestEmailToken\n * @returns Promise which resolves: As requestEmailToken\n */\n requestAdd3pidMsisdnToken(phoneCountry, phoneNumber, clientSecret, sendAttempt, nextLink) {\n return this.requestTokenFromEndpoint(\"/account/3pid/msisdn/requestToken\", {\n country: phoneCountry,\n phone_number: phoneNumber,\n client_secret: clientSecret,\n send_attempt: sendAttempt,\n next_link: nextLink\n });\n }\n\n /**\n * Requests an email verification token for the purposes of resetting\n * the password on an account.\n * This API proxies the identity server /validate/email/requestToken API,\n * adding specific behaviour for the password resetting. Specifically,\n * if no account with the given email address exists, it may either\n * return M_THREEPID_NOT_FOUND or send an email\n * to the address informing them of this (which one is up to the homeserver).\n *\n * requestEmailToken calls the equivalent API directly on the identity server,\n * therefore bypassing the password reset specific logic.\n *\n * @param email - As requestEmailToken\n * @param clientSecret - As requestEmailToken\n * @param sendAttempt - As requestEmailToken\n * @param nextLink - As requestEmailToken\n * @returns Promise which resolves: As requestEmailToken\n */\n requestPasswordEmailToken(email, clientSecret, sendAttempt, nextLink) {\n return this.requestTokenFromEndpoint(\"/account/password/email/requestToken\", {\n email: email,\n client_secret: clientSecret,\n send_attempt: sendAttempt,\n next_link: nextLink\n });\n }\n\n /**\n * Requests a text message verification token for the purposes of resetting\n * the password on an account.\n * This API proxies the identity server /validate/email/requestToken API,\n * adding specific behaviour for the password resetting, as requestPasswordEmailToken.\n *\n * @param phoneCountry - As requestRegisterMsisdnToken\n * @param phoneNumber - As requestRegisterMsisdnToken\n * @param clientSecret - As requestEmailToken\n * @param sendAttempt - As requestEmailToken\n * @param nextLink - As requestEmailToken\n * @returns Promise which resolves: As requestEmailToken\n */\n requestPasswordMsisdnToken(phoneCountry, phoneNumber, clientSecret, sendAttempt, nextLink) {\n return this.requestTokenFromEndpoint(\"/account/password/msisdn/requestToken\", {\n country: phoneCountry,\n phone_number: phoneNumber,\n client_secret: clientSecret,\n send_attempt: sendAttempt,\n next_link: nextLink\n });\n }\n\n /**\n * Internal utility function for requesting validation tokens from usage-specific\n * requestToken endpoints.\n *\n * @param endpoint - The endpoint to send the request to\n * @param params - Parameters for the POST request\n * @returns Promise which resolves: As requestEmailToken\n */\n requestTokenFromEndpoint(endpoint, params) {\n var _this43 = this;\n return _asyncToGenerator(function* () {\n var postParams = Object.assign({}, params);\n return _this43.http.request(Method.Post, endpoint, undefined, postParams);\n })();\n }\n\n /**\n * Get the room-kind push rule associated with a room.\n * @param scope - \"global\" or device-specific.\n * @param roomId - the id of the room.\n * @returns the rule or undefined.\n */\n getRoomPushRule(scope, roomId) {\n // There can be only room-kind push rule per room\n // and its id is the room id.\n if (this.pushRules) {\n var _this$pushRules$scope;\n return (_this$pushRules$scope = this.pushRules[scope]) === null || _this$pushRules$scope === void 0 || (_this$pushRules$scope = _this$pushRules$scope.room) === null || _this$pushRules$scope === void 0 ? void 0 : _this$pushRules$scope.find(rule => rule.rule_id === roomId);\n } else {\n throw new Error(\"SyncApi.sync() must be done before accessing to push rules.\");\n }\n }\n\n /**\n * Set a room-kind muting push rule in a room.\n * The operation also updates MatrixClient.pushRules at the end.\n * @param scope - \"global\" or device-specific.\n * @param roomId - the id of the room.\n * @param mute - the mute state.\n * @returns Promise which resolves: result object\n * @returns Rejects: with an error response.\n */\n setRoomMutePushRule(scope, roomId, mute) {\n var promise;\n var hasDontNotifyRule = false;\n\n // Get the existing room-kind push rule if any\n var roomPushRule = this.getRoomPushRule(scope, roomId);\n if (roomPushRule !== null && roomPushRule !== void 0 && roomPushRule.actions.includes(PushRuleActionName.DontNotify)) {\n hasDontNotifyRule = true;\n }\n if (!mute) {\n // Remove the rule only if it is a muting rule\n if (hasDontNotifyRule) {\n promise = this.deletePushRule(scope, PushRuleKind.RoomSpecific, roomPushRule.rule_id);\n }\n } else {\n if (!roomPushRule) {\n promise = this.addPushRule(scope, PushRuleKind.RoomSpecific, roomId, {\n actions: [PushRuleActionName.DontNotify]\n });\n } else if (!hasDontNotifyRule) {\n // Remove the existing one before setting the mute push rule\n // This is a workaround to SYN-590 (Push rule update fails)\n var doneResolvers = Promise.withResolvers();\n this.deletePushRule(scope, PushRuleKind.RoomSpecific, roomPushRule.rule_id).then(() => {\n this.addPushRule(scope, PushRuleKind.RoomSpecific, roomId, {\n actions: [PushRuleActionName.DontNotify]\n }).then(() => {\n doneResolvers.resolve();\n }).catch(err => {\n doneResolvers.reject(err);\n });\n }).catch(err => {\n doneResolvers.reject(err);\n });\n promise = doneResolvers.promise;\n }\n }\n if (promise) {\n return new Promise((resolve, reject) => {\n // Update this.pushRules when the operation completes\n promise.then(() => {\n this.getPushRules().then(result => {\n this.pushRules = result;\n resolve();\n }).catch(err => {\n reject(err);\n });\n }).catch(err => {\n // Update it even if the previous operation fails. This can help the\n // app to recover when push settings has been modified from another client\n this.getPushRules().then(result => {\n this.pushRules = result;\n reject(err);\n }).catch(err2 => {\n reject(err);\n });\n });\n });\n }\n }\n searchMessageText(opts) {\n var roomEvents = {\n search_term: opts.query\n };\n if (\"keys\" in opts) {\n roomEvents.keys = opts.keys;\n }\n return this.search({\n body: {\n search_categories: {\n room_events: roomEvents\n }\n }\n });\n }\n\n /**\n * Perform a server-side search for room events.\n *\n * The returned promise resolves to an object containing the fields:\n *\n * * count: estimate of the number of results\n * * next_batch: token for back-pagination; if undefined, there are no more results\n * * highlights: a list of words to highlight from the stemming algorithm\n * * results: a list of results\n *\n * Each entry in the results list is a SearchResult.\n *\n * @returns Promise which resolves: result object\n * @returns Rejects: with an error response.\n */\n searchRoomEvents(opts) {\n // TODO: support search groups\n\n var body = {\n search_categories: {\n room_events: {\n search_term: opts.term,\n filter: opts.filter,\n order_by: SearchOrderBy.Recent,\n event_context: {\n before_limit: 1,\n after_limit: 1,\n include_profile: true\n }\n }\n }\n };\n var searchResults = {\n _query: body,\n results: [],\n highlights: []\n };\n return this.search({\n body: body\n }).then(res => this.processRoomEventsSearch(searchResults, res));\n }\n\n /**\n * Take a result from an earlier searchRoomEvents call, and backfill results.\n *\n * @param searchResults - the results object to be updated\n * @returns Promise which resolves: updated result object\n * @returns Rejects: with an error response.\n */\n backPaginateRoomEventsSearch(searchResults) {\n // TODO: we should implement a backoff (as per scrollback()) to deal more\n // nicely with HTTP errors.\n\n if (!searchResults.next_batch) {\n return Promise.reject(new Error(\"Cannot backpaginate event search any further\"));\n }\n if (searchResults.pendingRequest) {\n // already a request in progress - return the existing promise\n return searchResults.pendingRequest;\n }\n var searchOpts = {\n body: searchResults._query,\n next_batch: searchResults.next_batch\n };\n var promise = this.search(searchOpts, searchResults.abortSignal).then(res => this.processRoomEventsSearch(searchResults, res)).finally(() => {\n searchResults.pendingRequest = undefined;\n });\n searchResults.pendingRequest = promise;\n return promise;\n }\n\n /**\n * helper for searchRoomEvents and backPaginateRoomEventsSearch. Processes the\n * response from the API call and updates the searchResults\n *\n * @returns searchResults\n * @internal\n */\n // XXX: Intended private, used in code\n processRoomEventsSearch(searchResults, response) {\n var _roomEvents$results$l, _roomEvents$results;\n var roomEvents = response.search_categories.room_events;\n searchResults.count = roomEvents.count;\n searchResults.next_batch = roomEvents.next_batch;\n\n // combine the highlight list with our existing list;\n var highlights = new Set(roomEvents.highlights);\n searchResults.highlights.forEach(hl => {\n highlights.add(hl);\n });\n\n // turn it back into a list.\n searchResults.highlights = Array.from(highlights);\n var mapper = this.getEventMapper();\n\n // append the new results to our existing results\n var resultsLength = (_roomEvents$results$l = (_roomEvents$results = roomEvents.results) === null || _roomEvents$results === void 0 ? void 0 : _roomEvents$results.length) !== null && _roomEvents$results$l !== void 0 ? _roomEvents$results$l : 0;\n for (var i = 0; i < resultsLength; i++) {\n var sr = SearchResult.fromJson(roomEvents.results[i], mapper);\n var _room6 = this.getRoom(sr.context.getEvent().getRoomId());\n if (_room6) {\n for (var ev of sr.context.getTimeline()) {\n ev.setMetadata(_room6.currentState, false);\n }\n }\n searchResults.results.push(sr);\n }\n return searchResults;\n }\n\n /**\n * Populate the store with rooms the user has left.\n * @returns Promise which resolves: TODO - Resolved when the rooms have\n * been added to the data store.\n * @returns Rejects: with an error response.\n */\n syncLeftRooms() {\n // Guard against multiple calls whilst ongoing and multiple calls post success\n if (this.syncedLeftRooms) {\n return Promise.resolve([]); // don't call syncRooms again if it succeeded.\n }\n if (this.syncLeftRoomsPromise) {\n return this.syncLeftRoomsPromise; // return the ongoing request\n }\n var syncApi = new SyncApi(this, this.clientOpts, this.buildSyncApiOptions());\n this.syncLeftRoomsPromise = syncApi.syncLeftRooms();\n\n // cleanup locks\n this.syncLeftRoomsPromise.then(() => {\n this.logger.debug(\"Marking success of sync left room request\");\n this.syncedLeftRooms = true; // flip the bit on success\n }).finally(() => {\n this.syncLeftRoomsPromise = undefined; // cleanup ongoing request state\n });\n return this.syncLeftRoomsPromise;\n }\n\n /**\n * Create a new filter.\n * @param content - The HTTP body for the request\n * @returns Promise which resolves to a Filter object.\n * @returns Rejects: with an error response.\n */\n createFilter(content) {\n var path = utils.encodeUri(\"/user/$userId/filter\", {\n $userId: this.credentials.userId\n });\n return this.http.authedRequest(Method.Post, path, undefined, content).then(response => {\n // persist the filter\n var filter = Filter.fromJson(this.credentials.userId, response.filter_id, content);\n this.store.storeFilter(filter);\n return filter;\n });\n }\n\n /**\n * Retrieve a filter.\n * @param userId - The user ID of the filter owner\n * @param filterId - The filter ID to retrieve\n * @param allowCached - True to allow cached filters to be returned.\n * Default: True.\n * @returns Promise which resolves: a Filter object\n * @returns Rejects: with an error response.\n */\n getFilter(userId, filterId, allowCached) {\n if (allowCached) {\n var filter = this.store.getFilter(userId, filterId);\n if (filter) {\n return Promise.resolve(filter);\n }\n }\n var path = utils.encodeUri(\"/user/$userId/filter/$filterId\", {\n $userId: userId,\n $filterId: filterId\n });\n return this.http.authedRequest(Method.Get, path).then(response => {\n // persist the filter\n var filter = Filter.fromJson(userId, filterId, response);\n this.store.storeFilter(filter);\n return filter;\n });\n }\n\n /**\n * @returns Filter ID\n */\n getOrCreateFilter(filterName, filter) {\n var _this44 = this;\n return _asyncToGenerator(function* () {\n var filterId = _this44.store.getFilterIdByName(filterName);\n var existingId;\n if (filterId) {\n // check that the existing filter matches our expectations\n try {\n var existingFilter = yield _this44.getFilter(_this44.credentials.userId, filterId, true);\n if (existingFilter) {\n var oldDef = existingFilter.getDefinition();\n var newDef = filter.getDefinition();\n if (utils.deepCompare(oldDef, newDef)) {\n // super, just use that.\n // debuglog(\"Using existing filter ID %s: %s\", filterId,\n // JSON.stringify(oldDef));\n existingId = filterId;\n }\n }\n } catch (error) {\n // Synapse currently returns the following when the filter cannot be found:\n // {\n // errcode: \"M_UNKNOWN\",\n // name: \"M_UNKNOWN\",\n // message: \"No row found\",\n // }\n if (error.errcode !== \"M_UNKNOWN\" && error.errcode !== \"M_NOT_FOUND\") {\n throw error;\n }\n }\n // if the filter doesn't exist anymore on the server, remove from store\n if (!existingId) {\n _this44.store.setFilterIdByName(filterName, undefined);\n }\n }\n if (existingId) {\n return existingId;\n }\n\n // create a new filter\n var createdFilter = yield _this44.createFilter(filter.getDefinition());\n _this44.store.setFilterIdByName(filterName, createdFilter.filterId);\n return createdFilter.filterId;\n })();\n }\n\n /**\n * Gets a bearer token from the homeserver that the user can\n * present to a third party in order to prove their ownership\n * of the Matrix account they are logged into.\n * @returns Promise which resolves: Token object\n * @returns Rejects: with an error response.\n */\n getOpenIdToken() {\n var path = utils.encodeUri(\"/user/$userId/openid/request_token\", {\n $userId: this.credentials.userId\n });\n return this.http.authedRequest(Method.Post, path, undefined, {});\n }\n /**\n * @returns Promise which resolves: ITurnServerResponse object\n * @returns Rejects: with an error response.\n */\n turnServer() {\n return this.http.authedRequest(Method.Get, \"/voip/turnServer\");\n }\n\n /**\n * Get the TURN servers for this homeserver.\n * @returns The servers or an empty list.\n */\n getTurnServers() {\n return this.turnServers || [];\n }\n\n /**\n * Get the unix timestamp (in milliseconds) at which the current\n * TURN credentials (from getTurnServers) expire\n * @returns The expiry timestamp in milliseconds\n */\n getTurnServersExpiry() {\n return this.turnServersExpiry;\n }\n get pollingTurnServers() {\n return this.checkTurnServersIntervalID !== undefined;\n }\n\n // XXX: Intended private, used in code.\n checkTurnServers() {\n var _this45 = this;\n return _asyncToGenerator(function* () {\n if (!_this45.supportsVoip()) {\n return;\n }\n var credentialsGood = false;\n var remainingTime = _this45.turnServersExpiry - Date.now();\n if (remainingTime > TURN_CHECK_INTERVAL) {\n _this45.logger.debug(\"TURN creds are valid for another \" + remainingTime + \" ms: not fetching new ones.\");\n credentialsGood = true;\n } else {\n _this45.logger.debug(\"Fetching new TURN credentials\");\n try {\n var res = yield _this45.turnServer();\n if (res.uris) {\n _this45.logger.debug(\"Got TURN URIs: \" + res.uris + \" refresh in \" + res.ttl + \" secs\");\n // map the response to a format that can be fed to RTCPeerConnection\n var servers = {\n urls: res.uris,\n username: res.username,\n credential: res.password\n };\n _this45.turnServers = [servers];\n // The TTL is in seconds but we work in ms\n _this45.turnServersExpiry = Date.now() + res.ttl * 1000;\n credentialsGood = true;\n _this45.emit(ClientEvent.TurnServers, _this45.turnServers);\n }\n } catch (err) {\n _this45.logger.error(\"Failed to get TURN URIs\", err);\n if (err.httpStatus === 403) {\n // We got a 403, so there's no point in looping forever.\n _this45.logger.info(\"TURN access unavailable for this account: stopping credentials checks\");\n if (_this45.checkTurnServersIntervalID !== null) {\n globalThis.clearInterval(_this45.checkTurnServersIntervalID);\n }\n _this45.checkTurnServersIntervalID = undefined;\n _this45.emit(ClientEvent.TurnServersError, err, true); // fatal\n } else {\n // otherwise, if we failed for whatever reason, try again the next time we're called.\n _this45.emit(ClientEvent.TurnServersError, err, false); // non-fatal\n }\n }\n }\n return credentialsGood;\n })();\n }\n\n /**\n * Set whether to allow a fallback ICE server should be used for negotiating a\n * WebRTC connection if the homeserver doesn't provide any servers. Defaults to\n * false.\n *\n */\n setFallbackICEServerAllowed(allow) {\n this.fallbackICEServerAllowed = allow;\n }\n\n /**\n * Get whether to allow a fallback ICE server should be used for negotiating a\n * WebRTC connection if the homeserver doesn't provide any servers. Defaults to\n * false.\n *\n * @returns\n */\n isFallbackICEServerAllowed() {\n return this.fallbackICEServerAllowed;\n }\n\n /**\n * Determines if the current user is an administrator of the Synapse homeserver.\n * Returns false if untrue or the homeserver does not appear to be a Synapse\n * homeserver. <strong>This function is implementation specific and may change\n * as a result.</strong>\n * @returns true if the user appears to be a Synapse administrator.\n */\n isSynapseAdministrator() {\n var path = utils.encodeUri(\"/_synapse/admin/v1/users/$userId/admin\", {\n $userId: this.getUserId()\n });\n return this.http.authedRequest(Method.Get, path, undefined, undefined, {\n prefix: \"\"\n }).then(r => r.admin); // pull out the specific boolean we want\n }\n\n /**\n * Performs a whois lookup on a user using Synapse's administrator API.\n * <strong>This function is implementation specific and may change as a\n * result.</strong>\n * @param userId - the User ID to look up.\n * @returns the whois response - see Synapse docs for information.\n */\n whoisSynapseUser(userId) {\n var path = utils.encodeUri(\"/_synapse/admin/v1/whois/$userId\", {\n $userId: userId\n });\n return this.http.authedRequest(Method.Get, path, undefined, undefined, {\n prefix: \"\"\n });\n }\n\n /**\n * Deactivates a user using Synapse's administrator API. <strong>This\n * function is implementation specific and may change as a result.</strong>\n * @param userId - the User ID to deactivate.\n * @returns the deactivate response - see Synapse docs for information.\n */\n deactivateSynapseUser(userId) {\n var path = utils.encodeUri(\"/_synapse/admin/v1/deactivate/$userId\", {\n $userId: userId\n });\n return this.http.authedRequest(Method.Post, path, undefined, undefined, {\n prefix: \"\"\n });\n }\n fetchClientWellKnown() {\n var _this46 = this;\n return _asyncToGenerator(function* () {\n var _this46$getDomain;\n // `getRawClientConfig` does not throw or reject on network errors, instead\n // it absorbs errors and returns `{}`.\n _this46.clientWellKnownPromise = AutoDiscovery.getRawClientConfig((_this46$getDomain = _this46.getDomain()) !== null && _this46$getDomain !== void 0 ? _this46$getDomain : undefined);\n _this46.clientWellKnown = yield _this46.clientWellKnownPromise;\n _this46.emit(ClientEvent.ClientWellKnown, _this46.clientWellKnown);\n })();\n }\n getClientWellKnown() {\n return this.clientWellKnown;\n }\n waitForClientWellKnown() {\n if (!this.clientRunning) {\n throw new Error(\"Client is not running\");\n }\n return this.clientWellKnownPromise;\n }\n\n /**\n * store client options with boolean/string/numeric values\n * to know in the next session what flags the sync data was\n * created with (e.g. lazy loading)\n * @returns for store operation\n */\n storeClientOptions() {\n // XXX: Intended private, used in code\n var primTypes = [\"boolean\", \"string\", \"number\"];\n var serializableOpts = Object.entries(this.clientOpts).filter(_ref7 => {\n var _ref8 = _slicedToArray(_ref7, 2),\n key = _ref8[0],\n value = _ref8[1];\n return primTypes.includes(typeof value);\n }).reduce((obj, _ref9) => {\n var _ref0 = _slicedToArray(_ref9, 2),\n key = _ref0[0],\n value = _ref0[1];\n obj[key] = value;\n return obj;\n }, {});\n return this.store.storeClientOptions(serializableOpts);\n }\n\n /**\n * Gets a set of room IDs in common with another user.\n *\n * Note: This endpoint is unstable, and can throw an `Error`.\n * Check progress on [MSC2666](https://github.com/matrix-org/matrix-spec-proposals/pull/2666) for more details.\n *\n * @param userId - The userId to check.\n * @returns Promise which resolves to an array of rooms\n * @returns Rejects: with an error response.\n */\n // TODO: on spec release, rename this to getMutualRooms\n // eslint-disable-next-line\n _unstable_getSharedRooms(userId) {\n var _this47 = this;\n return _asyncToGenerator(function* () {\n // Initial variant of the MSC\n var sharedRoomsSupport = yield _this47.doesServerSupportUnstableFeature(UNSTABLE_MSC2666_SHARED_ROOMS);\n\n // Newer variant that renamed shared rooms to mutual rooms\n var mutualRoomsSupport = yield _this47.doesServerSupportUnstableFeature(UNSTABLE_MSC2666_MUTUAL_ROOMS);\n\n // Latest variant that changed from path elements to query elements\n var queryMutualRoomsSupport = yield _this47.doesServerSupportUnstableFeature(UNSTABLE_MSC2666_QUERY_MUTUAL_ROOMS);\n if (!sharedRoomsSupport && !mutualRoomsSupport && !queryMutualRoomsSupport) {\n throw Error(\"Server does not support the Mutual Rooms API\");\n }\n var path;\n var query;\n\n // Cascading unstable support switching.\n if (queryMutualRoomsSupport) {\n path = \"/uk.half-shot.msc2666/user/mutual_rooms\";\n query = {\n user_id: userId\n };\n } else {\n path = utils.encodeUri(\"/uk.half-shot.msc2666/user/\".concat(mutualRoomsSupport ? \"mutual_rooms\" : \"shared_rooms\", \"/$userId\"), {\n $userId: userId\n });\n query = {};\n }\n\n // Accumulated rooms\n var rooms = [];\n var token = null;\n do {\n var tokenQuery = {};\n if (token != null && queryMutualRoomsSupport) {\n tokenQuery[\"batch_token\"] = token;\n }\n var res = yield _this47.http.authedRequest(Method.Get, path, _objectSpread(_objectSpread({}, query), tokenQuery), undefined, {\n prefix: ClientPrefix.Unstable\n });\n rooms.push(...res.joined);\n if (res.next_batch_token !== undefined) {\n token = res.next_batch_token;\n } else {\n token = null;\n }\n } while (token != null);\n return rooms;\n })();\n }\n\n /**\n * Returns a set of configured RTC transports supported by the homeserver.\n * Requires homeserver support for MSC4143.\n * @throws A M_NOT_FOUND error if not supported by the homeserver.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_getRTCTransports() {\n var _this48 = this;\n return _asyncToGenerator(function* () {\n // There is no /versions endpoint to check for support, so we just have to attempt a request.\n return (yield _this48.http.authedRequest(Method.Get, \"/rtc/transports\", undefined, undefined, {\n prefix: \"\".concat(ClientPrefix.Unstable, \"/org.matrix.msc4143\")\n })).rtc_transports;\n })();\n }\n\n /**\n * Get the API versions supported by the server, along with any\n * unstable APIs it supports\n * @returns The server /versions response\n */\n getVersions() {\n var _this49 = this;\n return _asyncToGenerator(function* () {\n if (_this49.serverVersionsPromise) {\n return _this49.serverVersionsPromise;\n }\n\n // We send an authenticated request as of MSC4026\n _this49.serverVersionsPromise = _this49.http.authedRequest(Method.Get, \"/_matrix/client/versions\", undefined, undefined, {\n prefix: \"\"\n }).catch(e => {\n // Need to unset this if it fails, otherwise we'll never retry\n _this49.serverVersionsPromise = undefined;\n // but rethrow the exception to anything that was waiting\n throw e;\n });\n var serverVersions = yield _this49.serverVersionsPromise;\n _this49.canSupport = yield buildFeatureSupportMap(serverVersions);\n return _this49.serverVersionsPromise;\n })();\n }\n\n /**\n * Check if a particular spec version is supported by the server.\n * @param version - The spec version (such as \"r0.5.0\") to check for.\n * @returns Whether it is supported\n */\n isVersionSupported(version) {\n var _this50 = this;\n return _asyncToGenerator(function* () {\n var _yield$_this50$getVer = yield _this50.getVersions(),\n versions = _yield$_this50$getVer.versions;\n return versions && versions.includes(version);\n })();\n }\n\n /**\n * Query the server to see if it lists support for an unstable feature\n * in the /versions response\n * @param feature - the feature name\n * @returns true if the feature is supported\n */\n doesServerSupportUnstableFeature(feature) {\n var _this51 = this;\n return _asyncToGenerator(function* () {\n var response = yield _this51.getVersions();\n if (!response) return false;\n var unstableFeatures = response[\"unstable_features\"];\n return unstableFeatures && !!unstableFeatures[feature];\n })();\n }\n\n /**\n * Query the server to see if it is forcing encryption to be enabled for\n * a given room preset, based on the /versions response.\n * @param presetName - The name of the preset to check.\n * @returns true if the server is forcing encryption\n * for the preset.\n */\n doesServerForceEncryptionForPreset(presetName) {\n var _this52 = this;\n return _asyncToGenerator(function* () {\n var response = yield _this52.getVersions();\n if (!response) return false;\n var unstableFeatures = response[\"unstable_features\"];\n\n // The preset name in the versions response will be without the _chat suffix.\n var versionsPresetName = presetName.includes(\"_chat\") ? presetName.substring(0, presetName.indexOf(\"_chat\")) : presetName;\n return unstableFeatures && !!unstableFeatures[\"io.element.e2ee_forced.\".concat(versionsPresetName)];\n })();\n }\n doesServerSupportThread() {\n var _this53 = this;\n return _asyncToGenerator(function* () {\n if (yield _this53.isVersionSupported(\"v1.4\")) {\n return {\n threads: FeatureSupport.Stable,\n list: FeatureSupport.Stable,\n fwdPagination: FeatureSupport.Stable\n };\n }\n try {\n var _yield$Promise$all = yield Promise.all([_this53.doesServerSupportUnstableFeature(\"org.matrix.msc3440\"), _this53.doesServerSupportUnstableFeature(\"org.matrix.msc3440.stable\"), _this53.doesServerSupportUnstableFeature(\"org.matrix.msc3856\"), _this53.doesServerSupportUnstableFeature(\"org.matrix.msc3856.stable\"), _this53.doesServerSupportUnstableFeature(\"org.matrix.msc3715\"), _this53.doesServerSupportUnstableFeature(\"org.matrix.msc3715.stable\")]),\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 6),\n threadUnstable = _yield$Promise$all2[0],\n threadStable = _yield$Promise$all2[1],\n listUnstable = _yield$Promise$all2[2],\n listStable = _yield$Promise$all2[3],\n fwdPaginationUnstable = _yield$Promise$all2[4],\n fwdPaginationStable = _yield$Promise$all2[5];\n return {\n threads: determineFeatureSupport(threadStable, threadUnstable),\n list: determineFeatureSupport(listStable, listUnstable),\n fwdPagination: determineFeatureSupport(fwdPaginationStable, fwdPaginationUnstable)\n };\n } catch (_unused2) {\n return {\n threads: FeatureSupport.None,\n list: FeatureSupport.None,\n fwdPagination: FeatureSupport.None\n };\n }\n })();\n }\n\n /**\n * Get if lazy loading members is being used.\n * @returns Whether or not members are lazy loaded by this client\n */\n hasLazyLoadMembersEnabled() {\n var _this$clientOpts3;\n return !!((_this$clientOpts3 = this.clientOpts) !== null && _this$clientOpts3 !== void 0 && _this$clientOpts3.lazyLoadMembers);\n }\n\n /**\n * Set a function which is called when /sync returns a 'limited' response.\n * It is called with a room ID and returns a boolean. It should return 'true' if the SDK\n * can SAFELY remove events from this room. It may not be safe to remove events if there\n * are other references to the timelines for this room, e.g because the client is\n * actively viewing events in this room.\n * Default: returns false.\n * @param cb - The callback which will be invoked.\n */\n setCanResetTimelineCallback(cb) {\n this.canResetTimelineCallback = cb;\n }\n\n /**\n * Get the callback set via `setCanResetTimelineCallback`.\n * @returns The callback or null\n */\n getCanResetTimelineCallback() {\n return this.canResetTimelineCallback;\n }\n\n /**\n * Returns relations for a given event. Handles encryption transparently,\n * with the caveat that the amount of events returned might be 0, even though you get a nextBatch.\n * When the returned promise resolves, all messages should have finished trying to decrypt.\n * @param roomId - the room of the event\n * @param eventId - the id of the event\n * @param relationType - the rel_type of the relations requested\n * @param eventType - the event type of the relations requested\n * @param opts - options with optional values for the request.\n * @returns an object with `events` as `MatrixEvent[]` and optionally `nextBatch` if more relations are available.\n */\n relations(roomId, eventId, relationType, eventType) {\n var _arguments12 = arguments,\n _this54 = this;\n return _asyncToGenerator(function* () {\n var _result$next_batch, _result$prev_batch;\n var opts = _arguments12.length > 4 && _arguments12[4] !== undefined ? _arguments12[4] : {\n dir: Direction.Backward\n };\n var fetchedEventType = eventType ? _this54.getEncryptedIfNeededEventType(roomId, eventType) : null;\n var _yield$Promise$all3 = yield Promise.all([_this54.fetchRoomEvent(roomId, eventId), _this54.fetchRelations(roomId, eventId, relationType, fetchedEventType, opts)]),\n _yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 2),\n eventResult = _yield$Promise$all4[0],\n result = _yield$Promise$all4[1];\n var mapper = _this54.getEventMapper();\n var originalEvent = eventResult ? mapper(eventResult) : undefined;\n var events = result.chunk.map(mapper);\n if (fetchedEventType === EventType.RoomMessageEncrypted) {\n var allEvents = originalEvent ? events.concat(originalEvent) : events;\n yield Promise.all(allEvents.map(e => _this54.decryptEventIfNeeded(e)));\n if (eventType !== null) {\n events = events.filter(e => e.getType() === eventType);\n }\n }\n if (originalEvent && relationType === RelationType.Replace) {\n events = events.filter(e => e.getSender() === originalEvent.getSender());\n }\n return {\n originalEvent: originalEvent !== null && originalEvent !== void 0 ? originalEvent : null,\n events,\n nextBatch: (_result$next_batch = result.next_batch) !== null && _result$next_batch !== void 0 ? _result$next_batch : null,\n prevBatch: (_result$prev_batch = result.prev_batch) !== null && _result$prev_batch !== void 0 ? _result$prev_batch : null\n };\n })();\n }\n\n /**\n * Generates a random string suitable for use as a client secret. <strong>This\n * method is experimental and may change.</strong>\n * @returns A new client secret\n */\n generateClientSecret() {\n return secureRandomString(32);\n }\n\n /**\n * Attempts to decrypt an event\n * @param event - The event to decrypt\n * @returns A decryption promise\n */\n decryptEventIfNeeded(event, options) {\n if (event.isState() && !this.enableEncryptedStateEvents) {\n return Promise.resolve();\n }\n if (event.shouldAttemptDecryption() && this.getCrypto()) {\n event.attemptDecryption(this.cryptoBackend, options);\n }\n if (event.isBeingDecrypted()) {\n return event.getDecryptionPromise();\n } else {\n return Promise.resolve();\n }\n }\n termsUrlForService(serviceType, baseUrl) {\n switch (serviceType) {\n case SERVICE_TYPES.IS:\n return this.http.getUrl(\"/terms\", undefined, IdentityPrefix.V2, baseUrl);\n case SERVICE_TYPES.IM:\n return this.http.getUrl(\"/terms\", undefined, \"/_matrix/integrations/v1\", baseUrl);\n default:\n throw new Error(\"Unsupported service type\");\n }\n }\n\n /**\n * Get the Homeserver URL of this client\n * @returns Homeserver URL of this client\n */\n getHomeserverUrl() {\n return this.baseUrl;\n }\n\n /**\n * Get the identity server URL of this client\n * @param stripProto - whether or not to strip the protocol from the URL\n * @returns Identity server URL of this client\n */\n getIdentityServerUrl() {\n var _this$idBaseUrl, _this$idBaseUrl2;\n var stripProto = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (stripProto && ((_this$idBaseUrl = this.idBaseUrl) !== null && _this$idBaseUrl !== void 0 && _this$idBaseUrl.startsWith(\"http://\") || (_this$idBaseUrl2 = this.idBaseUrl) !== null && _this$idBaseUrl2 !== void 0 && _this$idBaseUrl2.startsWith(\"https://\"))) {\n return this.idBaseUrl.split(\"://\")[1];\n }\n return this.idBaseUrl;\n }\n\n /**\n * Set the identity server URL of this client\n * @param url - New identity server URL\n */\n setIdentityServerUrl(url) {\n this.idBaseUrl = utils.ensureNoTrailingSlash(url);\n this.http.setIdBaseUrl(this.idBaseUrl);\n }\n\n /**\n * Get the access token associated with this account.\n * @returns The access_token or null\n */\n getAccessToken() {\n return this.http.opts.accessToken || null;\n }\n\n /**\n * Get the refresh token associated with this account.\n * @returns The refresh_token or null\n */\n getRefreshToken() {\n var _this$http$opts$refre;\n return (_this$http$opts$refre = this.http.opts.refreshToken) !== null && _this$http$opts$refre !== void 0 ? _this$http$opts$refre : null;\n }\n\n /**\n * Set the access token associated with this account.\n * @param token - The new access token.\n */\n setAccessToken(token) {\n this.http.opts.accessToken = token;\n // The /versions response can vary for different users so clear the cache\n this.serverVersionsPromise = undefined;\n }\n\n /**\n * @returns true if there is a valid access_token for this client.\n */\n isLoggedIn() {\n return this.http.opts.accessToken !== undefined;\n }\n\n /**\n * Make up a new transaction id\n *\n * @returns a new, unique, transaction id\n */\n makeTxnId() {\n return \"m\" + new Date().getTime() + \".\" + this.txnCtr++;\n }\n\n /**\n * Check whether a username is available prior to registration. An error response\n * indicates an invalid/unavailable username.\n * @param username - The username to check the availability of.\n * @returns Promise which resolves: to boolean of whether the username is available.\n */\n isUsernameAvailable(username) {\n return this.http.authedRequest(Method.Get, \"/register/available\", {\n username\n }).then(response => {\n return response.available;\n }).catch(response => {\n if (response.errcode === \"M_USER_IN_USE\") {\n return false;\n }\n return Promise.reject(response);\n });\n }\n\n /**\n * @param bindThreepids - Set key 'email' to true to bind any email\n * threepid uses during registration in the identity server. Set 'msisdn' to\n * true to bind msisdn.\n * @returns Promise which resolves to a RegisterResponse object\n * @returns Rejects: with an error response.\n */\n register(username, password, sessionId, auth, bindThreepids, guestAccessToken, inhibitLogin) {\n if (sessionId) {\n auth.session = sessionId;\n }\n var params = {\n auth: auth,\n refresh_token: true // always ask for a refresh token - does nothing if unsupported\n };\n if (username !== undefined && username !== null) {\n params.username = username;\n }\n if (password !== undefined && password !== null) {\n params.password = password;\n }\n if (guestAccessToken !== undefined && guestAccessToken !== null) {\n params.guest_access_token = guestAccessToken;\n }\n if (inhibitLogin !== undefined && inhibitLogin !== null) {\n params.inhibit_login = inhibitLogin;\n }\n return this.registerRequest(params);\n }\n\n /**\n * Register a guest account.\n * This method returns the auth info needed to create a new authenticated client,\n * Remember to call `setGuest(true)` on the (guest-)authenticated client, e.g:\n * ```javascript\n * const tmpClient = await sdk.createClient(MATRIX_INSTANCE);\n * const { user_id, device_id, access_token } = tmpClient.registerGuest();\n * const client = createClient({\n * baseUrl: MATRIX_INSTANCE,\n * accessToken: access_token,\n * userId: user_id,\n * deviceId: device_id,\n * })\n * client.setGuest(true);\n * ```\n *\n * @param body - JSON HTTP body to provide.\n * @returns Promise which resolves: JSON object that contains:\n * `{ user_id, device_id, access_token, home_server }`\n * @returns Rejects: with an error response.\n */\n registerGuest() {\n var _ref1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n body = _ref1.body;\n return this.registerRequest(body || {}, \"guest\");\n }\n\n /**\n * @param data - parameters for registration request\n * @param kind - type of user to register. may be \"guest\"\n * @returns Promise which resolves: to the /register response\n * @returns Rejects: with an error response.\n */\n registerRequest(data, kind) {\n var params = {};\n if (kind) {\n params.kind = kind;\n }\n return this.http.request(Method.Post, \"/register\", params, data);\n }\n\n /**\n * Refreshes an access token using a provided refresh token. The refresh token\n * must be valid for the current access token known to the client instance.\n *\n * Note that this function will not cause a logout if the token is deemed\n * unknown by the server - the caller is responsible for managing logout\n * actions on error.\n * @param refreshToken - The refresh token.\n * @returns Promise which resolves to the new token.\n * @returns Rejects with an error response.\n */\n refreshToken(refreshToken) {\n var performRefreshRequestWithPrefix = prefix => this.http.authedRequest(Method.Post, \"/refresh\", undefined, {\n refresh_token: refreshToken\n }, {\n prefix,\n inhibitLogoutEmit: true // we don't want to cause logout loops\n });\n\n // First try with the (specced) /v3/ prefix.\n // However, before Synapse 1.72.0, Synapse incorrectly required a /v1/ prefix, so we fall\n // back to that if the request fails, for backwards compatibility.\n return performRefreshRequestWithPrefix(ClientPrefix.V3).catch(e => {\n if (e.errcode === \"M_UNRECOGNIZED\") {\n return performRefreshRequestWithPrefix(ClientPrefix.V1);\n }\n throw e;\n });\n }\n\n /**\n * @returns Promise which resolves to the available login flows\n * @returns Rejects: with an error response.\n */\n loginFlows() {\n return this.http.request(Method.Get, \"/login\");\n }\n\n /**\n * @returns Promise which resolves to a LoginResponse object\n * @returns Rejects: with an error response.\n *\n * @deprecated This method has unintuitive behaviour: it updates the `MatrixClient` instance with *some* of the\n * returned credentials. Instead, call {@link loginRequest} and create a new `MatrixClient` instance using the\n * results. See https://github.com/matrix-org/matrix-js-sdk/issues/4502.\n */\n login(loginType, data) {\n return this.loginRequest(_objectSpread(_objectSpread({}, data), {}, {\n type: loginType\n })).then(response => {\n if (response.access_token && response.user_id) {\n this.http.opts.accessToken = response.access_token;\n this.credentials = {\n userId: response.user_id\n };\n }\n return response;\n });\n }\n\n /**\n * @returns Promise which resolves to a LoginResponse object\n * @returns Rejects: with an error response.\n *\n * @deprecated This method has unintuitive behaviour: it updates the `MatrixClient` instance with *some* of the\n * returned credentials. Instead, call {@link loginRequest} with `data.type: \"m.login.password\"`, and create a new\n * `MatrixClient` instance using the results. See https://github.com/matrix-org/matrix-js-sdk/issues/4502.\n */\n loginWithPassword(user, password) {\n return this.login(\"m.login.password\", {\n user: user,\n password: password\n });\n }\n\n /**\n * @param redirectUrl - The URL to redirect to after the HS\n * authenticates with CAS.\n * @returns The HS URL to hit to begin the CAS login process.\n */\n getCasLoginUrl(redirectUrl) {\n return this.getSsoLoginUrl(redirectUrl, \"cas\");\n }\n\n /**\n * @param redirectUrl - The URL to redirect to after the HS\n * authenticates with the SSO.\n * @param loginType - The type of SSO login we are doing (sso or cas).\n * Defaults to 'sso'.\n * @param idpId - The ID of the Identity Provider being targeted, optional.\n * @param action - the SSO flow to indicate to the IdP, optional.\n * @returns The HS URL to hit to begin the SSO login process.\n */\n getSsoLoginUrl(redirectUrl) {\n var loginType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"sso\";\n var idpId = arguments.length > 2 ? arguments[2] : undefined;\n var action = arguments.length > 3 ? arguments[3] : undefined;\n var url = \"/login/\" + loginType + \"/redirect\";\n if (idpId) {\n url += \"/\" + idpId;\n }\n var params = {\n redirectUrl,\n [SSO_ACTION_PARAM.stable]: action,\n [SSO_ACTION_PARAM.unstable]: action\n };\n return this.http.getUrl(url, params).href;\n }\n\n /**\n * @param token - Login token previously received from homeserver\n * @returns Promise which resolves to a LoginResponse object\n * @returns Rejects: with an error response.\n *\n * @deprecated This method has unintuitive behaviour: it updates the `MatrixClient` instance with *some* of the\n * returned credentials. Instead, call {@link loginRequest} with `data.type: \"m.login.token\"`, and create a new\n * `MatrixClient` instance using the results. See https://github.com/matrix-org/matrix-js-sdk/issues/4502.\n */\n loginWithToken(token) {\n return this.login(\"m.login.token\", {\n token: token\n });\n }\n\n /**\n * Sends a `POST /login` request to the server.\n *\n * If successful, this will create a new device and access token for the user.\n *\n * @see {@link MatrixClient.loginFlows} which makes a `GET /login` request.\n * @see https://spec.matrix.org/v1.13/client-server-api/#post_matrixclientv3login\n *\n * @param data - Credentials and other details for the login request.\n */\n loginRequest(data) {\n var _this55 = this;\n return _asyncToGenerator(function* () {\n return yield _this55.http.authedRequest(Method.Post, \"/login\", undefined, data);\n })();\n }\n\n /**\n * Logs out the current session.\n * Obviously, further calls that require authorisation should fail after this\n * method is called. The state of the MatrixClient object is not affected:\n * it is up to the caller to either reset or destroy the MatrixClient after\n * this method succeeds.\n * @param stopClient - whether to stop the client before calling /logout to prevent invalid token errors.\n * @returns Promise which resolves: On success, the empty object `{}`\n */\n logout() {\n var _arguments13 = arguments,\n _this56 = this;\n return _asyncToGenerator(function* () {\n var stopClient = _arguments13.length > 0 && _arguments13[0] !== undefined ? _arguments13[0] : false;\n if (stopClient) {\n _this56.stopClient();\n _this56.http.abort();\n }\n return _this56.http.authedRequest(Method.Post, \"/logout\");\n })();\n }\n\n /**\n * Deactivates the logged-in account.\n * Obviously, further calls that require authorisation should fail after this\n * method is called. The state of the MatrixClient object is not affected:\n * it is up to the caller to either reset or destroy the MatrixClient after\n * this method succeeds.\n * @param auth - Optional. Auth data to supply for User-Interactive auth.\n * @param erase - Optional. If set, send as `erase` attribute in the\n * JSON request body, indicating whether the account should be erased. Defaults\n * to false.\n * @returns Promise which resolves: On success, the empty object\n */\n deactivateAccount(auth, erase) {\n var body = {};\n if (auth) {\n body.auth = auth;\n }\n if (erase !== undefined) {\n body.erase = erase;\n }\n return this.http.authedRequest(Method.Post, \"/account/deactivate\", undefined, body);\n }\n\n /**\n * Make a request for an `m.login.token` to be issued as per\n * https://spec.matrix.org/v1.7/client-server-api/#post_matrixclientv1loginget_token\n *\n * The server may require User-Interactive auth.\n *\n * @param auth - Optional. Auth data to supply for User-Interactive auth.\n * @returns Promise which resolves: On success, the token response\n * or UIA auth data.\n */\n requestLoginToken(auth) {\n var _this57 = this;\n return _asyncToGenerator(function* () {\n var body = {\n auth\n };\n return _this57.http.authedRequest(Method.Post, \"/login/get_token\", undefined,\n // no query params\n body, {\n prefix: ClientPrefix.V1\n });\n })();\n }\n\n /**\n * Get the fallback URL to use for unknown interactive-auth stages.\n *\n * @param loginType - the type of stage being attempted\n * @param authSessionId - the auth session ID provided by the homeserver\n *\n * @returns HS URL to hit to for the fallback interface\n */\n getFallbackAuthUrl(loginType, authSessionId) {\n var path = utils.encodeUri(\"/auth/$loginType/fallback/web\", {\n $loginType: loginType\n });\n return this.http.getUrl(path, {\n session: authSessionId\n }).href;\n }\n\n /**\n * Create a new room.\n * @param options - a list of options to pass to the /createRoom API.\n * @returns Promise which resolves: `{room_id: {string}}`\n * @returns Rejects: with an error response.\n */\n createRoom(options) {\n var _this58 = this;\n return _asyncToGenerator(function* () {\n var _this58$identityServe;\n // eslint-disable-line camelcase\n // some valid options include: room_alias_name, visibility, invite\n\n // inject the id_access_token if inviting 3rd party addresses\n var invitesNeedingToken = (options.invite_3pid || []).filter(i => !i.id_access_token);\n if (invitesNeedingToken.length > 0 && (_this58$identityServe = _this58.identityServer) !== null && _this58$identityServe !== void 0 && _this58$identityServe.getAccessToken) {\n var identityAccessToken = yield _this58.identityServer.getAccessToken();\n if (identityAccessToken) {\n for (var invite of invitesNeedingToken) {\n invite.id_access_token = identityAccessToken;\n }\n }\n }\n return _this58.http.authedRequest(Method.Post, \"/createRoom\", undefined, options);\n })();\n }\n\n /**\n * Fetches relations for a given event\n * @param roomId - the room of the event\n * @param eventId - the id of the event\n * @param relationType - the rel_type of the relations requested\n * @param eventType - the event type of the relations requested\n * @param opts - options with optional values for the request.\n * @returns the response, with chunk, prev_batch and, next_batch.\n */\n fetchRelations(roomId, eventId, relationType, eventType) {\n var opts = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n dir: Direction.Backward\n };\n var params = opts;\n if (Thread.hasServerSideFwdPaginationSupport === FeatureSupport.Experimental) {\n params = replaceParam(\"dir\", \"org.matrix.msc3715.dir\", params);\n }\n if (this.canSupport.get(Feature.RelationsRecursion) === ServerSupport.Unstable) {\n params = replaceParam(\"recurse\", \"org.matrix.msc3981.recurse\", params);\n }\n var queryString = utils.encodeParams(params);\n var templatedUrl = \"/rooms/$roomId/relations/$eventId\";\n if (relationType !== null) {\n templatedUrl += \"/$relationType\";\n if (eventType !== null) {\n templatedUrl += \"/$eventType\";\n }\n } else if (eventType !== null) {\n this.logger.warn(\"eventType: \".concat(eventType, \" ignored when fetching\\n relations as relationType is null\"));\n eventType = null;\n }\n var path = utils.encodeUri(templatedUrl + \"?\" + queryString, {\n $roomId: roomId,\n $eventId: eventId,\n $relationType: relationType,\n $eventType: eventType\n });\n return this.http.authedRequest(Method.Get, path, undefined, undefined, {\n prefix: ClientPrefix.V1\n });\n }\n\n /**\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n */\n roomState(roomId) {\n var path = utils.encodeUri(\"/rooms/$roomId/state\", {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Get an event in a room by its event id.\n *\n * @returns Promise which resolves to an object containing the event.\n * @returns Rejects: with an error response.\n */\n fetchRoomEvent(roomId, eventId) {\n var path = utils.encodeUri(\"/rooms/$roomId/event/$eventId\", {\n $roomId: roomId,\n $eventId: eventId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * @param includeMembership - the membership type to include in the response\n * @param excludeMembership - the membership type to exclude from the response\n * @param atEventId - the id of the event for which moment in the timeline the members should be returned for\n * @returns Promise which resolves: dictionary of userid to profile information\n * @returns Rejects: with an error response.\n */\n members(roomId, includeMembership, excludeMembership, atEventId) {\n var queryParams = {};\n if (includeMembership) {\n queryParams.membership = includeMembership;\n }\n if (excludeMembership) {\n queryParams.not_membership = excludeMembership;\n }\n if (atEventId) {\n queryParams.at = atEventId;\n }\n var queryString = utils.encodeParams(queryParams);\n var path = utils.encodeUri(\"/rooms/$roomId/members?\" + queryString, {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Upgrades a room to a new protocol version\n * @param newVersion - The target version to upgrade to\n * @param additionalCreators - an optional list of user IDs of users who\n * should have the same permissions as the user performing the\n * upgrade\n * @returns Promise which resolves: Object with key 'replacement_room'\n * @returns Rejects: with an error response.\n */\n upgradeRoom(roomId, newVersion, additionalCreators) {\n // eslint-disable-line camelcase\n var path = utils.encodeUri(\"/rooms/$roomId/upgrade\", {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Post, path, undefined, {\n new_version: newVersion,\n additional_creators: additionalCreators\n });\n }\n\n /**\n * Retrieve a state event.\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n */\n getStateEvent(roomId, eventType, stateKey) {\n var pathParams = {\n $roomId: roomId,\n $eventType: eventType,\n $stateKey: stateKey\n };\n var path = utils.encodeUri(\"/rooms/$roomId/state/$eventType\", pathParams);\n if (stateKey !== undefined) {\n path = utils.encodeUri(path + \"/$stateKey\", pathParams);\n }\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Send a state event into a room\n * @param roomId - ID of the room to send the event into\n * @param eventType - type of the state event to send\n * @param content - content of the event to send\n * @param stateKey - the stateKey to send into the room\n * @param opts - Options for the request function.\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n */\n sendStateEvent(roomId, eventType, content) {\n var _arguments14 = arguments,\n _this59 = this;\n return _asyncToGenerator(function* () {\n var stateKey = _arguments14.length > 3 && _arguments14[3] !== undefined ? _arguments14[3] : \"\";\n var opts = _arguments14.length > 4 && _arguments14[4] !== undefined ? _arguments14[4] : {};\n var room = _this59.getRoom(roomId);\n var event = new MatrixEvent({\n room_id: roomId,\n type: eventType,\n state_key: stateKey,\n // Cast safety: StateEvents[K] is a stronger bound than IContent, which has [key: string]: any\n content: content\n });\n yield _this59.encryptStateEventIfNeeded(event, room !== null && room !== void 0 ? room : undefined);\n var pathParams = {\n $roomId: roomId,\n $eventType: event.getWireType(),\n $stateKey: event.getWireStateKey()\n };\n var path = utils.encodeUri(\"/rooms/$roomId/state/$eventType\", pathParams);\n if (stateKey !== undefined) {\n path = utils.encodeUri(path + \"/$stateKey\", pathParams);\n }\n return _this59.http.authedRequest(Method.Put, path, undefined, event.getWireContent(), opts);\n })();\n }\n encryptStateEventIfNeeded(event, room) {\n var _this60 = this;\n return _asyncToGenerator(function* () {\n if (!_this60.enableEncryptedStateEvents) {\n return;\n }\n\n // If the room is unknown, we cannot encrypt for it\n if (!room) return;\n if (!_this60.cryptoBackend && _this60.usingExternalCrypto) {\n // The client has opted to allow sending messages to encrypted\n // rooms even if the room is encrypted, and we haven't set up\n // crypto. This is useful for users of matrix-org/pantalaimon\n return;\n }\n if (!_this60.cryptoBackend) {\n throw new Error(\"This room is configured to use encryption, but your client does not support encryption.\");\n }\n\n // Check regular encryption conditions.\n if (!(yield _this60.shouldEncryptEventForRoom(event, room))) {\n return;\n }\n\n // If the crypto impl thinks we shouldn't encrypt, then we shouldn't.\n // Safety: we checked the crypto impl exists above.\n if (!(yield _this60.cryptoBackend.isStateEncryptionEnabledInRoom(room.roomId))) {\n return;\n }\n\n // Check if the event is excluded under MSC4362\n if ([\"m.room.create\", \"m.room.member\", \"m.room.join_rules\", \"m.room.power_levels\", \"m.room.third_party_invite\", \"m.room.history_visibility\", \"m.room.guest_access\", \"m.room.encryption\"].includes(event.getType())) {\n return;\n }\n yield _this60.cryptoBackend.encryptEvent(event, room);\n })();\n }\n\n /**\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n */\n roomInitialSync(roomId, limit) {\n var _limit$toString;\n var path = utils.encodeUri(\"/rooms/$roomId/initialSync\", {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Get, path, {\n limit: (_limit$toString = limit === null || limit === void 0 ? void 0 : limit.toString()) !== null && _limit$toString !== void 0 ? _limit$toString : \"30\"\n });\n }\n\n /**\n * Set a marker to indicate the point in a room before which the user has read every\n * event. This can be retrieved from room account data (the event type is `m.fully_read`)\n * and displayed as a horizontal line in the timeline that is visually distinct to the\n * position of the user's own read receipt.\n * @param roomId - ID of the room that has been read\n * @param rmEventId - ID of the event that has been read\n * @param rrEventId - ID of the event tracked by the read receipt. This is here\n * for convenience because the RR and the RM are commonly updated at the same time as\n * each other. Optional.\n * @param rpEventId - rpEvent the m.read.private read receipt event for when we\n * don't want other users to see the read receipts. This is experimental. Optional.\n * @returns Promise which resolves: the empty object, `{}`.\n */\n setRoomReadMarkersHttpRequest(roomId, rmEventId, rrEventId, rpEventId) {\n var _this61 = this;\n return _asyncToGenerator(function* () {\n var path = utils.encodeUri(\"/rooms/$roomId/read_markers\", {\n $roomId: roomId\n });\n var content = {\n [ReceiptType.FullyRead]: rmEventId,\n [ReceiptType.Read]: rrEventId\n };\n if ((yield _this61.doesServerSupportUnstableFeature(\"org.matrix.msc2285.stable\")) || (yield _this61.isVersionSupported(\"v1.4\"))) {\n content[ReceiptType.ReadPrivate] = rpEventId;\n }\n return _this61.http.authedRequest(Method.Post, path, undefined, content);\n })();\n }\n\n /**\n * @returns Promise which resolves: A list of the user's current rooms\n * @returns Rejects: with an error response.\n */\n getJoinedRooms() {\n var path = utils.encodeUri(\"/joined_rooms\", {});\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Retrieve membership info. for a room.\n * @param roomId - ID of the room to get membership for\n * @returns Promise which resolves: A list of currently joined users\n * and their profile data.\n * @returns Rejects: with an error response.\n */\n getJoinedRoomMembers(roomId) {\n var path = utils.encodeUri(\"/rooms/$roomId/joined_members\", {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Get the public rooms list from the server. Supports pagination\n * @param params - Options for this request\n * @returns Promise which resolves: IPublicRoomsResponse\n * @returns Rejects: with an error response.\n * @throws May throw a `MatrixSafetyError` if content is deemed unsafe.\n * @see MatrixSafetyError\n */\n publicRooms() {\n var _ref10 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var server = _ref10.server,\n limit = _ref10.limit,\n since = _ref10.since,\n options = _objectWithoutProperties(_ref10, _excluded);\n if (Object.keys(options).length === 0) {\n var queryParams = {\n server,\n limit,\n since\n };\n return this.http.authedRequest(Method.Get, \"/publicRooms\", queryParams);\n } else {\n var _queryParams = {\n server\n };\n var _body = _objectSpread({\n limit,\n since\n }, options);\n return this.http.authedRequest(Method.Post, \"/publicRooms\", _queryParams, _body);\n }\n }\n\n /**\n * Create an alias to room ID mapping.\n * @param alias - The room alias to create.\n * @param roomId - The room ID to link the alias to.\n * @returns Promise which resolves: an empty object `{}`\n * @returns Rejects: with an error response.\n */\n createAlias(alias, roomId) {\n var path = utils.encodeUri(\"/directory/room/$alias\", {\n $alias: alias\n });\n var data = {\n room_id: roomId\n };\n return this.http.authedRequest(Method.Put, path, undefined, data);\n }\n\n /**\n * Delete an alias to room ID mapping. This alias must be on your local server,\n * and you must have sufficient access to do this operation.\n * @param alias - The room alias to delete.\n * @returns Promise which resolves: an empty object `{}`.\n * @returns Rejects: with an error response.\n */\n deleteAlias(alias) {\n var path = utils.encodeUri(\"/directory/room/$alias\", {\n $alias: alias\n });\n return this.http.authedRequest(Method.Delete, path);\n }\n\n /**\n * Gets the local aliases for the room. Note: this includes all local aliases, unlike the\n * curated list from the m.room.canonical_alias state event.\n * @param roomId - The room ID to get local aliases for.\n * @returns Promise which resolves: an object with an `aliases` property, containing an array of local aliases\n * @returns Rejects: with an error response.\n */\n getLocalAliases(roomId) {\n var path = utils.encodeUri(\"/rooms/$roomId/aliases\", {\n $roomId: roomId\n });\n var prefix = ClientPrefix.V3;\n return this.http.authedRequest(Method.Get, path, undefined, undefined, {\n prefix\n });\n }\n\n /**\n * Get room info for the given alias.\n * @param alias - The room alias to resolve.\n * @returns Promise which resolves: Object with room_id and servers.\n * @returns Rejects: with an error response.\n */\n getRoomIdForAlias(alias) {\n // eslint-disable-line camelcase\n var path = utils.encodeUri(\"/directory/room/$alias\", {\n $alias: alias\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Get the visibility of a room in the current HS's room directory\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n */\n getRoomDirectoryVisibility(roomId) {\n var path = utils.encodeUri(\"/directory/list/room/$roomId\", {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Set the visibility of a room in the current HS's room directory\n * @param visibility - \"public\" to make the room visible\n * in the public directory, or \"private\" to make\n * it invisible.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n setRoomDirectoryVisibility(roomId, visibility) {\n var path = utils.encodeUri(\"/directory/list/room/$roomId\", {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Put, path, undefined, {\n visibility\n });\n }\n\n /**\n * Query the user directory with a term matching user IDs, display names and domains.\n * @param options\n * @param options.term - the term with which to search.\n * @param options.limit - the maximum number of results to return. The server will apply a limit if unspecified.\n * @returns Promise which resolves: an array of results.\n */\n searchUserDirectory(_ref11) {\n var term = _ref11.term,\n limit = _ref11.limit;\n var body = {\n search_term: term\n };\n if (limit !== undefined) {\n body.limit = limit;\n }\n return this.http.authedRequest(Method.Post, \"/user_directory/search\", undefined, body);\n }\n\n /**\n * Upload a file to the media repository on the homeserver.\n *\n * @param file - The object to upload. On a browser, something that\n * can be sent to XMLHttpRequest.send (typically a File). Under node.js,\n * a a Buffer, String or ReadStream.\n *\n * @param opts - options object\n *\n * @returns Promise which resolves to response object, or rejects with an error (usually a MatrixError).\n */\n uploadContent(file, opts) {\n return this.http.uploadContent(file, opts);\n }\n\n /**\n * Cancel a file upload in progress\n * @param upload - The object returned from uploadContent\n * @returns true if canceled, otherwise false\n */\n cancelUpload(upload) {\n return this.http.cancelUpload(upload);\n }\n\n /**\n * Get a list of all file uploads in progress\n * @returns Array of objects representing current uploads.\n * Currently in progress is element 0. Keys:\n * - promise: The promise associated with the upload\n * - loaded: Number of bytes uploaded\n * - total: Total number of bytes to upload\n */\n getCurrentUploads() {\n return this.http.getCurrentUploads();\n }\n\n /**\n * @param info - The kind of info to retrieve (e.g. 'displayname',\n * 'avatar_url').\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n */\n getProfileInfo(userId, info\n // eslint-disable-next-line camelcase\n ) {\n var path = info ? utils.encodeUri(\"/profile/$userId/$info\", {\n $userId: userId,\n $info: info\n }) : utils.encodeUri(\"/profile/$userId\", {\n $userId: userId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Determine if the server supports extended profiles, as described by MSC4133.\n *\n * @returns `true` if supported, otherwise `false`\n */\n doesServerSupportExtendedProfiles() {\n var _this62 = this;\n return _asyncToGenerator(function* () {\n return (yield _this62.isVersionSupported(\"v1.16\")) || (yield _this62.doesServerSupportUnstableFeature(UNSTABLE_MSC4133_EXTENDED_PROFILES)) || (yield _this62.doesServerSupportUnstableFeature(STABLE_MSC4133_EXTENDED_PROFILES));\n })();\n }\n\n /**\n * Get the prefix used for extended profile requests.\n *\n * @returns The prefix for use with `authedRequest`\n */\n getExtendedProfileRequestPrefix() {\n var _this63 = this;\n return _asyncToGenerator(function* () {\n if ((yield _this63.isVersionSupported(\"v1.16\")) || (yield _this63.doesServerSupportUnstableFeature(\"uk.tcpip.msc4133.stable\"))) {\n return ClientPrefix.V3;\n }\n return \"/_matrix/client/unstable/uk.tcpip.msc4133\";\n })();\n }\n\n /**\n * Fetch a user's *extended* profile, which may include additional keys.\n * Always returns all available profile fields, irrespective of what profile fields are set\n * in the sync filter.\n *\n * @see https://github.com/tcpipuk/matrix-spec-proposals/blob/main/proposals/4133-extended-profiles.md\n * @param userId The user ID to fetch the profile of.\n * @returns A set of keys to property values.\n *\n * @throws An error if the server does not support MSC4133.\n * @throws A M_NOT_FOUND error if the profile could not be found.\n */\n getExtendedProfile(userId) {\n var _this64 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this64.doesServerSupportExtendedProfiles())) {\n throw new Error(\"Server does not support extended profiles\");\n }\n\n // Note that this does not look at the profile cache as this will only contain keys\n // that we included in the sync filter and this function's purpose is to return the whole profile.\n\n return _this64.http.authedRequest(Method.Get, utils.encodeUri(\"/profile/$userId\", {\n $userId: userId\n }), undefined, undefined, {\n prefix: yield _this64.getExtendedProfileRequestPrefix()\n });\n })();\n }\n\n /**\n * Fetch a specific key from the user's *extended* profile by checking local cache (which is updated from\n * the sync) and querying the server if no data is cached locally.\n *\n * @see https://github.com/tcpipuk/matrix-spec-proposals/blob/main/proposals/4133-extended-profiles.md\n * @param userId The user ID to fetch the profile of.\n * @param key The key of the property to fetch.\n * @returns The property value.\n *\n * @throws An error if the server does not support MSC4133.\n * @throws A M_NOT_FOUND error if the key was not set OR the profile could not be found.\n */\n getExtendedProfileProperty(userId, key) {\n var _this65 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this65.doesServerSupportExtendedProfiles())) {\n throw new Error(\"Server does not support extended profiles\");\n }\n // NOTE: We only read individual keys from a cached profile as we don't have the full profile\n // cached, only the keys that the user has configured via their sync filter.\n var storedProfile = yield _this65.store.getUserProfile(userId);\n if ((storedProfile === null || storedProfile === void 0 ? void 0 : storedProfile[key]) !== undefined) {\n return storedProfile[key];\n }\n var profile = yield _this65.http.authedRequest(Method.Get, utils.encodeUri(\"/profile/$userId/$key\", {\n $userId: userId,\n $key: key\n }), undefined, undefined, {\n prefix: yield _this65.getExtendedProfileRequestPrefix()\n });\n\n // write through to the cache\n yield _this65.store.storeUserProfiles(new Map([[userId, profile]]));\n return profile[key];\n })();\n }\n\n /**\n * Set a property on your *extended* profile.\n *\n * @see https://github.com/tcpipuk/matrix-spec-proposals/blob/main/proposals/4133-extended-profiles.md\n * @param key The key of the property to set.\n * @param value The value to set on the property.\n *\n * @throws An error if the server does not support MSC4133 OR the server disallows editing the user profile.\n */\n setExtendedProfileProperty(key, value) {\n var _this66 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this66.doesServerSupportExtendedProfiles())) {\n throw new Error(\"Server does not support extended profiles\");\n }\n var userId = _this66.getUserId();\n yield _this66.http.authedRequest(Method.Put, utils.encodeUri(\"/profile/$userId/$key\", {\n $userId: userId,\n $key: key\n }), undefined, {\n [key]: value\n }, {\n prefix: yield _this66.getExtendedProfileRequestPrefix()\n });\n })();\n }\n\n /**\n * Delete a property on your *extended* profile.\n *\n * @see https://github.com/tcpipuk/matrix-spec-proposals/blob/main/proposals/4133-extended-profiles.md\n * @param key The key of the property to delete.\n *\n * @throws An error if the server does not support MSC4133 OR the server disallows editing the user profile.\n */\n deleteExtendedProfileProperty(key) {\n var _this67 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this67.doesServerSupportExtendedProfiles())) {\n throw new Error(\"Server does not support extended profiles\");\n }\n var userId = _this67.getUserId();\n yield _this67.http.authedRequest(Method.Delete, utils.encodeUri(\"/profile/$userId/$key\", {\n $userId: userId,\n $key: key\n }), undefined, undefined, {\n prefix: yield _this67.getExtendedProfileRequestPrefix()\n });\n })();\n }\n\n /**\n * Update multiple properties on your *extended* profile. This will\n * merge with any existing keys.\n *\n * @see https://github.com/tcpipuk/matrix-spec-proposals/blob/main/proposals/4133-extended-profiles.md\n * @param profile The profile object to merge with the existing profile.\n * @returns The newly merged profile.\n *\n * @throws An error if the server does not support MSC4133 OR the server disallows editing the user profile.\n */\n patchExtendedProfile(profile) {\n var _this68 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this68.doesServerSupportExtendedProfiles())) {\n throw new Error(\"Server does not support extended profiles\");\n }\n var userId = _this68.getUserId();\n return _this68.http.authedRequest(Method.Patch, utils.encodeUri(\"/profile/$userId\", {\n $userId: userId\n }), {}, profile, {\n prefix: yield _this68.getExtendedProfileRequestPrefix()\n });\n })();\n }\n\n /**\n * Set multiple properties on your *extended* profile. This will completely\n * replace the existing profile, removing any unspecified keys.\n *\n * @see https://github.com/tcpipuk/matrix-spec-proposals/blob/main/proposals/4133-extended-profiles.md\n * @param profile The profile object to set.\n *\n * @throws An error if the server does not support MSC4133 OR the server disallows editing the user profile.\n */\n setExtendedProfile(profile) {\n var _this69 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this69.doesServerSupportExtendedProfiles())) {\n throw new Error(\"Server does not support extended profiles\");\n }\n var userId = _this69.getUserId();\n yield _this69.http.authedRequest(Method.Put, utils.encodeUri(\"/profile/$userId\", {\n $userId: userId\n }), {}, profile, {\n prefix: yield _this69.getExtendedProfileRequestPrefix()\n });\n })();\n }\n\n /**\n * @returns Promise which resolves to a list of the user's threepids.\n * @returns Rejects: with an error response.\n */\n getThreePids() {\n return this.http.authedRequest(Method.Get, \"/account/3pid\");\n }\n\n /**\n * Add a 3PID to your homeserver account. This API does not use an identity\n * server, as the homeserver is expected to handle 3PID ownership validation.\n *\n * @param data - A object with 3PID validation data from having called\n * `account/3pid/<medium>/requestToken` on the homeserver.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n addThreePidOnly(data) {\n var _this70 = this;\n return _asyncToGenerator(function* () {\n var path = \"/account/3pid/add\";\n return _this70.http.authedRequest(Method.Post, path, undefined, data);\n })();\n }\n\n /**\n * Bind a 3PID for discovery onto an identity server via the homeserver. The\n * identity server handles 3PID ownership validation and the homeserver records\n * the new binding to track where all 3PIDs for the account are bound.\n *\n * @param data - A object with 3PID validation data from having called\n * `validate/<medium>/requestToken` on the identity server. It should also\n * contain `id_server` and `id_access_token` fields as well.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n bindThreePid(data) {\n var _this71 = this;\n return _asyncToGenerator(function* () {\n var path = \"/account/3pid/bind\";\n return _this71.http.authedRequest(Method.Post, path, undefined, data);\n })();\n }\n\n /**\n * Unbind a 3PID for discovery on an identity server via the homeserver. The\n * homeserver removes its record of the binding to keep an updated record of\n * where all 3PIDs for the account are bound.\n *\n * @param medium - The threepid medium (eg. 'email')\n * @param address - The threepid address (eg. 'bob\\@example.com')\n * this must be as returned by getThreePids.\n * @returns Promise which resolves: on success\n * @returns Rejects: with an error response.\n */\n unbindThreePid(medium, address\n // eslint-disable-next-line camelcase\n ) {\n var _this72 = this;\n return _asyncToGenerator(function* () {\n var path = \"/account/3pid/unbind\";\n var data = {\n medium,\n address,\n id_server: _this72.getIdentityServerUrl(true)\n };\n return _this72.http.authedRequest(Method.Post, path, undefined, data);\n })();\n }\n\n /**\n * @param medium - The threepid medium (eg. 'email')\n * @param address - The threepid address (eg. 'bob\\@example.com')\n * this must be as returned by getThreePids.\n * @returns Promise which resolves: The server response on success\n * (generally the empty JSON object)\n * @returns Rejects: with an error response.\n */\n deleteThreePid(medium, address\n // eslint-disable-next-line camelcase\n ) {\n var path = \"/account/3pid/delete\";\n return this.http.authedRequest(Method.Post, path, undefined, {\n medium,\n address\n });\n }\n\n /**\n * Make a request to change your password.\n * @param newPassword - The new desired password.\n * @param logoutDevices - Should all sessions be logged out after the password change. Defaults to true.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n setPassword(authDict, newPassword, logoutDevices) {\n var path = \"/account/password\";\n var data = {\n auth: authDict,\n new_password: newPassword,\n logout_devices: logoutDevices\n };\n return this.http.authedRequest(Method.Post, path, undefined, data);\n }\n\n /**\n * Gets all devices recorded for the logged-in user\n * @returns Promise which resolves: result object\n * @returns Rejects: with an error response.\n */\n getDevices() {\n return this.http.authedRequest(Method.Get, \"/devices\");\n }\n\n /**\n * Gets specific device details for the logged-in user\n * @param deviceId - device to query\n * @returns Promise which resolves: result object\n * @returns Rejects: with an error response.\n */\n getDevice(deviceId) {\n var path = utils.encodeUri(\"/devices/$device_id\", {\n $device_id: deviceId\n });\n return this.http.authedRequest(Method.Get, path);\n }\n\n /**\n * Update the given device\n *\n * @param deviceId - device to update\n * @param body - body of request\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n // eslint-disable-next-line camelcase\n setDeviceDetails(deviceId, body) {\n var path = utils.encodeUri(\"/devices/$device_id\", {\n $device_id: deviceId\n });\n return this.http.authedRequest(Method.Put, path, undefined, body);\n }\n\n /**\n * Delete the given device\n *\n * @param deviceId - device to delete\n * @param auth - Optional. Auth data to supply for User-Interactive auth.\n * @returns Promise which resolves: result object\n * @returns Rejects: with an error response.\n */\n deleteDevice(deviceId, auth) {\n var path = utils.encodeUri(\"/devices/$device_id\", {\n $device_id: deviceId\n });\n var body = {};\n if (auth) {\n body.auth = auth;\n }\n return this.http.authedRequest(Method.Delete, path, undefined, body);\n }\n\n /**\n * Delete multiple device\n *\n * @param devices - IDs of the devices to delete\n * @param auth - Optional. Auth data to supply for User-Interactive auth.\n * @returns Promise which resolves: result object\n * @returns Rejects: with an error response.\n */\n deleteMultipleDevices(devices, auth) {\n var body = {\n devices\n };\n if (auth) {\n body.auth = auth;\n }\n var path = \"/delete_devices\";\n return this.http.authedRequest(Method.Post, path, undefined, body);\n }\n\n /**\n * Gets all pushers registered for the logged-in user\n *\n * @returns Promise which resolves: Array of objects representing pushers\n * @returns Rejects: with an error response.\n */\n getPushers() {\n var _this73 = this;\n return _asyncToGenerator(function* () {\n var response = yield _this73.http.authedRequest(Method.Get, \"/pushers\");\n\n // Migration path for clients that connect to a homeserver that does not support\n // MSC3881 yet, see https://github.com/matrix-org/matrix-spec-proposals/blob/kerry/remote-push-toggle/proposals/3881-remote-push-notification-toggling.md#migration\n if (!(yield _this73.doesServerSupportUnstableFeature(\"org.matrix.msc3881\"))) {\n response.pushers = response.pushers.map(pusher => {\n if (!pusher.hasOwnProperty(PUSHER_ENABLED.name)) {\n pusher[PUSHER_ENABLED.name] = true;\n }\n return pusher;\n });\n }\n return response;\n })();\n }\n\n /**\n * Adds a new pusher or updates an existing pusher\n *\n * @param pusher - Object representing a pusher\n * @returns Promise which resolves: Empty json object on success\n * @returns Rejects: with an error response.\n */\n setPusher(pusher) {\n var path = \"/pushers/set\";\n return this.http.authedRequest(Method.Post, path, undefined, pusher);\n }\n\n /**\n * Removes an existing pusher\n * @param pushKey - pushkey of pusher to remove\n * @param appId - app_id of pusher to remove\n * @returns Promise which resolves: Empty json object on success\n * @returns Rejects: with an error response.\n */\n removePusher(pushKey, appId) {\n var path = \"/pushers/set\";\n var body = {\n pushkey: pushKey,\n app_id: appId,\n kind: null // marks pusher for removal\n };\n return this.http.authedRequest(Method.Post, path, undefined, body);\n }\n\n /**\n * Persists local notification settings\n * @returns Promise which resolves: an empty object\n * @returns Rejects: with an error response.\n */\n setLocalNotificationSettings(deviceId, notificationSettings) {\n var key = \"\".concat(LOCAL_NOTIFICATION_SETTINGS_PREFIX.name, \".\").concat(deviceId);\n return this.setAccountData(key, notificationSettings);\n }\n\n /**\n * Get the push rules for the account from the server.\n * @returns Promise which resolves to the push rules.\n * @returns Rejects: with an error response.\n */\n getPushRules() {\n return this.http.authedRequest(Method.Get, \"/pushrules/\").then(rules => {\n this.setPushRules(rules);\n return this.pushRules;\n });\n }\n\n /**\n * Update the push rules for the account. This should be called whenever\n * updated push rules are available.\n */\n setPushRules(rules) {\n // Fix-up defaults, if applicable.\n this.pushRules = PushProcessor.rewriteDefaultRules(this.logger, rules, this.getUserId());\n // Pre-calculate any necessary caches.\n this.pushProcessor.updateCachedPushRuleKeys(this.pushRules);\n }\n\n /**\n * @returns Promise which resolves: an empty object `{}`\n * @returns Rejects: with an error response.\n */\n addPushRule(scope, kind, ruleId, body) {\n // NB. Scope not uri encoded because devices need the '/'\n var path = utils.encodeUri(\"/pushrules/\" + scope + \"/$kind/$ruleId\", {\n $kind: kind,\n $ruleId: ruleId\n });\n return this.http.authedRequest(Method.Put, path, undefined, body);\n }\n\n /**\n * @returns Promise which resolves: an empty object `{}`\n * @returns Rejects: with an error response.\n */\n deletePushRule(scope, kind, ruleId) {\n // NB. Scope not uri encoded because devices need the '/'\n var path = utils.encodeUri(\"/pushrules/\" + scope + \"/$kind/$ruleId\", {\n $kind: kind,\n $ruleId: ruleId\n });\n return this.http.authedRequest(Method.Delete, path);\n }\n\n /**\n * Enable or disable a push notification rule.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n setPushRuleEnabled(scope, kind, ruleId, enabled) {\n var path = utils.encodeUri(\"/pushrules/\" + scope + \"/$kind/$ruleId/enabled\", {\n $kind: kind,\n $ruleId: ruleId\n });\n return this.http.authedRequest(Method.Put, path, undefined, {\n enabled: enabled\n });\n }\n\n /**\n * Set the actions for a push notification rule.\n * @returns Promise which resolves: to an empty object `{}`\n * @returns Rejects: with an error response.\n */\n setPushRuleActions(scope, kind, ruleId, actions) {\n var path = utils.encodeUri(\"/pushrules/\" + scope + \"/$kind/$ruleId/actions\", {\n $kind: kind,\n $ruleId: ruleId\n });\n return this.http.authedRequest(Method.Put, path, undefined, {\n actions: actions\n });\n }\n\n /**\n * Perform a server-side search.\n * @param params\n * @param params.next_batch - the batch token to pass in the query string\n * @param params.body - the JSON object to pass to the request body.\n * @param abortSignal - optional signal used to cancel the http request.\n * @returns Promise which resolves to the search response object.\n * @returns Rejects: with an error response.\n */\n search(_ref12, abortSignal) {\n var body = _ref12.body,\n nextBatch = _ref12.next_batch;\n var queryParams = {};\n if (nextBatch) {\n queryParams.next_batch = nextBatch;\n }\n return this.http.authedRequest(Method.Post, \"/search\", queryParams, body, {\n abortSignal\n });\n }\n\n /**\n * Upload keys\n *\n * @param content - body of upload request\n *\n * @param opts - this method no longer takes any opts,\n * used to take opts.device_id but this was not removed from the spec as a redundant parameter\n *\n * @returns Promise which resolves: result object. Rejects: with\n * an error response ({@link MatrixError}).\n */\n uploadKeysRequest(content, opts) {\n return this.http.authedRequest(Method.Post, \"/keys/upload\", undefined, content);\n }\n uploadKeySignatures(content) {\n return this.http.authedRequest(Method.Post, \"/keys/signatures/upload\", undefined, content);\n }\n\n /**\n * Download device keys\n *\n * @param userIds - list of users to get keys for\n *\n * @param token - sync token to pass in the query request, to help\n * the HS give the most recent results\n *\n * @returns Promise which resolves: result object. Rejects: with\n * an error response ({@link MatrixError}).\n */\n downloadKeysForUsers(userIds) {\n var _ref13 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n token = _ref13.token;\n var content = {\n device_keys: {}\n };\n if (token !== undefined) {\n content.token = token;\n }\n userIds.forEach(u => {\n content.device_keys[u] = [];\n });\n return this.http.authedRequest(Method.Post, \"/keys/query\", undefined, content);\n }\n\n /**\n * Claim one-time keys\n *\n * @param devices - a list of [userId, deviceId] pairs\n *\n * @param keyAlgorithm - desired key type\n *\n * @param timeout - the time (in milliseconds) to wait for keys from remote\n * servers\n *\n * @returns Promise which resolves: result object. Rejects: with\n * an error response ({@link MatrixError}).\n */\n claimOneTimeKeys(devices) {\n var keyAlgorithm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"signed_curve25519\";\n var timeout = arguments.length > 2 ? arguments[2] : undefined;\n var queries = {};\n if (keyAlgorithm === undefined) {\n keyAlgorithm = \"signed_curve25519\";\n }\n for (var _ref16 of devices) {\n var _ref15 = _slicedToArray(_ref16, 2);\n var userId = _ref15[0];\n var _deviceId = _ref15[1];\n var query = queries[userId] || {};\n safeSet(queries, userId, query);\n safeSet(query, _deviceId, keyAlgorithm);\n }\n var content = {\n one_time_keys: queries\n };\n if (timeout) {\n content.timeout = timeout;\n }\n var path = \"/keys/claim\";\n return this.http.authedRequest(Method.Post, path, undefined, content);\n }\n\n /**\n * Ask the server for a list of users who have changed their device lists\n * between a pair of sync tokens\n *\n *\n * @returns Promise which resolves: result object. Rejects: with\n * an error response ({@link MatrixError}).\n */\n getKeyChanges(oldToken, newToken) {\n var qps = {\n from: oldToken,\n to: newToken\n };\n return this.http.authedRequest(Method.Get, \"/keys/changes\", qps);\n }\n uploadDeviceSigningKeys(auth, keys) {\n // API returns empty object\n var data = Object.assign({}, keys);\n if (auth) Object.assign(data, {\n auth\n });\n return this.http.authedRequest(Method.Post, \"/keys/device_signing/upload\", undefined, data, {\n prefix: ClientPrefix.Unstable\n });\n }\n\n /**\n * Register with an identity server using the OpenID token from the user's\n * Homeserver, which can be retrieved via\n * {@link MatrixClient#getOpenIdToken}.\n *\n * Note that the `/account/register` endpoint (as well as IS authentication in\n * general) was added as part of the v2 API version.\n *\n * @returns Promise which resolves: with object containing an Identity\n * Server access token.\n * @returns Rejects: with an error response.\n */\n registerWithIdentityServer(hsOpenIdToken) {\n if (!this.idBaseUrl) {\n throw new Error(\"No identity server base URL set\");\n }\n var uri = this.http.getUrl(\"/account/register\", undefined, IdentityPrefix.V2, this.idBaseUrl);\n return this.http.requestOtherUrl(Method.Post, uri, hsOpenIdToken);\n }\n\n /**\n * Requests an email verification token directly from an identity server.\n *\n * This API is used as part of binding an email for discovery on an identity\n * server. The validation data that results should be passed to the\n * `bindThreePid` method to complete the binding process.\n *\n * @param email - The email address to request a token for\n * @param clientSecret - A secret binary string generated by the client.\n * It is recommended this be around 16 ASCII characters.\n * @param sendAttempt - If an identity server sees a duplicate request\n * with the same sendAttempt, it will not send another email.\n * To request another email to be sent, use a larger value for\n * the sendAttempt param as was used in the previous request.\n * @param nextLink - Optional If specified, the client will be redirected\n * to this link after validation.\n * @param identityAccessToken - The `access_token` field of the identity\n * server `/account/register` response (see {@link registerWithIdentityServer}).\n *\n * @returns Promise which resolves: TODO\n * @returns Rejects: with an error response.\n * @throws Error if no identity server is set\n */\n requestEmailToken(email, clientSecret, sendAttempt, nextLink, identityAccessToken) {\n var params = {\n client_secret: clientSecret,\n email: email,\n send_attempt: sendAttempt === null || sendAttempt === void 0 ? void 0 : sendAttempt.toString()\n };\n if (nextLink) {\n params.next_link = nextLink;\n }\n return this.http.idServerRequest(Method.Post, \"/validate/email/requestToken\", params, IdentityPrefix.V2, identityAccessToken);\n }\n\n /**\n * Requests a MSISDN verification token directly from an identity server.\n *\n * This API is used as part of binding a MSISDN for discovery on an identity\n * server. The validation data that results should be passed to the\n * `bindThreePid` method to complete the binding process.\n *\n * @param phoneCountry - The ISO 3166-1 alpha-2 code for the country in\n * which phoneNumber should be parsed relative to.\n * @param phoneNumber - The phone number, in national or international\n * format\n * @param clientSecret - A secret binary string generated by the client.\n * It is recommended this be around 16 ASCII characters.\n * @param sendAttempt - If an identity server sees a duplicate request\n * with the same sendAttempt, it will not send another SMS.\n * To request another SMS to be sent, use a larger value for\n * the sendAttempt param as was used in the previous request.\n * @param nextLink - Optional If specified, the client will be redirected\n * to this link after validation.\n * @param identityAccessToken - The `access_token` field of the Identity\n * Server `/account/register` response (see {@link registerWithIdentityServer}).\n *\n * @returns Promise which resolves to an object with a sid string\n * @returns Rejects: with an error response.\n * @throws Error if no identity server is set\n */\n requestMsisdnToken(phoneCountry, phoneNumber, clientSecret, sendAttempt, nextLink, identityAccessToken) {\n var params = {\n client_secret: clientSecret,\n country: phoneCountry,\n phone_number: phoneNumber,\n send_attempt: sendAttempt === null || sendAttempt === void 0 ? void 0 : sendAttempt.toString()\n };\n if (nextLink) {\n params.next_link = nextLink;\n }\n return this.http.idServerRequest(Method.Post, \"/validate/msisdn/requestToken\", params, IdentityPrefix.V2, identityAccessToken);\n }\n\n /**\n * Submits a MSISDN token to the identity server\n *\n * This is used when submitting the code sent by SMS to a phone number.\n * The identity server has an equivalent API for email but the js-sdk does\n * not expose this, since email is normally validated by the user clicking\n * a link rather than entering a code.\n *\n * @param sid - The sid given in the response to requestToken\n * @param clientSecret - A secret binary string generated by the client.\n * This must be the same value submitted in the requestToken call.\n * @param msisdnToken - The MSISDN token, as entered by the user.\n * @param identityAccessToken - The `access_token` field of the Identity\n * Server `/account/register` response (see {@link registerWithIdentityServer}).\n * Some legacy identity servers had no authentication here.\n *\n * @returns Promise which resolves: Object, containing success boolean.\n * @returns Rejects: with an error response.\n * @throws Error if No identity server is set\n */\n submitMsisdnToken(sid, clientSecret, msisdnToken, identityAccessToken) {\n var params = {\n sid: sid,\n client_secret: clientSecret,\n token: msisdnToken\n };\n return this.http.idServerRequest(Method.Post, \"/validate/msisdn/submitToken\", params, IdentityPrefix.V2, identityAccessToken !== null && identityAccessToken !== void 0 ? identityAccessToken : undefined);\n }\n\n /**\n * Submits a MSISDN token to an arbitrary URL.\n *\n * This is used when submitting the code sent by SMS to a phone number in the\n * newer 3PID flow where the homeserver validates 3PID ownership (as part of\n * `requestAdd3pidMsisdnToken`). The homeserver response may include a\n * `submit_url` to specify where the token should be sent, and this helper can\n * be used to pass the token to this URL.\n *\n * @param url - The URL to submit the token to\n * @param sid - The sid given in the response to requestToken\n * @param clientSecret - A secret binary string generated by the client.\n * This must be the same value submitted in the requestToken call.\n * @param msisdnToken - The MSISDN token, as entered by the user.\n *\n * @returns Promise which resolves: Object, containing success boolean.\n * @returns Rejects: with an error response.\n */\n submitMsisdnTokenOtherUrl(url, sid, clientSecret, msisdnToken) {\n var params = {\n sid: sid,\n client_secret: clientSecret,\n token: msisdnToken\n };\n return this.http.requestOtherUrl(Method.Post, url, params);\n }\n\n /**\n * Gets the V2 hashing information from the identity server. Primarily useful for\n * lookups.\n * @param identityAccessToken - The access token for the identity server.\n * @returns The hashing information for the identity server.\n */\n getIdentityHashDetails(identityAccessToken) {\n return this.http.idServerRequest(Method.Get, \"/hash_details\", undefined, IdentityPrefix.V2, identityAccessToken);\n }\n\n /**\n * Performs a hashed lookup of addresses against the identity server. This is\n * only supported on identity servers which have at least the version 2 API.\n * @param addressPairs - An array of 2 element arrays.\n * The first element of each pair is the address, the second is the 3PID medium.\n * Eg: `[\"email@example.org\", \"email\"]`\n * @param identityAccessToken - The access token for the identity server.\n * @returns A collection of address mappings to\n * found MXIDs. Results where no user could be found will not be listed.\n */\n identityHashedLookup(addressPairs, identityAccessToken) {\n var _this74 = this;\n return _asyncToGenerator(function* () {\n var params = {\n // addresses: [\"email@example.org\", \"10005550000\"],\n // algorithm: \"sha256\",\n // pepper: \"abc123\"\n };\n\n // Get hash information first before trying to do a lookup\n var hashes = yield _this74.getIdentityHashDetails(identityAccessToken);\n if (!hashes || !hashes[\"lookup_pepper\"] || !hashes[\"algorithms\"]) {\n throw new Error(\"Unsupported identity server: bad response\");\n }\n params[\"pepper\"] = hashes[\"lookup_pepper\"];\n var localMapping = {\n // hashed identifier => plain text address\n // For use in this function's return format\n };\n\n // When picking an algorithm, we pick the hashed over no hashes\n if (hashes[\"algorithms\"].includes(\"sha256\")) {\n params[\"addresses\"] = yield Promise.all(addressPairs.map(/*#__PURE__*/function () {\n var _ref17 = _asyncToGenerator(function* (p) {\n var addr = p[0].toLowerCase(); // lowercase to get consistent hashes\n var med = p[1].toLowerCase();\n var hashBuffer = yield sha256(\"\".concat(addr, \" \").concat(med, \" \").concat(params[\"pepper\"]));\n var hashed = encodeUnpaddedBase64Url(hashBuffer);\n\n // Map the hash to a known (case-sensitive) address. We use the case\n // sensitive version because the caller might be expecting that.\n localMapping[hashed] = p[0];\n return hashed;\n });\n return function (_x4) {\n return _ref17.apply(this, arguments);\n };\n }()));\n params[\"algorithm\"] = \"sha256\";\n } else if (hashes[\"algorithms\"].includes(\"none\")) {\n params[\"addresses\"] = addressPairs.map(p => {\n var addr = p[0].toLowerCase(); // lowercase to get consistent hashes\n var med = p[1].toLowerCase();\n var unhashed = \"\".concat(addr, \" \").concat(med);\n // Map the unhashed values to a known (case-sensitive) address. We use\n // the case-sensitive version because the caller might be expecting that.\n localMapping[unhashed] = p[0];\n return unhashed;\n });\n params[\"algorithm\"] = \"none\";\n } else {\n throw new Error(\"Unsupported identity server: unknown hash algorithm\");\n }\n var response = yield _this74.http.idServerRequest(Method.Post, \"/lookup\", params, IdentityPrefix.V2, identityAccessToken);\n if (!(response !== null && response !== void 0 && response[\"mappings\"])) return []; // no results\n\n var foundAddresses = [];\n for (var hashed of Object.keys(response[\"mappings\"])) {\n var mxid = response[\"mappings\"][hashed];\n var plainAddress = localMapping[hashed];\n if (!plainAddress) {\n throw new Error(\"Identity server returned more results than expected\");\n }\n foundAddresses.push({\n address: plainAddress,\n mxid\n });\n }\n return foundAddresses;\n })();\n }\n\n /**\n * Looks up the public Matrix ID mapping for a given 3rd party\n * identifier from the identity server\n *\n * @param medium - The medium of the threepid, eg. 'email'\n * @param address - The textual address of the threepid\n * @param identityAccessToken - The `access_token` field of the Identity\n * Server `/account/register` response (see {@link registerWithIdentityServer}).\n *\n * @returns Promise which resolves: A threepid mapping\n * object or the empty object if no mapping\n * exists\n * @returns Rejects: with an error response.\n */\n lookupThreePid(medium, address, identityAccessToken) {\n var _this75 = this;\n return _asyncToGenerator(function* () {\n // Note: we're using the V2 API by calling this function, but our\n // function contract requires a V1 response. We therefore have to\n // convert it manually.\n var response = yield _this75.identityHashedLookup([[address, medium]], identityAccessToken);\n var result = response.find(p => p.address === address);\n if (!result) {\n return {};\n }\n var mapping = {\n address,\n medium,\n mxid: result.mxid\n\n // We can't reasonably fill these parameters:\n // not_before\n // not_after\n // ts\n // signatures\n };\n return mapping;\n })();\n }\n\n /**\n * Looks up the public Matrix ID mappings for multiple 3PIDs.\n *\n * @param query - Array of arrays containing\n * [medium, address]\n * @param identityAccessToken - The `access_token` field of the Identity\n * Server `/account/register` response (see {@link registerWithIdentityServer}).\n *\n * @returns Promise which resolves: Lookup results from IS.\n * @returns Rejects: with an error response.\n */\n bulkLookupThreePids(query, identityAccessToken) {\n var _this76 = this;\n return _asyncToGenerator(function* () {\n // Note: we're using the V2 API by calling this function, but our\n // function contract requires a V1 response. We therefore have to\n // convert it manually.\n var response = yield _this76.identityHashedLookup(\n // We have to reverse the query order to get [address, medium] pairs\n query.map(p => [p[1], p[0]]), identityAccessToken);\n var v1results = [];\n var _loop2 = function* _loop2(mapping) {\n var originalQuery = query.find(p => p[1] === mapping.address);\n if (!originalQuery) {\n throw new Error(\"Identity sever returned unexpected results\");\n }\n v1results.push([originalQuery[0],\n // medium\n mapping.address, mapping.mxid]);\n };\n for (var mapping of response) {\n yield* _loop2(mapping);\n }\n return {\n threepids: v1results\n };\n })();\n }\n\n /**\n * Get account info from the identity server. This is useful as a neutral check\n * to verify that other APIs are likely to approve access by testing that the\n * token is valid, terms have been agreed, etc.\n *\n * @param identityAccessToken - The `access_token` field of the Identity\n * Server `/account/register` response (see {@link registerWithIdentityServer}).\n *\n * @returns Promise which resolves: an object with account info.\n * @returns Rejects: with an error response.\n */\n getIdentityAccount(identityAccessToken) {\n return this.http.idServerRequest(Method.Get, \"/account\", undefined, IdentityPrefix.V2, identityAccessToken);\n }\n\n /**\n * Send an event to a specific list of devices.\n * This is a low-level API that simply wraps the HTTP API\n * call to send to-device messages. We recommend using\n * queueToDevice() which is a higher level API.\n *\n * @param eventType - type of event to send\n * content to send. Map from user_id to device_id to content object.\n * @param txnId - transaction id. One will be made up if not\n * supplied.\n * @returns Promise which resolves: to an empty object `{}`\n */\n sendToDevice(eventType, contentMap, txnId) {\n var path = utils.encodeUri(\"/sendToDevice/$eventType/$txnId\", {\n $eventType: eventType,\n $txnId: txnId ? txnId : this.makeTxnId()\n });\n var body = {\n messages: utils.recursiveMapToObject(contentMap)\n };\n var targets = new Map();\n for (var _ref20 of contentMap) {\n var _ref19 = _slicedToArray(_ref20, 2);\n var userId = _ref19[0];\n var deviceMessages = _ref19[1];\n targets.set(userId, Array.from(deviceMessages.keys()));\n }\n this.logger.debug(\"PUT \".concat(path), targets);\n return this.http.authedRequest(Method.Put, path, undefined, body);\n }\n\n /**\n * This will encrypt the payload for all devices in the list and will queue it.\n * The type of the sent to-device message will be `m.room.encrypted`.\n * @param eventType - The type of event to send\n * @param devices - The list of devices to send the event to.\n * @param payload - The payload to send. This will be encrypted.\n * @returns Promise which resolves once queued there is no error feedback when sending fails.\n */\n encryptAndSendToDevice(eventType, devices, payload) {\n var _this77 = this;\n return _asyncToGenerator(function* () {\n if (!_this77.cryptoBackend) {\n throw new Error(\"Cannot encrypt to device event, your client does not support encryption.\");\n }\n var batch = yield _this77.cryptoBackend.encryptToDeviceMessages(eventType, devices, payload);\n\n // TODO The batch mechanism removes all possibility to get error feedbacks..\n // We might want instead to do the API call directly and pass the errors back.\n yield _this77.queueToDevice(batch);\n })();\n }\n\n /**\n * Sends events directly to specific devices using Matrix's to-device\n * messaging system. The batch will be split up into appropriately sized\n * batches for sending and stored in the store so they can be retried\n * later if they fail to send. Retries will happen automatically.\n * @param batch - The to-device messages to send\n */\n queueToDevice(batch) {\n return this.toDeviceMessageQueue.queueBatch(batch);\n }\n\n /**\n * Get the third party protocols that can be reached using\n * this HS\n * @returns Promise which resolves to the result object\n */\n getThirdpartyProtocols() {\n return this.http.authedRequest(Method.Get, \"/thirdparty/protocols\").then(response => {\n // sanity check\n if (!response || typeof response !== \"object\") {\n throw new Error(\"/thirdparty/protocols did not return an object: \".concat(response));\n }\n return response;\n });\n }\n\n /**\n * Get information on how a specific place on a third party protocol\n * may be reached.\n * @param protocol - The protocol given in getThirdpartyProtocols()\n * @param params - Protocol-specific parameters, as given in the\n * response to getThirdpartyProtocols()\n * @returns Promise which resolves to the result object\n */\n getThirdpartyLocation(protocol, params) {\n var path = utils.encodeUri(\"/thirdparty/location/$protocol\", {\n $protocol: protocol\n });\n return this.http.authedRequest(Method.Get, path, params);\n }\n\n /**\n * Get information on how a specific user on a third party protocol\n * may be reached.\n * @param protocol - The protocol given in getThirdpartyProtocols()\n * @param params - Protocol-specific parameters, as given in the\n * response to getThirdpartyProtocols()\n * @returns Promise which resolves to the result object\n */\n getThirdpartyUser(protocol, params) {\n var path = utils.encodeUri(\"/thirdparty/user/$protocol\", {\n $protocol: protocol\n });\n return this.http.authedRequest(Method.Get, path, params);\n }\n getTerms(serviceType, baseUrl) {\n var url = this.termsUrlForService(serviceType, baseUrl);\n return this.http.requestOtherUrl(Method.Get, url);\n }\n agreeToTerms(serviceType, baseUrl, accessToken, termsUrls) {\n var url = this.termsUrlForService(serviceType, baseUrl);\n var headers = {\n Authorization: \"Bearer \" + accessToken\n };\n return this.http.requestOtherUrl(Method.Post, url, {\n user_accepts: termsUrls\n }, {\n headers\n });\n }\n\n /**\n * Reports an event as inappropriate to the server, which may then notify the appropriate people.\n * @param roomId - The room in which the event being reported is located.\n * @param eventId - The event to report.\n * @param score - The score to rate this content as where -100 is most offensive and 0 is inoffensive.\n * @param reason - The reason the content is being reported. May be blank.\n * @returns Promise which resolves to an empty object if successful\n */\n reportEvent(roomId, eventId, score, reason) {\n var path = utils.encodeUri(\"/rooms/$roomId/report/$eventId\", {\n $roomId: roomId,\n $eventId: eventId\n });\n return this.http.authedRequest(Method.Post, path, undefined, {\n score,\n reason\n });\n }\n\n /**\n * Reports a room as inappropriate to the server, which may then notify the appropriate people.\n *\n * This API was introduced in Matrix v1.13.\n *\n * @param roomId - The room being reported.\n * @param reason - The reason the room is being reported. May be blank.\n * @returns Promise which resolves to an empty object if successful\n */\n reportRoom(roomId, reason) {\n var path = utils.encodeUri(\"/rooms/$roomId/report\", {\n $roomId: roomId\n });\n return this.http.authedRequest(Method.Post, path, undefined, {\n reason\n });\n }\n\n /**\n * Fetches or paginates a room hierarchy asmatrix-js-sdk/spec/unit/matrix-client.spec.ts defined by MSC2946.\n * Falls back gracefully to sourcing its data from `getSpaceSummary` if this API is not yet supported by the server.\n * @param roomId - The ID of the space-room to use as the root of the summary.\n * @param limit - The maximum number of rooms to return per page.\n * @param maxDepth - The maximum depth in the tree from the root room to return.\n * @param suggestedOnly - Whether to only return rooms with suggested=true.\n * @param fromToken - The opaque token to paginate a previous request.\n * @returns the response, with next_batch & rooms fields.\n */\n getRoomHierarchy(roomId, limit, maxDepth) {\n var suggestedOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var fromToken = arguments.length > 4 ? arguments[4] : undefined;\n var path = utils.encodeUri(\"/rooms/$roomId/hierarchy\", {\n $roomId: roomId\n });\n var queryParams = {\n suggested_only: String(suggestedOnly),\n max_depth: maxDepth === null || maxDepth === void 0 ? void 0 : maxDepth.toString(),\n from: fromToken,\n limit: limit === null || limit === void 0 ? void 0 : limit.toString()\n };\n return this.http.authedRequest(Method.Get, path, queryParams, undefined, {\n prefix: ClientPrefix.V1\n }).catch(e => {\n if (e.errcode === \"M_UNRECOGNIZED\") {\n // fall back to the prefixed hierarchy API.\n return this.http.authedRequest(Method.Get, path, queryParams, undefined, {\n prefix: \"/_matrix/client/unstable/org.matrix.msc2946\"\n });\n }\n throw e;\n });\n }\n\n /**\n * Creates a new file tree space with the given name. The client will pick\n * defaults for how it expects to be able to support the remaining API offered\n * by the returned class.\n *\n * Note that this is UNSTABLE and may have breaking changes without notice.\n * @param name - The name of the tree space.\n * @returns Promise which resolves to the created space.\n */\n unstableCreateFileTree(name) {\n var _this78 = this;\n return _asyncToGenerator(function* () {\n var _yield$_this78$create = yield _this78.createRoom({\n name: name,\n preset: Preset.PrivateChat,\n power_level_content_override: _objectSpread(_objectSpread({}, DEFAULT_TREE_POWER_LEVELS_TEMPLATE), {}, {\n users: {\n [_this78.getUserId()]: 100\n }\n }),\n creation_content: {\n [RoomCreateTypeField]: RoomType.Space\n },\n initial_state: [{\n type: UNSTABLE_MSC3088_PURPOSE.name,\n state_key: UNSTABLE_MSC3089_TREE_SUBTYPE.name,\n content: {\n [UNSTABLE_MSC3088_ENABLED.name]: true\n }\n }, {\n type: EventType.RoomEncryption,\n state_key: \"\",\n content: {\n algorithm: \"m.megolm.v1.aes-sha2\"\n }\n }]\n }),\n roomId = _yield$_this78$create.room_id;\n return new MSC3089TreeSpace(_this78, roomId);\n })();\n }\n\n /**\n * Gets a reference to a tree space, if the room ID given is a tree space. If the room\n * does not appear to be a tree space then null is returned.\n *\n * Note that this is UNSTABLE and may have breaking changes without notice.\n * @param roomId - The room ID to get a tree space reference for.\n * @returns The tree space, or null if not a tree space.\n */\n unstableGetFileTreeSpace(roomId) {\n var _purposeEvent$getCont, _createEvent$getConte;\n var room = this.getRoom(roomId);\n if ((room === null || room === void 0 ? void 0 : room.getMyMembership()) !== KnownMembership.Join) return null;\n var createEvent = room.currentState.getStateEvents(EventType.RoomCreate, \"\");\n var purposeEvent = room.currentState.getStateEvents(UNSTABLE_MSC3088_PURPOSE.name, UNSTABLE_MSC3089_TREE_SUBTYPE.name);\n if (!createEvent) throw new Error(\"Expected single room create event\");\n if (!(purposeEvent !== null && purposeEvent !== void 0 && (_purposeEvent$getCont = purposeEvent.getContent()) !== null && _purposeEvent$getCont !== void 0 && _purposeEvent$getCont[UNSTABLE_MSC3088_ENABLED.name])) return null;\n if (((_createEvent$getConte = createEvent.getContent()) === null || _createEvent$getConte === void 0 ? void 0 : _createEvent$getConte[RoomCreateTypeField]) !== RoomType.Space) return null;\n return new MSC3089TreeSpace(this, roomId);\n }\n\n /**\n * Perform a single MSC3575 sliding sync request.\n * @param req - The request to make.\n * @param proxyBaseUrl - The base URL for the sliding sync proxy.\n * @param abortSignal - Optional signal to abort request mid-flight.\n * @returns The sliding sync response, or a standard error.\n * @throws on non 2xx status codes with an object with a field \"httpStatus\":number.\n */\n slidingSync(req, proxyBaseUrl, abortSignal) {\n var qps = {};\n if (req.pos) {\n qps.pos = req.pos;\n delete req.pos;\n }\n if (req.timeout) {\n qps.timeout = req.timeout;\n delete req.timeout;\n }\n var clientTimeout = req.clientTimeout;\n delete req.clientTimeout;\n return this.http.authedRequest(Method.Post, \"/sync\", qps, req, {\n prefix: \"/_matrix/client/unstable/org.matrix.simplified_msc3575\",\n baseUrl: proxyBaseUrl,\n localTimeoutMs: clientTimeout,\n abortSignal\n });\n }\n\n /**\n * A helper to determine thread support\n * @returns a boolean to determine if threads are enabled\n */\n supportsThreads() {\n var _this$clientOpts4;\n return ((_this$clientOpts4 = this.clientOpts) === null || _this$clientOpts4 === void 0 ? void 0 : _this$clientOpts4.threadSupport) || false;\n }\n\n /**\n * A helper to determine intentional mentions support\n * @returns a boolean to determine if intentional mentions are enabled on the server\n * @experimental\n */\n supportsIntentionalMentions() {\n return this.canSupport.get(Feature.IntentionalMentions) !== ServerSupport.Unsupported;\n }\n\n /**\n * Fetches the summary of a room as defined by an initial version of MSC3266 and implemented in Synapse\n * Proposed at https://github.com/matrix-org/matrix-doc/pull/3266\n * @param roomIdOrAlias - The ID or alias of the room to get the summary of.\n * @param via - The list of servers which know about the room if only an ID was provided.\n */\n getRoomSummary(roomIdOrAlias, via) {\n var _this79 = this;\n return _asyncToGenerator(function* () {\n var paramOpts = {\n prefix: \"/_matrix/client/unstable/im.nheko.summary\"\n };\n try {\n var path = utils.encodeUri(\"/summary/$roomid\", {\n $roomid: roomIdOrAlias\n });\n return yield _this79.http.authedRequest(Method.Get, path, {\n via\n }, undefined, paramOpts);\n } catch (e) {\n if (e instanceof MatrixError && e.errcode === \"M_UNRECOGNIZED\") {\n var _path = utils.encodeUri(\"/rooms/$roomid/summary\", {\n $roomid: roomIdOrAlias\n });\n return yield _this79.http.authedRequest(Method.Get, _path, {\n via\n }, undefined, paramOpts);\n } else {\n throw e;\n }\n }\n })();\n }\n\n /**\n * Processes a list of threaded events and adds them to their respective timelines\n * @param room - the room the adds the threaded events\n * @param threadedEvents - an array of the threaded events\n * @param toStartOfTimeline - the direction in which we want to add the events\n */\n processThreadEvents(room, threadedEvents, toStartOfTimeline) {\n room.processThreadedEvents(threadedEvents, toStartOfTimeline);\n }\n\n /**\n * Processes a list of thread roots and creates a thread model\n * @param room - the room to create the threads in\n * @param threadedEvents - an array of thread roots\n * @param toStartOfTimeline - the direction\n */\n processThreadRoots(room, threadedEvents, toStartOfTimeline) {\n if (!this.supportsThreads()) return;\n room.processThreadRoots(threadedEvents, toStartOfTimeline);\n }\n processBeaconEvents(room, events) {\n this.processAggregatedTimelineEvents(room, events);\n }\n\n /**\n * Calls aggregation functions for event types that are aggregated\n * Polls and location beacons\n * @param room - room the events belong to\n * @param events - timeline events to be processed\n * @returns\n */\n processAggregatedTimelineEvents(room, events) {\n if (!(events !== null && events !== void 0 && events.length)) return;\n if (!room) return;\n room.currentState.processBeaconEvents(events, this);\n room.processPollEvents(events);\n }\n\n /**\n * Fetches information about the user for the configured access token.\n */\n whoami() {\n var _this80 = this;\n return _asyncToGenerator(function* () {\n return _this80.http.authedRequest(Method.Get, \"/account/whoami\");\n })();\n }\n\n /**\n * Find the event_id closest to the given timestamp in the given direction.\n * @returns Resolves: A promise of an object containing the event_id and\n * origin_server_ts of the closest event to the timestamp in the given direction\n * @returns Rejects: when the request fails (module:http-api.MatrixError)\n */\n timestampToEvent(roomId, timestamp, dir) {\n var _this81 = this;\n return _asyncToGenerator(function* () {\n var path = utils.encodeUri(\"/rooms/$roomId/timestamp_to_event\", {\n $roomId: roomId\n });\n var queryParams = {\n ts: timestamp.toString(),\n dir: dir\n };\n try {\n return yield _this81.http.authedRequest(Method.Get, path, queryParams, undefined, {\n prefix: ClientPrefix.V1\n });\n } catch (err) {\n // Fallback to the prefixed unstable endpoint. Since the stable endpoint is\n // new, we should also try the unstable endpoint before giving up. We can\n // remove this fallback request in a year (remove after 2023-11-28).\n if (err.errcode === \"M_UNRECOGNIZED\" && (\n // XXX: The 400 status code check should be removed in the future\n // when Synapse is compliant with MSC3743.\n err.httpStatus === 400 ||\n // This the correct standard status code for an unsupported\n // endpoint according to MSC3743. Not Found and Method Not Allowed\n // both indicate that this endpoint+verb combination is\n // not supported.\n err.httpStatus === 404 || err.httpStatus === 405)) {\n return yield _this81.http.authedRequest(Method.Get, path, queryParams, undefined, {\n prefix: \"/_matrix/client/unstable/org.matrix.msc3030\"\n });\n }\n throw err;\n }\n })();\n }\n\n /**\n * Discover and validate the auth metadata for the OAuth 2.0 API.\n *\n * Fetches /auth_metadata falling back to legacy implementation using /auth_issuer followed by\n * https://oidc-issuer.example.com/.well-known/openid-configuration and other files linked therein.\n * When successful, validated metadata is returned.\n *\n * @returns validated authentication metadata and optionally signing keys\n * @throws when delegated auth config is invalid or unreachable\n */\n getAuthMetadata() {\n var _this82 = this;\n return _asyncToGenerator(function* () {\n var authMetadata;\n try {\n var useStable = yield _this82.isVersionSupported(\"v1.15\");\n authMetadata = yield _this82.http.request(Method.Get, \"/auth_metadata\", undefined, undefined, {\n prefix: useStable ? ClientPrefix.V1 : ClientPrefix.Unstable + \"/org.matrix.msc2965\"\n });\n } catch (e) {\n if (e instanceof MatrixError && e.errcode === \"M_UNRECOGNIZED\") {\n // Fall back to older variant of MSC2965\n var _yield$_this82$http$r = yield _this82.http.request(Method.Get, \"/auth_issuer\", undefined, undefined, {\n prefix: ClientPrefix.Unstable + \"/org.matrix.msc2965\"\n }),\n issuer = _yield$_this82$http$r.issuer;\n return discoverAndValidateOIDCIssuerWellKnown(issuer);\n }\n throw e;\n }\n return validateAuthMetadataAndKeys(authMetadata);\n })();\n }\n}\n_defineProperty(MatrixClient, \"RESTORE_BACKUP_ERROR_BAD_KEY\", \"RESTORE_BACKUP_ERROR_BAD_KEY\");\nfunction getUnstableDelayQueryOpts(delayOpts) {\n return Object.fromEntries(Object.entries(delayOpts).map(_ref21 => {\n var _ref22 = _slicedToArray(_ref21, 2),\n k = _ref22[0],\n v = _ref22[1];\n return [\"\".concat(UNSTABLE_MSC4140_DELAYED_EVENTS, \".\").concat(k), v];\n }));\n}\n\n/**\n * recalculates an accurate notifications count on event decryption.\n * Servers do not have enough knowledge about encrypted events to calculate an\n * accurate notification_count\n */\nexport function fixNotificationCountOnDecryption(cli, event) {\n var _actions$tweaks;\n var ourUserId = cli.getUserId();\n var eventId = event.getId();\n var room = cli.getRoom(event.getRoomId());\n if (!room || !ourUserId || !eventId) return;\n\n // Due to threads, we can get relation events (eg. edits & reactions) that never get\n // added to a timeline and so cannot be found in their own room (their edit / reaction\n // still applies to the event it needs to, so it doesn't matter too much). However, if\n // we try to process notification about this event, we'll get very confused because we\n // won't be able to find the event in the room, so will assume it must be unread, even\n // if it's actually read. We therefore skip anything that isn't in the room. This isn't\n // *great*, so if we can fix the homeless events (eg. with MSC4023) then we should probably\n // remove this workaround.\n if (!room.findEventById(eventId)) {\n logger.info(\"Decrypted event \".concat(event.getId(), \" is not in room \").concat(room.roomId, \": ignoring\"));\n return;\n }\n var isThreadEvent = !!event.threadRootId && !event.isThreadRoot;\n var hasReadEvent;\n if (isThreadEvent) {\n var thread = room.getThread(event.threadRootId);\n hasReadEvent = thread ? thread.hasUserReadEvent(ourUserId, eventId) :\n // If the thread object does not exist in the room yet, we don't\n // want to calculate notification for this event yet. We have not\n // restored the read receipts yet and can't accurately calculate\n // notifications at this stage.\n //\n // This issue can likely go away when MSC3874 is implemented\n true;\n } else {\n hasReadEvent = room.hasUserReadEvent(ourUserId, eventId);\n }\n if (hasReadEvent) {\n // If the event has been read, ignore it.\n return;\n }\n var actions = cli.getPushActionsForEvent(event, true);\n\n // Ensure the unread counts are kept up to date if the event is encrypted\n // We also want to make sure that the notification count goes up if we already\n // have encrypted events to avoid other code from resetting 'highlight' to zero.\n var newHighlight = !!(actions !== null && actions !== void 0 && (_actions$tweaks = actions.tweaks) !== null && _actions$tweaks !== void 0 && _actions$tweaks.highlight);\n if (newHighlight) {\n // TODO: Handle mentions received while the client is offline\n // See also https://github.com/vector-im/element-web/issues/9069\n var newCount = room.getUnreadCountForEventContext(NotificationCountType.Highlight, event) + 1;\n if (isThreadEvent) {\n room.setThreadUnreadNotificationCount(event.threadRootId, NotificationCountType.Highlight, newCount);\n } else {\n room.setUnreadNotificationCount(NotificationCountType.Highlight, newCount);\n }\n }\n\n // `notify` is used in practice for incrementing the total count\n var newNotify = !!(actions !== null && actions !== void 0 && actions.notify);\n\n // The room total count is NEVER incremented by the server for encrypted rooms. We basically ignore\n // the server here as it's always going to tell us to increment for encrypted events.\n if (newNotify) {\n // Total count is used to typically increment a room notification counter, but not loudly highlight it.\n var _newCount = room.getUnreadCountForEventContext(NotificationCountType.Total, event) + 1;\n if (isThreadEvent) {\n room.setThreadUnreadNotificationCount(event.threadRootId, NotificationCountType.Total, _newCount);\n } else {\n room.setUnreadNotificationCount(NotificationCountType.Total, _newCount);\n }\n }\n}\n\n/**\n * Given an event, figure out the thread ID we should use for it in a receipt.\n *\n * This will either be \"main\", or event.threadRootId. For the thread root, or\n * e.g. reactions to the thread root, this will be main. For events inside the\n * thread, or e.g. reactions to them, this will be event.threadRootId.\n *\n * (Exported for test.)\n */\nexport function threadIdForReceipt(event) {\n return inMainTimelineForReceipt(event) ? MAIN_ROOM_TIMELINE : event.threadRootId;\n}\n\n/**\n * a) True for non-threaded messages, thread roots and non-thread relations to thread roots.\n * b) False for messages with thread relations to the thread root.\n * c) False for messages with any kind of relation to a message from case b.\n *\n * Note: true for redactions of messages that are in threads. Redacted messages\n * are not really in threads (because their relations are gone), so if they look\n * like they are in threads, that is a sign of a bug elsewhere. (At time of\n * writing, this bug definitely exists - messages are not moved to another\n * thread when they are redacted.)\n *\n * @returns true if this event is considered to be in the main timeline as far\n * as receipts are concerned.\n */\nexport function inMainTimelineForReceipt(event) {\n if (!event.threadRootId) {\n // Not in a thread: then it is in the main timeline\n return true;\n }\n if (event.isThreadRoot) {\n // Thread roots are in the main timeline. Note: the spec is ambiguous (or\n // wrong) on this - see\n // https://github.com/matrix-org/matrix-spec-proposals/pull/4037\n return true;\n }\n if (!event.isRelation()) {\n // If it's not related to anything, it can't be related via a chain of\n // relations to a thread root.\n //\n // Note: this is a bug, because how does it have a threadRootId if it is\n // neither a thread root, nor related to one?\n logger.warn(\"Event is not a relation or a thread root, but still has a threadRootId! id=\".concat(event.getId()));\n return true;\n }\n if (event.isRelation(THREAD_RELATION_TYPE.name)) {\n // It's a message in a thread - definitely not in the main timeline.\n return false;\n }\n var isRelatedToRoot = event.relationEventId === event.threadRootId;\n\n // If it's related to the thread root (and we already know it's not a thread\n // relation) then it's in the main timeline. If it's related to something\n // else, then it's in the thread (because it has a thread ID).\n return isRelatedToRoot;\n}\n//# sourceMappingURL=client.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/*\nCopyright 2021 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { PendingEventOrdering } from \"../client.js\";\nimport { TypedReEmitter } from \"../ReEmitter.js\";\nimport { RelationType } from \"../@types/event.js\";\nimport { MatrixEvent, MatrixEventEvent } from \"./event.js\";\nimport { Direction, EventTimeline } from \"./event-timeline.js\";\nimport { EventTimelineSet } from \"./event-timeline-set.js\";\nimport { RoomEvent } from \"./room.js\";\nimport { ServerControlledNamespacedValue } from \"../NamespacedValue.js\";\nimport { logger } from \"../logger.js\";\nimport { ReadReceipt } from \"./read-receipt.js\";\nimport { ReceiptType } from \"../@types/read_receipts.js\";\nimport { Feature, ServerSupport } from \"../feature.js\";\nexport var ThreadEvent = /*#__PURE__*/function (ThreadEvent) {\n ThreadEvent[\"New\"] = \"Thread.new\";\n ThreadEvent[\"Update\"] = \"Thread.update\";\n ThreadEvent[\"NewReply\"] = \"Thread.newReply\";\n ThreadEvent[\"ViewThread\"] = \"Thread.viewThread\";\n ThreadEvent[\"Delete\"] = \"Thread.delete\";\n return ThreadEvent;\n}({});\nexport var FeatureSupport = /*#__PURE__*/function (FeatureSupport) {\n FeatureSupport[FeatureSupport[\"None\"] = 0] = \"None\";\n FeatureSupport[FeatureSupport[\"Experimental\"] = 1] = \"Experimental\";\n FeatureSupport[FeatureSupport[\"Stable\"] = 2] = \"Stable\";\n return FeatureSupport;\n}({});\nexport function determineFeatureSupport(stable, unstable) {\n if (stable) {\n return FeatureSupport.Stable;\n } else if (unstable) {\n return FeatureSupport.Experimental;\n } else {\n return FeatureSupport.None;\n }\n}\nexport class Thread extends ReadReceipt {\n constructor(id, rootEvent, opts) {\n var _this, _opts$pendingEventOrd;\n // each Event in the thread adds a reemitter, so we could hit the listener limit.\n super();\n _this = this;\n this.id = id;\n this.rootEvent = rootEvent;\n /**\n * A reference to all the events ID at the bottom of the threads\n */\n _defineProperty(this, \"timelineSet\", void 0);\n _defineProperty(this, \"_currentUserParticipated\", false);\n _defineProperty(this, \"reEmitter\", void 0);\n /**\n * The last event in this thread, if we don't yet have this in the timeline.\n *\n * When we run {@link processRootEvent} (which I think happens during the\n * setting-up of the thread), we set this to the event pointed to by the\n * server in `latest_event` [1] that came through with the thread root.\n *\n * [1]: https://spec.matrix.org/v1.8/client-server-api/#server-side-aggregation-of-mthread-relationships\n *\n * Later, when we have populated the timeline, this is set to undefined, so\n * that methods like {@link replyToEvent} fall through to use lastReply,\n * which looks in the timeline for the latest event that is a \"thread reply\"\n * i.e. directly refers to the thread root with an m.thread relation.\n *\n * So it looks like this is only really relevant when initialEventsFetched\n * is false, because as soon as the initial events have been fetched, we\n * should have a proper chunk of timeline from the pagination fetch.\n *\n * If all replies in this thread are redacted, this is set to the root\n * event. I'm not clear what the meaning of this is, since usually after the\n * initial events have been fetched, lastEvent should be undefined.\n * In fact, the whole usage inside onRedaction looks suspect - it may be\n * that we were thinking lastEvent always refers to the actual last event,\n * but it only does so before initialEventsFetched becomes true.\n *\n * The usage of lastEvent inside {@link onEcho} looks suspicious, since I'd\n * think we probably mean {@link replyToEvent} there - we are trying not to\n * echo a duplicate event, and we probably want that behaviour even after\n * initialEventsFetched has become true.\n *\n * -- andyb\n */\n _defineProperty(this, \"lastEvent\", void 0);\n _defineProperty(this, \"replyCount\", 0);\n _defineProperty(this, \"lastPendingEvent\", void 0);\n _defineProperty(this, \"pendingReplyCount\", 0);\n _defineProperty(this, \"room\", void 0);\n _defineProperty(this, \"client\", void 0);\n _defineProperty(this, \"pendingEventOrdering\", void 0);\n _defineProperty(this, \"processRootEventPromise\", void 0);\n /**\n * Whether or not we need to fetch the initial set of events for the thread. We can\n * only do this if the server has support for it, so if it doesn't we just pretend\n * that we've already fetched them.\n */\n _defineProperty(this, \"initialEventsFetched\", !Thread.hasServerSideSupport);\n _defineProperty(this, \"initalEventFetchProm\", void 0);\n /**\n * An array of events to add to the timeline once the thread has been initialised\n * with server suppport.\n */\n _defineProperty(this, \"replayEvents\", []);\n _defineProperty(this, \"onTimelineReset\", /*#__PURE__*/_asyncToGenerator(function* () {\n // We hit a gappy sync, ask the server for an update\n yield _this.processRootEventPromise;\n _this.processRootEventPromise = undefined;\n }));\n _defineProperty(this, \"onBeforeRedaction\", (event, redaction) => {\n if (event !== null && event !== void 0 && event.isRelation(THREAD_RELATION_TYPE.name) && this.room.eventShouldLiveIn(event).threadId === this.id && event.getId() !== this.id &&\n // the root event isn't counted in the length so ignore this redaction\n !redaction.status // only respect it when it succeeds\n ) {\n this.replyCount--;\n this.updatePendingReplyCount();\n this.emit(ThreadEvent.Update, this);\n }\n });\n _defineProperty(this, \"onRedaction\", /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (event, room, threadRootId) {\n if (threadRootId !== _this.id) return; // ignore redactions for other timelines\n if (_this.replyCount <= 0) {\n for (var threadEvent of _this.timeline) {\n _this.clearEventMetadata(threadEvent);\n }\n _this.lastEvent = _this.rootEvent;\n _this._currentUserParticipated = false;\n _this.emit(ThreadEvent.Delete, _this);\n } else {\n var _this$lastEvent;\n if (((_this$lastEvent = _this.lastEvent) === null || _this$lastEvent === void 0 ? void 0 : _this$lastEvent.getId()) === event.getAssociatedId()) {\n // XXX: If our last event got redacted we query the server for the last event once again\n yield _this.processRootEventPromise;\n _this.processRootEventPromise = undefined;\n }\n yield _this.updateThreadMetadata();\n }\n });\n return function (_x, _x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n }());\n _defineProperty(this, \"onTimelineEvent\", (event, room, toStartOfTimeline) => {\n // Add a synthesized receipt when paginating forward in the timeline\n if (!toStartOfTimeline) {\n var sender = event.getSender();\n if (sender && room && this.shouldSendLocalEchoReceipt(sender, event)) {\n room.addLocalEchoReceipt(sender, event, ReceiptType.Read);\n }\n if (event.getId() !== this.id && event.isRelation(THREAD_RELATION_TYPE.name)) {\n this.replyCount++;\n }\n }\n this.onEcho(event, toStartOfTimeline !== null && toStartOfTimeline !== void 0 ? toStartOfTimeline : false);\n });\n _defineProperty(this, \"onLocalEcho\", event => {\n this.onEcho(event, false);\n });\n _defineProperty(this, \"onEcho\", /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(function* (event, toStartOfTimeline) {\n if (event.threadRootId !== _this.id) return; // ignore echoes for other timelines\n if (_this.lastEvent === event) return; // ignore duplicate events\n yield _this.updateThreadMetadata();\n if (!event.isRelation(THREAD_RELATION_TYPE.name)) return; // don't send a new reply event for reactions or edits\n if (toStartOfTimeline) return; // ignore messages added to the start of the timeline\n // Clear the lastEvent and instead start tracking locally using lastReply\n _this.lastEvent = undefined;\n _this.emit(ThreadEvent.NewReply, _this, event);\n });\n return function (_x4, _x5) {\n return _ref3.apply(this, arguments);\n };\n }());\n this.setMaxListeners(1000);\n if (!(opts !== null && opts !== void 0 && opts.room)) {\n // Logging/debugging for https://github.com/vector-im/element-web/issues/22141\n // Hope is that we end up with a more obvious stack trace.\n throw new Error(\"element-web#22141: A thread requires a room in order to function\");\n }\n this.room = opts.room;\n this.client = opts.client;\n this.pendingEventOrdering = (_opts$pendingEventOrd = opts.pendingEventOrdering) !== null && _opts$pendingEventOrd !== void 0 ? _opts$pendingEventOrd : PendingEventOrdering.Chronological;\n this.timelineSet = new EventTimelineSet(this.room, {\n timelineSupport: true,\n pendingEvents: true\n }, this.client, this);\n this.reEmitter = new TypedReEmitter(this);\n this.reEmitter.reEmit(this.timelineSet, [RoomEvent.Timeline, RoomEvent.TimelineReset]);\n this.room.on(MatrixEventEvent.BeforeRedaction, this.onBeforeRedaction);\n this.room.on(RoomEvent.Redaction, this.onRedaction);\n this.room.on(RoomEvent.LocalEchoUpdated, this.onLocalEcho);\n this.room.on(RoomEvent.TimelineReset, this.onTimelineReset);\n this.timelineSet.on(RoomEvent.Timeline, this.onTimelineEvent);\n this.processReceipts(opts.receipts);\n\n // even if this thread is thought to be originating from this client, we initialise it as we may be in a\n // gappy sync and a thread around this event may already exist.\n this.updateThreadMetadata();\n this.setEventMetadata(this.rootEvent);\n }\n fetchRootEvent() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n // Always fetch the root event, even if we already have it, so we can get the latest\n // state (via unsigned).\n try {\n var eventData = yield _this2.client.fetchRoomEvent(_this2.roomId, _this2.id);\n var mapper = _this2.client.getEventMapper();\n _this2.rootEvent = mapper(eventData); // will merge with existing event object if such is known\n } catch (e) {\n logger.error(\"Failed to fetch thread root to construct thread with\", e);\n }\n yield _this2.processEvent(_this2.rootEvent);\n })();\n }\n static setServerSideSupport(status) {\n Thread.hasServerSideSupport = status;\n // XXX: This global latching behaviour is really unexpected and means that you can't undo when moving to a server without support\n if (status !== FeatureSupport.Stable) {\n FILTER_RELATED_BY_SENDERS.setPreferUnstable(true);\n FILTER_RELATED_BY_REL_TYPES.setPreferUnstable(true);\n THREAD_RELATION_TYPE.setPreferUnstable(true);\n }\n }\n static setServerSideListSupport(status) {\n Thread.hasServerSideListSupport = status;\n }\n static setServerSideFwdPaginationSupport(status) {\n Thread.hasServerSideFwdPaginationSupport = status;\n }\n shouldSendLocalEchoReceipt(sender, event) {\n var _this$client$canSuppo;\n var recursionSupport = (_this$client$canSuppo = this.client.canSupport.get(Feature.RelationsRecursion)) !== null && _this$client$canSuppo !== void 0 ? _this$client$canSuppo : ServerSupport.Unsupported;\n if (recursionSupport === ServerSupport.Unsupported) {\n var _this$getReadReceiptF;\n // Normally we add a local receipt, but if we don't have\n // recursion support, then events may arrive out of order, so we\n // only create a receipt if it's after our existing receipt.\n var oldReceiptEventId = (_this$getReadReceiptF = this.getReadReceiptForUserId(sender)) === null || _this$getReadReceiptF === void 0 ? void 0 : _this$getReadReceiptF.eventId;\n if (oldReceiptEventId) {\n var receiptEvent = this.findEventById(oldReceiptEventId);\n if (receiptEvent && receiptEvent.getTs() > event.getTs()) {\n return false;\n }\n }\n }\n return true;\n }\n get roomState() {\n return this.room.getLiveTimeline().getState(EventTimeline.FORWARDS);\n }\n addEventToTimeline(event, toStartOfTimeline) {\n if (!this.findEventById(event.getId())) {\n this.timelineSet.addEventToTimeline(event, this.liveTimeline, {\n toStartOfTimeline,\n fromCache: false,\n roomState: this.roomState,\n addToState: false\n });\n }\n }\n\n /**\n * TEMPORARY. Only call this when MSC3981 is not available, and we have some\n * late-arriving events to insert, because we recursively found them as part\n * of populating a thread. When we have MSC3981 we won't need it, because\n * they will all be supplied by the homeserver in one request, and they will\n * already be in the right order in that response.\n * This is a copy of addEventToTimeline above, modified to call\n * insertEventIntoTimeline so this event is inserted into our best guess of\n * the right place based on timestamp. (We should be using Sync Order but we\n * don't have it.)\n *\n * @internal\n */\n insertEventIntoTimeline(event) {\n var eventId = event.getId();\n if (!eventId) {\n return;\n }\n // If the event is already in this thread, bail out\n if (this.findEventById(eventId)) {\n return;\n }\n this.timelineSet.insertEventIntoTimeline(event, this.liveTimeline, this.roomState, false);\n }\n addEvents(events, toStartOfTimeline) {\n events.forEach(ev => this.addEvent(ev, toStartOfTimeline, false));\n this.updateThreadMetadata();\n }\n\n /**\n * Add an event to the thread and updates\n * the tail/root references if needed\n * Will fire \"Thread.update\"\n * @param event - The event to add\n * @param toStartOfTimeline - whether the event is being added\n * to the start (and not the end) of the timeline.\n * @param emit - whether to emit the Update event if the thread was updated or not.\n */\n addEvent(event, toStartOfTimeline) {\n var emit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // Modify this event to point at our room's state, and mark its thread\n // as this.\n this.setEventMetadata(event);\n\n // Decide whether this event is going to be added at the end of the timeline.\n var lastReply = this.lastReply();\n var isNewestReply = !lastReply || event.localTimestamp >= lastReply.localTimestamp;\n if (!Thread.hasServerSideSupport) {\n // When there's no server-side support, just add it to the end of the timeline.\n this.addEventToTimeline(event, toStartOfTimeline);\n this.client.decryptEventIfNeeded(event);\n } else if (event.isRelation(RelationType.Annotation) || event.isRelation(RelationType.Replace)) {\n this.addRelatedThreadEvent(event, toStartOfTimeline);\n return;\n } else if (!toStartOfTimeline && isNewestReply) {\n // When we've asked for the event to be added to the end,\n // and this event belongs at the end, add it.\n this.addEventToTimeline(event, false);\n this.fetchEditsWhereNeeded(event);\n } else {\n // Otherwise, we should add it, but we suspect it is out of order.\n // This may be because we've just created the thread object and are\n // still fetching events, in which case add it where we think is sensible\n // and it will be removed and replaced with the events from the pagination\n // request once that completes.\n if (toStartOfTimeline) {\n // If we're adding at the start of the timeline, it doesn't\n // matter that it's out of order.\n this.addEventToTimeline(event, toStartOfTimeline);\n } else {\n // We think this event might be out of order, because isNewestReply\n // is false (otherwise we would have gone into the earlier if\n // clause), so try to insert it in the right place based on\n // timestamp.\n this.insertEventIntoTimeline(event);\n }\n }\n if (event.getId() !== this.id && event.isRelation(THREAD_RELATION_TYPE.name) && !toStartOfTimeline && isNewestReply) {\n // Clear the last event as we have the latest end of the timeline\n this.lastEvent = undefined;\n }\n if (emit) {\n this.emit(ThreadEvent.NewReply, this, event);\n this.updateThreadMetadata();\n }\n }\n addRelatedThreadEvent(event, toStartOfTimeline) {\n // If this event is not a direct member of the thread, but is a\n // reference to something that is, then we have two cases:\n\n if (!this.initialEventsFetched) {\n var _this$replayEvents;\n // Case 1: we haven't yet fetched events from the server. In\n // this case, when we do, the events we get back might only be\n // the first-order ones, so this event (which is second-order -\n // a reference to something directly in the thread) needs to be\n // kept so we can replay it when the first-order ones turn up.\n\n /**\n * A thread can be fully discovered via a single sync response\n * And when that's the case we still ask the server to do an initialisation\n * as it's the safest to ensure we have everything.\n * However when we are in that scenario we might loose annotation or edits\n *\n * This fix keeps a reference to those events and replay them once the thread\n * has been initialised properly.\n */\n (_this$replayEvents = this.replayEvents) === null || _this$replayEvents === void 0 || _this$replayEvents.push(event);\n\n // For annotations (reactions), aggregate immediately (pre-init) to keep\n // reaction counts/summary visible while the thread is still initialising.\n // Only aggregate as child: parent aggregation is unnecessary here.\n if (event.isRelation(RelationType.Annotation)) {\n var _this$timelineSet$rel;\n (_this$timelineSet$rel = this.timelineSet.relations) === null || _this$timelineSet$rel === void 0 || _this$timelineSet$rel.aggregateChildEvent(event, this.timelineSet);\n }\n } else {\n var _this$client$canSuppo2;\n // Case 2: this is happening later, and we have a timeline. In\n // this case, these events might be out-of order.\n //\n // Specifically, if the server doesn't support recursion, so we\n // only get these events through sync, they might be coming\n // later than the first-order ones, so we insert them based on\n // timestamp (despite the problems with this documented in\n // #3325).\n //\n // If the server does support recursion, we should have got all\n // the interspersed events from the server when we fetched the\n // initial events, so if they are coming via sync they should be\n // the latest ones, so we can add them as normal.\n //\n // (Note that both insertEventIntoTimeline and addEventToTimeline\n // do nothing if we have seen this event before.)\n\n var recursionSupport = (_this$client$canSuppo2 = this.client.canSupport.get(Feature.RelationsRecursion)) !== null && _this$client$canSuppo2 !== void 0 ? _this$client$canSuppo2 : ServerSupport.Unsupported;\n if (recursionSupport === ServerSupport.Unsupported) {\n this.insertEventIntoTimeline(event);\n } else {\n this.addEventToTimeline(event, toStartOfTimeline);\n }\n // Aggregation is handled by EventTimelineSet when inserting/adding.\n }\n }\n processEvent(event) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (event) {\n _this3.setEventMetadata(event);\n yield _this3.fetchEditsWhereNeeded(event);\n }\n })();\n }\n\n /**\n * Processes the receipts that were caught during initial sync\n * When clients become aware of a thread, they try to retrieve those read receipts\n * and apply them to the current thread\n * @param receipts - A collection of the receipts cached from initial sync\n */\n processReceipts() {\n var receipts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n for (var _ref5 of receipts) {\n var eventId = _ref5.eventId;\n var receiptType = _ref5.receiptType;\n var userId = _ref5.userId;\n var receipt = _ref5.receipt;\n var synthetic = _ref5.synthetic;\n this.addReceiptToStructure(eventId, receiptType, userId, receipt, synthetic);\n }\n }\n getRootEventBundledRelationship() {\n var rootEvent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.rootEvent;\n return rootEvent === null || rootEvent === void 0 ? void 0 : rootEvent.getServerAggregatedRelation(THREAD_RELATION_TYPE.name);\n }\n processRootEvent() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var bundledRelationship = _this4.getRootEventBundledRelationship();\n if (Thread.hasServerSideSupport && bundledRelationship) {\n _this4.replyCount = bundledRelationship.count;\n _this4._currentUserParticipated = !!bundledRelationship.current_user_participated;\n var mapper = _this4.client.getEventMapper();\n // re-insert roomId\n _this4.lastEvent = mapper(_objectSpread(_objectSpread({}, bundledRelationship.latest_event), {}, {\n room_id: _this4.roomId\n }));\n _this4.updatePendingReplyCount();\n yield _this4.processEvent(_this4.lastEvent);\n }\n })();\n }\n updatePendingReplyCount() {\n var unfilteredPendingEvents = this.pendingEventOrdering === PendingEventOrdering.Detached ? this.room.getPendingEvents() : this.events;\n var pendingEvents = unfilteredPendingEvents.filter(ev => {\n var _this$lastEvent2;\n return ev.threadRootId === this.id && ev.isRelation(THREAD_RELATION_TYPE.name) && ev.status !== null && ev.getId() !== ((_this$lastEvent2 = this.lastEvent) === null || _this$lastEvent2 === void 0 ? void 0 : _this$lastEvent2.getId());\n });\n this.lastPendingEvent = pendingEvents.length ? pendingEvents[pendingEvents.length - 1] : undefined;\n this.pendingReplyCount = pendingEvents.length;\n }\n\n /**\n * Reset the live timeline of all timelineSets, and start new ones.\n *\n * <p>This is used when /sync returns a 'limited' timeline. 'Limited' means that there's a gap between the messages\n * /sync returned, and the last known message in our timeline. In such a case, our live timeline isn't live anymore\n * and has to be replaced by a new one. To make sure we can continue paginating our timelines correctly, we have to\n * set new pagination tokens on the old and the new timeline.\n *\n * @param backPaginationToken - token for back-paginating the new timeline\n * @param forwardPaginationToken - token for forward-paginating the old live timeline,\n * if absent or null, all timelines are reset, removing old ones (including the previous live\n * timeline which would otherwise be unable to paginate forwards without this token).\n * Removing just the old live timeline whilst preserving previous ones is not supported.\n */\n resetLiveTimeline(backPaginationToken, forwardPaginationToken) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var oldLive = _this5.liveTimeline;\n _this5.timelineSet.resetLiveTimeline(backPaginationToken !== null && backPaginationToken !== void 0 ? backPaginationToken : undefined, forwardPaginationToken !== null && forwardPaginationToken !== void 0 ? forwardPaginationToken : undefined);\n var newLive = _this5.liveTimeline;\n\n // FIXME: Remove the following as soon as https://github.com/matrix-org/synapse/issues/14830 is resolved.\n //\n // The pagination API for thread timelines currently can't handle the type of pagination tokens returned by sync\n //\n // To make this work anyway, we'll have to transform them into one of the types that the API can handle.\n // One option is passing the tokens to /messages, which can handle sync tokens, and returns the right format.\n // /messages does not return new tokens on requests with a limit of 0.\n // This means our timelines might overlap a slight bit, but that's not an issue, as we deduplicate messages\n // anyway.\n\n var newBackward;\n var oldForward;\n if (backPaginationToken) {\n var res = yield _this5.client.createMessagesRequest(_this5.roomId, backPaginationToken, 1, Direction.Forward);\n newBackward = res.end;\n }\n if (forwardPaginationToken) {\n var _res = yield _this5.client.createMessagesRequest(_this5.roomId, forwardPaginationToken, 1, Direction.Backward);\n oldForward = _res.start;\n }\n // Only replace the token if we don't have paginated away from this position already. This situation doesn't\n // occur today, but if the above issue is resolved, we'd have to go down this path.\n if (forwardPaginationToken && oldLive.getPaginationToken(Direction.Forward) === forwardPaginationToken) {\n oldLive.setPaginationToken(oldForward !== null && oldForward !== void 0 ? oldForward : null, Direction.Forward);\n }\n if (backPaginationToken && newLive.getPaginationToken(Direction.Backward) === backPaginationToken) {\n newLive.setPaginationToken(newBackward !== null && newBackward !== void 0 ? newBackward : null, Direction.Backward);\n }\n })();\n }\n updateThreadFromRootEvent() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (Thread.hasServerSideSupport) {\n // Ensure we show *something* as soon as possible, we'll update it as soon as we get better data, but we\n // don't want the thread preview to be empty if we can avoid it\n if (!_this6.initialEventsFetched && !_this6.lastEvent) {\n yield _this6.processRootEvent();\n }\n yield _this6.fetchRootEvent();\n }\n yield _this6.processRootEvent();\n })();\n }\n updateThreadMetadata() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n _this7.updatePendingReplyCount();\n if (!_this7.processRootEventPromise) {\n // We only want to do this once otherwise we end up rolling back to the last unsigned summary we have for the thread\n _this7.processRootEventPromise = _this7.updateThreadFromRootEvent();\n }\n yield _this7.processRootEventPromise;\n if (!_this7.initialEventsFetched) {\n if (_this7.initalEventFetchProm) {\n yield _this7.initalEventFetchProm;\n } else {\n // fetch initial events to allow proper pagination\n try {\n // clear out any events that were added before the pagination request\n // completed (eg. from sync). They'll be replaced by those from the pagination.\n // Really, we should do this after the pagination request completes, but\n // paginateEventTimeline does the request and adds the events in one go, so\n // this would need a refactor in order to do. It's therefore possible there's\n // a remaining race where an event comes in while the pagination request is\n // happening.\n _this7.timelineSet.resetLiveTimeline();\n // if the thread has regular events, this will just load the last reply.\n // if the thread is newly created, this will load the root event.\n if (_this7.replyCount === 0 && _this7.rootEvent) {\n _this7.timelineSet.addEventsToTimeline([_this7.rootEvent], true, false, _this7.liveTimeline, null);\n _this7.liveTimeline.setPaginationToken(null, Direction.Backward);\n } else {\n _this7.initalEventFetchProm = _this7.client.paginateEventTimeline(_this7.liveTimeline, {\n backwards: true\n });\n yield _this7.initalEventFetchProm;\n }\n // We have now fetched the initial events, so set the flag. We need to do this before\n // we actually add the events, so `this.addEvents` knows that it can now safely add\n // them rather than buffer them in the pending event list. The main thing is that this\n // must remain false while the async fetch happens, so we don't try to add events before\n // the pagination has finished. The important thing is that we're not await-ing anything\n // else between setting this and adding events, so no races.\n _this7.initialEventsFetched = true;\n for (var event of _this7.replayEvents) {\n _this7.addEvent(event, false);\n }\n _this7.replayEvents = null;\n // just to make sure that, if we've created a timeline window for this thread before the thread itself\n // existed (e.g. when creating a new thread), we'll make sure the panel is force refreshed correctly.\n _this7.emit(RoomEvent.TimelineReset, _this7.room, _this7.timelineSet, true);\n } catch (e) {\n logger.error(\"Failed to load start of newly created thread: \", e);\n _this7.initialEventsFetched = false;\n }\n }\n }\n _this7.emit(ThreadEvent.Update, _this7);\n })();\n }\n\n // XXX: Workaround for https://github.com/matrix-org/matrix-spec-proposals/pull/2676/files#r827240084\n fetchEditsWhereNeeded() {\n var _arguments = arguments,\n _this8 = this;\n return _asyncToGenerator(function* () {\n var _this8$client$canSupp;\n var recursionSupport = (_this8$client$canSupp = _this8.client.canSupport.get(Feature.RelationsRecursion)) !== null && _this8$client$canSupp !== void 0 ? _this8$client$canSupp : ServerSupport.Unsupported;\n if (recursionSupport === ServerSupport.Unsupported) {\n for (var _len = _arguments.length, events = new Array(_len), _key = 0; _key < _len; _key++) {\n events[_key] = _arguments[_key];\n }\n return Promise.all(events.filter(isAnEncryptedThreadMessage).map(/*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(function* (event) {\n try {\n var relations = yield _this8.client.relations(_this8.roomId, event.getId(), RelationType.Replace, event.getType(), {\n limit: 1\n });\n if (relations.events.length) {\n var editEvent = relations.events[0];\n event.makeReplaced(editEvent);\n _this8.insertEventIntoTimeline(editEvent);\n }\n } catch (e) {\n logger.error(\"Failed to load edits for encrypted thread event\", e);\n }\n });\n return function (_x6) {\n return _ref6.apply(this, arguments);\n };\n }()));\n }\n })();\n }\n setEventMetadata(event) {\n if (event) {\n EventTimeline.setEventMetadata(event, this.roomState, false);\n event.setThread(this);\n }\n }\n clearEventMetadata(event) {\n if (event) {\n var _event$event;\n event.setThread(undefined);\n (_event$event = event.event) === null || _event$event === void 0 || (_event$event = _event$event.unsigned) === null || _event$event === void 0 || (_event$event = _event$event[\"m.relations\"]) === null || _event$event === void 0 || delete _event$event[THREAD_RELATION_TYPE.name];\n }\n }\n\n /**\n * Finds an event by ID in the current thread\n */\n findEventById(eventId) {\n return this.timelineSet.findEventById(eventId);\n }\n\n /**\n * Return last reply to the thread, if known.\n */\n lastReply() {\n var matches = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ev => ev.isRelation(THREAD_RELATION_TYPE.name);\n for (var i = this.timeline.length - 1; i >= 0; i--) {\n var event = this.timeline[i];\n if (matches(event)) {\n return event;\n }\n }\n return null;\n }\n get roomId() {\n return this.room.roomId;\n }\n\n /**\n * The number of messages in the thread\n * Only count rel_type=m.thread as we want to\n * exclude annotations from that number\n */\n get length() {\n return this.replyCount + this.pendingReplyCount;\n }\n\n /**\n * A getter for the last event of the thread.\n * This might be a synthesized event, if so, it will not emit any events to listeners.\n */\n get replyToEvent() {\n var _ref7, _this$lastPendingEven;\n return (_ref7 = (_this$lastPendingEven = this.lastPendingEvent) !== null && _this$lastPendingEven !== void 0 ? _this$lastPendingEven : this.lastEvent) !== null && _ref7 !== void 0 ? _ref7 : this.lastReply();\n }\n\n /**\n * The live event timeline for this thread.\n * @deprecated Present for backwards compatibility.\n * Use this.events instead\n * @returns The live event timeline for this thread.\n */\n get timeline() {\n return this.events;\n }\n get events() {\n return this.liveTimeline.getEvents();\n }\n has(eventId) {\n return this.timelineSet.findEventById(eventId) instanceof MatrixEvent;\n }\n get hasCurrentUserParticipated() {\n return this._currentUserParticipated;\n }\n get liveTimeline() {\n return this.timelineSet.getLiveTimeline();\n }\n getUnfilteredTimelineSet() {\n return this.timelineSet;\n }\n addReceipt(event, synthetic) {\n throw new Error(\"Unsupported function on the thread model\");\n }\n\n /**\n * Get the ID of the event that a given user has read up to within this thread,\n * or null if we have received no read receipt (at all) from them.\n * @param userId - The user ID to get read receipt event ID for\n * @param ignoreSynthesized - If true, return only receipts that have been\n * sent by the server, not implicit ones generated\n * by the JS SDK.\n * @returns ID of the latest event that the given user has read, or null.\n */\n getEventReadUpTo(userId, ignoreSynthesized) {\n // TODO: we think the implementation here is not right. Here is a sketch\n // of the right answer:\n //\n // for event in timeline.events.reversed():\n // if room.hasUserReadEvent(event):\n // return event\n // return null\n //\n // If this is too slow, we might be able to improve it by trying walking\n // forward from the threaded receipt in this thread. We could alternate\n // between backwards-from-front and forwards-from-threaded-receipt to\n // improve our chances of hitting the right answer sooner.\n //\n // Either way, it's still fundamentally slow because we have to walk\n // events.\n //\n // We also might just want to limit the time we spend on this by giving\n // up after, say, 100 events.\n //\n // --- andyb\n\n var isCurrentUser = userId === this.client.getUserId();\n var lastReply = this.timeline[this.timeline.length - 1];\n if (isCurrentUser && lastReply) {\n // If the last activity in a thread is prior to the first threaded read receipt\n // sent in the room (suggesting that it was sent before the user started\n // using a client that supported threaded read receipts), we want to\n // consider this thread as read.\n var beforeFirstThreadedReceipt = lastReply.getTs() < this.room.getOldestThreadedReceiptTs();\n var lastReplyId = lastReply.getId();\n // Some unsent events do not have an ID, we do not want to consider them read\n if (beforeFirstThreadedReceipt && lastReplyId) {\n return lastReplyId;\n }\n }\n var readUpToId = super.getEventReadUpTo(userId, ignoreSynthesized);\n\n // Check whether the unthreaded read receipt for that user is more recent\n // than the read receipt inside that thread.\n if (lastReply) {\n var unthreadedReceipt = this.room.getLastUnthreadedReceiptFor(userId);\n if (!unthreadedReceipt) {\n return readUpToId;\n }\n for (var i = ((_this$timeline = this.timeline) === null || _this$timeline === void 0 ? void 0 : _this$timeline.length) - 1; i >= 0; --i) {\n var _this$timeline, _ev$getId;\n var ev = this.timeline[i];\n // If we encounter the `readUpToId` we do not need to look further\n // there is no \"more recent\" unthreaded read receipt\n if (ev.getId() === readUpToId) return readUpToId;\n\n // Inspecting events from most recent to oldest, we're checking\n // whether an unthreaded read receipt is more recent that the current event.\n // We usually prefer relying on the order of the DAG but in this scenario\n // it is not possible and we have to rely on timestamp\n if (ev.getTs() < unthreadedReceipt.ts) return (_ev$getId = ev.getId()) !== null && _ev$getId !== void 0 ? _ev$getId : readUpToId;\n }\n }\n return readUpToId;\n }\n\n /**\n * Determine if the given user has read a particular event.\n *\n * It is invalid to call this method with an event that is not part of this thread.\n *\n * This is not a definitive check as it only checks the events that have been\n * loaded client-side at the time of execution.\n * @param userId - The user ID to check the read state of.\n * @param eventId - The event ID to check if the user read.\n * @returns True if the user has read the event, false otherwise.\n */\n hasUserReadEvent(userId, eventId) {\n if (userId === this.client.getUserId()) {\n var _this$lastReply$getTs, _this$lastReply, _this$room$getLastUnt, _this$room$getLastUnt2, _this$lastReply$getTs2, _this$lastReply2;\n // Consider an event read if it's part of a thread that is before the\n // first threaded receipt sent in that room. It is likely that it is\n // part of a thread that was created before MSC3771 was implemented.\n // Or before the last unthreaded receipt for the logged in user\n var beforeFirstThreadedReceipt = ((_this$lastReply$getTs = (_this$lastReply = this.lastReply()) === null || _this$lastReply === void 0 ? void 0 : _this$lastReply.getTs()) !== null && _this$lastReply$getTs !== void 0 ? _this$lastReply$getTs : 0) < this.room.getOldestThreadedReceiptTs();\n var unthreadedReceiptTs = (_this$room$getLastUnt = (_this$room$getLastUnt2 = this.room.getLastUnthreadedReceiptFor(userId)) === null || _this$room$getLastUnt2 === void 0 ? void 0 : _this$room$getLastUnt2.ts) !== null && _this$room$getLastUnt !== void 0 ? _this$room$getLastUnt : 0;\n var beforeLastUnthreadedReceipt = ((_this$lastReply$getTs2 = this === null || this === void 0 || (_this$lastReply2 = this.lastReply()) === null || _this$lastReply2 === void 0 ? void 0 : _this$lastReply2.getTs()) !== null && _this$lastReply$getTs2 !== void 0 ? _this$lastReply$getTs2 : 0) < unthreadedReceiptTs;\n if (beforeFirstThreadedReceipt || beforeLastUnthreadedReceipt) {\n return true;\n }\n }\n return this.room.hasUserReadEvent(userId, eventId);\n }\n setUnread(type, count) {\n return this.room.setThreadUnreadNotificationCount(this.id, type, count);\n }\n\n /**\n * Returns the most recent unthreaded receipt for a given user\n * @param userId - the MxID of the User\n * @returns an unthreaded Receipt. Can be undefined if receipts have been disabled\n * or a user chooses to use private read receipts (or we have simply not received\n * a receipt from this user yet).\n */\n getLastUnthreadedReceiptFor(userId) {\n return this.room.getLastUnthreadedReceiptFor(userId);\n }\n}\n\n/**\n * Decide whether an event deserves to have its potential edits fetched.\n *\n * @returns true if this event is encrypted and is a message that is part of a\n * thread - either inside it, or a root.\n */\n_defineProperty(Thread, \"hasServerSideSupport\", FeatureSupport.None);\n_defineProperty(Thread, \"hasServerSideListSupport\", FeatureSupport.None);\n_defineProperty(Thread, \"hasServerSideFwdPaginationSupport\", FeatureSupport.None);\nfunction isAnEncryptedThreadMessage(event) {\n return event.isEncrypted() && (event.isRelation(THREAD_RELATION_TYPE.name) || event.isThreadRoot);\n}\nexport var FILTER_RELATED_BY_SENDERS = new ServerControlledNamespacedValue(\"related_by_senders\", \"io.element.relation_senders\");\nexport var FILTER_RELATED_BY_REL_TYPES = new ServerControlledNamespacedValue(\"related_by_rel_types\", \"io.element.relation_types\");\nexport var THREAD_RELATION_TYPE = new ServerControlledNamespacedValue(\"m.thread\", \"io.element.thread\");\nexport var ThreadFilterType = /*#__PURE__*/function (ThreadFilterType) {\n ThreadFilterType[ThreadFilterType[\"My\"] = 0] = \"My\";\n ThreadFilterType[ThreadFilterType[\"All\"] = 1] = \"All\";\n return ThreadFilterType;\n}({});\nexport function threadFilterTypeToFilter(type) {\n switch (type) {\n case ThreadFilterType.My:\n return \"participated\";\n default:\n return \"all\";\n }\n}\n//# sourceMappingURL=thread.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Common interface for the crypto implementations\n *\n * @internal\n */\n\n/** The methods which crypto implementations should expose to the Sync api\n *\n * @internal\n */\n\n/**\n * @internal\n */\n\n/**\n * The result of a (successful) call to {@link CryptoBackend.decryptEvent}\n */\n\n/**\n * Responsible for decrypting megolm session data retrieved from a remote backup.\n * The result of {@link CryptoBackend#getBackupDecryptor}.\n */\n\n/**\n * Exception thrown when decryption fails\n *\n * @param code - Reason code for the failure.\n *\n * @param msg - user-visible message describing the problem\n *\n * @param details - key/value pairs reported in the logs but not shown\n * to the user.\n */\nexport class DecryptionError extends Error {\n constructor(code, msg, details) {\n super(msg);\n this.code = code;\n _defineProperty(this, \"detailedString\", void 0);\n this.name = \"DecryptionError\";\n this.detailedString = detailedStringForDecryptionError(this, details);\n }\n}\nfunction detailedStringForDecryptionError(err, details) {\n var result = err.name + \"[msg: \" + err.message;\n if (details) {\n result += \", \" + Object.keys(details).map(k => k + \": \" + details[k]).join(\", \");\n }\n result += \"]\";\n return result;\n}\n//# sourceMappingURL=CryptoBackend.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MatrixEvent} and {@link RoomEvent} for\n * the public classes.\n */\n\nimport { ExtensibleEvents } from \"matrix-events-sdk\";\nimport { logger } from \"../logger.js\";\nimport { EVENT_VISIBILITY_CHANGE_TYPE, EventType, RelationType, ToDeviceMessageId, UNSIGNED_THREAD_ID_FIELD, UNSIGNED_MEMBERSHIP_FIELD } from \"../@types/event.js\";\nimport { deepSortedObjectEntries, internaliseString } from \"../utils.js\";\nimport { THREAD_RELATION_TYPE, ThreadEvent } from \"./thread.js\";\nimport { TypedReEmitter } from \"../ReEmitter.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nimport { DecryptionError } from \"../common-crypto/CryptoBackend.js\";\nimport { EventTimeline } from \"./event-timeline.js\";\nimport { DecryptionFailureCode } from \"../crypto-api/index.js\";\nexport { EventStatus } from \"./event-status.js\";\n\n/* eslint-disable camelcase */\n\n/**\n * When an event is a visibility change event, as per MSC3531,\n * the visibility change implied by the event.\n */\n\n/* eslint-enable camelcase */\n\n/**\n * Message hiding, as specified by https://github.com/matrix-org/matrix-doc/pull/3531.\n */\n\n/**\n * Variant of `MessageVisibility` for the case in which the message should be displayed.\n */\n\n/**\n * Variant of `MessageVisibility` for the case in which the message should be hidden.\n */\n\n// A singleton implementing `IMessageVisibilityVisible`.\nvar MESSAGE_VISIBLE = Object.freeze({\n visible: true\n});\nexport var MAX_STICKY_DURATION_MS = 3600000;\nexport var MatrixEventEvent = /*#__PURE__*/function (MatrixEventEvent) {\n /**\n * An event has been decrypted, or we have failed to decrypt it.\n *\n * The payload consists of:\n *\n * * `event` - The {@link MatrixEvent} which we attempted to decrypt.\n *\n * * `err` - The error that occurred during decryption, or `undefined` if no error occurred.\n * Avoid use of this: {@link MatrixEvent.decryptionFailureReason} is more useful.\n */\n MatrixEventEvent[\"Decrypted\"] = \"Event.decrypted\";\n MatrixEventEvent[\"BeforeRedaction\"] = \"Event.beforeRedaction\";\n MatrixEventEvent[\"VisibilityChange\"] = \"Event.visibilityChange\";\n MatrixEventEvent[\"LocalEventIdReplaced\"] = \"Event.localEventIdReplaced\";\n MatrixEventEvent[\"Status\"] = \"Event.status\";\n MatrixEventEvent[\"Replaced\"] = \"Event.replaced\";\n MatrixEventEvent[\"RelationsCreated\"] = \"Event.relationsCreated\";\n MatrixEventEvent[\"SentinelUpdated\"] = \"Event.sentinelUpdated\";\n return MatrixEventEvent;\n}({});\nexport class MatrixEvent extends TypedEventEmitter {\n /**\n * Update the sentinels and forwardLooking flag for this event.\n * @param stateContext - the room state to be queried\n * @param toStartOfTimeline - if true the event's forwardLooking flag is set false\n * @internal\n */\n setMetadata(stateContext, toStartOfTimeline) {\n var _this$sender, _this$target;\n // If an event is an m.room.member state event then we should set the sentinels again in case setEventMetadata\n // was already called before the state was applied and thus the sentinel points at the member from before this event.\n var affectsSelf = this.isState() && this.getType() === EventType.RoomMember && this.getSender() === this.getStateKey();\n var changed = false;\n // When we try to generate a sentinel member before we have that member\n // in the members object, we still generate a sentinel but it doesn't\n // have a membership event, so test to see if events.member is set. We\n // check this to avoid overriding non-sentinel members by sentinel ones\n // when adding the event to a filtered timeline\n if (affectsSelf || !((_this$sender = this.sender) !== null && _this$sender !== void 0 && (_this$sender = _this$sender.events) !== null && _this$sender !== void 0 && _this$sender.member)) {\n var newSender = stateContext.getSentinelMember(this.getSender());\n if (newSender !== this.sender) changed = true;\n this.sender = newSender;\n }\n if (affectsSelf || !((_this$target = this.target) !== null && _this$target !== void 0 && (_this$target = _this$target.events) !== null && _this$target !== void 0 && _this$target.member) && this.getType() === EventType.RoomMember) {\n var newTarget = stateContext.getSentinelMember(this.getStateKey());\n if (newTarget !== this.target) changed = true;\n this.target = newTarget;\n }\n if (this.isState()) {\n // room state has no concept of 'old' or 'current', but we want the\n // room state to regress back to previous values if toStartOfTimeline\n // is set, which means inspecting prev_content if it exists. This\n // is done by toggling the forwardLooking flag.\n if (toStartOfTimeline) {\n this.forwardLooking = false;\n }\n }\n if (changed) {\n this.emit(MatrixEventEvent.SentinelUpdated);\n }\n }\n\n /**\n * The sending status of the event.\n * @privateRemarks\n * Should be read-only\n */\n\n /**\n * Construct a Matrix Event object\n *\n * @param event - The raw (possibly encrypted) event. <b>Do not access\n * this property</b> directly unless you absolutely have to. Prefer the getter\n * methods defined on this class. Using the getter methods shields your app\n * from changes to event JSON between Matrix versions.\n */\n constructor() {\n var _this$getTs;\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n super();\n\n // intern the values of matrix events to force share strings and reduce the\n // amount of needless string duplication. This can save moderate amounts of\n // memory (~10% on a 350MB heap).\n // 'membership' at the event level (rather than the content level) is a legacy\n // field that Element never otherwise looks at, but it will still take up a lot\n // of space if we don't intern it.\n this.event = event;\n // applied push rule and action for this event\n _defineProperty(this, \"pushDetails\", {});\n _defineProperty(this, \"_replacingEvent\", null);\n _defineProperty(this, \"_localRedactionEvent\", null);\n _defineProperty(this, \"_isCancelled\", false);\n _defineProperty(this, \"clearEvent\", void 0);\n /* Message hiding, as specified by https://github.com/matrix-org/matrix-doc/pull/3531.\n Note: We're returning this object, so any value stored here MUST be frozen.\n */\n _defineProperty(this, \"visibility\", MESSAGE_VISIBLE);\n // Not all events will be extensible-event compatible, so cache a flag in\n // addition to a falsy cached event value. We check the flag later on in\n // a public getter to decide if the cache is valid.\n _defineProperty(this, \"_hasCachedExtEv\", false);\n _defineProperty(this, \"_cachedExtEv\", undefined);\n /** If we failed to decrypt this event, the reason for the failure. Otherwise, `null`. */\n _defineProperty(this, \"_decryptionFailureReason\", null);\n /* curve25519 key which we believe belongs to the sender of the event. See\n * getSenderKey()\n */\n _defineProperty(this, \"senderCurve25519Key\", null);\n /* ed25519 key which the sender of this event (for olm) or the creator of\n * the megolm session (for megolm) claims to own. See getClaimedEd25519Key()\n */\n _defineProperty(this, \"claimedEd25519Key\", null);\n /**\n * If another user forwarded the key to this message\n * (eg via [MSC4268](https://github.com/matrix-org/matrix-spec-proposals/pull/4268)),\n * the ID of that user.\n */\n _defineProperty(this, \"keyForwardedBy\", void 0);\n /* if we have a process decrypting this event, a Promise which resolves\n * when it is finished. Normally null.\n */\n _defineProperty(this, \"decryptionPromise\", null);\n /* flag to indicate if we should retry decrypting this event after the\n * first attempt (eg, we have received new data which means that a second\n * attempt may succeed)\n */\n _defineProperty(this, \"retryDecryption\", false);\n /* The txnId with which this event was sent if it was during this session,\n * allows for a unique ID which does not change when the event comes back down sync.\n */\n _defineProperty(this, \"txnId\", void 0);\n /**\n * A reference to the thread this event belongs to\n */\n _defineProperty(this, \"thread\", void 0);\n _defineProperty(this, \"threadId\", void 0);\n /* Set an approximate timestamp for the event relative the local clock.\n * This will inherently be approximate because it doesn't take into account\n * the time between the server putting the 'age' field on the event as it sent\n * it to us and the time we're now constructing this event, but that's better\n * than assuming the local clock is in sync with the origin HS's clock.\n */\n _defineProperty(this, \"localTimestamp\", void 0);\n /**\n * The room member who sent this event, or null e.g.\n * this is a presence event. This is only guaranteed to be set for events that\n * appear in a timeline, ie. do not guarantee that it will be set on state\n * events.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"sender\", null);\n /**\n * The room member who is the target of this event, e.g.\n * the invitee, the person being banned, etc.\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"target\", null);\n _defineProperty(this, \"status\", null);\n /**\n * most recent error associated with sending the event, if any\n * @privateRemarks\n * Should be read-only. May not be a MatrixError.\n */\n _defineProperty(this, \"error\", null);\n /**\n * True if this event is 'forward looking', meaning\n * that getDirectionalContent() will return event.content and not event.prev_content.\n * Only state events may be backwards looking\n * Default: true. <strong>This property is experimental and may change.</strong>\n * @privateRemarks\n * Should be read-only\n */\n _defineProperty(this, \"forwardLooking\", true);\n _defineProperty(this, \"reEmitter\", void 0);\n /**\n * The timestamp for when this event should expire, in milliseconds.\n * Prefers using the server-provided value, but will fall back to local calculation.\n *\n * This value is **safe** to use, as malicious start time and duration are appropriately capped.\n *\n * If the event is not a sticky event (or not supported by the server),\n * then this returns `undefined`.\n */\n _defineProperty(this, \"unstableStickyExpiresAt\", void 0);\n [\"state_key\", \"type\", \"sender\", \"room_id\", \"membership\"].forEach(prop => {\n if (typeof event[prop] !== \"string\") return;\n event[prop] = internaliseString(event[prop]);\n });\n [\"membership\", \"avatar_url\", \"displayname\"].forEach(prop => {\n var _event$content;\n if (typeof ((_event$content = event.content) === null || _event$content === void 0 ? void 0 : _event$content[prop]) !== \"string\") return;\n event.content[prop] = internaliseString(event.content[prop]);\n });\n [\"rel_type\"].forEach(prop => {\n var _event$content2;\n if (typeof ((_event$content2 = event.content) === null || _event$content2 === void 0 || (_event$content2 = _event$content2[\"m.relates_to\"]) === null || _event$content2 === void 0 ? void 0 : _event$content2[prop]) !== \"string\") return;\n event.content[\"m.relates_to\"][prop] = internaliseString(event.content[\"m.relates_to\"][prop]);\n });\n this.txnId = event.txn_id;\n // The localTimestamp is calculated using the age.\n // Some events lack an `age` property, either because they are EDUs such as typing events,\n // or due to server-side bugs such as https://github.com/matrix-org/synapse/issues/8429.\n // The fallback in these cases will be to use the origin_server_ts.\n // For EDUs, the origin_server_ts also is not defined so we use Date.now().\n var age = this.getAge();\n var now = Date.now();\n this.localTimestamp = age !== undefined ? now - age : (_this$getTs = this.getTs()) !== null && _this$getTs !== void 0 ? _this$getTs : now;\n this.reEmitter = new TypedReEmitter(this);\n if (this.unstableStickyInfo) {\n if (this.unstableStickyInfo.duration_ttl_ms) {\n this.unstableStickyExpiresAt = now + this.unstableStickyInfo.duration_ttl_ms;\n } else {\n // Bound the timestamp so it doesn't come from the future.\n this.unstableStickyExpiresAt = Math.min(now, this.getTs()) + this.unstableStickyInfo.duration_ms;\n }\n }\n }\n\n /**\n * Unstable getter to try and get an extensible event. Note that this might\n * return a falsy value if the event could not be parsed as an extensible\n * event.\n *\n * @deprecated Use stable functions where possible.\n */\n get unstableExtensibleEvent() {\n if (!this._hasCachedExtEv) {\n var _ExtensibleEvents$par;\n this._cachedExtEv = (_ExtensibleEvents$par = ExtensibleEvents.parse(this.getEffectiveEvent())) !== null && _ExtensibleEvents$par !== void 0 ? _ExtensibleEvents$par : undefined;\n }\n return this._cachedExtEv;\n }\n invalidateExtensibleEvent() {\n // just reset the flag - that'll trick the getter into parsing a new event\n this._hasCachedExtEv = false;\n }\n\n /**\n * Gets the event as it would appear if it had been sent unencrypted.\n *\n * If the event is encrypted, we attempt to mock up an event as it would have looked had the sender not encrypted it.\n * If the event is not encrypted, a copy of it is simply returned as-is.\n *\n * @returns A shallow copy of the event, in wire format, as it would have been had it not been encrypted.\n */\n getEffectiveEvent() {\n var content = Object.assign({}, this.getContent()); // clone for mutation\n\n if (this.getWireType() === EventType.RoomMessageEncrypted) {\n // Encrypted events sometimes aren't symmetrical on the `content` so we'll copy\n // that over too, but only for missing properties. We don't copy over mismatches\n // between the plain and decrypted copies of `content` because we assume that the\n // app is relying on the decrypted version, so we want to expose that as a source\n // of truth here too.\n for (var _ref3 of Object.entries(this.getWireContent())) {\n var _ref2 = _slicedToArray(_ref3, 2);\n var _key = _ref2[0];\n var value = _ref2[1];\n // Skip fields from the encrypted event schema though - we don't want to leak\n // these.\n if ([\"algorithm\", \"ciphertext\", \"device_id\", \"sender_key\", \"session_id\"].includes(_key)) {\n continue;\n }\n if (content[_key] === undefined) content[_key] = value;\n }\n }\n\n // clearEvent doesn't have all the fields, so we'll copy what we can from this.event.\n // We also copy over our \"fixed\" content key.\n return Object.assign({}, this.event, this.clearEvent, {\n content\n });\n }\n\n /**\n * Get the event_id for this event.\n * @returns The event ID, e.g. <code>$143350589368169JsLZx:localhost\n * </code>\n */\n getId() {\n return this.event.event_id;\n }\n\n /**\n * Get the user_id for this event.\n * @returns The user ID, e.g. `@alice:matrix.org`\n */\n getSender() {\n return this.event.sender; // v2 / v1\n }\n\n /**\n * Get the (decrypted, if necessary) type of event.\n *\n * @returns The event type, e.g. `m.room.message`\n */\n getType() {\n if (this.clearEvent) {\n return this.clearEvent.type;\n }\n return this.event.type;\n }\n\n /**\n * Get the (possibly encrypted) type of the event that will be sent to the\n * homeserver.\n *\n * @returns The event type.\n */\n getWireType() {\n return this.event.type;\n }\n\n /**\n * Get the room_id for this event. This will return `undefined`\n * for `m.presence` events.\n * @returns The room ID, e.g. <code>!cURbafjkfsMDVwdRDQ:matrix.org\n * </code>\n */\n getRoomId() {\n return this.event.room_id;\n }\n\n /**\n * Get the timestamp of this event.\n * @returns The event timestamp, e.g. `1433502692297`\n */\n getTs() {\n return this.event.origin_server_ts;\n }\n\n /**\n * Get the timestamp of this event, as a Date object.\n * @returns The event date, e.g. `new Date(1433502692297)`\n */\n getDate() {\n return this.event.origin_server_ts ? new Date(this.event.origin_server_ts) : null;\n }\n\n /**\n * Get a string containing details of this event\n *\n * This is intended for logging, to help trace errors. Example output:\n *\n * @example\n * ```\n * id=$HjnOHV646n0SjLDAqFrgIjim7RCpB7cdMXFrekWYAn type=m.room.encrypted\n * sender=@user:example.com room=!room:example.com ts=2022-10-25T17:30:28.404Z\n * ```\n */\n getDetails() {\n var room = this.getRoomId();\n if (room) {\n var _this$getDate;\n // in-room event\n return \"id=\".concat(this.getId(), \" type=\").concat(this.getWireType(), \" sender=\").concat(this.getSender(), \" room=\").concat(room, \" ts=\").concat((_this$getDate = this.getDate()) === null || _this$getDate === void 0 ? void 0 : _this$getDate.toISOString());\n } else {\n // to-device event\n var msgid = this.getContent()[ToDeviceMessageId];\n return \"msgid=\".concat(msgid, \" type=\").concat(this.getWireType(), \" sender=\").concat(this.getSender());\n }\n }\n\n /**\n * Get the (decrypted, if necessary) event content JSON, even if the event\n * was replaced by another event.\n *\n * @returns The event content JSON, or an empty object.\n */\n getOriginalContent() {\n var _this$event$content;\n if (this._localRedactionEvent) {\n return {};\n }\n if (this.clearEvent) {\n var _this$clearEvent$cont;\n return (_this$clearEvent$cont = this.clearEvent.content) !== null && _this$clearEvent$cont !== void 0 ? _this$clearEvent$cont : {};\n }\n return (_this$event$content = this.event.content) !== null && _this$event$content !== void 0 ? _this$event$content : {};\n }\n\n /**\n * Get the (decrypted, if necessary) event content JSON,\n * or the content from the replacing event, if any.\n * See `makeReplaced`.\n *\n * @returns The event content JSON, or an empty object.\n */\n getContent() {\n if (this._localRedactionEvent) {\n return {};\n } else if (this._replacingEvent) {\n var _this$_replacingEvent;\n return (_this$_replacingEvent = this._replacingEvent.getContent()[\"m.new_content\"]) !== null && _this$_replacingEvent !== void 0 ? _this$_replacingEvent : {};\n } else {\n return this.getOriginalContent();\n }\n }\n\n /**\n * Get the (possibly encrypted) event content JSON that will be sent to the\n * homeserver.\n *\n * @returns The event content JSON, or an empty object.\n */\n getWireContent() {\n return this.event.content || {};\n }\n\n /**\n * Get the event ID of the thread head\n */\n get threadRootId() {\n var _this$getWireContent;\n // don't allow state events to be threaded as per the spec\n if (this.isState()) {\n return undefined;\n }\n var relatesTo = (_this$getWireContent = this.getWireContent()) === null || _this$getWireContent === void 0 ? void 0 : _this$getWireContent[\"m.relates_to\"];\n if ((relatesTo === null || relatesTo === void 0 ? void 0 : relatesTo.rel_type) === THREAD_RELATION_TYPE.name) {\n return relatesTo.event_id;\n }\n if (this.thread) {\n return this.thread.id;\n }\n if (this.threadId !== undefined) {\n return this.threadId;\n }\n var unsigned = this.getUnsigned();\n if (typeof unsigned[UNSIGNED_THREAD_ID_FIELD.name] === \"string\") {\n return unsigned[UNSIGNED_THREAD_ID_FIELD.name];\n }\n return undefined;\n }\n\n /**\n * A helper to check if an event is a thread's head or not\n */\n get isThreadRoot() {\n // don't allow state events to be threaded as per the spec\n if (this.isState()) {\n return false;\n }\n var threadDetails = this.getServerAggregatedRelation(THREAD_RELATION_TYPE.name);\n\n // Bundled relationships only returned when the sync response is limited\n // hence us having to check both bundled relation and inspect the thread\n // model\n return !!threadDetails || this.threadRootId === this.getId();\n }\n get replyEventId() {\n var _this$getWireContent$;\n return (_this$getWireContent$ = this.getWireContent()[\"m.relates_to\"]) === null || _this$getWireContent$ === void 0 || (_this$getWireContent$ = _this$getWireContent$[\"m.in_reply_to\"]) === null || _this$getWireContent$ === void 0 ? void 0 : _this$getWireContent$.event_id;\n }\n get relationEventId() {\n var _this$getWireContent2;\n return (_this$getWireContent2 = this.getWireContent()) === null || _this$getWireContent2 === void 0 || (_this$getWireContent2 = _this$getWireContent2[\"m.relates_to\"]) === null || _this$getWireContent2 === void 0 ? void 0 : _this$getWireContent2.event_id;\n }\n\n /**\n * Get the previous event content JSON. This will only return something for\n * state events which exist in the timeline.\n * @returns The previous event content JSON, or an empty object.\n */\n getPrevContent() {\n // v2 then v1 then default\n return this.getUnsigned().prev_content || {};\n }\n\n /**\n * Get either 'content' or 'prev_content' depending on if this event is\n * 'forward-looking' or not. This can be modified via event.forwardLooking.\n * In practice, this means we get the chronologically earlier content value\n * for this event (this method should surely be called getEarlierContent)\n * <strong>This method is experimental and may change.</strong>\n * @returns event.content if this event is forward-looking, else\n * event.prev_content.\n */\n getDirectionalContent() {\n return this.forwardLooking ? this.getContent() : this.getPrevContent();\n }\n\n /**\n * Get the age of this event. This represents the age of the event when the\n * event arrived at the device, and not the age of the event when this\n * function was called.\n * Can only be returned once the server has echo'ed back\n * @returns The age of this event in milliseconds.\n */\n getAge() {\n return this.getUnsigned().age;\n }\n\n /**\n * Get the age of the event when this function was called.\n * This is the 'age' field adjusted according to how long this client has\n * had the event.\n * @returns The age of this event in milliseconds.\n */\n getLocalAge() {\n return Date.now() - this.localTimestamp;\n }\n\n /**\n * Get the event state_key if it has one. If necessary, this will perform\n * string-unpacking on the state key, as per MSC4362. This will return\n * <code>undefined</code> for message events.\n * @returns The event's `state_key`.\n */\n getStateKey() {\n if (this.clearEvent) {\n return this.clearEvent.state_key;\n }\n return this.event.state_key;\n }\n\n /**\n * Get the raw event state_key if it has one. This may be string-packed as per\n * MSC4362 if the state event is encrypted. This will return <code>undefined\n * </code> for message events.\n * @returns The event's `state_key`.\n */\n getWireStateKey() {\n return this.event.state_key;\n }\n\n /**\n * Check if this event is a state event.\n * @returns True if this is a state event.\n */\n isState() {\n return this.event.state_key !== undefined;\n }\n\n /**\n * Get the user's room membership at the time the event was sent, as reported\n * by the server. This uses MSC4115.\n *\n * @returns The user's room membership, or `undefined` if the server does\n * not report it.\n */\n getMembershipAtEvent() {\n var unsigned = this.getUnsigned();\n return UNSIGNED_MEMBERSHIP_FIELD.findIn(unsigned);\n }\n\n /**\n * Replace the content of this event with encrypted versions.\n * (This is used when sending an event; it should not be used by applications).\n *\n * @internal\n *\n * @param cryptoType - type of the encrypted event - typically\n * <tt>\"m.room.encrypted\"</tt>\n *\n * @param cryptoContent - raw 'content' for the encrypted event.\n *\n * @param senderCurve25519Key - curve25519 key to record for the\n * sender of this event.\n * See {@link MatrixEvent#getSenderKey}.\n *\n * @param claimedEd25519Key - claimed ed25519 key to record for the\n * sender if this event.\n * See {@link MatrixEvent#getClaimedEd25519Key}\n */\n makeEncrypted(cryptoType, cryptoContent, senderCurve25519Key, claimedEd25519Key) {\n // keep the plain-text data for 'view source'\n this.clearEvent = {\n type: this.event.type,\n content: this.event.content,\n state_key: this.event.state_key\n };\n this.event.type = cryptoType;\n this.event.content = cryptoContent;\n this.senderCurve25519Key = senderCurve25519Key;\n this.claimedEd25519Key = claimedEd25519Key;\n\n // if this is a state event, pack cleartext type and statekey\n if (this.isState()) {\n this.event.state_key = \"\".concat(this.clearEvent.type, \":\").concat(this.clearEvent.state_key);\n }\n }\n\n /**\n * Check if this event is currently being decrypted.\n *\n * @returns True if this event is currently being decrypted, else false.\n */\n isBeingDecrypted() {\n return this.decryptionPromise != null;\n }\n getDecryptionPromise() {\n return this.decryptionPromise;\n }\n\n /**\n * Check if this event is an encrypted event which we failed to decrypt\n *\n * (This implies that we might retry decryption at some point in the future)\n *\n * @returns True if this event is an encrypted event which we\n * couldn't decrypt.\n */\n isDecryptionFailure() {\n return this._decryptionFailureReason !== null;\n }\n\n /** If we failed to decrypt this event, the reason for the failure. Otherwise, `null`. */\n get decryptionFailureReason() {\n return this._decryptionFailureReason;\n }\n shouldAttemptDecryption() {\n if (this.isRedacted()) return false;\n if (this.isBeingDecrypted()) return false;\n if (this.clearEvent) return false;\n if (!this.isEncrypted()) return false;\n return true;\n }\n\n /**\n * Start the process of trying to decrypt this event.\n *\n * (This is used within the SDK: it isn't intended for use by applications)\n *\n * @internal\n *\n * @param crypto - crypto module\n *\n * @returns promise which resolves (to undefined) when the decryption\n * attempt is completed.\n */\n attemptDecryption(crypto) {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n var options = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : {};\n // start with a couple of sanity checks.\n if (!_this.isEncrypted()) {\n throw new Error(\"Attempt to decrypt event which isn't encrypted\");\n }\n var alreadyDecrypted = _this.clearEvent && !_this.isDecryptionFailure();\n if (alreadyDecrypted) {\n // we may want to just ignore this? let's start with rejecting it.\n throw new Error(\"Attempt to decrypt event which has already been decrypted\");\n }\n\n // if we already have a decryption attempt in progress, then it may\n // fail because it was using outdated info. We now have reason to\n // succeed where it failed before, but we don't want to have multiple\n // attempts going at the same time, so just set a flag that says we have\n // new info.\n //\n if (_this.decryptionPromise) {\n logger.log(\"Event \".concat(_this.getId(), \" already being decrypted; queueing a retry\"));\n _this.retryDecryption = true;\n return _this.decryptionPromise;\n }\n _this.decryptionPromise = _this.decryptionLoop(crypto, options);\n return _this.decryptionPromise;\n })();\n }\n\n /**\n * Calculate the recipients for keyshare requests.\n *\n * @param userId - the user who received this event.\n *\n * @returns array of recipients\n */\n getKeyRequestRecipients(userId) {\n // send the request to all of our own devices\n var recipients = [{\n userId,\n deviceId: \"*\"\n }];\n return recipients;\n }\n decryptionLoop(crypto) {\n var _arguments2 = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var options = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : {};\n // make sure that this method never runs completely synchronously.\n // (doing so would mean that we would clear decryptionPromise *before*\n // it is set in attemptDecryption - and hence end up with a stuck\n // `decryptionPromise`).\n yield Promise.resolve();\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n _this2.retryDecryption = false;\n var err = undefined;\n try {\n var res = yield crypto.decryptEvent(_this2);\n if (options.isRetry === true) {\n logger.info(\"Decrypted event on retry (\".concat(_this2.getDetails(), \")\"));\n }\n _this2.setClearData(res);\n _this2._decryptionFailureReason = null;\n } catch (e) {\n var detailedError = e instanceof DecryptionError ? e.detailedString : String(e);\n err = e;\n\n // see if we have a retry queued.\n //\n // NB: make sure to keep this check in the same tick of the\n // event loop as `decryptionPromise = null` below - otherwise we\n // risk a race:\n //\n // * A: we check retryDecryption here and see that it is\n // false\n // * B: we get a second call to attemptDecryption, which sees\n // that decryptionPromise is set so sets\n // retryDecryption\n // * A: we continue below, clear decryptionPromise, and\n // never do the retry.\n //\n if (_this2.retryDecryption) {\n // decryption error, but we have a retry queued.\n logger.log(\"Error decrypting event (\".concat(_this2.getDetails(), \"), but retrying: \").concat(detailedError));\n continue;\n }\n\n // decryption error, no retries queued. Warn about the error and\n // set it to m.bad.encrypted.\n //\n // the detailedString already includes the name and message of the error, and the stack isn't much use,\n // so we don't bother to log `e` separately.\n logger.warn(\"Error decrypting event (\".concat(_this2.getDetails(), \"): \").concat(detailedError));\n _this2.setClearDataForDecryptionFailure(String(e));\n _this2._decryptionFailureReason = e instanceof DecryptionError ? e.code : DecryptionFailureCode.UNKNOWN_ERROR;\n }\n\n // Make sure we clear 'decryptionPromise' before sending the 'Event.decrypted' event,\n // otherwise the app will be confused to see `isBeingDecrypted` still set when\n // there isn't an `Event.decrypted` on the way.\n //\n // see also notes on retryDecryption above.\n //\n _this2.decryptionPromise = null;\n _this2.retryDecryption = false;\n\n // Before we emit the event, clear the push actions so that they can be recalculated\n // by relevant code. We do this because the clear event has now changed, making it\n // so that existing rules can be re-run over the applicable properties. Stuff like\n // highlighting when the user's name is mentioned rely on this happening. We also want\n // to set the push actions before emitting so that any notification listeners don't\n // pick up the wrong contents.\n _this2.setPushDetails();\n if (options.emit !== false) {\n _this2.emit(MatrixEventEvent.Decrypted, _this2, err);\n }\n return;\n }\n })();\n }\n\n /**\n * Update the cleartext data on this event.\n *\n * (This is used after decrypting an event; it should not be used by applications).\n *\n * @internal\n *\n * @param decryptionResult - the decryption result, including the plaintext and some key info\n */\n setClearData(decryptionResult) {\n var _decryptionResult$sen, _decryptionResult$cla;\n this.clearEvent = decryptionResult.clearEvent;\n this.senderCurve25519Key = (_decryptionResult$sen = decryptionResult.senderCurve25519Key) !== null && _decryptionResult$sen !== void 0 ? _decryptionResult$sen : null;\n this.claimedEd25519Key = (_decryptionResult$cla = decryptionResult.claimedEd25519Key) !== null && _decryptionResult$cla !== void 0 ? _decryptionResult$cla : null;\n this.keyForwardedBy = decryptionResult.keyForwardedBy;\n this.invalidateExtensibleEvent();\n }\n\n /**\n * Update the cleartext data on this event after a decryption failure.\n *\n * @param reason - the textual reason for the failure\n */\n setClearDataForDecryptionFailure(reason) {\n this.clearEvent = {\n type: EventType.RoomMessage,\n content: {\n msgtype: \"m.bad.encrypted\",\n body: \"** Unable to decrypt: \".concat(reason, \" **\")\n }\n };\n this.senderCurve25519Key = null;\n this.claimedEd25519Key = null;\n this.invalidateExtensibleEvent();\n }\n\n /**\n * Gets the cleartext content for this event. If the event is not encrypted,\n * or encryption has not been completed, this will return null.\n *\n * @returns The cleartext (decrypted) content for the event\n */\n getClearContent() {\n return this.clearEvent ? this.clearEvent.content : null;\n }\n\n /**\n * Check if the event is encrypted.\n * @returns True if this event is encrypted.\n */\n isEncrypted() {\n return this.event.type === EventType.RoomMessageEncrypted;\n }\n\n /**\n * The curve25519 key for the device that we think sent this event\n *\n * For an Olm-encrypted event, this is inferred directly from the DH\n * exchange at the start of the session: the curve25519 key is involved in\n * the DH exchange, so only a device which holds the private part of that\n * key can establish such a session.\n *\n * For a megolm-encrypted event, it is inferred from the Olm message which\n * established the megolm session\n */\n getSenderKey() {\n return this.senderCurve25519Key;\n }\n\n /**\n * The additional keys the sender of this encrypted event claims to possess.\n *\n * Just a wrapper for #getClaimedEd25519Key (q.v.)\n */\n getKeysClaimed() {\n if (!this.claimedEd25519Key) return {};\n return {\n ed25519: this.claimedEd25519Key\n };\n }\n\n /**\n * Get the ed25519 the sender of this event claims to own.\n *\n * For Olm messages, this claim is encoded directly in the plaintext of the\n * event itself. For megolm messages, it is implied by the m.room_key event\n * which established the megolm session.\n *\n * Until we download the device list of the sender, it's just a claim: the\n * device list gives a proof that the owner of the curve25519 key used for\n * this event (and returned by #getSenderKey) also owns the ed25519 key by\n * signing the public curve25519 key with the ed25519 key.\n *\n * In general, applications should not use this method directly, but should\n * instead use {@link crypto-api!CryptoApi#getEncryptionInfoForEvent}.\n */\n getClaimedEd25519Key() {\n return this.claimedEd25519Key;\n }\n\n /**\n * Returns an empty array.\n *\n * Previously, this returned the chain of Curve25519 keys through which\n * this session was forwarded, via `m.forwarded_room_key` events.\n * However, that is not cryptographically reliable, and clients should not\n * be using it.\n *\n * @see https://github.com/matrix-org/matrix-spec/issues/1089\n * @deprecated\n */\n getForwardingCurve25519KeyChain() {\n return [];\n }\n\n /**\n * @deprecated always returns false\n */\n isKeySourceUntrusted() {\n return false;\n }\n\n /**\n * If another user forwarded the key to this message\n * (eg via [MSC4268](https://github.com/matrix-org/matrix-spec-proposals/pull/4268)),\n * get the ID of that user.\n */\n getKeyForwardingUser() {\n return this.keyForwardedBy;\n }\n getUnsigned() {\n return this.event.unsigned || {};\n }\n setUnsigned(unsigned) {\n this.event.unsigned = unsigned;\n }\n unmarkLocallyRedacted() {\n var value = this._localRedactionEvent;\n this._localRedactionEvent = null;\n if (this.event.unsigned) {\n this.event.unsigned.redacted_because = undefined;\n }\n return !!value;\n }\n markLocallyRedacted(redactionEvent) {\n if (this._localRedactionEvent) return;\n this.emit(MatrixEventEvent.BeforeRedaction, this, redactionEvent);\n this._localRedactionEvent = redactionEvent;\n if (!this.event.unsigned) {\n this.event.unsigned = {};\n }\n this.event.unsigned.redacted_because = redactionEvent.event;\n }\n\n /**\n * Change the visibility of an event, as per https://github.com/matrix-org/matrix-doc/pull/3531 .\n *\n * @param visibilityChange - event holding a hide/unhide payload, or nothing\n * if the event is being reset to its original visibility (presumably\n * by a visibility event being redacted).\n *\n * @remarks\n * Fires {@link MatrixEventEvent.VisibilityChange} if `visibilityEvent`\n * caused a change in the actual visibility of this event, either by making it\n * visible (if it was hidden), by making it hidden (if it was visible) or by\n * changing the reason (if it was hidden).\n */\n applyVisibilityEvent(visibilityChange) {\n var _visibilityChange$vis, _visibilityChange$rea;\n var visible = (_visibilityChange$vis = visibilityChange === null || visibilityChange === void 0 ? void 0 : visibilityChange.visible) !== null && _visibilityChange$vis !== void 0 ? _visibilityChange$vis : true;\n var reason = (_visibilityChange$rea = visibilityChange === null || visibilityChange === void 0 ? void 0 : visibilityChange.reason) !== null && _visibilityChange$rea !== void 0 ? _visibilityChange$rea : null;\n var change = false;\n if (this.visibility.visible !== visible) {\n change = true;\n } else if (!this.visibility.visible && this.visibility[\"reason\"] !== reason) {\n change = true;\n }\n if (change) {\n if (visible) {\n this.visibility = MESSAGE_VISIBLE;\n } else {\n this.visibility = Object.freeze({\n visible: false,\n reason\n });\n }\n this.emit(MatrixEventEvent.VisibilityChange, this, visible);\n }\n }\n\n /**\n * Return instructions to display or hide the message.\n *\n * @returns Instructions determining whether the message\n * should be displayed.\n */\n messageVisibility() {\n // Note: We may return `this.visibility` without fear, as\n // this is a shallow frozen object.\n return this.visibility;\n }\n\n /**\n * Update the content of an event in the same way it would be by the server\n * if it were redacted before it was sent to us\n *\n * @param redactionEvent - event causing the redaction\n * @param room - the room in which the event exists\n */\n makeRedacted(redactionEvent, room) {\n // quick sanity-check\n if (!redactionEvent.event) {\n throw new Error(\"invalid redactionEvent in makeRedacted\");\n }\n this._localRedactionEvent = null;\n this.emit(MatrixEventEvent.BeforeRedaction, this, redactionEvent);\n this._replacingEvent = null;\n // we attempt to replicate what we would see from the server if\n // the event had been redacted before we saw it.\n //\n // The server removes (most of) the content of the event, and adds a\n // \"redacted_because\" key to the unsigned section containing the\n // redacted event.\n if (!this.event.unsigned) {\n this.event.unsigned = {};\n }\n this.event.unsigned.redacted_because = redactionEvent.event;\n for (var _key2 in this.event) {\n if (this.event.hasOwnProperty(_key2) && !REDACT_KEEP_KEYS.has(_key2)) {\n delete this.event[_key2];\n }\n }\n\n // If the event is encrypted prune the decrypted bits\n if (this.isEncrypted()) {\n this.clearEvent = undefined;\n }\n var keeps = this.getType() in REDACT_KEEP_CONTENT_MAP ? REDACT_KEEP_CONTENT_MAP[this.getType()] : {};\n var content = this.getContent();\n for (var _key3 in content) {\n if (content.hasOwnProperty(_key3) && !keeps[_key3]) {\n delete content[_key3];\n }\n }\n\n // If the redacted event was in a thread (but not thread root), move it\n // to the main timeline. This will change if MSC3389 is merged.\n if (!this.isThreadRoot && this.threadRootId && this.threadRootId !== this.getId()) {\n this.moveAllRelatedToMainTimeline(room);\n redactionEvent.moveToMainTimeline(room);\n }\n this.invalidateExtensibleEvent();\n }\n moveAllRelatedToMainTimeline(room) {\n var thread = this.thread;\n this.moveToMainTimeline(room);\n\n // If we dont have access to the thread, we can only move this\n // event, not things related to it.\n if (thread) {\n for (var _event of thread.events) {\n var _event$getRelation;\n if (((_event$getRelation = _event.getRelation()) === null || _event$getRelation === void 0 ? void 0 : _event$getRelation.event_id) === this.getId()) {\n _event.moveAllRelatedToMainTimeline(room);\n }\n }\n }\n }\n moveToMainTimeline(room) {\n var _this$thread;\n // Remove it from its thread\n (_this$thread = this.thread) === null || _this$thread === void 0 || _this$thread.timelineSet.removeEvent(this.getId());\n this.setThread(undefined);\n\n // And insert it into the main timeline\n var timeline = room.getLiveTimeline();\n // We use insertEventIntoTimeline to insert it in timestamp order,\n // because we don't know where it should go (until we have MSC4033).\n timeline.getTimelineSet().insertEventIntoTimeline(this, timeline, timeline.getState(EventTimeline.FORWARDS), false);\n }\n\n /**\n * Check if this event has been redacted\n *\n * @returns True if this event has been redacted\n */\n isRedacted() {\n return Boolean(this.getUnsigned().redacted_because);\n }\n\n /**\n * Check if this event is a redaction of another event\n *\n * @returns True if this event is a redaction\n */\n isRedaction() {\n return this.getType() === EventType.RoomRedaction;\n }\n\n /**\n * Return the visibility change caused by this event,\n * as per https://github.com/matrix-org/matrix-doc/pull/3531.\n *\n * @returns If the event is a well-formed visibility change event,\n * an instance of `IVisibilityChange`, otherwise `null`.\n */\n asVisibilityChange() {\n if (!EVENT_VISIBILITY_CHANGE_TYPE.matches(this.getType())) {\n // Not a visibility change event.\n return null;\n }\n var relation = this.getRelation();\n if (!relation || relation.rel_type != \"m.reference\") {\n // Ill-formed, ignore this event.\n return null;\n }\n var eventId = relation.event_id;\n if (!eventId) {\n // Ill-formed, ignore this event.\n return null;\n }\n var content = this.getWireContent();\n var visible = !!content.visible;\n var reason = content.reason;\n if (reason && typeof reason != \"string\") {\n // Ill-formed, ignore this event.\n return null;\n }\n // Well-formed visibility change event.\n return {\n visible,\n reason,\n eventId\n };\n }\n\n /**\n * Check if this event alters the visibility of another event,\n * as per https://github.com/matrix-org/matrix-doc/pull/3531.\n *\n * @returns True if this event alters the visibility\n * of another event.\n */\n isVisibilityEvent() {\n return EVENT_VISIBILITY_CHANGE_TYPE.matches(this.getType());\n }\n\n /**\n * Get the (decrypted, if necessary) redaction event JSON\n * if event was redacted\n *\n * @returns The redaction event JSON, or an empty object\n */\n getRedactionEvent() {\n var _this$clearEvent, _this$event$unsigned;\n if (!this.isRedacted()) return null;\n if ((_this$clearEvent = this.clearEvent) !== null && _this$clearEvent !== void 0 && _this$clearEvent.unsigned) {\n var _this$clearEvent$unsi, _this$clearEvent2;\n return (_this$clearEvent$unsi = (_this$clearEvent2 = this.clearEvent) === null || _this$clearEvent2 === void 0 ? void 0 : _this$clearEvent2.unsigned.redacted_because) !== null && _this$clearEvent$unsi !== void 0 ? _this$clearEvent$unsi : null;\n } else if ((_this$event$unsigned = this.event.unsigned) !== null && _this$event$unsigned !== void 0 && _this$event$unsigned.redacted_because) {\n return this.event.unsigned.redacted_because;\n } else {\n return {};\n }\n }\n\n /**\n * Get the push actions, if known, for this event\n *\n * @returns push actions\n */\n getPushActions() {\n return this.pushDetails.actions || null;\n }\n\n /**\n * Get the push details, if known, for this event\n *\n * @returns push actions\n */\n getPushDetails() {\n return this.pushDetails;\n }\n\n /**\n * Set the push details for this event.\n *\n * @param pushActions - push actions\n * @param rule - the executed push rule\n */\n setPushDetails(pushActions, rule) {\n this.pushDetails = {\n actions: pushActions,\n rule\n };\n }\n\n /**\n * Replace the `event` property and recalculate any properties based on it.\n * @param event - the object to assign to the `event` property\n */\n handleRemoteEcho(event) {\n var _this$getAge;\n var oldUnsigned = this.getUnsigned();\n var oldId = this.getId();\n this.event = event;\n // if this event was redacted before it was sent, it's locally marked as redacted.\n // At this point, we've received the remote echo for the event, but not yet for\n // the redaction that we are sending ourselves. Preserve the locally redacted\n // state by copying over redacted_because so we don't get a flash of\n // redacted, not-redacted, redacted as remote echos come in\n if (oldUnsigned.redacted_because) {\n if (!this.event.unsigned) {\n this.event.unsigned = {};\n }\n this.event.unsigned.redacted_because = oldUnsigned.redacted_because;\n }\n // successfully sent.\n this.setStatus(null);\n if (this.getId() !== oldId) {\n // emit the event if it changed\n this.emit(MatrixEventEvent.LocalEventIdReplaced, this);\n }\n this.localTimestamp = Date.now() - ((_this$getAge = this.getAge()) !== null && _this$getAge !== void 0 ? _this$getAge : 0);\n }\n\n /**\n * Whether the event is in any phase of sending, send failure, waiting for\n * remote echo, etc.\n */\n isSending() {\n return !!this.status;\n }\n\n /**\n * Update the event's sending status and emit an event as well.\n *\n * @param status - The new status\n */\n setStatus(status) {\n this.status = status;\n this.emit(MatrixEventEvent.Status, this, status);\n }\n replaceLocalEventId(eventId) {\n this.event.event_id = eventId;\n this.emit(MatrixEventEvent.LocalEventIdReplaced, this);\n }\n\n /**\n * Get whether the event is a relation event, and of a given type if\n * `relType` is passed in. State events cannot be relation events\n *\n * @param relType - if given, checks that the relation is of the\n * given type\n */\n isRelation(relType) {\n var _this$getWireContent3;\n // Relation info is lifted out of the encrypted content when sent to\n // encrypted rooms, so we have to check `getWireContent` for this.\n var relation = (_this$getWireContent3 = this.getWireContent()) === null || _this$getWireContent3 === void 0 ? void 0 : _this$getWireContent3[\"m.relates_to\"];\n if (this.isState() && !!(relation !== null && relation !== void 0 && relation.rel_type) && [RelationType.Replace, RelationType.Thread].includes(relation.rel_type)) {\n // State events cannot be m.replace or m.thread relations\n return false;\n }\n return !!(relation !== null && relation !== void 0 && relation.rel_type && relation.event_id && (relType ? relation.rel_type === relType : true));\n }\n\n /**\n * Get relation info for the event, if any.\n */\n getRelation() {\n var _this$getWireContent$2;\n if (!this.isRelation()) {\n return null;\n }\n return (_this$getWireContent$2 = this.getWireContent()[\"m.relates_to\"]) !== null && _this$getWireContent$2 !== void 0 ? _this$getWireContent$2 : null;\n }\n\n /**\n * Set an event that replaces the content of this event, through an m.replace relation.\n *\n * @param newEvent - the event with the replacing content, if any.\n *\n * @remarks\n * Fires {@link MatrixEventEvent.Replaced}\n */\n makeReplaced(newEvent) {\n // don't allow redacted events to be replaced.\n // if newEvent is null we allow to go through though,\n // as with local redaction, the replacing event might get\n // cancelled, which should be reflected on the target event.\n if (this.isRedacted() && newEvent) {\n return;\n }\n // don't allow state events to be replaced using this mechanism as per MSC2676\n if (this.isState()) {\n return;\n }\n if (this._replacingEvent !== newEvent) {\n this._replacingEvent = newEvent !== null && newEvent !== void 0 ? newEvent : null;\n this.emit(MatrixEventEvent.Replaced, this);\n this.invalidateExtensibleEvent();\n }\n }\n\n /**\n * Returns the status of any associated edit or redaction\n * (not for reactions/annotations as their local echo doesn't affect the original event),\n * or else the status of the event.\n */\n getAssociatedStatus() {\n if (this._replacingEvent) {\n return this._replacingEvent.status;\n } else if (this._localRedactionEvent) {\n return this._localRedactionEvent.status;\n }\n return this.status;\n }\n getServerAggregatedRelation(relType) {\n var _this$getUnsigned$mR;\n return (_this$getUnsigned$mR = this.getUnsigned()[\"m.relations\"]) === null || _this$getUnsigned$mR === void 0 ? void 0 : _this$getUnsigned$mR[relType];\n }\n\n /**\n * Returns the event ID of the event replacing the content of this event, if any.\n */\n replacingEventId() {\n var replaceRelation = this.getServerAggregatedRelation(RelationType.Replace);\n if (replaceRelation) {\n return replaceRelation.event_id;\n } else if (this._replacingEvent) {\n return this._replacingEvent.getId();\n }\n }\n\n /**\n * Returns the event replacing the content of this event, if any.\n * Replacements are aggregated on the server, so this would only\n * return an event in case it came down the sync, or for local echo of edits.\n */\n replacingEvent() {\n return this._replacingEvent;\n }\n\n /**\n * Returns the origin_server_ts of the event replacing the content of this event, if any.\n */\n replacingEventDate() {\n var replaceRelation = this.getServerAggregatedRelation(RelationType.Replace);\n if (replaceRelation) {\n var ts = replaceRelation.origin_server_ts;\n if (Number.isFinite(ts)) {\n return new Date(ts);\n }\n } else if (this._replacingEvent) {\n var _this$_replacingEvent2;\n return (_this$_replacingEvent2 = this._replacingEvent.getDate()) !== null && _this$_replacingEvent2 !== void 0 ? _this$_replacingEvent2 : undefined;\n }\n }\n\n /**\n * Returns the event that wants to redact this event, but hasn't been sent yet.\n * @returns the event\n */\n localRedactionEvent() {\n return this._localRedactionEvent;\n }\n\n /**\n * For relations and redactions, returns the event_id this event is referring to.\n */\n getAssociatedId() {\n var relation = this.getRelation();\n if (this.replyEventId) {\n return this.replyEventId;\n } else if (relation) {\n return relation.event_id;\n } else if (this.isRedaction()) {\n return this.event.redacts;\n }\n }\n\n /**\n * Checks if this event is associated with another event. See `getAssociatedId`.\n */\n hasAssociation() {\n return !!this.getAssociatedId();\n }\n\n /**\n * Update the related id with a new one.\n *\n * Used to replace a local id with remote one before sending\n * an event with a related id.\n *\n * @param eventId - the new event id\n */\n updateAssociatedId(eventId) {\n var relation = this.getRelation();\n if (relation) {\n relation.event_id = eventId;\n } else if (this.isRedaction()) {\n this.event.redacts = eventId;\n }\n }\n\n /**\n * Flags an event as cancelled due to future conditions. For example, a verification\n * request event in the same sync transaction may be flagged as cancelled to warn\n * listeners that a cancellation event is coming down the same pipe shortly.\n * @param cancelled - Whether the event is to be cancelled or not.\n */\n flagCancelled() {\n var cancelled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this._isCancelled = cancelled;\n }\n\n /**\n * Gets whether or not the event is flagged as cancelled. See flagCancelled() for\n * more information.\n * @returns True if the event is cancelled, false otherwise.\n */\n isCancelled() {\n return this._isCancelled;\n }\n\n /**\n * Get a copy/snapshot of this event. The returned copy will be loosely linked\n * back to this instance, though will have \"frozen\" event information. Other\n * properties of this MatrixEvent instance will be copied verbatim, which can\n * mean they are in reference to this instance despite being on the copy too.\n * The reference the snapshot uses does not change, however members aside from\n * the underlying event will not be deeply cloned, thus may be mutated internally.\n * For example, the sender profile will be copied over at snapshot time, and\n * the sender profile internally may mutate without notice to the consumer.\n *\n * This is meant to be used to snapshot the event details themselves, not the\n * features (such as sender) surrounding the event.\n * @returns A snapshot of this event.\n */\n toSnapshot() {\n var ev = new MatrixEvent(JSON.parse(JSON.stringify(this.event)));\n for (var _ref6 of Object.entries(this)) {\n var _ref5 = _slicedToArray(_ref6, 2);\n var p = _ref5[0];\n var v = _ref5[1];\n if (p !== \"event\") {\n // exclude the thing we just cloned\n // @ts-ignore - XXX: this is just nasty\n ev[p] = v;\n }\n }\n return ev;\n }\n\n /**\n * Determines if this event is equivalent to the given event. This only checks\n * the event object itself, not the other properties of the event. Intended for\n * use with toSnapshot() to identify events changing.\n * @param otherEvent - The other event to check against.\n * @returns True if the events are the same, false otherwise.\n */\n isEquivalentTo(otherEvent) {\n if (!otherEvent) return false;\n if (otherEvent === this) return true;\n var myProps = deepSortedObjectEntries(this.event);\n var theirProps = deepSortedObjectEntries(otherEvent.event);\n return JSON.stringify(myProps) === JSON.stringify(theirProps);\n }\n\n /**\n * Summarise the event as JSON.\n *\n * If encrypted, include both the decrypted and encrypted view of the event.\n *\n * This is named `toJSON` for use with `JSON.stringify` which checks objects\n * for functions named `toJSON` and will call them to customise the output\n * if they are defined.\n *\n * **WARNING** Do not log the result of this method; otherwise, it will end up\n * in rageshakes, leading to a privacy violation.\n *\n * @deprecated Prefer to use {@link MatrixEvent#getEffectiveEvent} or similar.\n * This method will be removed soon; it is too easy to use it accidentally\n * and cause a privacy violation (cf https://github.com/vector-im/element-web/issues/26380).\n * In any case, the value it returns is not a faithful serialization of the object.\n */\n toJSON() {\n var event = this.getEffectiveEvent();\n if (!this.isEncrypted()) {\n return event;\n }\n return {\n decrypted: event,\n encrypted: this.event\n };\n }\n setTxnId(txnId) {\n this.txnId = txnId;\n }\n getTxnId() {\n return this.txnId;\n }\n\n /**\n * Set the instance of a thread associated with the current event\n * @param thread - the thread\n */\n setThread(thread) {\n // don't allow state events to be threaded as per the spec\n if (this.isState()) {\n return;\n }\n if (this.thread) {\n this.reEmitter.stopReEmitting(this.thread, [ThreadEvent.Update]);\n }\n this.thread = thread;\n this.setThreadId(thread === null || thread === void 0 ? void 0 : thread.id);\n if (thread) {\n this.reEmitter.reEmit(thread, [ThreadEvent.Update]);\n }\n }\n\n /**\n * Get the instance of the thread associated with the current event\n */\n getThread() {\n return this.thread;\n }\n setThreadId(threadId) {\n this.threadId = threadId;\n }\n\n /**\n * Unstable getter to try and get the sticky information for the event.\n * If the event is not a sticky event (or not supported by the server),\n * then this returns `undefined`.\n *\n * `duration_ms` is safely bounded to a hour.\n */\n get unstableStickyInfo() {\n var _this$event$msc4354_s, _this$event$unsigned2;\n if (!((_this$event$msc4354_s = this.event.msc4354_sticky) !== null && _this$event$msc4354_s !== void 0 && _this$event$msc4354_s.duration_ms)) {\n return undefined;\n }\n return {\n duration_ms: Math.min(MAX_STICKY_DURATION_MS, this.event.msc4354_sticky.duration_ms),\n // This is assumed to be bounded server-side.\n duration_ttl_ms: (_this$event$unsigned2 = this.event.unsigned) === null || _this$event$unsigned2 === void 0 ? void 0 : _this$event$unsigned2.msc4354_sticky_duration_ttl_ms\n };\n }\n}\n\n/* REDACT_KEEP_KEYS gives the keys we keep when an event is redacted\n *\n * This is specified here:\n * http://matrix.org/speculator/spec/HEAD/client_server/latest.html#redactions\n *\n * Also:\n * - We keep 'unsigned' since that is created by the local server\n * - We keep user_id for backwards-compat with v1\n */\nvar REDACT_KEEP_KEYS = new Set([\"event_id\", \"type\", \"room_id\", \"user_id\", \"sender\", \"state_key\", \"prev_state\", \"content\", \"unsigned\", \"origin_server_ts\"]);\n\n// a map from state event type to the .content keys we keep when an event is redacted\nvar REDACT_KEEP_CONTENT_MAP = {\n [EventType.RoomMember]: {\n membership: 1\n },\n [EventType.RoomJoinRules]: {\n join_rule: 1\n },\n [EventType.RoomPowerLevels]: {\n ban: 1,\n events: 1,\n events_default: 1,\n kick: 1,\n redact: 1,\n state_default: 1,\n users: 1,\n users_default: 1\n }\n};\n//# sourceMappingURL=event.js.map","/*\nCopyright 2025 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Room versions strings that we know about and do not use hydra semantics.\n */\nvar PRE_HYDRA_ROOM_VERSIONS = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\"];\n\n/**\n * Checks if the given room version is one where new \"hydra\" power level\n * semantics (ie. room version 12 or later) should be used\n * (see https://github.com/matrix-org/matrix-spec-proposals/pull/4289).\n * This will return `false` for versions that are known to the js-sdk and\n * do not use hydra: any room versions unknown to the js-sdk (experimental or\n * otherwise) will cause the function to return true.\n *\n * @param roomVersion - The version of the room to check.\n * @returns `true` if hydra semantics should be used for the room version, `false` otherwise.\n */\nexport function shouldUseHydraForRoomVersion(roomVersion) {\n return !PRE_HYDRA_ROOM_VERSIONS.includes(roomVersion);\n}\n//# sourceMappingURL=roomVersion.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { RoomMember } from \"./room-member.js\";\nimport { logger } from \"../logger.js\";\nimport { isNumber, removeHiddenChars } from \"../utils.js\";\nimport { EventType, UNSTABLE_MSC2716_MARKER } from \"../@types/event.js\";\nimport { MatrixEventEvent } from \"./event.js\";\nimport { GuestAccess, HistoryVisibility, JoinRule } from \"../@types/partials.js\";\nimport { TypedEventEmitter } from \"./typed-event-emitter.js\";\nimport { Beacon, BeaconEvent, getBeaconInfoIdentifier } from \"./beacon.js\";\nimport { TypedReEmitter } from \"../ReEmitter.js\";\nimport { M_BEACON, M_BEACON_INFO } from \"../@types/beacon.js\";\nimport { KnownMembership } from \"../@types/membership.js\";\nimport { shouldUseHydraForRoomVersion } from \"../utils/roomVersion.js\";\n// possible statuses for out-of-band member loading\nvar OobStatus = /*#__PURE__*/function (OobStatus) {\n OobStatus[OobStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n OobStatus[OobStatus[\"InProgress\"] = 1] = \"InProgress\";\n OobStatus[OobStatus[\"Finished\"] = 2] = \"Finished\";\n return OobStatus;\n}(OobStatus || {});\nexport var RoomStateEvent = /*#__PURE__*/function (RoomStateEvent) {\n RoomStateEvent[\"Events\"] = \"RoomState.events\";\n RoomStateEvent[\"Members\"] = \"RoomState.members\";\n RoomStateEvent[\"NewMember\"] = \"RoomState.newMember\";\n RoomStateEvent[\"Update\"] = \"RoomState.update\";\n // signals batches of updates without specificity\n RoomStateEvent[\"BeaconLiveness\"] = \"RoomState.BeaconLiveness\";\n RoomStateEvent[\"Marker\"] = \"RoomState.Marker\";\n return RoomStateEvent;\n}({});\nexport class RoomState extends TypedEventEmitter {\n /**\n * Construct room state.\n *\n * Room State represents the state of the room at a given point.\n * It can be mutated by adding state events to it.\n * There are two types of room member associated with a state event:\n * normal member objects (accessed via getMember/getMembers) which mutate\n * with the state to represent the current state of that room/user, e.g.\n * the object returned by `getMember('@bob:example.com')` will mutate to\n * get a different display name if Bob later changes his display name\n * in the room.\n * There are also 'sentinel' members (accessed via getSentinelMember).\n * These also represent the state of room members at the point in time\n * represented by the RoomState object, but unlike objects from getMember,\n * sentinel objects will always represent the room state as at the time\n * getSentinelMember was called, so if Bob subsequently changes his display\n * name, a room member object previously acquired with getSentinelMember\n * will still have his old display name. Calling getSentinelMember again\n * after the display name change will return a new RoomMember object\n * with Bob's new display name.\n *\n * @param roomId - Optional. The ID of the room which has this state.\n * If none is specified it just tracks paginationTokens, useful for notifTimelineSet\n * @param oobMemberFlags - Optional. The state of loading out of bound members.\n * As the timeline might get reset while they are loading, this state needs to be inherited\n * and shared when the room state is cloned for the new timeline.\n * This should only be passed from clone.\n */\n constructor(roomId) {\n var oobMemberFlags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n status: OobStatus.NotStarted\n };\n super();\n this.roomId = roomId;\n this.oobMemberFlags = oobMemberFlags;\n _defineProperty(this, \"reEmitter\", new TypedReEmitter(this));\n _defineProperty(this, \"sentinels\", {});\n // userId: RoomMember\n // stores fuzzy matches to a list of userIDs (applies utils.removeHiddenChars to keys)\n _defineProperty(this, \"displayNameToUserIds\", new Map());\n _defineProperty(this, \"userIdsToDisplayNames\", {});\n _defineProperty(this, \"tokenToInvite\", {});\n // 3pid invite state_key to m.room.member invite\n _defineProperty(this, \"joinedMemberCount\", null);\n // cache of the number of joined members\n // joined members count from summary api\n // once set, we know the server supports the summary api\n // and we should only trust that\n // we could also only trust that before OOB members\n // are loaded but doesn't seem worth the hassle atm\n _defineProperty(this, \"summaryJoinedMemberCount\", null);\n // same for invited member count\n _defineProperty(this, \"invitedMemberCount\", null);\n _defineProperty(this, \"summaryInvitedMemberCount\", null);\n _defineProperty(this, \"modified\", -1);\n // XXX: Should be read-only\n // The room member dictionary, keyed on the user's ID.\n _defineProperty(this, \"members\", {});\n // userId: RoomMember\n // The state events dictionary, keyed on the event type and then the state_key value.\n _defineProperty(this, \"events\", new Map());\n // Map<eventType, Map<stateKey, MatrixEvent>>\n // The pagination token for this state.\n _defineProperty(this, \"paginationToken\", null);\n _defineProperty(this, \"beacons\", new Map());\n _defineProperty(this, \"_liveBeaconIds\", []);\n // We only wants to print warnings about bad room state once.\n _defineProperty(this, \"getVersionWarning\", false);\n this.updateModifiedTime();\n }\n\n /**\n * Gets the version of the room\n * @returns The version of the room\n */\n getRoomVersion() {\n var _createEvent$getConte;\n var createEvent = this.getStateEvents(EventType.RoomCreate, \"\");\n if (!createEvent) {\n if (!this.getVersionWarning) {\n logger.warn(\"[getVersion] Room \" + this.roomId + \" does not have an m.room.create event\");\n this.getVersionWarning = true;\n }\n return \"1\";\n }\n return (_createEvent$getConte = createEvent.getContent()[\"room_version\"]) !== null && _createEvent$getConte !== void 0 ? _createEvent$getConte : \"1\";\n }\n\n /**\n * Returns the number of joined members in this room\n * This method caches the result.\n * @returns The number of members in this room whose membership is 'join'\n */\n getJoinedMemberCount() {\n if (this.summaryJoinedMemberCount !== null) {\n return this.summaryJoinedMemberCount;\n }\n if (this.joinedMemberCount === null) {\n this.joinedMemberCount = this.getMembers().reduce((count, m) => {\n return m.membership === KnownMembership.Join ? count + 1 : count;\n }, 0);\n }\n return this.joinedMemberCount;\n }\n\n /**\n * Set the joined member count explicitly (like from summary part of the sync response)\n * @param count - the amount of joined members\n */\n setJoinedMemberCount(count) {\n this.summaryJoinedMemberCount = count;\n }\n\n /**\n * Returns the number of invited members in this room\n * @returns The number of members in this room whose membership is 'invite'\n */\n getInvitedMemberCount() {\n if (this.summaryInvitedMemberCount !== null) {\n return this.summaryInvitedMemberCount;\n }\n if (this.invitedMemberCount === null) {\n this.invitedMemberCount = this.getMembers().reduce((count, m) => {\n return m.membership === KnownMembership.Invite ? count + 1 : count;\n }, 0);\n }\n return this.invitedMemberCount;\n }\n\n /**\n * Set the amount of invited members in this room\n * @param count - the amount of invited members\n */\n setInvitedMemberCount(count) {\n this.summaryInvitedMemberCount = count;\n }\n\n /**\n * Get all RoomMembers in this room.\n * @returns A list of RoomMembers.\n */\n getMembers() {\n return Object.values(this.members);\n }\n\n /**\n * Get all RoomMembers in this room, excluding the user IDs provided.\n * @param excludedIds - The user IDs to exclude.\n * @returns A list of RoomMembers.\n */\n getMembersExcept(excludedIds) {\n return this.getMembers().filter(m => !excludedIds.includes(m.userId));\n }\n\n /**\n * Get a room member by their user ID.\n * @param userId - The room member's user ID.\n * @returns The member or null if they do not exist.\n */\n getMember(userId) {\n return this.members[userId] || null;\n }\n\n /**\n * Get a room member whose properties will not change with this room state. You\n * typically want this if you want to attach a RoomMember to a MatrixEvent which\n * may no longer be represented correctly by Room.currentState or Room.oldState.\n * The term 'sentinel' refers to the fact that this RoomMember is an unchanging\n * guardian for state at this particular point in time.\n * @param userId - The room member's user ID.\n * @returns The member or null if they do not exist.\n */\n getSentinelMember(userId) {\n if (!userId) return null;\n var sentinel = this.sentinels[userId];\n if (sentinel === undefined) {\n sentinel = new RoomMember(this.roomId, userId);\n var member = this.members[userId];\n if (member !== null && member !== void 0 && member.events.member) {\n sentinel.setMembershipEvent(member.events.member, this);\n }\n this.sentinels[userId] = sentinel;\n }\n return sentinel;\n }\n\n /**\n * Get state events from the state of the room.\n * @param eventType - The event type of the state event.\n * @returns A list of events\n */\n\n /**\n * Get state events from the state of the room.\n * @param eventType - The event type of the state event.\n * @param stateKey - The state_key of the state event.\n * @returns A single event (or null if no match found).\n */\n\n getStateEvents(eventType, stateKey) {\n if (!this.events.has(eventType)) {\n // no match\n return stateKey === undefined ? [] : null;\n }\n if (stateKey === undefined) {\n // return all values\n return Array.from(this.events.get(eventType).values());\n }\n var event = this.events.get(eventType).get(stateKey);\n return event ? event : null;\n }\n get hasLiveBeacons() {\n var _this$liveBeaconIds;\n return !!((_this$liveBeaconIds = this.liveBeaconIds) !== null && _this$liveBeaconIds !== void 0 && _this$liveBeaconIds.length);\n }\n get liveBeaconIds() {\n return this._liveBeaconIds;\n }\n\n /**\n * Creates a copy of this room state so that mutations to either won't affect the other.\n * @returns the copy of the room state\n */\n clone() {\n var copy = new RoomState(this.roomId, this.oobMemberFlags);\n\n // Ugly hack: because setStateEvents will mark\n // members as susperseding future out of bound members\n // if loading is in progress (through oobMemberFlags)\n // since these are not new members, we're merely copying them\n // set the status to not started\n // after copying, we set back the status\n var status = this.oobMemberFlags.status;\n this.oobMemberFlags.status = OobStatus.NotStarted;\n Array.from(this.events.values()).forEach(eventsByStateKey => {\n copy.setStateEvents(Array.from(eventsByStateKey.values()));\n });\n\n // Ugly hack: see above\n this.oobMemberFlags.status = status;\n if (this.summaryInvitedMemberCount !== null) {\n copy.setInvitedMemberCount(this.getInvitedMemberCount());\n }\n if (this.summaryJoinedMemberCount !== null) {\n copy.setJoinedMemberCount(this.getJoinedMemberCount());\n }\n\n // copy out of band flags if needed\n if (this.oobMemberFlags.status == OobStatus.Finished) {\n // copy markOutOfBand flags\n this.getMembers().forEach(member => {\n if (member.isOutOfBand()) {\n var _copy$getMember;\n (_copy$getMember = copy.getMember(member.userId)) === null || _copy$getMember === void 0 || _copy$getMember.markOutOfBand();\n }\n });\n }\n return copy;\n }\n\n /**\n * Add previously unknown state events.\n * When lazy loading members while back-paginating,\n * the relevant room state for the timeline chunk at the end\n * of the chunk can be set with this method.\n * @param events - state events to prepend\n */\n setUnknownStateEvents(events) {\n var unknownStateEvents = events.filter(event => {\n return !this.events.has(event.getType()) || !this.events.get(event.getType()).has(event.getStateKey());\n });\n this.setStateEvents(unknownStateEvents);\n }\n\n /**\n * Add an array of one or more state MatrixEvents, overwriting any existing\n * state with the same `{type, stateKey}` tuple. Will fire \"RoomState.events\"\n * for every event added. May fire \"RoomState.members\" if there are\n * `m.room.member` events. May fire \"RoomStateEvent.Marker\" if there are\n * `UNSTABLE_MSC2716_MARKER` events.\n * @param stateEvents - a list of state events for this room.\n *\n * @remarks\n * Fires {@link RoomStateEvent.Members}\n * Fires {@link RoomStateEvent.NewMember}\n * Fires {@link RoomStateEvent.Events}\n * Fires {@link RoomStateEvent.Marker}\n */\n setStateEvents(stateEvents, markerFoundOptions) {\n this.updateModifiedTime();\n\n // update the core event dict\n // Track display names that change so we can recalculate disambiguation\n var affectedDisplayNames = new Set();\n // Track userIds whose membership events we process so we don't emit duplicate events\n var processedMemberUserIds = new Set();\n stateEvents.forEach(event => {\n if (event.getRoomId() !== this.roomId || !event.isState()) return;\n if (M_BEACON_INFO.matches(event.getType())) {\n this.setBeacon(event);\n }\n var lastStateEvent = this.getStateEventMatching(event);\n this.setStateEvent(event);\n if (event.getType() === EventType.RoomMember) {\n var _event$getContent$dis;\n var userId = event.getStateKey();\n processedMemberUserIds.add(userId);\n var newDisplayName = (_event$getContent$dis = event.getContent().displayname) !== null && _event$getContent$dis !== void 0 ? _event$getContent$dis : \"\";\n var oldDisplayName = this.userIdsToDisplayNames[userId];\n\n // Track both old and new display names for disambiguation recalculation\n if (oldDisplayName) {\n var strippedOld = removeHiddenChars(oldDisplayName);\n if (strippedOld) affectedDisplayNames.add(strippedOld);\n }\n if (newDisplayName) {\n var strippedNew = removeHiddenChars(newDisplayName);\n if (strippedNew) affectedDisplayNames.add(strippedNew);\n }\n this.updateDisplayNameCache(userId, newDisplayName);\n this.updateThirdPartyTokenCache(event);\n }\n this.emit(RoomStateEvent.Events, event, this, lastStateEvent);\n });\n this.onBeaconLivenessChange();\n // update higher level data structures. This needs to be done AFTER the\n // core event dict as these structures may depend on other state events in\n // the given array (e.g. disambiguating display names in one go to do both\n // clashing names rather than progressively which only catches 1 of them).\n stateEvents.forEach(event => {\n if (event.getRoomId() !== this.roomId || !event.isState()) return;\n if (event.getType() === EventType.RoomMember) {\n var userId = event.getStateKey();\n\n // leave events apparently elide the displayname or avatar_url,\n // so let's fake one up so that we don't leak user ids\n // into the timeline\n if (event.getContent().membership === KnownMembership.Leave || event.getContent().membership === KnownMembership.Ban) {\n event.getContent().avatar_url = event.getContent().avatar_url || event.getPrevContent().avatar_url;\n event.getContent().displayname = event.getContent().displayname || event.getPrevContent().displayname;\n }\n var member = this.getOrCreateMember(userId, event);\n member.setMembershipEvent(event, this);\n this.updateMember(member);\n this.emit(RoomStateEvent.Members, event, this, member);\n } else if (event.getType() === EventType.RoomPowerLevels) {\n // events with unknown state keys should be ignored\n // and should not aggregate onto members power levels\n if (event.getStateKey() !== \"\") {\n return;\n }\n var members = Object.values(this.members);\n var createEvent = this.getStateEvents(EventType.RoomCreate, \"\");\n var creators = getCreators(this.getRoomVersion(), createEvent);\n members.forEach(member => {\n // We only propagate `RoomState.members` event if the\n // power levels has been changed\n // large room suffer from large re-rendering especially when not needed\n var oldLastModified = member.getLastModifiedTime();\n if (createEvent) {\n var pl = powerLevelForUserId(member.userId, event, creators);\n member.setPowerLevel(pl, event);\n }\n if (oldLastModified !== member.getLastModifiedTime()) {\n this.emit(RoomStateEvent.Members, event, this, member);\n }\n });\n\n // assume all our sentinels are now out-of-date\n this.sentinels = {};\n } else if (UNSTABLE_MSC2716_MARKER.matches(event.getType())) {\n this.emit(RoomStateEvent.Marker, event, markerFoundOptions);\n }\n });\n\n // Recalculate disambiguation for all members whose display names were affected.\n // This ensures that when a user changes their name to match (or stop matching)\n // another user, all affected users' disambiguation flags are updated correctly.\n if (affectedDisplayNames.size > 0) {\n // Collect all affected user IDs first to avoid duplicate processing\n var affectedUserIds = new Set();\n for (var displayName of affectedDisplayNames) {\n var _this$displayNameToUs;\n var userIds = (_this$displayNameToUs = this.displayNameToUserIds.get(displayName)) !== null && _this$displayNameToUs !== void 0 ? _this$displayNameToUs : [];\n userIds.forEach(id => affectedUserIds.add(id));\n }\n\n // Process each affected member once, excluding those whose membership\n // events were already processed (they already got their events emitted)\n for (var userId of affectedUserIds) {\n if (processedMemberUserIds.has(userId)) {\n continue;\n }\n var member = this.members[userId];\n if (member !== null && member !== void 0 && member.events.member) {\n var nameChanged = member.recalculateDisambiguatedName(this);\n if (nameChanged) {\n this.emit(RoomStateEvent.Members, member.events.member, this, member);\n }\n }\n }\n }\n this.emit(RoomStateEvent.Update, this);\n }\n processBeaconEvents(events, matrixClient) {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (!events.length ||\n // discard locations if we have no beacons\n !_this.beacons.size) {\n return;\n }\n var beaconByEventIdDict = [..._this.beacons.values()].reduce((dict, beacon) => {\n dict[beacon.beaconInfoId] = beacon;\n return dict;\n }, {});\n var processBeaconRelation = (beaconInfoEventId, event) => {\n if (!M_BEACON.matches(event.getType())) {\n return;\n }\n var beacon = beaconByEventIdDict[beaconInfoEventId];\n if (beacon) {\n beacon.addLocations([event]);\n }\n };\n var _loop = function* _loop(event) {\n var _event$getRelation;\n var relatedToEventId = (_event$getRelation = event.getRelation()) === null || _event$getRelation === void 0 ? void 0 : _event$getRelation.event_id;\n // not related to a beacon we know about; discard\n if (!relatedToEventId || !beaconByEventIdDict[relatedToEventId]) return {\n v: void 0\n };\n if (!M_BEACON.matches(event.getType()) && !event.isEncrypted()) return {\n v: void 0\n };\n try {\n yield matrixClient.decryptEventIfNeeded(event);\n processBeaconRelation(relatedToEventId, event);\n } catch (_unused) {\n if (event.isDecryptionFailure()) {\n // add an event listener for once the event is decrypted.\n event.once(MatrixEventEvent.Decrypted, /*#__PURE__*/_asyncToGenerator(function* () {\n processBeaconRelation(relatedToEventId, event);\n }));\n }\n }\n },\n _ret;\n for (var event of events) {\n _ret = yield* _loop(event);\n if (_ret) return _ret.v;\n }\n })();\n }\n\n /**\n * Looks up a member by the given userId, and if it doesn't exist,\n * create it and emit the `RoomState.newMember` event.\n * This method makes sure the member is added to the members dictionary\n * before emitting, as this is done from setStateEvents and setOutOfBandMember.\n * @param userId - the id of the user to look up\n * @param event - the membership event for the (new) member. Used to emit.\n * @returns the member, existing or newly created.\n *\n * @remarks\n * Fires {@link RoomStateEvent.NewMember}\n */\n getOrCreateMember(userId, event) {\n var member = this.members[userId];\n if (!member) {\n member = new RoomMember(this.roomId, userId);\n // add member to members before emitting any events,\n // as event handlers often lookup the member\n this.members[userId] = member;\n this.emit(RoomStateEvent.NewMember, event, this, member);\n }\n return member;\n }\n setStateEvent(event) {\n if (!this.events.has(event.getType())) {\n this.events.set(event.getType(), new Map());\n }\n this.events.get(event.getType()).set(event.getStateKey(), event);\n }\n\n /**\n * @experimental\n */\n setBeacon(event) {\n var beaconIdentifier = getBeaconInfoIdentifier(event);\n if (this.beacons.has(beaconIdentifier)) {\n var _beacon = this.beacons.get(beaconIdentifier);\n if (event.isRedacted()) {\n var _event$getRedactionEv;\n if (_beacon.beaconInfoId === ((_event$getRedactionEv = event.getRedactionEvent()) === null || _event$getRedactionEv === void 0 ? void 0 : _event$getRedactionEv.redacts)) {\n _beacon.destroy();\n this.beacons.delete(beaconIdentifier);\n }\n return;\n }\n return _beacon.update(event);\n }\n if (event.isRedacted()) {\n return;\n }\n var beacon = new Beacon(event);\n this.reEmitter.reEmit(beacon, [BeaconEvent.New, BeaconEvent.Update, BeaconEvent.Destroy, BeaconEvent.LivenessChange]);\n this.emit(BeaconEvent.New, event, beacon);\n beacon.on(BeaconEvent.LivenessChange, this.onBeaconLivenessChange.bind(this));\n beacon.on(BeaconEvent.Destroy, this.onBeaconLivenessChange.bind(this));\n this.beacons.set(beacon.identifier, beacon);\n }\n\n /**\n * @experimental\n * Check liveness of room beacons\n * emit RoomStateEvent.BeaconLiveness event\n */\n onBeaconLivenessChange() {\n this._liveBeaconIds = Array.from(this.beacons.values()).filter(beacon => beacon.isLive).map(beacon => beacon.identifier);\n this.emit(RoomStateEvent.BeaconLiveness, this, this.hasLiveBeacons);\n }\n getStateEventMatching(event) {\n var _this$events$get$get, _this$events$get;\n return (_this$events$get$get = (_this$events$get = this.events.get(event.getType())) === null || _this$events$get === void 0 ? void 0 : _this$events$get.get(event.getStateKey())) !== null && _this$events$get$get !== void 0 ? _this$events$get$get : null;\n }\n updateMember(member) {\n // this member may have a power level already, so set it.\n var createEvent = this.getStateEvents(EventType.RoomCreate, \"\");\n var pwrLvlEvent = this.getStateEvents(EventType.RoomPowerLevels, \"\");\n if (pwrLvlEvent && createEvent) {\n var powerLevel = powerLevelForUserId(member.userId, pwrLvlEvent, getCreators(this.getRoomVersion(), createEvent));\n member.setPowerLevel(powerLevel, pwrLvlEvent);\n }\n\n // blow away the sentinel which is now outdated\n delete this.sentinels[member.userId];\n this.members[member.userId] = member;\n this.joinedMemberCount = null;\n this.invitedMemberCount = null;\n }\n\n /**\n * Get the out-of-band members loading state, whether loading is needed or not.\n * Note that loading might be in progress and hence isn't needed.\n * @returns whether or not the members of this room need to be loaded\n */\n needsOutOfBandMembers() {\n return this.oobMemberFlags.status === OobStatus.NotStarted;\n }\n\n /**\n * Check if loading of out-of-band-members has completed\n *\n * @returns true if the full membership list of this room has been loaded. False if it is not started or is in\n * progress.\n */\n outOfBandMembersReady() {\n return this.oobMemberFlags.status === OobStatus.Finished;\n }\n\n /**\n * Mark this room state as waiting for out-of-band members,\n * ensuring it doesn't ask for them to be requested again\n * through needsOutOfBandMembers\n */\n markOutOfBandMembersStarted() {\n if (this.oobMemberFlags.status !== OobStatus.NotStarted) {\n return;\n }\n this.oobMemberFlags.status = OobStatus.InProgress;\n }\n\n /**\n * Mark this room state as having failed to fetch out-of-band members\n */\n markOutOfBandMembersFailed() {\n if (this.oobMemberFlags.status !== OobStatus.InProgress) {\n return;\n }\n this.oobMemberFlags.status = OobStatus.NotStarted;\n }\n\n /**\n * Clears the loaded out-of-band members\n */\n clearOutOfBandMembers() {\n var count = 0;\n Object.keys(this.members).forEach(userId => {\n var member = this.members[userId];\n if (member.isOutOfBand()) {\n ++count;\n delete this.members[userId];\n }\n });\n logger.log(\"LL: RoomState removed \".concat(count, \" members...\"));\n this.oobMemberFlags.status = OobStatus.NotStarted;\n }\n\n /**\n * Sets the loaded out-of-band members.\n * @param stateEvents - array of membership state events\n */\n setOutOfBandMembers(stateEvents) {\n logger.log(\"LL: RoomState about to set \".concat(stateEvents.length, \" OOB members ...\"));\n if (this.oobMemberFlags.status !== OobStatus.InProgress) {\n return;\n }\n logger.log(\"LL: RoomState put in finished state ...\");\n this.oobMemberFlags.status = OobStatus.Finished;\n stateEvents.forEach(e => this.setOutOfBandMember(e));\n this.emit(RoomStateEvent.Update, this);\n }\n\n /**\n * Sets a single out of band member, used by both setOutOfBandMembers and clone\n * @param stateEvent - membership state event\n */\n setOutOfBandMember(stateEvent) {\n if (stateEvent.getType() !== EventType.RoomMember) {\n return;\n }\n var userId = stateEvent.getStateKey();\n var existingMember = this.getMember(userId);\n // never replace members received as part of the sync\n if (existingMember && !existingMember.isOutOfBand()) {\n return;\n }\n var member = this.getOrCreateMember(userId, stateEvent);\n member.setMembershipEvent(stateEvent, this);\n // needed to know which members need to be stored seperately\n // as they are not part of the sync accumulator\n // this is cleared by setMembershipEvent so when it's updated through /sync\n member.markOutOfBand();\n this.updateDisplayNameCache(member.userId, member.name);\n this.setStateEvent(stateEvent);\n this.updateMember(member);\n this.emit(RoomStateEvent.Members, stateEvent, this, member);\n }\n\n /**\n * Set the current typing event for this room.\n * @param event - The typing event\n */\n setTypingEvent(event) {\n Object.values(this.members).forEach(function (member) {\n member.setTypingEvent(event);\n });\n }\n\n /**\n * Get the m.room.member event which has the given third party invite token.\n *\n * @param token - The token\n * @returns The m.room.member event or null\n */\n getInviteForThreePidToken(token) {\n return this.tokenToInvite[token] || null;\n }\n\n /**\n * Update the last modified time to the current time.\n */\n updateModifiedTime() {\n this.modified = Date.now();\n }\n\n /**\n * Get the timestamp when this room state was last updated. This timestamp is\n * updated when this object has received new state events.\n * @returns The timestamp\n */\n getLastModifiedTime() {\n return this.modified;\n }\n\n /**\n * Get user IDs with the specified or similar display names.\n * @param displayName - The display name to get user IDs from.\n * @returns An array of user IDs or an empty array.\n */\n getUserIdsWithDisplayName(displayName) {\n var _this$displayNameToUs2;\n return (_this$displayNameToUs2 = this.displayNameToUserIds.get(removeHiddenChars(displayName))) !== null && _this$displayNameToUs2 !== void 0 ? _this$displayNameToUs2 : [];\n }\n\n /**\n * Returns true if userId is in room, event is not redacted and either sender of\n * mxEvent or has power level sufficient to redact events other than their own.\n * @param mxEvent - The event to test permission for\n * @param userId - The user ID of the user to test permission for\n * @returns true if the given used ID can redact given event\n */\n maySendRedactionForEvent(mxEvent, userId) {\n var member = this.getMember(userId);\n if (!member || member.membership === KnownMembership.Leave) return false;\n if (mxEvent.status || mxEvent.isRedacted()) return false;\n\n // The user may have been the sender, but they can't redact their own message\n // if redactions are blocked.\n var canRedact = this.maySendEvent(EventType.RoomRedaction, userId);\n if (!canRedact) return false;\n if (mxEvent.getSender() === userId) return true;\n return this.hasSufficientPowerLevelFor(\"redact\", member.powerLevel);\n }\n\n /**\n * Returns true if the given power level is sufficient for action\n * @param action - The type of power level to check\n * @param powerLevel - The power level of the member\n * @returns true if the given power level is sufficient\n */\n hasSufficientPowerLevelFor(action, powerLevel) {\n var powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, \"\");\n var powerLevels = {};\n if (powerLevelsEvent) {\n powerLevels = powerLevelsEvent.getContent();\n }\n var requiredLevel = 50;\n if (isNumber(powerLevels[action])) {\n requiredLevel = powerLevels[action];\n }\n return powerLevel >= requiredLevel;\n }\n\n /**\n * Short-form for maySendEvent('m.room.message', userId)\n * @param userId - The user ID of the user to test permission for\n * @returns true if the given user ID should be permitted to send\n * message events into the given room.\n */\n maySendMessage(userId) {\n return this.maySendEventOfType(EventType.RoomMessage, userId, false);\n }\n\n /**\n * Returns true if the given user ID has permission to send a normal\n * event of type `eventType` into this room.\n * @param eventType - The type of event to test\n * @param userId - The user ID of the user to test permission for\n * @returns true if the given user ID should be permitted to send\n * the given type of event into this room,\n * according to the room's state.\n */\n maySendEvent(eventType, userId) {\n return this.maySendEventOfType(eventType, userId, false);\n }\n\n /**\n * Returns true if the given MatrixClient has permission to send a state\n * event of type `stateEventType` into this room.\n * @param stateEventType - The type of state events to test\n * @param cli - The client to test permission for\n * @returns true if the given client should be permitted to send\n * the given type of state event into this room,\n * according to the room's state.\n */\n mayClientSendStateEvent(stateEventType, cli) {\n if (cli.isGuest() || !cli.credentials.userId) {\n return false;\n }\n return this.maySendStateEvent(stateEventType, cli.credentials.userId);\n }\n\n /**\n * Returns true if the given user ID has permission to send a state\n * event of type `stateEventType` into this room.\n * @param stateEventType - The type of state events to test\n * @param userId - The user ID of the user to test permission for\n * @returns true if the given user ID should be permitted to send\n * the given type of state event into this room,\n * according to the room's state.\n */\n maySendStateEvent(stateEventType, userId) {\n return this.maySendEventOfType(stateEventType, userId, true);\n }\n\n /**\n * Returns true if the given user ID has permission to send a normal or state\n * event of type `eventType` into this room.\n * @param eventType - The type of event to test\n * @param userId - The user ID of the user to test permission for\n * @param state - If true, tests if the user may send a state\n event of this type. Otherwise tests whether\n they may send a regular event.\n * @returns true if the given user ID should be permitted to send\n * the given type of event into this room,\n * according to the room's state.\n */\n maySendEventOfType(eventType, userId, state) {\n var _roomMember$powerLeve;\n var powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, \"\");\n var powerLevels;\n var eventsLevels = {};\n var stateDefault = 0;\n var eventsDefault = 0;\n if (powerLevelsEvent) {\n powerLevels = powerLevelsEvent.getContent();\n eventsLevels = powerLevels.events || {};\n if (Number.isSafeInteger(powerLevels.state_default)) {\n stateDefault = powerLevels.state_default;\n } else {\n stateDefault = 50;\n }\n if (Number.isSafeInteger(powerLevels.events_default)) {\n eventsDefault = powerLevels.events_default;\n }\n }\n var requiredLevel = state ? stateDefault : eventsDefault;\n if (Number.isSafeInteger(eventsLevels[eventType])) {\n requiredLevel = eventsLevels[eventType];\n }\n var roomMember = this.getMember(userId);\n var userPowerLevel = (_roomMember$powerLeve = roomMember === null || roomMember === void 0 ? void 0 : roomMember.powerLevel) !== null && _roomMember$powerLeve !== void 0 ? _roomMember$powerLeve : 0;\n return userPowerLevel >= requiredLevel;\n }\n\n /**\n * Returns true if the given user ID has permission to trigger notification\n * of type `notifLevelKey`\n * @param notifLevelKey - The level of notification to test (eg. 'room')\n * @param userId - The user ID of the user to test permission for\n * @returns true if the given user ID has permission to trigger a\n * notification of this type.\n */\n mayTriggerNotifOfType(notifLevelKey, userId) {\n var member = this.getMember(userId);\n if (!member) {\n return false;\n }\n var powerLevelsEvent = this.getStateEvents(EventType.RoomPowerLevels, \"\");\n var notifLevel = 50;\n if (powerLevelsEvent && powerLevelsEvent.getContent() && powerLevelsEvent.getContent().notifications && isNumber(powerLevelsEvent.getContent().notifications[notifLevelKey])) {\n notifLevel = powerLevelsEvent.getContent().notifications[notifLevelKey];\n }\n return member.powerLevel >= notifLevel;\n }\n\n /**\n * Returns the join rule based on the m.room.join_rule state event, defaulting to `invite`.\n * @returns the join_rule applied to this room\n */\n getJoinRule() {\n var _joinRuleEvent$getCon;\n var joinRuleEvent = this.getStateEvents(EventType.RoomJoinRules, \"\");\n var joinRuleContent = (_joinRuleEvent$getCon = joinRuleEvent === null || joinRuleEvent === void 0 ? void 0 : joinRuleEvent.getContent()) !== null && _joinRuleEvent$getCon !== void 0 ? _joinRuleEvent$getCon : {};\n return joinRuleContent[\"join_rule\"] || JoinRule.Invite;\n }\n\n /**\n * Returns the history visibility based on the m.room.history_visibility state event, defaulting to `shared`.\n * @returns the history_visibility applied to this room\n */\n getHistoryVisibility() {\n var _historyVisibilityEve;\n var historyVisibilityEvent = this.getStateEvents(EventType.RoomHistoryVisibility, \"\");\n var historyVisibilityContent = (_historyVisibilityEve = historyVisibilityEvent === null || historyVisibilityEvent === void 0 ? void 0 : historyVisibilityEvent.getContent()) !== null && _historyVisibilityEve !== void 0 ? _historyVisibilityEve : {};\n return historyVisibilityContent[\"history_visibility\"] || HistoryVisibility.Shared;\n }\n\n /**\n * Returns the guest access based on the m.room.guest_access state event, defaulting to `shared`.\n * @returns the guest_access applied to this room\n */\n getGuestAccess() {\n var _guestAccessEvent$get;\n var guestAccessEvent = this.getStateEvents(EventType.RoomGuestAccess, \"\");\n var guestAccessContent = (_guestAccessEvent$get = guestAccessEvent === null || guestAccessEvent === void 0 ? void 0 : guestAccessEvent.getContent()) !== null && _guestAccessEvent$get !== void 0 ? _guestAccessEvent$get : {};\n return guestAccessContent[\"guest_access\"] || GuestAccess.Forbidden;\n }\n\n /**\n * Find the predecessor room based on this room state.\n *\n * @param msc3946ProcessDynamicPredecessor - if true, look for an\n * m.room.predecessor state event and use it if found (MSC3946).\n * @returns null if this room has no predecessor. Otherwise, returns\n * the roomId, last eventId and viaServers of the predecessor room.\n *\n * If msc3946ProcessDynamicPredecessor is true, use m.predecessor events\n * as well as m.room.create events to find predecessors.\n *\n * Note: if an m.predecessor event is used, eventId may be undefined\n * since last_known_event_id is optional.\n *\n * Note: viaServers may be undefined, and will definitely be undefined if\n * this predecessor comes from a RoomCreate event (rather than a\n * RoomPredecessor, which has the optional via_servers property).\n */\n findPredecessor() {\n var msc3946ProcessDynamicPredecessor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // Note: the tests for this function are against Room.findPredecessor,\n // which just calls through to here.\n\n if (msc3946ProcessDynamicPredecessor) {\n var predecessorEvent = this.getStateEvents(EventType.RoomPredecessor, \"\");\n if (predecessorEvent) {\n var content = predecessorEvent.getContent();\n var _roomId = content.predecessor_room_id;\n var eventId = content.last_known_event_id;\n if (typeof eventId !== \"string\") {\n eventId = undefined;\n }\n var viaServers = content.via_servers;\n if (!Array.isArray(viaServers)) {\n viaServers = undefined;\n }\n if (typeof _roomId === \"string\") {\n return {\n roomId: _roomId,\n eventId,\n viaServers\n };\n }\n }\n }\n var createEvent = this.getStateEvents(EventType.RoomCreate, \"\");\n if (createEvent) {\n var predecessor = createEvent.getContent()[\"predecessor\"];\n if (predecessor) {\n var _roomId2 = predecessor[\"room_id\"];\n if (typeof _roomId2 === \"string\") {\n var _eventId = predecessor[\"event_id\"];\n if (typeof _eventId !== \"string\" || _eventId === \"\") {\n _eventId = undefined;\n }\n return {\n roomId: _roomId2,\n eventId: _eventId\n };\n }\n }\n }\n return null;\n }\n updateThirdPartyTokenCache(memberEvent) {\n if (!memberEvent.getContent().third_party_invite) {\n return;\n }\n var token = (memberEvent.getContent().third_party_invite.signed || {}).token;\n if (!token) {\n return;\n }\n var threePidInvite = this.getStateEvents(EventType.RoomThirdPartyInvite, token);\n if (!threePidInvite) {\n return;\n }\n this.tokenToInvite[token] = memberEvent;\n }\n updateDisplayNameCache(userId, displayName) {\n var oldName = this.userIdsToDisplayNames[userId];\n delete this.userIdsToDisplayNames[userId];\n if (oldName) {\n // Remove the old name from the cache.\n // We clobber the user_id > name lookup but the name -> [user_id] lookup\n // means we need to remove that user ID from that array rather than nuking\n // the lot.\n var strippedOldName = removeHiddenChars(oldName);\n var existingUserIds = this.displayNameToUserIds.get(strippedOldName);\n if (existingUserIds) {\n // remove this user ID from this array\n var filteredUserIDs = existingUserIds.filter(id => id !== userId);\n this.displayNameToUserIds.set(strippedOldName, filteredUserIDs);\n }\n }\n this.userIdsToDisplayNames[userId] = displayName;\n var strippedDisplayname = displayName && removeHiddenChars(displayName);\n // an empty stripped displayname (undefined/'') will be set to MXID in room-member.js\n if (strippedDisplayname) {\n var _this$displayNameToUs3;\n var arr = (_this$displayNameToUs3 = this.displayNameToUserIds.get(strippedDisplayname)) !== null && _this$displayNameToUs3 !== void 0 ? _this$displayNameToUs3 : [];\n arr.push(userId);\n this.displayNameToUserIds.set(strippedDisplayname, arr);\n }\n }\n}\n\n/**\n * Get the set of creator user IDs for a room: empty if the room is not a 'hydra' room, otherwise\n * computed from the sender of the m.room.create event plus the additional_creators field.\n * @param roomVersion The version of the room\n * @param roomCreateEvent The m.room.create event for the room\n * @returns A set of user IDs of the creators of the room.\n */\nfunction getCreators(roomVersion, roomCreateEvent) {\n var creators = new Set();\n if (shouldUseHydraForRoomVersion(roomVersion) && roomCreateEvent) {\n var roomCreateSender = roomCreateEvent.getSender();\n if (roomCreateSender) creators.add(roomCreateSender);\n var additionalCreators = roomCreateEvent.getDirectionalContent().additional_creators;\n if (Array.isArray(additionalCreators)) additionalCreators.forEach(c => creators.add(c));\n }\n return creators;\n}\n\n/**\n *\n * @param userId The user ID to compute the power level for\n * @param powerLevelEvents The power level event for the room\n * @param creators The set of creator user IDs for the room if the room is a 'hydra' room, otherwise the empty set.\n */\nfunction powerLevelForUserId(userId, powerLevelEvent, creators) {\n if (creators.has(userId)) {\n // As of \"Hydra\", If the user is a creator, they always have the highest power level\n return Infinity;\n } else {\n var evContent = powerLevelEvent.getDirectionalContent();\n var users = evContent.users || {};\n if (users[userId] !== undefined && Number.isInteger(users[userId])) {\n return users[userId];\n } else if (evContent.users_default !== undefined) {\n return evContent.users_default;\n } else {\n return 0;\n }\n }\n}\n//# sourceMappingURL=room-state.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2015 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MemoryStore} for the public class.\n */\n\nimport { RoomStateEvent } from \"../models/room-state.js\";\nimport { MapWithDefault } from \"../utils.js\";\nimport { KnownMembership } from \"../@types/membership.js\";\nfunction isValidFilterId(filterId) {\n var isValidStr = typeof filterId === \"string\" && !!filterId && filterId !== \"undefined\" &&\n // exclude these as we've serialized undefined in localStorage before\n filterId !== \"null\";\n return isValidStr || typeof filterId === \"number\";\n}\nexport class MemoryStore {\n /**\n * Construct a new in-memory data store for the Matrix Client.\n * @param opts - Config options\n */\n constructor() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _defineProperty(this, \"rooms\", {});\n // roomId: Room\n _defineProperty(this, \"users\", {});\n // userId: User\n _defineProperty(this, \"syncToken\", null);\n // userId: {\n // filterId: Filter\n // }\n _defineProperty(this, \"filters\", new MapWithDefault(() => new Map()));\n _defineProperty(this, \"accountData\", new Map());\n // type: content\n _defineProperty(this, \"localStorage\", void 0);\n _defineProperty(this, \"oobMembers\", new Map());\n // roomId: [member events]\n _defineProperty(this, \"pendingEvents\", {});\n _defineProperty(this, \"clientOptions\", void 0);\n _defineProperty(this, \"pendingToDeviceBatches\", []);\n _defineProperty(this, \"nextToDeviceBatchId\", 0);\n _defineProperty(this, \"createUser\", void 0);\n _defineProperty(this, \"userProfiles\", new Map());\n /**\n * Called when a room member in a room being tracked by this store has been\n * updated.\n */\n _defineProperty(this, \"onRoomMember\", (event, state, member) => {\n var _this$createUser;\n if (member.membership === KnownMembership.Invite) {\n // We do NOT add invited members because people love to typo user IDs\n // which would then show up in these lists (!)\n return;\n }\n var user = this.users[member.userId] || ((_this$createUser = this.createUser) === null || _this$createUser === void 0 ? void 0 : _this$createUser.call(this, member.userId));\n if (member.name) {\n user.setDisplayName(member.name);\n if (member.events.member) {\n user.setRawDisplayName(member.events.member.getDirectionalContent().displayname);\n }\n }\n if (member.events.member && member.events.member.getContent().avatar_url) {\n user.setAvatarUrl(member.events.member.getContent().avatar_url);\n }\n this.users[user.userId] = user;\n });\n this.localStorage = opts.localStorage;\n }\n\n /**\n * Retrieve the token to stream from.\n * @returns The token or null.\n */\n getSyncToken() {\n return this.syncToken;\n }\n\n /** @returns whether or not the database was newly created in this session. */\n isNewlyCreated() {\n return Promise.resolve(true);\n }\n\n /**\n * Set the token to stream from.\n * @param token - The token to stream from.\n */\n setSyncToken(token) {\n this.syncToken = token;\n }\n\n /**\n * Store the given room.\n * @param room - The room to be stored. All properties must be stored.\n */\n storeRoom(room) {\n this.rooms[room.roomId] = room;\n // add listeners for room member changes so we can keep the room member\n // map up-to-date.\n room.currentState.on(RoomStateEvent.Members, this.onRoomMember);\n // add existing members\n room.currentState.getMembers().forEach(m => {\n this.onRoomMember(null, room.currentState, m);\n });\n }\n setUserCreator(creator) {\n this.createUser = creator;\n }\n /**\n * Retrieve a room by its' room ID.\n * @param roomId - The room ID.\n * @returns The room or null.\n */\n getRoom(roomId) {\n return this.rooms[roomId] || null;\n }\n\n /**\n * Retrieve all known rooms.\n * @returns A list of rooms, which may be empty.\n */\n getRooms() {\n return Object.values(this.rooms);\n }\n\n /**\n * Permanently delete a room.\n */\n removeRoom(roomId) {\n if (this.rooms[roomId]) {\n this.rooms[roomId].currentState.removeListener(RoomStateEvent.Members, this.onRoomMember);\n }\n delete this.rooms[roomId];\n }\n\n /**\n * Retrieve a summary of all the rooms.\n * @returns A summary of each room.\n */\n getRoomSummaries() {\n return Object.values(this.rooms).map(function (room) {\n return room.summary;\n });\n }\n\n /**\n * Store a User.\n * @param user - The user to store.\n */\n storeUser(user) {\n this.users[user.userId] = user;\n }\n\n /**\n * Retrieve a User by its' user ID.\n * @param userId - The user ID.\n * @returns The user or null.\n */\n getUser(userId) {\n return this.users[userId] || null;\n }\n\n /**\n * Retrieve all known users.\n * @returns A list of users, which may be empty.\n */\n getUsers() {\n return Object.values(this.users);\n }\n\n /**\n * Retrieve scrollback for this room.\n * @param room - The matrix room\n * @param limit - The max number of old events to retrieve.\n * @returns An array of objects which will be at most 'limit'\n * length and at least 0. The objects are the raw event JSON.\n */\n scrollback(room, limit) {\n return [];\n }\n\n /**\n * Store events for a room. The events have already been added to the timeline\n * @param room - The room to store events for.\n * @param events - The events to store.\n * @param token - The token associated with these events.\n * @param toStart - True if these are paginated results.\n */\n storeEvents(room, events, token, toStart) {\n // no-op because they've already been added to the room instance.\n }\n\n /**\n * Store a filter.\n */\n storeFilter(filter) {\n if (!(filter !== null && filter !== void 0 && filter.userId) || !(filter !== null && filter !== void 0 && filter.filterId)) return;\n this.filters.getOrCreate(filter.userId).set(filter.filterId, filter);\n }\n\n /**\n * Retrieve a filter.\n * @returns A filter or null.\n */\n getFilter(userId, filterId) {\n var _this$filters$get;\n return ((_this$filters$get = this.filters.get(userId)) === null || _this$filters$get === void 0 ? void 0 : _this$filters$get.get(filterId)) || null;\n }\n\n /**\n * Retrieve a filter ID with the given name.\n * @param filterName - The filter name.\n * @returns The filter ID or null.\n */\n getFilterIdByName(filterName) {\n if (!this.localStorage) {\n return null;\n }\n var key = \"mxjssdk_memory_filter_\" + filterName;\n // XXX Storage.getItem doesn't throw ...\n // or are we using something different\n // than window.localStorage in some cases\n // that does throw?\n // that would be very naughty\n try {\n var value = this.localStorage.getItem(key);\n if (isValidFilterId(value)) {\n return value;\n }\n } catch (_unused) {}\n return null;\n }\n\n /**\n * Set a filter name to ID mapping.\n */\n setFilterIdByName(filterName, filterId) {\n if (!this.localStorage) {\n return;\n }\n var key = \"mxjssdk_memory_filter_\" + filterName;\n try {\n if (isValidFilterId(filterId)) {\n this.localStorage.setItem(key, filterId);\n } else {\n this.localStorage.removeItem(key);\n }\n } catch (_unused2) {}\n }\n\n /**\n * Store user-scoped account data events.\n * N.B. that account data only allows a single event per type, so multiple\n * events with the same type will replace each other.\n * @param events - The events to store.\n */\n storeAccountDataEvents(events) {\n events.forEach(event => {\n // MSC3391: an event with content of {} should be interpreted as deleted\n var isDeleted = !Object.keys(event.getContent()).length;\n if (isDeleted) {\n this.accountData.delete(event.getType());\n } else {\n this.accountData.set(event.getType(), event);\n }\n });\n }\n\n /**\n * Get account data event by event type\n * @param eventType - The event type being queried\n * @returns the user account_data event of given type, if any\n */\n getAccountData(eventType) {\n return this.accountData.get(eventType);\n }\n\n /**\n * setSyncData does nothing as there is no backing data store.\n *\n * @param syncData - The sync data\n * @returns An immediately resolved promise.\n */\n setSyncData(syncData) {\n return Promise.resolve();\n }\n\n /**\n * We never want to save becase we have nothing to save to.\n *\n * @returns If the store wants to save\n */\n wantsSave() {\n return false;\n }\n\n /**\n * Save does nothing as there is no backing data store.\n * @param force - True to force a save (but the memory\n * store still can't save anything)\n */\n save(force) {\n return Promise.resolve();\n }\n\n /**\n * Startup does nothing as this store doesn't require starting up.\n * @returns An immediately resolved promise.\n */\n startup() {\n return Promise.resolve();\n }\n\n /**\n * @returns Promise which resolves with a sync response to restore the\n * client state to where it was at the last save, or null if there\n * is no saved sync data.\n */\n getSavedSync() {\n return Promise.resolve(null);\n }\n\n /**\n * @returns If there is a saved sync, the nextBatch token\n * for this sync, otherwise null.\n */\n getSavedSyncToken() {\n return Promise.resolve(null);\n }\n\n /**\n * Delete all data from this store.\n * @returns An immediately resolved promise.\n */\n deleteAllData() {\n this.rooms = {\n // roomId: Room\n };\n this.users = {\n // userId: User\n };\n this.syncToken = null;\n this.filters = new MapWithDefault(() => new Map());\n this.accountData = new Map(); // type : content\n return Promise.resolve();\n }\n\n /**\n * Returns the out-of-band membership events for this room that\n * were previously loaded.\n * @returns the events, potentially an empty array if OOB loading didn't yield any new members\n * @returns in case the members for this room haven't been stored yet\n */\n getOutOfBandMembers(roomId) {\n return Promise.resolve(this.oobMembers.get(roomId) || null);\n }\n\n /**\n * Stores the out-of-band membership events for this room. Note that\n * it still makes sense to store an empty array as the OOB status for the room is\n * marked as fetched, and getOutOfBandMembers will return an empty array instead of null\n * @param membershipEvents - the membership events to store\n * @returns when all members have been stored\n */\n setOutOfBandMembers(roomId, membershipEvents) {\n this.oobMembers.set(roomId, membershipEvents);\n return Promise.resolve();\n }\n clearOutOfBandMembers(roomId) {\n this.oobMembers.delete(roomId);\n return Promise.resolve();\n }\n getClientOptions() {\n return Promise.resolve(this.clientOptions);\n }\n storeClientOptions(options) {\n this.clientOptions = Object.assign({}, options);\n return Promise.resolve();\n }\n getPendingEvents(roomId) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$pendingEvents$r;\n return (_this$pendingEvents$r = _this.pendingEvents[roomId]) !== null && _this$pendingEvents$r !== void 0 ? _this$pendingEvents$r : [];\n })();\n }\n setPendingEvents(roomId, events) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.pendingEvents[roomId] = events;\n })();\n }\n saveToDeviceBatches(batches) {\n for (var batch of batches) {\n this.pendingToDeviceBatches.push({\n id: this.nextToDeviceBatchId++,\n eventType: batch.eventType,\n txnId: batch.txnId,\n batch: batch.batch\n });\n }\n return Promise.resolve();\n }\n getOldestToDeviceBatch() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (_this3.pendingToDeviceBatches.length === 0) return null;\n return _this3.pendingToDeviceBatches[0];\n })();\n }\n removeToDeviceBatch(id) {\n this.pendingToDeviceBatches = this.pendingToDeviceBatches.filter(batch => batch.id !== id);\n return Promise.resolve();\n }\n getUserProfile(userId) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n return _this4.userProfiles.get(userId);\n })();\n }\n storeUserProfiles(userProfiles) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n userProfiles.forEach((profile, userId) => _this5.userProfiles.set(userId, profile));\n })();\n }\n removeUserProfiles(userIds) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n userIds.forEach(userId => _this6.userProfiles.delete(userId));\n })();\n }\n removeEventsFromRoom(roomId, eventIds) {\n return _asyncToGenerator(function* () {})();\n } // Can ignore as there is no backing store.\n destroy() {\n return _asyncToGenerator(function* () {})();\n } // Nothing to do\n}\n//# sourceMappingURL=memory.js.map","/*\n * Copyright 2020 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum WidgetApiDirection {\n ToWidget = \"toWidget\",\n FromWidget = \"fromWidget\",\n}\n\nexport function invertedDirection(dir: WidgetApiDirection): WidgetApiDirection {\n if (dir === WidgetApiDirection.ToWidget) {\n return WidgetApiDirection.FromWidget;\n } else if (dir === WidgetApiDirection.FromWidget) {\n return WidgetApiDirection.ToWidget;\n } else {\n throw new Error(\"Invalid direction\");\n }\n}\n","/*\n * Copyright 2020 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum MatrixApiVersion {\n Prerelease1 = \"0.0.1\",\n Prerelease2 = \"0.0.2\",\n //V010 = \"0.1.0\", // first release\n}\n\nexport enum UnstableApiVersion {\n MSC2762 = \"org.matrix.msc2762\",\n MSC2762_UPDATE_STATE = \"org.matrix.msc2762_update_state\",\n MSC2871 = \"org.matrix.msc2871\",\n MSC2873 = \"org.matrix.msc2873\",\n MSC2931 = \"org.matrix.msc2931\",\n MSC2974 = \"org.matrix.msc2974\",\n MSC2876 = \"org.matrix.msc2876\",\n MSC3819 = \"org.matrix.msc3819\",\n MSC3846 = \"town.robin.msc3846\",\n MSC3869 = \"org.matrix.msc3869\",\n MSC3973 = \"org.matrix.msc3973\",\n MSC4039 = \"org.matrix.msc4039\",\n}\n\nexport type ApiVersion = MatrixApiVersion | UnstableApiVersion | string;\n\nexport const CurrentApiVersions: ApiVersion[] = [\n MatrixApiVersion.Prerelease1,\n MatrixApiVersion.Prerelease2,\n //MatrixApiVersion.V010,\n UnstableApiVersion.MSC2762,\n UnstableApiVersion.MSC2762_UPDATE_STATE,\n UnstableApiVersion.MSC2871,\n UnstableApiVersion.MSC2873,\n UnstableApiVersion.MSC2931,\n UnstableApiVersion.MSC2974,\n UnstableApiVersion.MSC2876,\n UnstableApiVersion.MSC3819,\n UnstableApiVersion.MSC3846,\n UnstableApiVersion.MSC3869,\n UnstableApiVersion.MSC3973,\n UnstableApiVersion.MSC4039,\n];\n","/*\n * Copyright 2020 - 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from \"events\";\n\nimport { ITransport } from \"./ITransport\";\nimport {\n invertedDirection,\n isErrorResponse,\n IWidgetApiRequest,\n IWidgetApiRequestData,\n IWidgetApiResponse,\n IWidgetApiResponseData,\n WidgetApiResponseError,\n WidgetApiAction,\n WidgetApiDirection,\n WidgetApiToWidgetAction,\n} from \"..\";\n\ninterface IOutboundRequest {\n request: IWidgetApiRequest;\n resolve: (response: IWidgetApiResponse) => void;\n reject: (err: Error) => void;\n}\n\n/**\n * Transport for the Widget API over postMessage.\n */\nexport class PostmessageTransport extends EventEmitter implements ITransport {\n public strictOriginCheck = false;\n public targetOrigin = \"*\";\n public timeoutSeconds = 10;\n\n private _ready = false;\n private _widgetId: string | null;\n private readonly outboundRequests = new Map<string, IOutboundRequest | null>();\n private readonly stopController = new AbortController();\n\n public get ready(): boolean {\n return this._ready;\n }\n\n public get widgetId(): string | null {\n return this._widgetId || null;\n }\n\n public constructor(\n private readonly sendDirection: WidgetApiDirection,\n initialWidgetId: string | null,\n private readonly transportWindow: Window | typeof globalThis,\n private readonly inboundWindow: Window | typeof globalThis,\n ) {\n super();\n this._widgetId = initialWidgetId;\n }\n\n private get nextRequestId(): string {\n const idBase = `widgetapi-${Date.now()}`;\n let index = 0;\n let id = idBase;\n while (this.outboundRequests.has(id)) {\n id = `${idBase}-${index++}`;\n }\n\n // reserve the ID\n this.outboundRequests.set(id, null);\n\n return id;\n }\n\n private sendInternal(message: IWidgetApiRequest | IWidgetApiResponse): void {\n console.log(`[PostmessageTransport] Sending object to ${this.targetOrigin}: `, message);\n this.transportWindow.postMessage(message, this.targetOrigin);\n }\n\n public reply<T extends IWidgetApiResponseData>(request: IWidgetApiRequest, responseData: T): void {\n return this.sendInternal(<IWidgetApiResponse>{\n ...request,\n response: responseData,\n });\n }\n\n public send<T extends IWidgetApiRequestData, R extends IWidgetApiResponseData>(\n action: WidgetApiAction,\n data: T,\n ): Promise<R> {\n return this.sendComplete(action, data).then((r) => <R>r.response);\n }\n\n public sendComplete<T extends IWidgetApiRequestData, R extends IWidgetApiResponse>(\n action: WidgetApiAction,\n data: T,\n ): Promise<R> {\n if (!this.ready || !this.widgetId) {\n return Promise.reject(new Error(\"Not ready or unknown widget ID\"));\n }\n const request: IWidgetApiRequest = {\n api: this.sendDirection,\n widgetId: this.widgetId,\n requestId: this.nextRequestId,\n action: action,\n data: data,\n };\n if (action === WidgetApiToWidgetAction.UpdateVisibility) {\n request[\"visible\"] = data[\"visible\"];\n }\n return new Promise<R>((prResolve, prReject) => {\n const resolve = (response: IWidgetApiResponse): void => {\n cleanUp();\n prResolve(<R>response);\n };\n const reject = (err: Error): void => {\n cleanUp();\n prReject(err);\n };\n\n const timerId = setTimeout(() => reject(new Error(\"Request timed out\")), (this.timeoutSeconds || 1) * 1000);\n\n const onStop = (): void => reject(new Error(\"Transport stopped\"));\n this.stopController.signal.addEventListener(\"abort\", onStop);\n\n const cleanUp = (): void => {\n this.outboundRequests.delete(request.requestId);\n clearTimeout(timerId);\n this.stopController.signal.removeEventListener(\"abort\", onStop);\n };\n\n this.outboundRequests.set(request.requestId, { request, resolve, reject });\n this.sendInternal(request);\n });\n }\n\n public start(): void {\n this.inboundWindow.addEventListener(\"message\", this.handleMessage);\n this._ready = true;\n }\n\n public stop(): void {\n this._ready = false;\n this.stopController.abort();\n this.inboundWindow.removeEventListener(\"message\", this.handleMessage);\n }\n\n private readonly handleMessage = (ev: MessageEvent): void => {\n if (this.stopController.signal.aborted) return;\n if (!ev.data) return; // invalid event\n\n if (this.strictOriginCheck && ev.origin !== globalThis.origin) return; // bad origin\n\n // treat the message as a response first, then downgrade to a request\n const response = <IWidgetApiResponse>ev.data;\n if (!response.action || !response.requestId || !response.widgetId) return; // invalid request/response\n\n if (response.response) {\n if (response.api !== this.sendDirection) return; // wrong direction\n this.handleResponse(response);\n } else {\n const request = <IWidgetApiRequest>response;\n if (request.api !== invertedDirection(this.sendDirection)) return; // wrong direction\n this.handleRequest(request);\n }\n };\n\n private handleRequest(request: IWidgetApiRequest): void {\n if (this.widgetId) {\n if (this.widgetId !== request.widgetId) return; // wrong widget\n } else {\n this._widgetId = request.widgetId;\n }\n\n this.emit(\"message\", new CustomEvent(\"message\", { detail: request }));\n }\n\n private handleResponse(response: IWidgetApiResponse): void {\n if (response.widgetId !== this.widgetId) return; // wrong widget\n\n const req = this.outboundRequests.get(response.requestId);\n if (!req) return; // response to an unknown request\n\n if (isErrorResponse(response.response)) {\n const { message, ...data } = response.response.error;\n req.reject(new WidgetApiResponseError(message, data));\n } else {\n req.resolve(response);\n }\n }\n}\n","/*\n * Copyright 2020 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum WidgetApiToWidgetAction {\n SupportedApiVersions = \"supported_api_versions\",\n Capabilities = \"capabilities\",\n NotifyCapabilities = \"notify_capabilities\",\n ThemeChange = \"theme_change\",\n LanguageChange = \"language_change\",\n TakeScreenshot = \"screenshot\",\n UpdateVisibility = \"visibility\",\n OpenIDCredentials = \"openid_credentials\",\n WidgetConfig = \"widget_config\",\n CloseModalWidget = \"close_modal\",\n ButtonClicked = \"button_clicked\",\n SendEvent = \"send_event\",\n SendToDevice = \"send_to_device\",\n UpdateState = \"update_state\",\n UpdateTurnServers = \"update_turn_servers\",\n}\n\nexport enum WidgetApiFromWidgetAction {\n SupportedApiVersions = \"supported_api_versions\",\n ContentLoaded = \"content_loaded\",\n SendSticker = \"m.sticker\",\n UpdateAlwaysOnScreen = \"set_always_on_screen\",\n GetOpenIDCredentials = \"get_openid\",\n CloseModalWidget = \"close_modal\",\n OpenModalWidget = \"open_modal\",\n SetModalButtonEnabled = \"set_button_enabled\",\n SendEvent = \"send_event\",\n SendToDevice = \"send_to_device\",\n WatchTurnServers = \"watch_turn_servers\",\n UnwatchTurnServers = \"unwatch_turn_servers\",\n\n BeeperReadRoomAccountData = \"com.beeper.read_room_account_data\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC2876ReadEvents = \"org.matrix.msc2876.read_events\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC2931Navigate = \"org.matrix.msc2931.navigate\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC2974RenegotiateCapabilities = \"org.matrix.msc2974.request_capabilities\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC3869ReadRelations = \"org.matrix.msc3869.read_relations\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC3973UserDirectorySearch = \"org.matrix.msc3973.user_directory_search\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4039GetMediaConfigAction = \"org.matrix.msc4039.get_media_config\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4039UploadFileAction = \"org.matrix.msc4039.upload_file\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4039DownloadFileAction = \"org.matrix.msc4039.download_file\",\n\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4157UpdateDelayedEvent = \"org.matrix.msc4157.update_delayed_event\",\n}\n\nexport type WidgetApiAction = WidgetApiToWidgetAction | WidgetApiFromWidgetAction | string;\n","/*\n * Copyright 2020 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IWidgetApiRequest, IWidgetApiRequestData } from \"./IWidgetApiRequest\";\nimport { WidgetApiFromWidgetAction } from \"./WidgetApiAction\";\nimport { IWidgetApiResponseData } from \"./IWidgetApiResponse\";\n\nexport enum OpenIDRequestState {\n Allowed = \"allowed\",\n Blocked = \"blocked\",\n PendingUserConfirmation = \"request\",\n}\n\nexport interface IOpenIDCredentials {\n access_token?: string; // eslint-disable-line camelcase\n expires_in?: number; // eslint-disable-line camelcase\n matrix_server_name?: string; // eslint-disable-line camelcase\n token_type?: \"Bearer\" | string; // eslint-disable-line camelcase\n}\n\nexport interface IGetOpenIDActionRequestData extends IWidgetApiRequestData {\n // nothing\n}\n\nexport interface IGetOpenIDActionRequest extends IWidgetApiRequest {\n action: WidgetApiFromWidgetAction.GetOpenIDCredentials;\n data: IGetOpenIDActionRequestData;\n}\n\nexport interface IGetOpenIDActionResponseData extends IWidgetApiResponseData, IOpenIDCredentials {\n state: OpenIDRequestState;\n}\n\nexport interface IGetOpenIDActionResponse extends IGetOpenIDActionRequest {\n response: IGetOpenIDActionResponseData;\n}\n","/*\n * Copyright 2020 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum MatrixWidgetType {\n Custom = \"m.custom\",\n JitsiMeet = \"m.jitsi\",\n Stickerpicker = \"m.stickerpicker\",\n}\n\nexport type WidgetType = MatrixWidgetType | string;\n","/*\n * Copyright 2020 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IWidgetApiRequest, IWidgetApiRequestData } from \"./IWidgetApiRequest\";\nimport { WidgetApiFromWidgetAction, WidgetApiToWidgetAction } from \"./WidgetApiAction\";\nimport { IWidgetApiAcknowledgeResponseData, IWidgetApiResponse } from \"./IWidgetApiResponse\";\nimport { IWidget } from \"./IWidget\";\nimport { ModalButtonKind } from \"./ModalButtonKind\";\n\nexport enum BuiltInModalButtonID {\n Close = \"m.close\",\n}\nexport type ModalButtonID = BuiltInModalButtonID | string;\n\nexport interface IModalWidgetCreateData extends IWidgetApiRequestData {\n [key: string]: unknown;\n}\n\nexport interface IModalWidgetReturnData {\n [key: string]: unknown;\n}\n\n// Types for a normal modal requesting the opening a modal widget\nexport interface IModalWidgetOpenRequestDataButton {\n id: ModalButtonID;\n label: string;\n kind: ModalButtonKind | string;\n disabled?: boolean;\n}\n\nexport interface IModalWidgetOpenRequestData extends IModalWidgetCreateData, Omit<IWidget, \"id\" | \"creatorUserId\"> {\n buttons?: IModalWidgetOpenRequestDataButton[];\n}\n\nexport interface IModalWidgetOpenRequest extends IWidgetApiRequest {\n action: WidgetApiFromWidgetAction.OpenModalWidget;\n data: IModalWidgetOpenRequestData;\n}\n\nexport interface IModalWidgetOpenResponse extends IWidgetApiResponse {\n response: IWidgetApiAcknowledgeResponseData;\n}\n\n// Types for a modal widget receiving notifications that its buttons have been pressed\nexport interface IModalWidgetButtonClickedRequestData extends IWidgetApiRequestData {\n id: IModalWidgetOpenRequestDataButton[\"id\"];\n}\n\nexport interface IModalWidgetButtonClickedRequest extends IWidgetApiRequest {\n action: WidgetApiToWidgetAction.ButtonClicked;\n data: IModalWidgetButtonClickedRequestData;\n}\n\nexport interface IModalWidgetButtonClickedResponse extends IWidgetApiResponse {\n response: IWidgetApiAcknowledgeResponseData;\n}\n\n// Types for a modal widget requesting close\nexport interface IModalWidgetCloseRequest extends IWidgetApiRequest {\n action: WidgetApiFromWidgetAction.CloseModalWidget;\n data: IModalWidgetReturnData;\n}\n\nexport interface IModalWidgetCloseResponse extends IWidgetApiResponse {\n response: IWidgetApiAcknowledgeResponseData;\n}\n\n// Types for a normal widget being notified that the modal widget it opened has been closed\nexport interface IModalWidgetCloseNotificationRequest extends IWidgetApiRequest {\n action: WidgetApiToWidgetAction.CloseModalWidget;\n data: IModalWidgetReturnData;\n}\n\nexport interface IModalWidgetCloseNotificationResponse extends IWidgetApiResponse {\n response: IWidgetApiAcknowledgeResponseData;\n}\n","/*\n * Copyright 2020 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Capability } from \"..\";\n\nexport enum EventKind {\n Event = \"event\",\n State = \"state_event\",\n ToDevice = \"to_device\",\n RoomAccount = \"room_account\",\n}\n\nexport enum EventDirection {\n Send = \"send\",\n Receive = \"receive\",\n}\n\nexport class WidgetEventCapability {\n private constructor(\n public readonly direction: EventDirection,\n public readonly eventType: string,\n public readonly kind: EventKind,\n public readonly keyStr: string | null,\n public readonly raw: string,\n ) {}\n\n public matchesAsStateEvent(direction: EventDirection, eventType: string, stateKey: string | null): boolean {\n if (this.kind !== EventKind.State) return false; // not a state event\n if (this.direction !== direction) return false; // direction mismatch\n if (this.eventType !== eventType) return false; // event type mismatch\n if (this.keyStr === null) return true; // all state keys are allowed\n if (this.keyStr === stateKey) return true; // this state key is allowed\n\n // Default not allowed\n return false;\n }\n\n public matchesAsToDeviceEvent(direction: EventDirection, eventType: string): boolean {\n if (this.kind !== EventKind.ToDevice) return false; // not a to-device event\n if (this.direction !== direction) return false; // direction mismatch\n if (this.eventType !== eventType) return false; // event type mismatch\n\n // Checks passed, the event is allowed\n return true;\n }\n\n public matchesAsRoomEvent(direction: EventDirection, eventType: string, msgtype: string | null = null): boolean {\n if (this.kind !== EventKind.Event) return false; // not a room event\n if (this.direction !== direction) return false; // direction mismatch\n if (this.eventType !== eventType) return false; // event type mismatch\n\n if (this.eventType === \"m.room.message\") {\n if (this.keyStr === null) return true; // all message types are allowed\n if (this.keyStr === msgtype) return true; // this message type is allowed\n } else {\n return true; // already passed the check for if the event is allowed\n }\n\n // Default not allowed\n return false;\n }\n\n public matchesAsRoomAccountData(direction: EventDirection, eventType: string): boolean {\n if (this.kind !== EventKind.RoomAccount) return false; // not room account data\n if (this.direction !== direction) return false; // direction mismatch\n if (this.eventType !== eventType) return false; // event type mismatch\n\n // Checks passed, the event is allowed\n return true;\n }\n\n public static forStateEvent(\n direction: EventDirection,\n eventType: string,\n stateKey?: string,\n ): WidgetEventCapability {\n // TODO: Enable support for m.* namespace once the MSC lands.\n // https://github.com/matrix-org/matrix-widget-api/issues/22\n eventType = eventType.replace(/#/g, \"\\\\#\");\n stateKey = stateKey !== null && stateKey !== undefined ? `#${stateKey}` : \"\";\n const str = `org.matrix.msc2762.${direction}.state_event:${eventType}${stateKey}`;\n\n // cheat by sending it through the processor\n return WidgetEventCapability.findEventCapabilities([str])[0];\n }\n\n public static forToDeviceEvent(direction: EventDirection, eventType: string): WidgetEventCapability {\n // TODO: Enable support for m.* namespace once the MSC lands.\n // https://github.com/matrix-org/matrix-widget-api/issues/56\n const str = `org.matrix.msc3819.${direction}.to_device:${eventType}`;\n\n // cheat by sending it through the processor\n return WidgetEventCapability.findEventCapabilities([str])[0];\n }\n\n public static forRoomEvent(direction: EventDirection, eventType: string): WidgetEventCapability {\n // TODO: Enable support for m.* namespace once the MSC lands.\n // https://github.com/matrix-org/matrix-widget-api/issues/22\n const str = `org.matrix.msc2762.${direction}.event:${eventType}`;\n\n // cheat by sending it through the processor\n return WidgetEventCapability.findEventCapabilities([str])[0];\n }\n\n public static forRoomMessageEvent(direction: EventDirection, msgtype?: string): WidgetEventCapability {\n // TODO: Enable support for m.* namespace once the MSC lands.\n // https://github.com/matrix-org/matrix-widget-api/issues/22\n msgtype = msgtype === null || msgtype === undefined ? \"\" : msgtype;\n const str = `org.matrix.msc2762.${direction}.event:m.room.message#${msgtype}`;\n\n // cheat by sending it through the processor\n return WidgetEventCapability.findEventCapabilities([str])[0];\n }\n\n public static forRoomAccountData(direction: EventDirection, eventType: string): WidgetEventCapability {\n const str = `com.beeper.capabilities.${direction}.room_account_data:${eventType}`;\n\n return WidgetEventCapability.findEventCapabilities([str])[0];\n }\n\n /**\n * Parses a capabilities request to find all the event capability requests.\n * @param {Iterable<Capability>} capabilities The capabilities requested/to parse.\n * @returns {WidgetEventCapability[]} An array of event capability requests. May be empty, but never null.\n */\n public static findEventCapabilities(capabilities: Iterable<Capability>): WidgetEventCapability[] {\n const parsed: WidgetEventCapability[] = [];\n for (const cap of capabilities) {\n let direction: EventDirection | null = null;\n let eventSegment: string | undefined;\n let kind: EventKind | null = null;\n\n // TODO: Enable support for m.* namespace once the MSCs land.\n // https://github.com/matrix-org/matrix-widget-api/issues/22\n // https://github.com/matrix-org/matrix-widget-api/issues/56\n\n if (cap.startsWith(\"org.matrix.msc2762.send.event:\")) {\n direction = EventDirection.Send;\n kind = EventKind.Event;\n eventSegment = cap.substring(\"org.matrix.msc2762.send.event:\".length);\n } else if (cap.startsWith(\"org.matrix.msc2762.send.state_event:\")) {\n direction = EventDirection.Send;\n kind = EventKind.State;\n eventSegment = cap.substring(\"org.matrix.msc2762.send.state_event:\".length);\n } else if (cap.startsWith(\"org.matrix.msc3819.send.to_device:\")) {\n direction = EventDirection.Send;\n kind = EventKind.ToDevice;\n eventSegment = cap.substring(\"org.matrix.msc3819.send.to_device:\".length);\n } else if (cap.startsWith(\"org.matrix.msc2762.receive.event:\")) {\n direction = EventDirection.Receive;\n kind = EventKind.Event;\n eventSegment = cap.substring(\"org.matrix.msc2762.receive.event:\".length);\n } else if (cap.startsWith(\"org.matrix.msc2762.receive.state_event:\")) {\n direction = EventDirection.Receive;\n kind = EventKind.State;\n eventSegment = cap.substring(\"org.matrix.msc2762.receive.state_event:\".length);\n } else if (cap.startsWith(\"org.matrix.msc3819.receive.to_device:\")) {\n direction = EventDirection.Receive;\n kind = EventKind.ToDevice;\n eventSegment = cap.substring(\"org.matrix.msc3819.receive.to_device:\".length);\n } else if (cap.startsWith(\"com.beeper.capabilities.receive.room_account_data:\")) {\n direction = EventDirection.Receive;\n kind = EventKind.RoomAccount;\n eventSegment = cap.substring(\"com.beeper.capabilities.receive.room_account_data:\".length);\n }\n\n if (direction === null || kind === null || eventSegment === undefined) continue;\n\n // The capability uses `#` as a separator between event type and state key/msgtype,\n // so we split on that. However, a # is also valid in either one of those so we\n // join accordingly.\n // Eg: `m.room.message##m.text` is \"m.room.message\" event with msgtype \"#m.text\".\n const expectingKeyStr = eventSegment.startsWith(\"m.room.message#\") || kind === EventKind.State;\n let keyStr: string | null = null;\n if (eventSegment.includes(\"#\") && expectingKeyStr) {\n // Dev note: regex is difficult to write, so instead the rules are manually written\n // out. This is probably just as understandable as a boring regex though, so win-win?\n\n // Test cases:\n // str eventSegment keyStr\n // -------------------------------------------------------------\n // m.room.message# m.room.message <empty string>\n // m.room.message#test m.room.message test\n // m.room.message\\# m.room.message# test\n // m.room.message##test m.room.message #test\n // m.room.message\\##test m.room.message# test\n // m.room.message\\\\##test m.room.message\\# test\n // m.room.message\\\\###test m.room.message\\# #test\n\n // First step: explode the string\n const parts = eventSegment.split(\"#\");\n\n // To form the eventSegment, we'll keep finding parts of the exploded string until\n // there's one that doesn't end with the escape character (\\). We'll then join those\n // segments together with the exploding character. We have to remember to consume the\n // escape character as well.\n const idx = parts.findIndex((p) => !p.endsWith(\"\\\\\"));\n eventSegment = parts\n .slice(0, idx + 1)\n .map((p) => (p.endsWith(\"\\\\\") ? p.substring(0, p.length - 1) : p))\n .join(\"#\");\n\n // The keyStr is whatever is left over.\n keyStr = parts.slice(idx + 1).join(\"#\");\n }\n\n parsed.push(new WidgetEventCapability(direction, eventSegment, kind, keyStr, cap));\n }\n return parsed;\n }\n}\n","/*\n * Copyright 2021 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum Symbols {\n AnyRoom = \"*\",\n}\n","/*\n * Copyright 2020 - 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IWidgetApiRequest, IWidgetApiRequestData } from \"./IWidgetApiRequest\";\nimport { WidgetApiFromWidgetAction } from \"./WidgetApiAction\";\nimport { IWidgetApiResponseData } from \"./IWidgetApiResponse\";\n\nexport enum UpdateDelayedEventAction {\n Cancel = \"cancel\",\n Restart = \"restart\",\n Send = \"send\",\n}\n\nexport interface IUpdateDelayedEventFromWidgetRequestData extends IWidgetApiRequestData {\n delay_id: string; // eslint-disable-line camelcase\n action: UpdateDelayedEventAction;\n}\n\nexport interface IUpdateDelayedEventFromWidgetActionRequest extends IWidgetApiRequest {\n action: WidgetApiFromWidgetAction.MSC4157UpdateDelayedEvent;\n data: IUpdateDelayedEventFromWidgetRequestData;\n}\n\nexport interface IUpdateDelayedEventFromWidgetResponseData extends IWidgetApiResponseData {\n // nothing\n}\n\nexport interface IUpdateDelayedEventFromWidgetActionResponse extends IUpdateDelayedEventFromWidgetActionRequest {\n response: IUpdateDelayedEventFromWidgetResponseData;\n}\n","/*\n * Copyright 2020 - 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from \"events\";\n\nimport { Capability } from \"./interfaces/Capabilities\";\nimport { IWidgetApiRequest, IWidgetApiRequestEmptyData } from \"./interfaces/IWidgetApiRequest\";\nimport { IWidgetApiAcknowledgeResponseData } from \"./interfaces/IWidgetApiResponse\";\nimport { WidgetApiDirection } from \"./interfaces/WidgetApiDirection\";\nimport {\n ISupportedVersionsActionRequest,\n ISupportedVersionsActionResponseData,\n} from \"./interfaces/SupportedVersionsAction\";\nimport { ApiVersion, CurrentApiVersions, UnstableApiVersion } from \"./interfaces/ApiVersion\";\nimport {\n ICapabilitiesActionRequest,\n ICapabilitiesActionResponseData,\n INotifyCapabilitiesActionRequest,\n IRenegotiateCapabilitiesRequestData,\n} from \"./interfaces/CapabilitiesAction\";\nimport { ITransport } from \"./transport/ITransport\";\nimport { PostmessageTransport } from \"./transport/PostmessageTransport\";\nimport { WidgetApiFromWidgetAction, WidgetApiToWidgetAction } from \"./interfaces/WidgetApiAction\";\nimport { IWidgetApiErrorResponseData, IWidgetApiErrorResponseDataDetails } from \"./interfaces/IWidgetApiErrorResponse\";\nimport { IStickerActionRequestData } from \"./interfaces/StickerAction\";\nimport { IStickyActionRequestData, IStickyActionResponseData } from \"./interfaces/StickyAction\";\nimport {\n IGetOpenIDActionRequestData,\n IGetOpenIDActionResponse,\n IOpenIDCredentials,\n OpenIDRequestState,\n} from \"./interfaces/GetOpenIDAction\";\nimport { IOpenIDCredentialsActionRequest } from \"./interfaces/OpenIDCredentialsAction\";\nimport { MatrixWidgetType, WidgetType } from \"./interfaces/WidgetType\";\nimport {\n BuiltInModalButtonID,\n IModalWidgetCreateData,\n IModalWidgetOpenRequestData,\n IModalWidgetOpenRequestDataButton,\n IModalWidgetReturnData,\n ModalButtonID,\n} from \"./interfaces/ModalWidgetActions\";\nimport { ISetModalButtonEnabledActionRequestData } from \"./interfaces/SetModalButtonEnabledAction\";\nimport { ISendEventFromWidgetRequestData, ISendEventFromWidgetResponseData } from \"./interfaces/SendEventAction\";\nimport {\n ISendToDeviceFromWidgetRequestData,\n ISendToDeviceFromWidgetResponseData,\n} from \"./interfaces/SendToDeviceAction\";\nimport { EventDirection, WidgetEventCapability } from \"./models/WidgetEventCapability\";\nimport { INavigateActionRequestData } from \"./interfaces/NavigateAction\";\nimport { IReadEventFromWidgetRequestData, IReadEventFromWidgetResponseData } from \"./interfaces/ReadEventAction\";\nimport {\n IReadRoomAccountDataFromWidgetRequestData,\n IReadRoomAccountDataFromWidgetResponseData,\n} from \"./interfaces/ReadRoomAccountDataAction\";\nimport { IRoomEvent } from \"./interfaces/IRoomEvent\";\nimport { IRoomAccountData } from \"./interfaces/IRoomAccountData\";\nimport { ITurnServer, IUpdateTurnServersRequest } from \"./interfaces/TurnServerActions\";\nimport { Symbols } from \"./Symbols\";\nimport {\n IReadRelationsFromWidgetRequestData,\n IReadRelationsFromWidgetResponseData,\n} from \"./interfaces/ReadRelationsAction\";\nimport {\n IUserDirectorySearchFromWidgetRequestData,\n IUserDirectorySearchFromWidgetResponseData,\n} from \"./interfaces/UserDirectorySearchAction\";\nimport {\n IGetMediaConfigActionFromWidgetRequestData,\n IGetMediaConfigActionFromWidgetResponseData,\n} from \"./interfaces/GetMediaConfigAction\";\nimport {\n IUploadFileActionFromWidgetRequestData,\n IUploadFileActionFromWidgetResponseData,\n} from \"./interfaces/UploadFileAction\";\nimport {\n IDownloadFileActionFromWidgetRequestData,\n IDownloadFileActionFromWidgetResponseData,\n} from \"./interfaces/DownloadFileAction\";\nimport {\n IUpdateDelayedEventFromWidgetRequestData,\n IUpdateDelayedEventFromWidgetResponseData,\n UpdateDelayedEventAction,\n} from \"./interfaces/UpdateDelayedEventAction\";\n\nexport class WidgetApiResponseError extends Error {\n static {\n this.prototype.name = this.name;\n }\n\n public constructor(\n message: string,\n public readonly data: IWidgetApiErrorResponseDataDetails,\n ) {\n super(message);\n }\n}\n\n/**\n * API handler for widgets. This raises events for each action\n * received as `action:${action}` (eg: \"action:screenshot\").\n * Default handling can be prevented by using preventDefault()\n * on the raised event. The default handling varies for each\n * action: ones which the SDK can handle safely are acknowledged\n * appropriately and ones which are unhandled (custom or require\n * the widget to do something) are rejected with an error.\n *\n * Events which are preventDefault()ed must reply using the\n * transport. The events raised will have a detail of an\n * IWidgetApiRequest interface.\n *\n * When the WidgetApi is ready to start sending requests, it will\n * raise a \"ready\" CustomEvent. After the ready event fires, actions\n * can be sent and the transport will be ready.\n */\nexport class WidgetApi extends EventEmitter {\n public readonly transport: ITransport;\n\n private capabilitiesFinished = false;\n private supportsMSC2974Renegotiate = false;\n private readonly requestedCapabilities: Capability[] = [];\n private approvedCapabilities?: Capability[];\n private cachedClientVersions?: ApiVersion[];\n private turnServerWatchers = 0;\n\n /**\n * Creates a new API handler for the given widget.\n * @param {string} widgetId The widget ID to listen for. If not supplied then\n * the API will use the widget ID from the first valid request it receives.\n * @param {string} clientOrigin The origin of the client, or null if not known.\n */\n public constructor(widgetId: string | null = null, clientOrigin: string | null = null) {\n super();\n if (!globalThis.parent) {\n throw new Error(\"No parent window. This widget doesn't appear to be embedded properly.\");\n }\n this.transport = new PostmessageTransport(\n WidgetApiDirection.FromWidget,\n widgetId,\n globalThis.parent,\n globalThis,\n );\n this.transport.targetOrigin = clientOrigin;\n this.transport.on(\"message\", this.handleMessage.bind(this));\n }\n\n /**\n * Determines if the widget was granted a particular capability. Note that on\n * clients where the capabilities are not fed back to the widget this function\n * will rely on requested capabilities instead.\n * @param {Capability} capability The capability to check for approval of.\n * @returns {boolean} True if the widget has approval for the given capability.\n */\n public hasCapability(capability: Capability): boolean {\n if (Array.isArray(this.approvedCapabilities)) {\n return this.approvedCapabilities.includes(capability);\n }\n return this.requestedCapabilities.includes(capability);\n }\n\n /**\n * Request a capability from the client. It is not guaranteed to be allowed,\n * but will be asked for.\n * @param {Capability} capability The capability to request.\n * @throws Throws if the capabilities negotiation has already started and the\n * widget is unable to request additional capabilities.\n */\n public requestCapability(capability: Capability): void {\n if (this.capabilitiesFinished && !this.supportsMSC2974Renegotiate) {\n throw new Error(\"Capabilities have already been negotiated\");\n }\n\n this.requestedCapabilities.push(capability);\n }\n\n /**\n * Request capabilities from the client. They are not guaranteed to be allowed,\n * but will be asked for if the negotiation has not already happened.\n * @param {Capability[]} capabilities The capabilities to request.\n * @throws Throws if the capabilities negotiation has already started.\n */\n public requestCapabilities(capabilities: Capability[]): void {\n for (const cap of capabilities) {\n this.requestCapability(cap);\n }\n }\n\n /**\n * Requests the capability to interact with rooms other than the user's currently\n * viewed room. Applies to event receiving and sending.\n * @param {string | Symbols.AnyRoom} roomId The room ID, or `Symbols.AnyRoom` to\n * denote all known rooms.\n */\n public requestCapabilityForRoomTimeline(roomId: string | Symbols.AnyRoom): void {\n this.requestCapability(`org.matrix.msc2762.timeline:${roomId}`);\n }\n\n /**\n * Requests the capability to send a given state event with optional explicit\n * state key. It is not guaranteed to be allowed, but will be asked for if the\n * negotiation has not already happened.\n * @param {string} eventType The state event type to ask for.\n * @param {string} stateKey If specified, the specific state key to request.\n * Otherwise all state keys will be requested.\n */\n public requestCapabilityToSendState(eventType: string, stateKey?: string): void {\n this.requestCapability(WidgetEventCapability.forStateEvent(EventDirection.Send, eventType, stateKey).raw);\n }\n\n /**\n * Requests the capability to receive a given state event with optional explicit\n * state key. It is not guaranteed to be allowed, but will be asked for if the\n * negotiation has not already happened.\n * @param {string} eventType The state event type to ask for.\n * @param {string} stateKey If specified, the specific state key to request.\n * Otherwise all state keys will be requested.\n */\n public requestCapabilityToReceiveState(eventType: string, stateKey?: string): void {\n this.requestCapability(WidgetEventCapability.forStateEvent(EventDirection.Receive, eventType, stateKey).raw);\n }\n\n /**\n * Requests the capability to send a given to-device event. It is not\n * guaranteed to be allowed, but will be asked for if the negotiation has\n * not already happened.\n * @param {string} eventType The room event type to ask for.\n */\n public requestCapabilityToSendToDevice(eventType: string): void {\n this.requestCapability(WidgetEventCapability.forToDeviceEvent(EventDirection.Send, eventType).raw);\n }\n\n /**\n * Requests the capability to receive a given to-device event. It is not\n * guaranteed to be allowed, but will be asked for if the negotiation has\n * not already happened.\n * @param {string} eventType The room event type to ask for.\n */\n public requestCapabilityToReceiveToDevice(eventType: string): void {\n this.requestCapability(WidgetEventCapability.forToDeviceEvent(EventDirection.Receive, eventType).raw);\n }\n\n /**\n * Requests the capability to send a given room event. It is not guaranteed to be\n * allowed, but will be asked for if the negotiation has not already happened.\n * @param {string} eventType The room event type to ask for.\n */\n public requestCapabilityToSendEvent(eventType: string): void {\n this.requestCapability(WidgetEventCapability.forRoomEvent(EventDirection.Send, eventType).raw);\n }\n\n /**\n * Requests the capability to receive a given room event. It is not guaranteed to be\n * allowed, but will be asked for if the negotiation has not already happened.\n * @param {string} eventType The room event type to ask for.\n */\n public requestCapabilityToReceiveEvent(eventType: string): void {\n this.requestCapability(WidgetEventCapability.forRoomEvent(EventDirection.Receive, eventType).raw);\n }\n\n /**\n * Requests the capability to send a given message event with optional explicit\n * `msgtype`. It is not guaranteed to be allowed, but will be asked for if the\n * negotiation has not already happened.\n * @param {string} msgtype If specified, the specific msgtype to request.\n * Otherwise all message types will be requested.\n */\n public requestCapabilityToSendMessage(msgtype?: string): void {\n this.requestCapability(WidgetEventCapability.forRoomMessageEvent(EventDirection.Send, msgtype).raw);\n }\n\n /**\n * Requests the capability to receive a given message event with optional explicit\n * `msgtype`. It is not guaranteed to be allowed, but will be asked for if the\n * negotiation has not already happened.\n * @param {string} msgtype If specified, the specific msgtype to request.\n * Otherwise all message types will be requested.\n */\n public requestCapabilityToReceiveMessage(msgtype?: string): void {\n this.requestCapability(WidgetEventCapability.forRoomMessageEvent(EventDirection.Receive, msgtype).raw);\n }\n\n /**\n * Requests the capability to receive a given item in room account data. It is not guaranteed to be\n * allowed, but will be asked for if the negotiation has not already happened.\n * @param {string} eventType The state event type to ask for.\n */\n public requestCapabilityToReceiveRoomAccountData(eventType: string): void {\n this.requestCapability(WidgetEventCapability.forRoomAccountData(EventDirection.Receive, eventType).raw);\n }\n\n /**\n * Requests an OpenID Connect token from the client for the currently logged in\n * user. This token can be validated server-side with the federation API. Note\n * that the widget is responsible for validating the token and caching any results\n * it needs.\n * @returns {Promise<IOpenIDCredentials>} Resolves to a token for verification.\n * @throws Throws if the user rejected the request or the request failed.\n */\n public requestOpenIDConnectToken(): Promise<IOpenIDCredentials> {\n return new Promise<IOpenIDCredentials>((resolve, reject) => {\n this.transport\n .sendComplete<IGetOpenIDActionRequestData, IGetOpenIDActionResponse>(\n WidgetApiFromWidgetAction.GetOpenIDCredentials,\n {},\n )\n .then((response) => {\n const rdata = response.response;\n if (rdata.state === OpenIDRequestState.Allowed) {\n resolve(rdata);\n } else if (rdata.state === OpenIDRequestState.Blocked) {\n reject(new Error(\"User declined to verify their identity\"));\n } else if (rdata.state === OpenIDRequestState.PendingUserConfirmation) {\n const handlerFn = (ev: CustomEvent<IOpenIDCredentialsActionRequest>): void => {\n ev.preventDefault();\n const request = ev.detail;\n if (request.data.original_request_id !== response.requestId) return;\n if (request.data.state === OpenIDRequestState.Allowed) {\n resolve(request.data);\n this.transport.reply(request, <IWidgetApiRequestEmptyData>{}); // ack\n } else if (request.data.state === OpenIDRequestState.Blocked) {\n reject(new Error(\"User declined to verify their identity\"));\n this.transport.reply(request, <IWidgetApiRequestEmptyData>{}); // ack\n } else {\n reject(new Error(\"Invalid state on reply: \" + rdata.state));\n this.transport.reply(request, <IWidgetApiErrorResponseData>{\n error: {\n message: \"Invalid state\",\n },\n });\n }\n this.off(`action:${WidgetApiToWidgetAction.OpenIDCredentials}`, handlerFn);\n };\n this.on(`action:${WidgetApiToWidgetAction.OpenIDCredentials}`, handlerFn);\n } else {\n reject(new Error(\"Invalid state: \" + rdata.state));\n }\n })\n .catch(reject);\n });\n }\n\n /**\n * Asks the client for additional capabilities. Capabilities can be queued for this\n * request with the requestCapability() functions.\n * @returns {Promise<void>} Resolves when complete. Note that the promise resolves when\n * the capabilities request has gone through, not when the capabilities are approved/denied.\n * Use the WidgetApiToWidgetAction.NotifyCapabilities action to detect changes.\n */\n public updateRequestedCapabilities(): Promise<void> {\n return this.transport\n .send(WidgetApiFromWidgetAction.MSC2974RenegotiateCapabilities, <IRenegotiateCapabilitiesRequestData>{\n capabilities: this.requestedCapabilities,\n })\n .then();\n }\n\n /**\n * Tell the client that the content has been loaded.\n * @returns {Promise} Resolves when the client acknowledges the request.\n */\n public sendContentLoaded(): Promise<void> {\n return this.transport.send(WidgetApiFromWidgetAction.ContentLoaded, <IWidgetApiRequestEmptyData>{}).then();\n }\n\n /**\n * Sends a sticker to the client.\n * @param {IStickerActionRequestData} sticker The sticker to send.\n * @returns {Promise} Resolves when the client acknowledges the request.\n */\n public sendSticker(sticker: IStickerActionRequestData): Promise<void> {\n return this.transport.send(WidgetApiFromWidgetAction.SendSticker, sticker).then();\n }\n\n /**\n * Asks the client to set the always-on-screen status for this widget.\n * @param {boolean} value The new state to request.\n * @returns {Promise<boolean>} Resolve with true if the client was able to fulfill\n * the request, resolves to false otherwise. Rejects if an error occurred.\n */\n public setAlwaysOnScreen(value: boolean): Promise<boolean> {\n return this.transport\n .send<\n IStickyActionRequestData,\n IStickyActionResponseData\n >(WidgetApiFromWidgetAction.UpdateAlwaysOnScreen, { value })\n .then((res) => res.success);\n }\n\n /**\n * Opens a modal widget.\n * @param {string} url The URL to the modal widget.\n * @param {string} name The name of the widget.\n * @param {IModalWidgetOpenRequestDataButton[]} buttons The buttons to have on the widget.\n * @param {IModalWidgetCreateData} data Data to supply to the modal widget.\n * @param {WidgetType} type The type of modal widget.\n * @returns {Promise<void>} Resolves when the modal widget has been opened.\n */\n public openModalWidget(\n url: string,\n name: string,\n buttons: IModalWidgetOpenRequestDataButton[] = [],\n data: IModalWidgetCreateData = {},\n type: WidgetType = MatrixWidgetType.Custom,\n ): Promise<void> {\n return this.transport\n .send<IModalWidgetOpenRequestData>(WidgetApiFromWidgetAction.OpenModalWidget, {\n type,\n url,\n name,\n buttons,\n data,\n })\n .then();\n }\n\n /**\n * Closes the modal widget. The widget's session will be terminated shortly after.\n * @param {IModalWidgetReturnData} data Optional data to close the modal widget with.\n * @returns {Promise<void>} Resolves when complete.\n */\n public closeModalWidget(data: IModalWidgetReturnData = {}): Promise<void> {\n return this.transport.send<IModalWidgetReturnData>(WidgetApiFromWidgetAction.CloseModalWidget, data).then();\n }\n\n public sendRoomEvent(\n eventType: string,\n content: unknown,\n roomId?: string,\n delay?: number,\n parentDelayId?: string,\n stickyDurationMs?: number,\n ): Promise<ISendEventFromWidgetResponseData> {\n return this.sendEvent(eventType, undefined, content, roomId, delay, parentDelayId, stickyDurationMs);\n }\n\n public sendStateEvent(\n eventType: string,\n stateKey: string,\n content: unknown,\n roomId?: string,\n delay?: number,\n parentDelayId?: string,\n ): Promise<ISendEventFromWidgetResponseData> {\n return this.sendEvent(eventType, stateKey, content, roomId, delay, parentDelayId);\n }\n\n private sendEvent(\n eventType: string,\n stateKey: string | undefined,\n content: unknown,\n roomId?: string,\n delay?: number,\n parentDelayId?: string,\n stickyDurationMs?: number,\n ): Promise<ISendEventFromWidgetResponseData> {\n return this.transport.send<ISendEventFromWidgetRequestData, ISendEventFromWidgetResponseData>(\n WidgetApiFromWidgetAction.SendEvent,\n {\n type: eventType,\n content,\n ...(stateKey !== undefined && { state_key: stateKey }),\n ...(roomId !== undefined && { room_id: roomId }),\n ...(delay !== undefined && { delay }),\n ...(parentDelayId !== undefined && { parent_delay_id: parentDelayId }),\n ...(stickyDurationMs !== undefined && { sticky_duration_ms: stickyDurationMs }),\n },\n );\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4157).\n */\n public cancelScheduledDelayedEvent(delayId: string): Promise<IUpdateDelayedEventFromWidgetResponseData> {\n return this.transport.send<IUpdateDelayedEventFromWidgetRequestData, IUpdateDelayedEventFromWidgetResponseData>(\n WidgetApiFromWidgetAction.MSC4157UpdateDelayedEvent,\n {\n delay_id: delayId,\n action: UpdateDelayedEventAction.Cancel,\n },\n );\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4157).\n */\n public restartScheduledDelayedEvent(delayId: string): Promise<IUpdateDelayedEventFromWidgetResponseData> {\n return this.transport.send<IUpdateDelayedEventFromWidgetRequestData, IUpdateDelayedEventFromWidgetResponseData>(\n WidgetApiFromWidgetAction.MSC4157UpdateDelayedEvent,\n {\n delay_id: delayId,\n action: UpdateDelayedEventAction.Restart,\n },\n );\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4157).\n */\n public sendScheduledDelayedEvent(delayId: string): Promise<IUpdateDelayedEventFromWidgetResponseData> {\n return this.transport.send<IUpdateDelayedEventFromWidgetRequestData, IUpdateDelayedEventFromWidgetResponseData>(\n WidgetApiFromWidgetAction.MSC4157UpdateDelayedEvent,\n {\n delay_id: delayId,\n action: UpdateDelayedEventAction.Send,\n },\n );\n }\n\n /**\n * Sends a to-device event.\n * @param {string} eventType The type of events being sent.\n * @param {boolean} encrypted Whether to encrypt the message contents.\n * @param {Object} contentMap A map from user IDs to device IDs to message contents.\n * @returns {Promise<ISendToDeviceFromWidgetResponseData>} Resolves when complete.\n */\n public sendToDevice(\n eventType: string,\n encrypted: boolean,\n contentMap: { [userId: string]: { [deviceId: string]: object } },\n ): Promise<ISendToDeviceFromWidgetResponseData> {\n return this.transport.send<ISendToDeviceFromWidgetRequestData, ISendToDeviceFromWidgetResponseData>(\n WidgetApiFromWidgetAction.SendToDevice,\n { type: eventType, encrypted, messages: contentMap },\n );\n }\n\n public readRoomAccountData(eventType: string, roomIds?: (string | Symbols.AnyRoom)[]): Promise<IRoomAccountData[]> {\n const data: IReadEventFromWidgetRequestData = { type: eventType };\n\n if (roomIds) {\n if (roomIds.includes(Symbols.AnyRoom)) {\n data.room_ids = Symbols.AnyRoom;\n } else {\n data.room_ids = roomIds;\n }\n }\n return this.transport\n .send<\n IReadRoomAccountDataFromWidgetRequestData,\n IReadRoomAccountDataFromWidgetResponseData\n >(WidgetApiFromWidgetAction.BeeperReadRoomAccountData, data)\n .then((r) => r.events);\n }\n\n public readRoomEvents(\n eventType: string,\n limit?: number,\n msgtype?: string,\n roomIds?: (string | Symbols.AnyRoom)[],\n since?: string | undefined,\n ): Promise<IRoomEvent[]> {\n const data: IReadEventFromWidgetRequestData = { type: eventType, msgtype: msgtype };\n if (limit !== undefined) {\n data.limit = limit;\n }\n if (roomIds) {\n if (roomIds.includes(Symbols.AnyRoom)) {\n data.room_ids = Symbols.AnyRoom;\n } else {\n data.room_ids = roomIds;\n }\n }\n if (since) {\n data.since = since;\n }\n return this.transport\n .send<\n IReadEventFromWidgetRequestData,\n IReadEventFromWidgetResponseData\n >(WidgetApiFromWidgetAction.MSC2876ReadEvents, data)\n .then((r) => r.events);\n }\n\n /**\n * Reads all related events given a known eventId.\n * @param eventId The id of the parent event to be read.\n * @param roomId The room to look within. When undefined, the user's currently\n * viewed room.\n * @param relationType The relationship type of child events to search for.\n * When undefined, all relations are returned.\n * @param eventType The event type of child events to search for. When undefined,\n * all related events are returned.\n * @param limit The maximum number of events to retrieve per room. If not\n * supplied, the server will apply a default limit.\n * @param from The pagination token to start returning results from, as\n * received from a previous call. If not supplied, results start at the most\n * recent topological event known to the server.\n * @param to The pagination token to stop returning results at. If not\n * supplied, results continue up to limit or until there are no more events.\n * @param direction The direction to search for according to MSC3715.\n * @returns Resolves to the room relations.\n */\n public async readEventRelations(\n eventId: string,\n roomId?: string,\n relationType?: string,\n eventType?: string,\n limit?: number,\n from?: string,\n to?: string,\n direction?: \"f\" | \"b\",\n ): Promise<IReadRelationsFromWidgetResponseData> {\n const versions = await this.getClientVersions();\n if (!versions.includes(UnstableApiVersion.MSC3869)) {\n throw new Error(\"The read_relations action is not supported by the client.\");\n }\n\n const data: IReadRelationsFromWidgetRequestData = {\n event_id: eventId,\n rel_type: relationType,\n event_type: eventType,\n room_id: roomId,\n to,\n from,\n limit,\n direction,\n };\n\n return this.transport.send<IReadRelationsFromWidgetRequestData, IReadRelationsFromWidgetResponseData>(\n WidgetApiFromWidgetAction.MSC3869ReadRelations,\n data,\n );\n }\n\n public readStateEvents(\n eventType: string,\n limit?: number,\n stateKey?: string,\n roomIds?: (string | Symbols.AnyRoom)[],\n ): Promise<IRoomEvent[]> {\n const data: IReadEventFromWidgetRequestData = {\n type: eventType,\n state_key: stateKey === undefined ? true : stateKey,\n };\n if (limit !== undefined) {\n data.limit = limit;\n }\n if (roomIds) {\n if (roomIds.includes(Symbols.AnyRoom)) {\n data.room_ids = Symbols.AnyRoom;\n } else {\n data.room_ids = roomIds;\n }\n }\n return this.transport\n .send<\n IReadEventFromWidgetRequestData,\n IReadEventFromWidgetResponseData\n >(WidgetApiFromWidgetAction.MSC2876ReadEvents, data)\n .then((r) => r.events);\n }\n\n /**\n * Sets a button as disabled or enabled on the modal widget. Buttons are enabled by default.\n * @param {ModalButtonID} buttonId The button ID to enable/disable.\n * @param {boolean} isEnabled Whether or not the button is enabled.\n * @returns {Promise<void>} Resolves when complete.\n * @throws Throws if the button cannot be disabled, or the client refuses to disable the button.\n */\n public setModalButtonEnabled(buttonId: ModalButtonID, isEnabled: boolean): Promise<void> {\n if (buttonId === BuiltInModalButtonID.Close) {\n throw new Error(\"The close button cannot be disabled\");\n }\n return this.transport\n .send<ISetModalButtonEnabledActionRequestData>(WidgetApiFromWidgetAction.SetModalButtonEnabled, {\n button: buttonId,\n enabled: isEnabled,\n })\n .then();\n }\n\n /**\n * Attempts to navigate the client to the given URI. This can only be called with Matrix URIs\n * (currently only matrix.to, but in future a Matrix URI scheme will be defined).\n * @param {string} uri The URI to navigate to.\n * @returns {Promise<void>} Resolves when complete.\n * @throws Throws if the URI is invalid or cannot be processed.\n * @experimental This currently relies on an unstable MSC (MSC2931).\n */\n public navigateTo(uri: string): Promise<void> {\n if (!uri || !uri.startsWith(\"https://matrix.to/#\")) {\n throw new Error(\"Invalid matrix.to URI\");\n }\n\n return this.transport\n .send<INavigateActionRequestData>(WidgetApiFromWidgetAction.MSC2931Navigate, { uri })\n .then();\n }\n\n /**\n * Starts watching for TURN servers, yielding an initial set of credentials as soon as possible,\n * and thereafter yielding new credentials whenever the previous ones expire.\n * @yields {ITurnServer} The TURN server URIs and credentials currently available to the widget.\n */\n public async *getTurnServers(): AsyncGenerator<ITurnServer> {\n let setTurnServer: (server: ITurnServer) => void;\n\n const onUpdateTurnServers = async (ev: CustomEvent<IUpdateTurnServersRequest>): Promise<void> => {\n ev.preventDefault();\n setTurnServer(ev.detail.data);\n this.transport.reply<IWidgetApiAcknowledgeResponseData>(ev.detail, {});\n };\n\n // Start listening for updates before we even start watching, to catch\n // TURN data that is sent immediately\n this.on(`action:${WidgetApiToWidgetAction.UpdateTurnServers}`, onUpdateTurnServers);\n\n // Only send the 'watch' action if we aren't already watching\n if (this.turnServerWatchers === 0) {\n try {\n await this.transport.send<IWidgetApiRequestEmptyData>(WidgetApiFromWidgetAction.WatchTurnServers, {});\n } catch (e) {\n this.off(`action:${WidgetApiToWidgetAction.UpdateTurnServers}`, onUpdateTurnServers);\n throw e;\n }\n }\n this.turnServerWatchers++;\n\n try {\n // Watch for new data indefinitely (until this generator's return method is called)\n while (true) {\n yield await new Promise<ITurnServer>((resolve) => (setTurnServer = resolve));\n }\n } finally {\n // The loop was broken by the caller - clean up\n this.off(`action:${WidgetApiToWidgetAction.UpdateTurnServers}`, onUpdateTurnServers);\n\n // Since sending the 'unwatch' action will end updates for all other\n // consumers, only send it if we're the only consumer remaining\n this.turnServerWatchers--;\n if (this.turnServerWatchers === 0) {\n await this.transport.send<IWidgetApiRequestEmptyData>(WidgetApiFromWidgetAction.UnwatchTurnServers, {});\n }\n }\n }\n\n /**\n * Search for users in the user directory.\n * @param searchTerm The term to search for.\n * @param limit The maximum number of results to return. If not supplied, the\n * @returns Resolves to the search results.\n */\n public async searchUserDirectory(\n searchTerm: string,\n limit?: number,\n ): Promise<IUserDirectorySearchFromWidgetResponseData> {\n const versions = await this.getClientVersions();\n if (!versions.includes(UnstableApiVersion.MSC3973)) {\n throw new Error(\"The user_directory_search action is not supported by the client.\");\n }\n\n const data: IUserDirectorySearchFromWidgetRequestData = {\n search_term: searchTerm,\n limit,\n };\n\n return this.transport.send<\n IUserDirectorySearchFromWidgetRequestData,\n IUserDirectorySearchFromWidgetResponseData\n >(WidgetApiFromWidgetAction.MSC3973UserDirectorySearch, data);\n }\n\n /**\n * Get the config for the media repository.\n * @returns Promise which resolves with an object containing the config.\n */\n public async getMediaConfig(): Promise<IGetMediaConfigActionFromWidgetResponseData> {\n const versions = await this.getClientVersions();\n if (!versions.includes(UnstableApiVersion.MSC4039)) {\n throw new Error(\"The get_media_config action is not supported by the client.\");\n }\n\n const data: IGetMediaConfigActionFromWidgetRequestData = {};\n\n return this.transport.send<\n IGetMediaConfigActionFromWidgetRequestData,\n IGetMediaConfigActionFromWidgetResponseData\n >(WidgetApiFromWidgetAction.MSC4039GetMediaConfigAction, data);\n }\n\n /**\n * Upload a file to the media repository on the homeserver.\n * @param file - The object to upload. Something that can be sent to\n * XMLHttpRequest.send (typically a File).\n * @returns Resolves to the location of the uploaded file.\n */\n public async uploadFile(file: XMLHttpRequestBodyInit): Promise<IUploadFileActionFromWidgetResponseData> {\n const versions = await this.getClientVersions();\n if (!versions.includes(UnstableApiVersion.MSC4039)) {\n throw new Error(\"The upload_file action is not supported by the client.\");\n }\n\n const data: IUploadFileActionFromWidgetRequestData = {\n file,\n };\n\n return this.transport.send<IUploadFileActionFromWidgetRequestData, IUploadFileActionFromWidgetResponseData>(\n WidgetApiFromWidgetAction.MSC4039UploadFileAction,\n data,\n );\n }\n\n /**\n * Download a file from the media repository on the homeserver.\n * @param contentUri - MXC URI of the file to download.\n * @returns Resolves to the contents of the file.\n */\n public async downloadFile(contentUri: string): Promise<IDownloadFileActionFromWidgetResponseData> {\n const versions = await this.getClientVersions();\n if (!versions.includes(UnstableApiVersion.MSC4039)) {\n throw new Error(\"The download_file action is not supported by the client.\");\n }\n\n const data: IDownloadFileActionFromWidgetRequestData = {\n content_uri: contentUri,\n };\n\n return this.transport.send<IDownloadFileActionFromWidgetRequestData, IDownloadFileActionFromWidgetResponseData>(\n WidgetApiFromWidgetAction.MSC4039DownloadFileAction,\n data,\n );\n }\n\n /**\n * Starts the communication channel. This should be done early to ensure\n * that messages are not missed. Communication can only be stopped by the client.\n */\n public start(): void {\n this.transport.start();\n this.getClientVersions().then((v) => {\n if (v.includes(UnstableApiVersion.MSC2974)) {\n this.supportsMSC2974Renegotiate = true;\n }\n });\n }\n\n private handleMessage(ev: CustomEvent<IWidgetApiRequest>): void | Promise<void> {\n const actionEv = new CustomEvent(`action:${ev.detail.action}`, {\n detail: ev.detail,\n cancelable: true,\n });\n this.emit(`action:${ev.detail.action}`, actionEv);\n if (!actionEv.defaultPrevented) {\n switch (ev.detail.action) {\n case WidgetApiToWidgetAction.SupportedApiVersions:\n return this.replyVersions(<ISupportedVersionsActionRequest>ev.detail);\n case WidgetApiToWidgetAction.Capabilities:\n return this.handleCapabilities(<ICapabilitiesActionRequest>ev.detail);\n case WidgetApiToWidgetAction.UpdateVisibility:\n return this.transport.reply(ev.detail, <IWidgetApiRequestEmptyData>{}); // ack to avoid error spam\n case WidgetApiToWidgetAction.NotifyCapabilities:\n return this.transport.reply(ev.detail, <IWidgetApiRequestEmptyData>{}); // ack to avoid error spam\n default:\n return this.transport.reply(ev.detail, <IWidgetApiErrorResponseData>{\n error: {\n message: \"Unknown or unsupported to-widget action: \" + ev.detail.action,\n },\n });\n }\n }\n }\n\n private replyVersions(request: ISupportedVersionsActionRequest): void {\n this.transport.reply<ISupportedVersionsActionResponseData>(request, {\n supported_versions: CurrentApiVersions,\n });\n }\n\n public getClientVersions(): Promise<ApiVersion[]> {\n if (Array.isArray(this.cachedClientVersions)) {\n return Promise.resolve(this.cachedClientVersions);\n }\n\n return this.transport\n .send<IWidgetApiRequestEmptyData, ISupportedVersionsActionResponseData>(\n WidgetApiFromWidgetAction.SupportedApiVersions,\n {},\n )\n .then((r) => {\n this.cachedClientVersions = r.supported_versions;\n return r.supported_versions;\n })\n .catch((e) => {\n console.warn(\"non-fatal error getting supported client versions: \", e);\n return [];\n });\n }\n\n private handleCapabilities(request: ICapabilitiesActionRequest): void | Promise<void> {\n if (this.capabilitiesFinished) {\n return this.transport.reply<IWidgetApiErrorResponseData>(request, {\n error: {\n message: \"Capability negotiation already completed\",\n },\n });\n }\n\n // See if we can expect a capabilities notification or not\n return this.getClientVersions().then((v) => {\n if (v.includes(UnstableApiVersion.MSC2871)) {\n this.once(\n `action:${WidgetApiToWidgetAction.NotifyCapabilities}`,\n (ev: CustomEvent<INotifyCapabilitiesActionRequest>) => {\n this.approvedCapabilities = ev.detail.data.approved;\n this.emit(\"ready\");\n },\n );\n } else {\n // if we can't expect notification, we're as done as we can be\n this.emit(\"ready\");\n }\n\n // in either case, reply to that capabilities request\n this.capabilitiesFinished = true;\n return this.transport.reply<ICapabilitiesActionResponseData>(request, {\n capabilities: this.requestedCapabilities,\n });\n });\n }\n}\n","/*\n * Copyright 2020 - 2021 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Symbols } from \"../Symbols\";\n\nexport enum MatrixCapabilities {\n Screenshots = \"m.capability.screenshot\",\n StickerSending = \"m.sticker\",\n AlwaysOnScreen = \"m.always_on_screen\",\n /**\n * @deprecated It is not recommended to rely on this existing - it can be removed without notice.\n * Ask Element to not give the option to move the widget into a separate tab.\n */\n RequiresClient = \"io.element.requires_client\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC2931Navigate = \"org.matrix.msc2931.navigate\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC3846TurnServers = \"town.robin.msc3846.turn_servers\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC3973UserDirectorySearch = \"org.matrix.msc3973.user_directory_search\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4039UploadFile = \"org.matrix.msc4039.upload_file\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4039DownloadFile = \"org.matrix.msc4039.download_file\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4157SendDelayedEvent = \"org.matrix.msc4157.send.delayed_event\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4157UpdateDelayedEvent = \"org.matrix.msc4157.update_delayed_event\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4407SendStickyEvent = \"org.matrix.msc4407.send.sticky_event\",\n /**\n * @experimental It is not recommended to rely on this existing - it can be removed without notice.\n */\n MSC4407ReceiveStickyEvent = \"org.matrix.msc4407.receive.sticky_event\",\n}\n\nexport type Capability = MatrixCapabilities | string;\n\nexport const StickerpickerCapabilities: Capability[] = [MatrixCapabilities.StickerSending];\nexport const VideoConferenceCapabilities: Capability[] = [MatrixCapabilities.AlwaysOnScreen];\n\n/**\n * Determines if a capability is a capability for a timeline.\n * @param {Capability} capability The capability to test.\n * @returns {boolean} True if a timeline capability, false otherwise.\n */\nexport function isTimelineCapability(capability: Capability): boolean {\n // TODO: Change when MSC2762 becomes stable.\n return capability?.startsWith(\"org.matrix.msc2762.timeline:\");\n}\n\n/**\n * Determines if a capability is a timeline capability for the given room.\n * @param {Capability} capability The capability to test.\n * @param {string | Symbols.AnyRoom} roomId The room ID, or `Symbols.AnyRoom` for that designation.\n * @returns {boolean} True if a matching capability, false otherwise.\n */\nexport function isTimelineCapabilityFor(capability: Capability, roomId: string | Symbols.AnyRoom): boolean {\n return capability === `org.matrix.msc2762.timeline:${roomId}`;\n}\n\n/**\n * Gets the room ID described by a timeline capability.\n * @param {string} capability The capability to parse.\n * @returns {string} The room ID.\n */\nexport function getTimelineRoomIDFromCapability(capability: Capability): string {\n return capability.substring(capability.indexOf(\":\") + 1);\n}\n","/*\n * Copyright 2020 - 2024 The Matrix.org Foundation C.I.C.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IWidgetApiResponse, IWidgetApiResponseData } from \"./IWidgetApiResponse\";\n\n/**\n * The format of errors returned by Matrix API requests\n * made by a WidgetDriver.\n */\nexport interface IMatrixApiError {\n /** The HTTP status code of the associated request. */\n http_status: number; // eslint-disable-line camelcase\n /** Any HTTP response headers that are relevant to the error. */\n http_headers: { [name: string]: string }; // eslint-disable-line camelcase\n /** The URL of the failed request. */\n url: string;\n /** @see {@link https://spec.matrix.org/latest/client-server-api/#standard-error-response} */\n response: {\n errcode: string;\n error: string;\n } & IWidgetApiResponseData; // extensible\n}\n\nexport interface IWidgetApiErrorResponseDataDetails {\n /** Set if the error came from a Matrix API request made by a widget driver */\n matrix_api_error?: IMatrixApiError; // eslint-disable-line camelcase\n}\n\nexport interface IWidgetApiErrorResponseData extends IWidgetApiResponseData {\n error: {\n /** A user-friendly string describing the error */\n message: string;\n } & IWidgetApiErrorResponseDataDetails;\n}\n\nexport interface IWidgetApiErrorResponse extends IWidgetApiResponse {\n response: IWidgetApiErrorResponseData;\n}\n\nexport function isErrorResponse(responseData: IWidgetApiResponseData): responseData is IWidgetApiErrorResponseData {\n const error = responseData.error;\n return typeof error === \"object\" && error !== null && \"message\" in error && typeof error.message === \"string\";\n}\n","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _asyncIterator(r) { var n, t, o, e = 2; for (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = \"@@asyncIterator\", o = \"@@iterator\"; } throw new TypeError(\"Object is not async iterable\"); }\nfunction AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(r) { var n = this.s.return; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, throw: function _throw(r) { var n = this.s.return; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { WidgetApiToWidgetAction, WidgetApiResponseError, MatrixCapabilities, UnstableApiVersion } from \"matrix-widget-api\";\nimport { MatrixEvent, EventStatus } from \"./models/event.js\";\nimport { UpdateDelayedEventAction, isSendDelayedEventRequestOpts } from \"./@types/requests.js\";\nimport { EventType } from \"./@types/event.js\";\nimport { logger } from \"./logger.js\";\nimport { MatrixClient, ClientEvent, UNSTABLE_MSC4140_DELAYED_EVENTS } from \"./client.js\";\nimport { SyncApi, SyncState } from \"./sync.js\";\nimport { SlidingSyncSdk } from \"./sliding-sync-sdk.js\";\nimport { ConnectionError, MatrixError } from \"./http-api/errors.js\";\nimport { User } from \"./models/user.js\";\nimport { MapWithDefault, recursiveMapToObject } from \"./utils.js\";\nimport { TypedEventEmitter, UnsupportedDelayedEventsEndpointError } from \"./matrix.js\";\nexport var RoomWidgetClientEvent = /*#__PURE__*/function (RoomWidgetClientEvent) {\n RoomWidgetClientEvent[\"PendingEventsChanged\"] = \"PendingEvent.pendingEventsChanged\";\n return RoomWidgetClientEvent;\n}({});\n/**\n * A MatrixClient that routes its requests through the widget API instead of the\n * real CS API.\n * @experimental This class is considered unstable!\n */\nexport class RoomWidgetClient extends MatrixClient {\n /**\n *\n * @param widgetApi - The widget api to use for communication.\n * @param capabilities - The capabilities the widget client will request.\n * @param roomId - The room id the widget is associated with.\n * @param opts - The configuration options for this client.\n * @param sendContentLoaded - Whether to send a content loaded widget action immediately after initial setup.\n * Set to `false` if the widget uses `waitForIFrameLoad=true` (in this case the client does not expect a content loaded action at all),\n * or if the the widget wants to send the `ContentLoaded` action at a later point in time after the initial setup.\n */\n constructor(widgetApi, capabilities, roomId, opts, sendContentLoaded) {\n var _this, _capabilities$receive;\n super(opts);\n _this = this;\n this.widgetApi = widgetApi;\n this.capabilities = capabilities;\n this.roomId = roomId;\n _defineProperty(this, \"room\", void 0);\n _defineProperty(this, \"widgetApiReady\", void 0);\n _defineProperty(this, \"roomStateSynced\", void 0);\n _defineProperty(this, \"lifecycle\", void 0);\n _defineProperty(this, \"syncState\", null);\n _defineProperty(this, \"pendingSendingEventsTxId\", []);\n _defineProperty(this, \"eventEmitter\", new TypedEventEmitter());\n _defineProperty(this, \"syncApiResolver\", Promise.withResolvers());\n _defineProperty(this, \"updateTxId\", /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (event) {\n // We update the txId for remote echos that originate from this client.\n // This happens with the help of `pendingSendingEventsTxId` where we store all events that are currently sending\n // with their widget txId and once ready the final evId.\n if (\n // This could theoretically be an event send by this device\n // In that case we need to update the txId of the event because the embedded client/widget\n // knows this event with a different transaction Id than what was used by the host client.\n event.getSender() === _this.getUserId() &&\n // We optimize by not blocking events from types that we have not send\n // with this client.\n _this.pendingSendingEventsTxId.some(p => event.getType() === p.type)) {\n var _this$pendingSendingE;\n // Compare by event Id if we have a matching pending event where we know the txId.\n var matchingTxId = (_this$pendingSendingE = _this.pendingSendingEventsTxId.find(p => p.id === event.getId())) === null || _this$pendingSendingE === void 0 ? void 0 : _this$pendingSendingE.txId;\n // Block any further processing of this event until we have received the sending response.\n // -> until we know the event id.\n // -> until we have not pending events anymore.\n while (!matchingTxId && _this.pendingSendingEventsTxId.length > 0) {\n var _this$pendingSendingE2;\n // Recheck whenever the PendingEventsChanged\n yield new Promise(resolve => _this.eventEmitter.once(RoomWidgetClientEvent.PendingEventsChanged, () => resolve()));\n matchingTxId = (_this$pendingSendingE2 = _this.pendingSendingEventsTxId.find(p => p.id === event.getId())) === null || _this$pendingSendingE2 === void 0 ? void 0 : _this$pendingSendingE2.txId;\n }\n\n // We found the correct txId: we update the event and delete the entry of the pending events.\n if (matchingTxId) {\n event.setTxnId(matchingTxId);\n event.setUnsigned(_objectSpread(_objectSpread({}, event.getUnsigned()), {}, {\n transaction_id: matchingTxId\n }));\n }\n _this.pendingSendingEventsTxId = _this.pendingSendingEventsTxId.filter(p => p.id !== event.getId());\n\n // Emit once there are no pending events anymore to release all other events that got\n // awaited in the `while (!matchingTxId && this.pendingSendingEventsTxId.length > 0)` loop\n // but are not send by this client.\n if (_this.pendingSendingEventsTxId.length === 0) {\n _this.eventEmitter.emit(RoomWidgetClientEvent.PendingEventsChanged);\n }\n }\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n _defineProperty(this, \"onEvent\", /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (ev) {\n ev.preventDefault();\n\n // Verify the room ID matches, since it's possible for the client to\n // send us events from other rooms if this widget is always on screen\n if (ev.detail.data.room_id === _this.roomId) {\n var _event = new MatrixEvent(ev.detail.data);\n\n // Only inject once we have update the txId\n yield _this.updateTxId(_event);\n yield _this.syncApiResolver.promise;\n if (_this.syncApi instanceof SyncApi) {\n if (yield _this.supportUpdateState()) {\n yield _this.syncApi.injectRoomEvents(_this.room, undefined, [], [_event]);\n } else {\n // Passing undefined for `stateAfterEventList` will make `injectRoomEvents` run in legacy mode\n // -> state events in `timelineEventList` will update the state.\n yield _this.syncApi.injectRoomEvents(_this.room, [], undefined, [_event]);\n }\n } else {\n // Sliding Sync\n if (yield _this.supportUpdateState()) {\n yield _this.syncApi.injectRoomEvents(_this.room, [], [_event]);\n } else {\n logger.error(\"slididng sync cannot be used in widget mode if the client widget driver does not support the version: 'org.matrix.msc2762_update_state'\");\n }\n }\n _this.emit(ClientEvent.Event, _event);\n if (_event.unstableStickyInfo !== undefined) _this.room._unstable_addStickyEvents([_event]);\n _this.setSyncState(SyncState.Syncing);\n logger.info(\"Received event \".concat(_event.getId(), \" \").concat(_event.getType()));\n } else {\n var _ev$detail$data = ev.detail.data,\n eventId = _ev$detail$data.event_id,\n _roomId = _ev$detail$data.room_id;\n logger.info(\"Received event \".concat(eventId, \" for a different room \").concat(_roomId, \"; discarding\"));\n }\n yield _this.ack(ev);\n });\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n _defineProperty(this, \"onToDevice\", /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(function* (ev) {\n ev.preventDefault();\n var event = new MatrixEvent({\n type: ev.detail.data.type,\n sender: ev.detail.data.sender,\n content: ev.detail.data.content\n });\n // Mark the event as encrypted if it was, using fake contents and keys since those are unknown to us\n if (ev.detail.data.encrypted) event.makeEncrypted(EventType.RoomMessageEncrypted, {}, \"\", \"\");\n _this.emit(ClientEvent.ToDeviceEvent, event);\n _this.setSyncState(SyncState.Syncing);\n yield _this.ack(ev);\n });\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }());\n _defineProperty(this, \"onStateUpdate\", /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* (ev) {\n ev.preventDefault();\n if (!(yield _this.supportUpdateState())) {\n logger.warn(\"received update_state widget action but the widget driver did not claim to support 'org.matrix.msc2762_update_state'\");\n }\n yield _this.syncApiResolver.promise;\n for (var rawEvent of ev.detail.data.state) {\n // Verify the room ID matches, since it's possible for the client to\n // send us state updates from other rooms if this widget is always\n // on screen\n if (rawEvent.room_id === _this.roomId) {\n var _event2 = new MatrixEvent(rawEvent);\n if (_this.syncApi instanceof SyncApi) {\n yield _this.syncApi.injectRoomEvents(_this.room, undefined, [_event2]);\n } else {\n // Sliding Sync\n yield _this.syncApi.injectRoomEvents(_this.room, [_event2]);\n }\n logger.debug(\"Updated state entry \".concat(_event2.getType(), \" \").concat(_event2.getStateKey(), \" to \").concat(_event2.getId()));\n } else {\n var _ev$detail$data2 = ev.detail.data,\n eventId = _ev$detail$data2.event_id,\n _roomId2 = _ev$detail$data2.room_id;\n logger.info(\"Received state entry \".concat(eventId, \" for a different room \").concat(_roomId2, \"; discarding\"));\n }\n }\n yield _this.ack(ev);\n });\n return function (_x4) {\n return _ref4.apply(this, arguments);\n };\n }());\n var transportSend = this.widgetApi.transport.send.bind(this.widgetApi.transport);\n this.widgetApi.transport.send = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(function* (action, data) {\n try {\n return yield transportSend(action, data);\n } catch (error) {\n processAndThrow(error);\n }\n });\n return function (_x5, _x6) {\n return _ref5.apply(this, arguments);\n };\n }();\n var transportSendComplete = this.widgetApi.transport.sendComplete.bind(this.widgetApi.transport);\n this.widgetApi.transport.sendComplete = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(function* (action, data) {\n try {\n return yield transportSendComplete(action, data);\n } catch (error) {\n processAndThrow(error);\n }\n });\n return function (_x7, _x8) {\n return _ref6.apply(this, arguments);\n };\n }();\n this.widgetApiReady = new Promise(resolve => this.widgetApi.once(\"ready\", resolve));\n this.roomStateSynced = (_capabilities$receive = capabilities.receiveState) !== null && _capabilities$receive !== void 0 && _capabilities$receive.length ? new Promise(resolve => this.widgetApi.once(\"action:\".concat(WidgetApiToWidgetAction.UpdateState), resolve)) : Promise.resolve();\n this.requestInitialCapabilities(capabilities, roomId);\n widgetApi.on(\"action:\".concat(WidgetApiToWidgetAction.SendEvent), this.onEvent);\n widgetApi.on(\"action:\".concat(WidgetApiToWidgetAction.SendToDevice), this.onToDevice);\n widgetApi.on(\"action:\".concat(WidgetApiToWidgetAction.UpdateState), this.onStateUpdate);\n\n // Open communication with the host\n widgetApi.start();\n // Send a content loaded event now we've started the widget API\n // Note that element-web currently does not use waitForIFrameLoad=false and so\n // does *not* (yes, that is the right way around) wait for this event. Let's\n // start sending this, then once this has rolled out, we can change element-web to\n // use waitForIFrameLoad=false and have a widget API that's less racy.\n if (sendContentLoaded) widgetApi.sendContentLoaded();\n }\n requestInitialCapabilities(capabilities, roomId) {\n var _capabilities$sendEve, _capabilities$receive2, _capabilities$sendSta, _capabilities$receive3, _capabilities$sendEve2, _capabilities$receive4, _capabilities$sendSta2, _capabilities$receive5, _capabilities$sendToD, _capabilities$receive6, _capabilities$sendEve3, _capabilities$sendSta3;\n // Request capabilities for the functionality this client needs to support\n if ((_capabilities$sendEve = capabilities.sendEvent) !== null && _capabilities$sendEve !== void 0 && _capabilities$sendEve.length || (_capabilities$receive2 = capabilities.receiveEvent) !== null && _capabilities$receive2 !== void 0 && _capabilities$receive2.length || capabilities.sendMessage === true || Array.isArray(capabilities.sendMessage) && capabilities.sendMessage.length || capabilities.receiveMessage === true || Array.isArray(capabilities.receiveMessage) && capabilities.receiveMessage.length || (_capabilities$sendSta = capabilities.sendState) !== null && _capabilities$sendSta !== void 0 && _capabilities$sendSta.length || (_capabilities$receive3 = capabilities.receiveState) !== null && _capabilities$receive3 !== void 0 && _capabilities$receive3.length) {\n this.widgetApi.requestCapabilityForRoomTimeline(roomId);\n }\n (_capabilities$sendEve2 = capabilities.sendEvent) === null || _capabilities$sendEve2 === void 0 || _capabilities$sendEve2.forEach(eventType => this.widgetApi.requestCapabilityToSendEvent(eventType));\n (_capabilities$receive4 = capabilities.receiveEvent) === null || _capabilities$receive4 === void 0 || _capabilities$receive4.forEach(eventType => this.widgetApi.requestCapabilityToReceiveEvent(eventType));\n if (capabilities.sendMessage === true) {\n this.widgetApi.requestCapabilityToSendMessage();\n } else if (Array.isArray(capabilities.sendMessage)) {\n capabilities.sendMessage.forEach(msgType => this.widgetApi.requestCapabilityToSendMessage(msgType));\n }\n if (capabilities.receiveMessage === true) {\n this.widgetApi.requestCapabilityToReceiveMessage();\n } else if (Array.isArray(capabilities.receiveMessage)) {\n capabilities.receiveMessage.forEach(msgType => this.widgetApi.requestCapabilityToReceiveMessage(msgType));\n }\n (_capabilities$sendSta2 = capabilities.sendState) === null || _capabilities$sendSta2 === void 0 || _capabilities$sendSta2.forEach(_ref7 => {\n var eventType = _ref7.eventType,\n stateKey = _ref7.stateKey;\n return this.widgetApi.requestCapabilityToSendState(eventType, stateKey);\n });\n (_capabilities$receive5 = capabilities.receiveState) === null || _capabilities$receive5 === void 0 || _capabilities$receive5.forEach(_ref8 => {\n var eventType = _ref8.eventType,\n stateKey = _ref8.stateKey;\n return this.widgetApi.requestCapabilityToReceiveState(eventType, stateKey);\n });\n (_capabilities$sendToD = capabilities.sendToDevice) === null || _capabilities$sendToD === void 0 || _capabilities$sendToD.forEach(eventType => this.widgetApi.requestCapabilityToSendToDevice(eventType));\n (_capabilities$receive6 = capabilities.receiveToDevice) === null || _capabilities$receive6 === void 0 || _capabilities$receive6.forEach(eventType => this.widgetApi.requestCapabilityToReceiveToDevice(eventType));\n if (capabilities.sendDelayedEvents && ((_capabilities$sendEve3 = capabilities.sendEvent) !== null && _capabilities$sendEve3 !== void 0 && _capabilities$sendEve3.length || capabilities.sendMessage === true || Array.isArray(capabilities.sendMessage) && capabilities.sendMessage.length || (_capabilities$sendSta3 = capabilities.sendState) !== null && _capabilities$sendSta3 !== void 0 && _capabilities$sendSta3.length)) {\n this.widgetApi.requestCapability(MatrixCapabilities.MSC4157SendDelayedEvent);\n }\n if (capabilities.updateDelayedEvents) {\n this.widgetApi.requestCapability(MatrixCapabilities.MSC4157UpdateDelayedEvent);\n }\n if (capabilities.sendSticky) {\n this.widgetApi.requestCapability(MatrixCapabilities.MSC4407SendStickyEvent);\n }\n if (capabilities.receiveSticky) {\n this.widgetApi.requestCapability(MatrixCapabilities.MSC4407ReceiveStickyEvent);\n }\n if (capabilities.turnServers) {\n this.widgetApi.requestCapability(MatrixCapabilities.MSC3846TurnServers);\n }\n }\n supportUpdateState() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return (yield _this2.widgetApi.getClientVersions()).includes(UnstableApiVersion.MSC2762_UPDATE_STATE);\n })();\n }\n startClient() {\n var _arguments = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var opts = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {};\n _this3.lifecycle = new AbortController();\n\n // Create our own user object artificially (instead of waiting for sync)\n // so it's always available, even if the user is not in any rooms etc.\n var userId = _this3.getUserId();\n if (userId) {\n _this3.store.storeUser(new User(userId));\n }\n\n // Even though we have no access token and cannot sync, the sync class\n // still has some valuable helper methods that we make use of, so we\n // instantiate it anyways\n if (opts.slidingSync) {\n _this3.syncApi = new SlidingSyncSdk(opts.slidingSync, _this3, opts, _this3.buildSyncApiOptions());\n } else {\n _this3.syncApi = new SyncApi(_this3, opts, _this3.buildSyncApiOptions());\n }\n _this3.syncApiResolver.resolve();\n _this3.room = _this3.syncApi.createRoom(_this3.roomId);\n _this3.store.storeRoom(_this3.room);\n yield _this3.widgetApiReady;\n\n // sync room state:\n if (yield _this3.supportUpdateState()) {\n // This will resolve once the client driver has sent us all the allowed room state.\n yield _this3.roomStateSynced;\n } else {\n var _this3$capabilities$r, _this3$capabilities$r2;\n // Backfill the requested events\n // We only get the most recent event for every type + state key combo,\n // so it doesn't really matter what order we inject them in\n yield Promise.all((_this3$capabilities$r = (_this3$capabilities$r2 = _this3.capabilities.receiveState) === null || _this3$capabilities$r2 === void 0 ? void 0 : _this3$capabilities$r2.map(/*#__PURE__*/function () {\n var _ref0 = _asyncToGenerator(function* (_ref9) {\n var eventType = _ref9.eventType,\n stateKey = _ref9.stateKey;\n var rawEvents = yield _this3.widgetApi.readStateEvents(eventType, undefined, stateKey, [_this3.roomId]);\n var events = rawEvents.map(rawEvent => new MatrixEvent(rawEvent));\n if (_this3.syncApi instanceof SyncApi) {\n // Passing events as `stateAfterEventList` will update the state.\n yield _this3.syncApi.injectRoomEvents(_this3.room, undefined, events);\n } else {\n yield _this3.syncApi.injectRoomEvents(_this3.room, events); // Sliding Sync\n }\n events.forEach(event => {\n _this3.emit(ClientEvent.Event, event);\n logger.info(\"Backfilled event \".concat(event.getId(), \" \").concat(event.getType(), \" \").concat(event.getStateKey()));\n });\n });\n return function (_x9) {\n return _ref0.apply(this, arguments);\n };\n }())) !== null && _this3$capabilities$r !== void 0 ? _this3$capabilities$r : []);\n }\n if (opts.clientWellKnownPollPeriod !== undefined) {\n _this3.clientWellKnownIntervalID = setInterval(() => {\n _this3.fetchClientWellKnown();\n }, 1000 * opts.clientWellKnownPollPeriod);\n _this3.fetchClientWellKnown();\n }\n _this3.setSyncState(SyncState.Syncing);\n logger.info(\"Finished initial sync\");\n _this3.matrixRTC.start();\n\n // Watch for TURN servers, if requested\n if (_this3.capabilities.turnServers) _this3.watchTurnServers();\n })();\n }\n stopClient() {\n this.widgetApi.off(\"action:\".concat(WidgetApiToWidgetAction.SendEvent), this.onEvent);\n this.widgetApi.off(\"action:\".concat(WidgetApiToWidgetAction.SendToDevice), this.onToDevice);\n this.widgetApi.off(\"action:\".concat(WidgetApiToWidgetAction.UpdateState), this.onStateUpdate);\n super.stopClient();\n this.lifecycle.abort(); // Signal to other async tasks that the client has stopped\n }\n joinRoom(roomIdOrAlias) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (roomIdOrAlias === _this4.roomId) return _this4.room;\n throw new Error(\"Unknown room: \".concat(roomIdOrAlias));\n })();\n }\n encryptAndSendEvent(room, event, delayOptsOrQuery, queryDict) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n var _queryOpts;\n var queryOpts = queryDict;\n var delayOpts;\n if (delayOptsOrQuery && isSendDelayedEventRequestOpts(delayOptsOrQuery)) {\n delayOpts = delayOptsOrQuery;\n } else if (!queryOpts) {\n queryOpts = delayOptsOrQuery;\n }\n var stickyDurationMs = (_queryOpts = queryOpts) === null || _queryOpts === void 0 ? void 0 : _queryOpts[\"org.matrix.msc4354.sticky_duration_ms\"];\n if (stickyDurationMs !== undefined && typeof stickyDurationMs !== \"number\") {\n throw new Error(\"Sticky duration must be a number when defined\");\n }\n // This is save since we just checked that above\n // We need the additional as assertion for the EW linter to be happy.\n // It is not capable of implying the type based on the throw if `stickyDurationMs !== undefined && typeof stickyDurationMs !== \"number\"`\n // above\n var stickyDurationMsAsNumber = stickyDurationMs;\n\n // We need to extend the content with the redacts parameter\n // The js sdk uses event.redacts but the widget api uses event.content.redacts\n // This will be converted back to event.redacts in the widget driver.\n var content = event.event.redacts ? _objectSpread(_objectSpread({}, event.getContent()), {}, {\n redacts: event.event.redacts\n }) : event.getContent();\n\n // Delayed event special case.\n if (delayOpts) {\n // TODO: updatePendingEvent for delayed events?\n var _response = yield _this5.widgetApi.sendRoomEvent(event.getType(), content, room.roomId, \"delay\" in delayOpts ? delayOpts.delay : undefined, \"parent_delay_id\" in delayOpts ? delayOpts.parent_delay_id : undefined, stickyDurationMsAsNumber).catch(timeoutToConnectionError);\n return _this5.validateSendDelayedEventResponse(_response);\n }\n var txId = event.getTxnId();\n // Add the txnId to the pending list (still with unknown evID)\n if (txId) _this5.pendingSendingEventsTxId.push({\n type: event.getType(),\n id: undefined,\n txId\n });\n var response;\n try {\n response = yield _this5.widgetApi.sendRoomEvent(event.getType(), content, room.roomId, undefined, undefined, stickyDurationMsAsNumber).catch(timeoutToConnectionError);\n } catch (e) {\n _this5.updatePendingEventStatus(room, event, EventStatus.NOT_SENT);\n throw e;\n }\n // This also checks for an event id on the response\n room.updatePendingEvent(event, EventStatus.SENT, response.event_id);\n\n // Update the pending events list with the eventId\n _this5.pendingSendingEventsTxId.forEach(p => {\n if (p.txId === txId) p.id = response.event_id;\n });\n _this5.eventEmitter.emit(RoomWidgetClientEvent.PendingEventsChanged);\n return {\n event_id: response.event_id\n };\n })();\n }\n sendStateEvent(roomId, eventType, content) {\n var _arguments2 = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var stateKey = _arguments2.length > 3 && _arguments2[3] !== undefined ? _arguments2[3] : \"\";\n var response = yield _this6.widgetApi.sendStateEvent(eventType, stateKey, content, roomId).catch(timeoutToConnectionError);\n if (response.event_id === undefined) {\n throw new Error(\"'event_id' absent from response to an event request\");\n }\n return {\n event_id: response.event_id\n };\n })();\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line\n _unstable_sendDelayedStateEvent(roomId, delayOpts, eventType, content) {\n var _arguments3 = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var stateKey = _arguments3.length > 4 && _arguments3[4] !== undefined ? _arguments3[4] : \"\";\n if (!(yield _this7.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"sendDelayedStateEvent\");\n }\n var response = yield _this7.widgetApi.sendStateEvent(eventType, stateKey, content, roomId, \"delay\" in delayOpts ? delayOpts.delay : undefined, \"parent_delay_id\" in delayOpts ? delayOpts.parent_delay_id : undefined).catch(timeoutToConnectionError);\n return _this7.validateSendDelayedEventResponse(response);\n })();\n }\n validateSendDelayedEventResponse(response) {\n if (response.delay_id === undefined) {\n throw new Error(\"'delay_id' absent from response to a delayed event request\");\n }\n return {\n delay_id: response.delay_id\n };\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n * @deprecated Instead use one of:\n * - {@link _unstable_cancelScheduledDelayedEvent}\n * - {@link _unstable_restartScheduledDelayedEvent}\n * - {@link _unstable_sendScheduledDelayedEvent}\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_updateDelayedEvent(delayId, action) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this8.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"updateDelayedEvent\");\n }\n var updateDelayedEvent;\n switch (action) {\n case UpdateDelayedEventAction.Cancel:\n updateDelayedEvent = _this8.widgetApi.cancelScheduledDelayedEvent;\n break;\n case UpdateDelayedEventAction.Restart:\n updateDelayedEvent = _this8.widgetApi.cancelScheduledDelayedEvent;\n break;\n case UpdateDelayedEventAction.Send:\n updateDelayedEvent = _this8.widgetApi.sendScheduledDelayedEvent;\n break;\n }\n yield updateDelayedEvent.call(_this8.widgetApi, delayId).catch(timeoutToConnectionError);\n return {};\n })();\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_cancelScheduledDelayedEvent(delayId) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this9.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"cancelScheduledDelayedEvent\");\n }\n yield _this9.widgetApi.cancelScheduledDelayedEvent(delayId).catch(timeoutToConnectionError);\n return {};\n })();\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_restartScheduledDelayedEvent(delayId) {\n var _this0 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this0.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"restartScheduledDelayedEvent\");\n }\n yield _this0.widgetApi.restartScheduledDelayedEvent(delayId).catch(timeoutToConnectionError);\n return {};\n })();\n }\n\n /**\n * @experimental This currently relies on an unstable MSC (MSC4140).\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _unstable_sendScheduledDelayedEvent(delayId) {\n var _this1 = this;\n return _asyncToGenerator(function* () {\n if (!(yield _this1.doesServerSupportUnstableFeature(UNSTABLE_MSC4140_DELAYED_EVENTS))) {\n throw new UnsupportedDelayedEventsEndpointError(\"Server does not support the delayed events API\", \"sendScheduledDelayedEvent\");\n }\n yield _this1.widgetApi.sendScheduledDelayedEvent(delayId).catch(timeoutToConnectionError);\n return {};\n })();\n }\n\n /**\n * by {@link MatrixClient.encryptAndSendToDevice}.\n */\n encryptAndSendToDevice(eventType, devices, payload) {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n // map: user Id → device Id → payload\n var contentMap = new MapWithDefault(() => new Map());\n for (var _ref10 of devices) {\n var userId = _ref10.userId;\n var deviceId = _ref10.deviceId;\n contentMap.getOrCreate(userId).set(deviceId, payload);\n }\n yield _this10.widgetApi.sendToDevice(eventType, true, recursiveMapToObject(contentMap)).catch(timeoutToConnectionError);\n })();\n }\n sendToDevice(eventType, contentMap) {\n var _this11 = this;\n return _asyncToGenerator(function* () {\n yield _this11.widgetApi.sendToDevice(eventType, false, recursiveMapToObject(contentMap)).catch(timeoutToConnectionError);\n return {};\n })();\n }\n getOpenIdToken() {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n var token = yield _this12.widgetApi.requestOpenIDConnectToken().catch(timeoutToConnectionError);\n // the IOpenIDCredentials from the widget-api and IOpenIDToken form the matrix-js-sdk are compatible.\n // we still recreate the token to make this transparent and catch'able by the linter in case the types change in the future.\n return {\n access_token: token.access_token,\n expires_in: token.expires_in,\n matrix_server_name: token.matrix_server_name,\n token_type: token.token_type\n };\n })();\n }\n queueToDevice(_ref11) {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n var eventType = _ref11.eventType,\n batch = _ref11.batch;\n // map: user Id → device Id → payload\n var contentMap = new MapWithDefault(() => new Map());\n for (var _ref13 of batch) {\n var userId = _ref13.userId;\n var deviceId = _ref13.deviceId;\n var payload = _ref13.payload;\n contentMap.getOrCreate(userId).set(deviceId, payload);\n }\n yield _this13.widgetApi.sendToDevice(eventType, false, recursiveMapToObject(contentMap)).catch(timeoutToConnectionError);\n })();\n }\n\n /**\n * Send an event to a specific list of devices via the widget API. Optionally encrypts the event.\n *\n * If you are using a full MatrixClient you would be calling {@link MatrixClient.getCrypto().encryptToDeviceMessages()} followed\n * by {@link MatrixClient.queueToDevice}.\n *\n * However, this is combined into a single step when running as an embedded widget client. So, we expose this method for those\n * that need it.\n *\n * @param eventType - Type of the event to send.\n * @param encrypted - Whether the event should be encrypted.\n * @param contentMap - The content to send. Map from user_id to device_id to content object.\n */\n sendToDeviceViaWidgetApi(eventType, encrypted, contentMap) {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n yield _this14.widgetApi.sendToDevice(eventType, encrypted, recursiveMapToObject(contentMap)).catch(timeoutToConnectionError);\n })();\n }\n\n // Overridden since we get TURN servers automatically over the widget API,\n // and this method would otherwise complain about missing an access token\n checkTurnServers() {\n var _this15 = this;\n return _asyncToGenerator(function* () {\n return _this15.turnServers.length > 0;\n })();\n }\n\n // Overridden since we 'sync' manually without the sync API\n getSyncState() {\n return this.syncState;\n }\n setSyncState(state) {\n var oldState = this.syncState;\n this.syncState = state;\n this.emit(ClientEvent.Sync, state, oldState);\n }\n ack(ev) {\n var _this16 = this;\n return _asyncToGenerator(function* () {\n yield _this16.widgetApi.transport.reply(ev.detail, {});\n })();\n }\n watchTurnServers() {\n var _this17 = this;\n return _asyncToGenerator(function* () {\n var servers = _this17.widgetApi.getTurnServers();\n var onClientStopped = () => {\n servers.return(undefined);\n };\n _this17.lifecycle.signal.addEventListener(\"abort\", onClientStopped);\n try {\n var _iteratorAbruptCompletion = false;\n var _didIteratorError = false;\n var _iteratorError;\n try {\n for (var _iterator = _asyncIterator(servers), _step; _iteratorAbruptCompletion = !(_step = yield _iterator.next()).done; _iteratorAbruptCompletion = false) {\n var server = _step.value;\n {\n _this17.turnServers = [{\n urls: server.uris,\n username: server.username,\n credential: server.password\n }];\n _this17.emit(ClientEvent.TurnServers, _this17.turnServers);\n logger.log(\"Received TURN server: \".concat(server.uris));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (_iteratorAbruptCompletion && _iterator.return != null) {\n yield _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } catch (e) {\n logger.warn(\"Error watching TURN servers\", e);\n } finally {\n _this17.lifecycle.signal.removeEventListener(\"abort\", onClientStopped);\n }\n })();\n }\n}\nfunction processAndThrow(error) {\n if (error instanceof WidgetApiResponseError && error.data.matrix_api_error) {\n throw MatrixError.fromWidgetApiErrorData(error.data.matrix_api_error);\n } else {\n throw error;\n }\n}\n\n/**\n * This converts an \"Request timed out\" error from the PostmessageTransport into a ConnectionError.\n * It either throws the original error or a new ConnectionError.\n **/\nfunction timeoutToConnectionError(error) {\n // TODO: this should not check on error.message but instead it should be a specific type\n // error instanceof WidgetTimeoutError\n if (error instanceof Error && error.message === \"Request timed out\") {\n throw new ConnectionError(\"widget api timeout\");\n }\n throw error;\n}\n//# sourceMappingURL=embedded.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { EventType } from \"./@types/event.js\";\nimport { isSupportedReceiptType, MapWithDefault, recursiveMapToObject } from \"./utils.js\";\n/**\n * Summarises the read receipts within a room. Used by the sync accumulator.\n *\n * Given receipts for users, picks the most recently-received one and provides\n * the results in a new fake receipt event returned from\n * buildAccumulatedReceiptEvent().\n *\n * Handles unthreaded receipts and receipts in each thread separately, so the\n * returned event contains the most recently received unthreaded receipt, and\n * the most recently received receipt in each thread.\n */\nexport class ReceiptAccumulator {\n constructor() {\n /** user_id -\\> most-recently-received unthreaded receipt */\n _defineProperty(this, \"unthreadedReadReceipts\", new Map());\n /** thread_id -\\> user_id -\\> most-recently-received receipt for this thread */\n _defineProperty(this, \"threadedReadReceipts\", new MapWithDefault(() => new Map()));\n }\n /**\n * Provide an unthreaded receipt for this user. Overwrites any other\n * unthreaded receipt we have for this user.\n */\n setUnthreaded(userId, receipt) {\n this.unthreadedReadReceipts.set(userId, receipt);\n }\n\n /**\n * Provide a receipt for this user in this thread. Overwrites any other\n * receipt we have for this user in this thread.\n */\n setThreaded(threadId, userId, receipt) {\n this.threadedReadReceipts.getOrCreate(threadId).set(userId, receipt);\n }\n\n /**\n * @returns an iterator of pairs of [userId, AccumulatedReceipt] - all the\n * most recently-received unthreaded receipts for each user.\n */\n allUnthreaded() {\n return this.unthreadedReadReceipts.entries();\n }\n\n /**\n * @returns an iterator of pairs of [userId, AccumulatedReceipt] - all the\n * most recently-received threaded receipts for each user, in all\n * threads.\n */\n *allThreaded() {\n for (var receiptsForThread of this.threadedReadReceipts.values()) {\n for (var e of receiptsForThread.entries()) {\n yield e;\n }\n }\n }\n\n /**\n * Given a list of ephemeral events, find the receipts and store the\n * relevant ones to be returned later from buildAccumulatedReceiptEvent().\n */\n consumeEphemeralEvents(events) {\n events === null || events === void 0 || events.forEach(e => {\n if (e.type !== EventType.Receipt || !e.content) {\n // This means we'll drop unknown ephemeral events but that\n // seems okay.\n return;\n }\n\n // Handle m.receipt events. They clobber based on:\n // (user_id, receipt_type)\n // but they are keyed in the event as:\n // content:{ $event_id: { $receipt_type: { $user_id: {json} }}}\n // so store them in the former so we can accumulate receipt deltas\n // quickly and efficiently (we expect a lot of them). Fold the\n // receipt type into the key name since we only have 1 at the\n // moment (m.read) and nested JSON objects are slower and more\n // of a hassle to work with. We'll inflate this back out when\n // getJSON() is called.\n Object.keys(e.content).forEach(eventId => {\n Object.entries(e.content[eventId]).forEach(_ref => {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n if (!isSupportedReceiptType(key)) return;\n for (var userId of Object.keys(value)) {\n var data = e.content[eventId][key][userId];\n var receipt = {\n data: e.content[eventId][key][userId],\n type: key,\n eventId\n };\n\n // In a world that supports threads, read receipts normally have\n // a `thread_id` which is either the thread they belong in or\n // `MAIN_ROOM_TIMELINE`, so we normally use `setThreaded(...)`\n // here. The `MAIN_ROOM_TIMELINE` is just treated as another\n // thread.\n //\n // We still encounter read receipts that are \"unthreaded\"\n // (missing the `thread_id` property). These come from clients\n // that don't support threads, and from threaded clients that\n // are doing a \"Mark room as read\" operation. Unthreaded\n // receipts mark everything \"before\" them as read, in all\n // threads, where \"before\" means in Sync Order i.e. the order\n // the events were received from the homeserver in a sync.\n // [Note: we have some bugs where we use timestamp order instead\n // of Sync Order, because we don't correctly remember the Sync\n // Order. See #3325.]\n //\n // Calling the wrong method will cause incorrect behavior like\n // messages re-appearing as \"new\" when you already read them\n // previously.\n if (!data.thread_id) {\n this.setUnthreaded(userId, receipt);\n } else {\n this.setThreaded(data.thread_id, userId, receipt);\n }\n }\n });\n });\n });\n }\n\n /**\n * Build a receipt event that contains all relevant information for this\n * room, taking the most recently received receipt for each user in an\n * unthreaded context, and in each thread.\n */\n buildAccumulatedReceiptEvent(roomId) {\n var receiptEvent = {\n type: EventType.Receipt,\n room_id: roomId,\n content: {\n // $event_id: { \"m.read\": { $user_id: $json } }\n }\n };\n var receiptEventContent = new MapWithDefault(() => new MapWithDefault(() => new Map()));\n for (var _ref5 of this.allUnthreaded()) {\n var _ref4 = _slicedToArray(_ref5, 2);\n var userId = _ref4[0];\n var receiptData = _ref4[1];\n receiptEventContent.getOrCreate(receiptData.eventId).getOrCreate(receiptData.type).set(userId, receiptData.data);\n }\n for (var _ref8 of this.allThreaded()) {\n var _ref7 = _slicedToArray(_ref8, 2);\n var _userId = _ref7[0];\n var _receiptData = _ref7[1];\n receiptEventContent.getOrCreate(_receiptData.eventId).getOrCreate(_receiptData.type).set(_userId, _receiptData.data);\n }\n receiptEvent.content = recursiveMapToObject(receiptEventContent);\n return receiptEventContent.size > 0 ? receiptEvent : null;\n }\n}\n//# sourceMappingURL=receipt-accumulator.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2017 - 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link SyncAccumulator} for the public class.\n */\n\nimport { logger } from \"./logger.js\";\nimport { deepCopy } from \"./utils.js\";\nimport { MAX_STICKY_DURATION_MS } from \"./models/event.js\";\nimport { UNREAD_THREAD_NOTIFICATIONS } from \"./@types/sync.js\";\nimport { ReceiptAccumulator } from \"./receipt-accumulator.js\";\n\n/* eslint-disable camelcase */\n\n/** A to-device message as received from the sync. */\n\n/**\n * A (possibly decrypted) to-device message after it has been successfully processed by the sdk.\n *\n * If the message was encrypted, the `encryptionInfo` field will contain the encryption information.\n * If the message was sent in clear, this field will be null.\n *\n * The `message` field contains the message `type`, `content`, and `sender` as if the message was sent in clear.\n */\n\n/**\n * The \"users\" section of the sync update which contains extended profile updates.\n */\n\n/* eslint-enable camelcase */\n\nexport var Category = /*#__PURE__*/function (Category) {\n Category[\"Invite\"] = \"invite\";\n Category[\"Leave\"] = \"leave\";\n Category[\"Join\"] = \"join\";\n Category[\"Knock\"] = \"knock\";\n return Category;\n}({});\nfunction isTaggedEvent(event) {\n return \"_localTs\" in event && event[\"_localTs\"] !== undefined;\n}\n\n/**\n * The purpose of this class is to accumulate /sync responses such that a\n * complete \"initial\" JSON response can be returned which accurately represents\n * the sum total of the /sync responses accumulated to date. It only handles\n * room data: that is, everything under the \"rooms\" top-level key.\n *\n * This class is used when persisting room data so a complete /sync response can\n * be loaded from disk and incremental syncs can be performed on the server,\n * rather than asking the server to do an initial sync on startup.\n */\nexport class SyncAccumulator {\n constructor() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.opts = opts;\n _defineProperty(this, \"accountData\", {});\n // $event_type: Object\n _defineProperty(this, \"inviteRooms\", {});\n // $roomId: { ... sync 'invite' json data ... }\n _defineProperty(this, \"knockRooms\", {});\n // $roomId: { ... sync 'knock' json data ... }\n _defineProperty(this, \"joinRooms\", {});\n // the /sync token which corresponds to the last time rooms were\n // accumulated. We remember this so that any caller can obtain a\n // coherent /sync response and know at what point they should be\n // streaming from without losing events.\n _defineProperty(this, \"nextBatch\", null);\n this.opts.maxTimelineEntries = this.opts.maxTimelineEntries || 50;\n }\n accumulate(syncResponse) {\n var fromDatabase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n this.accumulateRooms(syncResponse, fromDatabase);\n this.accumulateAccountData(syncResponse);\n this.nextBatch = syncResponse.next_batch;\n }\n accumulateAccountData(syncResponse) {\n if (!syncResponse.account_data || !syncResponse.account_data.events) {\n return;\n }\n // Clobbers based on event type.\n syncResponse.account_data.events.forEach(e => {\n this.accountData[e.type] = e;\n });\n }\n\n /**\n * Accumulate incremental /sync room data.\n * @param syncResponse - the complete /sync JSON\n * @param fromDatabase - True if the sync response is one saved to the database\n */\n accumulateRooms(syncResponse) {\n var fromDatabase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!syncResponse.rooms) {\n return;\n }\n if (syncResponse.rooms.invite) {\n Object.keys(syncResponse.rooms.invite).forEach(roomId => {\n this.accumulateRoom(roomId, Category.Invite, syncResponse.rooms.invite[roomId], fromDatabase);\n });\n }\n if (syncResponse.rooms.join) {\n Object.keys(syncResponse.rooms.join).forEach(roomId => {\n this.accumulateRoom(roomId, Category.Join, syncResponse.rooms.join[roomId], fromDatabase);\n });\n }\n if (syncResponse.rooms.leave) {\n Object.keys(syncResponse.rooms.leave).forEach(roomId => {\n this.accumulateRoom(roomId, Category.Leave, syncResponse.rooms.leave[roomId], fromDatabase);\n });\n }\n if (syncResponse.rooms.knock) {\n Object.keys(syncResponse.rooms.knock).forEach(roomId => {\n this.accumulateRoom(roomId, Category.Knock, syncResponse.rooms.knock[roomId], fromDatabase);\n });\n }\n }\n accumulateRoom(roomId, category, data) {\n var fromDatabase = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n // Valid /sync state transitions\n // +--------+ <======+ 1: Accept an invite\n // +== | INVITE | | (5) 2: Leave a room\n // | +--------+ =====+ | 3: Join a public room previously\n // |(1) (4) | | left (handle as if new room)\n // V (2) V | 4: Reject an invite\n // +------+ ========> +--------+ 5: Invite to a room previously\n // | JOIN | (3) | LEAVE* | left (handle as if new room)\n // +------+ <======== +--------+\n //\n // * equivalent to \"no state\"\n switch (category) {\n case Category.Invite:\n // (5)\n if (this.knockRooms[roomId]) {\n // was previously knock, now invite, need to delete knock state\n delete this.knockRooms[roomId];\n }\n this.accumulateInviteState(roomId, data);\n break;\n case Category.Knock:\n this.accumulateKnockState(roomId, data);\n break;\n case Category.Join:\n if (this.knockRooms[roomId]) {\n // delete knock state on join\n delete this.knockRooms[roomId];\n } else if (this.inviteRooms[roomId]) {\n // (1)\n // was previously invite, now join. We expect /sync to give\n // the entire state and timeline on 'join', so delete previous\n // invite state\n delete this.inviteRooms[roomId];\n }\n // (3)\n this.accumulateJoinState(roomId, data, fromDatabase);\n break;\n case Category.Leave:\n if (this.knockRooms[roomId]) {\n // delete knock state on leave\n delete this.knockRooms[roomId];\n } else if (this.inviteRooms[roomId]) {\n // (4)\n delete this.inviteRooms[roomId];\n } else {\n // (2)\n delete this.joinRooms[roomId];\n }\n break;\n default:\n logger.error(\"Unknown cateogory: \", category);\n }\n }\n accumulateInviteState(roomId, data) {\n if (!data.invite_state || !data.invite_state.events) {\n // no new data\n return;\n }\n if (!this.inviteRooms[roomId]) {\n this.inviteRooms[roomId] = {\n invite_state: data.invite_state\n };\n return;\n }\n // accumulate extra keys for invite->invite transitions\n // clobber based on event type / state key\n // We expect invite_state to be small, so just loop over the events\n var currentData = this.inviteRooms[roomId];\n data.invite_state.events.forEach(e => {\n var hasAdded = false;\n for (var i = 0; i < currentData.invite_state.events.length; i++) {\n var current = currentData.invite_state.events[i];\n if (current.type === e.type && current.state_key == e.state_key) {\n currentData.invite_state.events[i] = e; // update\n hasAdded = true;\n }\n }\n if (!hasAdded) {\n currentData.invite_state.events.push(e);\n }\n });\n }\n accumulateKnockState(roomId, data) {\n if (!data.knock_state || !data.knock_state.events) {\n // no new data\n return;\n }\n if (!this.knockRooms[roomId]) {\n this.knockRooms[roomId] = {\n knock_state: data.knock_state\n };\n return;\n }\n // accumulate extra keys\n // clobber based on event type / state key\n // We expect knock_state to be small, so just loop over the events\n var currentData = this.knockRooms[roomId];\n data.knock_state.events.forEach(e => {\n var hasAdded = false;\n for (var i = 0; i < currentData.knock_state.events.length; i++) {\n var current = currentData.knock_state.events[i];\n if (current.type === e.type && current.state_key == e.state_key) {\n currentData.knock_state.events[i] = e; // update\n hasAdded = true;\n }\n }\n if (!hasAdded) {\n currentData.knock_state.events.push(e);\n }\n });\n }\n\n // Accumulate timeline and state events in a room.\n accumulateJoinState(roomId, data) {\n var _ref, _data, _data$ephemeral, _data$state, _data$orgMatrixMsc, _data$timeline, _data$msc4354_sticky;\n var fromDatabase = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var now = Date.now();\n // We expect this function to be called a lot (every /sync) so we want\n // this to be fast. /sync stores events in an array but we often want\n // to clobber based on type/state_key. Rather than convert arrays to\n // maps all the time, just keep private maps which contain\n // the actual current accumulated sync state, and array-ify it when\n // getJSON() is called.\n\n // State resolution:\n // The 'state' key is the delta from the previous sync (or start of time\n // if no token was supplied), to the START of the timeline. To obtain\n // the current state, we need to \"roll forward\" state by reading the\n // timeline. We want to store the current state so we can drop events\n // out the end of the timeline based on opts.maxTimelineEntries.\n //\n // 'state' 'timeline' current state\n // |-------x<======================>x\n // T I M E\n //\n // When getJSON() is called, we 'roll back' the current state by the\n // number of entries in the timeline to work out what 'state' should be.\n\n // Back-pagination:\n // On an initial /sync, the server provides a back-pagination token for\n // the start of the timeline. When /sync deltas come down, they also\n // include back-pagination tokens for the start of the timeline. This\n // means not all events in the timeline have back-pagination tokens, as\n // it is only the ones at the START of the timeline which have them.\n // In order for us to have a valid timeline (and back-pagination token\n // to match), we need to make sure that when we remove old timeline\n // events, that we roll forward to an event which has a back-pagination\n // token. This means we can't keep a strict sliding-window based on\n // opts.maxTimelineEntries, and we may have a few less. We should never\n // have more though, provided that the /sync limit is less than or equal\n // to opts.maxTimelineEntries.\n\n if (!this.joinRooms[roomId]) {\n // Create truly empty objects so event types of 'hasOwnProperty' and co\n // don't cause this code to break.\n this.joinRooms[roomId] = {\n _currentState: Object.create(null),\n _timeline: [],\n _accountData: Object.create(null),\n _unreadNotifications: {},\n _unreadThreadNotifications: {},\n _summary: {},\n _receipts: new ReceiptAccumulator(),\n _stickyEvents: []\n };\n }\n var currentData = this.joinRooms[roomId];\n if (data.account_data && data.account_data.events) {\n // clobber based on type\n data.account_data.events.forEach(e => {\n currentData._accountData[e.type] = e;\n });\n }\n\n // these probably clobber, spec is unclear.\n if (data.unread_notifications) {\n currentData._unreadNotifications = data.unread_notifications;\n }\n currentData._unreadThreadNotifications = (_ref = (_data = data[UNREAD_THREAD_NOTIFICATIONS.stable]) !== null && _data !== void 0 ? _data : data[UNREAD_THREAD_NOTIFICATIONS.unstable]) !== null && _ref !== void 0 ? _ref : undefined;\n if (data.summary) {\n var _sum$HEROES_KEY, _sum$JOINED_COUNT_KEY, _sum$INVITED_COUNT_KE;\n var HEROES_KEY = \"m.heroes\";\n var INVITED_COUNT_KEY = \"m.invited_member_count\";\n var JOINED_COUNT_KEY = \"m.joined_member_count\";\n var acc = currentData._summary;\n var sum = data.summary;\n acc[HEROES_KEY] = (_sum$HEROES_KEY = sum[HEROES_KEY]) !== null && _sum$HEROES_KEY !== void 0 ? _sum$HEROES_KEY : acc[HEROES_KEY];\n acc[JOINED_COUNT_KEY] = (_sum$JOINED_COUNT_KEY = sum[JOINED_COUNT_KEY]) !== null && _sum$JOINED_COUNT_KEY !== void 0 ? _sum$JOINED_COUNT_KEY : acc[JOINED_COUNT_KEY];\n acc[INVITED_COUNT_KEY] = (_sum$INVITED_COUNT_KE = sum[INVITED_COUNT_KEY]) !== null && _sum$INVITED_COUNT_KE !== void 0 ? _sum$INVITED_COUNT_KE : acc[INVITED_COUNT_KEY];\n }\n\n // We purposefully do not persist m.typing events.\n // Technically you could refresh a browser before the timer on a\n // typing event is up, so it'll look like you aren't typing when\n // you really still are. However, the alternative is worse. If\n // we do persist typing events, it will look like people are\n // typing forever until someone really does start typing (which\n // will prompt Synapse to send down an actual m.typing event to\n // clobber the one we persisted).\n\n // Persist the receipts\n currentData._receipts.consumeEphemeralEvents((_data$ephemeral = data.ephemeral) === null || _data$ephemeral === void 0 ? void 0 : _data$ephemeral.events);\n\n // if we got a limited sync, we need to remove all timeline entries or else\n // we will have gaps in the timeline.\n if (data.timeline && data.timeline.limited) {\n currentData._timeline = [];\n }\n\n // Work out the current state. The deltas need to be applied in the order:\n // - existing state which didn't come down /sync.\n // - State events under the 'state' key.\n // - State events under the 'state_after' key OR state events in the 'timeline' if 'state_after' is not present.\n (_data$state = data.state) === null || _data$state === void 0 || (_data$state = _data$state.events) === null || _data$state === void 0 || _data$state.forEach(e => {\n setState(currentData._currentState, e);\n });\n (_data$orgMatrixMsc = data[\"org.matrix.msc4222.state_after\"]) === null || _data$orgMatrixMsc === void 0 || (_data$orgMatrixMsc = _data$orgMatrixMsc.events) === null || _data$orgMatrixMsc === void 0 || _data$orgMatrixMsc.forEach(e => {\n setState(currentData._currentState, e);\n });\n (_data$timeline = data.timeline) === null || _data$timeline === void 0 || (_data$timeline = _data$timeline.events) === null || _data$timeline === void 0 || _data$timeline.forEach((e, index) => {\n var _data$timeline$prev_b;\n if (!data[\"org.matrix.msc4222.state_after\"]) {\n // this nops if 'e' isn't a state event\n setState(currentData._currentState, e);\n }\n // append the event to the timeline. The back-pagination token\n // corresponds to the first event in the timeline\n var transformedEvent;\n if (!fromDatabase) {\n var _e$unsigned;\n transformedEvent = Object.assign({}, e);\n if (transformedEvent.unsigned !== undefined) {\n transformedEvent.unsigned = Object.assign({}, transformedEvent.unsigned);\n }\n var age = (_e$unsigned = e.unsigned) === null || _e$unsigned === void 0 ? void 0 : _e$unsigned.age;\n if (age !== undefined) transformedEvent._localTs = Date.now() - age;\n } else {\n transformedEvent = e;\n }\n currentData._timeline.push({\n event: transformedEvent,\n token: index === 0 ? (_data$timeline$prev_b = data.timeline.prev_batch) !== null && _data$timeline$prev_b !== void 0 ? _data$timeline$prev_b : null : null\n });\n });\n\n // Prune out any events in our stores that have since expired, do this before we\n // insert new events.\n currentData._stickyEvents = currentData._stickyEvents.filter(_ref2 => {\n var expiresTs = _ref2.expiresTs;\n return expiresTs > now;\n });\n\n // We want this to be fast, so don't worry about duplicate events here. The RoomStickyEventsStore will\n // process these events into the correct mapped order.\n if ((_data$msc4354_sticky = data.msc4354_sticky) !== null && _data$msc4354_sticky !== void 0 && _data$msc4354_sticky.events) {\n currentData._stickyEvents = currentData._stickyEvents.concat(data.msc4354_sticky.events.map(event => {\n // If `duration_ms` exceeds the spec limit of a hour, we cap it.\n var cappedDuration = Math.min(event.msc4354_sticky.duration_ms, MAX_STICKY_DURATION_MS);\n // If `origin_server_ts` claims to have been from the future, we still bound it to now.\n var createdTs = Math.min(event.origin_server_ts, now);\n return {\n event,\n expiresTs: cappedDuration + createdTs\n };\n }));\n }\n\n // attempt to prune the timeline by jumping between events which have\n // pagination tokens.\n if (currentData._timeline.length > this.opts.maxTimelineEntries) {\n var startIndex = currentData._timeline.length - this.opts.maxTimelineEntries;\n for (var i = startIndex; i < currentData._timeline.length; i++) {\n if (currentData._timeline[i].token) {\n // keep all events after this, including this one\n currentData._timeline = currentData._timeline.slice(i, currentData._timeline.length);\n break;\n }\n }\n }\n }\n\n /**\n * Return everything under the 'rooms' key from a /sync response which\n * represents all room data that should be stored. This should be paired\n * with the sync token which represents the most recent /sync response\n * provided to accumulate().\n * @param forDatabase - True to generate a sync to be saved to storage\n * @returns An object with a \"nextBatch\", \"roomsData\" and \"accountData\"\n * keys.\n * The \"nextBatch\" key is a string which represents at what point in the\n * /sync stream the accumulator reached. This token should be used when\n * restarting a /sync stream at startup. Failure to do so can lead to missing\n * events. The \"roomsData\" key is an Object which represents the entire\n * /sync response from the 'rooms' key onwards. The \"accountData\" key is\n * a list of raw events which represent global account data.\n */\n getJSON() {\n var forDatabase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var data = {\n join: {},\n invite: {},\n knock: {},\n // always empty. This is set by /sync when a room was previously\n // in 'invite' or 'join'. On fresh startup, the client won't know\n // about any previous room being in 'invite' or 'join' so we can\n // just omit mentioning it at all, even if it has previously come\n // down /sync.\n // The notable exception is when a client is kicked or banned:\n // we may want to hold onto that room so the client can clearly see\n // why their room has disappeared. We don't persist it though because\n // it is unclear *when* we can safely remove the room from the DB.\n // Instead, we assume that if you're loading from the DB, you've\n // refreshed the page, which means you've seen the kick/ban already.\n leave: {}\n };\n Object.keys(this.inviteRooms).forEach(roomId => {\n data.invite[roomId] = this.inviteRooms[roomId];\n });\n Object.keys(this.knockRooms).forEach(roomId => {\n data.knock[roomId] = this.knockRooms[roomId];\n });\n Object.keys(this.joinRooms).forEach(roomId => {\n var _roomData$_stickyEven;\n var roomData = this.joinRooms[roomId];\n var roomJson = {\n \"ephemeral\": {\n events: []\n },\n \"account_data\": {\n events: []\n },\n \"state\": {\n events: []\n },\n \"org.matrix.msc4222.state_after\": {\n events: []\n },\n \"timeline\": {\n events: [],\n prev_batch: null\n },\n \"unread_notifications\": roomData._unreadNotifications,\n \"unread_thread_notifications\": roomData._unreadThreadNotifications,\n \"summary\": roomData._summary,\n \"msc4354_sticky\": (_roomData$_stickyEven = roomData._stickyEvents) !== null && _roomData$_stickyEven !== void 0 && _roomData$_stickyEven.length ? {\n events: roomData._stickyEvents.map(e => e.event)\n } : undefined\n };\n // Add account data\n Object.keys(roomData._accountData).forEach(evType => {\n roomJson.account_data.events.push(roomData._accountData[evType]);\n });\n var receiptEvent = roomData._receipts.buildAccumulatedReceiptEvent(roomId);\n\n // add only if we have some receipt data\n if (receiptEvent) {\n roomJson.ephemeral.events.push(receiptEvent);\n }\n\n // Add timeline data\n roomData._timeline.forEach(msgData => {\n if (!roomJson.timeline.prev_batch) {\n // the first event we add to the timeline MUST match up to\n // the prev_batch token.\n if (!msgData.token) {\n return; // this shouldn't happen as we prune constantly.\n }\n roomJson.timeline.prev_batch = msgData.token;\n }\n var transformedEvent;\n if (!forDatabase && isTaggedEvent(msgData.event)) {\n // This means we have to copy each event, so we can fix it up to\n // set a correct 'age' parameter whilst keeping the local timestamp\n // on our stored event. If this turns out to be a bottleneck, it could\n // be optimised either by doing this in the main process after the data\n // has been structured-cloned to go between the worker & main process,\n // or special-casing data from saved syncs to read the local timestamp\n // directly rather than turning it into age to then immediately be\n // transformed back again into a local timestamp.\n transformedEvent = Object.assign({}, msgData.event);\n if (transformedEvent.unsigned !== undefined) {\n transformedEvent.unsigned = Object.assign({}, transformedEvent.unsigned);\n }\n delete transformedEvent._localTs;\n transformedEvent.unsigned = transformedEvent.unsigned || {};\n transformedEvent.unsigned.age = Date.now() - msgData.event._localTs;\n } else {\n transformedEvent = msgData.event;\n }\n roomJson.timeline.events.push(transformedEvent);\n });\n\n // Add state data: roll back current state to the start of timeline,\n // by \"reverse clobbering\" from the end of the timeline to the start.\n // Convert maps back into arrays.\n var rollBackState = Object.create(null);\n for (var i = roomJson.timeline.events.length - 1; i >= 0; i--) {\n var timelineEvent = roomJson.timeline.events[i];\n if (timelineEvent.state_key === null || timelineEvent.state_key === undefined) {\n continue; // not a state event\n }\n // since we're going back in time, we need to use the previous\n // state value else we'll break causality. We don't have the\n // complete previous state event, so we need to create one.\n var prevStateEvent = deepCopy(timelineEvent);\n if (prevStateEvent.unsigned) {\n if (prevStateEvent.unsigned.prev_content) {\n prevStateEvent.content = prevStateEvent.unsigned.prev_content;\n }\n if (prevStateEvent.unsigned.prev_sender) {\n prevStateEvent.sender = prevStateEvent.unsigned.prev_sender;\n }\n }\n setState(rollBackState, prevStateEvent);\n }\n Object.keys(roomData._currentState).forEach(evType => {\n Object.keys(roomData._currentState[evType]).forEach(stateKey => {\n var ev = roomData._currentState[evType][stateKey];\n // Push to both fields to provide downgrade compatibility in the sync accumulator db\n // the code will prefer `state_after` if it is present\n roomJson[\"org.matrix.msc4222.state_after\"].events.push(ev);\n // Roll the state back to the value at the start of the timeline if it was changed\n if (rollBackState[evType] && rollBackState[evType][stateKey]) {\n ev = rollBackState[evType][stateKey];\n }\n roomJson.state.events.push(ev);\n });\n });\n data.join[roomId] = roomJson;\n });\n\n // Add account data\n var accData = [];\n Object.keys(this.accountData).forEach(evType => {\n accData.push(this.accountData[evType]);\n });\n return {\n nextBatch: this.nextBatch,\n roomsData: data,\n accountData: accData\n };\n }\n getNextBatchToken() {\n return this.nextBatch;\n }\n removeEventsFromRoom(roomId, eventIds) {\n this.joinRooms[roomId]._timeline = this.joinRooms[roomId]._timeline.filter(ev => !eventIds.includes(ev.event.event_id));\n this.joinRooms[roomId]._stickyEvents = this.joinRooms[roomId]._stickyEvents.filter(ev => !eventIds.includes(ev.event.event_id));\n }\n}\nfunction setState(eventMap, event) {\n if (event.state_key === null || event.state_key === undefined || !event.type) {\n return;\n }\n if (!eventMap[event.type]) {\n eventMap[event.type] = Object.create(null);\n }\n eventMap[event.type][event.state_key] = event;\n}\n//# sourceMappingURL=sync-accumulator.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2023 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/** State of the verification of the device. */\nexport var DeviceVerification = /*#__PURE__*/function (DeviceVerification) {\n DeviceVerification[DeviceVerification[\"Blocked\"] = -1] = \"Blocked\";\n DeviceVerification[DeviceVerification[\"Unverified\"] = 0] = \"Unverified\";\n DeviceVerification[DeviceVerification[\"Verified\"] = 1] = \"Verified\";\n return DeviceVerification;\n}({});\n\n/** A map from user ID to device ID to Device */\n\n/**\n * Information on a user's device, as returned by {@link crypto-api!CryptoApi.getUserDeviceInfo}.\n */\nexport class Device {\n constructor(opts) {\n /** id of the device */\n _defineProperty(this, \"deviceId\", void 0);\n /** id of the user that owns the device */\n _defineProperty(this, \"userId\", void 0);\n /** list of algorithms supported by this device */\n _defineProperty(this, \"algorithms\", void 0);\n /** a map from `<key type>:<id> -> <base64-encoded key>` */\n _defineProperty(this, \"keys\", void 0);\n /** whether the device has been verified/blocked by the user */\n _defineProperty(this, \"verified\", void 0);\n /** a map `<userId, map<algorithm:device_id, signature>>` */\n _defineProperty(this, \"signatures\", void 0);\n /** display name of the device */\n _defineProperty(this, \"displayName\", void 0);\n /** whether the device is a dehydrated device */\n _defineProperty(this, \"dehydrated\", false);\n this.deviceId = opts.deviceId;\n this.userId = opts.userId;\n this.algorithms = opts.algorithms;\n this.keys = opts.keys;\n this.verified = opts.verified || DeviceVerification.Unverified;\n this.signatures = opts.signatures || new Map();\n this.displayName = opts.displayName;\n this.dehydrated = !!opts.dehydrated;\n }\n\n /**\n * Get the fingerprint for this device (ie, the Ed25519 key)\n *\n * @returns base64-encoded fingerprint of this device\n */\n getFingerprint() {\n return this.keys.get(\"ed25519:\".concat(this.deviceId));\n }\n\n /**\n * Get the identity key for this device (ie, the Curve25519 key)\n *\n * @returns base64-encoded identity key of this device\n */\n getIdentityKey() {\n return this.keys.get(\"curve25519:\".concat(this.deviceId));\n }\n}\n//# sourceMappingURL=device.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2016 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { EventTimeline } from \"./models/event-timeline.js\";\nimport { logger } from \"./logger.js\";\nimport { RoomEvent } from \"./models/room.js\";\n\n/**\n * @internal\n */\nvar DEBUG = false;\n\n/**\n * @internal\n */\n/* istanbul ignore next */\nvar debuglog = DEBUG ? logger.log.bind(logger) : function () {};\n\n/**\n * the number of times we ask the server for more events before giving up\n * this is currently higher than it needs to be to workaround lack of a filter\n * for excluding thread responses from main timeline pagination which can cause\n * giving up incorrectly - https://github.com/matrix-org/matrix-spec-proposals/pull/3874\n *\n * @internal\n */\nvar DEFAULT_PAGINATE_LOOP_LIMIT = 10;\nexport class TimelineWindow {\n /**\n * Construct a TimelineWindow.\n *\n * <p>This abstracts the separate timelines in a Matrix {@link Room} into a single iterable thing.\n * It keeps track of the start and endpoints of the window, which can be advanced with the help\n * of pagination requests.\n *\n * <p>Before the window is useful, it must be initialised by calling {@link TimelineWindow#load}.\n *\n * <p>Note that the window will not automatically extend itself when new events\n * are received from /sync; you should arrange to call {@link TimelineWindow#paginate}\n * on {@link RoomEvent.Timeline} events.\n *\n * <p>Note that constructing an instance of this class for a room adds a\n * listener for RoomEvent.Timeline events which is never removed. In theory\n * this should not cause a leak since the EventEmitter uses weak mappings.\n *\n * @param client - MatrixClient to be used for context/pagination\n * requests.\n *\n * @param timelineSet - The timelineSet to track\n *\n * @param opts - Configuration options for this window\n */\n constructor(client, timelineSet) {\n var _timelineSet$room;\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.client = client;\n this.timelineSet = timelineSet;\n _defineProperty(this, \"windowLimit\", void 0);\n // these will be TimelineIndex objects; they delineate the 'start' and\n // 'end' of the window.\n //\n // start.index is inclusive; end.index is exclusive.\n _defineProperty(this, \"start\", void 0);\n _defineProperty(this, \"end\", void 0);\n _defineProperty(this, \"eventCount\", 0);\n this.windowLimit = opts.windowLimit || 1000;\n (_timelineSet$room = timelineSet.room) === null || _timelineSet$room === void 0 || _timelineSet$room.on(RoomEvent.Timeline, this.onTimelineEvent.bind(this));\n }\n\n /**\n * Initialise the window to point at a given event, or the live timeline\n *\n * @param initialEventId - If given, the window will contain the\n * given event\n * @param initialWindowSize - Size of the initial window\n */\n load(initialEventId) {\n var initialWindowSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n // given an EventTimeline, find the event we were looking for, and initialise our\n // fields so that the event in question is in the middle of the window.\n var initFields = timeline => {\n if (!timeline) {\n throw new Error(\"No timeline given to initFields\");\n }\n var eventIndex;\n var events = timeline.getEvents();\n if (!initialEventId) {\n // we were looking for the live timeline: initialise to the end\n eventIndex = events.length;\n } else {\n eventIndex = events.findIndex(e => e.getId() === initialEventId);\n if (eventIndex < 0) {\n throw new Error(\"getEventTimeline result didn't include requested event\");\n }\n }\n var endIndex = Math.min(events.length, eventIndex + Math.ceil(initialWindowSize / 2));\n var startIndex = Math.max(0, endIndex - initialWindowSize);\n this.start = new TimelineIndex(timeline, startIndex - timeline.getBaseIndex());\n this.end = new TimelineIndex(timeline, endIndex - timeline.getBaseIndex());\n this.eventCount = endIndex - startIndex;\n };\n\n // We avoid delaying the resolution of the promise by a reactor tick if we already have the data we need,\n // which is important to keep room-switching feeling snappy.\n if (this.timelineSet.getTimelineForEvent(initialEventId)) {\n initFields(this.timelineSet.getTimelineForEvent(initialEventId));\n return Promise.resolve();\n } else if (initialEventId) {\n return this.client.getEventTimeline(this.timelineSet, initialEventId).then(initFields);\n } else {\n initFields(this.timelineSet.getLiveTimeline());\n return Promise.resolve();\n }\n }\n\n /**\n * Get the TimelineIndex of the window in the given direction.\n *\n * @param direction - EventTimeline.BACKWARDS to get the TimelineIndex\n * at the start of the window; EventTimeline.FORWARDS to get the TimelineIndex at\n * the end.\n *\n * @returns The requested timeline index if one exists, null\n * otherwise.\n */\n getTimelineIndex(direction) {\n if (direction == EventTimeline.BACKWARDS) {\n var _this$start;\n return (_this$start = this.start) !== null && _this$start !== void 0 ? _this$start : null;\n } else if (direction == EventTimeline.FORWARDS) {\n var _this$end;\n return (_this$end = this.end) !== null && _this$end !== void 0 ? _this$end : null;\n } else {\n throw new Error(\"Invalid direction '\" + direction + \"'\");\n }\n }\n\n /**\n * Try to extend the window using events that are already in the underlying\n * TimelineIndex.\n *\n * @param direction - EventTimeline.BACKWARDS to try extending it\n * backwards; EventTimeline.FORWARDS to try extending it forwards.\n * @param size - number of events to try to extend by.\n *\n * @returns true if the window was extended, false otherwise.\n */\n extend(direction, size) {\n var tl = this.getTimelineIndex(direction);\n if (!tl) {\n debuglog(\"TimelineWindow: no timeline yet\");\n return false;\n }\n var count = direction == EventTimeline.BACKWARDS ? tl.retreat(size) : tl.advance(size);\n if (count) {\n this.eventCount += count;\n debuglog(\"TimelineWindow: increased cap by \" + count + \" (now \" + this.eventCount + \")\");\n // remove some events from the other end, if necessary\n var excess = this.eventCount - this.windowLimit;\n if (excess > 0) {\n this.unpaginate(excess, direction != EventTimeline.BACKWARDS);\n }\n return true;\n }\n return false;\n }\n onTimelineEvent(_event, _room, _atStart, removed) {\n if (removed) {\n this.onEventRemoved();\n }\n }\n\n /**\n * If an event was removed, meaning this window is longer than the timeline,\n * shorten the window.\n */\n onEventRemoved() {\n var events = this.getEvents();\n if (events.length > 0 && events[events.length - 1] === undefined && this.end) {\n this.end.index--;\n }\n }\n\n /**\n * Check if this window can be extended\n *\n * <p>This returns true if we either have more events, or if we have a\n * pagination token which means we can paginate in that direction. It does not\n * necessarily mean that there are more events available in that direction at\n * this time.\n *\n * @param direction - EventTimeline.BACKWARDS to check if we can\n * paginate backwards; EventTimeline.FORWARDS to check if we can go forwards\n *\n * @returns true if we can paginate in the given direction\n */\n canPaginate(direction) {\n var tl = this.getTimelineIndex(direction);\n if (!tl) {\n debuglog(\"TimelineWindow: no timeline yet\");\n return false;\n }\n if (direction == EventTimeline.BACKWARDS) {\n if (tl.index > tl.minIndex()) {\n return true;\n }\n } else {\n if (tl.index < tl.maxIndex()) {\n return true;\n }\n }\n var hasNeighbouringTimeline = tl.timeline.getNeighbouringTimeline(direction);\n var paginationToken = tl.timeline.getPaginationToken(direction);\n return Boolean(hasNeighbouringTimeline) || Boolean(paginationToken);\n }\n\n /**\n * Attempt to extend the window\n *\n * @param direction - EventTimeline.BACKWARDS to extend the window\n * backwards (towards older events); EventTimeline.FORWARDS to go forwards.\n *\n * @param size - number of events to try to extend by. If fewer than this\n * number are immediately available, then we return immediately rather than\n * making an API call.\n *\n * @param makeRequest - whether we should make API calls to\n * fetch further events if we don't have any at all. (This has no effect if\n * the room already knows about additional events in the relevant direction,\n * even if there are fewer than 'size' of them, as we will just return those\n * we already know about.)\n *\n * @param requestLimit - limit for the number of API requests we\n * should make.\n *\n * @returns Promise which resolves to a boolean which is true if more events\n * were successfully retrieved.\n */\n paginate(direction, size) {\n var _arguments = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n var makeRequest = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : true;\n var requestLimit = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : DEFAULT_PAGINATE_LOOP_LIMIT;\n // Either wind back the message cap (if there are enough events in the\n // timeline to do so), or fire off a pagination request.\n var tl = _this.getTimelineIndex(direction);\n if (!tl) {\n debuglog(\"TimelineWindow: no timeline yet\");\n return false;\n }\n if (tl.pendingPaginate) {\n return tl.pendingPaginate;\n }\n\n // try moving the cap\n if (_this.extend(direction, size)) {\n return true;\n }\n if (!makeRequest || requestLimit === 0) {\n // todo: should we return something different to indicate that there\n // might be more events out there, but we haven't found them yet?\n return false;\n }\n\n // try making a pagination request\n var token = tl.timeline.getPaginationToken(direction);\n if (!token) {\n debuglog(\"TimelineWindow: no token\");\n return false;\n }\n debuglog(\"TimelineWindow: starting request\");\n var prom = _this.client.paginateEventTimeline(tl.timeline, {\n backwards: direction == EventTimeline.BACKWARDS,\n limit: size\n }).finally(function () {\n tl.pendingPaginate = undefined;\n }).then(r => {\n debuglog(\"TimelineWindow: request completed with result \" + r);\n if (!r) {\n return _this.paginate(direction, size, false, 0);\n }\n\n // recurse to advance the index into the results.\n //\n // If we don't get any new events, we want to make sure we keep asking\n // the server for events for as long as we have a valid pagination\n // token. In particular, we want to know if we've actually hit the\n // start of the timeline, or if we just happened to know about all of\n // the events thanks to https://matrix.org/jira/browse/SYN-645.\n //\n // On the other hand, we necessarily want to wait forever for the\n // server to make its mind up about whether there are other events,\n // because it gives a bad user experience\n // (https://github.com/vector-im/vector-web/issues/1204).\n return _this.paginate(direction, size, true, requestLimit - 1);\n });\n tl.pendingPaginate = prom;\n return prom;\n })();\n }\n\n /**\n * Remove `delta` events from the start or end of the timeline.\n *\n * @param delta - number of events to remove from the timeline\n * @param startOfTimeline - if events should be removed from the start\n * of the timeline.\n */\n unpaginate(delta, startOfTimeline) {\n var tl = startOfTimeline ? this.start : this.end;\n if (!tl) {\n throw new Error(\"Attempting to unpaginate startOfTimeline=\".concat(startOfTimeline, \" but don't have this direction\"));\n }\n\n // sanity-check the delta\n if (delta > this.eventCount || delta < 0) {\n throw new Error(\"Attemting to unpaginate \".concat(delta, \" events, but only have \").concat(this.eventCount, \" in the timeline\"));\n }\n while (delta > 0) {\n var count = startOfTimeline ? tl.advance(delta) : tl.retreat(delta);\n if (count <= 0) {\n // sadness. This shouldn't be possible.\n throw new Error(\"Unable to unpaginate any further, but still have \" + this.eventCount + \" events\");\n }\n delta -= count;\n this.eventCount -= count;\n debuglog(\"TimelineWindow.unpaginate: dropped \" + count + \" (now \" + this.eventCount + \")\");\n }\n }\n\n /**\n * Get a list of the events currently in the window\n *\n * @returns the events in the window\n */\n getEvents() {\n if (!this.start) {\n // not yet loaded\n return [];\n }\n var result = [];\n\n // iterate through each timeline between this.start and this.end\n // (inclusive).\n var timeline = this.start.timeline;\n // eslint-disable-next-line no-constant-condition\n while (timeline) {\n var _this$end2, _this$end3;\n var events = timeline.getEvents();\n\n // For the first timeline in the chain, we want to start at\n // this.start.index. For the last timeline in the chain, we want to\n // stop before this.end.index. Otherwise, we want to copy all of the\n // events in the timeline.\n //\n // (Note that both this.start.index and this.end.index are relative\n // to their respective timelines' BaseIndex).\n //\n var startIndex = 0;\n var endIndex = events.length;\n if (timeline === this.start.timeline) {\n startIndex = this.start.index + timeline.getBaseIndex();\n }\n if (timeline === ((_this$end2 = this.end) === null || _this$end2 === void 0 ? void 0 : _this$end2.timeline)) {\n endIndex = this.end.index + timeline.getBaseIndex();\n }\n for (var i = startIndex; i < endIndex; i++) {\n result.push(events[i]);\n }\n\n // if we're not done, iterate to the next timeline.\n if (timeline === ((_this$end3 = this.end) === null || _this$end3 === void 0 ? void 0 : _this$end3.timeline)) {\n break;\n } else {\n timeline = timeline.getNeighbouringTimeline(EventTimeline.FORWARDS);\n }\n }\n return result;\n }\n}\n\n/**\n * A thing which contains a timeline reference, and an index into it.\n * @internal\n */\nexport class TimelineIndex {\n // index: the indexes are relative to BaseIndex, so could well be negative.\n constructor(timeline, index) {\n this.timeline = timeline;\n this.index = index;\n _defineProperty(this, \"pendingPaginate\", void 0);\n }\n\n /**\n * @returns the minimum possible value for the index in the current\n * timeline\n */\n minIndex() {\n return this.timeline.getBaseIndex() * -1;\n }\n\n /**\n * @returns the maximum possible value for the index in the current\n * timeline (exclusive - ie, it actually returns one more than the index\n * of the last element).\n */\n maxIndex() {\n return this.timeline.getEvents().length - this.timeline.getBaseIndex();\n }\n\n /**\n * Try move the index forward, or into the neighbouring timeline\n *\n * @param delta - number of events to advance by\n * @returns number of events successfully advanced by\n */\n advance(delta) {\n if (!delta) {\n return 0;\n }\n\n // first try moving the index in the current timeline. See if there is room\n // to do so.\n var cappedDelta;\n if (delta < 0) {\n // we want to wind the index backwards.\n //\n // (this.minIndex() - this.index) is a negative number whose magnitude\n // is the amount of room we have to wind back the index in the current\n // timeline. We cap delta to this quantity.\n cappedDelta = Math.max(delta, this.minIndex() - this.index);\n if (cappedDelta < 0) {\n this.index += cappedDelta;\n return cappedDelta;\n }\n } else {\n // we want to wind the index forwards.\n //\n // (this.maxIndex() - this.index) is a (positive) number whose magnitude\n // is the amount of room we have to wind forward the index in the current\n // timeline. We cap delta to this quantity.\n cappedDelta = Math.min(delta, this.maxIndex() - this.index);\n if (cappedDelta > 0) {\n this.index += cappedDelta;\n return cappedDelta;\n }\n }\n\n // the index is already at the start/end of the current timeline.\n //\n // next see if there is a neighbouring timeline to switch to.\n var neighbour = this.timeline.getNeighbouringTimeline(delta < 0 ? EventTimeline.BACKWARDS : EventTimeline.FORWARDS);\n if (neighbour) {\n this.timeline = neighbour;\n if (delta < 0) {\n this.index = this.maxIndex();\n } else {\n this.index = this.minIndex();\n }\n debuglog(\"paginate: switched to new neighbour\");\n\n // recurse, using the next timeline\n return this.advance(delta);\n }\n return 0;\n }\n\n /**\n * Try move the index backwards, or into the neighbouring timeline\n *\n * @param delta - number of events to retreat by\n * @returns number of events successfully retreated by\n */\n retreat(delta) {\n return this.advance(delta * -1) * -1;\n }\n}\n//# sourceMappingURL=timeline-window.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2016 OpenMarket Ltd\nCopyright 2017 Vector Creations Ltd\nCopyright 2019 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"./logger.js\";\nimport { MatrixError } from \"./http-api/index.js\";\nvar EMAIL_STAGE_TYPE = \"m.login.email.identity\";\nvar MSISDN_STAGE_TYPE = \"m.login.msisdn\";\n\n/**\n * Data returned in the body of a 401 response from a UIA endpoint.\n *\n * @see https://spec.matrix.org/v1.6/client-server-api/#user-interactive-api-in-the-rest-api\n */\n\nexport var AuthType = /*#__PURE__*/function (AuthType) {\n AuthType[\"Password\"] = \"m.login.password\";\n AuthType[\"Recaptcha\"] = \"m.login.recaptcha\";\n AuthType[\"Terms\"] = \"m.login.terms\";\n AuthType[\"Email\"] = \"m.login.email.identity\";\n AuthType[\"Msisdn\"] = \"m.login.msisdn\";\n AuthType[\"Sso\"] = \"m.login.sso\";\n AuthType[\"SsoUnstable\"] = \"org.matrix.login.sso\";\n AuthType[\"Dummy\"] = \"m.login.dummy\";\n AuthType[\"RegistrationToken\"] = \"m.login.registration_token\";\n // For backwards compatability with servers that have not yet updated to\n // use the stable \"m.login.registration_token\" type.\n // The authentication flow is the same in both cases.\n AuthType[\"UnstableRegistrationToken\"] = \"org.matrix.msc3231.login.registration_token\";\n /**\n * m.oauth stage introduced by MSC4312:\n * https://spec.matrix.org/v1.17/client-server-api/#oauth-authentication\n */\n AuthType[\"OAuth\"] = \"m.oauth\";\n return AuthType;\n}({});\n\n/**\n * https://spec.matrix.org/v1.7/client-server-api/#password-based\n */\n\n/**\n * https://spec.matrix.org/v1.7/client-server-api/#google-recaptcha\n */\n\n/**\n * https://spec.matrix.org/v1.7/client-server-api/#email-based-identity--homeserver\n */\n\n/**\n * The parameters which are submitted as the `auth` dict in a UIA request\n *\n * @see https://spec.matrix.org/v1.6/client-server-api/#authentication-types\n */\n\nexport class NoAuthFlowFoundError extends Error {\n constructor(m,\n // eslint-disable-next-line @typescript-eslint/naming-convention, camelcase\n required_stages, flows) {\n super(m);\n this.required_stages = required_stages;\n this.flows = flows;\n _defineProperty(this, \"name\", \"NoAuthFlowFoundError\");\n }\n}\n\n/**\n * The type of an application callback to perform the user-interactive bit of UIA.\n *\n * It is called with a single parameter, `makeRequest`, which is a function which takes the UIA parameters and\n * makes the HTTP request. The `authData` parameter in `makeRequest` can be set to null to omit the `auth` field\n * from the UIA request.\n *\n * The generic parameter `T` is the type of the response of the endpoint, once it is eventually successful.\n */\n\n/**\n * Abstracts the logic used to drive the interactive auth process.\n *\n * <p>Components implementing an interactive auth flow should instantiate one of\n * these, passing in the necessary callbacks to the constructor. They should\n * then call attemptAuth, which will return a promise which will resolve or\n * reject when the interactive-auth process completes.\n *\n * <p>Meanwhile, calls will be made to the startAuthStage and doRequest\n * callbacks, and information gathered from the user can be submitted with\n * submitAuthDict.\n *\n * @param opts - options object\n * @typeParam T - the return type of the request when it is successful\n */\nexport class InteractiveAuth {\n constructor(opts) {\n var _this = this;\n _defineProperty(this, \"matrixClient\", void 0);\n _defineProperty(this, \"inputs\", void 0);\n _defineProperty(this, \"clientSecret\", void 0);\n _defineProperty(this, \"requestCallback\", void 0);\n _defineProperty(this, \"busyChangedCallback\", void 0);\n _defineProperty(this, \"stateUpdatedCallback\", void 0);\n _defineProperty(this, \"requestEmailTokenCallback\", void 0);\n _defineProperty(this, \"supportedStages\", void 0);\n // The current latest data or error received from the server during the user interactive auth flow.\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"emailSid\", void 0);\n _defineProperty(this, \"requestingEmailToken\", false);\n _defineProperty(this, \"attemptAuthDeferred\", null);\n _defineProperty(this, \"chosenFlow\", null);\n _defineProperty(this, \"currentStage\", null);\n _defineProperty(this, \"emailAttempt\", 1);\n // if we are currently trying to submit an auth dict (which includes polling)\n // the promise the will resolve/reject when it completes\n _defineProperty(this, \"submitPromise\", null);\n /**\n * Requests a new email token and sets the email sid for the validation session\n */\n _defineProperty(this, \"requestEmailToken\", /*#__PURE__*/_asyncToGenerator(function* () {\n if (!_this.requestingEmailToken) {\n logger.trace(\"Requesting email token. Attempt: \" + _this.emailAttempt);\n // If we've picked a flow with email auth, we send the email\n // now because we want the request to fail as soon as possible\n // if the email address is not valid (ie. already taken or not\n // registered, depending on what the operation is).\n _this.requestingEmailToken = true;\n try {\n var requestTokenResult = yield _this.requestEmailTokenCallback(_this.inputs.emailAddress, _this.clientSecret, _this.emailAttempt++, _this.data.session);\n _this.emailSid = requestTokenResult.sid;\n logger.trace(\"Email token request succeeded\");\n } finally {\n _this.requestingEmailToken = false;\n }\n } else {\n logger.warn(\"Could not request email token: Already requesting\");\n }\n }));\n this.matrixClient = opts.matrixClient;\n this.data = opts.authData || {\n flows: []\n };\n this.requestCallback = opts.doRequest;\n this.busyChangedCallback = opts.busyChanged;\n // startAuthStage included for backwards compat\n this.stateUpdatedCallback = opts.stateUpdated || opts.startAuthStage;\n this.requestEmailTokenCallback = opts.requestEmailToken;\n this.inputs = opts.inputs || {};\n if (opts.sessionId) this.data.session = opts.sessionId;\n this.clientSecret = opts.clientSecret || this.matrixClient.generateClientSecret();\n this.emailSid = opts.emailSid;\n if (opts.supportedStages !== undefined) this.supportedStages = new Set(opts.supportedStages);\n }\n\n /**\n * begin the authentication process.\n *\n * @returns which resolves to the response on success,\n * or rejects with the error on failure. Rejects with NoAuthFlowFoundError if\n * no suitable authentication flow can be found\n */\n attemptAuth() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _this2$data;\n // This promise will be quite long-lived and will resolve when the\n // request is authenticated and completes successfully.\n _this2.attemptAuthDeferred = Promise.withResolvers();\n // pluck the promise out now, as doRequest may clear before we return\n var promise = _this2.attemptAuthDeferred.promise;\n\n // if we have no flows, try a request to acquire the flows\n if (!((_this2$data = _this2.data) !== null && _this2$data !== void 0 && (_this2$data = _this2$data.flows) !== null && _this2$data !== void 0 && _this2$data.length)) {\n var _this2$busyChangedCal;\n (_this2$busyChangedCal = _this2.busyChangedCallback) === null || _this2$busyChangedCal === void 0 || _this2$busyChangedCal.call(_this2, true);\n // use the existing sessionId, if one is present.\n var _auth = _this2.data.session ? {\n session: _this2.data.session\n } : null;\n _this2.doRequest(_auth).finally(() => {\n var _this2$busyChangedCal2;\n (_this2$busyChangedCal2 = _this2.busyChangedCallback) === null || _this2$busyChangedCal2 === void 0 || _this2$busyChangedCal2.call(_this2, false);\n });\n } else {\n _this2.startNextAuthStage();\n }\n return promise;\n })();\n }\n\n /**\n * Poll to check if the auth session or current stage has been\n * completed out-of-band. If so, the attemptAuth promise will\n * be resolved.\n */\n poll() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (!_this3.data.session) return;\n // likewise don't poll if there is no auth session in progress\n if (!_this3.attemptAuthDeferred) return;\n // if we currently have a request in flight, there's no point making\n // another just to check what the status is\n if (_this3.submitPromise) return;\n var authDict = {};\n if (_this3.currentStage == EMAIL_STAGE_TYPE) {\n // The email can be validated out-of-band, but we need to provide the\n // creds so the HS can go & check it.\n if (_this3.emailSid) {\n var creds = {\n sid: _this3.emailSid,\n client_secret: _this3.clientSecret\n };\n var isUrl = _this3.matrixClient.getIdentityServerUrl();\n if (isUrl) {\n creds.id_server = new URL(isUrl).host;\n }\n authDict = {\n type: EMAIL_STAGE_TYPE,\n threepid_creds: creds\n };\n }\n }\n _this3.submitAuthDict(authDict, true);\n })();\n }\n\n /**\n * get the auth session ID\n *\n * @returns session id\n */\n getSessionId() {\n var _this$data;\n return (_this$data = this.data) === null || _this$data === void 0 ? void 0 : _this$data.session;\n }\n\n /**\n * get the client secret used for validation sessions\n * with the identity server.\n *\n * @returns client secret\n */\n getClientSecret() {\n return this.clientSecret;\n }\n\n /**\n * get the server params for a given stage\n *\n * @param loginType - login type for the stage\n * @returns any parameters from the server for this stage\n */\n getStageParams(loginType) {\n var _this$data2;\n return (_this$data2 = this.data) === null || _this$data2 === void 0 || (_this$data2 = _this$data2.params) === null || _this$data2 === void 0 ? void 0 : _this$data2[loginType];\n }\n getChosenFlow() {\n return this.chosenFlow;\n }\n\n /**\n * submit a new auth dict and fire off the request. This will either\n * make attemptAuth resolve/reject, or cause the startAuthStage callback\n * to be called for a new stage.\n *\n * @param authData - new auth dict to send to the server. Should\n * include a `type` property denoting the login type, as well as any\n * other params for that stage.\n * @param background - If true, this request failing will not result\n * in the attemptAuth promise being rejected. This can be set to true\n * for requests that just poll to see if auth has been completed elsewhere.\n */\n submitAuthDict(authData) {\n var _arguments = arguments,\n _this4 = this;\n return _asyncToGenerator(function* () {\n var _this4$data;\n var background = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n if (!_this4.attemptAuthDeferred) {\n throw new Error(\"submitAuthDict() called before attemptAuth()\");\n }\n if (!background) {\n var _this4$busyChangedCal;\n (_this4$busyChangedCal = _this4.busyChangedCallback) === null || _this4$busyChangedCal === void 0 || _this4$busyChangedCal.call(_this4, true);\n }\n\n // if we're currently trying a request, wait for it to finish\n // as otherwise we can get multiple 200 responses which can mean\n // things like multiple logins for register requests.\n // (but discard any exceptions as we only care when its done,\n // not whether it worked or not)\n while (_this4.submitPromise) {\n try {\n yield _this4.submitPromise;\n } catch (_unused) {}\n }\n\n // use the sessionid from the last request, if one is present.\n var auth;\n if ((_this4$data = _this4.data) !== null && _this4$data !== void 0 && _this4$data.session) {\n auth = Object.assign({\n session: _this4.data.session\n }, authData);\n } else {\n auth = authData;\n }\n try {\n // NB. the 'background' flag is deprecated by the busyChanged\n // callback and is here for backwards compat\n _this4.submitPromise = _this4.doRequest(auth, background);\n yield _this4.submitPromise;\n } finally {\n _this4.submitPromise = null;\n if (!background) {\n var _this4$busyChangedCal2;\n (_this4$busyChangedCal2 = _this4.busyChangedCallback) === null || _this4$busyChangedCal2 === void 0 || _this4$busyChangedCal2.call(_this4, false);\n }\n }\n })();\n }\n\n /**\n * Gets the sid for the email validation session\n * Specific to m.login.email.identity\n *\n * @returns The sid of the email auth session\n */\n getEmailSid() {\n return this.emailSid;\n }\n\n /**\n * Sets the sid for the email validation session\n * This must be set in order to successfully poll for completion\n * of the email validation.\n * Specific to m.login.email.identity\n *\n * @param sid - The sid for the email validation session\n */\n setEmailSid(sid) {\n this.emailSid = sid;\n }\n /**\n * Fire off a request, and either resolve the promise, or call\n * startAuthStage.\n *\n * @internal\n * @param auth - new auth dict, including session id\n * @param background - If true, this request is a background poll, so it\n * failing will not result in the attemptAuth promise being rejected.\n * This can be set to true for requests that just poll to see if auth has\n * been completed elsewhere.\n */\n doRequest(auth) {\n var _arguments2 = arguments,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var background = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n try {\n var result = yield _this5.requestCallback(auth, background);\n _this5.attemptAuthDeferred.resolve(result);\n _this5.attemptAuthDeferred = null;\n } catch (error) {\n var _matrixError$data$flo, _matrixError$data, _this5$data, _this5$chosenFlow;\n var matrixError = error instanceof MatrixError ? error : null;\n\n // sometimes UI auth errors don't come with flows\n var errorFlows = (_matrixError$data$flo = matrixError === null || matrixError === void 0 || (_matrixError$data = matrixError.data) === null || _matrixError$data === void 0 ? void 0 : _matrixError$data.flows) !== null && _matrixError$data$flo !== void 0 ? _matrixError$data$flo : null;\n var haveFlows = ((_this5$data = _this5.data) === null || _this5$data === void 0 ? void 0 : _this5$data.flows) || Boolean(errorFlows);\n if (!matrixError || matrixError.httpStatus !== 401 || !matrixError.data || !haveFlows) {\n // doesn't look like an interactive-auth failure.\n if (!background) {\n var _this5$attemptAuthDef;\n (_this5$attemptAuthDef = _this5.attemptAuthDeferred) === null || _this5$attemptAuthDef === void 0 || _this5$attemptAuthDef.reject(error);\n } else {\n // We ignore all failures here (even non-UI auth related ones)\n // since we don't want to suddenly fail if the internet connection\n // had a blip whilst we were polling\n logger.log(\"Background poll request failed doing UI auth: ignoring\", error);\n }\n }\n if (matrixError && !matrixError.data) {\n matrixError.data = {};\n }\n // if the error didn't come with flows, completed flows or session ID,\n // copy over the ones we have. Synapse sometimes sends responses without\n // any UI auth data (eg. when polling for email validation, if the email\n // has not yet been validated). This appears to be a Synapse bug, which\n // we workaround here.\n if (matrixError && !matrixError.data.flows && !matrixError.data.completed && !matrixError.data.session) {\n matrixError.data.flows = _this5.data.flows;\n matrixError.data.completed = _this5.data.completed;\n matrixError.data.session = _this5.data.session;\n }\n if (matrixError) {\n _this5.data = matrixError.data;\n }\n try {\n _this5.startNextAuthStage();\n } catch (e) {\n _this5.attemptAuthDeferred.reject(e);\n _this5.attemptAuthDeferred = null;\n return;\n }\n if (!_this5.emailSid && (_this5$chosenFlow = _this5.chosenFlow) !== null && _this5$chosenFlow !== void 0 && _this5$chosenFlow.stages.includes(AuthType.Email)) {\n try {\n yield _this5.requestEmailToken();\n // NB. promise is not resolved here - at some point, doRequest\n // will be called again and if the user has jumped through all\n // the hoops correctly, auth will be complete and the request\n // will succeed.\n // Also, we should expose the fact that this request has compledted\n // so clients can know that the email has actually been sent.\n } catch (e) {\n // we failed to request an email token, so fail the request.\n // This could be due to the email already beeing registered\n // (or not being registered, depending on what we're trying\n // to do) or it could be a network failure. Either way, pass\n // the failure up as the user can't complete auth if we can't\n // send the email, for whatever reason.\n _this5.attemptAuthDeferred.reject(e);\n _this5.attemptAuthDeferred = null;\n }\n }\n }\n })();\n }\n\n /**\n * Pick the next stage and call the callback\n *\n * @internal\n * @throws {@link NoAuthFlowFoundError} If no suitable authentication flow can be found\n */\n startNextAuthStage() {\n var _this$data3, _this$data4;\n var nextStage = this.chooseStage();\n if (!nextStage) {\n throw new Error(\"No incomplete flows from the server\");\n }\n this.currentStage = nextStage;\n if (nextStage === AuthType.Dummy) {\n this.submitAuthDict({\n type: \"m.login.dummy\"\n });\n return;\n }\n if ((_this$data3 = this.data) !== null && _this$data3 !== void 0 && _this$data3.errcode || (_this$data4 = this.data) !== null && _this$data4 !== void 0 && _this$data4.error) {\n var _this$data5, _this$data6;\n this.stateUpdatedCallback(nextStage, {\n errcode: ((_this$data5 = this.data) === null || _this$data5 === void 0 ? void 0 : _this$data5.errcode) || \"\",\n error: ((_this$data6 = this.data) === null || _this$data6 === void 0 ? void 0 : _this$data6.error) || \"\"\n });\n return;\n }\n this.stateUpdatedCallback(nextStage, nextStage === EMAIL_STAGE_TYPE ? {\n emailSid: this.emailSid\n } : {});\n }\n\n /**\n * Pick the next auth stage\n *\n * @internal\n * @returns login type\n * @throws {@link NoAuthFlowFoundError} If no suitable authentication flow can be found\n */\n chooseStage() {\n if (this.chosenFlow === null) {\n this.chosenFlow = this.chooseFlow();\n }\n logger.log(\"Active flow => %s\", JSON.stringify(this.chosenFlow));\n var nextStage = this.firstUncompletedStage(this.chosenFlow);\n logger.log(\"Next stage: %s\", nextStage);\n return nextStage;\n }\n\n // Returns a low number for flows we consider best. Counts increase for longer flows and even more so\n // for flows which contain stages not listed in `supportedStages`.\n scoreFlow(flow) {\n var score = flow.stages.length;\n if (this.supportedStages !== undefined) {\n // Add 10 points to the score for each unsupported stage in the flow.\n score += flow.stages.filter(stage => !this.supportedStages.has(stage)).length * 10;\n }\n return score;\n }\n\n /**\n * Pick one of the flows from the returned list\n * If a flow using all of the inputs is found, it will\n * be returned, otherwise, null will be returned.\n *\n * Only flows using all given inputs are chosen because it\n * is likely to be surprising if the user provides a\n * credential and it is not used. For example, for registration,\n * this could result in the email not being used which would leave\n * the account with no means to reset a password.\n *\n * @internal\n * @returns flow\n * @throws {@link NoAuthFlowFoundError} If no suitable authentication flow can be found\n */\n chooseFlow() {\n var _this$data7;\n var flows = ((_this$data7 = this.data) === null || _this$data7 === void 0 ? void 0 : _this$data7.flows) || [];\n\n // we've been given an email or we've already done an email part\n var haveEmail = Boolean(this.inputs.emailAddress) || Boolean(this.emailSid);\n var haveMsisdn = Boolean(this.inputs.phoneCountry) && Boolean(this.inputs.phoneNumber);\n\n // Flows are not represented in a significant order, so we can choose any we support best\n // Sort flows based on how many unsupported stages they contain ascending\n flows.sort((a, b) => this.scoreFlow(a) - this.scoreFlow(b));\n for (var flow of flows) {\n var flowHasEmail = false;\n var flowHasMsisdn = false;\n for (var stage of flow.stages) {\n if (stage === EMAIL_STAGE_TYPE) {\n flowHasEmail = true;\n } else if (stage == MSISDN_STAGE_TYPE) {\n flowHasMsisdn = true;\n }\n }\n if (flowHasEmail == haveEmail && flowHasMsisdn == haveMsisdn) {\n return flow;\n }\n }\n var requiredStages = [];\n if (haveEmail) requiredStages.push(EMAIL_STAGE_TYPE);\n if (haveMsisdn) requiredStages.push(MSISDN_STAGE_TYPE);\n // Throw an error with a fairly generic description, but with more\n // information such that the app can give a better one if so desired.\n throw new NoAuthFlowFoundError(\"No appropriate authentication flow found\", requiredStages, flows);\n }\n\n /**\n * Get the first uncompleted stage in the given flow\n *\n * @internal\n * @returns login type\n */\n firstUncompletedStage(flow) {\n var _this$data8;\n var completed = ((_this$data8 = this.data) === null || _this$data8 === void 0 ? void 0 : _this$data8.completed) || [];\n return flow.stages.find(stageType => !completed.includes(stageType));\n }\n}\n//# sourceMappingURL=interactive-auth.js.map","/*\nCopyright 2019 New Vector Ltd\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * Check if an IndexedDB database exists. The only way to do so is to try opening it, so\n * we do that and then delete it did not exist before.\n *\n * @param indexedDB - The `indexedDB` interface\n * @param dbName - The database name to test for\n * @returns Whether the database exists\n */\nexport function exists(indexedDB, dbName) {\n return new Promise((resolve, reject) => {\n var exists = true;\n var req = indexedDB.open(dbName);\n req.onupgradeneeded = () => {\n // Since we did not provide an explicit version when opening, this event\n // should only fire if the DB did not exist before at any version.\n exists = false;\n };\n req.onblocked = () => reject(req.error);\n req.onsuccess = () => {\n var db = req.result;\n db.close();\n if (!exists) {\n // The DB did not exist before, but has been created as part of this\n // existence check. Delete it now to restore previous state. Delete can\n // actually take a while to complete in some browsers, so don't wait for\n // it. This won't block future open calls that a store might issue next to\n // properly set up the DB.\n indexedDB.deleteDatabase(dbName);\n }\n resolve(exists);\n };\n req.onerror = () => reject(req.error);\n });\n}\n//# sourceMappingURL=indexeddb-helpers.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2017 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { SyncAccumulator } from \"../sync-accumulator.js\";\nimport { deepCopy, promiseTry } from \"../utils.js\";\nimport { exists as idbExists } from \"../indexeddb-helpers.js\";\nimport { logger } from \"../logger.js\";\nvar DB_MIGRATIONS = [db => {\n // Make user store, clobber based on user ID. (userId property of User objects)\n db.createObjectStore(\"users\", {\n keyPath: [\"userId\"]\n });\n\n // Make account data store, clobber based on event type.\n // (event.type property of MatrixEvent objects)\n db.createObjectStore(\"accountData\", {\n keyPath: [\"type\"]\n });\n\n // Make /sync store (sync tokens, room data, etc), always clobber (const key).\n db.createObjectStore(\"sync\", {\n keyPath: [\"clobber\"]\n });\n}, db => {\n var oobMembersStore = db.createObjectStore(\"oob_membership_events\", {\n keyPath: [\"room_id\", \"state_key\"]\n });\n oobMembersStore.createIndex(\"room\", \"room_id\");\n}, db => {\n db.createObjectStore(\"client_options\", {\n keyPath: [\"clobber\"]\n });\n}, db => {\n db.createObjectStore(\"to_device_queue\", {\n autoIncrement: true\n });\n}, db => {\n db.createObjectStore(\"user_profile\", {\n keyPath: [\"userId\"]\n });\n}\n// Expand as needed.\n];\nvar VERSION = DB_MIGRATIONS.length;\n\n/**\n * Helper method to collect results from a Cursor and promiseify it.\n * @param store - The store to perform openCursor on.\n * @param keyRange - Optional key range to apply on the cursor.\n * @param resultMapper - A function which is repeatedly called with a\n * Cursor.\n * Return the data you want to keep.\n * @returns Promise which resolves to an array of whatever you returned from\n * resultMapper.\n * @throws If there was an error completing the query.\n */\nfunction selectQuery(store, keyRange, resultMapper) {\n var query = store.openCursor(keyRange);\n return new Promise((resolve, reject) => {\n var results = [];\n query.onerror = () => {\n reject(new Error(\"selectQuery failed for \".concat(store.name), {\n cause: query.error\n }));\n };\n // collect results\n query.onsuccess = () => {\n var cursor = query.result;\n if (!cursor) {\n resolve(results);\n return; // end of results\n }\n results.push(resultMapper(cursor));\n cursor.continue();\n };\n });\n}\nfunction txnAsPromise(txn) {\n return new Promise((resolve, reject) => {\n txn.oncomplete = function (event) {\n resolve(event);\n };\n txn.onerror = function () {\n reject(txn.error);\n };\n });\n}\nfunction reqAsEventPromise(req) {\n return new Promise((resolve, reject) => {\n req.onsuccess = function (event) {\n resolve(event);\n };\n req.onerror = function () {\n reject(req.error);\n };\n });\n}\nfunction reqAsPromise(req) {\n return new Promise((resolve, reject) => {\n req.onsuccess = () => resolve(req);\n req.onerror = err => reject(err);\n });\n}\nfunction reqAsCursorPromise(req) {\n return reqAsEventPromise(req).then(event => req.result);\n}\nexport class LocalIndexedDBStoreBackend {\n static exists(indexedDB, dbName) {\n dbName = \"matrix-js-sdk:\" + (dbName || \"default\");\n return idbExists(indexedDB, dbName);\n }\n /**\n * Does the actual reading from and writing to the indexeddb\n *\n * Construct a new Indexed Database store backend. This requires a call to\n * `connect()` before this store can be used.\n * @param indexedDB - The Indexed DB interface e.g\n * `window.indexedDB`\n * @param dbName - Optional database name. The same name must be used\n * to open the same database.\n */\n constructor(indexedDB) {\n var dbName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"default\";\n this.indexedDB = indexedDB;\n _defineProperty(this, \"dbName\", void 0);\n _defineProperty(this, \"syncAccumulator\", void 0);\n _defineProperty(this, \"db\", void 0);\n _defineProperty(this, \"disconnected\", true);\n _defineProperty(this, \"_isNewlyCreated\", false);\n _defineProperty(this, \"syncToDatabasePromise\", void 0);\n _defineProperty(this, \"pendingUserPresenceData\", []);\n this.dbName = \"matrix-js-sdk:\" + dbName;\n this.syncAccumulator = new SyncAccumulator();\n }\n\n /**\n * Attempt to connect to the database. This can fail if the user does not\n * grant permission.\n * @returns Promise which resolves if successfully connected.\n */\n connect(onClose) {\n var _this = this;\n if (!this.disconnected) {\n logger.log(\"LocalIndexedDBStoreBackend.connect: already connected or connecting\");\n return Promise.resolve();\n }\n this.disconnected = false;\n logger.log(\"LocalIndexedDBStoreBackend.connect: connecting...\");\n var req = this.indexedDB.open(this.dbName, VERSION);\n req.onupgradeneeded = ev => {\n var db = req.result;\n var oldVersion = ev.oldVersion;\n logger.log(\"LocalIndexedDBStoreBackend.connect: upgrading from \".concat(oldVersion));\n if (oldVersion < 1) {\n // The database did not previously exist\n this._isNewlyCreated = true;\n }\n DB_MIGRATIONS.forEach((migration, index) => {\n if (oldVersion <= index) migration(db);\n });\n };\n req.onblocked = () => {\n logger.log(\"can't yet open LocalIndexedDBStoreBackend because it is open elsewhere\");\n };\n logger.log(\"LocalIndexedDBStoreBackend.connect: awaiting connection...\");\n return reqAsEventPromise(req).then(/*#__PURE__*/_asyncToGenerator(function* () {\n logger.log(\"LocalIndexedDBStoreBackend.connect: connected\");\n _this.db = req.result;\n\n // add a poorly-named listener for when deleteDatabase is called\n // so we can close our db connections.\n _this.db.onversionchange = () => {\n var _this$db;\n (_this$db = _this.db) === null || _this$db === void 0 || _this$db.close(); // this does not call onclose\n _this.disconnected = true;\n _this.db = undefined;\n };\n _this.db.onclose = () => {\n _this.disconnected = true;\n _this.db = undefined;\n onClose === null || onClose === void 0 || onClose();\n };\n yield _this.init();\n }));\n }\n\n /** @returns whether or not the database was newly created in this session. */\n isNewlyCreated() {\n return Promise.resolve(this._isNewlyCreated);\n }\n\n /**\n * Having connected, load initial data from the database and prepare for use\n * @returns Promise which resolves on success\n */\n init() {\n return Promise.all([this.loadAccountData(), this.loadSyncData()]).then(_ref2 => {\n var _ref3 = _slicedToArray(_ref2, 2),\n accountData = _ref3[0],\n syncData = _ref3[1];\n logger.log(\"LocalIndexedDBStoreBackend: loaded initial data\");\n this.syncAccumulator.accumulate({\n next_batch: syncData.nextBatch,\n rooms: syncData.roomsData,\n account_data: {\n events: accountData\n }\n }, true);\n });\n }\n\n /**\n * Returns the out-of-band membership events for this room that\n * were previously loaded.\n * @returns the events, potentially an empty array if OOB loading didn't yield any new members\n * @returns in case the members for this room haven't been stored yet\n */\n getOutOfBandMembers(roomId) {\n return new Promise((resolve, reject) => {\n var tx = this.db.transaction([\"oob_membership_events\"], \"readonly\");\n var store = tx.objectStore(\"oob_membership_events\");\n var roomIndex = store.index(\"room\");\n var range = IDBKeyRange.only(roomId);\n var request = roomIndex.openCursor(range);\n var membershipEvents = [];\n // did we encounter the oob_written marker object\n // amongst the results? That means OOB member\n // loading already happened for this room\n // but there were no members to persist as they\n // were all known already\n var oobWritten = false;\n request.onsuccess = () => {\n var cursor = request.result;\n if (!cursor) {\n // Unknown room\n if (!membershipEvents.length && !oobWritten) {\n return resolve(null);\n }\n return resolve(membershipEvents);\n }\n var record = cursor.value;\n if (record.oob_written) {\n oobWritten = true;\n } else {\n membershipEvents.push(record);\n }\n cursor.continue();\n };\n request.onerror = err => {\n reject(err);\n };\n }).then(events => {\n logger.log(\"LL: got \".concat(events === null || events === void 0 ? void 0 : events.length, \" membershipEvents from storage for room \").concat(roomId, \" ...\"));\n return events;\n });\n }\n\n /**\n * Stores the out-of-band membership events for this room. Note that\n * it still makes sense to store an empty array as the OOB status for the room is\n * marked as fetched, and getOutOfBandMembers will return an empty array instead of null\n * @param membershipEvents - the membership events to store\n */\n setOutOfBandMembers(roomId, membershipEvents) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n logger.log(\"LL: backend about to store \".concat(membershipEvents.length) + \" members for \".concat(roomId));\n var tx = _this2.db.transaction([\"oob_membership_events\"], \"readwrite\");\n var store = tx.objectStore(\"oob_membership_events\");\n membershipEvents.forEach(e => {\n store.put(e);\n });\n // aside from all the events, we also write a marker object to the store\n // to mark the fact that OOB members have been written for this room.\n // It's possible that 0 members need to be written as all where previously know\n // but we still need to know whether to return null or [] from getOutOfBandMembers\n // where null means out of band members haven't been stored yet for this room\n var markerObject = {\n room_id: roomId,\n oob_written: true,\n state_key: 0\n };\n store.put(markerObject);\n yield txnAsPromise(tx);\n logger.log(\"LL: backend done storing for \".concat(roomId, \"!\"));\n })();\n }\n clearOutOfBandMembers(roomId) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n // the approach to delete all members for a room\n // is to get the min and max state key from the index\n // for that room, and then delete between those\n // keys in the store.\n // this should be way faster than deleting every member\n // individually for a large room.\n var readTx = _this3.db.transaction([\"oob_membership_events\"], \"readonly\");\n var store = readTx.objectStore(\"oob_membership_events\");\n var roomIndex = store.index(\"room\");\n var roomRange = IDBKeyRange.only(roomId);\n var minStateKeyProm = reqAsCursorPromise(roomIndex.openKeyCursor(roomRange, \"next\")).then(cursor => (cursor === null || cursor === void 0 ? void 0 : cursor.primaryKey)[1]);\n var maxStateKeyProm = reqAsCursorPromise(roomIndex.openKeyCursor(roomRange, \"prev\")).then(cursor => (cursor === null || cursor === void 0 ? void 0 : cursor.primaryKey)[1]);\n var _yield$Promise$all = yield Promise.all([minStateKeyProm, maxStateKeyProm]),\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2),\n minStateKey = _yield$Promise$all2[0],\n maxStateKey = _yield$Promise$all2[1];\n var writeTx = _this3.db.transaction([\"oob_membership_events\"], \"readwrite\");\n var writeStore = writeTx.objectStore(\"oob_membership_events\");\n var membersKeyRange = IDBKeyRange.bound([roomId, minStateKey], [roomId, maxStateKey]);\n logger.log(\"LL: Deleting all users + marker in storage for room \".concat(roomId, \", with key range:\"), [roomId, minStateKey], [roomId, maxStateKey]);\n yield reqAsPromise(writeStore.delete(membersKeyRange));\n })();\n }\n\n /**\n * Clear the entire database. This should be used when logging out of a client\n * to prevent mixing data between accounts. Closes the database.\n * @returns Resolved when the database is cleared.\n */\n clearDatabase() {\n return new Promise(resolve => {\n var _this$db2;\n logger.log(\"Removing indexeddb instance: \".concat(this.dbName));\n\n // Close the database first to avoid firing unexpected close events\n (_this$db2 = this.db) === null || _this$db2 === void 0 || _this$db2.close();\n var req = this.indexedDB.deleteDatabase(this.dbName);\n req.onblocked = () => {\n logger.log(\"can't yet delete indexeddb \".concat(this.dbName, \" because it is open elsewhere\"));\n };\n req.onerror = () => {\n var _req$error;\n // in firefox, with indexedDB disabled, this fails with a\n // DOMError. We treat this as non-fatal, so that we can still\n // use the app.\n logger.warn(\"unable to delete js-sdk store indexeddb: \".concat((_req$error = req.error) === null || _req$error === void 0 ? void 0 : _req$error.name));\n resolve();\n };\n req.onsuccess = () => {\n logger.log(\"Removed indexeddb instance: \".concat(this.dbName));\n resolve();\n };\n });\n }\n\n /**\n * @param copy - If false, the data returned is from internal\n * buffers and must not be mutated. Otherwise, a copy is made before\n * returning such that the data can be safely mutated. Default: true.\n *\n * @returns Promise which resolves with a sync response to restore the\n * client state to where it was at the last save, or null if there\n * is no saved sync data.\n */\n getSavedSync() {\n var copy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var data = this.syncAccumulator.getJSON();\n if (!data.nextBatch) return Promise.resolve(null);\n if (copy) {\n // We must deep copy the stored data so that the /sync processing code doesn't\n // corrupt the internal state of the sync accumulator (it adds non-clonable keys)\n return Promise.resolve(deepCopy(data));\n } else {\n return Promise.resolve(data);\n }\n }\n getNextBatchToken() {\n return Promise.resolve(this.syncAccumulator.getNextBatchToken());\n }\n setSyncData(syncData) {\n return Promise.resolve().then(() => {\n this.syncAccumulator.accumulate(syncData);\n });\n }\n\n /**\n * Sync users and all accumulated sync data to the database.\n * If a previous sync is in flight, the new data will be added to the\n * next sync and the current sync's promise will be returned.\n * @param userTuples - The user tuples\n * @returns Promise which resolves if the data was persisted.\n */\n syncToDatabase(userTuples) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (_this4.syncToDatabasePromise) {\n logger.warn(\"Skipping syncToDatabase() as persist already in flight\");\n _this4.pendingUserPresenceData.push(...userTuples);\n return _this4.syncToDatabasePromise;\n }\n userTuples.unshift(..._this4.pendingUserPresenceData);\n _this4.syncToDatabasePromise = _this4.doSyncToDatabase(userTuples);\n return _this4.syncToDatabasePromise;\n })();\n }\n doSyncToDatabase(userTuples) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n try {\n var syncData = _this5.syncAccumulator.getJSON(true);\n yield Promise.all([_this5.persistUserPresenceEvents(userTuples), _this5.persistAccountData(syncData.accountData), _this5.persistSyncData(syncData.nextBatch, syncData.roomsData)]);\n } finally {\n _this5.syncToDatabasePromise = undefined;\n }\n })();\n }\n\n /**\n * Persist rooms /sync data along with the next batch token.\n * @param nextBatch - The next_batch /sync value.\n * @param roomsData - The 'rooms' /sync data from a SyncAccumulator\n * @returns Promise which resolves if the data was persisted.\n */\n persistSyncData(nextBatch, roomsData) {\n logger.log(\"Persisting sync data up to\", nextBatch);\n return promiseTry(() => {\n var txn = this.db.transaction([\"sync\"], \"readwrite\");\n var store = txn.objectStore(\"sync\");\n store.put({\n clobber: \"-\",\n // constant key so will always clobber\n nextBatch,\n roomsData\n }); // put == UPSERT\n return txnAsPromise(txn).then(() => {\n logger.log(\"Persisted sync data up to\", nextBatch);\n });\n });\n }\n\n /**\n * Persist a list of account data events. Events with the same 'type' will\n * be replaced.\n * @param accountData - An array of raw user-scoped account data events\n * @returns Promise which resolves if the events were persisted.\n */\n persistAccountData(accountData) {\n return promiseTry(() => {\n var txn = this.db.transaction([\"accountData\"], \"readwrite\");\n var store = txn.objectStore(\"accountData\");\n for (var event of accountData) {\n store.put(event); // put == UPSERT\n }\n return txnAsPromise(txn).then();\n });\n }\n\n /**\n * Persist a list of [user id, presence event] they are for.\n * Users with the same 'userId' will be replaced.\n * Presence events should be the event in its raw form (not the Event\n * object)\n * @param tuples - An array of [userid, event] tuples\n * @returns Promise which resolves if the users were persisted.\n */\n persistUserPresenceEvents(tuples) {\n return promiseTry(() => {\n var txn = this.db.transaction([\"users\"], \"readwrite\");\n var store = txn.objectStore(\"users\");\n for (var tuple of tuples) {\n store.put({\n userId: tuple[0],\n event: tuple[1]\n }); // put == UPSERT\n }\n return txnAsPromise(txn).then();\n });\n }\n\n /**\n * Load all user presence events from the database. This is not cached.\n * FIXME: It would probably be more sensible to store the events in the\n * sync.\n * @returns A list of presence events in their raw form.\n */\n getUserPresenceEvents() {\n return promiseTry(() => {\n var txn = this.db.transaction([\"users\"], \"readonly\");\n var store = txn.objectStore(\"users\");\n return selectQuery(store, undefined, cursor => {\n return [cursor.value.userId, cursor.value.event];\n });\n });\n }\n\n /**\n * Load all the account data events from the database. This is not cached.\n * @returns A list of raw global account events.\n */\n loadAccountData() {\n logger.log(\"LocalIndexedDBStoreBackend: loading account data...\");\n return promiseTry(() => {\n var txn = this.db.transaction([\"accountData\"], \"readonly\");\n var store = txn.objectStore(\"accountData\");\n return selectQuery(store, undefined, cursor => {\n return cursor.value;\n }).then(result => {\n logger.log(\"LocalIndexedDBStoreBackend: loaded account data\");\n return result;\n });\n });\n }\n\n /**\n * Load the sync data from the database.\n * @returns An object with \"roomsData\" and \"nextBatch\" keys.\n */\n loadSyncData() {\n logger.log(\"LocalIndexedDBStoreBackend: loading sync data...\");\n return promiseTry(() => {\n var txn = this.db.transaction([\"sync\"], \"readonly\");\n var store = txn.objectStore(\"sync\");\n return selectQuery(store, undefined, cursor => {\n return cursor.value;\n }).then(results => {\n logger.log(\"LocalIndexedDBStoreBackend: loaded sync data\");\n if (results.length > 1) {\n logger.warn(\"loadSyncData: More than 1 sync row found.\");\n }\n return results.length > 0 ? results[0] : {};\n });\n });\n }\n getClientOptions() {\n return Promise.resolve().then(() => {\n var txn = this.db.transaction([\"client_options\"], \"readonly\");\n var store = txn.objectStore(\"client_options\");\n return selectQuery(store, undefined, cursor => {\n var _cursor$value;\n return (_cursor$value = cursor.value) === null || _cursor$value === void 0 ? void 0 : _cursor$value.options;\n }).then(results => results[0]);\n });\n }\n storeClientOptions(options) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var txn = _this6.db.transaction([\"client_options\"], \"readwrite\");\n var store = txn.objectStore(\"client_options\");\n store.put({\n clobber: \"-\",\n // constant key so will always clobber\n options: options\n }); // put == UPSERT\n yield txnAsPromise(txn);\n })();\n }\n saveToDeviceBatches(batches) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var txn = _this7.db.transaction([\"to_device_queue\"], \"readwrite\");\n var store = txn.objectStore(\"to_device_queue\");\n for (var batch of batches) {\n store.add(batch);\n }\n yield txnAsPromise(txn);\n })();\n }\n getOldestToDeviceBatch() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n var txn = _this8.db.transaction([\"to_device_queue\"], \"readonly\");\n var store = txn.objectStore(\"to_device_queue\");\n var cursor = yield reqAsCursorPromise(store.openCursor());\n if (!cursor) return null;\n var resultBatch = cursor.value;\n return {\n id: cursor.key,\n txnId: resultBatch.txnId,\n eventType: resultBatch.eventType,\n batch: resultBatch.batch\n };\n })();\n }\n removeToDeviceBatch(id) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n var txn = _this9.db.transaction([\"to_device_queue\"], \"readwrite\");\n var store = txn.objectStore(\"to_device_queue\");\n store.delete(id);\n yield txnAsPromise(txn);\n })();\n }\n getUserProfile(userId) {\n var _this0 = this;\n return _asyncToGenerator(function* () {\n return Promise.resolve().then(() => {\n var txn = _this0.db.transaction([\"user_profile\"], \"readonly\");\n var store = txn.objectStore(\"user_profile\");\n return selectQuery(store, [userId], cursor => {\n var _cursor$value2;\n return (_cursor$value2 = cursor.value) === null || _cursor$value2 === void 0 ? void 0 : _cursor$value2.profile;\n }).then(results => results[0]);\n });\n })();\n }\n storeUserProfiles(userProfiles) {\n var _this1 = this;\n return _asyncToGenerator(function* () {\n var txn = _this1.db.transaction([\"user_profile\"], \"readwrite\");\n var store = txn.objectStore(\"user_profile\");\n for (var _ref6 of userProfiles.entries()) {\n var _ref5 = _slicedToArray(_ref6, 2);\n var userId = _ref5[0];\n var profile = _ref5[1];\n store.put({\n profile,\n userId\n });\n }\n yield txnAsPromise(txn);\n })();\n }\n removeUserProfiles(userIds) {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n var txn = _this10.db.transaction([\"user_profile\"], \"readwrite\");\n var store = txn.objectStore(\"user_profile\");\n for (var userId of userIds) {\n store.delete([userId]);\n }\n yield txnAsPromise(txn);\n })();\n }\n removeEventsFromRoom(roomId, eventIds) {\n var _this11 = this;\n return _asyncToGenerator(function* () {\n try {\n _this11.syncAccumulator.removeEventsFromRoom(roomId, eventIds);\n var syncData = _this11.syncAccumulator.getJSON(true);\n yield Promise.all([_this11.persistSyncData(syncData.nextBatch, syncData.roomsData)]);\n } finally {\n _this11.syncToDatabasePromise = undefined;\n }\n })();\n }\n\n /*\n * Close the database\n */\n destroy() {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n var _this12$db;\n (_this12$db = _this12.db) === null || _this12$db === void 0 || _this12$db.close();\n })();\n }\n}\n//# sourceMappingURL=indexeddb-local-backend.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2017 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"../logger.js\";\nexport class RemoteIndexedDBStoreBackend {\n // Callback for when the IndexedDB gets closed unexpectedly\n\n /**\n * An IndexedDB store backend where the actual backend sits in a web\n * worker.\n *\n * Construct a new Indexed Database store backend. This requires a call to\n * `connect()` before this store can be used.\n * @param workerFactory - Factory which produces a Worker\n * @param dbName - Optional database name. The same name must be used\n * to open the same database.\n */\n constructor(workerFactory, dbName) {\n this.workerFactory = workerFactory;\n this.dbName = dbName;\n _defineProperty(this, \"worker\", void 0);\n _defineProperty(this, \"nextSeq\", 0);\n // The currently in-flight requests to the actual backend\n _defineProperty(this, \"inFlight\", {});\n // seq: promise\n // Once we start connecting, we keep the promise and re-use it\n // if we try to connect again\n _defineProperty(this, \"startPromiseResolvers\", void 0);\n _defineProperty(this, \"onWorkerError\", ev => {\n var _this$startPromiseRes, _ev$message;\n logger.error(\"IndexedDB worker failed to connect\", ev);\n (_this$startPromiseRes = this.startPromiseResolvers) === null || _this$startPromiseRes === void 0 || _this$startPromiseRes.reject((_ev$message = ev.message) !== null && _ev$message !== void 0 ? _ev$message : new Error(\"IndexedDB worker failed to connect\"));\n });\n _defineProperty(this, \"onWorkerMessage\", ev => {\n var msg = ev.data;\n if (msg.command == \"closed\") {\n var _this$onClose;\n (_this$onClose = this.onClose) === null || _this$onClose === void 0 || _this$onClose.call(this);\n } else if (msg.command == \"cmd_success\" || msg.command == \"cmd_fail\") {\n if (msg.seq === undefined) {\n logger.error(\"Got reply from worker with no seq\");\n return;\n }\n var def = this.inFlight[msg.seq];\n if (def === undefined) {\n logger.error(\"Got reply for unknown seq \" + msg.seq);\n return;\n }\n delete this.inFlight[msg.seq];\n if (msg.command == \"cmd_success\") {\n def.resolve(msg.result);\n } else {\n var error = new Error(msg.error.message);\n error.name = msg.error.name;\n def.reject(error);\n }\n } else {\n logger.warn(\"Unrecognised message from worker: \", msg);\n }\n });\n }\n\n /**\n * Attempt to connect to the database. This can fail if the user does not\n * grant permission.\n * @returns Promise which resolves if successfully connected.\n */\n connect(onClose) {\n this.onClose = onClose;\n return this.ensureStarted().then(() => this.doCmd(\"connect\"));\n }\n\n /**\n * Clear the entire database. This should be used when logging out of a client\n * to prevent mixing data between accounts.\n * @returns Resolved when the database is cleared.\n */\n clearDatabase() {\n return this.ensureStarted().then(() => this.doCmd(\"clearDatabase\"));\n }\n\n /** @returns whether or not the database was newly created in this session. */\n isNewlyCreated() {\n return this.doCmd(\"isNewlyCreated\");\n }\n\n /**\n * @returns Promise which resolves with a sync response to restore the\n * client state to where it was at the last save, or null if there\n * is no saved sync data.\n */\n getSavedSync() {\n return this.doCmd(\"getSavedSync\");\n }\n getNextBatchToken() {\n return this.doCmd(\"getNextBatchToken\");\n }\n setSyncData(syncData) {\n return this.doCmd(\"setSyncData\", [syncData]);\n }\n syncToDatabase(userTuples) {\n return this.doCmd(\"syncToDatabase\", [userTuples]);\n }\n\n /**\n * Returns the out-of-band membership events for this room that\n * were previously loaded.\n * @returns the events, potentially an empty array if OOB loading didn't yield any new members\n * @returns in case the members for this room haven't been stored yet\n */\n getOutOfBandMembers(roomId) {\n return this.doCmd(\"getOutOfBandMembers\", [roomId]);\n }\n\n /**\n * Stores the out-of-band membership events for this room. Note that\n * it still makes sense to store an empty array as the OOB status for the room is\n * marked as fetched, and getOutOfBandMembers will return an empty array instead of null\n * @param membershipEvents - the membership events to store\n * @returns when all members have been stored\n */\n setOutOfBandMembers(roomId, membershipEvents) {\n return this.doCmd(\"setOutOfBandMembers\", [roomId, membershipEvents]);\n }\n clearOutOfBandMembers(roomId) {\n return this.doCmd(\"clearOutOfBandMembers\", [roomId]);\n }\n getClientOptions() {\n return this.doCmd(\"getClientOptions\");\n }\n storeClientOptions(options) {\n return this.doCmd(\"storeClientOptions\", [options]);\n }\n\n /**\n * Load all user presence events from the database. This is not cached.\n * @returns A list of presence events in their raw form.\n */\n getUserPresenceEvents() {\n return this.doCmd(\"getUserPresenceEvents\");\n }\n saveToDeviceBatches(batches) {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.doCmd(\"saveToDeviceBatches\", [batches]);\n })();\n }\n getOldestToDeviceBatch() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.doCmd(\"getOldestToDeviceBatch\");\n })();\n }\n removeToDeviceBatch(id) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n return _this3.doCmd(\"removeToDeviceBatch\", [id]);\n })();\n }\n getUserProfile(userId) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n return _this4.doCmd(\"getUserProfile\", [userId]);\n })();\n }\n storeUserProfiles(userProfiles) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n yield _this5.doCmd(\"storeUserProfiles\", [userProfiles]);\n })();\n }\n removeUserProfiles(userIds) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n yield _this6.doCmd(\"removeUserProfiles\", [userIds]);\n })();\n }\n removeEventsFromRoom(roomId, eventIds) {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n yield _this7.doCmd(\"removeEventsFromRoom\", [roomId, eventIds]);\n })();\n }\n ensureStarted() {\n if (!this.startPromiseResolvers) {\n this.startPromiseResolvers = Promise.withResolvers();\n try {\n this.worker = this.workerFactory();\n } catch (e) {\n logger.error(\"IndexedDB worker failed to start\", e);\n this.startPromiseResolvers.reject(new Error(\"IndexedDB worker failed to start\"));\n return this.startPromiseResolvers.promise;\n }\n this.worker.onmessage = this.onWorkerMessage;\n this.worker.onerror = this.onWorkerError;\n\n // tell the worker the db name.\n this.doCmd(\"setupWorker\", [this.dbName]).then(() => {\n var _this$startPromiseRes2;\n logger.log(\"IndexedDB worker is ready\");\n (_this$startPromiseRes2 = this.startPromiseResolvers) === null || _this$startPromiseRes2 === void 0 || _this$startPromiseRes2.resolve();\n });\n }\n return this.startPromiseResolvers.promise;\n }\n doCmd(command, args) {\n // wrap in a q so if the postMessage throws,\n // the promise automatically gets rejected\n return Promise.resolve().then(() => {\n var _this$worker;\n var seq = this.nextSeq++;\n var def = Promise.withResolvers();\n this.inFlight[seq] = def;\n (_this$worker = this.worker) === null || _this$worker === void 0 || _this$worker.postMessage({\n command,\n seq,\n args\n });\n return def.promise;\n });\n }\n /*\n * Destroy the web worker\n */\n destroy() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n var _this8$worker;\n (_this8$worker = _this8.worker) === null || _this8$worker === void 0 || _this8$worker.terminate();\n })();\n }\n}\n//# sourceMappingURL=indexeddb-remote-backend.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2017 - 2021 Vector Creations Ltd\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/* eslint-disable @babel/no-invalid-this */\n\nimport { MemoryStore } from \"./memory.js\";\nimport { LocalIndexedDBStoreBackend } from \"./indexeddb-local-backend.js\";\nimport { RemoteIndexedDBStoreBackend } from \"./indexeddb-remote-backend.js\";\nimport { MatrixEvent } from \"../models/event.js\";\nimport { logger } from \"../logger.js\";\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\n/**\n * This is an internal module. See {@link IndexedDBStore} for the public class.\n */\n\n// If this value is too small we'll be writing very often which will cause\n// noticeable stop-the-world pauses. If this value is too big we'll be writing\n// so infrequently that the /sync size gets bigger on reload. Writing more\n// often does not affect the length of the pause since the entire /sync\n// response is persisted each time.\nvar WRITE_DELAY_MS = 1000 * 60 * 5; // once every 5 minutes\n\nexport class IndexedDBStore extends MemoryStore {\n static exists(indexedDB, dbName) {\n return LocalIndexedDBStoreBackend.exists(indexedDB, dbName);\n }\n /**\n * Construct a new Indexed Database store, which extends MemoryStore.\n *\n * This store functions like a MemoryStore except it periodically persists\n * the contents of the store to an IndexedDB backend.\n *\n * All data is still kept in-memory but can be loaded from disk by calling\n * `startup()`. This can make startup times quicker as a complete\n * sync from the server is not required. This does not reduce memory usage as all\n * the data is eagerly fetched when `startup()` is called.\n * ```\n * let opts = { indexedDB: window.indexedDB, localStorage: window.localStorage };\n * let store = new IndexedDBStore(opts);\n * let client = sdk.createClient({\n * store: store,\n * });\n * await store.startup(); // load from indexed db, must be called after createClient\n * client.startClient();\n * client.on(\"sync\", function(state, prevState, data) {\n * if (state === \"PREPARED\") {\n * console.log(\"Started up, now with go faster stripes!\");\n * }\n * });\n * ```\n *\n * @param opts - Options object.\n */\n constructor(opts) {\n super(opts);\n this.opts = opts;\n _defineProperty(this, \"_backend\", void 0);\n _defineProperty(this, \"startedUp\", false);\n _defineProperty(this, \"syncTs\", 0);\n // Records the last-modified-time of each user at the last point we saved\n // the database, such that we can derive the set if users that have been\n // modified since we last saved.\n _defineProperty(this, \"userModifiedMap\", {});\n // user_id : timestamp\n _defineProperty(this, \"emitter\", new TypedEventEmitter());\n _defineProperty(this, \"onClose\", () => {\n this.emitter.emit(\"closed\");\n });\n /**\n * @returns Promise which resolves with a sync response to restore the\n * client state to where it was at the last save, or null if there\n * is no saved sync data.\n */\n _defineProperty(this, \"getSavedSync\", this.degradable(() => {\n return this.backend.getSavedSync();\n }, \"getSavedSync\"));\n /** @returns whether or not the database was newly created in this session. */\n _defineProperty(this, \"isNewlyCreated\", this.degradable(() => {\n return this.backend.isNewlyCreated();\n }, \"isNewlyCreated\"));\n /**\n * @returns If there is a saved sync, the nextBatch token\n * for this sync, otherwise null.\n */\n _defineProperty(this, \"getSavedSyncToken\", this.degradable(() => {\n return this.backend.getNextBatchToken();\n }, \"getSavedSyncToken\"));\n /**\n * Delete all data from this store.\n * @returns Promise which resolves if the data was deleted from the database.\n */\n _defineProperty(this, \"deleteAllData\", this.degradable(() => {\n super.deleteAllData();\n return this.backend.clearDatabase().then(() => {\n logger.log(\"Deleted indexeddb data.\");\n }, err => {\n logger.error(\"Failed to delete indexeddb data: \".concat(err));\n throw err;\n });\n }, null));\n _defineProperty(this, \"reallySave\", this.degradable(() => {\n this.syncTs = Date.now(); // set now to guard against multi-writes\n\n // work out changed users (this doesn't handle deletions but you\n // can't 'delete' users as they are just presence events).\n var userTuples = [];\n for (var u of this.getUsers()) {\n if (this.userModifiedMap[u.userId] === u.getLastModifiedTime()) continue;\n if (!u.events.presence) continue;\n userTuples.push([u.userId, u.events.presence.event]);\n\n // note that we've saved this version of the user\n this.userModifiedMap[u.userId] = u.getLastModifiedTime();\n }\n return this.backend.syncToDatabase(userTuples);\n }, null));\n _defineProperty(this, \"setSyncData\", this.degradable(syncData => {\n return this.backend.setSyncData(syncData);\n }, \"setSyncData\"));\n /**\n * Returns the out-of-band membership events for this room that\n * were previously loaded.\n * @returns the events, potentially an empty array if OOB loading didn't yield any new members\n * @returns in case the members for this room haven't been stored yet\n */\n _defineProperty(this, \"getOutOfBandMembers\", this.degradable(roomId => {\n return this.backend.getOutOfBandMembers(roomId);\n }, \"getOutOfBandMembers\"));\n /**\n * Stores the out-of-band membership events for this room. Note that\n * it still makes sense to store an empty array as the OOB status for the room is\n * marked as fetched, and getOutOfBandMembers will return an empty array instead of null\n * @param membershipEvents - the membership events to store\n * @returns when all members have been stored\n */\n _defineProperty(this, \"setOutOfBandMembers\", this.degradable((roomId, membershipEvents) => {\n super.setOutOfBandMembers(roomId, membershipEvents);\n return this.backend.setOutOfBandMembers(roomId, membershipEvents);\n }, \"setOutOfBandMembers\"));\n _defineProperty(this, \"clearOutOfBandMembers\", this.degradable(roomId => {\n super.clearOutOfBandMembers(roomId);\n return this.backend.clearOutOfBandMembers(roomId);\n }, \"clearOutOfBandMembers\"));\n _defineProperty(this, \"getClientOptions\", this.degradable(() => {\n return this.backend.getClientOptions();\n }, \"getClientOptions\"));\n _defineProperty(this, \"storeClientOptions\", this.degradable(options => {\n super.storeClientOptions(options);\n return this.backend.storeClientOptions(options);\n }, \"storeClientOptions\"));\n if (!opts.indexedDB) {\n throw new Error(\"Missing required option: indexedDB\");\n }\n if (opts.workerFactory) {\n this._backend = new RemoteIndexedDBStoreBackend(opts.workerFactory, opts.dbName);\n } else {\n this._backend = new LocalIndexedDBStoreBackend(opts.indexedDB, opts.dbName);\n }\n }\n\n /**\n * The backend instance.\n * Call through to this API if you need to perform specific indexeddb actions like deleting the database.\n */\n get backend() {\n return this._backend;\n }\n\n /** Re-exports `TypedEventEmitter.on` */\n on(event, handler) {\n this.emitter.on(event, handler);\n }\n\n /**\n * @returns Resolved when loaded from indexed db.\n */\n startup() {\n if (this.startedUp) {\n logger.log(\"IndexedDBStore.startup: already started\");\n return Promise.resolve();\n }\n logger.log(\"IndexedDBStore.startup: connecting to backend\");\n return this.backend.connect(this.onClose).catch(e => {\n if (this.opts.workerFactory) {\n logger.log(\"Falling back to local indexeddb backend\");\n this._backend = new LocalIndexedDBStoreBackend(this.opts.indexedDB, this.opts.dbName);\n return this.backend.connect(this.onClose);\n }\n throw e;\n }).then(() => {\n logger.log(\"IndexedDBStore.startup: loading presence events\");\n return this.backend.getUserPresenceEvents();\n }).then(userPresenceEvents => {\n logger.log(\"IndexedDBStore.startup: processing presence events\");\n userPresenceEvents.forEach(_ref => {\n var _ref2 = _slicedToArray(_ref, 2),\n userId = _ref2[0],\n rawEvent = _ref2[1];\n if (!this.createUser) {\n throw new Error(\"`IndexedDBStore.startup` must be called after assigning it to the client, not before!\");\n }\n var u = this.createUser(userId);\n if (rawEvent) {\n u.setPresenceEvent(new MatrixEvent(rawEvent));\n }\n this.userModifiedMap[u.userId] = u.getLastModifiedTime();\n this.storeUser(u);\n });\n this.startedUp = true;\n });\n }\n\n /*\n * Close the database and destroy any associated workers\n */\n destroy() {\n return this.backend.destroy();\n }\n /**\n * Whether this store would like to save its data\n * Note that obviously whether the store wants to save or\n * not could change between calling this function and calling\n * save().\n *\n * @returns True if calling save() will actually save\n * (at the time this function is called).\n */\n wantsSave() {\n var now = Date.now();\n return now - this.syncTs > WRITE_DELAY_MS;\n }\n\n /**\n * Possibly write data to the database.\n *\n * @param force - True to force a save to happen\n * @returns Promise resolves after the write completes\n * (or immediately if no write is performed)\n */\n save() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (force || this.wantsSave()) {\n return this.reallySave();\n }\n return Promise.resolve();\n }\n /**\n * All member functions of `IndexedDBStore` that access the backend use this wrapper to\n * watch for failures after initial store startup, including `QuotaExceededError` as\n * free disk space changes, etc.\n *\n * When IndexedDB fails via any of these paths, we degrade this back to a `MemoryStore`\n * in place so that the current operation and all future ones are in-memory only.\n *\n * @param func - The degradable work to do.\n * @param fallback - The method name for fallback.\n * @returns A wrapped member function.\n */\n degradable(func, fallback) {\n var _this = this;\n var fallbackFn = fallback ? super[fallback] : null;\n return /*#__PURE__*/_asyncToGenerator(function* () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n try {\n return yield func.call(_this, ...args);\n } catch (e) {\n logger.error(\"IndexedDBStore failure, degrading to MemoryStore\", e);\n _this.emitter.emit(\"degraded\", e);\n try {\n // We try to delete IndexedDB after degrading since this store is only a\n // cache (the app will still function correctly without the data).\n // It's possible that deleting repair IndexedDB for the next app load,\n // potentially by making a little more space available.\n logger.log(\"IndexedDBStore trying to delete degraded data\");\n yield _this.backend.clearDatabase();\n logger.log(\"IndexedDBStore delete after degrading succeeded\");\n } catch (e) {\n logger.warn(\"IndexedDBStore delete after degrading failed\", e);\n }\n // Degrade the store from being an instance of `IndexedDBStore` to instead be\n // an instance of `MemoryStore` so that future API calls use the memory path\n // directly and skip IndexedDB entirely. This should be safe as\n // `IndexedDBStore` already extends from `MemoryStore`, so we are making the\n // store become its parent type in a way. The mutator methods of\n // `IndexedDBStore` also maintain the state that `MemoryStore` uses (many are\n // not overridden at all).\n if (fallbackFn) {\n return fallbackFn.call(_this, ...args);\n }\n }\n });\n }\n\n // XXX: ideally these would be stored in indexeddb as part of the room but,\n // we don't store rooms as such and instead accumulate entire sync responses atm.\n getPendingEvents(roomId) {\n var _superprop_getGetPendingEvents = () => super.getPendingEvents,\n _this2 = this;\n return _asyncToGenerator(function* () {\n if (!_this2.localStorage) return _superprop_getGetPendingEvents().call(_this2, roomId);\n var serialized = _this2.localStorage.getItem(pendingEventsKey(roomId));\n if (serialized) {\n try {\n return JSON.parse(serialized);\n } catch (e) {\n logger.error(\"Could not parse persisted pending events\", e);\n }\n }\n return [];\n })();\n }\n setPendingEvents(roomId, events) {\n var _superprop_getSetPendingEvents = () => super.setPendingEvents,\n _this3 = this;\n return _asyncToGenerator(function* () {\n if (!_this3.localStorage) return _superprop_getSetPendingEvents().call(_this3, roomId, events);\n if (events.length > 0) {\n _this3.localStorage.setItem(pendingEventsKey(roomId), JSON.stringify(events));\n } else {\n _this3.localStorage.removeItem(pendingEventsKey(roomId));\n }\n })();\n }\n saveToDeviceBatches(batches) {\n return this.backend.saveToDeviceBatches(batches);\n }\n getOldestToDeviceBatch() {\n return this.backend.getOldestToDeviceBatch();\n }\n removeToDeviceBatch(id) {\n return this.backend.removeToDeviceBatch(id);\n }\n getUserProfile(userId) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n return _this4.backend.getUserProfile(userId);\n })();\n }\n storeUserProfiles(userProfiles) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n return _this5.backend.storeUserProfiles(userProfiles);\n })();\n }\n removeUserProfiles(userIds) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n return _this6.backend.removeUserProfiles(userIds);\n })();\n }\n}\n\n/**\n * @param roomId - ID of the current room\n * @returns Storage key to retrieve pending events\n */\nfunction pendingEventsKey(roomId) {\n return \"mx_pending_events_\".concat(roomId);\n}\n//# sourceMappingURL=indexeddb.js.map","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\n/*\nCopyright 2017 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"../../logger.js\";\nimport { MemoryCryptoStore } from \"./memory-crypto-store.js\";\nimport { MigrationState, SESSION_BATCH_SIZE } from \"./base.js\";\n/**\n * Internal module. Partial localStorage backed storage for e2e.\n * This is not a full crypto store, just the in-memory store with\n * some things backed by localStorage. It exists because indexedDB\n * is broken in Firefox private mode or set to, \"will not remember\n * history\".\n */\n\nvar E2E_PREFIX = \"crypto.\";\nvar KEY_END_TO_END_MIGRATION_STATE = E2E_PREFIX + \"migration\";\nvar KEY_END_TO_END_ACCOUNT = E2E_PREFIX + \"account\";\nvar KEY_CROSS_SIGNING_KEYS = E2E_PREFIX + \"cross_signing_keys\";\nvar KEY_INBOUND_SESSION_PREFIX = E2E_PREFIX + \"inboundgroupsessions/\";\nvar KEY_INBOUND_SESSION_WITHHELD_PREFIX = E2E_PREFIX + \"inboundgroupsessions.withheld/\";\nvar KEY_ROOMS_PREFIX = E2E_PREFIX + \"rooms/\";\nvar KEY_SESSIONS_NEEDING_BACKUP = E2E_PREFIX + \"sessionsneedingbackup\";\nfunction keyEndToEndSessions(deviceKey) {\n return E2E_PREFIX + \"sessions/\" + deviceKey;\n}\nfunction keyEndToEndInboundGroupSession(senderKey, sessionId) {\n return KEY_INBOUND_SESSION_PREFIX + senderKey + \"/\" + sessionId;\n}\nfunction keyEndToEndInboundGroupSessionWithheld(senderKey, sessionId) {\n return KEY_INBOUND_SESSION_WITHHELD_PREFIX + senderKey + \"/\" + sessionId;\n}\nfunction keyEndToEndRoomsPrefix(roomId) {\n return KEY_ROOMS_PREFIX + roomId;\n}\nexport class LocalStorageCryptoStore extends MemoryCryptoStore {\n static exists(store) {\n var length = store.length;\n for (var i = 0; i < length; i++) {\n var _store$key;\n if ((_store$key = store.key(i)) !== null && _store$key !== void 0 && _store$key.startsWith(E2E_PREFIX)) {\n return true;\n }\n }\n return false;\n }\n constructor(store) {\n super();\n this.store = store;\n }\n\n /**\n * Returns true if this CryptoStore has ever been initialised (ie, it might contain data).\n *\n * Implementation of {@link CryptoStore.containsData}.\n *\n * @internal\n */\n containsData() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return LocalStorageCryptoStore.exists(_this.store);\n })();\n }\n\n /**\n * Get data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.getMigrationState}.\n *\n * @internal\n */\n getMigrationState() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _getJsonItem;\n return (_getJsonItem = getJsonItem(_this2.store, KEY_END_TO_END_MIGRATION_STATE)) !== null && _getJsonItem !== void 0 ? _getJsonItem : MigrationState.NOT_STARTED;\n })();\n }\n\n /**\n * Set data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.setMigrationState}.\n *\n * @internal\n */\n setMigrationState(migrationState) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n setJsonItem(_this3.store, KEY_END_TO_END_MIGRATION_STATE, migrationState);\n })();\n }\n\n // Olm Sessions\n\n countEndToEndSessions(txn, func) {\n var count = 0;\n for (var i = 0; i < this.store.length; ++i) {\n var key = this.store.key(i);\n if (key !== null && key !== void 0 && key.startsWith(keyEndToEndSessions(\"\"))) {\n var sessions = getJsonItem(this.store, key);\n count += Object.keys(sessions !== null && sessions !== void 0 ? sessions : {}).length;\n }\n }\n func(count);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _getEndToEndSessions(deviceKey) {\n var sessions = getJsonItem(this.store, keyEndToEndSessions(deviceKey));\n var fixedSessions = {};\n\n // fix up any old sessions to be objects rather than just the base64 pickle\n for (var _ref3 of Object.entries(sessions || {})) {\n var _ref2 = _slicedToArray(_ref3, 2);\n var sid = _ref2[0];\n var val = _ref2[1];\n if (typeof val === \"string\") {\n fixedSessions[sid] = {\n session: val\n };\n } else {\n fixedSessions[sid] = val;\n }\n }\n return fixedSessions;\n }\n getEndToEndSession(deviceKey, sessionId, txn, func) {\n var _sessions$sessionId;\n var sessions = this._getEndToEndSessions(deviceKey);\n func((_sessions$sessionId = sessions[sessionId]) !== null && _sessions$sessionId !== void 0 ? _sessions$sessionId : {});\n }\n getEndToEndSessions(deviceKey, txn, func) {\n var _this$_getEndToEndSes;\n func((_this$_getEndToEndSes = this._getEndToEndSessions(deviceKey)) !== null && _this$_getEndToEndSes !== void 0 ? _this$_getEndToEndSes : {});\n }\n storeEndToEndSession(deviceKey, sessionId, sessionInfo, txn) {\n var sessions = this._getEndToEndSessions(deviceKey) || {};\n sessions[sessionId] = sessionInfo;\n setJsonItem(this.store, keyEndToEndSessions(deviceKey), sessions);\n }\n\n /**\n * Fetch a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndSessionsBatch}.\n *\n * @internal\n */\n getEndToEndSessionsBatch() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var result = [];\n for (var i = 0; i < _this4.store.length; ++i) {\n var _this4$store$key;\n if ((_this4$store$key = _this4.store.key(i)) !== null && _this4$store$key !== void 0 && _this4$store$key.startsWith(keyEndToEndSessions(\"\"))) {\n var deviceKey = _this4.store.key(i).split(\"/\")[1];\n for (var session of Object.values(_this4._getEndToEndSessions(deviceKey))) {\n result.push(session);\n if (result.length >= SESSION_BATCH_SIZE) {\n return result;\n }\n }\n }\n }\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n\n // There are fewer sessions than the batch size; return the final batch of sessions.\n return result;\n })();\n }\n\n /**\n * Delete a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndSessionsBatch(sessions) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n for (var _ref5 of sessions) {\n var deviceKey = _ref5.deviceKey;\n var sessionId = _ref5.sessionId;\n var deviceSessions = _this5._getEndToEndSessions(deviceKey) || {};\n delete deviceSessions[sessionId];\n if (Object.keys(deviceSessions).length === 0) {\n // No more sessions for this device.\n _this5.store.removeItem(keyEndToEndSessions(deviceKey));\n } else {\n setJsonItem(_this5.store, keyEndToEndSessions(deviceKey), deviceSessions);\n }\n }\n })();\n }\n\n // Inbound Group Sessions\n\n getEndToEndInboundGroupSession(senderCurve25519Key, sessionId, txn, func) {\n func(getJsonItem(this.store, keyEndToEndInboundGroupSession(senderCurve25519Key, sessionId)), getJsonItem(this.store, keyEndToEndInboundGroupSessionWithheld(senderCurve25519Key, sessionId)));\n }\n storeEndToEndInboundGroupSession(senderCurve25519Key, sessionId, sessionData, txn) {\n setJsonItem(this.store, keyEndToEndInboundGroupSession(senderCurve25519Key, sessionId), sessionData);\n }\n\n /**\n * Count the number of Megolm sessions in the database.\n *\n * Implementation of {@link CryptoStore.countEndToEndInboundGroupSessions}.\n *\n * @internal\n */\n countEndToEndInboundGroupSessions() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var count = 0;\n for (var i = 0; i < _this6.store.length; ++i) {\n var key = _this6.store.key(i);\n if (key !== null && key !== void 0 && key.startsWith(KEY_INBOUND_SESSION_PREFIX)) {\n count += 1;\n }\n }\n return count;\n })();\n }\n\n /**\n * Fetch a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n getEndToEndInboundGroupSessionsBatch() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var sessionsNeedingBackup = getJsonItem(_this7.store, KEY_SESSIONS_NEEDING_BACKUP) || {};\n var result = [];\n for (var i = 0; i < _this7.store.length; ++i) {\n var key = _this7.store.key(i);\n if (key !== null && key !== void 0 && key.startsWith(KEY_INBOUND_SESSION_PREFIX)) {\n var key2 = key.slice(KEY_INBOUND_SESSION_PREFIX.length);\n\n // we can't use split, as the components we are trying to split out\n // might themselves contain '/' characters. We rely on the\n // senderKey being a (32-byte) curve25519 key, base64-encoded\n // (hence 43 characters long).\n\n result.push({\n senderKey: key2.slice(0, 43),\n sessionId: key2.slice(44),\n sessionData: getJsonItem(_this7.store, key),\n needsBackup: key2 in sessionsNeedingBackup\n });\n if (result.length >= SESSION_BATCH_SIZE) {\n return result;\n }\n }\n }\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n\n // There are fewer sessions than the batch size; return the final batch of sessions.\n return result;\n })();\n }\n\n /**\n * Delete a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndInboundGroupSessionsBatch(sessions) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n for (var _ref7 of sessions) {\n var senderKey = _ref7.senderKey;\n var sessionId = _ref7.sessionId;\n var k = keyEndToEndInboundGroupSession(senderKey, sessionId);\n _this8.store.removeItem(k);\n }\n })();\n }\n getEndToEndRooms(txn, func) {\n var result = {};\n var prefix = keyEndToEndRoomsPrefix(\"\");\n for (var i = 0; i < this.store.length; ++i) {\n var key = this.store.key(i);\n if (key !== null && key !== void 0 && key.startsWith(prefix)) {\n var roomId = key.slice(prefix.length);\n result[roomId] = getJsonItem(this.store, key);\n }\n }\n func(result);\n }\n markSessionsNeedingBackup(sessions) {\n var sessionsNeedingBackup = getJsonItem(this.store, KEY_SESSIONS_NEEDING_BACKUP) || {};\n for (var session of sessions) {\n sessionsNeedingBackup[session.senderKey + \"/\" + session.sessionId] = true;\n }\n setJsonItem(this.store, KEY_SESSIONS_NEEDING_BACKUP, sessionsNeedingBackup);\n return Promise.resolve();\n }\n\n /**\n * Delete all data from this store.\n *\n * @returns Promise which resolves when the store has been cleared.\n */\n deleteAllData() {\n this.store.removeItem(KEY_END_TO_END_ACCOUNT);\n return Promise.resolve();\n }\n\n // Olm account\n\n getAccount(txn, func) {\n var accountPickle = getJsonItem(this.store, KEY_END_TO_END_ACCOUNT);\n func(accountPickle);\n }\n storeAccount(txn, accountPickle) {\n setJsonItem(this.store, KEY_END_TO_END_ACCOUNT, accountPickle);\n }\n getCrossSigningKeys(txn, func) {\n var keys = getJsonItem(this.store, KEY_CROSS_SIGNING_KEYS);\n func(keys);\n }\n getSecretStorePrivateKey(txn, func, type) {\n var key = getJsonItem(this.store, E2E_PREFIX + \"ssss_cache.\".concat(type));\n func(key);\n }\n storeSecretStorePrivateKey(txn, type, key) {\n setJsonItem(this.store, E2E_PREFIX + \"ssss_cache.\".concat(type), key);\n }\n doTxn(mode, stores, func) {\n return Promise.resolve(func(null));\n }\n}\nfunction getJsonItem(store, key) {\n try {\n // if the key is absent, store.getItem() returns null, and\n // JSON.parse(null) === null, so this returns null.\n return JSON.parse(store.getItem(key));\n } catch (e) {\n logger.log(\"Error: Failed to get key %s: %s\", key, e.message);\n logger.log(e.stack);\n }\n return null;\n}\nfunction setJsonItem(store, key, val) {\n store.setItem(key, JSON.stringify(val));\n}\n//# sourceMappingURL=localStorage-crypto-store.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2017 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"../../logger.js\";\nimport { MigrationState, SESSION_BATCH_SIZE, ACCOUNT_OBJECT_KEY_MIGRATION_STATE } from \"./base.js\";\nimport { IndexedDBCryptoStore } from \"./indexeddb-crypto-store.js\";\nvar PROFILE_TRANSACTIONS = false;\n\n/**\n * Implementation of a CryptoStore which is backed by an existing\n * IndexedDB connection. Generally you want IndexedDBCryptoStore\n * which connects to the database and defers to one of these.\n *\n * @internal\n */\nexport class Backend {\n /**\n */\n constructor(db) {\n this.db = db;\n _defineProperty(this, \"nextTxnId\", 0);\n // make sure we close the db on `onversionchange` - otherwise\n // attempts to delete the database will block (and subsequent\n // attempts to re-create it will also block).\n db.onversionchange = () => {\n logger.log(\"versionchange for indexeddb \".concat(this.db.name, \": closing\"));\n db.close();\n };\n }\n containsData() {\n return _asyncToGenerator(function* () {\n throw Error(\"Not implemented for Backend\");\n })();\n }\n startup() {\n var _this = this;\n return _asyncToGenerator(function* () {\n // No work to do, as the startup is done by the caller (e.g IndexedDBCryptoStore)\n // by passing us a ready IDBDatabase instance\n return _this;\n })();\n }\n deleteAllData() {\n return _asyncToGenerator(function* () {\n throw Error(\"This is not implemented, call IDBFactory::deleteDatabase(dbName) instead.\");\n })();\n }\n\n /**\n * Get data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.getMigrationState}.\n */\n getMigrationState() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var migrationState = MigrationState.NOT_STARTED;\n yield _this2.doTxn(\"readonly\", [IndexedDBCryptoStore.STORE_ACCOUNT], txn => {\n var objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_ACCOUNT);\n var getReq = objectStore.get(ACCOUNT_OBJECT_KEY_MIGRATION_STATE);\n getReq.onsuccess = () => {\n var _getReq$result;\n migrationState = (_getReq$result = getReq.result) !== null && _getReq$result !== void 0 ? _getReq$result : MigrationState.NOT_STARTED;\n };\n });\n return migrationState;\n })();\n }\n\n /**\n * Set data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.setMigrationState}.\n */\n setMigrationState(migrationState) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n yield _this3.doTxn(\"readwrite\", [IndexedDBCryptoStore.STORE_ACCOUNT], txn => {\n var objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_ACCOUNT);\n objectStore.put(migrationState, ACCOUNT_OBJECT_KEY_MIGRATION_STATE);\n });\n })();\n }\n\n // Olm Account\n\n getAccount(txn, func) {\n var objectStore = txn.objectStore(\"account\");\n var getReq = objectStore.get(\"-\");\n getReq.onsuccess = function () {\n try {\n func(getReq.result || null);\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n }\n storeAccount(txn, accountPickle) {\n var objectStore = txn.objectStore(\"account\");\n objectStore.put(accountPickle, \"-\");\n }\n getCrossSigningKeys(txn, func) {\n var objectStore = txn.objectStore(\"account\");\n var getReq = objectStore.get(\"crossSigningKeys\");\n getReq.onsuccess = function () {\n try {\n func(getReq.result || null);\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n }\n getSecretStorePrivateKey(txn, func, type) {\n var objectStore = txn.objectStore(\"account\");\n var getReq = objectStore.get(\"ssss_cache:\".concat(type));\n getReq.onsuccess = function () {\n try {\n func(getReq.result || null);\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n }\n storeSecretStorePrivateKey(txn, type, key) {\n var objectStore = txn.objectStore(\"account\");\n objectStore.put(key, \"ssss_cache:\".concat(type));\n }\n\n // Olm Sessions\n\n countEndToEndSessions(txn, func) {\n var objectStore = txn.objectStore(\"sessions\");\n var countReq = objectStore.count();\n countReq.onsuccess = function () {\n try {\n func(countReq.result);\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n }\n getEndToEndSessions(deviceKey, txn, func) {\n var objectStore = txn.objectStore(\"sessions\");\n var idx = objectStore.index(\"deviceKey\");\n var getReq = idx.openCursor(deviceKey);\n var results = {};\n getReq.onsuccess = function () {\n var cursor = getReq.result;\n if (cursor) {\n results[cursor.value.sessionId] = {\n session: cursor.value.session,\n lastReceivedMessageTs: cursor.value.lastReceivedMessageTs\n };\n cursor.continue();\n } else {\n try {\n func(results);\n } catch (e) {\n abortWithException(txn, e);\n }\n }\n };\n }\n getEndToEndSession(deviceKey, sessionId, txn, func) {\n var objectStore = txn.objectStore(\"sessions\");\n var getReq = objectStore.get([deviceKey, sessionId]);\n getReq.onsuccess = function () {\n try {\n if (getReq.result) {\n func({\n session: getReq.result.session,\n lastReceivedMessageTs: getReq.result.lastReceivedMessageTs\n });\n } else {\n func(null);\n }\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n }\n storeEndToEndSession(deviceKey, sessionId, sessionInfo, txn) {\n var objectStore = txn.objectStore(\"sessions\");\n objectStore.put({\n deviceKey,\n sessionId,\n session: sessionInfo.session,\n lastReceivedMessageTs: sessionInfo.lastReceivedMessageTs\n });\n }\n\n /**\n * Fetch a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndSessionsBatch}.\n */\n getEndToEndSessionsBatch() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var result = [];\n yield _this4.doTxn(\"readonly\", [IndexedDBCryptoStore.STORE_SESSIONS], txn => {\n var objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_SESSIONS);\n var getReq = objectStore.openCursor();\n getReq.onsuccess = function () {\n try {\n var cursor = getReq.result;\n if (cursor) {\n result.push(cursor.value);\n if (result.length < SESSION_BATCH_SIZE) {\n cursor.continue();\n }\n }\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n });\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n return result;\n })();\n }\n\n /**\n * Delete a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndSessionsBatch(sessions) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n yield _this5.doTxn(\"readwrite\", [IndexedDBCryptoStore.STORE_SESSIONS], /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (txn) {\n try {\n var objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_SESSIONS);\n var _loop = function* _loop() {\n var deviceKey = _ref3.deviceKey;\n var sessionId = _ref3.sessionId;\n var req = objectStore.delete([deviceKey, sessionId]);\n yield new Promise(resolve => {\n req.onsuccess = resolve;\n });\n };\n for (var _ref3 of sessions) {\n yield* _loop();\n }\n } catch (e) {\n abortWithException(txn, e);\n }\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n })();\n }\n\n // Inbound group sessions\n\n getEndToEndInboundGroupSession(senderCurve25519Key, sessionId, txn, func) {\n var session = false;\n var withheld = false;\n var objectStore = txn.objectStore(\"inbound_group_sessions\");\n var getReq = objectStore.get([senderCurve25519Key, sessionId]);\n getReq.onsuccess = function () {\n try {\n if (getReq.result) {\n session = getReq.result.session;\n } else {\n session = null;\n }\n if (withheld !== false) {\n func(session, withheld);\n }\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n var withheldObjectStore = txn.objectStore(\"inbound_group_sessions_withheld\");\n var withheldGetReq = withheldObjectStore.get([senderCurve25519Key, sessionId]);\n withheldGetReq.onsuccess = function () {\n try {\n if (withheldGetReq.result) {\n withheld = withheldGetReq.result.session;\n } else {\n withheld = null;\n }\n if (session !== false) {\n func(session, withheld);\n }\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n }\n storeEndToEndInboundGroupSession(senderCurve25519Key, sessionId, sessionData, txn) {\n var objectStore = txn.objectStore(\"inbound_group_sessions\");\n objectStore.put({\n senderCurve25519Key,\n sessionId,\n session: sessionData\n });\n }\n\n /**\n * Count the number of Megolm sessions in the database.\n *\n * Implementation of {@link CryptoStore.countEndToEndInboundGroupSessions}.\n *\n * @internal\n */\n countEndToEndInboundGroupSessions() {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var result = 0;\n yield _this6.doTxn(\"readonly\", [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS], txn => {\n var sessionStore = txn.objectStore(IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS);\n var countReq = sessionStore.count();\n countReq.onsuccess = () => {\n result = countReq.result;\n };\n });\n return result;\n })();\n }\n\n /**\n * Fetch a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndInboundGroupSessionsBatch}.\n */\n getEndToEndInboundGroupSessionsBatch() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n var result = [];\n yield _this7.doTxn(\"readonly\", [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS, IndexedDBCryptoStore.STORE_BACKUP], txn => {\n var sessionStore = txn.objectStore(IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS);\n var backupStore = txn.objectStore(IndexedDBCryptoStore.STORE_BACKUP);\n var getReq = sessionStore.openCursor();\n getReq.onsuccess = function () {\n try {\n var cursor = getReq.result;\n if (cursor) {\n var backupGetReq = backupStore.get(cursor.key);\n backupGetReq.onsuccess = () => {\n result.push({\n senderKey: cursor.value.senderCurve25519Key,\n sessionId: cursor.value.sessionId,\n sessionData: cursor.value.session,\n needsBackup: backupGetReq.result !== undefined\n });\n if (result.length < SESSION_BATCH_SIZE) {\n cursor.continue();\n }\n };\n }\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n });\n if (result.length === 0) {\n // No sessions left.\n return null;\n }\n return result;\n })();\n }\n\n /**\n * Delete a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndInboundGroupSessionsBatch(sessions) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n yield _this8.doTxn(\"readwrite\", [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS], /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* (txn) {\n try {\n var objectStore = txn.objectStore(IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS);\n var _loop2 = function* _loop2() {\n var senderKey = _ref6.senderKey;\n var sessionId = _ref6.sessionId;\n var req = objectStore.delete([senderKey, sessionId]);\n yield new Promise(resolve => {\n req.onsuccess = resolve;\n });\n };\n for (var _ref6 of sessions) {\n yield* _loop2();\n }\n } catch (e) {\n abortWithException(txn, e);\n }\n });\n return function (_x2) {\n return _ref4.apply(this, arguments);\n };\n }());\n })();\n }\n getEndToEndDeviceData(txn, func) {\n var objectStore = txn.objectStore(\"device_data\");\n var getReq = objectStore.get(\"-\");\n getReq.onsuccess = function () {\n try {\n func(getReq.result || null);\n } catch (e) {\n abortWithException(txn, e);\n }\n };\n }\n getEndToEndRooms(txn, func) {\n var rooms = {};\n var objectStore = txn.objectStore(\"rooms\");\n var getReq = objectStore.openCursor();\n getReq.onsuccess = function () {\n var cursor = getReq.result;\n if (cursor) {\n rooms[cursor.key] = cursor.value;\n cursor.continue();\n } else {\n try {\n func(rooms);\n } catch (e) {\n abortWithException(txn, e);\n }\n }\n };\n }\n markSessionsNeedingBackup(sessions, txn) {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n if (!txn) {\n txn = _this9.db.transaction(\"sessions_needing_backup\", \"readwrite\");\n }\n var objectStore = txn.objectStore(\"sessions_needing_backup\");\n yield Promise.all(sessions.map(session => {\n return new Promise((resolve, reject) => {\n var req = objectStore.put({\n senderCurve25519Key: session.senderKey,\n sessionId: session.sessionId\n });\n req.onsuccess = resolve;\n req.onerror = reject;\n });\n }));\n })();\n }\n doTxn(mode, stores, func) {\n var log = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : logger;\n var startTime;\n var description;\n if (PROFILE_TRANSACTIONS) {\n var txnId = this.nextTxnId++;\n startTime = Date.now();\n description = \"\".concat(mode, \" crypto store transaction \").concat(txnId, \" in \").concat(stores);\n log.debug(\"Starting \".concat(description));\n }\n var txn = this.db.transaction(stores, mode);\n var promise = promiseifyTxn(txn);\n var result = func(txn);\n if (PROFILE_TRANSACTIONS) {\n promise.then(() => {\n var elapsedTime = Date.now() - startTime;\n log.debug(\"Finished \".concat(description, \", took \").concat(elapsedTime, \" ms\"));\n }, () => {\n var elapsedTime = Date.now() - startTime;\n log.error(\"Failed \".concat(description, \", took \").concat(elapsedTime, \" ms\"));\n });\n }\n return promise.then(() => {\n return result;\n });\n }\n}\nvar DB_MIGRATIONS = [db => {\n createDatabase(db);\n}, db => {\n db.createObjectStore(\"account\");\n}, db => {\n var sessionsStore = db.createObjectStore(\"sessions\", {\n keyPath: [\"deviceKey\", \"sessionId\"]\n });\n sessionsStore.createIndex(\"deviceKey\", \"deviceKey\");\n}, db => {\n db.createObjectStore(\"inbound_group_sessions\", {\n keyPath: [\"senderCurve25519Key\", \"sessionId\"]\n });\n}, db => {\n db.createObjectStore(\"device_data\");\n}, db => {\n db.createObjectStore(\"rooms\");\n}, db => {\n db.createObjectStore(\"sessions_needing_backup\", {\n keyPath: [\"senderCurve25519Key\", \"sessionId\"]\n });\n}, db => {\n db.createObjectStore(\"inbound_group_sessions_withheld\", {\n keyPath: [\"senderCurve25519Key\", \"sessionId\"]\n });\n}, db => {\n var problemsStore = db.createObjectStore(\"session_problems\", {\n keyPath: [\"deviceKey\", \"time\"]\n });\n problemsStore.createIndex(\"deviceKey\", \"deviceKey\");\n db.createObjectStore(\"notified_error_devices\", {\n keyPath: [\"userId\", \"deviceId\"]\n });\n}, db => {\n db.createObjectStore(\"shared_history_inbound_group_sessions\", {\n keyPath: [\"roomId\"]\n });\n}, db => {\n db.createObjectStore(\"parked_shared_history\", {\n keyPath: [\"roomId\"]\n });\n}\n// Expand as needed.\n];\nexport var VERSION = DB_MIGRATIONS.length;\nexport function upgradeDatabase(db, oldVersion) {\n logger.log(\"Upgrading IndexedDBCryptoStore from version \".concat(oldVersion) + \" to \".concat(VERSION));\n DB_MIGRATIONS.forEach((migration, index) => {\n if (oldVersion <= index) migration(db);\n });\n}\nfunction createDatabase(db) {\n var outgoingRoomKeyRequestsStore = db.createObjectStore(\"outgoingRoomKeyRequests\", {\n keyPath: \"requestId\"\n });\n\n // we assume that the RoomKeyRequestBody will have room_id and session_id\n // properties, to make the index efficient.\n outgoingRoomKeyRequestsStore.createIndex(\"session\", [\"requestBody.room_id\", \"requestBody.session_id\"]);\n outgoingRoomKeyRequestsStore.createIndex(\"state\", \"state\");\n}\n/*\n * Aborts a transaction with a given exception\n * The transaction promise will be rejected with this exception.\n */\nfunction abortWithException(txn, e) {\n // We cheekily stick our exception onto the transaction object here\n // We could alternatively make the thing we pass back to the app\n // an object containing the transaction and exception.\n txn._mx_abortexception = e;\n try {\n txn.abort();\n } catch (_unused) {\n // sometimes we won't be able to abort the transaction\n // (ie. if it's aborted or completed)\n }\n}\nfunction promiseifyTxn(txn) {\n return new Promise((resolve, reject) => {\n txn.oncomplete = () => {\n if (txn._mx_abortexception !== undefined) {\n reject(txn._mx_abortexception);\n }\n resolve(null);\n };\n txn.onerror = event => {\n if (txn._mx_abortexception !== undefined) {\n reject(txn._mx_abortexception);\n } else {\n logger.log(\"Error performing indexeddb txn\", event);\n reject(txn.error);\n }\n };\n txn.onabort = event => {\n if (txn._mx_abortexception !== undefined) {\n reject(txn._mx_abortexception);\n } else {\n logger.log(\"Error performing indexeddb txn\", event);\n reject(txn.error);\n }\n };\n });\n}\n//# sourceMappingURL=indexeddb-crypto-store-backend.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2017 - 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { logger } from \"../../logger.js\";\nimport { LocalStorageCryptoStore } from \"./localStorage-crypto-store.js\";\nimport { MemoryCryptoStore } from \"./memory-crypto-store.js\";\nimport * as IndexedDBCryptoStoreBackend from \"./indexeddb-crypto-store-backend.js\";\nimport { InvalidCryptoStoreError, InvalidCryptoStoreState } from \"../../errors.js\";\nimport * as IndexedDBHelpers from \"../../indexeddb-helpers.js\";\nimport { MigrationState, ACCOUNT_OBJECT_KEY_MIGRATION_STATE } from \"./base.js\";\n/*\n * Internal module. indexeddb storage for e2e.\n */\n\n/**\n * An implementation of CryptoStore, which is normally backed by an indexeddb,\n * but with fallback to MemoryCryptoStore.\n */\nexport class IndexedDBCryptoStore {\n static exists(indexedDB, dbName) {\n return IndexedDBHelpers.exists(indexedDB, dbName);\n }\n\n /**\n * Utility to check if a legacy crypto store exists and has not been migrated.\n * Returns true if the store exists and has not been migrated, false otherwise.\n */\n static existsAndIsNotMigrated(indexedDb, dbName) {\n return new Promise((resolve, reject) => {\n var exists = true;\n var openDBRequest = indexedDb.open(dbName);\n openDBRequest.onupgradeneeded = () => {\n // Since we did not provide an explicit version when opening, this event\n // should only fire if the DB did not exist before at any version.\n exists = false;\n };\n openDBRequest.onblocked = () => reject(openDBRequest.error);\n openDBRequest.onsuccess = () => {\n var db = openDBRequest.result;\n if (!exists) {\n db.close();\n // The DB did not exist before, but has been created as part of this\n // existence check. Delete it now to restore previous state. Delete can\n // actually take a while to complete in some browsers, so don't wait for\n // it. This won't block future open calls that a store might issue next to\n // properly set up the DB.\n indexedDb.deleteDatabase(dbName);\n resolve(false);\n } else {\n var tx = db.transaction([IndexedDBCryptoStore.STORE_ACCOUNT], \"readonly\");\n var objectStore = tx.objectStore(IndexedDBCryptoStore.STORE_ACCOUNT);\n var getReq = objectStore.get(ACCOUNT_OBJECT_KEY_MIGRATION_STATE);\n getReq.onsuccess = () => {\n var _getReq$result;\n var migrationState = (_getReq$result = getReq.result) !== null && _getReq$result !== void 0 ? _getReq$result : MigrationState.NOT_STARTED;\n resolve(migrationState === MigrationState.NOT_STARTED);\n };\n getReq.onerror = () => {\n reject(getReq.error);\n };\n db.close();\n }\n };\n openDBRequest.onerror = () => reject(openDBRequest.error);\n });\n }\n /**\n * Create a new IndexedDBCryptoStore\n *\n * @param indexedDB - global indexedDB instance\n * @param dbName - name of db to connect to\n */\n constructor(indexedDB, dbName) {\n this.indexedDB = indexedDB;\n this.dbName = dbName;\n _defineProperty(this, \"backendPromise\", void 0);\n _defineProperty(this, \"backend\", void 0);\n }\n\n /**\n * Returns true if this CryptoStore has ever been initialised (ie, it might contain data).\n *\n * Implementation of {@link CryptoStore.containsData}.\n *\n * @internal\n */\n containsData() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return IndexedDBCryptoStore.exists(_this.indexedDB, _this.dbName);\n })();\n }\n\n /**\n * Ensure the database exists and is up-to-date, or fall back to\n * a local storage or in-memory store.\n *\n * This must be called before the store can be used.\n *\n * @returns resolves to either an IndexedDBCryptoStoreBackend.Backend,\n * or a MemoryCryptoStore\n */\n startup() {\n if (this.backendPromise) {\n return this.backendPromise;\n }\n this.backendPromise = new Promise((resolve, reject) => {\n if (!this.indexedDB) {\n reject(new Error(\"no indexeddb support available\"));\n return;\n }\n logger.log(\"connecting to indexeddb \".concat(this.dbName));\n var req = this.indexedDB.open(this.dbName, IndexedDBCryptoStoreBackend.VERSION);\n req.onupgradeneeded = ev => {\n var db = req.result;\n var oldVersion = ev.oldVersion;\n IndexedDBCryptoStoreBackend.upgradeDatabase(db, oldVersion);\n };\n req.onblocked = () => {\n logger.log(\"can't yet open IndexedDBCryptoStore because it is open elsewhere\");\n };\n req.onerror = ev => {\n logger.log(\"Error connecting to indexeddb\", ev);\n reject(req.error);\n };\n req.onsuccess = () => {\n var db = req.result;\n logger.log(\"connected to indexeddb \".concat(this.dbName));\n resolve(new IndexedDBCryptoStoreBackend.Backend(db));\n };\n }).then(backend => {\n // Edge has IndexedDB but doesn't support compund keys which we use fairly extensively.\n // Try a dummy query which will fail if the browser doesn't support compund keys, so\n // we can fall back to a different backend.\n return backend.doTxn(\"readonly\", [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS, IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS_WITHHELD], txn => {\n backend.getEndToEndInboundGroupSession(\"\", \"\", txn, () => {});\n }).then(() => backend);\n }).catch(e => {\n if (e.name === \"VersionError\") {\n logger.warn(\"Crypto DB is too new for us to use!\", e);\n // don't fall back to a different store: the user has crypto data\n // in this db so we should use it or nothing at all.\n throw new InvalidCryptoStoreError(InvalidCryptoStoreState.TooNew);\n }\n logger.warn(\"unable to connect to indexeddb \".concat(this.dbName) + \": falling back to localStorage store: \".concat(e));\n try {\n if (!(globalThis.localStorage instanceof Storage)) {\n throw new Error(\"localStorage is not available\");\n }\n return new LocalStorageCryptoStore(globalThis.localStorage);\n } catch (e) {\n logger.warn(\"Unable to open localStorage: falling back to in-memory store: \".concat(e));\n return new MemoryCryptoStore();\n }\n }).then(backend => {\n this.backend = backend;\n return backend;\n });\n return this.backendPromise;\n }\n\n /**\n * Delete all data from this store.\n *\n * @returns resolves when the store has been cleared.\n */\n deleteAllData() {\n return new Promise((resolve, reject) => {\n if (!this.indexedDB) {\n reject(new Error(\"no indexeddb support available\"));\n return;\n }\n logger.log(\"Removing indexeddb instance: \".concat(this.dbName));\n var req = this.indexedDB.deleteDatabase(this.dbName);\n req.onblocked = () => {\n logger.log(\"can't yet delete IndexedDBCryptoStore because it is open elsewhere\");\n };\n req.onerror = ev => {\n logger.log(\"Error deleting data from indexeddb\", ev);\n reject(req.error);\n };\n req.onsuccess = () => {\n logger.log(\"Removed indexeddb instance: \".concat(this.dbName));\n resolve();\n };\n }).catch(e => {\n // in firefox, with indexedDB disabled, this fails with a\n // DOMError. We treat this as non-fatal, so that people can\n // still use the app.\n logger.warn(\"unable to delete IndexedDBCryptoStore: \".concat(e));\n });\n }\n\n /**\n * Get data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.getMigrationState}.\n *\n * @internal\n */\n getMigrationState() {\n return this.backend.getMigrationState();\n }\n\n /**\n * Set data on how much of the libolm to Rust Crypto migration has been done.\n *\n * Implementation of {@link CryptoStore.setMigrationState}.\n *\n * @internal\n */\n setMigrationState(migrationState) {\n return this.backend.setMigrationState(migrationState);\n }\n\n // Olm Account\n\n /*\n * Get the account pickle from the store.\n * This requires an active transaction. See doTxn().\n *\n * @param txn - An active transaction. See doTxn().\n * @param func - Called with the account pickle\n */\n getAccount(txn, func) {\n this.backend.getAccount(txn, func);\n }\n\n /**\n * Write the account pickle to the store.\n * This requires an active transaction. See doTxn().\n *\n * @param txn - An active transaction. See doTxn().\n * @param accountPickle - The new account pickle to store.\n */\n storeAccount(txn, accountPickle) {\n this.backend.storeAccount(txn, accountPickle);\n }\n\n /**\n * Get the public part of the cross-signing keys (eg. self-signing key,\n * user signing key).\n *\n * @param txn - An active transaction. See doTxn().\n * @param func - Called with the account keys object:\n * `{ key_type: base64 encoded seed }` where key type = user_signing_key_seed or self_signing_key_seed\n */\n getCrossSigningKeys(txn, func) {\n this.backend.getCrossSigningKeys(txn, func);\n }\n\n /**\n * @param txn - An active transaction. See doTxn().\n * @param func - Called with the private key\n * @param type - A key type\n */\n getSecretStorePrivateKey(txn, func, type) {\n this.backend.getSecretStorePrivateKey(txn, func, type);\n }\n\n /**\n * Write the cross-signing private keys back to the store\n *\n * @param txn - An active transaction. See doTxn().\n * @param type - The type of cross-signing private key to store\n * @param key - keys object as getCrossSigningKeys()\n */\n storeSecretStorePrivateKey(txn, type, key) {\n this.backend.storeSecretStorePrivateKey(txn, type, key);\n }\n\n // Olm sessions\n\n /**\n * Returns the number of end-to-end sessions in the store\n * @param txn - An active transaction. See doTxn().\n * @param func - Called with the count of sessions\n */\n countEndToEndSessions(txn, func) {\n this.backend.countEndToEndSessions(txn, func);\n }\n\n /**\n * Retrieve a specific end-to-end session between the logged-in user\n * and another device.\n * @param deviceKey - The public key of the other device.\n * @param sessionId - The ID of the session to retrieve\n * @param txn - An active transaction. See doTxn().\n * @param func - Called with A map from sessionId\n * to session information object with 'session' key being the\n * Base64 end-to-end session and lastReceivedMessageTs being the\n * timestamp in milliseconds at which the session last received\n * a message.\n */\n getEndToEndSession(deviceKey, sessionId, txn, func) {\n this.backend.getEndToEndSession(deviceKey, sessionId, txn, func);\n }\n\n /**\n * Retrieve the end-to-end sessions between the logged-in user and another\n * device.\n * @param deviceKey - The public key of the other device.\n * @param txn - An active transaction. See doTxn().\n * @param func - Called with A map from sessionId\n * to session information object with 'session' key being the\n * Base64 end-to-end session and lastReceivedMessageTs being the\n * timestamp in milliseconds at which the session last received\n * a message.\n */\n getEndToEndSessions(deviceKey, txn, func) {\n this.backend.getEndToEndSessions(deviceKey, txn, func);\n }\n\n /**\n * Store a session between the logged-in user and another device\n * @param deviceKey - The public key of the other device.\n * @param sessionId - The ID for this end-to-end session.\n * @param sessionInfo - Session information object\n * @param txn - An active transaction. See doTxn().\n */\n storeEndToEndSession(deviceKey, sessionId, sessionInfo, txn) {\n this.backend.storeEndToEndSession(deviceKey, sessionId, sessionInfo, txn);\n }\n\n /**\n * Count the number of Megolm sessions in the database.\n *\n * Implementation of {@link CryptoStore.countEndToEndInboundGroupSessions}.\n *\n * @internal\n */\n countEndToEndInboundGroupSessions() {\n return this.backend.countEndToEndInboundGroupSessions();\n }\n\n /**\n * Fetch a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndSessionsBatch}.\n *\n * @internal\n */\n getEndToEndSessionsBatch() {\n return this.backend.getEndToEndSessionsBatch();\n }\n\n /**\n * Delete a batch of Olm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndSessionsBatch(sessions) {\n return this.backend.deleteEndToEndSessionsBatch(sessions);\n }\n\n // Inbound group sessions\n\n /**\n * Retrieve the end-to-end inbound group session for a given\n * server key and session ID\n * @param senderCurve25519Key - The sender's curve 25519 key\n * @param sessionId - The ID of the session\n * @param txn - An active transaction. See doTxn().\n * @param func - Called with A map from sessionId\n * to Base64 end-to-end session.\n */\n getEndToEndInboundGroupSession(senderCurve25519Key, sessionId, txn, func) {\n this.backend.getEndToEndInboundGroupSession(senderCurve25519Key, sessionId, txn, func);\n }\n\n /**\n * Writes an end-to-end inbound group session to the store.\n * If there already exists an inbound group session with the same\n * senderCurve25519Key and sessionID, it will be overwritten.\n * @param senderCurve25519Key - The sender's curve 25519 key\n * @param sessionId - The ID of the session\n * @param sessionData - The session data structure\n * @param txn - An active transaction. See doTxn().\n */\n storeEndToEndInboundGroupSession(senderCurve25519Key, sessionId, sessionData, txn) {\n this.backend.storeEndToEndInboundGroupSession(senderCurve25519Key, sessionId, sessionData, txn);\n }\n\n /**\n * Fetch a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.getEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n getEndToEndInboundGroupSessionsBatch() {\n return this.backend.getEndToEndInboundGroupSessionsBatch();\n }\n\n /**\n * Delete a batch of Megolm sessions from the database.\n *\n * Implementation of {@link CryptoStore.deleteEndToEndInboundGroupSessionsBatch}.\n *\n * @internal\n */\n deleteEndToEndInboundGroupSessionsBatch(sessions) {\n return this.backend.deleteEndToEndInboundGroupSessionsBatch(sessions);\n }\n\n /**\n * Get an object of `roomId->roomInfo` for all e2e rooms in the store\n * @param txn - An active transaction. See doTxn().\n * @param func - Function called with the end-to-end encrypted rooms\n */\n getEndToEndRooms(txn, func) {\n this.backend.getEndToEndRooms(txn, func);\n }\n\n /**\n * Mark sessions as needing to be backed up.\n * @param sessions - The sessions that need to be backed up.\n * @param txn - An active transaction. See doTxn(). (optional)\n * @returns resolves when the sessions are marked\n */\n markSessionsNeedingBackup(sessions, txn) {\n return this.backend.markSessionsNeedingBackup(sessions, txn);\n }\n\n /**\n * Perform a transaction on the crypto store. Any store methods\n * that require a transaction (txn) object to be passed in may\n * only be called within a callback of either this function or\n * one of the store functions operating on the same transaction.\n *\n * @param mode - 'readwrite' if you need to call setter\n * functions with this transaction. Otherwise, 'readonly'.\n * @param stores - List IndexedDBCryptoStore.STORE_*\n * options representing all types of object that will be\n * accessed or written to with this transaction.\n * @param func - Function called with the\n * transaction object: an opaque object that should be passed\n * to store functions.\n * @param log - A possibly customised log\n * @returns Promise that resolves with the result of the `func`\n * when the transaction is complete. If the backend is\n * async (ie. the indexeddb backend) any of the callback\n * functions throwing an exception will cause this promise to\n * reject with that exception. On synchronous backends, the\n * exception will propagate to the caller of the getFoo method.\n */\n doTxn(mode, stores, func, log) {\n return this.backend.doTxn(mode, stores, func, log);\n }\n}\n_defineProperty(IndexedDBCryptoStore, \"STORE_ACCOUNT\", \"account\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_SESSIONS\", \"sessions\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_INBOUND_GROUP_SESSIONS\", \"inbound_group_sessions\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_INBOUND_GROUP_SESSIONS_WITHHELD\", \"inbound_group_sessions_withheld\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_SHARED_HISTORY_INBOUND_GROUP_SESSIONS\", \"shared_history_inbound_group_sessions\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_PARKED_SHARED_HISTORY\", \"parked_shared_history\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_DEVICE_DATA\", \"device_data\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_ROOMS\", \"rooms\");\n_defineProperty(IndexedDBCryptoStore, \"STORE_BACKUP\", \"sessions_needing_backup\");\n//# sourceMappingURL=indexeddb-crypto-store.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport var ThreepidMedium = /*#__PURE__*/function (ThreepidMedium) {\n ThreepidMedium[\"Email\"] = \"email\";\n ThreepidMedium[\"Phone\"] = \"msisdn\";\n return ThreepidMedium;\n}({});\n\n// TODO: Are these types universal, or specific to just /account/3pid?\n//# sourceMappingURL=threepids.js.map","/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { UnstableValue } from \"../NamespacedValue.js\";\n\n// disable lint because these are wire responses\n/* eslint-disable camelcase */\n\n/**\n * Represents a response to the CSAPI `/refresh` endpoint.\n */\n\n/* eslint-enable camelcase */\n\n/**\n * Response to GET login flows as per https://spec.matrix.org/v1.3/client-server-api/#get_matrixclientv3login\n */\n\nexport var OAUTH_AWARE_PREFERRED_FLOW_FIELD = new UnstableValue(\"oauth_aware_preferred\", \"org.matrix.msc3824.delegated_oidc_compatibility\");\n\n/**\n * @alias\n * @deprecated use `OAUTH_AWARE_PREFERRED_FLOW_FIELD` instead.\n */\nexport var DELEGATED_OIDC_COMPATIBILITY = OAUTH_AWARE_PREFERRED_FLOW_FIELD;\n\n/**\n * Representation of SSO flow as per https://spec.matrix.org/v1.3/client-server-api/#client-login-via-sso\n */\n\nexport var IdentityProviderBrand = /*#__PURE__*/function (IdentityProviderBrand) {\n IdentityProviderBrand[\"Gitlab\"] = \"gitlab\";\n IdentityProviderBrand[\"Github\"] = \"github\";\n IdentityProviderBrand[\"Apple\"] = \"apple\";\n IdentityProviderBrand[\"Google\"] = \"google\";\n IdentityProviderBrand[\"Facebook\"] = \"facebook\";\n IdentityProviderBrand[\"Twitter\"] = \"twitter\";\n return IdentityProviderBrand;\n}({});\nexport var SSOAction = /*#__PURE__*/function (SSOAction) {\n /** The user intends to login to an existing account */\n SSOAction[\"LOGIN\"] = \"login\";\n /** The user intends to register for a new account */\n SSOAction[\"REGISTER\"] = \"register\";\n return SSOAction;\n}({});\n\n/**\n * A client can identify a user using their Matrix ID.\n * This can either be the fully qualified Matrix user ID, or just the localpart of the user ID.\n * @see https://spec.matrix.org/v1.7/client-server-api/#matrix-user-id\n */\n\n/**\n * A client can identify a user using a 3PID associated with the user’s account on the homeserver,\n * where the 3PID was previously associated using the /account/3pid API.\n * See the 3PID Types Appendix for a list of Third-party ID media.\n * @see https://spec.matrix.org/v1.7/client-server-api/#third-party-id\n */\n\n/**\n * A client can identify a user using a phone number associated with the user’s account,\n * where the phone number was previously associated using the /account/3pid API.\n * The phone number can be passed in as entered by the user; the homeserver will be responsible for canonicalising it.\n * If the client wishes to canonicalise the phone number,\n * then it can use the m.id.thirdparty identifier type with a medium of msisdn instead.\n *\n * The country is the two-letter uppercase ISO-3166-1 alpha-2 country code that the number in phone should be parsed as if it were dialled from.\n *\n * @see https://spec.matrix.org/v1.7/client-server-api/#phone-number\n */\n\n/**\n * User Identifiers usable for login & user-interactive authentication.\n *\n * Extensibly allows more than Matrix specified identifiers.\n */\n\n/**\n * Request body for POST /login request\n * @see https://spec.matrix.org/v1.7/client-server-api/#post_matrixclientv3login\n */\n\n// Export for backwards compatibility\n\n/**\n * Response body for POST /login request\n * @see https://spec.matrix.org/v1.7/client-server-api/#post_matrixclientv3login\n */\n\n/**\n * The result of a successful `m.login.token` issuance request as per https://spec.matrix.org/v1.7/client-server-api/#post_matrixclientv1loginget_token\n */\n//# sourceMappingURL=auth.js.map","/*\nCopyright 2025 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * The timezone the user is currently in. The value of this property should\n * match a timezone provided in https://www.iana.org/time-zones.\n *\n * This key was introduced in Matrix v1.16.\n */\nexport var ProfileKeyTimezone = \"m.tz\";\n\n/**\n * The timezone the user is currently in. The value of this property should\n * match a timezone provided in https://www.iana.org/time-zones.\n *\n * @see https://github.com/matrix-org/matrix-spec-proposals/blob/clokep/profile-tz/proposals/4175-profile-field-time-zone.md\n * @experimental\n * @deprecated Unstable MSC field - Use `ProfileKeyTimezone`\n */\nexport var ProfileKeyMSC4175Timezone = \"us.cloke.msc4175.tz\";\n//# sourceMappingURL=profile-keys.js.map","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nexport class RelatedRelations {\n constructor(relations) {\n _defineProperty(this, \"relations\", void 0);\n this.relations = relations.filter(r => !!r);\n }\n getRelations() {\n return this.relations.reduce((c, p) => [...c, ...p.getRelations()], []);\n }\n on(ev, fn) {\n this.relations.forEach(r => r.on(ev, fn));\n }\n off(ev, fn) {\n this.relations.forEach(r => r.off(ev, fn));\n }\n}\n//# sourceMappingURL=related-relations.js.map","/*\nCopyright 2021 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { TypedEventEmitter } from \"../models/typed-event-emitter.js\";\nexport var LocalStorageErrors = /*#__PURE__*/function (LocalStorageErrors) {\n LocalStorageErrors[\"Global\"] = \"Global\";\n LocalStorageErrors[\"SetItemError\"] = \"setItem\";\n LocalStorageErrors[\"GetItemError\"] = \"getItem\";\n LocalStorageErrors[\"RemoveItemError\"] = \"removeItem\";\n LocalStorageErrors[\"ClearError\"] = \"clear\";\n LocalStorageErrors[\"QuotaExceededError\"] = \"QuotaExceededError\";\n return LocalStorageErrors;\n}({});\n/**\n * Used in element-web as a temporary hack to handle all the localStorage errors on the highest level possible\n * As of 15.11.2021 (DD/MM/YYYY) we're not properly handling local storage exceptions anywhere.\n * This store, as an event emitter, is used to re-emit local storage exceptions so that we can handle them\n * and show some kind of a \"It's dead Jim\" modal to the users, telling them that hey,\n * maybe you should check out your disk, as it's probably dying and your session may die with it.\n * See: https://github.com/vector-im/element-web/issues/18423\n */\nclass LocalStorageErrorsEventsEmitter extends TypedEventEmitter {}\nexport var localStorageErrorsEventsEmitter = new LocalStorageErrorsEventsEmitter();\n//# sourceMappingURL=local-storage-events-emitter.js.map","/*\nCopyright 2015-2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { MemoryCryptoStore } from \"./crypto/store/memory-crypto-store.js\";\nimport { MemoryStore } from \"./store/memory.js\";\nimport { MatrixScheduler } from \"./scheduler.js\";\nimport { MatrixClient } from \"./client.js\";\nimport { RoomWidgetClient } from \"./embedded.js\";\nexport * from \"./client.js\";\nexport * from \"./serverCapabilities.js\";\nexport * from \"./embedded.js\";\nexport * from \"./http-api/index.js\";\nexport * from \"./autodiscovery.js\";\nexport * from \"./sync-accumulator.js\";\nexport * from \"./errors.js\";\nexport * from \"./base64.js\";\nexport * from \"./models/beacon.js\";\nexport * from \"./models/event.js\";\nexport * from \"./models/room.js\";\nexport * from \"./models/event-timeline.js\";\nexport * from \"./models/event-timeline-set.js\";\nexport * from \"./models/poll.js\";\nexport * from \"./models/room-member.js\";\nexport * from \"./models/room-state.js\";\nexport * from \"./models/thread.js\";\nexport * from \"./models/typed-event-emitter.js\";\nexport * from \"./models/user.js\";\nexport * from \"./models/device.js\";\nexport * from \"./models/search-result.js\";\nexport * from \"./oidc/index.js\";\nexport * from \"./scheduler.js\";\nexport * from \"./filter.js\";\nexport * from \"./timeline-window.js\";\nexport * from \"./interactive-auth.js\";\nexport * from \"./version-support.js\";\nexport * from \"./service-types.js\";\nexport * from \"./store/memory.js\";\nexport * from \"./store/indexeddb.js\";\nexport * from \"./crypto/store/memory-crypto-store.js\";\nexport * from \"./crypto/store/localStorage-crypto-store.js\";\nexport * from \"./crypto/store/indexeddb-crypto-store.js\";\nexport * from \"./content-repo.js\";\nexport * from \"./@types/event.js\";\nexport * from \"./@types/PushRules.js\";\nexport * from \"./@types/partials.js\";\nexport * from \"./@types/requests.js\";\nexport * from \"./@types/search.js\";\nexport * from \"./@types/beacon.js\";\nexport * from \"./@types/topic.js\";\nexport * from \"./@types/location.js\";\nexport * from \"./@types/threepids.js\";\nexport * from \"./@types/auth.js\";\nexport * from \"./@types/polls.js\";\nexport * from \"./@types/retention.js\";\nexport * from \"./@types/read_receipts.js\";\nexport * from \"./@types/extensible_events.js\";\nexport * from \"./@types/membership.js\";\nexport * from \"./models/room-summary.js\";\nexport * from \"./models/event-status.js\";\nexport * from \"./models/profile-keys.js\";\nexport * from \"./models/related-relations.js\";\nexport { RoomStickyEventsEvent } from \"./models/room-sticky-events.js\";\nimport * as _ContentHelpers from \"./content-helpers.js\";\nexport { _ContentHelpers as ContentHelpers };\nimport * as _SecretStorage from \"./secret-storage.js\";\nexport { _SecretStorage as SecretStorage };\nexport { createNewMatrixCall, CallEvent } from \"./webrtc/call.js\";\nexport { GroupCall, GroupCallEvent, GroupCallIntent, GroupCallState, GroupCallType, GroupCallStatsReportEvent } from \"./webrtc/groupCall.js\";\nexport { SyncState, SetPresence } from \"./sync.js\";\nexport { SlidingSyncEvent } from \"./sliding-sync.js\";\nexport { MediaHandlerEvent } from \"./webrtc/mediaHandler.js\";\nexport { CallFeedEvent } from \"./webrtc/callFeed.js\";\nexport { StatsReport } from \"./webrtc/stats/statsReport.js\";\nexport { Relations, RelationsEvent } from \"./models/relations.js\";\nexport { TypedEventEmitter } from \"./models/typed-event-emitter.js\";\nexport { LocalStorageErrors, localStorageErrorsEventsEmitter } from \"./store/local-storage-events-emitter.js\";\nexport { IdentityProviderBrand, SSOAction } from \"./@types/auth.js\";\nexport { LocationAssetType } from \"./@types/location.js\";\nexport { DebugLogger } from \"./logger.js\";\nvar cryptoStoreFactory = () => new MemoryCryptoStore();\n\n/**\n * Configure a different factory to be used for creating crypto stores\n *\n * @param fac - a function which will return a new `CryptoStore`\n */\nexport function setCryptoStoreFactory(fac) {\n cryptoStoreFactory = fac;\n}\nfunction amendClientOpts(opts) {\n var _opts$store, _opts$scheduler, _opts$cryptoStore;\n opts.store = (_opts$store = opts.store) !== null && _opts$store !== void 0 ? _opts$store : new MemoryStore({\n localStorage: globalThis.localStorage\n });\n opts.scheduler = (_opts$scheduler = opts.scheduler) !== null && _opts$scheduler !== void 0 ? _opts$scheduler : new MatrixScheduler();\n opts.cryptoStore = (_opts$cryptoStore = opts.cryptoStore) !== null && _opts$cryptoStore !== void 0 ? _opts$cryptoStore : cryptoStoreFactory();\n return opts;\n}\n\n/**\n * Construct a Matrix Client. Similar to {@link MatrixClient}\n * except that the 'request', 'store' and 'scheduler' dependencies are satisfied.\n * @param opts - The configuration options for this client. These configuration\n * options will be passed directly to {@link MatrixClient}.\n *\n * @returns A new matrix client.\n * @see {@link MatrixClient} for the full list of options for\n * `opts`.\n */\nexport function createClient(opts) {\n return new MatrixClient(amendClientOpts(opts));\n}\n\n/**\n * Construct a Matrix Client that works in a widget.\n * This client has a subset of features compared to a full client.\n * It uses the widget-api to communicate with matrix. (widget \\<-\\> client \\<-\\> homeserver)\n * @returns A new matrix client with a subset of features.\n * @param opts - The configuration options for this client. These configuration\n * options will be passed directly to {@link MatrixClient}.\n * @param widgetApi - The widget api to use for communication.\n * @param capabilities - The capabilities the widget client will request.\n * @param roomId - The room id the widget is associated with.\n * @param sendContentLoaded - Whether to send a content loaded widget action immediately after initial setup.\n * Set to `false` if the widget uses `waitForIFrameLoad=true` (in this case the client does not expect a content loaded action at all),\n * or if the the widget wants to send the `ContentLoaded` action at a later point in time after the initial setup.\n */\nexport function createRoomWidgetClient(widgetApi, capabilities, roomId, opts) {\n var sendContentLoaded = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n return new RoomWidgetClient(widgetApi, capabilities, roomId, amendClientOpts(opts), sendContentLoaded);\n}\n//# sourceMappingURL=matrix.js.map","/*\nCopyright 2019 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport * as matrixcs from \"./matrix.js\";\nif (globalThis.__js_sdk_entrypoint) {\n throw new Error(\"Multiple matrix-js-sdk entrypoints detected!\");\n}\nglobalThis.__js_sdk_entrypoint = true;\n\n// just *accessing* indexedDB throws an exception in firefox with indexeddb disabled.\nvar indexedDB;\ntry {\n indexedDB = globalThis.indexedDB;\n} catch (_unused) {}\n\n// if our browser (appears to) support indexeddb, use an indexeddb crypto store.\nif (indexedDB) {\n matrixcs.setCryptoStoreFactory(() => new matrixcs.IndexedDBCryptoStore(indexedDB, \"matrix-js-sdk:crypto\"));\n}\nexport * from \"./matrix.js\";\nglobalThis.matrixcs = matrixcs;\n//# sourceMappingURL=browser-index.js.map","function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar browser = {exports: {}};\n\n// shim for using process in browser\nvar process = browser.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ());\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] };\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\nvar browserExports = browser.exports;\nconst process$1 = /*@__PURE__*/getDefaultExportFromCjs(browserExports);\n\nexport { process$1 as default, process$1 as process };\n//# sourceMappingURL=index.js.map\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.6\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.6\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n var context = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n context !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"<anonymous>\") &&\n (frame = frame.replace(\"<anonymous>\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, \"\" + value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n setValueForStyle(node, styleName$16, styleName);\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$286;\n if (canUseDOM) {\n var isSupported$jscomp$inline_427 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_427) {\n var element$jscomp$inline_428 = document.createElement(\"div\");\n element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_427 =\n \"function\" === typeof element$jscomp$inline_428.oninput;\n }\n JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n } else JSCompiler_inline_result$jscomp$286 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$286 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n else if (\"string\" === typeof type)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n null !== step.alternate &&\n oldFiber.delete(null === step.key ? newIdx : step.key),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n (\"forwards\" === node.memoizedProps.revealOrder ||\n \"backwards\" === node.memoizedProps.revealOrder ||\n \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n \"together\" === node.memoizedProps.revealOrder)\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$60 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$60 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$60 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n if (\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$66) {\n onActionError(actionQueue, node, error$66);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 42) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$69 = enqueueUpdate(provider, fiber, lane);\n null !== root$69 &&\n (scheduleUpdateOnFiber(root$69, provider, lane),\n entangleTransitions(root$69, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$73 in Component)\n void 0 === newProps[propName$73] &&\n (newProps[propName$73] = Component[propName$73]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$74) {\n setTimeout(function () {\n throw e$74;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$75) {\n setTimeout(function () {\n throw e$75;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (wrapperError = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 4096);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n var nextPrimaryChildren = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (showFallback = workInProgress.mode),\n (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: nextPrimaryChildren },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.sibling = nextProps),\n (workInProgress.child = nextPrimaryChildren),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n showFallback\n )),\n (nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2),\n (nextProps.return = workInProgress),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isSuspenseInstanceFallback(nextPrimaryChildren))\n ) {\n JSCompiler_temp =\n nextPrimaryChildren.nextSibling &&\n nextPrimaryChildren.nextSibling.dataset;\n if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n JSCompiler_temp = digest;\n nextProps = Error(formatProdErrorMessage(419));\n nextProps.stack = \"\";\n nextProps.digest = JSCompiler_temp;\n queueHydrationError({ value: nextProps, source: null, stack: null });\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_temp)\n ) {\n JSCompiler_temp = workInProgressRoot;\n if (\n null !== JSCompiler_temp &&\n ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n 0 !== nextProps && nextProps !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(nextPrimaryChildren) ||\n renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n isSuspenseInstancePending(nextPrimaryChildren)\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n nextPrimaryChildren.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = nextProps.fallback),\n (showFallback = workInProgress.mode),\n (prevState = current.child),\n (digest = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n null !== digest\n ? (nextPrimaryChildren = createWorkInProgress(\n digest,\n nextPrimaryChildren\n ))\n : ((nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n showFallback,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2)),\n (nextPrimaryChildren.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = nextPrimaryChildren),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (nextPrimaryChildren = current.child.memoizedState),\n null === nextPrimaryChildren\n ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n : ((showFallback = nextPrimaryChildren.cachePool),\n null !== showFallback\n ? ((prevState = CacheContext._currentValue),\n (showFallback =\n showFallback.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : showFallback))\n : (showFallback = getSuspendedCache()),\n (nextPrimaryChildren = {\n baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n cachePool: showFallback\n })),\n (nextProps.memoizedState = nextPrimaryChildren),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current,\n shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n push(suspenseStackCursor, suspenseContext);\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$102 = workInProgress.memoizedState;\n if (null !== state$102) {\n if (null !== state$102.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n state$102 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (state$102)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(suspenseStackCursor, suspenseStackCursor.current);\n if (state$102) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n ((renderLanes = workInProgress.type),\n (current = workInProgress.pendingProps),\n (props = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n ).createElement(renderLanes)),\n (props[internalInstanceKey] = workInProgress),\n (props[internalPropsKey] = current),\n setInitialProperties(props, renderLanes, current),\n markNodeAsHoistable(props),\n (workInProgress.stateNode = props))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (props = workInProgress.pendingProps),\n pushProvider(workInProgress, workInProgress.type, props.value),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n if (type) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var lastTailNode$106 = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === lastTailNode$106\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode$106.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags & 65011712),\n (subtreeFlags |= child$107.flags & 65011712),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n else\n for (child$107 = completedWork.child; null !== child$107; )\n (newChildLanes |= child$107.lanes | child$107.childLanes),\n (subtreeFlags |= child$107.subtreeFlags),\n (subtreeFlags |= child$107.flags),\n (child$107.return = completedWork),\n (child$107 = child$107.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \"<script>\\x3c/script>\";\n nextResource = nextResource.removeChild(\n nextResource.firstChild\n );\n break;\n case \"select\":\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(\"select\", {\n is: newProps.is\n })\n : ownerDocument.createElement(\"select\");\n newProps.multiple\n ? (nextResource.multiple = !0)\n : newProps.size && (nextResource.size = newProps.size);\n break;\n default:\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(type, { is: newProps.is })\n : ownerDocument.createElement(type);\n }\n }\n nextResource[internalInstanceKey] = workInProgress;\n nextResource[internalPropsKey] = newProps;\n a: for (\n ownerDocument = workInProgress.child;\n null !== ownerDocument;\n\n ) {\n if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n nextResource.appendChild(ownerDocument.stateNode);\n else if (\n 4 !== ownerDocument.tag &&\n 27 !== ownerDocument.tag &&\n null !== ownerDocument.child\n ) {\n ownerDocument.child.return = ownerDocument;\n ownerDocument = ownerDocument.child;\n continue;\n }\n if (ownerDocument === workInProgress) break a;\n for (; null === ownerDocument.sibling; ) {\n if (\n null === ownerDocument.return ||\n ownerDocument.return === workInProgress\n )\n break a;\n ownerDocument = ownerDocument.return;\n }\n ownerDocument.sibling.return = ownerDocument.return;\n ownerDocument = ownerDocument.sibling;\n }\n workInProgress.stateNode = nextResource;\n a: switch (\n (setInitialProperties(nextResource, type, newProps), type)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps = !!newProps.autoFocus;\n break a;\n case \"img\":\n newProps = !0;\n break a;\n default:\n newProps = !1;\n }\n newProps && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n workInProgress.type,\n null === current ? null : current.memoizedProps,\n workInProgress.pendingProps,\n renderLanes\n );\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n current = rootInstanceStackCursor.current;\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n renderLanes = workInProgress.memoizedProps;\n newProps = null;\n type = hydrationParentFiber;\n if (null !== type)\n switch (type.tag) {\n case 27:\n case 5:\n newProps = type.memoizedProps;\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === renderLanes ||\n (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, renderLanes)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress, !0);\n } else\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 31:\n renderLanes = workInProgress.memoizedState;\n if (null === current || null !== current.memoizedState) {\n newProps = popHydrationState(workInProgress);\n if (null !== renderLanes) {\n if (null === current) {\n if (!newProps) throw Error(formatProdErrorMessage(318));\n current = workInProgress.memoizedState;\n current = null !== current ? current.dehydrated : null;\n if (!current) throw Error(formatProdErrorMessage(557));\n current[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n current = !1;\n } else\n (renderLanes = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = renderLanes),\n (current = !0);\n if (!current) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n if (0 !== (workInProgress.flags & 128))\n throw Error(formatProdErrorMessage(558));\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n type = popHydrationState(workInProgress);\n if (null !== newProps && null !== newProps.dehydrated) {\n if (null === current) {\n if (!type) throw Error(formatProdErrorMessage(318));\n type = workInProgress.memoizedState;\n type = null !== type ? type.dehydrated : null;\n if (!type) throw Error(formatProdErrorMessage(317));\n type[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n type = !1;\n } else\n (type = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = type),\n (type = !0);\n if (!type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (workInProgress.lanes = renderLanes), workInProgress;\n renderLanes = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n renderLanes &&\n ((newProps = workInProgress.child),\n (type = null),\n null !== newProps.alternate &&\n null !== newProps.alternate.memoizedState &&\n null !== newProps.alternate.memoizedState.cachePool &&\n (type = newProps.alternate.memoizedState.cachePool.pool),\n (nextResource = null),\n null !== newProps.memoizedState &&\n null !== newProps.memoizedState.cachePool &&\n (nextResource = newProps.memoizedState.cachePool.pool),\n nextResource !== type && (newProps.flags |= 2048));\n renderLanes !== current &&\n renderLanes &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n return null;\n case 4:\n return (\n popHostContainer(),\n null === current &&\n listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n );\n case 19:\n pop(suspenseStackCursor);\n newProps = workInProgress.memoizedState;\n if (null === newProps) return bubbleProperties(workInProgress), null;\n type = 0 !== (workInProgress.flags & 128);\n nextResource = newProps.rendering;\n if (null === nextResource)\n if (type) cutOffTailIfNeeded(newProps, !1);\n else {\n if (\n 0 !== workInProgressRootExitStatus ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n nextResource = findFirstSuspended(current);\n if (null !== nextResource) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(newProps, !1);\n current = nextResource.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (renderLanes = workInProgress.child; null !== renderLanes; )\n resetWorkInProgress(renderLanes, current),\n (renderLanes = renderLanes.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current & 1) | 2\n );\n isHydrating &&\n pushTreeFork(workInProgress, newProps.treeForkCount);\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== newProps.tail &&\n now() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!type)\n if (\n ((current = findFirstSuspended(nextResource)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (type = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(newProps, !0),\n null === newProps.tail &&\n \"hidden\" === newProps.tailMode &&\n !nextResource.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now() - newProps.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n newProps.isBackwards\n ? ((nextResource.sibling = workInProgress.child),\n (workInProgress.child = nextResource))\n : ((current = newProps.last),\n null !== current\n ? (current.sibling = nextResource)\n : (workInProgress.child = nextResource),\n (newProps.last = nextResource));\n }\n if (null !== newProps.tail)\n return (\n (current = newProps.tail),\n (newProps.rendering = current),\n (newProps.tail = current.sibling),\n (newProps.renderingStartTime = now()),\n (current.sibling = null),\n (renderLanes = suspenseStackCursor.current),\n push(\n suspenseStackCursor,\n type ? (renderLanes & 1) | 2 : renderLanes & 1\n ),\n isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n current\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (renderLanes = workInProgress.updateQueue),\n null !== renderLanes &&\n scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n (renderLanes = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (renderLanes = current.memoizedState.cachePool.pool),\n (newProps = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (newProps = workInProgress.memoizedState.cachePool.pool),\n newProps !== renderLanes && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache),\n null\n );\n case 24:\n return (\n (renderLanes = null),\n null !== current && (renderLanes = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext),\n popHostContainer(),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 31:\n if (null !== workInProgress.memoizedState) {\n popSuspenseHandler(workInProgress);\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 19:\n return pop(suspenseStackCursor), null;\n case 4:\n return popHostContainer(), null;\n case 10:\n return popProvider(workInProgress.type), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n null !== current && pop(resumedCache),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext), null;\n case 25:\n return null;\n default:\n return null;\n }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext);\n popHostContainer();\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer();\n break;\n case 31:\n null !== interruptedWork.memoizedState &&\n popSuspenseHandler(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n pop(suspenseStackCursor);\n break;\n case 10:\n popProvider(interruptedWork.type);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext();\n null !== current && pop(resumedCache);\n break;\n case 24:\n popProvider(CacheContext);\n }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n lastEffect = void 0;\n var create = updateQueue.create,\n inst = updateQueue.inst;\n lastEffect = create();\n inst.destroy = lastEffect;\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor$jscomp$0\n) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n if (void 0 !== destroy) {\n inst.destroy = void 0;\n lastEffect = finishedWork;\n var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n destroy_ = destroy;\n try {\n destroy_();\n } catch (error) {\n captureCommitPhaseError(\n lastEffect,\n nearestMountedAncestor,\n error\n );\n }\n }\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n try {\n commitCallbacks(updateQueue, instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n try {\n var ref = current.ref;\n if (null !== ref) {\n switch (current.tag) {\n case 26:\n case 27:\n case 5:\n var instanceToUse = current.stateNode;\n break;\n case 30:\n instanceToUse = current.stateNode;\n break;\n default:\n instanceToUse = current.stateNode;\n }\n \"function\" === typeof ref\n ? (current.refCleanup = ref(instanceToUse))\n : (ref.current = instanceToUse);\n }\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n refCleanup();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n ref(null);\n } catch (error$140) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n }\n else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n a: switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n props.autoFocus && instance.focus();\n break a;\n case \"img\":\n props.src\n ? (instance.src = props.src)\n : props.srcSet && (instance.srcset = props.srcSet);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n var domElement = finishedWork.stateNode;\n updateProperties(domElement, finishedWork.type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n 4 === fiber.tag\n );\n}\nfunction getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n ) {\n if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before\n ? (9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent\n ).insertBefore(node, before)\n : ((before =\n 9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent),\n before.appendChild(node),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1));\n else if (\n 4 !== tag &&\n (27 === tag &&\n isSingletonScope(node.type) &&\n ((parent = node.stateNode), (before = null)),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before ? parent.insertBefore(node, before) : parent.appendChild(node);\n else if (\n 4 !== tag &&\n (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n var singleton = finishedWork.stateNode,\n props = finishedWork.memoizedProps;\n try {\n for (\n var type = finishedWork.type, attributes = singleton.attributes;\n attributes.length;\n\n )\n singleton.removeAttributeNode(attributes[0]);\n setInitialProperties(singleton, type, props);\n singleton[internalInstanceKey] = finishedWork;\n singleton[internalPropsKey] = props;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nvar offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$20) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n _enabled = !1;\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((firstChild = nextEffect),\n (root = firstChild.child),\n 0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n )\n (root.return = firstChild), (nextEffect = root);\n else\n for (; null !== nextEffect; ) {\n firstChild = nextEffect;\n focusNode = firstChild.alternate;\n root = firstChild.flags;\n switch (firstChild.tag) {\n case 0:\n if (\n 0 !== (root & 4) &&\n ((root = firstChild.updateQueue),\n (root = null !== root ? root.events : null),\n null !== root)\n )\n for (\n JSCompiler_temp = 0;\n JSCompiler_temp < root.length;\n JSCompiler_temp++\n )\n (anchorOffset = root[JSCompiler_temp]),\n (anchorOffset.ref.impl = anchorOffset.nextImpl);\n break;\n case 11:\n case 15:\n break;\n case 1:\n if (0 !== (root & 1024) && null !== focusNode) {\n root = void 0;\n JSCompiler_temp = firstChild;\n anchorOffset = focusNode.memoizedProps;\n focusNode = focusNode.memoizedState;\n selection = JSCompiler_temp.stateNode;\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n JSCompiler_temp.type,\n anchorOffset\n );\n root = selection.getSnapshotBeforeUpdate(\n resolvedPrevProps,\n focusNode\n );\n selection.__reactInternalSnapshotBeforeUpdate = root;\n } catch (error) {\n captureCommitPhaseError(\n JSCompiler_temp,\n JSCompiler_temp.return,\n error\n );\n }\n }\n break;\n case 3:\n if (0 !== (root & 1024))\n if (\n ((root = firstChild.stateNode.containerInfo),\n (JSCompiler_temp = root.nodeType),\n 9 === JSCompiler_temp)\n )\n clearContainerSparingly(root);\n else if (1 === JSCompiler_temp)\n switch (root.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(root);\n break;\n default:\n root.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n }\n root = firstChild.sibling;\n if (null !== root) {\n root.return = firstChild.return;\n nextEffect = root;\n break;\n }\n nextEffect = firstChild.return;\n }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitHookEffectListMount(5, finishedWork);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n try {\n finishedRoot.componentDidUpdate(\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n } catch (error$139) {\n captureCommitPhaseError(\n finishedWork,\n finishedWork.return,\n error$139\n );\n }\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n ) {\n current = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n current = finishedWork.child.stateNode;\n break;\n case 1:\n current = finishedWork.child.stateNode;\n }\n try {\n commitCallbacks(finishedRoot, current);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 27:\n null === current &&\n flags & 4 &&\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n null === current && flags & 4 && commitHostMount(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 31:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n flags & 64 &&\n ((finishedRoot = finishedWork.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated),\n null !== finishedRoot &&\n ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n null,\n finishedWork\n )),\n registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n break;\n case 22:\n flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!flags) {\n current =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n prevProps = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = flags;\n (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n ? recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n 0 !== (finishedWork.subtreeFlags & 8772)\n )\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = prevProps;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n break;\n case 30:\n break;\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n}\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n}\nvar hostParent = null,\n hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {}\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n isSingletonScope(deletedFiber.type) &&\n ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n releaseSingletonInstance(deletedFiber.stateNode);\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n case 6:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n (9 === hostParent.nodeType\n ? hostParent.body\n : \"HTML\" === hostParent.nodeName\n ? hostParent.ownerDocument.body\n : hostParent\n ).removeChild(deletedFiber.stateNode);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n hostParent.removeChild(deletedFiber.stateNode);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n clearHydrationBoundary(\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot,\n deletedFiber.stateNode\n ),\n retryIfBlockedOn(finishedRoot))\n : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n ) {\n finishedRoot = finishedRoot.dehydrated;\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 31:\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(formatProdErrorMessage(435, finishedWork.tag));\n }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n wakeable.then(retry, retry);\n }\n });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i],\n root = root$jscomp$0,\n returnFiber = parentFiber,\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n if (isSingletonScope(parent.type)) {\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n }\n break;\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent) throw Error(formatProdErrorMessage(160));\n commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n hostParent = null;\n hostParentIsContainer = !1;\n root = childToDelete.alternate;\n null !== root && (root.return = null);\n childToDelete.return = null;\n }\n if (parentFiber.subtreeFlags & 13886)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n var current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n commitHookEffectListMount(3, finishedWork),\n commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((flags = finishedWork.callbacks),\n null !== flags &&\n ((current = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === current ? flags : current.concat(flags)))));\n break;\n case 26:\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4) {\n var currentResource = null !== current ? current.memoizedState : null;\n flags = finishedWork.memoizedState;\n if (null === current)\n if (null === flags)\n if (null === finishedWork.stateNode) {\n a: {\n flags = finishedWork.type;\n current = finishedWork.memoizedProps;\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n b: switch (flags) {\n case \"title\":\n currentResource =\n hoistableRoot.getElementsByTagName(\"title\")[0];\n if (\n !currentResource ||\n currentResource[internalHoistableMarker] ||\n currentResource[internalInstanceKey] ||\n \"http://www.w3.org/2000/svg\" ===\n currentResource.namespaceURI ||\n currentResource.hasAttribute(\"itemprop\")\n )\n (currentResource = hoistableRoot.createElement(flags)),\n hoistableRoot.head.insertBefore(\n currentResource,\n hoistableRoot.querySelector(\"head > title\")\n );\n setInitialProperties(currentResource, flags, current);\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n break a;\n case \"link\":\n var maybeNodes = getHydratableHoistableCache(\n \"link\",\n \"href\",\n hoistableRoot\n ).get(flags + (current.href || \"\"));\n if (maybeNodes)\n for (var i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n currentResource.getAttribute(\"href\") ===\n (null == current.href || \"\" === current.href\n ? null\n : current.href) &&\n currentResource.getAttribute(\"rel\") ===\n (null == current.rel ? null : current.rel) &&\n currentResource.getAttribute(\"title\") ===\n (null == current.title ? null : current.title) &&\n currentResource.getAttribute(\"crossorigin\") ===\n (null == current.crossOrigin\n ? null\n : current.crossOrigin))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n case \"meta\":\n if (\n (maybeNodes = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n hoistableRoot\n ).get(flags + (current.content || \"\")))\n )\n for (i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n currentResource.getAttribute(\"content\") ===\n (null == current.content\n ? null\n : \"\" + current.content) &&\n currentResource.getAttribute(\"name\") ===\n (null == current.name ? null : current.name) &&\n currentResource.getAttribute(\"property\") ===\n (null == current.property\n ? null\n : current.property) &&\n currentResource.getAttribute(\"http-equiv\") ===\n (null == current.httpEquiv\n ? null\n : current.httpEquiv) &&\n currentResource.getAttribute(\"charset\") ===\n (null == current.charSet\n ? null\n : current.charSet))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n default:\n throw Error(formatProdErrorMessage(468, flags));\n }\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n }\n finishedWork.stateNode = flags;\n } else\n mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n );\n else\n finishedWork.stateNode = acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n );\n else\n currentResource !== flags\n ? (null === currentResource\n ? null !== current.stateNode &&\n ((current = current.stateNode),\n current.parentNode.removeChild(current))\n : currentResource.count--,\n null === flags\n ? mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n )\n : acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n ))\n : null === flags &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n }\n break;\n case 27:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n null !== current &&\n flags & 4 &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 5:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n hoistableRoot = finishedWork.stateNode;\n try {\n setTextContent(hoistableRoot, \"\");\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((hoistableRoot = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n hoistableRoot,\n null !== current ? current.memoizedProps : hoistableRoot\n ));\n flags & 1024 && (needsFormReset = !0);\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(formatProdErrorMessage(162));\n flags = finishedWork.memoizedProps;\n current = finishedWork.stateNode;\n try {\n current.nodeValue = flags;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n tagCaches = null;\n hoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = hoistableRoot;\n commitReconciliationEffects(finishedWork);\n if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n try {\n retryIfBlockedOn(root.containerInfo);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n break;\n case 4:\n flags = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = flags;\n break;\n case 12:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n break;\n case 31:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now());\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 22:\n hoistableRoot = null !== finishedWork.memoizedState;\n var wasHidden = null !== current && null !== current.memoizedState,\n prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n commitReconciliationEffects(finishedWork);\n if (flags & 8192)\n a: for (\n root = finishedWork.stateNode,\n root._visibility = hoistableRoot\n ? root._visibility & -2\n : root._visibility | 1,\n hoistableRoot &&\n (null === current ||\n wasHidden ||\n offscreenSubtreeIsHidden ||\n offscreenSubtreeWasHidden ||\n recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n current = null,\n root = finishedWork;\n ;\n\n ) {\n if (5 === root.tag || 26 === root.tag) {\n if (null === current) {\n wasHidden = current = root;\n try {\n if (((currentResource = wasHidden.stateNode), hoistableRoot))\n (maybeNodes = currentResource.style),\n \"function\" === typeof maybeNodes.setProperty\n ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n : (maybeNodes.display = \"none\");\n else {\n i = wasHidden.stateNode;\n var styleProp = wasHidden.memoizedProps.style,\n display =\n void 0 !== styleProp &&\n null !== styleProp &&\n styleProp.hasOwnProperty(\"display\")\n ? styleProp.display\n : null;\n i.style.display =\n null == display || \"boolean\" === typeof display\n ? \"\"\n : (\"\" + display).trim();\n }\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (6 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n wasHidden.stateNode.nodeValue = hoistableRoot\n ? \"\"\n : wasHidden.memoizedProps;\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (18 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n var instance = wasHidden.stateNode;\n hoistableRoot\n ? hideOrUnhideDehydratedBoundary(instance, !0)\n : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (\n ((22 !== root.tag && 23 !== root.tag) ||\n null === root.memoizedState ||\n root === finishedWork) &&\n null !== root.child\n ) {\n root.child.return = root;\n root = root.child;\n continue;\n }\n if (root === finishedWork) break a;\n for (; null === root.sibling; ) {\n if (null === root.return || root.return === finishedWork) break a;\n current === root && (current = null);\n root = root.return;\n }\n current === root && (current = null);\n root.sibling.return = root.return;\n root = root.sibling;\n }\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((current = flags.retryQueue),\n null !== current &&\n ((flags.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, current))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n recursivelyTraverseMutationEffects(root, finishedWork),\n commitReconciliationEffects(finishedWork);\n }\n}\nfunction commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n for (\n var hostParentFiber, parentFiber = finishedWork.return;\n null !== parentFiber;\n\n ) {\n if (isHostParent(parentFiber)) {\n hostParentFiber = parentFiber;\n break;\n }\n parentFiber = parentFiber.return;\n }\n if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n switch (hostParentFiber.tag) {\n case 27:\n var parent = hostParentFiber.stateNode,\n before = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, before, parent);\n break;\n case 5:\n var parent$141 = hostParentFiber.stateNode;\n hostParentFiber.flags & 32 &&\n (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n var before$142 = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n break;\n case 3:\n case 4:\n var parent$143 = hostParentFiber.stateNode.containerInfo,\n before$144 = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n before$144,\n parent$143\n );\n break;\n default:\n throw Error(formatProdErrorMessage(161));\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedWork = parentFiber;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 27:\n releaseSingletonInstance(finishedWork.stateNode);\n case 26:\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 30:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n default:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n includeWorkInProgressEffects\n) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var current = parentFiber.alternate,\n finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n commitHookEffectListMount(4, finishedWork);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n current = finishedWork;\n finishedRoot = current.stateNode;\n if (\"function\" === typeof finishedRoot.componentDidMount)\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n current = finishedWork;\n finishedRoot = current.updateQueue;\n if (null !== finishedRoot) {\n var instance = current.stateNode;\n try {\n var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n finishedRoot < hiddenCallbacks.length;\n finishedRoot++\n )\n callCallback(hiddenCallbacks[finishedRoot], instance);\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n break;\n case 31:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 30:\n break;\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && current.refCount++,\n null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 && commitHookEffectListMount(9, finishedWork);\n break;\n case 1:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 3:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n ((finishedRoot = null),\n null !== finishedWork.alternate &&\n (finishedRoot = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== finishedRoot &&\n (finishedWork.refCount++,\n null != finishedRoot && releaseCache(finishedRoot)));\n break;\n case 12:\n if (flags & 2048) {\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n finishedRoot = finishedWork.stateNode;\n try {\n var _finishedWork$memoize2 = finishedWork.memoizedProps,\n id = _finishedWork$memoize2.id,\n onPostCommit = _finishedWork$memoize2.onPostCommit;\n \"function\" === typeof onPostCommit &&\n onPostCommit(\n id,\n null === finishedWork.alternate ? \"mount\" : \"update\",\n finishedRoot.passiveEffectDuration,\n -0\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 31:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 13:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n _finishedWork$memoize2 = finishedWork.stateNode;\n id = finishedWork.alternate;\n null !== finishedWork.memoizedState\n ? _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n : _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((_finishedWork$memoize2._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256) || !1\n ));\n flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n committedLanes$jscomp$0,\n committedTransitions$jscomp$0,\n includeWorkInProgressEffects\n) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n committedLanes = committedLanes$jscomp$0,\n committedTransitions = committedTransitions$jscomp$0,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookEffectListMount(8, finishedWork);\n break;\n case 23:\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? instance._visibility & 2\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((instance._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n parentFiber,\n committedLanes,\n suspendedState\n) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(\n parentFiber,\n committedLanes,\n suspendedState\n ),\n (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n fiber,\n committedLanes,\n suspendedState\n) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n fiber.flags & suspenseyCommitFlag &&\n null !== fiber.memoizedState &&\n suspendResource(\n suspendedState,\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n );\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ));\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n }\n}\nfunction detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 12:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n instance._visibility & 2 &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((instance._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n deletions = parentFiber;\n switch (deletions.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, deletions, deletions.return);\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n break;\n case 22:\n i = deletions.stateNode;\n i._visibility & 2 &&\n ((i._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(deletions));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor\n) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect;\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n break;\n case 23:\n case 22:\n if (\n null !== fiber.memoizedState &&\n null !== fiber.memoizedState.cachePool\n ) {\n var cache = fiber.memoizedState.cachePool.pool;\n null != cache && cache.refCount++;\n }\n break;\n case 24:\n releaseCache(fiber.memoizedState.cache);\n }\n cache = fiber.child;\n if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n cache = nextEffect;\n var sibling = cache.sibling,\n returnFiber = cache.return;\n detachFiberAfterEffects(cache);\n if (cache === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break a;\n }\n nextEffect = returnFiber;\n }\n }\n}\nvar DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n cacheSignal: function () {\n return readContext(CacheContext).controller.signal;\n }\n },\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n executionContext = 0,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n workInProgressSuspendedReason = 0,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = 0,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n globalMostRecentTransitionTime = 0,\n workInProgressRootRenderTargetTime = Infinity,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n pendingEffectsStatus = 0,\n pendingEffectsRoot = null,\n pendingFinishedWork = null,\n pendingEffectsLanes = 0,\n pendingEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n pendingRecoverableErrors = null,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n : null !== ReactSharedInternals.T\n ? requestTransitionLane()\n : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n if (0 === workInProgressDeferredLane)\n if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n var lane = nextTransitionDeferredLane;\n nextTransitionDeferredLane <<= 1;\n 0 === (nextTransitionDeferredLane & 3932160) &&\n (nextTransitionDeferredLane = 262144);\n workInProgressDeferredLane = lane;\n } else workInProgressDeferredLane = 536870912;\n lane = suspenseHandlerStackCursor.current;\n null !== lane && (lane.flags |= 32);\n return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n if (\n (root === workInProgressRoot &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (0 === (executionContext & 2) || root !== workInProgressRoot)\n root === workInProgressRoot &&\n (0 === (executionContext & 2) &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n 4 === workInProgressRootExitStatus &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 127) &&\n 0 === (lanes & root$jscomp$0.expiredLanes)) ||\n checkIfRootIsPrerendering(root$jscomp$0, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root$jscomp$0, lanes)\n : renderRootSync(root$jscomp$0, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (0 === exitStatus) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root$jscomp$0, lanes, 0, !1);\n break;\n } else {\n forceSync = root$jscomp$0.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (2 === exitStatus) {\n renderWasConcurrent = lanes;\n if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n var JSCompiler_inline_result = 0;\n else\n (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n (JSCompiler_inline_result =\n 0 !== JSCompiler_inline_result\n ? JSCompiler_inline_result\n : JSCompiler_inline_result & 536870912\n ? 536870912\n : 0);\n if (0 !== JSCompiler_inline_result) {\n lanes = JSCompiler_inline_result;\n a: {\n var root = root$jscomp$0;\n exitStatus = workInProgressRootConcurrentErrors;\n var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n JSCompiler_inline_result = renderRootSync(\n root,\n JSCompiler_inline_result,\n !1\n );\n if (2 !== JSCompiler_inline_result) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = 4;\n break a;\n }\n renderWasConcurrent = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = exitStatus;\n null !== renderWasConcurrent &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n renderWasConcurrent\n ));\n }\n exitStatus = JSCompiler_inline_result;\n }\n renderWasConcurrent = !1;\n if (2 !== exitStatus) continue;\n }\n }\n if (1 === exitStatus) {\n prepareFreshStack(root$jscomp$0, 0);\n markRootSuspended(root$jscomp$0, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root$jscomp$0;\n renderWasConcurrent = exitStatus;\n switch (renderWasConcurrent) {\n case 0:\n case 1:\n throw Error(formatProdErrorMessage(345));\n case 4:\n if ((lanes & 4194048) !== lanes) break;\n case 6:\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n case 2:\n workInProgressRootRecoverableErrors = null;\n break;\n case 3:\n case 5:\n break;\n default:\n throw Error(formatProdErrorMessage(329));\n }\n if (\n (lanes & 62914560) === lanes &&\n ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n 10 < exitStatus)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n pendingEffectsLanes = lanes;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n commitRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n \"Throttled\",\n -0,\n 0\n ),\n exitStatus\n );\n break a;\n }\n commitRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n null,\n -0,\n 0\n );\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n) {\n root.timeoutHandle = -1;\n suspendedCommitReason = finishedWork.subtreeFlags;\n if (\n suspendedCommitReason & 8192 ||\n 16785408 === (suspendedCommitReason & 16785408)\n ) {\n suspendedCommitReason = {\n stylesheets: null,\n count: 0,\n imgCount: 0,\n imgBytes: 0,\n suspenseyImages: [],\n waitingForImages: !0,\n waitingForViewTransition: !1,\n unsuspend: noop$1\n };\n accumulateSuspenseyCommitOnFiber(\n finishedWork,\n lanes,\n suspendedCommitReason\n );\n var timeoutOffset =\n (lanes & 62914560) === lanes\n ? globalMostRecentFallbackTime - now()\n : (lanes & 4194048) === lanes\n ? globalMostRecentTransitionTime - now()\n : 0;\n timeoutOffset = waitForCommitToBeReady(\n suspendedCommitReason,\n timeoutOffset\n );\n if (null !== timeoutOffset) {\n pendingEffectsLanes = lanes;\n root.cancelPendingCommit = timeoutOffset(\n commitRoot.bind(\n null,\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n exitStatus,\n suspendedCommitReason,\n null,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n return;\n }\n }\n commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n}\nfunction markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index$6 = 31 - clz32(lanes),\n lane = 1 << index$6;\n didAttemptEntireTree[index$6] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n return 0 === (executionContext & 6)\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n}\nfunction resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (0 === workInProgressSuspendedReason)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n (lastContextDependency = currentlyRenderingFiber$1 = null),\n resetHooksOnUnwind(interruptedWork),\n (thenableState$1 = null),\n (thenableIndexCounter$1 = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n}\nfunction prepareFreshStack(root, lanes) {\n var timeoutHandle = root.timeoutHandle;\n -1 !== timeoutHandle &&\n ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n pendingEffectsLanes = 0;\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n workInProgressRootExitStatus =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n 0 !== (lanes & 8) && (lanes |= lanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= lanes;\n 0 < allEntangledLanes;\n\n ) {\n var index$4 = 31 - clz32(allEntangledLanes),\n lane = 1 << index$4;\n lanes |= root[index$4];\n allEntangledLanes &= ~lane;\n }\n entangledRenderLanes = lanes;\n finishQueueingConcurrentUpdates();\n return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n currentlyRenderingFiber = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n thrownValue === SuspenseException || thrownValue === SuspenseActionException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 3))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 4))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? 8\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? 6\n : 1);\n workInProgressThrownValue = thrownValue;\n null === workInProgress &&\n ((workInProgressRootExitStatus = 1),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n ));\n}\nfunction shouldRemainOnPreviousScreen() {\n var handler = suspenseHandlerStackCursor.current;\n return null === handler\n ? !0\n : (workInProgressRootRenderLanes & 4194048) ===\n workInProgressRootRenderLanes\n ? null === shellBoundary\n ? !0\n : !1\n : (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n ? handler === shellBoundary\n : !1;\n}\nfunction pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = 4;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194048) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n lanes = !1;\n var exitStatus = workInProgressRootExitStatus;\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case 8:\n resetWorkInProgressStack();\n exitStatus = 6;\n break a;\n case 3:\n case 2:\n case 9:\n case 6:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n exitStatus = 0;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n exitStatus = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$165) {\n handleThrow(root, thrownValue$165);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n lastContextDependency = currentlyRenderingFiber$1 = null;\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return exitStatus;\n}\nfunction workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n ? ((workInProgressTransitions = null),\n (workInProgressRootRenderTargetTime = now() + 500),\n prepareFreshStack(root, lanes))\n : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n ));\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n lanes = workInProgress;\n var thrownValue = workInProgressThrownValue;\n b: switch (workInProgressSuspendedReason) {\n case 1:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n break;\n case 2:\n case 9:\n if (isThenableResolved(thrownValue)) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n (2 !== workInProgressSuspendedReason &&\n 9 !== workInProgressSuspendedReason) ||\n workInProgressRoot !== root ||\n (workInProgressSuspendedReason = 7);\n ensureRootIsScheduled(root);\n };\n thrownValue.then(lanes, lanes);\n break a;\n case 3:\n workInProgressSuspendedReason = 7;\n break a;\n case 4:\n workInProgressSuspendedReason = 5;\n break a;\n case 7:\n isThenableResolved(thrownValue)\n ? ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n break;\n case 5:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (\n resource\n ? preloadResource(resource)\n : hostFiber.stateNode.complete\n ) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n }\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n break;\n case 6:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n break;\n case 8:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = 6;\n break a;\n default:\n throw Error(formatProdErrorMessage(462));\n }\n }\n workLoopConcurrentByScheduler();\n break;\n } catch (thrownValue$167) {\n handleThrow(root, thrownValue$167);\n }\n while (1);\n lastContextDependency = currentlyRenderingFiber$1 = null;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress) return 0;\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n var next = unitOfWork;\n var current = next.alternate;\n switch (next.tag) {\n case 15:\n case 0:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type.render,\n next.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(next);\n default:\n unwindInterruptedWork(current, next),\n (next = workInProgress =\n resetWorkInProgress(next, entangledRenderLanes)),\n (next = beginWork(current, next, entangledRenderLanes));\n }\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n) {\n lastContextDependency = currentlyRenderingFiber$1 = null;\n resetHooksOnUnwind(unitOfWork);\n thenableState$1 = null;\n thenableIndexCounter$1 = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || 1 === suspendedReason) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n 2 === suspendedReason ||\n 9 === suspendedReason ||\n 3 === suspendedReason ||\n 6 === suspendedReason)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n unitOfWork = completedWork.return;\n var next = completeWork(\n completedWork.alternate,\n completedWork,\n entangledRenderLanes\n );\n if (null !== next) {\n workInProgress = next;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n 0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = 6;\n workInProgress = null;\n}\nfunction commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n root.cancelPendingCommit = null;\n do flushPendingEffects();\n while (0 !== pendingEffectsStatus);\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n if (null !== finishedWork) {\n if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n lanes,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n pendingFinishedWork = finishedWork;\n pendingEffectsRoot = root;\n pendingEffectsLanes = lanes;\n pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n pendingPassiveTransitions = transitions;\n pendingRecoverableErrors = recoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? ((root.callbackNode = null),\n (root.callbackPriority = 0),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects();\n return null;\n }))\n : ((root.callbackNode = null), (root.callbackPriority = 0));\n recoverableErrors = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n recoverableErrors = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n transitions = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n spawnedLane = executionContext;\n executionContext |= 4;\n try {\n commitBeforeMutationEffects(root, finishedWork, lanes);\n } finally {\n (executionContext = spawnedLane),\n (ReactDOMSharedInternals.p = transitions),\n (ReactSharedInternals.T = recoverableErrors);\n }\n }\n pendingEffectsStatus = 1;\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n }\n}\nfunction flushMutationEffects() {\n if (1 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n rootMutationHasEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n commitMutationEffectsOnFiber(finishedWork, root);\n var priorSelectionInformation = selectionInformation,\n curFocusedElem = getActiveElementDeep(root.containerInfo),\n priorFocusedElem = priorSelectionInformation.focusedElem,\n priorSelectionRange = priorSelectionInformation.selectionRange;\n if (\n curFocusedElem !== priorFocusedElem &&\n priorFocusedElem &&\n priorFocusedElem.ownerDocument &&\n containsNode(\n priorFocusedElem.ownerDocument.documentElement,\n priorFocusedElem\n )\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(priorFocusedElem)\n ) {\n var start = priorSelectionRange.start,\n end = priorSelectionRange.end;\n void 0 === end && (end = start);\n if (\"selectionStart\" in priorFocusedElem)\n (priorFocusedElem.selectionStart = start),\n (priorFocusedElem.selectionEnd = Math.min(\n end,\n priorFocusedElem.value.length\n ));\n else {\n var doc = priorFocusedElem.ownerDocument || document,\n win = (doc && doc.defaultView) || window;\n if (win.getSelection) {\n var selection = win.getSelection(),\n length = priorFocusedElem.textContent.length,\n start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n end$jscomp$0 =\n void 0 === priorSelectionRange.end\n ? start$jscomp$0\n : Math.min(priorSelectionRange.end, length);\n !selection.extend &&\n start$jscomp$0 > end$jscomp$0 &&\n ((curFocusedElem = end$jscomp$0),\n (end$jscomp$0 = start$jscomp$0),\n (start$jscomp$0 = curFocusedElem));\n var startMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n start$jscomp$0\n ),\n endMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n end$jscomp$0\n );\n if (\n startMarker &&\n endMarker &&\n (1 !== selection.rangeCount ||\n selection.anchorNode !== startMarker.node ||\n selection.anchorOffset !== startMarker.offset ||\n selection.focusNode !== endMarker.node ||\n selection.focusOffset !== endMarker.offset)\n ) {\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n start$jscomp$0 > end$jscomp$0\n ? (selection.addRange(range),\n selection.extend(endMarker.node, endMarker.offset))\n : (range.setEnd(endMarker.node, endMarker.offset),\n selection.addRange(range));\n }\n }\n }\n }\n doc = [];\n for (\n selection = priorFocusedElem;\n (selection = selection.parentNode);\n\n )\n 1 === selection.nodeType &&\n doc.push({\n element: selection,\n left: selection.scrollLeft,\n top: selection.scrollTop\n });\n \"function\" === typeof priorFocusedElem.focus &&\n priorFocusedElem.focus();\n for (\n priorFocusedElem = 0;\n priorFocusedElem < doc.length;\n priorFocusedElem++\n ) {\n var info = doc[priorFocusedElem];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n _enabled = !!eventsEnabled;\n selectionInformation = eventsEnabled = null;\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootMutationHasEffect);\n }\n }\n root.current = finishedWork;\n pendingEffectsStatus = 2;\n }\n}\nfunction flushLayoutEffects() {\n if (2 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n rootHasLayoutEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootHasLayoutEffect);\n }\n }\n pendingEffectsStatus = 3;\n }\n}\nfunction flushSpawnedWork() {\n if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n requestPaint();\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n recoverableErrors = pendingRecoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? (pendingEffectsStatus = 5)\n : ((pendingEffectsStatus = 0),\n (pendingFinishedWork = pendingEffectsRoot = null),\n releaseRootPooledCache(root, root.pendingLanes));\n var remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n lanesToEventPriority(lanes);\n finishedWork = finishedWork.stateNode;\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n try {\n injectedHook.onCommitFiberRoot(\n rendererID,\n finishedWork,\n void 0,\n 128 === (finishedWork.current.flags & 128)\n );\n } catch (err) {}\n if (null !== recoverableErrors) {\n finishedWork = ReactSharedInternals.T;\n remainingLanes = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n ReactSharedInternals.T = null;\n try {\n for (\n var onRecoverableError = root.onRecoverableError, i = 0;\n i < recoverableErrors.length;\n i++\n ) {\n var recoverableError = recoverableErrors[i];\n onRecoverableError(recoverableError.value, {\n componentStack: recoverableError.stack\n });\n }\n } finally {\n (ReactSharedInternals.T = finishedWork),\n (ReactDOMSharedInternals.p = remainingLanes);\n }\n }\n 0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n ensureRootIsScheduled(root);\n remainingLanes = root.pendingLanes;\n 0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n ? root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n : (nestedUpdateCount = 0);\n flushSyncWorkAcrossRoots_impl(0, !1);\n }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n if (5 !== pendingEffectsStatus) return !1;\n var root = pendingEffectsRoot,\n remainingLanes = pendingEffectsRemainingLanes;\n pendingEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n prevTransition = ReactSharedInternals.T,\n previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n ReactSharedInternals.T = null;\n renderPriority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = pendingEffectsRoot,\n lanes = pendingEffectsLanes;\n pendingEffectsStatus = 0;\n pendingFinishedWork = pendingEffectsRoot = null;\n pendingEffectsLanes = 0;\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n commitPassiveUnmountOnFiber(root$jscomp$0.current);\n commitPassiveMountOnFiber(\n root$jscomp$0,\n root$jscomp$0.current,\n lanes,\n renderPriority\n );\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {}\n return !0;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition),\n releaseRootPooledCache(root, remainingLanes);\n }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n break;\n } else if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n break;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (4 === workInProgressRootExitStatus ||\n (3 === workInProgressRootExitStatus &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n 300 > now() - globalMostRecentFallbackTime)\n ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 31:\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(formatProdErrorMessage(314));\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n didScheduleMicrotask ||\n ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root$170.pendingLanes;\n if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n else {\n var suspendedLanes = root$170.suspendedLanes,\n pingedLanes = root$170.pingedLanes;\n JSCompiler_inline_result =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n JSCompiler_inline_result &=\n pendingLanes & ~(suspendedLanes & ~pingedLanes);\n JSCompiler_inline_result =\n JSCompiler_inline_result & 201326741\n ? (JSCompiler_inline_result & 201326741) | 1\n : JSCompiler_inline_result\n ? JSCompiler_inline_result | 2\n : 0;\n }\n 0 !== JSCompiler_inline_result &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n } else\n (JSCompiler_inline_result = workInProgressRootRenderLanes),\n (JSCompiler_inline_result = getNextLanes(\n root$170,\n root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n null !== root$170.cancelPendingCommit ||\n -1 !== root$170.timeoutHandle\n )),\n 0 === (JSCompiler_inline_result & 3) ||\n checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n root$170 = root$170.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n}\nfunction processRootScheduleInImmediateTask() {\n processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n mightHavePendingSyncWork = didScheduleMicrotask = !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane);\n for (\n var currentTime = now(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n 0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index$5 = 31 - clz32(lanes),\n lane = 1 << index$5,\n expirationTime = expirationTimes[index$5];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes &&\n null !== pingedLanes &&\n cancelCallback$1(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (currentTime === root.callbackPriority) return currentTime;\n null !== pingedLanes && cancelCallback$1(pingedLanes);\n switch (lanesToEventPriority(suspendedLanes)) {\n case 2:\n case 8:\n suspendedLanes = UserBlockingPriority;\n break;\n case 32:\n suspendedLanes = NormalPriority$1;\n break;\n case 268435456:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n return (root.callbackNode = null), (root.callbackPriority = 0), null;\n var originalCallbackNode = root.callbackNode;\n if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n scheduleTaskForRootDuringMicrotask(root, now());\n return null != root.callbackNode && root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n if (flushPendingEffects()) return null;\n performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n scheduleMicrotask(function () {\n 0 !== (executionContext & 6)\n ? scheduleCallback$3(\n ImmediatePriority,\n processRootScheduleInImmediateTask\n )\n : processRootScheduleInMicrotask();\n });\n}\nfunction requestTransitionLane() {\n if (0 === currentEventTransitionLane) {\n var actionScopeLane = currentEntangledLane;\n 0 === actionScopeLane &&\n ((actionScopeLane = nextTransitionUpdateLane),\n (nextTransitionUpdateLane <<= 1),\n 0 === (nextTransitionUpdateLane & 261888) &&\n (nextTransitionUpdateLane = 256));\n currentEventTransitionLane = actionScopeLane;\n }\n return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n return null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n ? null\n : \"function\" === typeof actionProp\n ? actionProp\n : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n var temp = submitter.ownerDocument.createElement(\"input\");\n temp.name = submitter.name;\n temp.value = submitter.value;\n form.id && temp.setAttribute(\"form\", form.id);\n submitter.parentNode.insertBefore(temp, submitter);\n form = new FormData(form);\n temp.parentNode.removeChild(temp);\n return form;\n}\nfunction extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName && ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = submitter\n ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n : new FormData(nativeEventTarget);\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = submitter\n ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n : new FormData(nativeEventTarget)),\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n}\nfor (\n var i$jscomp$inline_1577 = 0;\n i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n i$jscomp$inline_1577++\n) {\n var eventName$jscomp$inline_1578 =\n simpleEventPluginEvents[i$jscomp$inline_1577],\n domEventName$jscomp$inline_1579 =\n eventName$jscomp$inline_1578.toLowerCase(),\n capitalizedEvent$jscomp$inline_1580 =\n eventName$jscomp$inline_1578[0].toUpperCase() +\n eventName$jscomp$inline_1578.slice(1);\n registerSimpleEvent(\n domEventName$jscomp$inline_1579,\n \"on\" + capitalizedEvent$jscomp$inline_1580\n );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n]);\nregisterTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i],\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n a: {\n var previousInstance = void 0;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n }\n }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n void 0 === JSCompiler_inline_result &&\n (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n JSCompiler_inline_result.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n}\nfunction addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n) {\n switch (getEventPriority(domEventName)) {\n case 2:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case 8:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (container === targetContainer) break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (\n (3 === grandTag || 4 === grandTag) &&\n nodeTag.stateNode.containerInfo === targetContainer\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance = instance;\n lastHostComponent = _instance.stateNode;\n _instance = _instance.tag;\n (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance = getListener(instance, reactEventName)),\n null != _instance &&\n inCapturePhase.push(\n createDispatchListener(instance, _instance, lastHostComponent)\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n reactName =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n SyntheticEventCtor =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n reactName &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (SyntheticEventCtor || reactName) {\n reactName =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (reactName = nativeEventTarget.ownerDocument)\n ? reactName.defaultView || reactName.parentWindow\n : window;\n if (SyntheticEventCtor) {\n if (\n ((reactEventType =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (SyntheticEventCtor = targetInst),\n (reactEventType = reactEventType\n ? getClosestInstanceFromNode(reactEventType)\n : null),\n null !== reactEventType &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(reactEventType)),\n (inCapturePhase = reactEventType.tag),\n reactEventType !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n reactEventType = null;\n } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n if (SyntheticEventCtor !== reactEventType) {\n inCapturePhase = SyntheticMouseEvent;\n _instance = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n (inCapturePhase = SyntheticPointerEvent),\n (_instance = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == SyntheticEventCtor\n ? reactName\n : getNodeFromInstance(SyntheticEventCtor);\n lastHostComponent =\n null == reactEventType\n ? reactName\n : getNodeFromInstance(reactEventType);\n reactName = new inCapturePhase(\n _instance,\n instance + \"leave\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n );\n reactName.target = accumulateTargetOnly;\n reactName.relatedTarget = lastHostComponent;\n _instance = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n reactEventType,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance = inCapturePhase));\n accumulateTargetOnly = _instance;\n if (SyntheticEventCtor && reactEventType)\n b: {\n inCapturePhase = getParent;\n reactEventName = SyntheticEventCtor;\n instance = reactEventType;\n lastHostComponent = 0;\n for (\n _instance = reactEventName;\n _instance;\n _instance = inCapturePhase(_instance)\n )\n lastHostComponent++;\n _instance = 0;\n for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n _instance++;\n for (; 0 < lastHostComponent - _instance; )\n (reactEventName = inCapturePhase(reactEventName)),\n lastHostComponent--;\n for (; 0 < _instance - lastHostComponent; )\n (instance = inCapturePhase(instance)), _instance--;\n for (; lastHostComponent--; ) {\n if (\n reactEventName === instance ||\n (null !== instance && reactEventName === instance.alternate)\n ) {\n inCapturePhase = reactEventName;\n break b;\n }\n reactEventName = inCapturePhase(reactEventName);\n instance = inCapturePhase(instance);\n }\n inCapturePhase = null;\n }\n else inCapturePhase = null;\n null !== SyntheticEventCtor &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactName,\n SyntheticEventCtor,\n inCapturePhase,\n !1\n );\n null !== reactEventType &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n reactEventType,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n \"focusout\" === domEventName &&\n targetInst &&\n \"number\" === reactName.type &&\n null != targetInst.memoizedProps.value &&\n setDefaultValue(reactName, \"number\", reactName.value);\n }\n handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n 229 === nativeEvent.keyCode &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticCompositionEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance2 = targetFiber,\n stateNode = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === stateNode ||\n ((_instance2 = getListener(targetFiber, captureName)),\n null != _instance2 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ),\n (_instance2 = getListener(targetFiber, reactName)),\n null != _instance2 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ));\n if (3 === targetFiber.tag) return listeners;\n targetFiber = targetFiber.return;\n }\n return [];\n}\nfunction getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance3 = target,\n alternate = _instance3.alternate,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n \"string\" === typeof value\n ? \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n \"body\" !== tag &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(domElement, tag, \"target\", props.target, props, null)));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n break;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n break;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n domElement.innerHTML = key;\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n key = sanitizeURL(\"\" + value);\n domElement.setAttributeNS(\n \"http://www.w3.org/1999/xlink\",\n \"xlink:href\",\n key\n );\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\" + value)\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : domElement.setAttribute(key, value);\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n )\n (key = aliases.get(key) || key),\n setValueForAttribute(domElement, key, value);\n }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n domElement.innerHTML = key;\n }\n }\n break;\n case \"children\":\n \"string\" === typeof value\n ? setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n break;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n break;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (!registrationNameDependencies.hasOwnProperty(key))\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (tag = key.slice(2, props ? key.length - 7 : void 0)),\n (prevValue = domElement[internalPropsKey] || null),\n (prevValue = null != prevValue ? prevValue[key] : null),\n \"function\" === typeof prevValue &&\n domElement.removeEventListener(tag, prevValue, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof prevValue &&\n null !== prevValue &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(tag, value, props);\n break a;\n }\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n }\n}\nfunction setInitialProperties(domElement, tag, props) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var propValue$184 = props[hasSrc];\n if (null != propValue$184)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = propValue$184;\n break;\n case \"type\":\n propValue = propValue$184;\n break;\n case \"checked\":\n checked = propValue$184;\n break;\n case \"defaultChecked\":\n defaultChecked = propValue$184;\n break;\n case \"value\":\n propKey = propValue$184;\n break;\n case \"defaultValue\":\n defaultValue = propValue$184;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propValue$184)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(domElement, tag, hasSrc, propValue$184, props, null);\n }\n }\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n return;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n }\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n break;\n default:\n setProp(domElement, tag, propValue, defaultValue, props, null);\n }\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n return;\n case \"option\":\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (propValue$184 in props)\n props.hasOwnProperty(propValue$184) &&\n ((hasSrc = props[propValue$184]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n propValue$184,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(domElement, tag, propKey, null, nextProps, lastProp);\n }\n }\n for (var propKey$201 in nextProps) {\n var propKey = nextProps[propKey$201];\n lastProp = lastProps[propKey$201];\n if (\n nextProps.hasOwnProperty(propKey$201) &&\n (null != propKey || null != lastProp)\n )\n switch (propKey$201) {\n case \"type\":\n type = propKey;\n break;\n case \"name\":\n name = propKey;\n break;\n case \"checked\":\n checked = propKey;\n break;\n case \"defaultChecked\":\n defaultChecked = propKey;\n break;\n case \"value\":\n value = propKey;\n break;\n case \"defaultValue\":\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n propKey$201,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = propKey$201 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n propKey$201 = type;\n break;\n case \"defaultValue\":\n defaultValue = type;\n break;\n case \"multiple\":\n value = type;\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n tag = defaultValue;\n lastProps = value;\n nextProps = propKey;\n null != propKey$201\n ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n : !!nextProps !== !!lastProps &&\n (null != tag\n ? updateOptions(domElement, !!lastProps, tag, !0)\n : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = propKey$201 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n propKey$201 = name;\n break;\n case \"defaultValue\":\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name) throw Error(formatProdErrorMessage(91));\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, propKey$201, propKey);\n return;\n case \"option\":\n for (var propKey$217 in lastProps)\n if (\n ((propKey$201 = lastProps[propKey$217]),\n lastProps.hasOwnProperty(propKey$217) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$217))\n )\n switch (propKey$217) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n propKey$217,\n null,\n nextProps,\n propKey$201\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((propKey$201 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n propKey$201 !== propKey &&\n (null != propKey$201 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n domElement.selected =\n propKey$201 &&\n \"function\" !== typeof propKey$201 &&\n \"symbol\" !== typeof propKey$201;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n propKey$201,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var propKey$222 in lastProps)\n (propKey$201 = lastProps[propKey$222]),\n lastProps.hasOwnProperty(propKey$222) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$222) &&\n setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n for (checked in nextProps)\n if (\n ((propKey$201 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n propKey$201 !== propKey &&\n (null != propKey$201 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey$201)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n propKey$201,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var propKey$227 in lastProps)\n (propKey$201 = lastProps[propKey$227]),\n lastProps.hasOwnProperty(propKey$227) &&\n void 0 !== propKey$201 &&\n !nextProps.hasOwnProperty(propKey$227) &&\n setPropOnCustomElement(\n domElement,\n tag,\n propKey$227,\n void 0,\n nextProps,\n propKey$201\n );\n for (defaultChecked in nextProps)\n (propKey$201 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n propKey$201 === propKey ||\n (void 0 === propKey$201 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n propKey$201,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var propKey$232 in lastProps)\n (propKey$201 = lastProps[propKey$232]),\n lastProps.hasOwnProperty(propKey$232) &&\n null != propKey$201 &&\n !nextProps.hasOwnProperty(propKey$232) &&\n setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n for (lastProp in nextProps)\n (propKey$201 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n propKey$201 === propKey ||\n (null == propKey$201 && null == propKey) ||\n setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n switch (initiatorType) {\n case \"css\":\n case \"script\":\n case \"font\":\n case \"img\":\n case \"image\":\n case \"input\":\n case \"link\":\n return !0;\n default:\n return !1;\n }\n}\nfunction estimateBandwidth() {\n if (\"function\" === typeof performance.getEntriesByType) {\n for (\n var count = 0,\n bits = 0,\n resourceEntries = performance.getEntriesByType(\"resource\"),\n i = 0;\n i < resourceEntries.length;\n i++\n ) {\n var entry = resourceEntries[i],\n transferSize = entry.transferSize,\n initiatorType = entry.initiatorType,\n duration = entry.duration;\n if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n initiatorType = 0;\n duration = entry.responseEnd;\n for (i += 1; i < resourceEntries.length; i++) {\n var overlapEntry = resourceEntries[i],\n overlapStartTime = overlapEntry.startTime;\n if (overlapStartTime > duration) break;\n var overlapTransferSize = overlapEntry.transferSize,\n overlapInitiatorType = overlapEntry.initiatorType;\n overlapTransferSize &&\n isLikelyStaticResource(overlapInitiatorType) &&\n ((overlapEntry = overlapEntry.responseEnd),\n (initiatorType +=\n overlapTransferSize *\n (overlapEntry < duration\n ? 1\n : (duration - overlapStartTime) /\n (overlapEntry - overlapStartTime))));\n }\n --i;\n bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n count++;\n if (10 < count) break;\n }\n }\n if (0 < count) return bits / count / 1e6;\n }\n return navigator.connection &&\n ((count = navigator.connection.downlink), \"number\" === typeof count)\n ? count\n : 5;\n}\nvar eventsEnabled = null,\n selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case \"http://www.w3.org/2000/svg\":\n return 1;\n case \"http://www.w3.org/1998/Math/MathML\":\n return 2;\n default:\n return 0;\n }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n if (0 === parentNamespace)\n switch (type) {\n case \"svg\":\n return 1;\n case \"math\":\n return 2;\n default:\n return 0;\n }\n return 1 === parentNamespace && \"foreignObject\" === type\n ? 0\n : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n}\nfunction isSingletonScope(type) {\n return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n var node = hydrationInstance,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(hydrationInstance);\n return;\n }\n depth--;\n } else if (\n \"$\" === node ||\n \"$?\" === node ||\n \"$~\" === node ||\n \"$!\" === node ||\n \"&\" === node\n )\n depth++;\n else if (\"html\" === node)\n releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n else if (\"head\" === node) {\n node = parentInstance.ownerDocument.head;\n releaseSingletonInstance(node);\n for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n nodeName = node$jscomp$0.nodeName;\n node$jscomp$0[internalHoistableMarker] ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n node.removeChild(node$jscomp$0);\n node$jscomp$0 = nextNode$jscomp$0;\n }\n } else\n \"body\" === node &&\n releaseSingletonInstance(parentInstance.ownerDocument.body);\n node = nextNode;\n } while (node);\n retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n var node = suspenseInstance;\n suspenseInstance = 0;\n do {\n var nextNode = node.nextSibling;\n 1 === node.nodeType\n ? isHidden\n ? ((node._stashedDisplay = node.style.display),\n (node.style.display = \"none\"))\n : ((node.style.display = node._stashedDisplay || \"\"),\n \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n : 3 === node.nodeType &&\n (isHidden\n ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n : (node.nodeValue = node._stashedText || \"\"));\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node))\n if (0 === suspenseInstance) break;\n else suspenseInstance--;\n else\n (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n suspenseInstance++;\n node = nextNode;\n } while (node);\n}\nfunction clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href || \"\" === anyProps.href\n ? null\n : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n for (; 8 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return (\n \"$!\" === instance.data ||\n (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n var ownerDocument = instance.ownerDocument;\n if (\"$~\" === instance.data) instance._reactRetry = callback;\n else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n callback();\n else {\n var listener = function () {\n callback();\n ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n };\n ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n instance._reactRetry = listener;\n }\n}\nfunction getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n \"$\" === nodeType ||\n \"$!\" === nodeType ||\n \"$?\" === nodeType ||\n \"$~\" === nodeType ||\n \"&\" === nodeType ||\n \"F!\" === nodeType ||\n \"F\" === nodeType\n )\n break;\n if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n }\n }\n return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n hydrationInstance = hydrationInstance.nextSibling;\n for (var depth = 0; hydrationInstance; ) {\n if (8 === hydrationInstance.nodeType) {\n var data = hydrationInstance.data;\n if (\"/$\" === data || \"/&\" === data) {\n if (0 === depth)\n return getNextHydratable(hydrationInstance.nextSibling);\n depth--;\n } else\n (\"$\" !== data &&\n \"$!\" !== data &&\n \"$?\" !== data &&\n \"$~\" !== data &&\n \"&\" !== data) ||\n depth++;\n }\n hydrationInstance = hydrationInstance.nextSibling;\n }\n return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n \"$\" === data ||\n \"$!\" === data ||\n \"$?\" === data ||\n \"$~\" === data ||\n \"&\" === data\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type) throw Error(formatProdErrorMessage(452));\n return type;\n case \"head\":\n type = props.head;\n if (!type) throw Error(formatProdErrorMessage(453));\n return type;\n case \"body\":\n type = props.body;\n if (!type) throw Error(formatProdErrorMessage(454));\n return type;\n default:\n throw Error(formatProdErrorMessage(451));\n }\n}\nfunction releaseSingletonInstance(instance) {\n for (var attributes = instance.attributes; attributes.length; )\n instance.removeAttributeNode(attributes[0]);\n detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n return \"function\" === typeof container.getRootNode\n ? container.getRootNode()\n : 9 === container.nodeType\n ? container\n : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n f: flushSyncWork,\n r: requestFormReset,\n D: prefetchDNS,\n C: preconnect,\n L: preload,\n m: preloadModule,\n X: preinitScript,\n S: preinitStyle,\n M: preinitModuleScript\n};\nfunction flushSyncWork() {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n}\nfunction prefetchDNS(href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n ((as = ownerDocument.createElement(\"link\")),\n setInitialProperties(as, \"link\", href),\n markNodeAsHoistable(as),\n ownerDocument.head.appendChild(as)));\n }\n}\nfunction preloadModule(href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n}\nfunction preinitStyle(href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: 0, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = 5;\n else {\n href = assign(\n { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= 1;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= 2;\n });\n state.loading |= 4;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n}\nfunction preinitScript(src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction preinitModuleScript(src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n var JSCompiler_inline_result = (JSCompiler_inline_result =\n rootInstanceStackCursor.current)\n ? getHoistableRoot(JSCompiler_inline_result)\n : null;\n if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((currentProps = getStyleKey(pendingProps.href)),\n (pendingProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles),\n (currentResource = pendingProps.get(currentProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n pendingProps.set(currentProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var styles$243 = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles,\n resource$244 = styles$243.get(type);\n resource$244 ||\n ((JSCompiler_inline_result =\n JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n (resource$244 = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: 0, preload: null }\n }),\n styles$243.set(type, resource$244),\n (styles$243 = JSCompiler_inline_result.querySelector(\n getStylesheetSelectorFromKey(type)\n )) &&\n !styles$243._p &&\n ((resource$244.instance = styles$243),\n (resource$244.state.loading = 5)),\n preloadPropsMap.has(type) ||\n ((pendingProps = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n }),\n preloadPropsMap.set(type, pendingProps),\n styles$243 ||\n preloadStylesheet(\n JSCompiler_inline_result,\n type,\n pendingProps,\n resource$244.state\n )));\n if (currentProps && null === currentResource)\n throw Error(formatProdErrorMessage(528, \"\"));\n return resource$244;\n }\n if (currentProps && null !== currentResource)\n throw Error(formatProdErrorMessage(529, \"\"));\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((currentProps = getScriptKey(pendingProps)),\n (pendingProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableScripts),\n (currentResource = pendingProps.get(currentProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n pendingProps.set(currentProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(formatProdErrorMessage(444, type));\n }\n}\nfunction getStyleKey(href) {\n return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n ? (state.loading = 1)\n : ((key = ownerDocument.createElement(\"link\")),\n (state.preload = key),\n key.addEventListener(\"load\", function () {\n return (state.loading |= 1);\n }),\n key.addEventListener(\"error\", function () {\n return (state.loading |= 2);\n }),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n \"style\"\n );\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var instance$249 = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (instance$249)\n return (\n (resource.state.loading |= 4),\n (resource.instance = instance$249),\n markNodeAsHoistable(instance$249),\n instance$249\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n instance$249 = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(instance$249);\n var linkInstance = instance$249;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance$249, \"link\", instance);\n resource.state.loading |= 4;\n insertStylesheet(instance$249, props.precedence, hoistableRoot);\n return (resource.instance = instance$249);\n case \"script\":\n instance$249 = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(instance$249)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(instance$249)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(formatProdErrorMessage(443, resource.type));\n }\n else\n \"stylesheet\" === resource.type &&\n 0 === (resource.state.loading & 4) &&\n ((instance = resource.instance),\n (resource.state.loading |= 4),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n if (1 === hostContext || null != props.itemProp) return !1;\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n )\n break;\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n )\n break;\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.disabled),\n \"string\" === typeof props.precedence && null == type\n );\n default:\n return !0;\n }\n case \"script\":\n if (\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async &&\n !props.onLoad &&\n !props.onError &&\n props.src &&\n \"string\" === typeof props.src\n )\n return !0;\n }\n return !1;\n}\nfunction preloadResource(resource) {\n return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n ? !1\n : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n 0 === (resource.state.loading & 4)\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= 4;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n 0 === (resource.state.loading & 3) &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count || 0 < state.imgCount\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4 + timeoutOffset);\n 0 < state.imgBytes &&\n 0 === estimatedBytesWithinLimit &&\n (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n var imgTimer = setTimeout(\n function () {\n state.waitingForImages = !1;\n if (\n 0 === state.count &&\n (state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets),\n state.unsuspend)\n ) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n },\n (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n timeoutOffset\n );\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n clearTimeout(imgTimer);\n };\n }\n : null;\n}\nfunction onUnsuspend() {\n this.count--;\n if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & 4)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(null);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(null, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(null, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= 4;\n }\n}\nvar HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: sharedNotPendingObject,\n _currentValue2: sharedNotPendingObject,\n _threadCount: 0\n};\nfunction FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = -1;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator\n) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n );\n tag = 1;\n !0 === isStrictMode && (tag |= 24);\n isStrictMode = createFiberImplClass(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n tag.refCount++;\n containerInfo.pooledCache = tag;\n tag.refCount++;\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n}\nfunction updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n) {\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback && (container.callback = callback);\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var lane = requestUpdateLane();\n lane = getBumpedLaneForHydrationByLane(lane);\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n markRetryLaneIfNotHydrated(fiber, lane);\n }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 2),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 8),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n 0 === (executionContext & 6) &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 31:\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (31 === tag) {\n targetNode = getActivityInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n}\nfunction getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"resize\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return 2;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return 8;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return 2;\n case UserBlockingPriority:\n return 8;\n case NormalPriority$1:\n case LowPriority:\n return 32;\n case IdlePriority:\n return 268435456;\n default:\n return 32;\n }\n default:\n return 32;\n }\n}\nvar hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (31 === targetInst) {\n if (\n ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n );\n currentReplayingEvent = nativeEventClone;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (null === findInstanceBlockingTarget(submitterOrAction || form))\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n startHostTransition(\n formInst,\n {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n },\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n}\nfunction retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n function handleNavigate(event) {\n event.canIntercept &&\n \"react-transition\" === event.info &&\n event.intercept({\n handler: function () {\n return new Promise(function (resolve) {\n return (pendingResolve = resolve);\n });\n },\n focusReset: \"manual\",\n scroll: \"manual\"\n });\n }\n function handleNavigateComplete() {\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n isCancelled || setTimeout(startFakeNavigation, 20);\n }\n function startFakeNavigation() {\n if (!isCancelled && !navigation.transition) {\n var currentEntry = navigation.currentEntry;\n currentEntry &&\n null != currentEntry.url &&\n navigation.navigate(currentEntry.url, {\n state: currentEntry.getState(),\n info: \"react-transition\",\n history: \"replace\"\n });\n }\n }\n if (\"object\" === typeof navigation) {\n var isCancelled = !1,\n pendingResolve = null;\n navigation.addEventListener(\"navigate\", handleNavigate);\n navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n setTimeout(startFakeNavigation, 100);\n return function () {\n isCancelled = !0;\n navigation.removeEventListener(\"navigate\", handleNavigate);\n navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n };\n }\n}\nfunction ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children) {\n var root = this._internalRoot;\n if (null === root) throw Error(formatProdErrorMessage(409));\n var current = root.current,\n lane = requestUpdateLane();\n updateContainerImpl(current, lane, children, root, null, null);\n };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function () {\n var root = this._internalRoot;\n if (null !== root) {\n this._internalRoot = null;\n var container = root.containerInfo;\n updateContainerImpl(root.current, 2, null, root, null, null);\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\nfunction ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n \"19.2.6\" !==\n isomorphicReactPackageVersion$jscomp$inline_1840\n)\n throw Error(\n formatProdErrorMessage(\n 527,\n isomorphicReactPackageVersion$jscomp$inline_1840,\n \"19.2.6\"\n )\n );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(formatProdErrorMessage(188));\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(formatProdErrorMessage(268, componentOrElement));\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n bundleType: 0,\n version: \"19.2.6\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.2.6\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (\n !hook$jscomp$inline_2348.isDisabled &&\n hook$jscomp$inline_2348.supportsFiber\n )\n try {\n (rendererID = hook$jscomp$inline_2348.inject(\n internals$jscomp$inline_2347\n )),\n (injectedHook = hook$jscomp$inline_2348);\n } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n null,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane();\n isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n options = isStrictMode;\n initialChildren.current.lanes = options;\n markRootUpdated$1(initialChildren, options);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.6\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n module.exports = require('./cjs/react-dom-client.development.js');\n}\n","/**\n * react-router v7.15.1\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\n\n// lib/router/history.ts\nvar Action = /* @__PURE__ */ ((Action2) => {\n Action2[\"Pop\"] = \"POP\";\n Action2[\"Push\"] = \"PUSH\";\n Action2[\"Replace\"] = \"REPLACE\";\n return Action2;\n})(Action || {});\nvar PopStateEventType = \"popstate\";\nfunction isLocation(obj) {\n return typeof obj === \"object\" && obj != null && \"pathname\" in obj && \"search\" in obj && \"hash\" in obj && \"state\" in obj && \"key\" in obj;\n}\nfunction createMemoryHistory(options = {}) {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries;\n entries = initialEntries.map(\n (entry, index2) => createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index2 === 0 ? \"default\" : void 0,\n typeof entry === \"string\" ? void 0 : entry.mask\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = \"POP\" /* Pop */;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state = null, key, mask) {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key,\n mask\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n function createHref2(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref: createHref2,\n createURL(to) {\n return new URL(createHref2(to), \"http://localhost\");\n },\n encodeLocation(to) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\"\n };\n },\n push(to, state) {\n action = \"PUSH\" /* Push */;\n let nextLocation = isLocation(to) ? to : createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = \"REPLACE\" /* Replace */;\n let nextLocation = isLocation(to) ? to : createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = \"POP\" /* Pop */;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\n}\nfunction createBrowserHistory(options = {}) {\n function createBrowserLocation(window2, globalHistory) {\n let maskedLocation = globalHistory.state?.masked;\n let { pathname, search, hash } = maskedLocation || window2.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null,\n globalHistory.state && globalHistory.state.key || \"default\",\n maskedLocation ? {\n pathname: window2.location.pathname,\n search: window2.location.search,\n hash: window2.location.hash\n } : void 0\n );\n }\n function createBrowserHref(window2, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\nfunction createHashHistory(options = {}) {\n function createHashLocation(window2, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window2.location.hash.substring(1));\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null,\n globalHistory.state && globalHistory.state.key || \"default\"\n );\n }\n function createHashHref(window2, to) {\n let base = window2.document.querySelector(\"base\");\n let href = \"\";\n if (base && base.getAttribute(\"href\")) {\n let url = window2.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n if (typeof console !== \"undefined\") console.warn(message);\n try {\n throw new Error(message);\n } catch (e) {\n }\n }\n}\nfunction createKey() {\n return Math.random().toString(36).substring(2, 10);\n}\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n masked: location.mask ? {\n pathname: location.pathname,\n search: location.search,\n hash: location.hash\n } : void 0\n };\n}\nfunction createLocation(current, to, state = null, key, mask) {\n let location = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...typeof to === \"string\" ? parsePath(to) : to,\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: to && to.key || key || createKey(),\n mask\n };\n return location;\n}\nfunction createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n}) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\nfunction parsePath(path) {\n let parsedPath = {};\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substring(hashIndex);\n path = path.substring(0, hashIndex);\n }\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substring(searchIndex);\n path = path.substring(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref2, validateLocation, options = {}) {\n let { window: window2 = document.defaultView, v5Compat = false } = options;\n let globalHistory = window2.history;\n let action = \"POP\" /* Pop */;\n let listener = null;\n let index = getIndex();\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n function getIndex() {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n function handlePop() {\n action = \"POP\" /* Pop */;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n function push(to, state) {\n action = \"PUSH\" /* Push */;\n let location = isLocation(to) ? to : createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location.mask || location);\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n window2.location.assign(url);\n }\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n function replace2(to, state) {\n action = \"REPLACE\" /* Replace */;\n let location = isLocation(to) ? to : createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location.mask || location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n function createURL(to) {\n return createBrowserURLImpl(to);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window2, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window2.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n return () => {\n window2.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref2(window2, to);\n },\n createURL,\n encodeLocation(to) {\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n },\n push,\n replace: replace2,\n go(n) {\n return globalHistory.go(n);\n }\n };\n return history;\n}\nfunction createBrowserURLImpl(to, isAbsolute = false) {\n let base = \"http://localhost\";\n if (typeof window !== \"undefined\") {\n base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n }\n invariant(base, \"No window.location.(origin|href) available to create URL\");\n let href = typeof to === \"string\" ? to : createPath(to);\n href = href.replace(/ $/, \"%20\");\n if (!isAbsolute && href.startsWith(\"//\")) {\n href = base + href;\n }\n return new URL(href, base);\n}\n\n// lib/router/utils.ts\nfunction createContext(defaultValue) {\n return { defaultValue };\n}\nvar _map;\nvar RouterContextProvider = class {\n /**\n * Create a new `RouterContextProvider` instance\n * @param init An optional initial context map to populate the provider with\n */\n constructor(init) {\n __privateAdd(this, _map, /* @__PURE__ */ new Map());\n if (init) {\n for (let [context, value] of init) {\n this.set(context, value);\n }\n }\n }\n /**\n * Access a value from the context. If no value has been set for the context,\n * it will return the context's `defaultValue` if provided, or throw an error\n * if no `defaultValue` was set.\n * @param context The context to get the value for\n * @returns The value for the context, or the context's `defaultValue` if no\n * value was set\n */\n get(context) {\n if (__privateGet(this, _map).has(context)) {\n return __privateGet(this, _map).get(context);\n }\n if (context.defaultValue !== void 0) {\n return context.defaultValue;\n }\n throw new Error(\"No value found for context\");\n }\n /**\n * Set a value for the context. If the context already has a value set, this\n * will overwrite it.\n *\n * @param context The context to set the value for\n * @param value The value to set for the context\n * @returns {void}\n */\n set(context, value) {\n __privateGet(this, _map).set(context, value);\n }\n};\n_map = new WeakMap();\nvar unsupportedLazyRouteObjectKeys = /* @__PURE__ */ new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\"\n]);\nfunction isUnsupportedLazyRouteObjectKey(key) {\n return unsupportedLazyRouteObjectKeys.has(\n key\n );\n}\nvar unsupportedLazyRouteFunctionKeys = /* @__PURE__ */ new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"middleware\",\n \"children\"\n]);\nfunction isUnsupportedLazyRouteFunctionKey(key) {\n return unsupportedLazyRouteFunctionKeys.has(\n key\n );\n}\nfunction isIndexRoute(route) {\n return route.index === true;\n}\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties2, parentPath = [], manifest = {}, allowInPlaceMutations = false) {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n allowInPlaceMutations || !manifest[id],\n `Found a route id collision on id \"${id}\". Route id's must be globally unique within Data Router usages`\n );\n if (isIndexRoute(route)) {\n let indexRoute = {\n ...route,\n id\n };\n manifest[id] = mergeRouteUpdates(\n indexRoute,\n mapRouteProperties2(indexRoute)\n );\n return indexRoute;\n } else {\n let pathOrLayoutRoute = {\n ...route,\n id,\n children: void 0\n };\n manifest[id] = mergeRouteUpdates(\n pathOrLayoutRoute,\n mapRouteProperties2(pathOrLayoutRoute)\n );\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties2,\n treePath,\n manifest,\n allowInPlaceMutations\n );\n }\n return pathOrLayoutRoute;\n }\n });\n}\nfunction mergeRouteUpdates(route, updates) {\n return Object.assign(route, {\n ...updates,\n ...typeof updates.lazy === \"object\" && updates.lazy != null ? {\n lazy: {\n ...route.lazy,\n ...updates.lazy\n }\n } : {}\n });\n}\nfunction matchRoutes(routes, locationArg, basename = \"/\") {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial, precomputedBranches) {\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = precomputedBranches ?? flattenAndRankRoutes(routes);\n let matches = null;\n let decoded = decodePath(pathname);\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n loaderData: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenAndRankRoutes(routes) {\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n return branches;\n}\nfunction flattenRoutes(routes, branches = [], parentsMeta = [], parentPath = \"\", _hasParentOptionalSegments = false) {\n let flattenRoute = (route, index, hasParentOptionalSegments = _hasParentOptionalSegments, relativePath) => {\n let meta = {\n relativePath: relativePath === void 0 ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n if (!meta.relativePath.startsWith(parentPath) && hasParentOptionalSegments) {\n return;\n }\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path \"${parentPath}\" is not valid. An absolute child route path must start with the combined path of all its parent routes.`\n );\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove all child routes from route path \"${path}\".`\n );\n flattenRoutes(\n route.children,\n branches,\n routesMeta,\n path,\n hasParentOptionalSegments\n );\n }\n if (route.path == null && !route.index) {\n return;\n }\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, true, exploded);\n }\n }\n });\n return branches;\n}\nfunction explodeOptionalSegments(path) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\n let isOptional = first.endsWith(\"?\");\n let required = first.replace(/\\?$/, \"\");\n if (rest.length === 0) {\n return isOptional ? [required, \"\"] : [required];\n }\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\n result.push(\n ...restExploded.map(\n (subpath) => subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n if (isOptional) {\n result.push(...restExploded);\n }\n return result.map(\n (exploded) => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\nfunction rankRouteBranches(branches) {\n branches.sort(\n (a, b) => a.score !== b.score ? b.score - a.score : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\nvar paramRe = /^:[\\w-]+$/;\nvar dynamicSegmentValue = 3;\nvar indexRouteValue = 2;\nvar emptySegmentValue = 1;\nvar staticSegmentValue = 10;\nvar splatPenalty = -2;\nvar isSplat = (s) => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter((s) => !isSplat(s)).reduce(\n (score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue),\n initialScore\n );\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ? (\n // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n ) : (\n // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0\n );\n}\nfunction matchRouteBranch(branch, pathname, allowPartial = false) {\n let { routesMeta } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n let route = meta.route;\n if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false\n },\n remainingPathname\n );\n }\n if (!match) {\n return null;\n }\n Object.assign(matchedParams, match.params);\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\nfunction generatePath(originalPath, params = {}) {\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were \"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must always follow a \\`/\\` in the pattern. To get rid of this warning, please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\");\n }\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify2 = (p) => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n if (isLastSegment && segment === \"*\") {\n return stringify2(params[\"*\"]);\n }\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)(.*)/);\n if (keyMatch) {\n const [, key, optional, suffix] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return encodeURIComponent(stringify2(param)) + suffix;\n }\n return segment.replace(/\\?$/g, \"\");\n }).filter((segment) => !!segment);\n return prefix + segments.join(\"/\");\n}\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce(\n (memo2, { paramName, isOptional }, index) => {\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo2[paramName] = void 0;\n } else {\n memo2[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo2;\n },\n {}\n );\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive = false, end = true) {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were \"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must always follow a \\`/\\` in the pattern. To get rid of this warning, please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n let params = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\").replace(/^\\/*/, \"/\").replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\").replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (match, paramName, isOptional, index, str) => {\n params.push({ paramName, isOptional: isOptional != null });\n if (isOptional) {\n let nextChar = str.charAt(index + match.length);\n if (nextChar && nextChar !== \"/\") {\n return \"/([^\\\\/]*)\";\n }\n return \"(?:/([^\\\\/]*))?\";\n }\n return \"/([^\\\\/]+)\";\n }\n ).replace(/\\/([\\w-]+)\\?(\\/|$)/g, \"(/$1)?$2\");\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" : \"(?:\\\\/(.+)|\\\\/*)$\";\n } else if (end) {\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n }\n let matcher = new RegExp(regexpSource, caseSensitive ? void 0 : \"i\");\n return [matcher, params];\n}\nfunction decodePath(value) {\n try {\n return value.split(\"/\").map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${error}).`\n );\n return value;\n }\n}\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\nfunction prependBasename({\n basename,\n pathname\n}) {\n return pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n}\nvar ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar isAbsoluteUrl = (url) => ABSOLUTE_URL_REGEX.test(url);\nfunction resolvePath(to, fromPathname = \"/\") {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname;\n if (toPathname) {\n toPathname = removeDoubleSlashes(toPathname);\n if (toPathname.startsWith(\"/\")) {\n pathname = resolvePathname(toPathname.substring(1), \"/\");\n } else {\n pathname = resolvePathname(toPathname, fromPathname);\n }\n } else {\n pathname = fromPathname;\n }\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = removeTrailingSlash(fromPathname).split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return `Cannot include a '${char}' character in a manually specified \\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the \\`to.${dest}\\` field. Alternatively you may provide the full path as a string in <Link to=\"...\"> and the router will parse it for you.`;\n}\nfunction getPathContributingMatches(matches) {\n return matches.filter(\n (match, index) => index === 0 || match.route.path && match.route.path.length > 0\n );\n}\nfunction getResolveToMatches(matches) {\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches.map(\n (match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n}\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative = false) {\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\nvar removeDoubleSlashes = (path) => path.replace(/\\/\\/+/g, \"/\");\nvar joinPaths = (paths) => removeDoubleSlashes(paths.join(\"/\"));\nvar removeTrailingSlash = (path) => path.replace(/\\/+$/, \"\");\nvar normalizePathname = (pathname) => removeTrailingSlash(pathname).replace(/^\\/*/, \"/\");\nvar normalizeSearch = (search) => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\nvar normalizeHash = (hash) => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\nvar DataWithResponseInit = class {\n constructor(data2, init) {\n this.type = \"DataWithResponseInit\";\n this.data = data2;\n this.init = init || null;\n }\n};\nfunction data(data2, init) {\n return new DataWithResponseInit(\n data2,\n typeof init === \"number\" ? { status: init } : init\n );\n}\nvar redirect = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, { ...responseInit, headers });\n};\nvar redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\nvar replace = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\nvar ErrorResponseImpl = class {\n constructor(status, statusText, data2, internal = false) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data2 instanceof Error) {\n this.data = data2.toString();\n this.error = data2;\n } else {\n this.data = data2;\n }\n }\n};\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\nfunction getRoutePattern(matches) {\n let parts = matches.map((m) => m.route.path).filter(Boolean);\n return joinPaths(parts) || \"/\";\n}\nvar isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nfunction parseToInfo(_to, basename) {\n let to = _to;\n if (typeof to !== \"string\" || !ABSOLUTE_URL_REGEX.test(to)) {\n return {\n absoluteURL: void 0,\n isExternal: false,\n to\n };\n }\n let absoluteURL = to;\n let isExternal = false;\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n if (targetUrl.origin === currentUrl.origin && path != null) {\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n warning(\n false,\n `<Link to=\"${to}\"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`\n );\n }\n }\n return {\n absoluteURL,\n isExternal,\n to\n };\n}\n\n// lib/router/instrumentation.ts\nvar UninstrumentedSymbol = Symbol(\"Uninstrumented\");\nfunction getRouteInstrumentationUpdates(fns, route) {\n let aggregated = {\n lazy: [],\n \"lazy.loader\": [],\n \"lazy.action\": [],\n \"lazy.middleware\": [],\n middleware: [],\n loader: [],\n action: []\n };\n fns.forEach(\n (fn) => fn({\n id: route.id,\n index: route.index,\n path: route.path,\n instrument(i) {\n let keys = Object.keys(aggregated);\n for (let key of keys) {\n if (i[key]) {\n aggregated[key].push(i[key]);\n }\n }\n }\n })\n );\n let updates = {};\n if (typeof route.lazy === \"function\" && aggregated.lazy.length > 0) {\n let instrumented = wrapImpl(aggregated.lazy, route.lazy, () => void 0);\n if (instrumented) {\n updates.lazy = instrumented;\n }\n }\n if (typeof route.lazy === \"object\") {\n let lazyObject = route.lazy;\n [\"middleware\", \"loader\", \"action\"].forEach((key) => {\n let lazyFn = lazyObject[key];\n let instrumentations = aggregated[`lazy.${key}`];\n if (typeof lazyFn === \"function\" && instrumentations.length > 0) {\n let instrumented = wrapImpl(instrumentations, lazyFn, () => void 0);\n if (instrumented) {\n updates.lazy = Object.assign(updates.lazy || {}, {\n [key]: instrumented\n });\n }\n }\n });\n }\n [\"loader\", \"action\"].forEach((key) => {\n let handler = route[key];\n if (typeof handler === \"function\" && aggregated[key].length > 0) {\n let original = handler[UninstrumentedSymbol] ?? handler;\n let instrumented = wrapImpl(\n aggregated[key],\n original,\n (...args) => getHandlerInfo(args[0])\n );\n if (instrumented) {\n if (key === \"loader\" && original.hydrate === true) {\n instrumented.hydrate = true;\n }\n instrumented[UninstrumentedSymbol] = original;\n updates[key] = instrumented;\n }\n }\n });\n if (route.middleware && route.middleware.length > 0 && aggregated.middleware.length > 0) {\n updates.middleware = route.middleware.map((middleware) => {\n let original = middleware[UninstrumentedSymbol] ?? middleware;\n let instrumented = wrapImpl(\n aggregated.middleware,\n original,\n (...args) => getHandlerInfo(args[0])\n );\n if (instrumented) {\n instrumented[UninstrumentedSymbol] = original;\n return instrumented;\n }\n return middleware;\n });\n }\n return updates;\n}\nfunction instrumentClientSideRouter(router, fns) {\n let aggregated = {\n navigate: [],\n fetch: []\n };\n fns.forEach(\n (fn) => fn({\n instrument(i) {\n let keys = Object.keys(i);\n for (let key of keys) {\n if (i[key]) {\n aggregated[key].push(i[key]);\n }\n }\n }\n })\n );\n if (aggregated.navigate.length > 0) {\n let navigate = router.navigate[UninstrumentedSymbol] ?? router.navigate;\n let instrumentedNavigate = wrapImpl(\n aggregated.navigate,\n navigate,\n (...args) => {\n let [to, opts] = args;\n return {\n to: typeof to === \"number\" || typeof to === \"string\" ? to : to ? createPath(to) : \".\",\n ...getRouterInfo(router, opts ?? {})\n };\n }\n );\n if (instrumentedNavigate) {\n instrumentedNavigate[UninstrumentedSymbol] = navigate;\n router.navigate = instrumentedNavigate;\n }\n }\n if (aggregated.fetch.length > 0) {\n let fetch2 = router.fetch[UninstrumentedSymbol] ?? router.fetch;\n let instrumentedFetch = wrapImpl(aggregated.fetch, fetch2, (...args) => {\n let [key, , href, opts] = args;\n return {\n href: href ?? \".\",\n fetcherKey: key,\n ...getRouterInfo(router, opts ?? {})\n };\n });\n if (instrumentedFetch) {\n instrumentedFetch[UninstrumentedSymbol] = fetch2;\n router.fetch = instrumentedFetch;\n }\n }\n return router;\n}\nfunction instrumentHandler(handler, fns) {\n let aggregated = {\n request: []\n };\n fns.forEach(\n (fn) => fn({\n instrument(i) {\n let keys = Object.keys(i);\n for (let key of keys) {\n if (i[key]) {\n aggregated[key].push(i[key]);\n }\n }\n }\n })\n );\n let instrumentedHandler = handler;\n if (aggregated.request.length > 0) {\n instrumentedHandler = wrapImpl(aggregated.request, handler, (...args) => {\n let [request, context] = args;\n return {\n request: getReadonlyRequest(request),\n context: context != null ? getReadonlyContext(context) : context\n };\n });\n }\n return instrumentedHandler;\n}\nfunction wrapImpl(impls, handler, getInfo) {\n if (impls.length === 0) {\n return null;\n }\n return async (...args) => {\n let result = await recurseRight(\n impls,\n getInfo(...args),\n () => handler(...args),\n impls.length - 1\n );\n if (result.type === \"error\") {\n throw result.value;\n }\n return result.value;\n };\n}\nasync function recurseRight(impls, info, handler, index) {\n let impl = impls[index];\n let result;\n if (!impl) {\n try {\n let value = await handler();\n result = { type: \"success\", value };\n } catch (e) {\n result = { type: \"error\", value: e };\n }\n } else {\n let handlerPromise = void 0;\n let callHandler = async () => {\n if (handlerPromise) {\n console.error(\"You cannot call instrumented handlers more than once\");\n } else {\n handlerPromise = recurseRight(impls, info, handler, index - 1);\n }\n result = await handlerPromise;\n invariant(result, \"Expected a result\");\n if (result.type === \"error\" && result.value instanceof Error) {\n return { status: \"error\", error: result.value };\n }\n return { status: \"success\", error: void 0 };\n };\n try {\n await impl(callHandler, info);\n } catch (e) {\n console.error(\"An instrumentation function threw an error:\", e);\n }\n if (!handlerPromise) {\n await callHandler();\n }\n await handlerPromise;\n }\n if (result) {\n return result;\n }\n return {\n type: \"error\",\n value: new Error(\"No result assigned in instrumentation chain.\")\n };\n}\nfunction getHandlerInfo(args) {\n let { request, context, params, pattern } = args;\n return {\n request: getReadonlyRequest(request),\n params: { ...params },\n pattern,\n context: getReadonlyContext(context)\n };\n}\nfunction getRouterInfo(router, opts) {\n return {\n currentUrl: createPath(router.state.location),\n ...\"formMethod\" in opts ? { formMethod: opts.formMethod } : {},\n ...\"formEncType\" in opts ? { formEncType: opts.formEncType } : {},\n ...\"formData\" in opts ? { formData: opts.formData } : {},\n ...\"body\" in opts ? { body: opts.body } : {}\n };\n}\nfunction getReadonlyRequest(request) {\n return {\n method: request.method,\n url: request.url,\n headers: {\n get: (...args) => request.headers.get(...args)\n }\n };\n}\nfunction getReadonlyContext(context) {\n if (isPlainObject(context)) {\n let frozen = { ...context };\n Object.freeze(frozen);\n return frozen;\n } else {\n return {\n get: (ctx) => context.get(ctx)\n };\n }\n}\nvar objectProtoNames = Object.getOwnPropertyNames(Object.prototype).sort().join(\"\\0\");\nfunction isPlainObject(thing) {\n if (thing === null || typeof thing !== \"object\") {\n return false;\n }\n const proto = Object.getPrototypeOf(thing);\n return proto === Object.prototype || proto === null || Object.getOwnPropertyNames(proto).sort().join(\"\\0\") === objectProtoNames;\n}\n\n// lib/router/router.ts\nvar validMutationMethodsArr = [\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\"\n];\nvar validMutationMethods = new Set(\n validMutationMethodsArr\n);\nvar validRequestMethodsArr = [\n \"GET\",\n ...validMutationMethodsArr\n];\nvar validRequestMethods = new Set(validRequestMethodsArr);\nvar redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);\nvar redirectPreserveMethodStatusCodes = /* @__PURE__ */ new Set([307, 308]);\nvar IDLE_NAVIGATION = {\n state: \"idle\",\n location: void 0,\n matches: void 0,\n historyAction: void 0,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n};\nvar IDLE_FETCHER = {\n state: \"idle\",\n data: void 0,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n};\nvar IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: void 0,\n reset: void 0,\n location: void 0\n};\nvar defaultMapRouteProperties = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nvar TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\nvar ResetLoaderDataSymbol = Symbol(\"ResetLoaderData\");\nvar _routes, _branches, _hmrRoutes, _hmrBranches;\nvar DataRoutes = class {\n constructor(routes) {\n __privateAdd(this, _routes);\n __privateAdd(this, _branches);\n __privateAdd(this, _hmrRoutes);\n __privateAdd(this, _hmrBranches);\n __privateSet(this, _routes, routes);\n __privateSet(this, _branches, flattenAndRankRoutes(routes));\n }\n /** The stable route tree */\n get stableRoutes() {\n return __privateGet(this, _routes);\n }\n /** The in-flight route tree if one is active, otherwise the stable tree */\n get activeRoutes() {\n return __privateGet(this, _hmrRoutes) ?? __privateGet(this, _routes);\n }\n /** Pre-computed branches */\n get branches() {\n return __privateGet(this, _hmrBranches) ?? __privateGet(this, _branches);\n }\n get hasHMRRoutes() {\n return __privateGet(this, _hmrRoutes) != null;\n }\n /** Replace the stable route tree and recompute its branches */\n setRoutes(routes) {\n __privateSet(this, _routes, routes);\n __privateSet(this, _branches, flattenAndRankRoutes(routes));\n }\n /** Set a new in-flight route tree and recompute its branches */\n setHmrRoutes(routes) {\n __privateSet(this, _hmrRoutes, routes);\n __privateSet(this, _hmrBranches, flattenAndRankRoutes(routes));\n }\n /** Commit in-flight routes/branches to the stable slot and clear in-flight */\n commitHmrRoutes() {\n if (__privateGet(this, _hmrRoutes)) {\n __privateSet(this, _routes, __privateGet(this, _hmrRoutes));\n __privateSet(this, _branches, __privateGet(this, _hmrBranches));\n __privateSet(this, _hmrRoutes, void 0);\n __privateSet(this, _hmrBranches, void 0);\n }\n }\n};\n_routes = new WeakMap();\n_branches = new WeakMap();\n_hmrRoutes = new WeakMap();\n_hmrBranches = new WeakMap();\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : void 0;\n const isBrowser3 = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n let hydrationRouteProperties2 = init.hydrationRouteProperties || [];\n let _mapRouteProperties = init.mapRouteProperties || defaultMapRouteProperties;\n let mapRouteProperties2 = _mapRouteProperties;\n if (init.instrumentations) {\n let instrumentations = init.instrumentations;\n mapRouteProperties2 = (route) => {\n return {\n ..._mapRouteProperties(route),\n ...getRouteInstrumentationUpdates(\n instrumentations.map((i) => i.route).filter(Boolean),\n route\n )\n };\n };\n }\n let manifest = {};\n let dataRoutes = new DataRoutes(\n convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties2,\n void 0,\n manifest\n )\n );\n let basename = init.basename || \"/\";\n if (!basename.startsWith(\"/\")) {\n basename = `/${basename}`;\n }\n let dataStrategyImpl = init.dataStrategy || defaultDataStrategyWithMiddleware;\n let future = {\n ...init.future\n };\n let unlistenHistory = null;\n let subscribers = /* @__PURE__ */ new Set();\n let bufferedInitialStateUpdate = null;\n let savedScrollPositions2 = null;\n let getScrollRestorationKey2 = null;\n let getScrollPosition = null;\n let initialScrollRestored = init.hydrationData != null;\n let initialMatches = matchRoutesImpl(\n dataRoutes.activeRoutes,\n init.history.location,\n basename,\n false,\n dataRoutes.branches\n );\n let initialMatchesIsFOW = false;\n let initialErrors = null;\n let initialized;\n let renderFallback;\n if (initialMatches == null && !init.patchRoutesOnNavigation) {\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes.activeRoutes);\n initialized = true;\n renderFallback = !initialized;\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n } else {\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes.activeRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n if (!initialMatches) {\n initialized = false;\n renderFallback = !initialized;\n initialMatches = [];\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes.activeRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatchesIsFOW = true;\n initialMatches = fogOfWar.matches;\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n initialized = false;\n renderFallback = !initialized;\n } else if (!initialMatches.some((m) => routeHasLoaderOrMiddleware(m.route))) {\n initialized = true;\n renderFallback = !initialized;\n } else {\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let relevantMatches = initialMatches;\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors[m.route.id] !== void 0\n );\n relevantMatches = relevantMatches.slice(0, idx + 1);\n }\n renderFallback = false;\n initialized = true;\n relevantMatches.forEach((m) => {\n let status = getRouteHydrationStatus(m.route, loaderData, errors);\n renderFallback = renderFallback || status.renderFallback;\n initialized = initialized && !status.shouldLoad;\n });\n }\n }\n let router;\n let state = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n renderFallback,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n actionData: init.hydrationData && init.hydrationData.actionData || null,\n errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n fetchers: /* @__PURE__ */ new Map(),\n blockers: /* @__PURE__ */ new Map()\n };\n let pendingAction = \"POP\" /* Pop */;\n let pendingPopstateNavigationDfd = null;\n let pendingPreventScrollReset = false;\n let pendingNavigationController;\n let pendingViewTransitionEnabled = false;\n let appliedViewTransitions = /* @__PURE__ */ new Map();\n let removePageHideEventListener = null;\n let isUninterruptedRevalidation = false;\n let isRevalidationRequired = false;\n let cancelledFetcherLoads = /* @__PURE__ */ new Set();\n let fetchControllers = /* @__PURE__ */ new Map();\n let incrementingLoadId = 0;\n let pendingNavigationLoadId = -1;\n let fetchReloadIds = /* @__PURE__ */ new Map();\n let fetchRedirectIds = /* @__PURE__ */ new Set();\n let fetchLoadMatches = /* @__PURE__ */ new Map();\n let activeFetchers = /* @__PURE__ */ new Map();\n let fetchersQueuedForDeletion = /* @__PURE__ */ new Set();\n let blockerFunctions = /* @__PURE__ */ new Map();\n let unblockBlockerHistoryUpdate = void 0;\n let pendingRevalidationDfd = null;\n function initialize() {\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = void 0;\n return;\n }\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.\"\n );\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\n });\n if (blockerKey && delta != null) {\n let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: void 0,\n reset: void 0,\n location\n });\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({ blockers });\n }\n });\n pendingPopstateNavigationDfd?.resolve();\n pendingPopstateNavigationDfd = null;\n return;\n }\n return startNavigation(historyAction, location);\n }\n );\n if (isBrowser3) {\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n if (!state.initialized) {\n startNavigation(\"POP\" /* Pop */, state.location, {\n initialHydration: true\n });\n }\n return router;\n }\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(state.fetchers, key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n function subscribe(fn) {\n subscribers.add(fn);\n if (bufferedInitialStateUpdate) {\n let { newErrors } = bufferedInitialStateUpdate;\n bufferedInitialStateUpdate = null;\n fn(state, {\n deletedFetchers: [],\n newErrors,\n viewTransitionOpts: void 0,\n flushSync: false\n });\n }\n return () => subscribers.delete(fn);\n }\n function updateState(newState, opts = {}) {\n if (newState.matches) {\n newState.matches = newState.matches.map((m) => {\n let route = manifest[m.route.id];\n let matchRoute = m.route;\n if (matchRoute.element !== route.element || matchRoute.errorElement !== route.errorElement || matchRoute.hydrateFallbackElement !== route.hydrateFallbackElement) {\n return {\n ...m,\n route\n };\n }\n return m;\n });\n }\n state = {\n ...state,\n ...newState\n };\n let unmountedFetchers = [];\n let mountedFetchers = [];\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (fetchersQueuedForDeletion.has(key)) {\n unmountedFetchers.push(key);\n } else {\n mountedFetchers.push(key);\n }\n }\n });\n fetchersQueuedForDeletion.forEach((key) => {\n if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n unmountedFetchers.push(key);\n }\n });\n if (subscribers.size === 0) {\n bufferedInitialStateUpdate = { newErrors: newState.errors ?? null };\n }\n [...subscribers].forEach(\n (subscriber) => subscriber(state, {\n deletedFetchers: unmountedFetchers,\n newErrors: newState.errors ?? null,\n viewTransitionOpts: opts.viewTransitionOpts,\n flushSync: opts.flushSync === true\n })\n );\n unmountedFetchers.forEach((key) => deleteFetcher(state.fetchers, key));\n mountedFetchers.forEach((key) => state.fetchers.delete(key));\n }\n function completeNavigation(location, newState, { flushSync } = {}) {\n let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && location.state?._isRedirect !== true;\n let actionData;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n actionData = null;\n }\n } else if (isActionReload) {\n actionData = state.actionData;\n } else {\n actionData = null;\n }\n let loaderData = newState.loaderData ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n ) : state.loaderData;\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n let restoreScrollPosition = isUninterruptedRevalidation ? false : getSavedScrollPosition(location, newState.matches || state.matches);\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && location.state?._isRedirect !== true;\n dataRoutes.commitHmrRoutes();\n if (isUninterruptedRevalidation) {\n } else if (pendingAction === \"POP\" /* Pop */) {\n } else if (pendingAction === \"PUSH\" /* Push */) {\n init.history.push(location, location.state);\n } else if (pendingAction === \"REPLACE\" /* Replace */) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n if (pendingAction === \"POP\" /* Pop */) {\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location\n };\n }\n } else if (pendingViewTransitionEnabled) {\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = /* @__PURE__ */ new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n }\n updateState(\n {\n ...newState,\n // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n renderFallback: false,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition,\n preventScrollReset,\n blockers\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true\n }\n );\n pendingAction = \"POP\" /* Pop */;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n pendingPopstateNavigationDfd?.resolve();\n pendingPopstateNavigationDfd = null;\n pendingRevalidationDfd?.resolve();\n pendingRevalidationDfd = null;\n }\n async function navigate(to, opts) {\n pendingPopstateNavigationDfd?.resolve();\n pendingPopstateNavigationDfd = null;\n if (typeof to === \"number\") {\n if (!pendingPopstateNavigationDfd) {\n pendingPopstateNavigationDfd = createDeferred();\n }\n let promise = pendingPopstateNavigationDfd.promise;\n init.history.go(to);\n return promise;\n }\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n false,\n normalizedPath,\n opts\n );\n let maskPath;\n if (opts?.mask) {\n let partialPath = typeof opts.mask === \"string\" ? parsePath(opts.mask) : {\n ...state.location.mask,\n ...opts.mask\n };\n maskPath = {\n pathname: \"\",\n search: \"\",\n hash: \"\",\n ...partialPath\n };\n }\n let currentLocation = state.location;\n let nextLocation = createLocation(\n currentLocation,\n path,\n opts && opts.state,\n void 0,\n maskPath\n );\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation)\n };\n let userReplace = opts && opts.replace != null ? opts.replace : void 0;\n let historyAction = \"PUSH\" /* Push */;\n if (userReplace === true) {\n historyAction = \"REPLACE\" /* Replace */;\n } else if (userReplace === false) {\n } else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n historyAction = \"REPLACE\" /* Replace */;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : void 0;\n let flushSync = (opts && opts.flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: void 0,\n reset: void 0,\n location: nextLocation\n });\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({ blockers });\n }\n });\n return;\n }\n await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.viewTransition,\n flushSync,\n callSiteDefaultShouldRevalidate: opts && opts.defaultShouldRevalidate\n });\n }\n function revalidate() {\n if (!pendingRevalidationDfd) {\n pendingRevalidationDfd = createDeferred();\n }\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n let promise = pendingRevalidationDfd.promise;\n if (state.navigation.state === \"submitting\") {\n return promise;\n }\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true\n });\n return promise;\n }\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true\n }\n );\n return promise;\n }\n async function startNavigation(historyAction, location, opts) {\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n let routesToUse = dataRoutes.activeRoutes;\n let matches = opts?.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ? (\n // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n state.matches\n ) : matchRoutesImpl(\n routesToUse,\n location,\n basename,\n false,\n dataRoutes.branches\n );\n let flushSync = (opts && opts.flushSync) === true;\n if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n },\n { flushSync }\n );\n return;\n }\n let loadingNavigation = opts && opts.overrideNavigation ? {\n ...opts.overrideNavigation,\n matches,\n historyAction\n } : void 0;\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let scopedContext = init.getContext ? await init.getContext() : new RouterContextProvider();\n let pendingActionResult;\n if (opts && opts.pendingError) {\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: \"error\" /* error */, error: opts.pendingError }\n ];\n } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n historyAction,\n scopedContext,\n fogOfWar.active,\n opts && opts.initialHydration === true,\n { replace: opts.replace, flushSync }\n );\n if (actionResult.shortCircuited) {\n return;\n }\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error\n }\n });\n return;\n }\n }\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(\n location,\n matches,\n historyAction,\n opts.submission\n );\n flushSync = false;\n fogOfWar.active = false;\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n workingFetchers\n } = await handleLoaders(\n request,\n location,\n matches,\n historyAction,\n scopedContext,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult,\n opts && opts.callSiteDefaultShouldRevalidate\n );\n if (shortCircuited) {\n return;\n }\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n ...workingFetchers ? { fetchers: workingFetchers } : {}\n });\n }\n async function handleAction(request, location, submission, matches, historyAction, scopedContext, isFogOfWar, initialHydration, opts = {}) {\n interruptActiveLoads();\n let navigation = getSubmittingNavigation(\n location,\n matches,\n historyAction,\n submission\n );\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n if (discoverResult.partialMatches.length === 0) {\n let { matches: matches2, route } = getShortCircuitMatches(\n dataRoutes.activeRoutes\n );\n return {\n matches: matches2,\n pendingActionResult: [\n route.id,\n {\n type: \"error\" /* error */,\n error: discoverResult.error\n }\n ]\n };\n }\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: \"error\" /* error */,\n error: discoverResult.error\n }\n ]\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: \"error\" /* error */,\n error\n }\n ]\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let result;\n let actionMatch = getTargetMatch(matches, location);\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: \"error\" /* error */,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id\n })\n };\n } else {\n let dsMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n request,\n location,\n matches,\n actionMatch,\n initialHydration ? [] : hydrationRouteProperties2,\n scopedContext\n );\n let results = await callDataStrategy(\n request,\n location,\n dsMatches,\n scopedContext,\n null\n );\n result = results[actionMatch.route.id];\n if (!result) {\n for (let match of matches) {\n if (results[match.route.id]) {\n result = results[match.route.id];\n break;\n }\n }\n }\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n if (isRedirectResult(result)) {\n let replace2;\n if (opts && opts.replace != null) {\n replace2 = opts.replace;\n } else {\n let location2 = normalizeRedirectLocation(\n result.response.headers.get(\"Location\"),\n new URL(request.url),\n basename,\n init.history\n );\n replace2 = location2 === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace: replace2\n });\n return { shortCircuited: true };\n }\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n if ((opts && opts.replace) !== true) {\n pendingAction = \"PUSH\" /* Push */;\n }\n return {\n matches,\n pendingActionResult: [\n boundaryMatch.route.id,\n result,\n actionMatch.route.id\n ]\n };\n }\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result]\n };\n }\n async function handleLoaders(request, location, matches, historyAction, scopedContext, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace2, initialHydration, flushSync, pendingActionResult, callSiteDefaultShouldRevalidate) {\n let loadingNavigation = overrideNavigation || getLoadingNavigation(location, matches, historyAction, submission);\n let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n let shouldUpdateNavigationState = !isUninterruptedRevalidation && !initialHydration;\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...actionData !== void 0 ? { actionData } : {}\n },\n {\n flushSync\n }\n );\n }\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n if (discoverResult.partialMatches.length === 0) {\n let { matches: matches2, route } = getShortCircuitMatches(\n dataRoutes.activeRoutes\n );\n return {\n matches: matches2,\n loaderData: {},\n errors: {\n [route.id]: discoverResult.error\n }\n };\n }\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error\n }\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let routesToUse = dataRoutes.activeRoutes;\n let { dsMatches, revalidatingFetchers } = getMatchesToLoad(\n request,\n scopedContext,\n mapRouteProperties2,\n manifest,\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n initialHydration ? [] : hydrationRouteProperties2,\n initialHydration === true,\n isRevalidationRequired,\n cancelledFetcherLoads,\n fetchersQueuedForDeletion,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n init.patchRoutesOnNavigation != null,\n dataRoutes.branches,\n pendingActionResult,\n callSiteDefaultShouldRevalidate\n );\n pendingNavigationLoadId = ++incrementingLoadId;\n if (!init.dataStrategy && !dsMatches.some((m) => m.shouldLoad) && !dsMatches.some(\n (m) => m.route.middleware && m.route.middleware.length > 0\n ) && revalidatingFetchers.length === 0) {\n let workingFetchers2 = new Map(state.fetchers);\n let didUpdateFetcherRedirects2 = markFetchRedirectsDone(workingFetchers2);\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? { [pendingActionResult[0]]: pendingActionResult[1].error } : null,\n ...getActionDataForCommit(pendingActionResult),\n ...didUpdateFetcherRedirects2 ? { fetchers: workingFetchers2 } : {}\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n if (shouldUpdateNavigationState) {\n let updates = {};\n if (!isFogOfWar) {\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== void 0) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n revalidatingFetchers.forEach((rf) => {\n abortFetcher(rf.key);\n if (rf.controller) {\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n dsMatches,\n revalidatingFetchers,\n request,\n location,\n scopedContext\n );\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n let redirect2 = findRedirect(loaderResults);\n if (redirect2) {\n await startRedirectNavigation(request, redirect2.result, true, {\n replace: replace2\n });\n return { shortCircuited: true };\n }\n redirect2 = findRedirect(fetcherResults);\n if (redirect2) {\n fetchRedirectIds.add(redirect2.key);\n await startRedirectNavigation(request, redirect2.result, true, {\n replace: replace2\n });\n return { shortCircuited: true };\n }\n let workingFetchers = new Map(state.fetchers);\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n workingFetchers\n );\n if (initialHydration && state.errors) {\n errors = { ...state.errors, ...errors };\n }\n let didUpdateFetcherRedirects = markFetchRedirectsDone(workingFetchers);\n let didAbortFetchLoads = abortStaleFetchLoads(\n pendingNavigationLoadId,\n workingFetchers\n );\n let shouldUpdateFetchers = didUpdateFetcherRedirects || didAbortFetchLoads || revalidatingFetchers.length > 0;\n return {\n matches,\n loaderData,\n errors,\n ...shouldUpdateFetchers ? { workingFetchers } : {}\n };\n }\n function getUpdatedActionData(pendingActionResult) {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n let workingFetchers = new Map(state.fetchers);\n revalidatingFetchers.forEach((rf) => {\n let fetcher = workingFetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n void 0,\n fetcher ? fetcher.data : void 0\n );\n workingFetchers.set(rf.key, revalidatingFetcher);\n });\n return workingFetchers;\n }\n async function fetch2(key, routeId, href, opts) {\n abortFetcher(key);\n let flushSync = (opts && opts.flushSync) === true;\n let routesToUse = dataRoutes.activeRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutesImpl(\n routesToUse,\n normalizedPath,\n basename,\n false,\n dataRoutes.branches\n );\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n let { path, submission, error } = normalizeNavigateOptions(\n true,\n normalizedPath,\n opts\n );\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n let scopedContext = init.getContext ? await init.getContext() : new RouterContextProvider();\n let preventScrollReset = (opts && opts.preventScrollReset) === true;\n if (submission && isMutationMethod(submission.formMethod)) {\n await handleFetcherAction(\n key,\n routeId,\n path,\n matches,\n scopedContext,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission,\n opts && opts.defaultShouldRevalidate\n );\n return;\n }\n fetchLoadMatches.set(key, { routeId, path });\n await handleFetcherLoader(\n key,\n routeId,\n path,\n matches,\n scopedContext,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n }\n async function handleFetcherAction(key, routeId, path, requestMatches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission, callSiteDefaultShouldRevalidate) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n new URL(fetchRequest.url).pathname,\n fetchRequest.signal,\n key\n );\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n }\n }\n let match = getTargetMatch(requestMatches, path);\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let fetchMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n fetchRequest,\n path,\n requestMatches,\n match,\n hydrationRouteProperties2,\n scopedContext\n );\n let actionResults = await callDataStrategy(\n fetchRequest,\n path,\n fetchMatches,\n scopedContext,\n key\n );\n let actionResult = actionResults[match.route.id];\n if (!actionResult) {\n for (let match2 of fetchMatches) {\n if (actionResults[match2.route.id]) {\n actionResult = actionResults[match2.route.id];\n break;\n }\n }\n }\n if (fetchRequest.signal.aborted) {\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n if (fetchersQueuedForDeletion.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n }\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n preventScrollReset\n });\n }\n }\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = dataRoutes.activeRoutes;\n let matches = state.navigation.state !== \"idle\" ? matchRoutesImpl(\n routesToUse,\n state.navigation.location,\n basename,\n false,\n dataRoutes.branches\n ) : state.matches;\n invariant(matches, \"Didn't find any matches after fetcher action\");\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n let { dsMatches, revalidatingFetchers } = getMatchesToLoad(\n revalidationRequest,\n scopedContext,\n mapRouteProperties2,\n manifest,\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n hydrationRouteProperties2,\n false,\n isRevalidationRequired,\n cancelledFetcherLoads,\n fetchersQueuedForDeletion,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n init.patchRoutesOnNavigation != null,\n dataRoutes.branches,\n [match.route.id, actionResult],\n callSiteDefaultShouldRevalidate\n );\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n let workingFetchers = new Map(state.fetchers);\n workingFetchers.set(key, loadFetcher);\n revalidatingFetchers.filter((rf) => rf.key !== key).forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher2 = workingFetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n void 0,\n existingFetcher2 ? existingFetcher2.data : void 0\n );\n workingFetchers.set(staleKey, revalidatingFetcher);\n abortFetcher(staleKey);\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n updateState({ fetchers: workingFetchers });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n let { loaderResults, fetcherResults } = await callLoadersAndMaybeResolveData(\n dsMatches,\n revalidatingFetchers,\n revalidationRequest,\n nextLocation,\n scopedContext\n );\n if (abortController.signal.aborted) {\n return;\n }\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n let fetcherIsMounted = state.fetchers.has(key);\n let getRedirectStateWithDoneFetcher = (s) => {\n if (!fetcherIsMounted) return s;\n let workingFetchers2 = new Map(s.fetchers);\n workingFetchers2.set(key, getDoneFetcher(actionResult.data));\n return { ...s, fetchers: workingFetchers2 };\n };\n let redirect2 = findRedirect(loaderResults);\n if (redirect2) {\n state = getRedirectStateWithDoneFetcher(state);\n return startRedirectNavigation(\n revalidationRequest,\n redirect2.result,\n false,\n { preventScrollReset }\n );\n }\n redirect2 = findRedirect(fetcherResults);\n if (redirect2) {\n fetchRedirectIds.add(redirect2.key);\n state = getRedirectStateWithDoneFetcher(state);\n return startRedirectNavigation(\n revalidationRequest,\n redirect2.result,\n false,\n { preventScrollReset }\n );\n }\n let finalFetchers = new Map(state.fetchers);\n if (fetcherIsMounted) {\n finalFetchers.set(key, getDoneFetcher(actionResult.data));\n }\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n void 0,\n revalidatingFetchers,\n fetcherResults,\n finalFetchers\n );\n abortStaleFetchLoads(loadId, finalFetchers);\n if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: finalFetchers\n });\n } else {\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: finalFetchers\n });\n isRevalidationRequired = false;\n }\n }\n async function handleFetcherLoader(key, routeId, path, matches, scopedContext, isFogOfWar, flushSync, preventScrollReset, submission) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : void 0\n ),\n { flushSync }\n );\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n new URL(fetchRequest.url).pathname,\n fetchRequest.signal,\n key\n );\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n }\n }\n let match = getTargetMatch(matches, path);\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let dsMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n fetchRequest,\n path,\n matches,\n match,\n hydrationRouteProperties2,\n scopedContext\n );\n let results = await callDataStrategy(\n fetchRequest,\n path,\n dsMatches,\n scopedContext,\n key\n );\n let result = results[match.route.id];\n if (!result) {\n for (let match2 of matches) {\n if (results[match2.route.id]) {\n result = results[match2.route.id];\n break;\n }\n }\n }\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n if (fetchRequest.signal.aborted) {\n return;\n }\n if (fetchersQueuedForDeletion.has(key)) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n }\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n updateFetcherState(key, getDoneFetcher(void 0));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false, {\n preventScrollReset\n });\n return;\n }\n }\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n async function startRedirectNavigation(request, redirect2, isNavigation, {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace: replace2\n } = {}) {\n if (!isNavigation) {\n pendingPopstateNavigationDfd?.resolve();\n pendingPopstateNavigationDfd = null;\n }\n if (redirect2.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n let location = redirect2.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename,\n init.history\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true\n });\n if (isBrowser3) {\n let isDocumentReload = false;\n if (redirect2.response.headers.has(\"X-Remix-Reload-Document\")) {\n isDocumentReload = true;\n } else if (isAbsoluteUrl(location)) {\n const url = createBrowserURLImpl(location, true);\n isDocumentReload = // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin || // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n if (isDocumentReload) {\n if (replace2) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n pendingNavigationController = null;\n let redirectNavigationType = replace2 === true || redirect2.response.headers.has(\"X-Remix-Replace\") ? \"REPLACE\" /* Replace */ : \"PUSH\" /* Push */;\n let { formMethod, formAction, formEncType } = state.navigation;\n if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n let activeSubmission = submission || fetcherSubmission;\n if (redirectPreserveMethodStatusCodes.has(redirect2.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n await startNavigation(redirectNavigationType, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location\n },\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0\n });\n } else {\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n [],\n redirectNavigationType,\n submission\n );\n await startNavigation(redirectNavigationType, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0\n });\n }\n }\n async function callDataStrategy(request, path, matches, scopedContext, fetcherKey) {\n let results;\n let dataResults = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n request,\n path,\n matches,\n fetcherKey,\n scopedContext,\n false\n );\n } catch (e) {\n matches.filter((m) => m.shouldLoad).forEach((m) => {\n dataResults[m.route.id] = {\n type: \"error\" /* error */,\n error: e\n };\n });\n return dataResults;\n }\n if (request.signal.aborted) {\n return dataResults;\n }\n if (!isMutationMethod(request.method)) {\n for (let match of matches) {\n if (results[match.route.id]?.type === \"error\" /* error */) {\n break;\n }\n if (!results.hasOwnProperty(match.route.id) && !state.loaderData.hasOwnProperty(match.route.id) && (!state.errors || !state.errors.hasOwnProperty(match.route.id)) && match.shouldCallHandler()) {\n results[match.route.id] = {\n type: \"error\" /* error */,\n result: new Error(\n `No result returned from dataStrategy for route ${match.route.id}`\n )\n };\n }\n }\n }\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResult(result)) {\n let response = result.result;\n dataResults[routeId] = {\n type: \"redirect\" /* redirect */,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename\n )\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n }\n }\n return dataResults;\n }\n async function callLoadersAndMaybeResolveData(matches, fetchersToLoad, request, location, scopedContext) {\n let loaderResultsPromise = callDataStrategy(\n request,\n location,\n matches,\n scopedContext,\n null\n );\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.request && f.controller) {\n let results = await callDataStrategy(\n f.request,\n f.path,\n f.matches,\n scopedContext,\n f.key\n );\n let result = results[f.match.route.id];\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: \"error\" /* error */,\n error: getInternalRouterError(404, {\n pathname: f.path\n })\n }\n });\n }\n })\n );\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n return {\n loaderResults,\n fetcherResults\n };\n }\n function interruptActiveLoads() {\n isRevalidationRequired = true;\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n }\n abortFetcher(key);\n });\n }\n function updateFetcherState(key, fetcher, opts = {}) {\n let workingFetchers = new Map(state.fetchers);\n workingFetchers.set(key, fetcher);\n updateState(\n { fetchers: workingFetchers },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n function setFetcherError(key, routeId, error, opts = {}) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n let workingFetchers = new Map(state.fetchers);\n deleteFetcher(workingFetchers, key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error\n },\n fetchers: workingFetchers\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n function getFetcher(key) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n if (fetchersQueuedForDeletion.has(key)) {\n fetchersQueuedForDeletion.delete(key);\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n function resetFetcher(key, opts) {\n abortFetcher(key, opts?.reason);\n updateFetcherState(key, getDoneFetcher(null));\n }\n function deleteFetcher(fetchers, key) {\n let fetcher = state.fetchers.get(key);\n if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n fetchersQueuedForDeletion.delete(key);\n cancelledFetcherLoads.delete(key);\n fetchers.delete(key);\n }\n function queueFetcherForDeletion(key) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n fetchersQueuedForDeletion.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n function abortFetcher(key, reason) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort(reason);\n fetchControllers.delete(key);\n }\n }\n function markFetchersDone(keys, fetchers) {\n for (let key of keys) {\n let fetcher = fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n let doneFetcher = getDoneFetcher(fetcher.data);\n fetchers.set(key, doneFetcher);\n }\n }\n function markFetchRedirectsDone(fetchers) {\n let doneKeys = [];\n let didUpdateFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n didUpdateFetchers = true;\n }\n }\n markFetchersDone(doneKeys, fetchers);\n return didUpdateFetchers;\n }\n function abortStaleFetchLoads(landedId, fetchers) {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys, fetchers);\n return yeetedKeys.length > 0;\n }\n function getBlocker(key, fn) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n return blocker;\n }\n function deleteBlocker(key) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n function updateBlocker(key, newBlocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n invariant(\n blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\",\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n }) {\n if (blockerFunctions.size === 0) {\n return;\n }\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n if (blocker && blocker.state === \"proceeding\") {\n return;\n }\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n function handleNavigational404(pathname) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = dataRoutes.activeRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n return { notFoundMatches: matches, route, error };\n }\n function enableScrollRestoration(positions, getPosition, getKey) {\n savedScrollPositions2 = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey2 = getKey || null;\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n return () => {\n savedScrollPositions2 = null;\n getScrollPosition = null;\n getScrollRestorationKey2 = null;\n };\n }\n function getScrollKey(location, matches) {\n if (getScrollRestorationKey2) {\n let key = getScrollRestorationKey2(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n function saveScrollPosition(location, matches) {\n if (savedScrollPositions2 && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions2[key] = getScrollPosition();\n }\n }\n function getSavedScrollPosition(location, matches) {\n if (savedScrollPositions2) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions2[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n function checkFogOfWar(matches, routesToUse, pathname) {\n if (init.patchRoutesOnNavigation) {\n let activeBranches = dataRoutes.branches;\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true,\n activeBranches\n );\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true,\n activeBranches\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n return { active: false, matches: null };\n }\n async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n if (!init.patchRoutesOnNavigation) {\n return { type: \"success\", matches };\n }\n let partialMatches = matches;\n while (true) {\n let localManifest = manifest;\n try {\n await init.patchRoutesOnNavigation({\n signal,\n path: pathname,\n matches: partialMatches,\n fetcherKey,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(\n routeId,\n children,\n dataRoutes,\n localManifest,\n mapRouteProperties2,\n false\n );\n }\n });\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n }\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n let activeBranches = dataRoutes.branches;\n let newMatches = matchRoutesImpl(\n dataRoutes.activeRoutes,\n pathname,\n basename,\n false,\n activeBranches\n );\n let newPartialMatches = null;\n if (newMatches) {\n if (Object.keys(newMatches[0].params).length === 0) {\n return { type: \"success\", matches: newMatches };\n } else {\n newPartialMatches = matchRoutesImpl(\n dataRoutes.activeRoutes,\n pathname,\n basename,\n true,\n activeBranches\n );\n let matchedDeeper = newPartialMatches && partialMatches.length < newPartialMatches.length && compareMatches(\n partialMatches,\n newPartialMatches.slice(0, partialMatches.length)\n );\n if (!matchedDeeper) {\n return { type: \"success\", matches: newMatches };\n }\n }\n }\n if (!newPartialMatches) {\n newPartialMatches = matchRoutesImpl(\n dataRoutes.activeRoutes,\n pathname,\n basename,\n true,\n activeBranches\n );\n }\n if (!newPartialMatches || compareMatches(partialMatches, newPartialMatches)) {\n return { type: \"success\", matches: null };\n }\n partialMatches = newPartialMatches;\n }\n }\n function compareMatches(a, b) {\n return a.length === b.length && a.every((m, i) => m.route.id === b[i].route.id);\n }\n function _internalSetRoutes(newRoutes) {\n manifest = {};\n dataRoutes.setHmrRoutes(\n convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties2,\n void 0,\n manifest\n )\n );\n }\n function patchRoutes(routeId, children, unstable_allowElementMutations = false) {\n patchRoutesImpl(\n routeId,\n children,\n dataRoutes,\n manifest,\n mapRouteProperties2,\n unstable_allowElementMutations\n );\n if (!dataRoutes.hasHMRRoutes) {\n updateState({});\n }\n }\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes.stableRoutes;\n },\n get branches() {\n return dataRoutes.branches;\n },\n get manifest() {\n return manifest;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch: fetch2,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to) => init.history.createHref(to),\n encodeLocation: (to) => init.history.encodeLocation(to),\n getFetcher,\n resetFetcher,\n deleteFetcher: queueFetcherForDeletion,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n _internalSetStateDoNotUseOrYouWillBreakYourApp(newState) {\n updateState(newState);\n }\n };\n if (init.instrumentations) {\n router = instrumentClientSideRouter(\n router,\n init.instrumentations.map((i) => i.router).filter(Boolean)\n );\n }\n return router;\n}\nfunction createStaticHandler(routes, opts) {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n let manifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let _mapRouteProperties = opts?.mapRouteProperties || defaultMapRouteProperties;\n let mapRouteProperties2 = _mapRouteProperties;\n let future = {\n ...opts?.future\n };\n if (opts?.instrumentations) {\n let instrumentations = opts.instrumentations;\n mapRouteProperties2 = (route) => {\n return {\n ..._mapRouteProperties(route),\n ...getRouteInstrumentationUpdates(\n instrumentations.map((i) => i.route).filter(Boolean),\n route\n )\n };\n };\n }\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties2,\n void 0,\n manifest\n );\n let routeBranches = flattenAndRankRoutes(dataRoutes);\n async function query(request, {\n requestContext,\n filterMatchesToLoad,\n skipLoaderErrorBubbling,\n skipRevalidation,\n dataStrategy,\n generateMiddlewareResponse,\n normalizePath\n } = {}) {\n let normalizePathImpl = normalizePath || defaultNormalizePath;\n let method = request.method;\n let location = createLocation(\n \"\",\n normalizePathImpl(request),\n null,\n \"default\"\n );\n let matches = matchRoutesImpl(\n dataRoutes,\n location,\n basename,\n false,\n routeBranches\n );\n requestContext = requestContext != null ? requestContext : new RouterContextProvider();\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } = getShortCircuitMatches(dataRoutes);\n let staticContext = {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {}\n };\n return generateMiddlewareResponse ? generateMiddlewareResponse(() => Promise.resolve(staticContext)) : staticContext;\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } = getShortCircuitMatches(dataRoutes);\n let staticContext = {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {}\n };\n return generateMiddlewareResponse ? generateMiddlewareResponse(() => Promise.resolve(staticContext)) : staticContext;\n }\n if (generateMiddlewareResponse) {\n invariant(\n requestContext instanceof RouterContextProvider,\n \"When using middleware in `staticHandler.query()`, any provided `requestContext` must be an instance of `RouterContextProvider`\"\n );\n try {\n await loadLazyMiddlewareForMatches(\n matches,\n manifest,\n mapRouteProperties2\n );\n let renderedStaticContext;\n let response = await runServerMiddlewarePipeline(\n {\n request,\n url: createDataFunctionUrl(request, location),\n pattern: getRoutePattern(matches),\n matches,\n params: matches[0].params,\n // If we're calling middleware then it must be enabled so we can cast\n // this to the proper type knowing it's not an `AppLoadContext`\n context: requestContext\n },\n async () => {\n let res = await generateMiddlewareResponse(\n async (revalidationRequest, opts2 = {}) => {\n let result2 = await queryImpl(\n revalidationRequest,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null,\n \"filterMatchesToLoad\" in opts2 ? opts2.filterMatchesToLoad ?? null : filterMatchesToLoad ?? null,\n skipRevalidation === true\n );\n if (isResponse(result2)) {\n return result2;\n }\n renderedStaticContext = { location, basename, ...result2 };\n return renderedStaticContext;\n }\n );\n return res;\n },\n async (error, routeId) => {\n if (isRedirectResponse(error)) {\n return error;\n }\n if (isResponse(error)) {\n try {\n error = new ErrorResponseImpl(\n error.status,\n error.statusText,\n await parseResponseBody(error)\n );\n } catch (e) {\n error = e;\n }\n }\n if (isDataWithResponseInit(error)) {\n error = dataWithResponseInitToErrorResponse(error);\n }\n if (renderedStaticContext) {\n if (routeId in renderedStaticContext.loaderData) {\n renderedStaticContext.loaderData[routeId] = void 0;\n }\n let staticContext = getStaticContextFromError(\n dataRoutes,\n renderedStaticContext,\n error,\n skipLoaderErrorBubbling ? routeId : findNearestBoundary(matches, routeId).route.id\n );\n return generateMiddlewareResponse(\n () => Promise.resolve(staticContext)\n );\n } else {\n let boundaryRouteId = skipLoaderErrorBubbling ? routeId : findNearestBoundary(\n matches,\n matches.find(\n (m) => m.route.id === routeId || m.route.loader\n )?.route.id || routeId\n ).route.id;\n let staticContext = {\n matches,\n location,\n basename,\n loaderData: {},\n actionData: null,\n errors: {\n [boundaryRouteId]: error\n },\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n actionHeaders: {},\n loaderHeaders: {}\n };\n return generateMiddlewareResponse(\n () => Promise.resolve(staticContext)\n );\n }\n }\n );\n invariant(isResponse(response), \"Expected a response in query()\");\n return response;\n } catch (e) {\n if (isResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null,\n filterMatchesToLoad || null,\n skipRevalidation === true\n );\n if (isResponse(result)) {\n return result;\n }\n return { location, basename, ...result };\n }\n async function queryRoute(request, {\n routeId,\n requestContext,\n dataStrategy,\n generateMiddlewareResponse,\n normalizePath\n } = {}) {\n let normalizePathImpl = normalizePath || defaultNormalizePath;\n let method = request.method;\n let location = createLocation(\n \"\",\n normalizePathImpl(request),\n null,\n \"default\"\n );\n let matches = matchRoutesImpl(\n dataRoutes,\n location,\n basename,\n false,\n routeBranches\n );\n requestContext = requestContext != null ? requestContext : new RouterContextProvider();\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n let match = routeId ? matches.find((m) => m.route.id === routeId) : getTargetMatch(matches, location);\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId\n });\n } else if (!match) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n if (generateMiddlewareResponse) {\n invariant(\n requestContext instanceof RouterContextProvider,\n \"When using middleware in `staticHandler.queryRoute()`, any provided `requestContext` must be an instance of `RouterContextProvider`\"\n );\n await loadLazyMiddlewareForMatches(matches, manifest, mapRouteProperties2);\n let response = await runServerMiddlewarePipeline(\n {\n request,\n url: createDataFunctionUrl(request, location),\n pattern: getRoutePattern(matches),\n matches,\n params: matches[0].params,\n // If we're calling middleware then it must be enabled so we can cast\n // this to the proper type knowing it's not an `AppLoadContext`\n context: requestContext\n },\n async () => {\n let res = await generateMiddlewareResponse(\n async (innerRequest) => {\n let result2 = await queryImpl(\n innerRequest,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match,\n null,\n false\n );\n let processed = handleQueryResult(result2);\n return isResponse(processed) ? processed : typeof processed === \"string\" ? new Response(processed) : Response.json(processed);\n }\n );\n return res;\n },\n (error) => {\n if (isDataWithResponseInit(error)) {\n return Promise.resolve(dataWithResponseInitToResponse(error));\n }\n if (isResponse(error)) {\n return Promise.resolve(error);\n }\n throw error;\n }\n );\n return response;\n }\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match,\n null,\n false\n );\n return handleQueryResult(result);\n function handleQueryResult(result2) {\n if (isResponse(result2)) {\n return result2;\n }\n let error = result2.errors ? Object.values(result2.errors)[0] : void 0;\n if (error !== void 0) {\n throw error;\n }\n if (result2.actionData) {\n return Object.values(result2.actionData)[0];\n }\n if (result2.loaderData) {\n return Object.values(result2.loaderData)[0];\n }\n return void 0;\n }\n }\n async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, skipRevalidation) {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n try {\n if (isMutationMethod(request.method)) {\n let result2 = await submit(\n request,\n location,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null,\n filterMatchesToLoad,\n skipRevalidation\n );\n return result2;\n }\n let result = await loadRouteData(\n request,\n location,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch,\n filterMatchesToLoad\n );\n return isResponse(result) ? result : {\n ...result,\n actionData: null,\n actionHeaders: {}\n };\n } catch (e) {\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === \"error\" /* error */) {\n throw e.result;\n }\n return e.result;\n }\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n async function submit(request, location, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest, filterMatchesToLoad, skipRevalidation) {\n let result;\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: \"error\" /* error */,\n error\n };\n } else {\n let dsMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n request,\n location,\n matches,\n actionMatch,\n [],\n requestContext\n );\n let results = await callDataStrategy(\n request,\n location,\n dsMatches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n result = results[actionMatch.route.id];\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest);\n }\n }\n if (isRedirectResult(result)) {\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")\n }\n });\n }\n if (isRouteRequest) {\n if (isErrorResult(result)) {\n throw result.error;\n }\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {}\n };\n }\n if (skipRevalidation) {\n if (isErrorResult(result)) {\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n return {\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: {\n ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n },\n matches,\n loaderData: {},\n errors: {\n [boundaryMatch.route.id]: result.error\n },\n loaderHeaders: {}\n };\n } else {\n return {\n actionData: {\n [actionMatch.route.id]: result.data\n },\n actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {},\n matches,\n loaderData: {},\n errors: null,\n statusCode: result.statusCode || 200,\n loaderHeaders: {}\n };\n }\n }\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal\n });\n if (isErrorResult(result)) {\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n let handlerContext2 = await loadRouteData(\n loaderRequest,\n location,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n filterMatchesToLoad,\n [boundaryMatch.route.id, result]\n );\n return {\n ...handlerContext2,\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: {\n ...result.headers ? { [actionMatch.route.id]: result.headers } : {}\n }\n };\n }\n let handlerContext = await loadRouteData(\n loaderRequest,\n location,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n filterMatchesToLoad\n );\n return {\n ...handlerContext,\n actionData: {\n [actionMatch.route.id]: result.data\n },\n // action status codes take precedence over loader status codes\n ...result.statusCode ? { statusCode: result.statusCode } : {},\n actionHeaders: result.headers ? { [actionMatch.route.id]: result.headers } : {}\n };\n }\n async function loadRouteData(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, filterMatchesToLoad, pendingActionResult) {\n let isRouteRequest = routeMatch != null;\n if (isRouteRequest && !routeMatch?.route.loader && !routeMatch?.route.lazy) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id\n });\n }\n let dsMatches;\n if (routeMatch) {\n dsMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n request,\n location,\n matches,\n routeMatch,\n [],\n requestContext\n );\n } else {\n let maxIdx = pendingActionResult && isErrorResult(pendingActionResult[1]) ? (\n // Up to but not including the boundary\n matches.findIndex((m) => m.route.id === pendingActionResult[0]) - 1\n ) : void 0;\n let pattern = getRoutePattern(matches);\n dsMatches = matches.map((match, index) => {\n if (maxIdx != null && index > maxIdx) {\n return getDataStrategyMatch(\n mapRouteProperties2,\n manifest,\n request,\n location,\n pattern,\n match,\n [],\n requestContext,\n false\n );\n }\n return getDataStrategyMatch(\n mapRouteProperties2,\n manifest,\n request,\n location,\n pattern,\n match,\n [],\n requestContext,\n (match.route.loader || match.route.lazy) != null && (!filterMatchesToLoad || filterMatchesToLoad(match))\n );\n });\n }\n if (!dataStrategy && !dsMatches.some((m) => m.shouldLoad)) {\n return {\n matches,\n loaderData: {},\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null,\n statusCode: 200,\n loaderHeaders: {}\n };\n }\n let results = await callDataStrategy(\n request,\n location,\n dsMatches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest);\n }\n let handlerContext = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n true,\n skipLoaderErrorBubbling\n );\n return {\n ...handlerContext,\n matches\n };\n }\n async function callDataStrategy(request, location, matches, isRouteRequest, requestContext, dataStrategy) {\n let results = await callDataStrategyImpl(\n dataStrategy || defaultDataStrategy,\n request,\n location,\n matches,\n null,\n requestContext,\n true\n );\n let dataResults = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResult(result)) {\n let response = result.result;\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n match.route.id,\n matches,\n basename\n );\n }\n if (isRouteRequest) {\n if (isResponse(result.result)) {\n throw result;\n } else if (isDataWithResponseInit(result.result)) {\n throw dataWithResponseInitToResponse(result.result);\n }\n }\n dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\n }\n return {\n dataRoutes,\n _internalRouteBranches: routeBranches,\n query,\n queryRoute\n };\n}\nfunction getStaticContextFromError(routes, handlerContext, error, boundaryId) {\n let errorBoundaryId = boundaryId || handlerContext._deepestRenderedBoundaryId || routes[0].id;\n return {\n ...handlerContext,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [errorBoundaryId]: error\n }\n };\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest) {\n if (request.signal.reason !== void 0) {\n throw request.signal.reason;\n }\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted without an \\`AbortSignal.reason\\`: ${request.method} ${request.url}`\n );\n}\nfunction isSubmissionNavigation(opts) {\n return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== void 0);\n}\nfunction defaultNormalizePath(request) {\n let url = new URL(request.url);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n}\nfunction normalizeTo(location, matches, basename, to, fromRouteId, relative) {\n let contextualMatches;\n let activeRouteMatch;\n if (fromRouteId) {\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n if (basename !== \"/\") {\n path.pathname = prependBasename({ basename, pathname: path.pathname });\n }\n return createPath(path);\n}\nfunction normalizeNavigateOptions(isFetcher, path, opts) {\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod })\n };\n }\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" })\n });\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = rawFormMethod.toUpperCase();\n let formAction = stripHashFromPath(path);\n if (opts.body !== void 0) {\n if (opts.formEncType === \"text/plain\") {\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ? (\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\n`,\n \"\"\n )\n ) : String(opts.body);\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: void 0,\n json: void 0,\n text\n }\n };\n } else if (opts.formEncType === \"application/json\") {\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n try {\n let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: void 0,\n json,\n text: void 0\n }\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n let searchParams;\n let formData;\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n let submission = {\n formMethod,\n formAction,\n formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n formData,\n json: void 0,\n text: void 0\n };\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n let parsedPath = parsePath(path);\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n return { path: createPath(parsedPath), submission };\n}\nfunction getMatchesToLoad(request, scopedContext, mapRouteProperties2, manifest, history, state, matches, submission, location, lazyRoutePropertiesToSkip, initialHydration, isRevalidationRequired, cancelledFetcherLoads, fetchersQueuedForDeletion, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, hasPatchRoutesOnNavigation, branches, pendingActionResult, callSiteDefaultShouldRevalidate) {\n let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : void 0;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n let maxIdx;\n if (initialHydration && state.errors) {\n let boundaryId = Object.keys(state.errors)[0];\n maxIdx = matches.findIndex((m) => m.route.id === boundaryId);\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n let boundaryId = pendingActionResult[0];\n maxIdx = matches.findIndex((m) => m.route.id === boundaryId) - 1;\n }\n let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : void 0;\n let shouldSkipRevalidation = actionStatus && actionStatus >= 400;\n let baseShouldRevalidateArgs = {\n currentUrl,\n currentParams: state.matches[0]?.params || {},\n nextUrl,\n nextParams: matches[0].params,\n ...submission,\n actionResult,\n actionStatus\n };\n let pattern = getRoutePattern(matches);\n let dsMatches = matches.map((match, index) => {\n let { route } = match;\n let forceShouldLoad = null;\n if (maxIdx != null && index > maxIdx) {\n forceShouldLoad = false;\n } else if (route.lazy) {\n forceShouldLoad = true;\n } else if (!routeHasLoaderOrMiddleware(route)) {\n forceShouldLoad = false;\n } else if (initialHydration) {\n let { shouldLoad: shouldLoad2 } = getRouteHydrationStatus(\n route,\n state.loaderData,\n state.errors\n );\n forceShouldLoad = shouldLoad2;\n } else if (isNewLoader(state.loaderData, state.matches[index], match)) {\n forceShouldLoad = true;\n }\n if (forceShouldLoad !== null) {\n return getDataStrategyMatch(\n mapRouteProperties2,\n manifest,\n request,\n location,\n pattern,\n match,\n lazyRoutePropertiesToSkip,\n scopedContext,\n forceShouldLoad\n );\n }\n let defaultShouldRevalidate = false;\n if (typeof callSiteDefaultShouldRevalidate === \"boolean\") {\n defaultShouldRevalidate = callSiteDefaultShouldRevalidate;\n } else if (shouldSkipRevalidation) {\n defaultShouldRevalidate = false;\n } else if (isRevalidationRequired) {\n defaultShouldRevalidate = true;\n } else if (currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search) {\n defaultShouldRevalidate = true;\n } else if (currentUrl.search !== nextUrl.search) {\n defaultShouldRevalidate = true;\n } else if (isNewRouteInstance(state.matches[index], match)) {\n defaultShouldRevalidate = true;\n }\n let shouldRevalidateArgs = {\n ...baseShouldRevalidateArgs,\n defaultShouldRevalidate\n };\n let shouldLoad = shouldRevalidateLoader(match, shouldRevalidateArgs);\n return getDataStrategyMatch(\n mapRouteProperties2,\n manifest,\n request,\n location,\n pattern,\n match,\n lazyRoutePropertiesToSkip,\n scopedContext,\n shouldLoad,\n shouldRevalidateArgs,\n callSiteDefaultShouldRevalidate\n );\n });\n let revalidatingFetchers = [];\n fetchLoadMatches.forEach((f, key) => {\n if (initialHydration || !matches.some((m) => m.route.id === f.routeId) || fetchersQueuedForDeletion.has(key)) {\n return;\n }\n let fetcher = state.fetchers.get(key);\n let isMidInitialLoad = fetcher && fetcher.state !== \"idle\" && fetcher.data === void 0;\n let fetcherMatches = matchRoutesImpl(\n routesToUse,\n f.path,\n basename ?? \"/\",\n false,\n branches\n );\n if (!fetcherMatches) {\n if (hasPatchRoutesOnNavigation && isMidInitialLoad) {\n return;\n }\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n request: null,\n controller: null\n });\n return;\n }\n if (fetchRedirectIds.has(key)) {\n return;\n }\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n let fetchController = new AbortController();\n let fetchRequest = createClientSideRequest(\n history,\n f.path,\n fetchController.signal\n );\n let fetcherDsMatches = null;\n if (cancelledFetcherLoads.has(key)) {\n cancelledFetcherLoads.delete(key);\n fetcherDsMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n fetchRequest,\n f.path,\n fetcherMatches,\n fetcherMatch,\n lazyRoutePropertiesToSkip,\n scopedContext\n );\n } else if (isMidInitialLoad) {\n if (isRevalidationRequired) {\n fetcherDsMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n fetchRequest,\n f.path,\n fetcherMatches,\n fetcherMatch,\n lazyRoutePropertiesToSkip,\n scopedContext\n );\n }\n } else {\n let defaultShouldRevalidate;\n if (typeof callSiteDefaultShouldRevalidate === \"boolean\") {\n defaultShouldRevalidate = callSiteDefaultShouldRevalidate;\n } else if (shouldSkipRevalidation) {\n defaultShouldRevalidate = false;\n } else {\n defaultShouldRevalidate = isRevalidationRequired;\n }\n let shouldRevalidateArgs = {\n ...baseShouldRevalidateArgs,\n defaultShouldRevalidate\n };\n if (shouldRevalidateLoader(fetcherMatch, shouldRevalidateArgs)) {\n fetcherDsMatches = getTargetedDataStrategyMatches(\n mapRouteProperties2,\n manifest,\n fetchRequest,\n f.path,\n fetcherMatches,\n fetcherMatch,\n lazyRoutePropertiesToSkip,\n scopedContext,\n shouldRevalidateArgs\n );\n }\n }\n if (fetcherDsMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherDsMatches,\n match: fetcherMatch,\n request: fetchRequest,\n controller: fetchController\n });\n }\n });\n return { dsMatches, revalidatingFetchers };\n}\nfunction routeHasLoaderOrMiddleware(route) {\n return route.loader != null || route.middleware != null && route.middleware.length > 0;\n}\nfunction getRouteHydrationStatus(route, loaderData, errors) {\n if (route.lazy) {\n return { shouldLoad: true, renderFallback: true };\n }\n if (!routeHasLoaderOrMiddleware(route)) {\n return { shouldLoad: false, renderFallback: false };\n }\n let hasData = loaderData != null && route.id in loaderData;\n let hasError = errors != null && errors[route.id] !== void 0;\n if (!hasData && hasError) {\n return { shouldLoad: false, renderFallback: false };\n }\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return { shouldLoad: true, renderFallback: !hasData };\n }\n let shouldLoad = !hasData && !hasError;\n return { shouldLoad, renderFallback: shouldLoad };\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n let isNew = (\n // [a] -> [a, b]\n !currentMatch || // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id\n );\n let isMissingData = !currentLoaderData.hasOwnProperty(match.route.id);\n return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname || // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, dataRoutes, manifest, mapRouteProperties2, allowElementMutations) {\n let childrenToPatch;\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = dataRoutes.activeRoutes;\n }\n let uniqueChildren = [];\n let existingChildren = [];\n children.forEach((newRoute) => {\n let existingRoute = childrenToPatch.find(\n (existingRoute2) => isSameRoute(newRoute, existingRoute2)\n );\n if (existingRoute) {\n existingChildren.push({ existingRoute, newRoute });\n } else {\n uniqueChildren.push(newRoute);\n }\n });\n if (uniqueChildren.length > 0) {\n let newRoutes = convertRoutesToDataRoutes(\n uniqueChildren,\n mapRouteProperties2,\n [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n manifest\n );\n childrenToPatch.push(...newRoutes);\n }\n if (allowElementMutations && existingChildren.length > 0) {\n for (let i = 0; i < existingChildren.length; i++) {\n let { existingRoute, newRoute } = existingChildren[i];\n let existingRouteTyped = existingRoute;\n let [newRouteTyped] = convertRoutesToDataRoutes(\n [newRoute],\n mapRouteProperties2,\n [],\n // Doesn't matter for mutated routes since they already have an id\n {},\n // Don't touch the manifest here since we're updating in place\n true\n );\n Object.assign(existingRouteTyped, {\n element: newRouteTyped.element ? newRouteTyped.element : existingRouteTyped.element,\n errorElement: newRouteTyped.errorElement ? newRouteTyped.errorElement : existingRouteTyped.errorElement,\n hydrateFallbackElement: newRouteTyped.hydrateFallbackElement ? newRouteTyped.hydrateFallbackElement : existingRouteTyped.hydrateFallbackElement\n });\n }\n }\n if (!dataRoutes.hasHMRRoutes) {\n dataRoutes.setRoutes([...dataRoutes.activeRoutes]);\n }\n}\nfunction isSameRoute(newRoute, existingRoute) {\n if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n return true;\n }\n if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n return false;\n }\n if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n return true;\n }\n return newRoute.children?.every(\n (aChild, i) => existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n ) ?? false;\n}\nvar lazyRoutePropertyCache = /* @__PURE__ */ new WeakMap();\nvar loadLazyRouteProperty = ({\n key,\n route,\n manifest,\n mapRouteProperties: mapRouteProperties2\n}) => {\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n if (!routeToUpdate.lazy || typeof routeToUpdate.lazy !== \"object\") {\n return;\n }\n let lazyFn = routeToUpdate.lazy[key];\n if (!lazyFn) {\n return;\n }\n let cache = lazyRoutePropertyCache.get(routeToUpdate);\n if (!cache) {\n cache = {};\n lazyRoutePropertyCache.set(routeToUpdate, cache);\n }\n let cachedPromise = cache[key];\n if (cachedPromise) {\n return cachedPromise;\n }\n let propertyPromise = (async () => {\n let isUnsupported = isUnsupportedLazyRouteObjectKey(key);\n let staticRouteValue = routeToUpdate[key];\n let isStaticallyDefined = staticRouteValue !== void 0 && key !== \"hasErrorBoundary\";\n if (isUnsupported) {\n warning(\n !isUnsupported,\n \"Route property \" + key + \" is not a supported lazy route property. This property will be ignored.\"\n );\n cache[key] = Promise.resolve();\n } else if (isStaticallyDefined) {\n warning(\n false,\n `Route \"${routeToUpdate.id}\" has a static property \"${key}\" defined. The lazy property will be ignored.`\n );\n } else {\n let value = await lazyFn();\n if (value != null) {\n Object.assign(routeToUpdate, { [key]: value });\n Object.assign(routeToUpdate, mapRouteProperties2(routeToUpdate));\n }\n }\n if (typeof routeToUpdate.lazy === \"object\") {\n routeToUpdate.lazy[key] = void 0;\n if (Object.values(routeToUpdate.lazy).every((value) => value === void 0)) {\n routeToUpdate.lazy = void 0;\n }\n }\n })();\n cache[key] = propertyPromise;\n return propertyPromise;\n};\nvar lazyRouteFunctionCache = /* @__PURE__ */ new WeakMap();\nfunction loadLazyRoute(route, type, manifest, mapRouteProperties2, lazyRoutePropertiesToSkip) {\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n if (!route.lazy) {\n return {\n lazyRoutePromise: void 0,\n lazyHandlerPromise: void 0\n };\n }\n if (typeof route.lazy === \"function\") {\n let cachedPromise = lazyRouteFunctionCache.get(routeToUpdate);\n if (cachedPromise) {\n return {\n lazyRoutePromise: cachedPromise,\n lazyHandlerPromise: cachedPromise\n };\n }\n let lazyRoutePromise2 = (async () => {\n invariant(\n typeof route.lazy === \"function\",\n \"No lazy route function found\"\n );\n let lazyRoute = await route.lazy();\n let routeUpdates = {};\n for (let lazyRouteProperty in lazyRoute) {\n let lazyValue = lazyRoute[lazyRouteProperty];\n if (lazyValue === void 0) {\n continue;\n }\n let isUnsupported = isUnsupportedLazyRouteFunctionKey(lazyRouteProperty);\n let staticRouteValue = routeToUpdate[lazyRouteProperty];\n let isStaticallyDefined = staticRouteValue !== void 0 && // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n if (isUnsupported) {\n warning(\n !isUnsupported,\n \"Route property \" + lazyRouteProperty + \" is not a supported property to be returned from a lazy route function. This property will be ignored.\"\n );\n } else if (isStaticallyDefined) {\n warning(\n !isStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" defined but its lazy function is also returning a value for this property. The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n } else {\n routeUpdates[lazyRouteProperty] = lazyValue;\n }\n }\n Object.assign(routeToUpdate, routeUpdates);\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided `mapRouteProperties`\n // function to set the framework-aware properties (`element`/`hasErrorBoundary`)\n // since the logic will differ between frameworks.\n ...mapRouteProperties2(routeToUpdate),\n lazy: void 0\n });\n })();\n lazyRouteFunctionCache.set(routeToUpdate, lazyRoutePromise2);\n lazyRoutePromise2.catch(() => {\n });\n return {\n lazyRoutePromise: lazyRoutePromise2,\n lazyHandlerPromise: lazyRoutePromise2\n };\n }\n let lazyKeys = Object.keys(route.lazy);\n let lazyPropertyPromises = [];\n let lazyHandlerPromise = void 0;\n for (let key of lazyKeys) {\n if (lazyRoutePropertiesToSkip && lazyRoutePropertiesToSkip.includes(key)) {\n continue;\n }\n let promise = loadLazyRouteProperty({\n key,\n route,\n manifest,\n mapRouteProperties: mapRouteProperties2\n });\n if (promise) {\n lazyPropertyPromises.push(promise);\n if (key === type) {\n lazyHandlerPromise = promise;\n }\n }\n }\n let lazyRoutePromise = lazyPropertyPromises.length > 0 ? Promise.all(lazyPropertyPromises).then(() => {\n }) : void 0;\n lazyRoutePromise?.catch(() => {\n });\n lazyHandlerPromise?.catch(() => {\n });\n return {\n lazyRoutePromise,\n lazyHandlerPromise\n };\n}\nfunction isNonNullable(value) {\n return value !== void 0;\n}\nfunction loadLazyMiddlewareForMatches(matches, manifest, mapRouteProperties2) {\n let promises = matches.map(({ route }) => {\n if (typeof route.lazy !== \"object\" || !route.lazy.middleware) {\n return void 0;\n }\n return loadLazyRouteProperty({\n key: \"middleware\",\n route,\n manifest,\n mapRouteProperties: mapRouteProperties2\n });\n }).filter(isNonNullable);\n return promises.length > 0 ? Promise.all(promises) : void 0;\n}\nasync function defaultDataStrategy(args) {\n let matchesToLoad = args.matches.filter((m) => m.shouldLoad);\n let keyedResults = {};\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n results.forEach((result, i) => {\n keyedResults[matchesToLoad[i].route.id] = result;\n });\n return keyedResults;\n}\nasync function defaultDataStrategyWithMiddleware(args) {\n if (!args.matches.some((m) => m.route.middleware)) {\n return defaultDataStrategy(args);\n }\n return runClientMiddlewarePipeline(args, () => defaultDataStrategy(args));\n}\nfunction runServerMiddlewarePipeline(args, handler, errorHandler) {\n return runMiddlewarePipeline(\n args,\n handler,\n processResult,\n isResponse,\n errorHandler\n );\n function processResult(result) {\n return isDataWithResponseInit(result) ? dataWithResponseInitToResponse(result) : result;\n }\n}\nfunction runClientMiddlewarePipeline(args, handler) {\n return runMiddlewarePipeline(\n args,\n handler,\n (r) => {\n if (isRedirectResponse(r)) {\n throw r;\n }\n return r;\n },\n isDataStrategyResults,\n errorHandler\n );\n function errorHandler(error, routeId, nextResult) {\n if (nextResult) {\n return Promise.resolve(\n Object.assign(nextResult.value, {\n [routeId]: { type: \"error\", result: error }\n })\n );\n } else {\n let { matches } = args;\n let maxBoundaryIdx = Math.min(\n // Throwing route\n Math.max(\n matches.findIndex((m) => m.route.id === routeId),\n 0\n ),\n // or the shallowest route that needs to load data\n Math.max(\n matches.findIndex((m) => m.shouldCallHandler()),\n 0\n )\n );\n let boundaryRouteId = findNearestBoundary(\n matches,\n matches[maxBoundaryIdx].route.id\n ).route.id;\n return Promise.resolve({\n [boundaryRouteId]: { type: \"error\", result: error }\n });\n }\n }\n}\nasync function runMiddlewarePipeline(args, handler, processResult, isResult, errorHandler) {\n let { matches, ...dataFnArgs } = args;\n let tuples = matches.flatMap(\n (m) => m.route.middleware ? m.route.middleware.map((fn) => [m.route.id, fn]) : []\n );\n let result = await callRouteMiddleware(\n dataFnArgs,\n tuples,\n handler,\n processResult,\n isResult,\n errorHandler\n );\n return result;\n}\nasync function callRouteMiddleware(args, middlewares, handler, processResult, isResult, errorHandler, idx = 0) {\n let { request } = args;\n if (request.signal.aborted) {\n throw request.signal.reason ?? new Error(`Request aborted: ${request.method} ${request.url}`);\n }\n let tuple = middlewares[idx];\n if (!tuple) {\n let result = await handler();\n return result;\n }\n let [routeId, middleware] = tuple;\n let nextResult;\n let next = async () => {\n if (nextResult) {\n throw new Error(\"You may only call `next()` once per middleware\");\n }\n try {\n let result = await callRouteMiddleware(\n args,\n middlewares,\n handler,\n processResult,\n isResult,\n errorHandler,\n idx + 1\n );\n nextResult = { value: result };\n return nextResult.value;\n } catch (error) {\n nextResult = { value: await errorHandler(error, routeId, nextResult) };\n return nextResult.value;\n }\n };\n try {\n let value = await middleware(args, next);\n let result = value != null ? processResult(value) : void 0;\n if (isResult(result)) {\n return result;\n } else if (nextResult) {\n return result ?? nextResult.value;\n } else {\n nextResult = { value: await next() };\n return nextResult.value;\n }\n } catch (error) {\n let response = await errorHandler(error, routeId, nextResult);\n return response;\n }\n}\nfunction getDataStrategyMatchLazyPromises(mapRouteProperties2, manifest, request, match, lazyRoutePropertiesToSkip) {\n let lazyMiddlewarePromise = loadLazyRouteProperty({\n key: \"middleware\",\n route: match.route,\n manifest,\n mapRouteProperties: mapRouteProperties2\n });\n let lazyRoutePromises = loadLazyRoute(\n match.route,\n isMutationMethod(request.method) ? \"action\" : \"loader\",\n manifest,\n mapRouteProperties2,\n lazyRoutePropertiesToSkip\n );\n return {\n middleware: lazyMiddlewarePromise,\n route: lazyRoutePromises.lazyRoutePromise,\n handler: lazyRoutePromises.lazyHandlerPromise\n };\n}\nfunction getDataStrategyMatch(mapRouteProperties2, manifest, request, path, pattern, match, lazyRoutePropertiesToSkip, scopedContext, shouldLoad, shouldRevalidateArgs = null, callSiteDefaultShouldRevalidate) {\n let isUsingNewApi = false;\n let _lazyPromises = getDataStrategyMatchLazyPromises(\n mapRouteProperties2,\n manifest,\n request,\n match,\n lazyRoutePropertiesToSkip\n );\n return {\n ...match,\n _lazyPromises,\n shouldLoad,\n shouldRevalidateArgs,\n shouldCallHandler(defaultShouldRevalidate) {\n isUsingNewApi = true;\n if (!shouldRevalidateArgs) {\n return shouldLoad;\n }\n if (typeof callSiteDefaultShouldRevalidate === \"boolean\") {\n return shouldRevalidateLoader(match, {\n ...shouldRevalidateArgs,\n defaultShouldRevalidate: callSiteDefaultShouldRevalidate\n });\n }\n if (typeof defaultShouldRevalidate === \"boolean\") {\n return shouldRevalidateLoader(match, {\n ...shouldRevalidateArgs,\n defaultShouldRevalidate\n });\n }\n return shouldRevalidateLoader(match, shouldRevalidateArgs);\n },\n resolve(handlerOverride) {\n let { lazy, loader, middleware } = match.route;\n let callHandler = isUsingNewApi || shouldLoad || handlerOverride && !isMutationMethod(request.method) && (lazy || loader);\n let isMiddlewareOnlyRoute = middleware && middleware.length > 0 && !loader && !lazy;\n if (callHandler && (isMutationMethod(request.method) || !isMiddlewareOnlyRoute)) {\n return callLoaderOrAction({\n request,\n path,\n pattern,\n match,\n lazyHandlerPromise: _lazyPromises?.handler,\n lazyRoutePromise: _lazyPromises?.route,\n handlerOverride,\n scopedContext\n });\n }\n return Promise.resolve({ type: \"data\" /* data */, result: void 0 });\n }\n };\n}\nfunction getTargetedDataStrategyMatches(mapRouteProperties2, manifest, request, path, matches, targetMatch, lazyRoutePropertiesToSkip, scopedContext, shouldRevalidateArgs = null) {\n return matches.map((match) => {\n if (match.route.id !== targetMatch.route.id) {\n return {\n ...match,\n shouldLoad: false,\n shouldRevalidateArgs,\n shouldCallHandler: () => false,\n _lazyPromises: getDataStrategyMatchLazyPromises(\n mapRouteProperties2,\n manifest,\n request,\n match,\n lazyRoutePropertiesToSkip\n ),\n resolve: () => Promise.resolve({ type: \"data\", result: void 0 })\n };\n }\n return getDataStrategyMatch(\n mapRouteProperties2,\n manifest,\n request,\n path,\n getRoutePattern(matches),\n match,\n lazyRoutePropertiesToSkip,\n scopedContext,\n true,\n shouldRevalidateArgs\n );\n });\n}\nasync function callDataStrategyImpl(dataStrategyImpl, request, path, matches, fetcherKey, scopedContext, isStaticHandler) {\n if (matches.some((m) => m._lazyPromises?.middleware)) {\n await Promise.all(matches.map((m) => m._lazyPromises?.middleware));\n }\n let dataStrategyArgs = {\n request,\n url: createDataFunctionUrl(request, path),\n pattern: getRoutePattern(matches),\n params: matches[0].params,\n context: scopedContext,\n matches\n };\n let runClientMiddleware = isStaticHandler ? () => {\n throw new Error(\n \"You cannot call `runClientMiddleware()` from a static handler `dataStrategy`. Middleware is run outside of `dataStrategy` during SSR in order to bubble up the Response. You can enable middleware via the `respond` API in `query`/`queryRoute`\"\n );\n } : (cb) => {\n let typedDataStrategyArgs = dataStrategyArgs;\n return runClientMiddlewarePipeline(typedDataStrategyArgs, () => {\n return cb({\n ...typedDataStrategyArgs,\n fetcherKey,\n runClientMiddleware: () => {\n throw new Error(\n \"Cannot call `runClientMiddleware()` from within an `runClientMiddleware` handler\"\n );\n }\n });\n });\n };\n let results = await dataStrategyImpl({\n ...dataStrategyArgs,\n fetcherKey,\n runClientMiddleware\n });\n try {\n await Promise.all(\n matches.flatMap((m) => [\n m._lazyPromises?.handler,\n m._lazyPromises?.route\n ])\n );\n } catch (e) {\n }\n return results;\n}\nasync function callLoaderOrAction({\n request,\n path,\n pattern,\n match,\n lazyHandlerPromise,\n lazyRoutePromise,\n handlerOverride,\n scopedContext\n}) {\n let result;\n let onReject;\n let isAction = isMutationMethod(request.method);\n let type = isAction ? \"action\" : \"loader\";\n let runHandler = (handler) => {\n let reject;\n let abortPromise = new Promise((_, r) => reject = r);\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n let actualHandler = (ctx) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean \"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n url: createDataFunctionUrl(request, path),\n pattern,\n params: match.params,\n context: scopedContext\n },\n ...ctx !== void 0 ? [ctx] : []\n );\n };\n let handlerPromise = (async () => {\n try {\n let val = await (handlerOverride ? handlerOverride((ctx) => actualHandler(ctx)) : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n return Promise.race([handlerPromise, abortPromise]);\n };\n try {\n let handler = isAction ? match.route.action : match.route.loader;\n if (lazyHandlerPromise || lazyRoutePromise) {\n if (handler) {\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n // Ensure all lazy route promises are resolved before continuing\n lazyHandlerPromise,\n lazyRoutePromise\n ]);\n if (handlerError !== void 0) {\n throw handlerError;\n }\n result = value;\n } else {\n await lazyHandlerPromise;\n let handler2 = isAction ? match.route.action : match.route.loader;\n if (handler2) {\n [result] = await Promise.all([runHandler(handler2), lazyRoutePromise]);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id\n });\n } else {\n return { type: \"data\" /* data */, result: void 0 };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname\n });\n } else {\n result = await runHandler(handler);\n }\n } catch (e) {\n return { type: \"error\" /* error */, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n return result;\n}\nasync function parseResponseBody(response) {\n let contentType = response.headers.get(\"Content-Type\");\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n return response.body == null ? null : response.json();\n }\n return response.text();\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n let { result, type } = dataStrategyResult;\n if (isResponse(result)) {\n let data2;\n try {\n data2 = await parseResponseBody(result);\n } catch (e) {\n return { type: \"error\" /* error */, error: e };\n }\n if (type === \"error\" /* error */) {\n return {\n type: \"error\" /* error */,\n error: new ErrorResponseImpl(result.status, result.statusText, data2),\n statusCode: result.status,\n headers: result.headers\n };\n }\n return {\n type: \"data\" /* data */,\n data: data2,\n statusCode: result.status,\n headers: result.headers\n };\n }\n if (type === \"error\" /* error */) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: \"error\" /* error */,\n error: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return {\n type: \"error\" /* error */,\n error: dataWithResponseInitToErrorResponse(result),\n statusCode: isRouteErrorResponse(result) ? result.status : void 0,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return {\n type: \"error\" /* error */,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : void 0\n };\n }\n if (isDataWithResponseInit(result)) {\n return {\n type: \"data\" /* data */,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers ? new Headers(result.init.headers) : void 0\n };\n }\n return { type: \"data\" /* data */, data: result };\n}\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n if (!isAbsoluteUrl(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n location\n );\n response.headers.set(\"Location\", location);\n }\n return response;\n}\nvar invalidProtocols = [\n \"about:\",\n \"blob:\",\n \"chrome:\",\n \"chrome-untrusted:\",\n \"content:\",\n \"data:\",\n \"devtools:\",\n \"file:\",\n \"filesystem:\",\n // eslint-disable-next-line no-script-url\n \"javascript:\"\n];\nfunction normalizeRedirectLocation(location, currentUrl, basename, historyInstance) {\n if (isAbsoluteUrl(location)) {\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n if (invalidProtocols.includes(url.protocol)) {\n throw new Error(\"Invalid redirect location\");\n }\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return removeDoubleSlashes(url.pathname) + url.search + url.hash;\n }\n }\n try {\n let url = historyInstance.createURL(location);\n if (invalidProtocols.includes(url.protocol)) {\n throw new Error(\"Invalid redirect location\");\n }\n } catch (e) {\n }\n return location;\n}\nfunction createClientSideRequest(history, location, signal, submission) {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init = { signal };\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n init.method = formMethod.toUpperCase();\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n init.body = submission.text;\n } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n init.body = submission.formData;\n }\n }\n return new Request(url, init);\n}\nfunction createDataFunctionUrl(request, path) {\n let url = new URL(request.url);\n let parsed = typeof path === \"string\" ? parsePath(path) : path;\n url.pathname = parsed.pathname || \"/\";\n if (parsed.search) {\n let searchParams = new URLSearchParams(parsed.search);\n let indexValues = searchParams.getAll(\"index\");\n searchParams.delete(\"index\");\n for (let value of indexValues.filter(Boolean)) {\n searchParams.append(\"index\", value);\n }\n url.search = searchParams.size ? `?${searchParams.toString()}` : \"\";\n } else {\n url.search = \"\";\n }\n url.hash = parsed.hash || \"\";\n return url;\n}\nfunction convertFormDataToSearchParams(formData) {\n let searchParams = new URLSearchParams();\n for (let [key, value] of formData.entries()) {\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, isStaticHandler = false, skipLoaderErrorBubbling = false) {\n let loaderData = {};\n let errors = null;\n let statusCode;\n let foundError = false;\n let loaderHeaders = {};\n let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : void 0;\n matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n if (pendingError !== void 0) {\n error = pendingError;\n pendingError = void 0;\n }\n errors = errors || {};\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n if (!isStaticHandler) {\n loaderData[id] = ResetLoaderDataSymbol;\n }\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n if (pendingError !== void 0 && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n if (pendingActionResult[2]) {\n loaderData[pendingActionResult[2]] = void 0;\n }\n }\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders\n };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, workingFetchers) {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n results,\n pendingActionResult\n );\n revalidatingFetchers.filter((f) => !f.matches || f.matches.some((m) => m.shouldLoad)).forEach((rf) => {\n let { key, match, controller } = rf;\n if (controller && controller.signal.aborted) {\n return;\n }\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error\n };\n }\n workingFetchers.delete(key);\n } else if (isRedirectResult(result)) {\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n workingFetchers.set(key, doneFetcher);\n }\n });\n return { loaderData, errors };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n let mergedLoaderData = Object.entries(newLoaderData).filter(([, v]) => v !== ResetLoaderDataSymbol).reduce((merged, [k, v]) => {\n merged[k] = v;\n return merged;\n }, {});\n for (let match of matches) {\n let id = match.route.id;\n if (!newLoaderData.hasOwnProperty(id) && loaderData.hasOwnProperty(id) && match.route.loader) {\n mergedLoaderData[id] = loaderData[id];\n }\n if (errors && errors.hasOwnProperty(id)) {\n break;\n }\n }\n return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1]) ? {\n // Clear out prior actionData on errors\n actionData: {}\n } : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data\n }\n };\n}\nfunction findNearestBoundary(matches, routeId) {\n let eligibleMatches = routeId ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1) : [...matches];\n return eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n let route = routes.length === 1 ? routes[0] : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`\n };\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route\n }\n ],\n route\n };\n}\nfunction getInternalRouterError(status, {\n pathname,\n routeId,\n method,\n type,\n message\n} = {}) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage = `You made a ${method} request to \"${pathname}\" but did not provide a \\`loader\\` for route \"${routeId}\", so there is no way to handle the request.`;\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage = `You made a ${method.toUpperCase()} request to \"${pathname}\" but did not provide an \\`action\\` for route \"${routeId}\", so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\nfunction findRedirect(results) {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\n }\n }\n}\nfunction stripHashFromPath(path) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\nfunction isHashChangeOnly(a, b) {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n if (a.hash === \"\") {\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n return true;\n } else if (b.hash !== \"\") {\n return true;\n }\n return false;\n}\nfunction dataWithResponseInitToResponse(data2) {\n return Response.json(data2.data, data2.init ?? void 0);\n}\nfunction dataWithResponseInitToErrorResponse(data2) {\n return new ErrorResponseImpl(\n data2.init?.status ?? 500,\n data2.init?.statusText ?? \"Internal Server Error\",\n data2.data\n );\n}\nfunction isDataStrategyResults(result) {\n return result != null && typeof result === \"object\" && Object.entries(result).every(\n ([key, value]) => typeof key === \"string\" && isDataStrategyResult(value)\n );\n}\nfunction isDataStrategyResult(result) {\n return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === \"data\" /* data */ || result.type === \"error\" /* error */);\n}\nfunction isRedirectDataStrategyResult(result) {\n return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isErrorResult(result) {\n return result.type === \"error\" /* error */;\n}\nfunction isRedirectResult(result) {\n return (result && result.type) === \"redirect\" /* redirect */;\n}\nfunction isDataWithResponseInit(value) {\n return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isResponse(value) {\n return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectStatusCode(statusCode) {\n return redirectStatusCodes.has(statusCode);\n}\nfunction isRedirectResponse(result) {\n return isResponse(result) && isRedirectStatusCode(result.status) && result.headers.has(\"Location\");\n}\nfunction isValidMethod(method) {\n return validRequestMethods.has(method.toUpperCase());\n}\nfunction isMutationMethod(method) {\n return validMutationMethods.has(method.toUpperCase());\n}\nfunction hasNakedIndexQuery(search) {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n return matches[matches.length - 1];\n }\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n let { formMethod, formAction, formEncType, text, formData, json } = navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: void 0,\n json: void 0,\n text\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: void 0,\n text: void 0\n };\n } else if (json !== void 0) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: void 0,\n json,\n text: void 0\n };\n }\n}\nfunction getLoadingNavigation(location, matches, historyAction, submission) {\n if (submission) {\n let navigation = {\n state: \"loading\",\n location,\n matches,\n historyAction,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n } else {\n let navigation = {\n state: \"loading\",\n location,\n matches,\n historyAction,\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0\n };\n return navigation;\n }\n}\nfunction getSubmittingNavigation(location, matches, historyAction, submission) {\n let navigation = {\n state: \"submitting\",\n location,\n matches,\n historyAction,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n}\nfunction getLoadingFetcher(submission, data2) {\n if (submission) {\n let fetcher = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: data2\n };\n return fetcher;\n } else {\n let fetcher = {\n state: \"loading\",\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0,\n data: data2\n };\n return fetcher;\n }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n let fetcher = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : void 0\n };\n return fetcher;\n}\nfunction getDoneFetcher(data2) {\n let fetcher = {\n state: \"idle\",\n formMethod: void 0,\n formAction: void 0,\n formEncType: void 0,\n formData: void 0,\n json: void 0,\n text: void 0,\n data: data2\n };\n return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n if (transitions.size > 0) {\n let json = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\nfunction createDeferred() {\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = async (val) => {\n res(val);\n try {\n await promise;\n } catch (e) {\n }\n };\n reject = async (error) => {\n rej(error);\n try {\n await promise;\n } catch (e) {\n }\n };\n });\n return {\n promise,\n //@ts-ignore\n resolve,\n //@ts-ignore\n reject\n };\n}\n\n// lib/context.ts\nimport * as React from \"react\";\nvar DataRouterContext = React.createContext(null);\nDataRouterContext.displayName = \"DataRouter\";\nvar DataRouterStateContext = React.createContext(null);\nDataRouterStateContext.displayName = \"DataRouterState\";\nvar RSCRouterContext = React.createContext(false);\nfunction useIsRSCRouterContext() {\n return React.useContext(RSCRouterContext);\n}\nvar ViewTransitionContext = React.createContext({\n isTransitioning: false\n});\nViewTransitionContext.displayName = \"ViewTransition\";\nvar FetchersContext = React.createContext(\n /* @__PURE__ */ new Map()\n);\nFetchersContext.displayName = \"Fetchers\";\nvar AwaitContext = React.createContext(null);\nAwaitContext.displayName = \"Await\";\nvar AwaitContextProvider = (props) => React.createElement(AwaitContext.Provider, props);\nvar NavigationContext = React.createContext(\n null\n);\nNavigationContext.displayName = \"Navigation\";\nvar LocationContext = React.createContext(\n null\n);\nLocationContext.displayName = \"Location\";\nvar RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false\n});\nRouteContext.displayName = \"Route\";\nvar RouteErrorContext = React.createContext(null);\nRouteErrorContext.displayName = \"RouteError\";\nvar ENABLE_DEV_WARNINGS = true;\n\n// lib/hooks.tsx\nimport * as React2 from \"react\";\n\n// lib/errors.ts\nvar ERROR_DIGEST_BASE = \"REACT_ROUTER_ERROR\";\nvar ERROR_DIGEST_REDIRECT = \"REDIRECT\";\nvar ERROR_DIGEST_ROUTE_ERROR_RESPONSE = \"ROUTE_ERROR_RESPONSE\";\nfunction decodeRedirectErrorDigest(digest) {\n if (digest.startsWith(`${ERROR_DIGEST_BASE}:${ERROR_DIGEST_REDIRECT}:{`)) {\n try {\n let parsed = JSON.parse(digest.slice(28));\n if (typeof parsed === \"object\" && parsed && typeof parsed.status === \"number\" && typeof parsed.statusText === \"string\" && typeof parsed.location === \"string\" && typeof parsed.reloadDocument === \"boolean\" && typeof parsed.replace === \"boolean\") {\n return parsed;\n }\n } catch {\n }\n }\n}\nfunction decodeRouteErrorResponseDigest(digest) {\n if (digest.startsWith(\n `${ERROR_DIGEST_BASE}:${ERROR_DIGEST_ROUTE_ERROR_RESPONSE}:{`\n )) {\n try {\n let parsed = JSON.parse(digest.slice(40));\n if (typeof parsed === \"object\" && parsed && typeof parsed.status === \"number\" && typeof parsed.statusText === \"string\") {\n return new ErrorResponseImpl(\n parsed.status,\n parsed.statusText,\n parsed.data\n );\n }\n } catch {\n }\n }\n}\n\n// lib/hooks.tsx\nfunction useHref(to, { relative } = {}) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n let { basename, navigator } = React2.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n let joinedPathname = pathname;\n if (basename !== \"/\") {\n joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\nfunction useInRouterContext() {\n return React2.useContext(LocationContext) != null;\n}\nfunction useLocation() {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n return React2.useContext(LocationContext).location;\n}\nfunction useNavigationType() {\n return React2.useContext(LocationContext).navigationType;\n}\nfunction useMatch(pattern) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n let { pathname } = useLocation();\n return React2.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\nvar navigateEffectWarning = `You should call navigate() in a React.useEffect(), not when your component is first rendered.`;\nfunction useIsomorphicLayoutEffect(cb) {\n let isStatic = React2.useContext(NavigationContext).static;\n if (!isStatic) {\n React2.useLayoutEffect(cb);\n }\n}\nfunction useNavigate() {\n let { isDataRoute } = React2.useContext(RouteContext);\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n let dataRouterContext = React2.useContext(DataRouterContext);\n let { basename, navigator } = React2.useContext(NavigationContext);\n let { matches } = React2.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n let activeRef = React2.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React2.useCallback(\n (to, options = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext\n ]\n );\n return navigate;\n}\nvar OutletContext = React2.createContext(null);\nfunction useOutletContext() {\n return React2.useContext(OutletContext);\n}\nfunction useOutlet(context) {\n let outlet = React2.useContext(RouteContext).outlet;\n return React2.useMemo(\n () => outlet && /* @__PURE__ */ React2.createElement(OutletContext.Provider, { value: context }, outlet),\n [outlet, context]\n );\n}\nfunction useParams() {\n let { matches } = React2.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch?.params ?? {};\n}\nfunction useResolvedPath(to, { relative } = {}) {\n let { matches } = React2.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(getResolveToMatches(matches));\n return React2.useMemo(\n () => resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\nfunction useRoutes(routes, locationArg) {\n return useRoutesImpl(routes, locationArg);\n}\nfunction useRoutesImpl(routes, locationArg, dataRouterOpts) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n let { navigator } = React2.useContext(NavigationContext);\n let { matches: parentMatches } = React2.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n if (ENABLE_DEV_WARNINGS) {\n let parentPath = parentRoute && parentRoute.path || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\") || parentPath.endsWith(\"*?\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at \"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the parent route path has no trailing \"*\". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.\n\nPlease change the parent <Route path=\"${parentPath}\"> to <Route path=\"${parentPath === \"/\" ? \"*\" : `${parentPath}/*`}\">.`\n );\n }\n let locationFromContext = useLocation();\n let location;\n if (locationArg) {\n let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n invariant(\n parentPathnameBase === \"/\" || parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n let pathname = location.pathname || \"/\";\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n let matches = dataRouterOpts && dataRouterOpts.state.matches.length ? (\n // If we're in a data router, use the matches we've already identified but ensure\n // we have the latest route instances from the manifest in case elements have changed\n dataRouterOpts.state.matches.map(\n (m) => Object.assign(m, {\n route: dataRouterOpts.manifest[m.route.id] || m.route\n })\n )\n ) : matchRoutes(routes, { pathname: remainingPathname });\n if (ENABLE_DEV_WARNINGS) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n warning(\n matches == null || matches[matches.length - 1].route.element !== void 0 || matches[matches.length - 1].route.Component !== void 0 || matches[matches.length - 1].route.lazy !== void 0,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.`\n );\n }\n let renderedMatches = _renderMatches(\n matches && matches.map(\n (match) => Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes.\n // Pre-encode `%`, `?` and `#` ahead of `encodeLocation` because it uses\n // `new URL()` internally and we need to prevent it from treating\n // them as separators\n navigator.encodeLocation ? navigator.encodeLocation(\n match.pathname.replace(/%/g, \"%25\").replace(/\\?/g, \"%3F\").replace(/#/g, \"%23\")\n ).pathname : match.pathname\n ]),\n pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n // Pre-encode `%`, `?` and `#` ahead of `encodeLocation` because it uses\n // `new URL()` internally and we need to prevent it from treating\n // them as separators\n navigator.encodeLocation ? navigator.encodeLocation(\n match.pathnameBase.replace(/%/g, \"%25\").replace(/\\?/g, \"%3F\").replace(/#/g, \"%23\")\n ).pathname : match.pathnameBase\n ])\n })\n ),\n parentMatches,\n dataRouterOpts\n );\n if (locationArg && renderedMatches) {\n return /* @__PURE__ */ React2.createElement(\n LocationContext.Provider,\n {\n value: {\n location: {\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\",\n mask: void 0,\n ...location\n },\n navigationType: \"POP\" /* Pop */\n }\n },\n renderedMatches\n );\n }\n return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error) ? `${error.status} ${error.statusText}` : error instanceof Error ? error.message : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n let devInfo = null;\n if (ENABLE_DEV_WARNINGS) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n devInfo = /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"p\", null, \"\\u{1F4BF} Hey developer \\u{1F44B}\"), /* @__PURE__ */ React2.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"ErrorBoundary\"), \" or\", \" \", /* @__PURE__ */ React2.createElement(\"code\", { style: codeStyles }, \"errorElement\"), \" prop on your route.\"));\n }\n return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(\"h2\", null, \"Unexpected Application Error!\"), /* @__PURE__ */ React2.createElement(\"h3\", { style: { fontStyle: \"italic\" } }, message), stack ? /* @__PURE__ */ React2.createElement(\"pre\", { style: preStyles }, stack) : null, devInfo);\n}\nvar defaultErrorElement = /* @__PURE__ */ React2.createElement(DefaultErrorComponent, null);\nvar RenderErrorBoundary = class extends React2.Component {\n constructor(props) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error\n };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n static getDerivedStateFromProps(props, state) {\n if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation\n };\n }\n return {\n error: props.error !== void 0 ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation\n };\n }\n componentDidCatch(error, errorInfo) {\n if (this.props.onError) {\n this.props.onError(error, errorInfo);\n } else {\n console.error(\n \"React Router caught the following error during render\",\n error\n );\n }\n }\n render() {\n let error = this.state.error;\n if (this.context && typeof error === \"object\" && error && \"digest\" in error && typeof error.digest === \"string\") {\n const decoded = decodeRouteErrorResponseDigest(error.digest);\n if (decoded) error = decoded;\n }\n let result = error !== void 0 ? /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: this.props.routeContext }, /* @__PURE__ */ React2.createElement(\n RouteErrorContext.Provider,\n {\n value: error,\n children: this.props.component\n }\n )) : this.props.children;\n if (this.context) {\n return /* @__PURE__ */ React2.createElement(RSCErrorHandler, { error }, result);\n }\n return result;\n }\n};\nRenderErrorBoundary.contextType = RSCRouterContext;\nvar errorRedirectHandledMap = /* @__PURE__ */ new WeakMap();\nfunction RSCErrorHandler({\n children,\n error\n}) {\n let { basename } = React2.useContext(NavigationContext);\n if (typeof error === \"object\" && error && \"digest\" in error && typeof error.digest === \"string\") {\n let redirect2 = decodeRedirectErrorDigest(error.digest);\n if (redirect2) {\n let existingRedirect = errorRedirectHandledMap.get(error);\n if (existingRedirect) throw existingRedirect;\n let parsed = parseToInfo(redirect2.location, basename);\n if (isBrowser && !errorRedirectHandledMap.get(error)) {\n if (parsed.isExternal || redirect2.reloadDocument) {\n window.location.href = parsed.absoluteURL || parsed.to;\n } else {\n const redirectPromise = Promise.resolve().then(\n () => window.__reactRouterDataRouter.navigate(parsed.to, {\n replace: redirect2.replace\n })\n );\n errorRedirectHandledMap.set(error, redirectPromise);\n throw redirectPromise;\n }\n }\n return /* @__PURE__ */ React2.createElement(\n \"meta\",\n {\n httpEquiv: \"refresh\",\n content: `0;url=${parsed.absoluteURL || parsed.to}`\n }\n );\n }\n }\n return children;\n}\nfunction RenderedRoute({ routeContext, match, children }) {\n let dataRouterContext = React2.useContext(DataRouterContext);\n if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n return /* @__PURE__ */ React2.createElement(RouteContext.Provider, { value: routeContext }, children);\n}\nfunction _renderMatches(matches, parentMatches = [], dataRouterOpts) {\n let dataRouterState = dataRouterOpts?.state;\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n if (dataRouterState.errors) {\n matches = dataRouterState.matches;\n } else if (parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n matches = dataRouterState.matches;\n } else {\n return null;\n }\n }\n let renderedMatches = matches;\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== void 0\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterOpts && dataRouterState) {\n renderFallback = dataRouterState.renderFallback;\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n if (match.route.id) {\n let { loaderData, errors: errors2 } = dataRouterState;\n let needsToRunLoader = match.route.loader && !loaderData.hasOwnProperty(match.route.id) && (!errors2 || errors2[match.route.id] === void 0);\n if (match.route.lazy || needsToRunLoader) {\n if (dataRouterOpts.isStatic) {\n renderFallback = true;\n }\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n let onErrorHandler = dataRouterOpts?.onError;\n let onError = dataRouterState && onErrorHandler ? (error, errorInfo) => {\n onErrorHandler(error, {\n location: dataRouterState.location,\n params: dataRouterState.matches?.[0]?.params ?? {},\n pattern: getRoutePattern(dataRouterState.matches),\n errorInfo\n });\n } : void 0;\n return renderedMatches.reduceRight(\n (outlet, match, index) => {\n let error;\n let shouldRenderHydrateFallback = false;\n let errorElement = null;\n let hydrateFallbackElement = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : void 0;\n errorElement = match.route.errorElement || defaultErrorElement;\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n let matches2 = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n children = /* @__PURE__ */ React2.createElement(match.route.Component, null);\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return /* @__PURE__ */ React2.createElement(\n RenderedRoute,\n {\n match,\n routeContext: {\n outlet,\n matches: matches2,\n isDataRoute: dataRouterState != null\n },\n children\n }\n );\n };\n return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /* @__PURE__ */ React2.createElement(\n RenderErrorBoundary,\n {\n location: dataRouterState.location,\n revalidation: dataRouterState.revalidation,\n component: errorElement,\n error,\n children: getChildren(),\n routeContext: { outlet: null, matches: matches2, isDataRoute: true },\n onError\n }\n ) : getChildren();\n },\n null\n );\n}\nfunction getDataRouterConsoleError(hookName) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React2.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React2.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\nfunction useRouteContext(hookName) {\n let route = React2.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\nfunction useCurrentRouteId(hookName) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\nfunction useRouteId() {\n return useCurrentRouteId(\"useRouteId\" /* UseRouteId */);\n}\nfunction useNavigation() {\n let state = useDataRouterState(\"useNavigation\" /* UseNavigation */);\n return React2.useMemo(() => {\n let { matches, historyAction, ...rest } = state.navigation;\n return rest;\n }, [state.navigation]);\n}\nfunction useRevalidator() {\n let dataRouterContext = useDataRouterContext(\"useRevalidator\" /* UseRevalidator */);\n let state = useDataRouterState(\"useRevalidator\" /* UseRevalidator */);\n let revalidate = React2.useCallback(async () => {\n await dataRouterContext.router.revalidate();\n }, [dataRouterContext.router]);\n return React2.useMemo(\n () => ({ revalidate, state: state.revalidation }),\n [revalidate, state.revalidation]\n );\n}\nfunction useMatches() {\n let { matches, loaderData } = useDataRouterState(\n \"useMatches\" /* UseMatches */\n );\n return React2.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\nfunction useLoaderData() {\n let state = useDataRouterState(\"useLoaderData\" /* UseLoaderData */);\n let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n return state.loaderData[routeId];\n}\nfunction useRouteLoaderData(routeId) {\n let state = useDataRouterState(\"useRouteLoaderData\" /* UseRouteLoaderData */);\n return state.loaderData[routeId];\n}\nfunction useActionData() {\n let state = useDataRouterState(\"useActionData\" /* UseActionData */);\n let routeId = useCurrentRouteId(\"useLoaderData\" /* UseLoaderData */);\n return state.actionData ? state.actionData[routeId] : void 0;\n}\nfunction useRouteError() {\n let error = React2.useContext(RouteErrorContext);\n let state = useDataRouterState(\"useRouteError\" /* UseRouteError */);\n let routeId = useCurrentRouteId(\"useRouteError\" /* UseRouteError */);\n if (error !== void 0) {\n return error;\n }\n return state.errors?.[routeId];\n}\nfunction useAsyncValue() {\n let value = React2.useContext(AwaitContext);\n return value?._data;\n}\nfunction useAsyncError() {\n let value = React2.useContext(AwaitContext);\n return value?._error;\n}\nvar blockerId = 0;\nfunction useBlocker(shouldBlock) {\n let { router, basename } = useDataRouterContext(\"useBlocker\" /* UseBlocker */);\n let state = useDataRouterState(\"useBlocker\" /* UseBlocker */);\n let [blockerKey, setBlockerKey] = React2.useState(\"\");\n let blockerFunction = React2.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n },\n nextLocation: {\n ...nextLocation,\n pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n },\n historyAction\n });\n },\n [basename, shouldBlock]\n );\n React2.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n React2.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\nfunction useNavigateStable() {\n let { router } = useDataRouterContext(\"useNavigate\" /* UseNavigateStable */);\n let id = useCurrentRouteId(\"useNavigate\" /* UseNavigateStable */);\n let activeRef = React2.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React2.useCallback(\n async (to, options = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n await router.navigate(to);\n } else {\n await router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n return navigate;\n}\nvar alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\nfunction useRoute(...args) {\n const currentRouteId = useCurrentRouteId(\n \"useRoute\" /* UseRoute */\n );\n const id = args[0] ?? currentRouteId;\n const state = useDataRouterState(\"useRoute\" /* UseRoute */);\n const route = state.matches.find(({ route: route2 }) => route2.id === id);\n if (route === void 0) return void 0;\n return {\n handle: route.route.handle,\n loaderData: state.loaderData[id],\n actionData: state.actionData?.[id]\n };\n}\nfunction toRouterStateMatch(match) {\n return {\n id: match.route.id,\n pathname: match.pathname,\n params: match.params,\n handle: match.route.handle\n };\n}\nfunction useRouterState() {\n let {\n location,\n historyAction: type,\n matches,\n navigation\n } = useDataRouterState(\"unstable_useRouterState\" /* UseRouterState */);\n let active = React2.useMemo(\n () => ({\n type,\n location,\n searchParams: new URLSearchParams(location.search),\n params: matches[matches.length - 1]?.params ?? {},\n matches: matches.map((m) => toRouterStateMatch(m))\n }),\n [location, matches, type]\n );\n let pending = React2.useMemo(() => {\n if (navigation.state === \"idle\") return null;\n let shared = {\n type: navigation.historyAction,\n location: navigation.location,\n searchParams: new URLSearchParams(navigation.location.search),\n params: navigation.matches[navigation.matches.length - 1]?.params ?? {},\n matches: navigation.matches.map((m) => toRouterStateMatch(m))\n };\n return navigation.state === \"loading\" ? {\n ...shared,\n state: \"loading\",\n formMethod: navigation.formMethod,\n formAction: navigation.formAction,\n formEncType: navigation.formEncType,\n formData: navigation.formData,\n json: navigation.json,\n text: navigation.text\n } : {\n ...shared,\n state: \"submitting\",\n formMethod: navigation.formMethod,\n formAction: navigation.formAction,\n formEncType: navigation.formEncType,\n formData: navigation.formData,\n json: navigation.json,\n text: navigation.text\n };\n }, [navigation]);\n return React2.useMemo(\n () => ({ active, pending }),\n [active, pending]\n );\n}\n\n// lib/components.tsx\nimport * as React3 from \"react\";\n\n// lib/server-runtime/warnings.ts\nvar alreadyWarned2 = {};\nfunction warnOnce(condition, message) {\n if (!condition && !alreadyWarned2[message]) {\n alreadyWarned2[message] = true;\n console.warn(message);\n }\n}\n\n// lib/components.tsx\nvar USE_OPTIMISTIC = \"useOptimistic\";\nvar useOptimisticImpl = React3[USE_OPTIMISTIC];\nvar stableUseOptimisticSetter = () => void 0;\nfunction useOptimisticSafe(val) {\n if (useOptimisticImpl) {\n return useOptimisticImpl(val);\n } else {\n return [val, stableUseOptimisticSetter];\n }\n}\nfunction mapRouteProperties(route) {\n let updates = {\n // Note: this check also occurs in createRoutesFromChildren so update\n // there if you change this -- please and thank you!\n hasErrorBoundary: route.hasErrorBoundary || route.ErrorBoundary != null || route.errorElement != null\n };\n if (route.Component) {\n if (ENABLE_DEV_WARNINGS) {\n if (route.element) {\n warning(\n false,\n \"You should not include both `Component` and `element` on your route - `Component` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n element: React3.createElement(route.Component),\n Component: void 0\n });\n }\n if (route.HydrateFallback) {\n if (ENABLE_DEV_WARNINGS) {\n if (route.hydrateFallbackElement) {\n warning(\n false,\n \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n hydrateFallbackElement: React3.createElement(route.HydrateFallback),\n HydrateFallback: void 0\n });\n }\n if (route.ErrorBoundary) {\n if (ENABLE_DEV_WARNINGS) {\n if (route.errorElement) {\n warning(\n false,\n \"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used.\"\n );\n }\n }\n Object.assign(updates, {\n errorElement: React3.createElement(route.ErrorBoundary),\n ErrorBoundary: void 0\n });\n }\n return updates;\n}\nvar hydrationRouteProperties = [\n \"HydrateFallback\",\n \"hydrateFallbackElement\"\n];\nfunction createMemoryRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n getContext: opts?.getContext,\n future: opts?.future,\n history: createMemoryHistory({\n initialEntries: opts?.initialEntries,\n initialIndex: opts?.initialIndex\n }),\n hydrationData: opts?.hydrationData,\n routes,\n hydrationRouteProperties,\n mapRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n instrumentations: opts?.instrumentations\n }).initialize();\n}\nvar Deferred = class {\n constructor() {\n this.status = \"pending\";\n this.promise = new Promise((resolve, reject) => {\n this.resolve = (value) => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = (reason) => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n};\nfunction RouterProvider({\n router,\n flushSync: reactDomFlushSyncImpl,\n onError,\n useTransitions\n}) {\n let unstable_rsc = useIsRSCRouterContext();\n useTransitions = unstable_rsc || useTransitions;\n let [_state, setStateImpl] = React3.useState(router.state);\n let [state, setOptimisticState] = useOptimisticSafe(_state);\n let [pendingState, setPendingState] = React3.useState();\n let [vtContext, setVtContext] = React3.useState({\n isTransitioning: false\n });\n let [renderDfd, setRenderDfd] = React3.useState();\n let [transition, setTransition] = React3.useState();\n let [interruption, setInterruption] = React3.useState();\n let fetcherData = React3.useRef(/* @__PURE__ */ new Map());\n let setState = React3.useCallback(\n (newState, { deletedFetchers, newErrors, flushSync, viewTransitionOpts }) => {\n if (newErrors && onError) {\n Object.values(newErrors).forEach(\n (error) => onError(error, {\n location: newState.location,\n params: newState.matches[0]?.params ?? {},\n pattern: getRoutePattern(newState.matches)\n })\n );\n }\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== void 0) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n deletedFetchers.forEach((key) => fetcherData.current.delete(key));\n warnOnce(\n flushSync === false || reactDomFlushSyncImpl != null,\n 'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from \"react-router/dom\"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.'\n );\n let isViewTransitionAvailable = router.window != null && router.window.document != null && typeof router.window.document.startViewTransition === \"function\";\n warnOnce(\n viewTransitionOpts == null || isViewTransitionAvailable,\n \"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available.\"\n );\n if (!viewTransitionOpts || !isViewTransitionAvailable) {\n if (reactDomFlushSyncImpl && flushSync) {\n reactDomFlushSyncImpl(() => setStateImpl(newState));\n } else if (useTransitions === false) {\n setStateImpl(newState);\n } else {\n React3.startTransition(() => {\n if (useTransitions === true) {\n setOptimisticState((s) => getOptimisticRouterState(s, newState));\n }\n setStateImpl(newState);\n });\n }\n return;\n }\n if (reactDomFlushSyncImpl && flushSync) {\n reactDomFlushSyncImpl(() => {\n if (transition) {\n renderDfd?.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n });\n let t = router.window.document.startViewTransition(() => {\n reactDomFlushSyncImpl(() => setStateImpl(newState));\n });\n t.finished.finally(() => {\n reactDomFlushSyncImpl(() => {\n setRenderDfd(void 0);\n setTransition(void 0);\n setPendingState(void 0);\n setVtContext({ isTransitioning: false });\n });\n });\n reactDomFlushSyncImpl(() => setTransition(t));\n return;\n }\n if (transition) {\n renderDfd?.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n } else {\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n }\n },\n [\n router.window,\n reactDomFlushSyncImpl,\n transition,\n renderDfd,\n useTransitions,\n setOptimisticState,\n onError\n ]\n );\n React3.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n React3.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred());\n }\n }, [vtContext]);\n React3.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition2 = router.window.document.startViewTransition(async () => {\n if (useTransitions === false) {\n setStateImpl(newState);\n } else {\n React3.startTransition(() => {\n if (useTransitions === true) {\n setOptimisticState((s) => getOptimisticRouterState(s, newState));\n }\n setStateImpl(newState);\n });\n }\n await renderPromise;\n });\n transition2.finished.finally(() => {\n setRenderDfd(void 0);\n setTransition(void 0);\n setPendingState(void 0);\n setVtContext({ isTransitioning: false });\n });\n setTransition(transition2);\n }\n }, [\n pendingState,\n renderDfd,\n router.window,\n useTransitions,\n setOptimisticState\n ]);\n React3.useEffect(() => {\n if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n React3.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation\n });\n setInterruption(void 0);\n }\n }, [vtContext.isTransitioning, interruption]);\n let navigator = React3.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state2, opts) => router.navigate(to, {\n state: state2,\n preventScrollReset: opts?.preventScrollReset\n }),\n replace: (to, state2, opts) => router.navigate(to, {\n replace: true,\n state: state2,\n preventScrollReset: opts?.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React3.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n onError\n }),\n [router, navigator, basename, onError]\n );\n return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React3.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React3.createElement(FetchersContext.Provider, { value: fetcherData.current }, /* @__PURE__ */ React3.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React3.createElement(\n Router,\n {\n basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator,\n useTransitions\n },\n /* @__PURE__ */ React3.createElement(\n MemoizedDataRoutes,\n {\n routes: router.routes,\n manifest: router.manifest,\n future: router.future,\n state,\n isStatic: false,\n onError\n }\n )\n ))))), null);\n}\nfunction getOptimisticRouterState(currentState, newState) {\n return {\n // Don't surface \"current location specific\" stuff mid-navigation\n // (historyAction, location, matches, loaderData, errors, initialized,\n // restoreScroll, preventScrollReset, blockers, etc.)\n ...currentState,\n // Only surface \"pending/in-flight stuff\"\n // (navigation, revalidation, actionData, fetchers, )\n navigation: newState.navigation.state !== \"idle\" ? newState.navigation : currentState.navigation,\n revalidation: newState.revalidation !== \"idle\" ? newState.revalidation : currentState.revalidation,\n actionData: newState.navigation.state !== \"submitting\" ? newState.actionData : currentState.actionData,\n fetchers: newState.fetchers\n };\n}\nvar MemoizedDataRoutes = React3.memo(DataRoutes2);\nfunction DataRoutes2({\n routes,\n manifest,\n future,\n state,\n isStatic,\n onError\n}) {\n return useRoutesImpl(routes, void 0, {\n manifest,\n state,\n isStatic,\n onError,\n future\n });\n}\nfunction MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex,\n useTransitions\n}) {\n let historyRef = React3.useRef();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React3.useState({\n action: history.action,\n location: history.location\n });\n let setState = React3.useCallback(\n (newState) => {\n if (useTransitions === false) {\n setStateImpl(newState);\n } else {\n React3.startTransition(() => setStateImpl(newState));\n }\n },\n [useTransitions]\n );\n React3.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React3.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n useTransitions\n }\n );\n}\nfunction Navigate({\n to,\n replace: replace2,\n state,\n relative\n}) {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n let { static: isStatic } = React3.useContext(NavigationContext);\n warning(\n !isStatic,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`\n );\n let { matches } = React3.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let navigate = useNavigate();\n let path = resolveTo(\n to,\n getResolveToMatches(matches),\n locationPathname,\n relative === \"path\"\n );\n let jsonPath = JSON.stringify(path);\n React3.useEffect(() => {\n navigate(JSON.parse(jsonPath), { replace: replace2, state, relative });\n }, [navigate, jsonPath, relative, replace2, state]);\n return null;\n}\nfunction Outlet(props) {\n return useOutlet(props.context);\n}\nfunction Route(props) {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\nfunction Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = \"POP\" /* Pop */,\n navigator,\n static: staticProp = false,\n useTransitions\n}) {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`\n );\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React3.useMemo(\n () => ({\n basename,\n navigator,\n static: staticProp,\n useTransitions,\n future: {}\n }),\n [basename, navigator, staticProp, useTransitions]\n );\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\",\n mask\n } = locationProp;\n let locationContext = React3.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n if (trailingPathname == null) {\n return null;\n }\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key,\n mask\n },\n navigationType\n };\n }, [basename, pathname, search, hash, state, key, navigationType, mask]);\n warning(\n locationContext != null,\n `<Router basename=\"${basename}\"> is not able to match the URL \"${pathname}${search}${hash}\" because it does not start with the basename, so the <Router> won't render anything.`\n );\n if (locationContext == null) {\n return null;\n }\n return /* @__PURE__ */ React3.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React3.createElement(LocationContext.Provider, { children, value: locationContext }));\n}\nfunction Routes({\n children,\n location\n}) {\n return useRoutes(createRoutesFromChildren(children), location);\n}\nfunction Await({\n children,\n errorElement,\n resolve\n}) {\n let dataRouterContext = React3.useContext(DataRouterContext);\n let dataRouterStateContext = React3.useContext(DataRouterStateContext);\n let onError = React3.useCallback(\n (error, errorInfo) => {\n if (dataRouterContext && dataRouterContext.onError && dataRouterStateContext) {\n dataRouterContext.onError(error, {\n location: dataRouterStateContext.location,\n params: dataRouterStateContext.matches[0]?.params || {},\n pattern: getRoutePattern(dataRouterStateContext.matches),\n errorInfo\n });\n }\n },\n [dataRouterContext, dataRouterStateContext]\n );\n return /* @__PURE__ */ React3.createElement(\n AwaitErrorBoundary,\n {\n resolve,\n errorElement,\n onError\n },\n /* @__PURE__ */ React3.createElement(ResolveAwait, null, children)\n );\n}\nvar AwaitErrorBoundary = class extends React3.Component {\n constructor(props) {\n super(props);\n this.state = { error: null };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch(error, errorInfo) {\n if (this.props.onError) {\n this.props.onError(error, errorInfo);\n } else {\n console.error(\n \"<Await> caught the following error during render\",\n error,\n errorInfo\n );\n }\n }\n render() {\n let { children, errorElement, resolve } = this.props;\n let promise = null;\n let status = 0 /* pending */;\n if (!(resolve instanceof Promise)) {\n status = 1 /* success */;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_data\", { get: () => resolve });\n } else if (this.state.error) {\n status = 2 /* error */;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {\n });\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n Object.defineProperty(promise, \"_error\", { get: () => renderError });\n } else if (resolve._tracked) {\n promise = resolve;\n status = \"_error\" in promise ? 2 /* error */ : \"_data\" in promise ? 1 /* success */ : 0 /* pending */;\n } else {\n status = 0 /* pending */;\n Object.defineProperty(resolve, \"_tracked\", { get: () => true });\n promise = resolve.then(\n (data2) => Object.defineProperty(resolve, \"_data\", { get: () => data2 }),\n (error) => {\n this.props.onError?.(error);\n Object.defineProperty(resolve, \"_error\", { get: () => error });\n }\n );\n }\n if (status === 2 /* error */ && !errorElement) {\n throw promise._error;\n }\n if (status === 2 /* error */) {\n return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children: errorElement });\n }\n if (status === 1 /* success */) {\n return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children });\n }\n throw promise;\n }\n};\nfunction ResolveAwait({\n children\n}) {\n let data2 = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data2) : children;\n return /* @__PURE__ */ React3.createElement(React3.Fragment, null, toRender);\n}\nfunction createRoutesFromChildren(children, parentPath = []) {\n let routes = [];\n React3.Children.forEach(children, (element, index) => {\n if (!React3.isValidElement(element)) {\n return;\n }\n let treePath = [...parentPath, index];\n if (element.type === React3.Fragment) {\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children, treePath)\n );\n return;\n }\n invariant(\n element.type === Route,\n `[${typeof element.type === \"string\" ? element.type : element.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n invariant(\n !element.props.index || !element.props.children,\n \"An index route cannot have child routes.\"\n );\n let route = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n middleware: element.props.middleware,\n loader: element.props.loader,\n action: element.props.action,\n hydrateFallbackElement: element.props.hydrateFallbackElement,\n HydrateFallback: element.props.HydrateFallback,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary: element.props.hasErrorBoundary === true || element.props.ErrorBoundary != null || element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy\n };\n if (element.props.children) {\n route.children = createRoutesFromChildren(\n element.props.children,\n treePath\n );\n }\n routes.push(route);\n });\n return routes;\n}\nvar createRoutesFromElements = createRoutesFromChildren;\nfunction renderMatches(matches) {\n return _renderMatches(matches);\n}\nfunction useRouteComponentProps() {\n return {\n params: useParams(),\n loaderData: useLoaderData(),\n actionData: useActionData(),\n matches: useMatches()\n };\n}\nfunction WithComponentProps({\n children\n}) {\n const props = useRouteComponentProps();\n return React3.cloneElement(children, props);\n}\nfunction withComponentProps(Component4) {\n return function WithComponentProps2() {\n const props = useRouteComponentProps();\n return React3.createElement(Component4, props);\n };\n}\nfunction useHydrateFallbackProps() {\n return {\n params: useParams(),\n loaderData: useLoaderData(),\n actionData: useActionData()\n };\n}\nfunction WithHydrateFallbackProps({\n children\n}) {\n const props = useHydrateFallbackProps();\n return React3.cloneElement(children, props);\n}\nfunction withHydrateFallbackProps(HydrateFallback) {\n return function WithHydrateFallbackProps2() {\n const props = useHydrateFallbackProps();\n return React3.createElement(HydrateFallback, props);\n };\n}\nfunction useErrorBoundaryProps() {\n return {\n params: useParams(),\n loaderData: useLoaderData(),\n actionData: useActionData(),\n error: useRouteError()\n };\n}\nfunction WithErrorBoundaryProps({\n children\n}) {\n const props = useErrorBoundaryProps();\n return React3.cloneElement(children, props);\n}\nfunction withErrorBoundaryProps(ErrorBoundary) {\n return function WithErrorBoundaryProps2() {\n const props = useErrorBoundaryProps();\n return React3.createElement(ErrorBoundary, props);\n };\n}\n\n// lib/dom/dom.ts\nvar defaultMethod = \"get\";\nvar defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return typeof HTMLElement !== \"undefined\" && object instanceof HTMLElement;\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && // Ignore everything but left clicks\n (!target || target === \"_self\") && // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event);\n}\nfunction createSearchParams(init = \"\") {\n return new URLSearchParams(\n typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo2, key) => {\n let value = init[key];\n return memo2.concat(\n Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]\n );\n }, [])\n );\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\nvar _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(\n document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0\n );\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nvar supportedFormEncTypes = /* @__PURE__ */ new Set([\n \"application/x-www-form-urlencoded\",\n \"multipart/form-data\",\n \"text/plain\"\n]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n warning(\n false,\n `\"${encType}\" is not a valid \\`encType\\` for \\`<Form>\\`/\\`<fetcher.Form>\\` and will default to \"${defaultEncType}\"`\n );\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\n `Cannot submit a <button> or <input type=\"submit\"> without a <form>`\n );\n }\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(form, target);\n if (!isFormDataSubmitterSupported()) {\n let { name, type, value } = target;\n if (type === \"image\") {\n let prefix = name ? `${name}.` : \"\";\n formData.append(`${prefix}x`, \"0\");\n formData.append(`${prefix}y`, \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\n `Cannot submit element that is not <form>, <button>, or <input type=\"submit|image\">`\n );\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = void 0;\n }\n return { action, method: method.toLowerCase(), encType, formData, body };\n}\n\n// lib/dom/ssr/single-fetch.tsx\nimport * as React4 from \"react\";\n\n// vendor/turbo-stream-v2/utils.ts\nvar HOLE = -1;\nvar NAN = -2;\nvar NEGATIVE_INFINITY = -3;\nvar NEGATIVE_ZERO = -4;\nvar NULL = -5;\nvar POSITIVE_INFINITY = -6;\nvar UNDEFINED = -7;\nvar TYPE_BIGINT = \"B\";\nvar TYPE_DATE = \"D\";\nvar TYPE_ERROR = \"E\";\nvar TYPE_MAP = \"M\";\nvar TYPE_NULL_OBJECT = \"N\";\nvar TYPE_PROMISE = \"P\";\nvar TYPE_REGEXP = \"R\";\nvar TYPE_SET = \"S\";\nvar TYPE_SYMBOL = \"Y\";\nvar TYPE_URL = \"U\";\nvar TYPE_PREVIOUS_RESOLVED = \"Z\";\nvar SUPPORTED_ERROR_TYPES = [\n \"EvalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\nvar Deferred2 = class {\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n};\nfunction createLineSplittingTransform() {\n const decoder = new TextDecoder();\n let leftover = \"\";\n return new TransformStream({\n transform(chunk, controller) {\n const str = decoder.decode(chunk, { stream: true });\n const parts = (leftover + str).split(\"\\n\");\n leftover = parts.pop() || \"\";\n for (const part of parts) {\n controller.enqueue(part);\n }\n },\n flush(controller) {\n if (leftover) {\n controller.enqueue(leftover);\n }\n }\n });\n}\n\n// vendor/turbo-stream-v2/flatten.ts\nvar TIME_LIMIT_MS = 1;\nvar getNow = () => Date.now();\nvar yieldToMain = () => new Promise((resolve) => setTimeout(resolve, 0));\nasync function flatten(input) {\n const { indices } = this;\n const existing = indices.get(input);\n if (existing) return [existing];\n if (input === void 0) return UNDEFINED;\n if (input === null) return NULL;\n if (Number.isNaN(input)) return NAN;\n if (input === Number.POSITIVE_INFINITY) return POSITIVE_INFINITY;\n if (input === Number.NEGATIVE_INFINITY) return NEGATIVE_INFINITY;\n if (input === 0 && 1 / input < 0) return NEGATIVE_ZERO;\n const index = this.index++;\n indices.set(input, index);\n const stack = [[input, index]];\n await stringify.call(this, stack);\n return index;\n}\nasync function stringify(stack) {\n const { deferred, indices, plugins, postPlugins } = this;\n const str = this.stringified;\n let lastYieldTime = getNow();\n const flattenValue = (value) => {\n const existing = indices.get(value);\n if (existing) return [existing];\n if (value === void 0) return UNDEFINED;\n if (value === null) return NULL;\n if (Number.isNaN(value)) return NAN;\n if (value === Number.POSITIVE_INFINITY) return POSITIVE_INFINITY;\n if (value === Number.NEGATIVE_INFINITY) return NEGATIVE_INFINITY;\n if (value === 0 && 1 / value < 0) return NEGATIVE_ZERO;\n const index = this.index++;\n indices.set(value, index);\n stack.push([value, index]);\n return index;\n };\n let i = 0;\n while (stack.length > 0) {\n const now = getNow();\n if (++i % 6e3 === 0 && now - lastYieldTime >= TIME_LIMIT_MS) {\n await yieldToMain();\n lastYieldTime = getNow();\n }\n const [input, index] = stack.pop();\n const partsForObj = (obj) => Object.keys(obj).map((k) => `\"_${flattenValue(k)}\":${flattenValue(obj[k])}`).join(\",\");\n let error = null;\n switch (typeof input) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n str[index] = JSON.stringify(input);\n break;\n case \"bigint\":\n str[index] = `[\"${TYPE_BIGINT}\",\"${input}\"]`;\n break;\n case \"symbol\": {\n const keyFor = Symbol.keyFor(input);\n if (!keyFor) {\n error = new Error(\n \"Cannot encode symbol unless created with Symbol.for()\"\n );\n } else {\n str[index] = `[\"${TYPE_SYMBOL}\",${JSON.stringify(keyFor)}]`;\n }\n break;\n }\n case \"object\": {\n if (!input) {\n str[index] = `${NULL}`;\n break;\n }\n const isArray = Array.isArray(input);\n let pluginHandled = false;\n if (!isArray && plugins) {\n for (const plugin of plugins) {\n const pluginResult = plugin(input);\n if (Array.isArray(pluginResult)) {\n pluginHandled = true;\n const [pluginIdentifier, ...rest] = pluginResult;\n str[index] = `[${JSON.stringify(pluginIdentifier)}`;\n if (rest.length > 0) {\n str[index] += `,${rest.map((v) => flattenValue(v)).join(\",\")}`;\n }\n str[index] += \"]\";\n break;\n }\n }\n }\n if (!pluginHandled) {\n let result = isArray ? \"[\" : \"{\";\n if (isArray) {\n for (let i2 = 0; i2 < input.length; i2++)\n result += (i2 ? \",\" : \"\") + (i2 in input ? flattenValue(input[i2]) : HOLE);\n str[index] = `${result}]`;\n } else if (input instanceof Date) {\n const dateTime = input.getTime();\n str[index] = `[\"${TYPE_DATE}\",${Number.isNaN(dateTime) ? JSON.stringify(\"invalid\") : dateTime}]`;\n } else if (input instanceof URL) {\n str[index] = `[\"${TYPE_URL}\",${JSON.stringify(input.href)}]`;\n } else if (input instanceof RegExp) {\n str[index] = `[\"${TYPE_REGEXP}\",${JSON.stringify(\n input.source\n )},${JSON.stringify(input.flags)}]`;\n } else if (input instanceof Set) {\n if (input.size > 0) {\n str[index] = `[\"${TYPE_SET}\",${[...input].map((val) => flattenValue(val)).join(\",\")}]`;\n } else {\n str[index] = `[\"${TYPE_SET}\"]`;\n }\n } else if (input instanceof Map) {\n if (input.size > 0) {\n str[index] = `[\"${TYPE_MAP}\",${[...input].flatMap(([k, v]) => [flattenValue(k), flattenValue(v)]).join(\",\")}]`;\n } else {\n str[index] = `[\"${TYPE_MAP}\"]`;\n }\n } else if (input instanceof Promise) {\n str[index] = `[\"${TYPE_PROMISE}\",${index}]`;\n deferred[index] = input;\n } else if (input instanceof Error) {\n str[index] = `[\"${TYPE_ERROR}\",${JSON.stringify(input.message)}`;\n if (input.name !== \"Error\") {\n str[index] += `,${JSON.stringify(input.name)}`;\n }\n str[index] += \"]\";\n } else if (Object.getPrototypeOf(input) === null) {\n str[index] = `[\"${TYPE_NULL_OBJECT}\",{${partsForObj(input)}}]`;\n } else if (isPlainObject2(input)) {\n str[index] = `{${partsForObj(input)}}`;\n } else {\n error = new Error(\"Cannot encode object with prototype\");\n }\n }\n break;\n }\n default: {\n const isArray = Array.isArray(input);\n let pluginHandled = false;\n if (!isArray && plugins) {\n for (const plugin of plugins) {\n const pluginResult = plugin(input);\n if (Array.isArray(pluginResult)) {\n pluginHandled = true;\n const [pluginIdentifier, ...rest] = pluginResult;\n str[index] = `[${JSON.stringify(pluginIdentifier)}`;\n if (rest.length > 0) {\n str[index] += `,${rest.map((v) => flattenValue(v)).join(\",\")}`;\n }\n str[index] += \"]\";\n break;\n }\n }\n }\n if (!pluginHandled) {\n error = new Error(\"Cannot encode function or unexpected type\");\n }\n }\n }\n if (error) {\n let pluginHandled = false;\n if (postPlugins) {\n for (const plugin of postPlugins) {\n const pluginResult = plugin(input);\n if (Array.isArray(pluginResult)) {\n pluginHandled = true;\n const [pluginIdentifier, ...rest] = pluginResult;\n str[index] = `[${JSON.stringify(pluginIdentifier)}`;\n if (rest.length > 0) {\n str[index] += `,${rest.map((v) => flattenValue(v)).join(\",\")}`;\n }\n str[index] += \"]\";\n break;\n }\n }\n }\n if (!pluginHandled) {\n throw error;\n }\n }\n }\n}\nvar objectProtoNames2 = Object.getOwnPropertyNames(Object.prototype).sort().join(\"\\0\");\nfunction isPlainObject2(thing) {\n const proto = Object.getPrototypeOf(thing);\n return proto === Object.prototype || proto === null || Object.getOwnPropertyNames(proto).sort().join(\"\\0\") === objectProtoNames2;\n}\n\n// vendor/turbo-stream-v2/unflatten.ts\nvar globalObj = typeof window !== \"undefined\" ? window : typeof globalThis !== \"undefined\" ? globalThis : void 0;\nfunction unflatten(parsed) {\n const { hydrated, values } = this;\n if (typeof parsed === \"number\") return hydrate.call(this, parsed);\n if (!Array.isArray(parsed) || !parsed.length) throw new SyntaxError();\n const startIndex = values.length;\n for (const value of parsed) {\n values.push(value);\n }\n hydrated.length = values.length;\n return hydrate.call(this, startIndex);\n}\nfunction hydrate(index) {\n const { hydrated, values, deferred, plugins } = this;\n let result;\n const stack = [\n [\n index,\n (v) => {\n result = v;\n }\n ]\n ];\n let postRun = [];\n while (stack.length > 0) {\n const [index2, set] = stack.pop();\n switch (index2) {\n case UNDEFINED:\n set(void 0);\n continue;\n case NULL:\n set(null);\n continue;\n case NAN:\n set(NaN);\n continue;\n case POSITIVE_INFINITY:\n set(Infinity);\n continue;\n case NEGATIVE_INFINITY:\n set(-Infinity);\n continue;\n case NEGATIVE_ZERO:\n set(-0);\n continue;\n }\n if (hydrated[index2]) {\n set(hydrated[index2]);\n continue;\n }\n const value = values[index2];\n if (!value || typeof value !== \"object\") {\n hydrated[index2] = value;\n set(value);\n continue;\n }\n if (Array.isArray(value)) {\n if (typeof value[0] === \"string\") {\n const [type, b, c] = value;\n switch (type) {\n case TYPE_DATE:\n set(hydrated[index2] = new Date(b));\n continue;\n case TYPE_URL:\n set(hydrated[index2] = new URL(b));\n continue;\n case TYPE_BIGINT:\n set(hydrated[index2] = BigInt(b));\n continue;\n case TYPE_REGEXP:\n set(hydrated[index2] = new RegExp(b, c));\n continue;\n case TYPE_SYMBOL:\n set(hydrated[index2] = Symbol.for(b));\n continue;\n case TYPE_SET:\n const newSet = /* @__PURE__ */ new Set();\n hydrated[index2] = newSet;\n for (let i = value.length - 1; i > 0; i--)\n stack.push([\n value[i],\n (v) => {\n newSet.add(v);\n }\n ]);\n set(newSet);\n continue;\n case TYPE_MAP:\n const map = /* @__PURE__ */ new Map();\n hydrated[index2] = map;\n for (let i = value.length - 2; i > 0; i -= 2) {\n const r = [];\n stack.push([\n value[i + 1],\n (v) => {\n r[1] = v;\n }\n ]);\n stack.push([\n value[i],\n (k) => {\n r[0] = k;\n }\n ]);\n postRun.push(() => {\n map.set(r[0], r[1]);\n });\n }\n set(map);\n continue;\n case TYPE_NULL_OBJECT:\n const obj = /* @__PURE__ */ Object.create(null);\n hydrated[index2] = obj;\n for (const key of Object.keys(b).reverse()) {\n const r = [];\n stack.push([\n b[key],\n (v) => {\n r[1] = v;\n }\n ]);\n stack.push([\n Number(key.slice(1)),\n (k) => {\n r[0] = k;\n }\n ]);\n postRun.push(() => {\n obj[r[0]] = r[1];\n });\n }\n set(obj);\n continue;\n case TYPE_PROMISE:\n if (hydrated[b]) {\n set(hydrated[index2] = hydrated[b]);\n } else {\n const d = new Deferred2();\n deferred[b] = d;\n set(hydrated[index2] = d.promise);\n }\n continue;\n case TYPE_ERROR:\n const [, message, errorType] = value;\n let error = errorType && globalObj && SUPPORTED_ERROR_TYPES.includes(errorType) && errorType in globalObj && typeof globalObj[errorType] === \"function\" ? new globalObj[errorType](message) : new Error(message);\n hydrated[index2] = error;\n set(error);\n continue;\n case TYPE_PREVIOUS_RESOLVED:\n set(hydrated[index2] = hydrated[b]);\n continue;\n default:\n if (Array.isArray(plugins)) {\n const r = [];\n const vals = value.slice(1);\n for (let i = 0; i < vals.length; i++) {\n const v = vals[i];\n stack.push([\n v,\n (v2) => {\n r[i] = v2;\n }\n ]);\n }\n postRun.push(() => {\n for (const plugin of plugins) {\n const result2 = plugin(value[0], ...r);\n if (result2) {\n set(hydrated[index2] = result2.value);\n return;\n }\n }\n throw new SyntaxError();\n });\n continue;\n }\n throw new SyntaxError();\n }\n } else {\n const array = [];\n hydrated[index2] = array;\n for (let i = 0; i < value.length; i++) {\n const n = value[i];\n if (n !== HOLE) {\n stack.push([\n n,\n (v) => {\n array[i] = v;\n }\n ]);\n }\n }\n set(array);\n continue;\n }\n } else {\n const object = {};\n hydrated[index2] = object;\n for (const key of Object.keys(value).reverse()) {\n const r = [];\n stack.push([\n value[key],\n (v) => {\n r[1] = v;\n }\n ]);\n stack.push([\n Number(key.slice(1)),\n (k) => {\n r[0] = k;\n }\n ]);\n postRun.push(() => {\n object[r[0]] = r[1];\n });\n }\n set(object);\n continue;\n }\n }\n while (postRun.length > 0) {\n postRun.pop()();\n }\n return result;\n}\n\n// vendor/turbo-stream-v2/turbo-stream.ts\nasync function decode(readable, options) {\n const { plugins } = options ?? {};\n const done = new Deferred2();\n const reader = readable.pipeThrough(createLineSplittingTransform()).getReader();\n const decoder = {\n values: [],\n hydrated: [],\n deferred: {},\n plugins\n };\n const decoded = await decodeInitial.call(decoder, reader);\n let donePromise = done.promise;\n if (decoded.done) {\n done.resolve();\n } else {\n donePromise = decodeDeferred.call(decoder, reader).then(done.resolve).catch((reason) => {\n for (const deferred of Object.values(decoder.deferred)) {\n deferred.reject(reason);\n }\n done.reject(reason);\n });\n }\n return {\n done: donePromise.then(() => reader.closed),\n value: decoded.value\n };\n}\nasync function decodeInitial(reader) {\n const read = await reader.read();\n if (!read.value) {\n throw new SyntaxError();\n }\n let line;\n try {\n line = JSON.parse(read.value);\n } catch (reason) {\n throw new SyntaxError();\n }\n return {\n done: read.done,\n value: unflatten.call(this, line)\n };\n}\nasync function decodeDeferred(reader) {\n let read = await reader.read();\n while (!read.done) {\n if (!read.value) continue;\n const line = read.value;\n switch (line[0]) {\n case TYPE_PROMISE: {\n const colonIndex = line.indexOf(\":\");\n const deferredId = Number(line.slice(1, colonIndex));\n const deferred = this.deferred[deferredId];\n if (!deferred) {\n throw new Error(`Deferred ID ${deferredId} not found in stream`);\n }\n const lineData = line.slice(colonIndex + 1);\n let jsonLine;\n try {\n jsonLine = JSON.parse(lineData);\n } catch (reason) {\n throw new SyntaxError();\n }\n const value = unflatten.call(this, jsonLine);\n deferred.resolve(value);\n break;\n }\n case TYPE_ERROR: {\n const colonIndex = line.indexOf(\":\");\n const deferredId = Number(line.slice(1, colonIndex));\n const deferred = this.deferred[deferredId];\n if (!deferred) {\n throw new Error(`Deferred ID ${deferredId} not found in stream`);\n }\n const lineData = line.slice(colonIndex + 1);\n let jsonLine;\n try {\n jsonLine = JSON.parse(lineData);\n } catch (reason) {\n throw new SyntaxError();\n }\n const value = unflatten.call(this, jsonLine);\n deferred.reject(value);\n break;\n }\n default:\n throw new SyntaxError();\n }\n read = await reader.read();\n }\n}\nfunction encode(input, options) {\n const { onComplete, plugins, postPlugins, signal } = options ?? {};\n const encoder = {\n deferred: {},\n index: 0,\n indices: /* @__PURE__ */ new Map(),\n stringified: [],\n plugins,\n postPlugins,\n signal\n };\n const textEncoder = new TextEncoder();\n let lastSentIndex = 0;\n const readable = new ReadableStream({\n async start(controller) {\n const id = await flatten.call(encoder, input);\n if (Array.isArray(id)) {\n throw new Error(\"This should never happen\");\n }\n if (id < 0) {\n controller.enqueue(textEncoder.encode(`${id}\n`));\n } else {\n controller.enqueue(\n textEncoder.encode(`[${encoder.stringified.join(\",\")}]\n`)\n );\n lastSentIndex = encoder.stringified.length - 1;\n }\n const seenPromises = /* @__PURE__ */ new WeakSet();\n let processingChain = Promise.resolve();\n if (Object.keys(encoder.deferred).length) {\n let raceDone;\n const racePromise = new Promise((resolve, reject) => {\n raceDone = resolve;\n if (signal) {\n const rejectPromise = () => reject(signal.reason || new Error(\"Signal was aborted.\"));\n if (signal.aborted) {\n rejectPromise();\n } else {\n signal.addEventListener(\"abort\", (event) => {\n rejectPromise();\n });\n }\n }\n });\n while (Object.keys(encoder.deferred).length > 0) {\n for (const [deferredId, deferred] of Object.entries(\n encoder.deferred\n )) {\n if (seenPromises.has(deferred)) continue;\n seenPromises.add(\n // biome-ignore lint/suspicious/noAssignInExpressions: <explanation>\n encoder.deferred[Number(deferredId)] = Promise.race([\n racePromise,\n deferred\n ]).then(\n (resolved) => {\n processingChain = processingChain.then(async () => {\n const id2 = await flatten.call(encoder, resolved);\n if (Array.isArray(id2)) {\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_PROMISE}${deferredId}:[[\"${TYPE_PREVIOUS_RESOLVED}\",${id2[0]}]]\n`\n )\n );\n encoder.index++;\n lastSentIndex++;\n } else if (id2 < 0) {\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_PROMISE}${deferredId}:${id2}\n`\n )\n );\n } else {\n const values = encoder.stringified.slice(lastSentIndex + 1).join(\",\");\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_PROMISE}${deferredId}:[${values}]\n`\n )\n );\n lastSentIndex = encoder.stringified.length - 1;\n }\n });\n return processingChain;\n },\n (reason) => {\n processingChain = processingChain.then(async () => {\n if (!reason || typeof reason !== \"object\" || !(reason instanceof Error)) {\n reason = new Error(\"An unknown error occurred\");\n }\n const id2 = await flatten.call(encoder, reason);\n if (Array.isArray(id2)) {\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_ERROR}${deferredId}:[[\"${TYPE_PREVIOUS_RESOLVED}\",${id2[0]}]]\n`\n )\n );\n encoder.index++;\n lastSentIndex++;\n } else if (id2 < 0) {\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_ERROR}${deferredId}:${id2}\n`\n )\n );\n } else {\n const values = encoder.stringified.slice(lastSentIndex + 1).join(\",\");\n controller.enqueue(\n textEncoder.encode(\n `${TYPE_ERROR}${deferredId}:[${values}]\n`\n )\n );\n lastSentIndex = encoder.stringified.length - 1;\n }\n });\n return processingChain;\n }\n ).finally(() => {\n delete encoder.deferred[Number(deferredId)];\n })\n );\n }\n await Promise.race(Object.values(encoder.deferred));\n }\n raceDone();\n }\n await Promise.all(Object.values(encoder.deferred));\n await processingChain;\n controller.close();\n onComplete?.();\n }\n });\n return readable;\n}\n\n// lib/dom/ssr/data.ts\nasync function createRequestInit(request) {\n let init = { signal: request.signal };\n if (request.method !== \"GET\") {\n init.method = request.method;\n let contentType = request.headers.get(\"Content-Type\");\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n init.headers = { \"Content-Type\": contentType };\n init.body = JSON.stringify(await request.json());\n } else if (contentType && /\\btext\\/plain\\b/.test(contentType)) {\n init.headers = { \"Content-Type\": contentType };\n init.body = await request.text();\n } else if (contentType && /\\bapplication\\/x-www-form-urlencoded\\b/.test(contentType)) {\n init.body = new URLSearchParams(await request.text());\n } else {\n init.body = await request.formData();\n }\n }\n return init;\n}\n\n// lib/dom/ssr/markup.ts\nvar ESCAPE_LOOKUP = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nvar ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\nfunction escapeHtml(html) {\n return html.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);\n}\n\n// lib/dom/ssr/invariant.ts\nfunction invariant2(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\n// lib/dom/ssr/single-fetch.tsx\nvar SingleFetchRedirectSymbol = Symbol(\"SingleFetchRedirect\");\nvar SingleFetchNoResultError = class extends Error {\n};\nvar SINGLE_FETCH_REDIRECT_STATUS = 202;\nvar NO_BODY_STATUS_CODES = /* @__PURE__ */ new Set([100, 101, 204, 205]);\nfunction StreamTransfer({\n context,\n identifier,\n reader,\n textDecoder,\n nonce\n}) {\n if (!context.renderMeta || !context.renderMeta.didRenderScripts) {\n return null;\n }\n if (!context.renderMeta.streamCache) {\n context.renderMeta.streamCache = {};\n }\n let { streamCache } = context.renderMeta;\n let promise = streamCache[identifier];\n if (!promise) {\n promise = streamCache[identifier] = reader.read().then((result) => {\n streamCache[identifier].result = {\n done: result.done,\n value: textDecoder.decode(result.value, { stream: true })\n };\n }).catch((e) => {\n streamCache[identifier].error = e;\n });\n }\n if (promise.error) {\n throw promise.error;\n }\n if (promise.result === void 0) {\n throw promise;\n }\n let { done, value } = promise.result;\n let scriptTag = value ? /* @__PURE__ */ React4.createElement(\n \"script\",\n {\n nonce,\n dangerouslySetInnerHTML: {\n __html: `window.__reactRouterContext.streamController.enqueue(${escapeHtml(\n JSON.stringify(value)\n )});`\n }\n }\n ) : null;\n if (done) {\n return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(\n \"script\",\n {\n nonce,\n dangerouslySetInnerHTML: {\n __html: `window.__reactRouterContext.streamController.close();`\n }\n }\n ));\n } else {\n return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(React4.Suspense, null, /* @__PURE__ */ React4.createElement(\n StreamTransfer,\n {\n context,\n identifier: identifier + 1,\n reader,\n textDecoder,\n nonce\n }\n )));\n }\n}\nfunction getTurboStreamSingleFetchDataStrategy(getRouter, manifest, routeModules, ssr, basename, trailingSlashAware) {\n let dataStrategy = getSingleFetchDataStrategyImpl(\n getRouter,\n (match) => {\n let manifestRoute = manifest.routes[match.route.id];\n invariant2(manifestRoute, \"Route not found in manifest\");\n return {\n hasLoader: manifestRoute.hasLoader,\n hasClientLoader: manifestRoute.hasClientLoader\n };\n },\n fetchAndDecodeViaTurboStream,\n ssr,\n basename,\n trailingSlashAware\n );\n return async (args) => args.runClientMiddleware(dataStrategy);\n}\nfunction getSingleFetchDataStrategyImpl(getRouter, getRouteInfo, fetchAndDecode, ssr, basename, trailingSlashAware, shouldAllowOptOut = () => true) {\n return async (args) => {\n let { request, matches, fetcherKey } = args;\n let router = getRouter();\n if (request.method !== \"GET\") {\n return singleFetchActionStrategy(\n args,\n fetchAndDecode,\n basename,\n trailingSlashAware\n );\n }\n let foundRevalidatingServerLoader = matches.some((m) => {\n let { hasLoader, hasClientLoader } = getRouteInfo(m);\n return m.shouldCallHandler() && hasLoader && !hasClientLoader;\n });\n if (!ssr && !foundRevalidatingServerLoader) {\n return nonSsrStrategy(\n args,\n getRouteInfo,\n fetchAndDecode,\n basename,\n trailingSlashAware\n );\n }\n if (fetcherKey) {\n return singleFetchLoaderFetcherStrategy(\n args,\n fetchAndDecode,\n basename,\n trailingSlashAware\n );\n }\n return singleFetchLoaderNavigationStrategy(\n args,\n router,\n getRouteInfo,\n fetchAndDecode,\n ssr,\n basename,\n trailingSlashAware,\n shouldAllowOptOut\n );\n };\n}\nasync function singleFetchActionStrategy(args, fetchAndDecode, basename, trailingSlashAware) {\n let actionMatch = args.matches.find((m) => m.shouldCallHandler());\n invariant2(actionMatch, \"No action match found\");\n let actionStatus = void 0;\n let result = await actionMatch.resolve(async (handler) => {\n let result2 = await handler(async () => {\n let { data: data2, status } = await fetchAndDecode(\n args,\n basename,\n trailingSlashAware,\n [actionMatch.route.id]\n );\n actionStatus = status;\n return unwrapSingleFetchResult(data2, actionMatch.route.id);\n });\n return result2;\n });\n if (isResponse(result.result) || isRouteErrorResponse(result.result) || isDataWithResponseInit(result.result)) {\n return { [actionMatch.route.id]: result };\n }\n return {\n [actionMatch.route.id]: {\n type: result.type,\n result: data(result.result, actionStatus)\n }\n };\n}\nasync function nonSsrStrategy(args, getRouteInfo, fetchAndDecode, basename, trailingSlashAware) {\n let matchesToLoad = args.matches.filter((m) => m.shouldCallHandler());\n let results = {};\n await Promise.all(\n matchesToLoad.map(\n (m) => m.resolve(async (handler) => {\n try {\n let { hasClientLoader } = getRouteInfo(m);\n let routeId = m.route.id;\n let result = hasClientLoader ? await handler(async () => {\n let { data: data2 } = await fetchAndDecode(\n args,\n basename,\n trailingSlashAware,\n [routeId]\n );\n return unwrapSingleFetchResult(data2, routeId);\n }) : await handler();\n results[m.route.id] = { type: \"data\", result };\n } catch (e) {\n results[m.route.id] = { type: \"error\", result: e };\n }\n })\n )\n );\n return results;\n}\nasync function singleFetchLoaderNavigationStrategy(args, router, getRouteInfo, fetchAndDecode, ssr, basename, trailingSlashAware, shouldAllowOptOut = () => true) {\n let routesParams = /* @__PURE__ */ new Set();\n let foundOptOutRoute = false;\n let routeDfds = args.matches.map(() => createDeferred2());\n let singleFetchDfd = createDeferred2();\n let results = {};\n let resolvePromise = Promise.all(\n args.matches.map(\n async (m, i) => m.resolve(async (handler) => {\n routeDfds[i].resolve();\n let routeId = m.route.id;\n let { hasLoader, hasClientLoader } = getRouteInfo(m);\n let defaultShouldRevalidate = !m.shouldRevalidateArgs || m.shouldRevalidateArgs.actionStatus == null || m.shouldRevalidateArgs.actionStatus < 400;\n let shouldCall = m.shouldCallHandler(defaultShouldRevalidate);\n if (!shouldCall) {\n foundOptOutRoute || (foundOptOutRoute = m.shouldRevalidateArgs != null && // This is a revalidation,\n hasLoader);\n return;\n }\n if (shouldAllowOptOut(m) && hasClientLoader) {\n if (hasLoader) {\n foundOptOutRoute = true;\n }\n try {\n let result = await handler(async () => {\n let { data: data2 } = await fetchAndDecode(\n args,\n basename,\n trailingSlashAware,\n [routeId]\n );\n return unwrapSingleFetchResult(data2, routeId);\n });\n results[routeId] = { type: \"data\", result };\n } catch (e) {\n results[routeId] = { type: \"error\", result: e };\n }\n return;\n }\n if (hasLoader) {\n routesParams.add(routeId);\n }\n try {\n let result = await handler(async () => {\n let data2 = await singleFetchDfd.promise;\n return unwrapSingleFetchResult(data2, routeId);\n });\n results[routeId] = { type: \"data\", result };\n } catch (e) {\n results[routeId] = { type: \"error\", result: e };\n }\n })\n )\n );\n await Promise.all(routeDfds.map((d) => d.promise));\n let isInitialLoad = !router.state.initialized && router.state.navigation.state === \"idle\";\n if ((isInitialLoad || routesParams.size === 0) && !window.__reactRouterHdrActive) {\n singleFetchDfd.resolve({ routes: {} });\n } else {\n let targetRoutes = ssr && foundOptOutRoute && routesParams.size > 0 ? [...routesParams.keys()] : void 0;\n try {\n let data2 = await fetchAndDecode(\n args,\n basename,\n trailingSlashAware,\n targetRoutes\n );\n singleFetchDfd.resolve(data2.data);\n } catch (e) {\n singleFetchDfd.reject(e);\n }\n }\n await resolvePromise;\n await bubbleMiddlewareErrors(\n singleFetchDfd.promise,\n args.matches,\n routesParams,\n results\n );\n return results;\n}\nasync function bubbleMiddlewareErrors(singleFetchPromise, matches, routesParams, results) {\n try {\n let middlewareError;\n let fetchedData = await singleFetchPromise;\n if (\"routes\" in fetchedData) {\n for (let match of matches) {\n if (match.route.id in fetchedData.routes) {\n let routeResult = fetchedData.routes[match.route.id];\n if (\"error\" in routeResult) {\n middlewareError = routeResult.error;\n if (results[match.route.id]?.result == null) {\n results[match.route.id] = {\n type: \"error\",\n result: middlewareError\n };\n }\n break;\n }\n }\n }\n }\n if (middlewareError !== void 0) {\n Array.from(routesParams.values()).forEach((routeId) => {\n if (results[routeId].result instanceof SingleFetchNoResultError) {\n results[routeId].result = middlewareError;\n }\n });\n }\n } catch (e) {\n }\n}\nasync function singleFetchLoaderFetcherStrategy(args, fetchAndDecode, basename, trailingSlashAware) {\n let fetcherMatch = args.matches.find((m) => m.shouldCallHandler());\n invariant2(fetcherMatch, \"No fetcher match found\");\n let routeId = fetcherMatch.route.id;\n let result = await fetcherMatch.resolve(\n async (handler) => handler(async () => {\n let { data: data2 } = await fetchAndDecode(args, basename, trailingSlashAware, [\n routeId\n ]);\n return unwrapSingleFetchResult(data2, routeId);\n })\n );\n return { [fetcherMatch.route.id]: result };\n}\nfunction stripIndexParam(url) {\n let indexValues = url.searchParams.getAll(\"index\");\n url.searchParams.delete(\"index\");\n let indexValuesToKeep = [];\n for (let indexValue of indexValues) {\n if (indexValue) {\n indexValuesToKeep.push(indexValue);\n }\n }\n for (let toKeep of indexValuesToKeep) {\n url.searchParams.append(\"index\", toKeep);\n }\n return url;\n}\nfunction singleFetchUrl(reqUrl, basename, trailingSlashAware, extension) {\n let url = typeof reqUrl === \"string\" ? new URL(\n reqUrl,\n // This can be called during the SSR flow via PrefetchPageLinksImpl so\n // don't assume window is available\n typeof window === \"undefined\" ? \"server://singlefetch/\" : window.location.origin\n ) : reqUrl;\n if (trailingSlashAware) {\n if (url.pathname.endsWith(\"/\")) {\n url.pathname = `${url.pathname}_.${extension}`;\n } else {\n url.pathname = `${url.pathname}.${extension}`;\n }\n } else {\n if (url.pathname === \"/\") {\n url.pathname = `_root.${extension}`;\n } else if (basename && stripBasename(url.pathname, basename) === \"/\") {\n url.pathname = `${removeTrailingSlash(basename)}/_root.${extension}`;\n } else {\n url.pathname = `${removeTrailingSlash(url.pathname)}.${extension}`;\n }\n }\n return url;\n}\nasync function fetchAndDecodeViaTurboStream(args, basename, trailingSlashAware, targetRoutes) {\n let { request } = args;\n let url = singleFetchUrl(request.url, basename, trailingSlashAware, \"data\");\n if (request.method === \"GET\") {\n url = stripIndexParam(url);\n if (targetRoutes) {\n url.searchParams.set(\"_routes\", targetRoutes.join(\",\"));\n }\n }\n let res = await fetch(url, await createRequestInit(request));\n if (res.status >= 400 && !res.headers.has(\"X-Remix-Response\")) {\n throw new ErrorResponseImpl(res.status, res.statusText, await res.text());\n }\n if (res.status === 204 && res.headers.has(\"X-Remix-Redirect\")) {\n return {\n status: SINGLE_FETCH_REDIRECT_STATUS,\n data: {\n redirect: {\n redirect: res.headers.get(\"X-Remix-Redirect\"),\n status: Number(res.headers.get(\"X-Remix-Status\") || \"302\"),\n revalidate: res.headers.get(\"X-Remix-Revalidate\") === \"true\",\n reload: res.headers.get(\"X-Remix-Reload-Document\") === \"true\",\n replace: res.headers.get(\"X-Remix-Replace\") === \"true\"\n }\n }\n };\n }\n if (NO_BODY_STATUS_CODES.has(res.status)) {\n let routes = {};\n if (targetRoutes && request.method !== \"GET\") {\n routes[targetRoutes[0]] = { data: void 0 };\n }\n return {\n status: res.status,\n data: { routes }\n };\n }\n invariant2(res.body, \"No response body to decode\");\n try {\n let decoded = await decodeViaTurboStream(res.body, window);\n let data2;\n if (request.method === \"GET\") {\n let typed = decoded.value;\n if (SingleFetchRedirectSymbol in typed) {\n data2 = { redirect: typed[SingleFetchRedirectSymbol] };\n } else {\n data2 = { routes: typed };\n }\n } else {\n let typed = decoded.value;\n let routeId = targetRoutes?.[0];\n invariant2(routeId, \"No routeId found for single fetch call decoding\");\n if (\"redirect\" in typed) {\n data2 = { redirect: typed };\n } else {\n data2 = { routes: { [routeId]: typed } };\n }\n }\n return { status: res.status, data: data2 };\n } catch (e) {\n throw new Error(\"Unable to decode turbo-stream response\");\n }\n}\nfunction decodeViaTurboStream(body, global) {\n return decode(body, {\n plugins: [\n (type, ...rest) => {\n if (type === \"SanitizedError\") {\n let [name, message, stack] = rest;\n let Constructor = Error;\n if (name && SUPPORTED_ERROR_TYPES.includes(name) && name in global && // @ts-expect-error\n typeof global[name] === \"function\") {\n Constructor = global[name];\n }\n let error = new Constructor(message);\n error.stack = stack;\n return { value: error };\n }\n if (type === \"ErrorResponse\") {\n let [data2, status, statusText] = rest;\n return {\n value: new ErrorResponseImpl(status, statusText, data2)\n };\n }\n if (type === \"SingleFetchRedirect\") {\n return { value: { [SingleFetchRedirectSymbol]: rest[0] } };\n }\n if (type === \"SingleFetchClassInstance\") {\n return { value: rest[0] };\n }\n if (type === \"SingleFetchFallback\") {\n return { value: void 0 };\n }\n }\n ]\n });\n}\nfunction unwrapSingleFetchResult(result, routeId) {\n if (\"redirect\" in result) {\n let {\n redirect: location,\n revalidate,\n reload,\n replace: replace2,\n status\n } = result.redirect;\n throw redirect(location, {\n status,\n headers: {\n // Three R's of redirecting (lol Veep)\n ...revalidate ? { \"X-Remix-Revalidate\": \"yes\" } : null,\n ...reload ? { \"X-Remix-Reload-Document\": \"yes\" } : null,\n ...replace2 ? { \"X-Remix-Replace\": \"yes\" } : null\n }\n });\n }\n let routeResult = result.routes[routeId];\n if (routeResult == null) {\n throw new SingleFetchNoResultError(\n `No result found for routeId \"${routeId}\"`\n );\n } else if (\"error\" in routeResult) {\n throw routeResult.error;\n } else if (\"data\" in routeResult) {\n return routeResult.data;\n } else {\n throw new Error(`Invalid response found for routeId \"${routeId}\"`);\n }\n}\nfunction createDeferred2() {\n let resolve;\n let reject;\n let promise = new Promise((res, rej) => {\n resolve = async (val) => {\n res(val);\n try {\n await promise;\n } catch (e) {\n }\n };\n reject = async (error) => {\n rej(error);\n try {\n await promise;\n } catch (e) {\n }\n };\n });\n return {\n promise,\n //@ts-ignore\n resolve,\n //@ts-ignore\n reject\n };\n}\n\n// lib/dom/ssr/errorBoundaries.tsx\nimport * as React9 from \"react\";\n\n// lib/dom/ssr/components.tsx\nimport * as React8 from \"react\";\n\n// lib/dom/ssr/routeModules.ts\nasync function loadRouteModule(route, routeModulesCache) {\n if (route.id in routeModulesCache) {\n return routeModulesCache[route.id];\n }\n try {\n let routeModule = await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.module\n );\n routeModulesCache[route.id] = routeModule;\n return routeModule;\n } catch (error) {\n console.error(\n `Error loading route module \\`${route.module}\\`, reloading page...`\n );\n console.error(error);\n if (window.__reactRouterContext && window.__reactRouterContext.isSpaMode && // @ts-expect-error\n import.meta.hot) {\n throw error;\n }\n window.location.reload();\n return new Promise(() => {\n });\n }\n}\n\n// lib/dom/ssr/links.ts\nfunction getKeyedLinksForMatches(matches, routeModules, manifest) {\n let descriptors = matches.map((match) => {\n let module = routeModules[match.route.id];\n let route = manifest.routes[match.route.id];\n return [\n route && route.css ? route.css.map((href) => ({ rel: \"stylesheet\", href })) : [],\n module?.links?.() || []\n ];\n }).flat(2);\n let preloads = getModuleLinkHrefs(matches, manifest);\n return dedupeLinkDescriptors(descriptors, preloads);\n}\nfunction getRouteCssDescriptors(route) {\n if (!route.css) return [];\n return route.css.map((href) => ({ rel: \"stylesheet\", href }));\n}\nasync function prefetchRouteCss(route) {\n if (!route.css) return;\n let descriptors = getRouteCssDescriptors(route);\n await Promise.all(descriptors.map(prefetchStyleLink));\n}\nasync function prefetchStyleLinks(route, routeModule) {\n if (!route.css && !routeModule.links || !isPreloadSupported()) return;\n let descriptors = [];\n if (route.css) {\n descriptors.push(...getRouteCssDescriptors(route));\n }\n if (routeModule.links) {\n descriptors.push(...routeModule.links());\n }\n if (descriptors.length === 0) return;\n let styleLinks = [];\n for (let descriptor of descriptors) {\n if (!isPageLinkDescriptor(descriptor) && descriptor.rel === \"stylesheet\") {\n styleLinks.push({\n ...descriptor,\n rel: \"preload\",\n as: \"style\"\n });\n }\n }\n await Promise.all(styleLinks.map(prefetchStyleLink));\n}\nasync function prefetchStyleLink(descriptor) {\n return new Promise((resolve) => {\n if (descriptor.media && !window.matchMedia(descriptor.media).matches || document.querySelector(\n `link[rel=\"stylesheet\"][href=\"${descriptor.href}\"]`\n )) {\n return resolve();\n }\n let link = document.createElement(\"link\");\n Object.assign(link, descriptor);\n function removeLink() {\n if (document.head.contains(link)) {\n document.head.removeChild(link);\n }\n }\n link.onload = () => {\n removeLink();\n resolve();\n };\n link.onerror = () => {\n removeLink();\n resolve();\n };\n document.head.appendChild(link);\n });\n}\nfunction isPageLinkDescriptor(object) {\n return object != null && typeof object.page === \"string\";\n}\nfunction isHtmlLinkDescriptor(object) {\n if (object == null) {\n return false;\n }\n if (object.href == null) {\n return object.rel === \"preload\" && typeof object.imageSrcSet === \"string\" && typeof object.imageSizes === \"string\";\n }\n return typeof object.rel === \"string\" && typeof object.href === \"string\";\n}\nasync function getKeyedPrefetchLinks(matches, manifest, routeModules) {\n let links = await Promise.all(\n matches.map(async (match) => {\n let route = manifest.routes[match.route.id];\n if (route) {\n let mod = await loadRouteModule(route, routeModules);\n return mod.links ? mod.links() : [];\n }\n return [];\n })\n );\n return dedupeLinkDescriptors(\n links.flat(1).filter(isHtmlLinkDescriptor).filter((link) => link.rel === \"stylesheet\" || link.rel === \"preload\").map(\n (link) => link.rel === \"stylesheet\" ? { ...link, rel: \"prefetch\", as: \"style\" } : { ...link, rel: \"prefetch\" }\n )\n );\n}\nfunction getNewMatchesForLinks(page, nextMatches, currentMatches, manifest, location, mode) {\n let isNew = (match, index) => {\n if (!currentMatches[index]) return true;\n return match.route.id !== currentMatches[index].route.id;\n };\n let matchPathChanged = (match, index) => {\n return (\n // param change, /users/123 -> /users/456\n currentMatches[index].pathname !== match.pathname || // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentMatches[index].route.path?.endsWith(\"*\") && currentMatches[index].params[\"*\"] !== match.params[\"*\"]\n );\n };\n if (mode === \"assets\") {\n return nextMatches.filter(\n (match, index) => isNew(match, index) || matchPathChanged(match, index)\n );\n }\n if (mode === \"data\") {\n return nextMatches.filter((match, index) => {\n let manifestRoute = manifest.routes[match.route.id];\n if (!manifestRoute || !manifestRoute.hasLoader) {\n return false;\n }\n if (isNew(match, index) || matchPathChanged(match, index)) {\n return true;\n }\n if (match.route.shouldRevalidate) {\n let routeChoice = match.route.shouldRevalidate({\n currentUrl: new URL(\n location.pathname + location.search + location.hash,\n window.origin\n ),\n currentParams: currentMatches[0]?.params || {},\n nextUrl: new URL(page, window.origin),\n nextParams: match.params,\n defaultShouldRevalidate: true\n });\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return true;\n });\n }\n return [];\n}\nfunction getModuleLinkHrefs(matches, manifest, { includeHydrateFallback } = {}) {\n return dedupeHrefs(\n matches.map((match) => {\n let route = manifest.routes[match.route.id];\n if (!route) return [];\n let hrefs = [route.module];\n if (route.clientActionModule) {\n hrefs = hrefs.concat(route.clientActionModule);\n }\n if (route.clientLoaderModule) {\n hrefs = hrefs.concat(route.clientLoaderModule);\n }\n if (includeHydrateFallback && route.hydrateFallbackModule) {\n hrefs = hrefs.concat(route.hydrateFallbackModule);\n }\n if (route.imports) {\n hrefs = hrefs.concat(route.imports);\n }\n return hrefs;\n }).flat(1)\n );\n}\nfunction dedupeHrefs(hrefs) {\n return [...new Set(hrefs)];\n}\nfunction sortKeys(obj) {\n let sorted = {};\n let keys = Object.keys(obj).sort();\n for (let key of keys) {\n sorted[key] = obj[key];\n }\n return sorted;\n}\nfunction dedupeLinkDescriptors(descriptors, preloads) {\n let set = /* @__PURE__ */ new Set();\n let preloadsSet = new Set(preloads);\n return descriptors.reduce((deduped, descriptor) => {\n let alreadyModulePreload = preloads && !isPageLinkDescriptor(descriptor) && descriptor.as === \"script\" && descriptor.href && preloadsSet.has(descriptor.href);\n if (alreadyModulePreload) {\n return deduped;\n }\n let key = JSON.stringify(sortKeys(descriptor));\n if (!set.has(key)) {\n set.add(key);\n deduped.push({ key, link: descriptor });\n }\n return deduped;\n }, []);\n}\nvar _isPreloadSupported;\nfunction isPreloadSupported() {\n if (_isPreloadSupported !== void 0) {\n return _isPreloadSupported;\n }\n let el = document.createElement(\"link\");\n _isPreloadSupported = el.relList.supports(\"preload\");\n el = null;\n return _isPreloadSupported;\n}\n\n// lib/dom/ssr/fog-of-war.ts\nimport * as React7 from \"react\";\n\n// lib/dom/ssr/routes.tsx\nimport * as React6 from \"react\";\n\n// lib/dom/ssr/fallback.tsx\nimport * as React5 from \"react\";\nfunction RemixRootDefaultHydrateFallback() {\n return /* @__PURE__ */ React5.createElement(BoundaryShell, { title: \"Loading...\", renderScripts: true }, ENABLE_DEV_WARNINGS ? /* @__PURE__ */ React5.createElement(\n \"script\",\n {\n dangerouslySetInnerHTML: {\n __html: `\n console.log(\n \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this \" +\n \"when your app is loading JS modules and/or running \\`clientLoader\\` \" +\n \"functions. Check out https://reactrouter.com/start/framework/route-module#hydratefallback \" +\n \"for more information.\"\n );\n `\n }\n }\n ) : null);\n}\n\n// lib/dom/ssr/routes.tsx\nfunction groupRoutesByParentId(manifest) {\n let routes = {};\n Object.values(manifest).forEach((route) => {\n if (route) {\n let parentId = route.parentId || \"\";\n if (!routes[parentId]) {\n routes[parentId] = [];\n }\n routes[parentId].push(route);\n }\n });\n return routes;\n}\nfunction getRouteComponents(route, routeModule, isSpaMode) {\n let Component4 = getRouteModuleComponent(routeModule);\n let HydrateFallback = routeModule.HydrateFallback && (!isSpaMode || route.id === \"root\") ? routeModule.HydrateFallback : route.id === \"root\" ? RemixRootDefaultHydrateFallback : void 0;\n let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === \"root\" ? () => /* @__PURE__ */ React6.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;\n if (route.id === \"root\" && routeModule.Layout) {\n return {\n ...Component4 ? {\n element: /* @__PURE__ */ React6.createElement(routeModule.Layout, null, /* @__PURE__ */ React6.createElement(Component4, null))\n } : { Component: Component4 },\n ...ErrorBoundary ? {\n errorElement: /* @__PURE__ */ React6.createElement(routeModule.Layout, null, /* @__PURE__ */ React6.createElement(ErrorBoundary, null))\n } : { ErrorBoundary },\n ...HydrateFallback ? {\n hydrateFallbackElement: /* @__PURE__ */ React6.createElement(routeModule.Layout, null, /* @__PURE__ */ React6.createElement(HydrateFallback, null))\n } : { HydrateFallback }\n };\n }\n return { Component: Component4, ErrorBoundary, HydrateFallback };\n}\nfunction createServerRoutes(manifest, routeModules, future, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), spaModeLazyPromise = Promise.resolve({ Component: () => null })) {\n return (routesByParentId[parentId] || []).map((route) => {\n let routeModule = routeModules[route.id];\n invariant2(\n routeModule,\n \"No `routeModule` available to create server routes\"\n );\n let dataRoute = {\n ...getRouteComponents(route, routeModule, isSpaMode),\n caseSensitive: route.caseSensitive,\n id: route.id,\n index: route.index,\n path: route.path,\n handle: routeModule.handle,\n // For SPA Mode, all routes are lazy except root. However we tell the\n // router root is also lazy here too since we don't need a full\n // implementation - we just need a `lazy` prop to tell the RR rendering\n // where to stop which is always at the root route in SPA mode\n lazy: isSpaMode ? () => spaModeLazyPromise : void 0,\n // For partial hydration rendering, we need to indicate when the route\n // has a loader/clientLoader, but it won't ever be called during the static\n // render, so just give it a no-op function so we can render down to the\n // proper fallback\n loader: route.hasLoader || route.hasClientLoader ? () => null : void 0\n // We don't need middleware/action/shouldRevalidate on these routes since\n // they're for a static render\n };\n let children = createServerRoutes(\n manifest,\n routeModules,\n future,\n isSpaMode,\n route.id,\n routesByParentId,\n spaModeLazyPromise\n );\n if (children.length > 0) dataRoute.children = children;\n return dataRoute;\n });\n}\nfunction createClientRoutesWithHMRRevalidationOptOut(needsRevalidation, manifest, routeModulesCache, initialState, ssr, isSpaMode) {\n return createClientRoutes(\n manifest,\n routeModulesCache,\n initialState,\n ssr,\n isSpaMode,\n \"\",\n groupRoutesByParentId(manifest),\n needsRevalidation\n );\n}\nfunction preventInvalidServerHandlerCall(type, route) {\n if (type === \"loader\" && !route.hasLoader || type === \"action\" && !route.hasAction) {\n let fn = type === \"action\" ? \"serverAction()\" : \"serverLoader()\";\n let msg = `You are trying to call ${fn} on a route that does not have a server ${type} (routeId: \"${route.id}\")`;\n console.error(msg);\n throw new ErrorResponseImpl(400, \"Bad Request\", new Error(msg), true);\n }\n}\nfunction noActionDefinedError(type, routeId) {\n let article = type === \"clientAction\" ? \"a\" : \"an\";\n let msg = `Route \"${routeId}\" does not have ${article} ${type}, but you are trying to submit to it. To fix this, please add ${article} \\`${type}\\` function to the route`;\n console.error(msg);\n throw new ErrorResponseImpl(405, \"Method Not Allowed\", new Error(msg), true);\n}\nfunction createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSpaMode, parentId = \"\", routesByParentId = groupRoutesByParentId(manifest), needsRevalidation) {\n return (routesByParentId[parentId] || []).map((route) => {\n let routeModule = routeModulesCache[route.id];\n function fetchServerHandler(singleFetch) {\n invariant2(\n typeof singleFetch === \"function\",\n \"No single fetch function available for route handler\"\n );\n return singleFetch();\n }\n function fetchServerLoader(singleFetch) {\n if (!route.hasLoader) return Promise.resolve(null);\n return fetchServerHandler(singleFetch);\n }\n function fetchServerAction(singleFetch) {\n if (!route.hasAction) {\n throw noActionDefinedError(\"action\", route.id);\n }\n return fetchServerHandler(singleFetch);\n }\n function prefetchModule(modulePath) {\n import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n modulePath\n );\n }\n function prefetchRouteModuleChunks(route2) {\n if (route2.clientActionModule) {\n prefetchModule(route2.clientActionModule);\n }\n if (route2.clientLoaderModule) {\n prefetchModule(route2.clientLoaderModule);\n }\n }\n async function prefetchStylesAndCallHandler(handler) {\n let cachedModule = routeModulesCache[route.id];\n let linkPrefetchPromise = cachedModule ? prefetchStyleLinks(route, cachedModule) : Promise.resolve();\n try {\n return handler();\n } finally {\n await linkPrefetchPromise;\n }\n }\n let dataRoute = {\n id: route.id,\n index: route.index,\n path: route.path\n };\n if (routeModule) {\n Object.assign(dataRoute, {\n ...dataRoute,\n ...getRouteComponents(route, routeModule, isSpaMode),\n middleware: routeModule.clientMiddleware,\n handle: routeModule.handle,\n shouldRevalidate: getShouldRevalidateFunction(\n dataRoute.path,\n routeModule,\n route,\n ssr,\n needsRevalidation\n )\n });\n let hasInitialData = initialState && initialState.loaderData && route.id in initialState.loaderData;\n let initialData = hasInitialData ? initialState?.loaderData?.[route.id] : void 0;\n let hasInitialError = initialState && initialState.errors && route.id in initialState.errors;\n let initialError = hasInitialError ? initialState?.errors?.[route.id] : void 0;\n let isHydrationRequest = needsRevalidation == null && (routeModule.clientLoader?.hydrate === true || !route.hasLoader);\n dataRoute.loader = async ({ request, params, context, pattern, url }, singleFetch) => {\n let _isHydrationRequest = isHydrationRequest;\n isHydrationRequest = false;\n let result = await prefetchStylesAndCallHandler(async () => {\n invariant2(\n routeModule,\n \"No `routeModule` available for critical-route loader\"\n );\n if (!routeModule.clientLoader) {\n return fetchServerLoader(singleFetch);\n }\n return routeModule.clientLoader({\n request,\n params,\n context,\n pattern,\n url,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n if (_isHydrationRequest) {\n if (hasInitialData) {\n return initialData;\n }\n if (hasInitialError) {\n throw initialError;\n }\n }\n return fetchServerLoader(singleFetch);\n }\n });\n });\n return result;\n };\n dataRoute.loader.hydrate = shouldHydrateRouteLoader(\n route.id,\n routeModule.clientLoader,\n route.hasLoader,\n isSpaMode\n );\n dataRoute.action = ({ request, params, context, pattern, url }, singleFetch) => {\n return prefetchStylesAndCallHandler(async () => {\n invariant2(\n routeModule,\n \"No `routeModule` available for critical-route action\"\n );\n if (!routeModule.clientAction) {\n if (isSpaMode) {\n throw noActionDefinedError(\"clientAction\", route.id);\n }\n return fetchServerAction(singleFetch);\n }\n return routeModule.clientAction({\n request,\n params,\n context,\n pattern,\n url,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n });\n };\n } else {\n if (!route.hasClientLoader) {\n dataRoute.loader = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n return fetchServerLoader(singleFetch);\n });\n }\n if (!route.hasClientAction) {\n dataRoute.action = (_, singleFetch) => prefetchStylesAndCallHandler(() => {\n if (isSpaMode) {\n throw noActionDefinedError(\"clientAction\", route.id);\n }\n return fetchServerAction(singleFetch);\n });\n }\n let lazyRoutePromise;\n async function getLazyRoute() {\n if (lazyRoutePromise) {\n return await lazyRoutePromise;\n }\n lazyRoutePromise = (async () => {\n if (route.clientLoaderModule || route.clientActionModule) {\n await new Promise((resolve) => setTimeout(resolve, 0));\n }\n let routeModulePromise = loadRouteModuleWithBlockingLinks(\n route,\n routeModulesCache\n );\n prefetchRouteModuleChunks(route);\n return await routeModulePromise;\n })();\n return await lazyRoutePromise;\n }\n dataRoute.lazy = {\n loader: route.hasClientLoader ? async () => {\n let { clientLoader } = route.clientLoaderModule ? await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientLoaderModule\n ) : await getLazyRoute();\n invariant2(clientLoader, \"No `clientLoader` export found\");\n return (args, singleFetch) => clientLoader({\n ...args,\n async serverLoader() {\n preventInvalidServerHandlerCall(\"loader\", route);\n return fetchServerLoader(singleFetch);\n }\n });\n } : void 0,\n action: route.hasClientAction ? async () => {\n let clientActionPromise = route.clientActionModule ? import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientActionModule\n ) : getLazyRoute();\n prefetchRouteModuleChunks(route);\n let { clientAction } = await clientActionPromise;\n invariant2(clientAction, \"No `clientAction` export found\");\n return (args, singleFetch) => clientAction({\n ...args,\n async serverAction() {\n preventInvalidServerHandlerCall(\"action\", route);\n return fetchServerAction(singleFetch);\n }\n });\n } : void 0,\n middleware: route.hasClientMiddleware ? async () => {\n let { clientMiddleware } = route.clientMiddlewareModule ? await import(\n /* @vite-ignore */\n /* webpackIgnore: true */\n route.clientMiddlewareModule\n ) : await getLazyRoute();\n invariant2(clientMiddleware, \"No `clientMiddleware` export found\");\n return clientMiddleware;\n } : void 0,\n shouldRevalidate: async () => {\n let lazyRoute = await getLazyRoute();\n return getShouldRevalidateFunction(\n dataRoute.path,\n lazyRoute,\n route,\n ssr,\n needsRevalidation\n );\n },\n handle: async () => (await getLazyRoute()).handle,\n // No need to wrap these in layout since the root route is never\n // loaded via route.lazy()\n Component: async () => (await getLazyRoute()).Component,\n ErrorBoundary: route.hasErrorBoundary ? async () => (await getLazyRoute()).ErrorBoundary : void 0\n };\n }\n let children = createClientRoutes(\n manifest,\n routeModulesCache,\n initialState,\n ssr,\n isSpaMode,\n route.id,\n routesByParentId,\n needsRevalidation\n );\n if (children.length > 0) dataRoute.children = children;\n return dataRoute;\n });\n}\nfunction getShouldRevalidateFunction(path, route, manifestRoute, ssr, needsRevalidation) {\n if (needsRevalidation) {\n return wrapShouldRevalidateForHdr(\n manifestRoute.id,\n route.shouldRevalidate,\n needsRevalidation\n );\n }\n if (!ssr && manifestRoute.hasLoader && !manifestRoute.hasClientLoader) {\n let myParams = path ? compilePath(path)[1].map((p) => p.paramName) : [];\n const didParamsChange = (opts) => myParams.some((p) => opts.currentParams[p] !== opts.nextParams[p]);\n if (route.shouldRevalidate) {\n let fn = route.shouldRevalidate;\n return (opts) => fn({\n ...opts,\n defaultShouldRevalidate: didParamsChange(opts)\n });\n } else {\n return (opts) => didParamsChange(opts);\n }\n }\n return route.shouldRevalidate;\n}\nfunction wrapShouldRevalidateForHdr(routeId, routeShouldRevalidate, needsRevalidation) {\n let handledRevalidation = false;\n return (arg) => {\n if (!handledRevalidation) {\n handledRevalidation = true;\n return needsRevalidation.has(routeId);\n }\n return routeShouldRevalidate ? routeShouldRevalidate(arg) : arg.defaultShouldRevalidate;\n };\n}\nasync function loadRouteModuleWithBlockingLinks(route, routeModules) {\n let routeModulePromise = loadRouteModule(route, routeModules);\n let prefetchRouteCssPromise = prefetchRouteCss(route);\n let routeModule = await routeModulePromise;\n await Promise.all([\n prefetchRouteCssPromise,\n prefetchStyleLinks(route, routeModule)\n ]);\n return {\n Component: getRouteModuleComponent(routeModule),\n ErrorBoundary: routeModule.ErrorBoundary,\n clientMiddleware: routeModule.clientMiddleware,\n clientAction: routeModule.clientAction,\n clientLoader: routeModule.clientLoader,\n handle: routeModule.handle,\n links: routeModule.links,\n meta: routeModule.meta,\n shouldRevalidate: routeModule.shouldRevalidate\n };\n}\nfunction getRouteModuleComponent(routeModule) {\n if (routeModule.default == null) return void 0;\n let isEmptyObject = typeof routeModule.default === \"object\" && Object.keys(routeModule.default).length === 0;\n if (!isEmptyObject) {\n return routeModule.default;\n }\n}\nfunction shouldHydrateRouteLoader(routeId, clientLoader, hasLoader, isSpaMode) {\n return isSpaMode && routeId !== \"root\" || clientLoader != null && (clientLoader.hydrate === true || hasLoader !== true);\n}\n\n// lib/dom/ssr/fog-of-war.ts\nvar nextPaths = /* @__PURE__ */ new Set();\nvar discoveredPathsMaxSize = 1e3;\nvar discoveredPaths = /* @__PURE__ */ new Set();\nvar URL_LIMIT = 7680;\nfunction isFogOfWarEnabled(routeDiscovery, ssr) {\n return routeDiscovery.mode === \"lazy\" && ssr === true;\n}\nfunction getPartialManifest({ sri, ...manifest }, router) {\n let routeIds = new Set(router.state.matches.map((m) => m.route.id));\n let segments = router.state.location.pathname.split(\"/\").filter(Boolean);\n let paths = [\"/\"];\n segments.pop();\n while (segments.length > 0) {\n paths.push(`/${segments.join(\"/\")}`);\n segments.pop();\n }\n paths.forEach((path) => {\n let matches = matchRoutesImpl(\n router.routes,\n path,\n router.basename || \"/\",\n false,\n router.branches\n );\n if (matches) {\n matches.forEach((m) => routeIds.add(m.route.id));\n }\n });\n let initialRoutes = [...routeIds].reduce(\n (acc, id) => Object.assign(acc, { [id]: manifest.routes[id] }),\n {}\n );\n return {\n ...manifest,\n routes: initialRoutes,\n sri: sri ? true : void 0\n };\n}\nfunction getPatchRoutesOnNavigationFunction(getRouter, manifest, routeModules, ssr, routeDiscovery, isSpaMode, basename) {\n if (!isFogOfWarEnabled(routeDiscovery, ssr)) {\n return void 0;\n }\n return async ({ path, patch, signal, fetcherKey }) => {\n if (discoveredPaths.has(path)) {\n return;\n }\n let { state } = getRouter();\n await fetchAndApplyManifestPatches(\n [path],\n // If we're patching for a fetcher call, reload the current location\n // Otherwise prefer any ongoing navigation location\n fetcherKey ? window.location.href : createPath(state.navigation.location || state.location),\n manifest,\n routeModules,\n ssr,\n isSpaMode,\n basename,\n routeDiscovery.manifestPath,\n patch,\n signal\n );\n };\n}\nfunction useFogOFWarDiscovery(router, manifest, routeModules, ssr, routeDiscovery, isSpaMode) {\n React7.useEffect(() => {\n if (!isFogOfWarEnabled(routeDiscovery, ssr) || // @ts-expect-error - TS doesn't know about this yet\n window.navigator?.connection?.saveData === true) {\n return;\n }\n function registerElement(el) {\n let path = el.tagName === \"FORM\" ? el.getAttribute(\"action\") : el.getAttribute(\"href\");\n if (!path) {\n return;\n }\n let pathname = el.tagName === \"A\" ? el.pathname : new URL(path, window.location.origin).pathname;\n if (!discoveredPaths.has(pathname)) {\n nextPaths.add(pathname);\n }\n }\n async function fetchPatches() {\n document.querySelectorAll(\"a[data-discover], form[data-discover]\").forEach(registerElement);\n let lazyPaths = Array.from(nextPaths.keys()).filter((path) => {\n if (discoveredPaths.has(path)) {\n nextPaths.delete(path);\n return false;\n }\n return true;\n });\n if (lazyPaths.length === 0) {\n return;\n }\n try {\n await fetchAndApplyManifestPatches(\n lazyPaths,\n null,\n manifest,\n routeModules,\n ssr,\n isSpaMode,\n router.basename,\n routeDiscovery.manifestPath,\n router.patchRoutes\n );\n } catch (e) {\n console.error(\"Failed to fetch manifest patches\", e);\n }\n }\n let debouncedFetchPatches = debounce(fetchPatches, 100);\n fetchPatches();\n let observer = new MutationObserver(() => debouncedFetchPatches());\n observer.observe(document.documentElement, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"data-discover\", \"href\", \"action\"]\n });\n return () => observer.disconnect();\n }, [ssr, isSpaMode, manifest, routeModules, router, routeDiscovery]);\n}\nfunction getManifestPath(_manifestPath, basename) {\n let manifestPath = _manifestPath || \"/__manifest\";\n return basename == null ? manifestPath : joinPaths([basename, manifestPath]);\n}\nvar MANIFEST_VERSION_STORAGE_KEY = \"react-router-manifest-version\";\nasync function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, routeModules, ssr, isSpaMode, basename, manifestPath, patchRoutes, signal) {\n const searchParams = new URLSearchParams();\n searchParams.set(\"paths\", paths.sort().join(\",\"));\n searchParams.set(\"version\", manifest.version);\n let url = new URL(\n getManifestPath(manifestPath, basename),\n window.location.origin\n );\n url.search = searchParams.toString();\n if (url.toString().length > URL_LIMIT) {\n nextPaths.clear();\n return;\n }\n let serverPatches;\n try {\n let res = await fetch(url, { signal });\n if (!res.ok) {\n throw new Error(`${res.status} ${res.statusText}`);\n } else if (res.status === 204 && res.headers.has(\"X-Remix-Reload-Document\")) {\n if (!errorReloadPath) {\n console.warn(\n \"Detected a manifest version mismatch during eager route discovery. The next navigation/fetch to an undiscovered route will result in a new document navigation to sync up with the latest manifest.\"\n );\n return;\n }\n try {\n if (sessionStorage.getItem(MANIFEST_VERSION_STORAGE_KEY) === manifest.version) {\n console.error(\n \"Unable to discover routes due to manifest version mismatch.\"\n );\n return;\n }\n sessionStorage.setItem(MANIFEST_VERSION_STORAGE_KEY, manifest.version);\n } catch {\n }\n window.location.href = errorReloadPath;\n console.warn(\"Detected manifest version mismatch, reloading...\");\n await new Promise(() => {\n });\n } else if (res.status >= 400) {\n throw new Error(await res.text());\n }\n try {\n sessionStorage.removeItem(MANIFEST_VERSION_STORAGE_KEY);\n } catch {\n }\n serverPatches = await res.json();\n } catch (e) {\n if (signal?.aborted) return;\n throw e;\n }\n let knownRoutes = new Set(Object.keys(manifest.routes));\n let patches = Object.values(serverPatches).reduce((acc, route) => {\n if (route && !knownRoutes.has(route.id)) {\n acc[route.id] = route;\n }\n return acc;\n }, {});\n Object.assign(manifest.routes, patches);\n paths.forEach((p) => addToFifoQueue(p, discoveredPaths));\n let parentIds = /* @__PURE__ */ new Set();\n Object.values(patches).forEach((patch) => {\n if (patch && (!patch.parentId || !patches[patch.parentId])) {\n parentIds.add(patch.parentId);\n }\n });\n parentIds.forEach(\n (parentId) => patchRoutes(\n parentId || null,\n createClientRoutes(patches, routeModules, null, ssr, isSpaMode, parentId)\n )\n );\n}\nfunction addToFifoQueue(path, queue) {\n if (queue.size >= discoveredPathsMaxSize) {\n let first = queue.values().next().value;\n queue.delete(first);\n }\n queue.add(path);\n}\nfunction debounce(callback, wait) {\n let timeoutId;\n return (...args) => {\n window.clearTimeout(timeoutId);\n timeoutId = window.setTimeout(() => callback(...args), wait);\n };\n}\n\n// lib/dom/ssr/components.tsx\nfunction useDataRouterContext2() {\n let context = React8.useContext(DataRouterContext);\n invariant2(\n context,\n \"You must render this element inside a <DataRouterContext.Provider> element\"\n );\n return context;\n}\nfunction useDataRouterStateContext() {\n let context = React8.useContext(DataRouterStateContext);\n invariant2(\n context,\n \"You must render this element inside a <DataRouterStateContext.Provider> element\"\n );\n return context;\n}\nvar FrameworkContext = React8.createContext(void 0);\nFrameworkContext.displayName = \"FrameworkContext\";\nfunction useFrameworkContext() {\n let context = React8.useContext(FrameworkContext);\n invariant2(\n context,\n \"You must render this element inside a <HydratedRouter> element\"\n );\n return context;\n}\nfunction usePrefetchBehavior(prefetch, theirElementProps) {\n let frameworkContext = React8.useContext(FrameworkContext);\n let [maybePrefetch, setMaybePrefetch] = React8.useState(false);\n let [shouldPrefetch, setShouldPrefetch] = React8.useState(false);\n let { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;\n let ref = React8.useRef(null);\n React8.useEffect(() => {\n if (prefetch === \"render\") {\n setShouldPrefetch(true);\n }\n if (prefetch === \"viewport\") {\n let callback = (entries) => {\n entries.forEach((entry) => {\n setShouldPrefetch(entry.isIntersecting);\n });\n };\n let observer = new IntersectionObserver(callback, { threshold: 0.5 });\n if (ref.current) observer.observe(ref.current);\n return () => {\n observer.disconnect();\n };\n }\n }, [prefetch]);\n React8.useEffect(() => {\n if (maybePrefetch) {\n let id = setTimeout(() => {\n setShouldPrefetch(true);\n }, 100);\n return () => {\n clearTimeout(id);\n };\n }\n }, [maybePrefetch]);\n let setIntent = () => {\n setMaybePrefetch(true);\n };\n let cancelIntent = () => {\n setMaybePrefetch(false);\n setShouldPrefetch(false);\n };\n if (!frameworkContext) {\n return [false, ref, {}];\n }\n if (prefetch !== \"intent\") {\n return [shouldPrefetch, ref, {}];\n }\n return [\n shouldPrefetch,\n ref,\n {\n onFocus: composeEventHandlers(onFocus, setIntent),\n onBlur: composeEventHandlers(onBlur, cancelIntent),\n onMouseEnter: composeEventHandlers(onMouseEnter, setIntent),\n onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),\n onTouchStart: composeEventHandlers(onTouchStart, setIntent)\n }\n ];\n}\nfunction composeEventHandlers(theirHandler, ourHandler) {\n return (event) => {\n theirHandler && theirHandler(event);\n if (!event.defaultPrevented) {\n ourHandler(event);\n }\n };\n}\nfunction getActiveMatches(matches, errors, isSpaMode) {\n if (isSpaMode && !isHydrated) {\n return [matches[0]];\n }\n if (errors) {\n let errorIdx = matches.findIndex((m) => errors[m.route.id] !== void 0);\n return matches.slice(0, errorIdx + 1);\n }\n return matches;\n}\nvar CRITICAL_CSS_DATA_ATTRIBUTE = \"data-react-router-critical-css\";\nfunction Links({ nonce, crossOrigin }) {\n let { isSpaMode, manifest, routeModules, criticalCss } = useFrameworkContext();\n let { errors, matches: routerMatches } = useDataRouterStateContext();\n let matches = getActiveMatches(routerMatches, errors, isSpaMode);\n let keyedLinks = React8.useMemo(\n () => getKeyedLinksForMatches(matches, routeModules, manifest),\n [matches, routeModules, manifest]\n );\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, typeof criticalCss === \"string\" ? /* @__PURE__ */ React8.createElement(\n \"style\",\n {\n ...{ [CRITICAL_CSS_DATA_ATTRIBUTE]: \"\" },\n nonce,\n dangerouslySetInnerHTML: { __html: criticalCss }\n }\n ) : null, typeof criticalCss === \"object\" ? /* @__PURE__ */ React8.createElement(\n \"link\",\n {\n ...{ [CRITICAL_CSS_DATA_ATTRIBUTE]: \"\" },\n rel: \"stylesheet\",\n href: criticalCss.href,\n nonce,\n crossOrigin\n }\n ) : null, keyedLinks.map(\n ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React8.createElement(\n PrefetchPageLinks,\n {\n key,\n nonce,\n ...link,\n crossOrigin: link.crossOrigin ?? crossOrigin\n }\n ) : /* @__PURE__ */ React8.createElement(\n \"link\",\n {\n key,\n nonce,\n ...link,\n crossOrigin: link.crossOrigin ?? crossOrigin\n }\n )\n ));\n}\nfunction PrefetchPageLinks({ page, ...linkProps }) {\n let rsc = useIsRSCRouterContext();\n let { router } = useDataRouterContext2();\n let matches = React8.useMemo(\n () => matchRoutes(router.routes, page, router.basename),\n [router.routes, page, router.basename]\n );\n if (!matches) {\n return null;\n }\n if (rsc) {\n return /* @__PURE__ */ React8.createElement(RSCPrefetchPageLinksImpl, { page, matches, ...linkProps });\n }\n return /* @__PURE__ */ React8.createElement(PrefetchPageLinksImpl, { page, matches, ...linkProps });\n}\nfunction useKeyedPrefetchLinks(matches) {\n let { manifest, routeModules } = useFrameworkContext();\n let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React8.useState([]);\n React8.useEffect(() => {\n let interrupted = false;\n void getKeyedPrefetchLinks(matches, manifest, routeModules).then(\n (links) => {\n if (!interrupted) {\n setKeyedPrefetchLinks(links);\n }\n }\n );\n return () => {\n interrupted = true;\n };\n }, [matches, manifest, routeModules]);\n return keyedPrefetchLinks;\n}\nfunction RSCPrefetchPageLinksImpl({\n page,\n matches: nextMatches,\n ...linkProps\n}) {\n let location = useLocation();\n let { future } = useFrameworkContext();\n let { basename } = useDataRouterContext2();\n let dataHrefs = React8.useMemo(() => {\n if (page === location.pathname + location.search + location.hash) {\n return [];\n }\n let url = singleFetchUrl(\n page,\n basename,\n future.unstable_trailingSlashAwareDataRequests,\n \"rsc\"\n );\n let hasSomeRoutesWithShouldRevalidate = false;\n let targetRoutes = [];\n for (let match of nextMatches) {\n if (typeof match.route.shouldRevalidate === \"function\") {\n hasSomeRoutesWithShouldRevalidate = true;\n } else {\n targetRoutes.push(match.route.id);\n }\n }\n if (hasSomeRoutesWithShouldRevalidate && targetRoutes.length > 0) {\n url.searchParams.set(\"_routes\", targetRoutes.join(\",\"));\n }\n return [url.pathname + url.search];\n }, [\n basename,\n future.unstable_trailingSlashAwareDataRequests,\n page,\n location,\n nextMatches\n ]);\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React8.createElement(\"link\", { key: href, rel: \"prefetch\", as: \"fetch\", href, ...linkProps })));\n}\nfunction PrefetchPageLinksImpl({\n page,\n matches: nextMatches,\n ...linkProps\n}) {\n let location = useLocation();\n let { future, manifest, routeModules } = useFrameworkContext();\n let { basename } = useDataRouterContext2();\n let { loaderData, matches } = useDataRouterStateContext();\n let newMatchesForData = React8.useMemo(\n () => getNewMatchesForLinks(\n page,\n nextMatches,\n matches,\n manifest,\n location,\n \"data\"\n ),\n [page, nextMatches, matches, manifest, location]\n );\n let newMatchesForAssets = React8.useMemo(\n () => getNewMatchesForLinks(\n page,\n nextMatches,\n matches,\n manifest,\n location,\n \"assets\"\n ),\n [page, nextMatches, matches, manifest, location]\n );\n let dataHrefs = React8.useMemo(() => {\n if (page === location.pathname + location.search + location.hash) {\n return [];\n }\n let routesParams = /* @__PURE__ */ new Set();\n let foundOptOutRoute = false;\n nextMatches.forEach((m) => {\n let manifestRoute = manifest.routes[m.route.id];\n if (!manifestRoute || !manifestRoute.hasLoader) {\n return;\n }\n if (!newMatchesForData.some((m2) => m2.route.id === m.route.id) && m.route.id in loaderData && routeModules[m.route.id]?.shouldRevalidate) {\n foundOptOutRoute = true;\n } else if (manifestRoute.hasClientLoader) {\n foundOptOutRoute = true;\n } else {\n routesParams.add(m.route.id);\n }\n });\n if (routesParams.size === 0) {\n return [];\n }\n let url = singleFetchUrl(\n page,\n basename,\n future.unstable_trailingSlashAwareDataRequests,\n \"data\"\n );\n if (foundOptOutRoute && routesParams.size > 0) {\n url.searchParams.set(\n \"_routes\",\n nextMatches.filter((m) => routesParams.has(m.route.id)).map((m) => m.route.id).join(\",\")\n );\n }\n return [url.pathname + url.search];\n }, [\n basename,\n future.unstable_trailingSlashAwareDataRequests,\n loaderData,\n location,\n manifest,\n newMatchesForData,\n nextMatches,\n page,\n routeModules\n ]);\n let moduleHrefs = React8.useMemo(\n () => getModuleLinkHrefs(newMatchesForAssets, manifest),\n [newMatchesForAssets, manifest]\n );\n let keyedPrefetchLinks = useKeyedPrefetchLinks(newMatchesForAssets);\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React8.createElement(\"link\", { key: href, rel: \"prefetch\", as: \"fetch\", href, ...linkProps })), moduleHrefs.map((href) => /* @__PURE__ */ React8.createElement(\"link\", { key: href, rel: \"modulepreload\", href, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (\n // these don't spread `linkProps` because they are full link descriptors\n // already with their own props\n /* @__PURE__ */ React8.createElement(\n \"link\",\n {\n key,\n nonce: linkProps.nonce,\n ...link,\n crossOrigin: link.crossOrigin ?? linkProps.crossOrigin\n }\n )\n )));\n}\nfunction Meta() {\n let { isSpaMode, routeModules } = useFrameworkContext();\n let {\n errors,\n matches: routerMatches,\n loaderData\n } = useDataRouterStateContext();\n let location = useLocation();\n let _matches = getActiveMatches(routerMatches, errors, isSpaMode);\n let error = null;\n if (errors) {\n error = errors[_matches[_matches.length - 1].route.id];\n }\n let meta = [];\n let leafMeta = null;\n let matches = [];\n for (let i = 0; i < _matches.length; i++) {\n let _match = _matches[i];\n let routeId = _match.route.id;\n let data2 = loaderData[routeId];\n let params = _match.params;\n let routeModule = routeModules[routeId];\n let routeMeta = [];\n let match = {\n id: routeId,\n data: data2,\n loaderData: data2,\n meta: [],\n params: _match.params,\n pathname: _match.pathname,\n handle: _match.route.handle,\n error\n };\n matches[i] = match;\n if (routeModule?.meta) {\n routeMeta = typeof routeModule.meta === \"function\" ? routeModule.meta({\n data: data2,\n loaderData: data2,\n params,\n location,\n matches,\n error\n }) : Array.isArray(routeModule.meta) ? [...routeModule.meta] : routeModule.meta;\n } else if (leafMeta) {\n routeMeta = [...leafMeta];\n }\n routeMeta = routeMeta || [];\n if (!Array.isArray(routeMeta)) {\n throw new Error(\n \"The route at \" + _match.route.path + \" returns an invalid value. All route meta functions must return an array of meta objects.\\n\\nTo reference the meta function API, see https://reactrouter.com/start/framework/route-module#meta\"\n );\n }\n match.meta = routeMeta;\n matches[i] = match;\n meta = [...routeMeta];\n leafMeta = meta;\n }\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, meta.flat().map((metaProps) => {\n if (!metaProps) {\n return null;\n }\n if (\"tagName\" in metaProps) {\n let { tagName, ...rest } = metaProps;\n if (!isValidMetaTag(tagName)) {\n console.warn(\n `A meta object uses an invalid tagName: ${tagName}. Expected either 'link' or 'meta'`\n );\n return null;\n }\n let Comp = tagName;\n return /* @__PURE__ */ React8.createElement(Comp, { key: JSON.stringify(rest), ...rest });\n }\n if (\"title\" in metaProps) {\n return /* @__PURE__ */ React8.createElement(\"title\", { key: \"title\" }, String(metaProps.title));\n }\n if (\"charset\" in metaProps) {\n metaProps.charSet ?? (metaProps.charSet = metaProps.charset);\n delete metaProps.charset;\n }\n if (\"charSet\" in metaProps && metaProps.charSet != null) {\n return typeof metaProps.charSet === \"string\" ? /* @__PURE__ */ React8.createElement(\"meta\", { key: \"charSet\", charSet: metaProps.charSet }) : null;\n }\n if (\"script:ld+json\" in metaProps) {\n try {\n let json = JSON.stringify(metaProps[\"script:ld+json\"]);\n return /* @__PURE__ */ React8.createElement(\n \"script\",\n {\n key: `script:ld+json:${json}`,\n type: \"application/ld+json\",\n dangerouslySetInnerHTML: { __html: escapeHtml(json) }\n }\n );\n } catch (e) {\n return null;\n }\n }\n return /* @__PURE__ */ React8.createElement(\"meta\", { key: JSON.stringify(metaProps), ...metaProps });\n }));\n}\nfunction isValidMetaTag(tagName) {\n return typeof tagName === \"string\" && /^(meta|link)$/.test(tagName);\n}\nvar isHydrated = false;\nfunction setIsHydrated() {\n isHydrated = true;\n}\nfunction Scripts(scriptProps) {\n let {\n manifest,\n serverHandoffString,\n isSpaMode,\n renderMeta,\n routeDiscovery,\n ssr\n } = useFrameworkContext();\n let { router, static: isStatic, staticContext } = useDataRouterContext2();\n let { matches: routerMatches } = useDataRouterStateContext();\n let isRSCRouterContext = useIsRSCRouterContext();\n let enableFogOfWar = isFogOfWarEnabled(routeDiscovery, ssr);\n if (renderMeta) {\n renderMeta.didRenderScripts = true;\n }\n let matches = getActiveMatches(routerMatches, null, isSpaMode);\n React8.useEffect(() => {\n setIsHydrated();\n }, []);\n let initialScripts = React8.useMemo(() => {\n if (isRSCRouterContext) {\n return null;\n }\n let streamScript = \"window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());\";\n let contextScript = staticContext ? `window.__reactRouterContext = ${serverHandoffString};${streamScript}` : \" \";\n let routeModulesScript = !isStatic ? \" \" : `${manifest.hmr?.runtime ? `import ${JSON.stringify(manifest.hmr.runtime)};` : \"\"}${!enableFogOfWar ? `import ${JSON.stringify(manifest.url)}` : \"\"};\n${matches.map((match, routeIndex) => {\n let routeVarName = `route${routeIndex}`;\n let manifestEntry = manifest.routes[match.route.id];\n invariant2(manifestEntry, `Route ${match.route.id} not found in manifest`);\n let {\n clientActionModule,\n clientLoaderModule,\n clientMiddlewareModule,\n hydrateFallbackModule,\n module\n } = manifestEntry;\n let chunks = [\n ...clientActionModule ? [\n {\n module: clientActionModule,\n varName: `${routeVarName}_clientAction`\n }\n ] : [],\n ...clientLoaderModule ? [\n {\n module: clientLoaderModule,\n varName: `${routeVarName}_clientLoader`\n }\n ] : [],\n ...clientMiddlewareModule ? [\n {\n module: clientMiddlewareModule,\n varName: `${routeVarName}_clientMiddleware`\n }\n ] : [],\n ...hydrateFallbackModule ? [\n {\n module: hydrateFallbackModule,\n varName: `${routeVarName}_HydrateFallback`\n }\n ] : [],\n { module, varName: `${routeVarName}_main` }\n ];\n if (chunks.length === 1) {\n return `import * as ${routeVarName} from ${JSON.stringify(module)};`;\n }\n let chunkImportsSnippet = chunks.map((chunk) => `import * as ${chunk.varName} from \"${chunk.module}\";`).join(\"\\n\");\n let mergedChunksSnippet = `const ${routeVarName} = {${chunks.map((chunk) => `...${chunk.varName}`).join(\",\")}};`;\n return [chunkImportsSnippet, mergedChunksSnippet].join(\"\\n\");\n }).join(\"\\n\")}\n ${enableFogOfWar ? (\n // Inline a minimal manifest with the SSR matches\n `window.__reactRouterManifest = ${JSON.stringify(\n getPartialManifest(manifest, router),\n null,\n 2\n )};`\n ) : \"\"}\n window.__reactRouterRouteModules = {${matches.map((match, index) => `${JSON.stringify(match.route.id)}:route${index}`).join(\",\")}};\n\nimport(${JSON.stringify(manifest.entry.module)});`;\n return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(\n \"script\",\n {\n ...scriptProps,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: { __html: contextScript },\n type: void 0\n }\n ), /* @__PURE__ */ React8.createElement(\n \"script\",\n {\n ...scriptProps,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: { __html: routeModulesScript },\n type: \"module\",\n async: true\n }\n ));\n }, []);\n let preloads = isHydrated || isRSCRouterContext ? [] : [\n // Dedupe through a Set\n ...new Set(\n manifest.entry.imports.concat(\n getModuleLinkHrefs(matches, manifest, {\n includeHydrateFallback: true\n })\n )\n )\n ];\n let sri = typeof manifest.sri === \"object\" ? manifest.sri : {};\n warnOnce(\n !isRSCRouterContext,\n \"The <Scripts /> element is a no-op when using RSC and can be safely removed.\"\n );\n return isHydrated || isRSCRouterContext ? null : /* @__PURE__ */ React8.createElement(React8.Fragment, null, typeof manifest.sri === \"object\" ? /* @__PURE__ */ React8.createElement(\n \"script\",\n {\n ...scriptProps,\n \"rr-importmap\": \"\",\n type: \"importmap\",\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: {\n __html: JSON.stringify({\n integrity: sri\n })\n }\n }\n ) : null, !enableFogOfWar ? /* @__PURE__ */ React8.createElement(\n \"link\",\n {\n rel: \"modulepreload\",\n href: manifest.url,\n crossOrigin: scriptProps.crossOrigin,\n integrity: sri[manifest.url],\n nonce: scriptProps.nonce,\n suppressHydrationWarning: true\n }\n ) : null, /* @__PURE__ */ React8.createElement(\n \"link\",\n {\n rel: \"modulepreload\",\n href: manifest.entry.module,\n crossOrigin: scriptProps.crossOrigin,\n integrity: sri[manifest.entry.module],\n nonce: scriptProps.nonce,\n suppressHydrationWarning: true\n }\n ), preloads.map((path) => /* @__PURE__ */ React8.createElement(\n \"link\",\n {\n key: path,\n rel: \"modulepreload\",\n href: path,\n crossOrigin: scriptProps.crossOrigin,\n integrity: sri[path],\n nonce: scriptProps.nonce,\n suppressHydrationWarning: true\n }\n )), initialScripts);\n}\nfunction mergeRefs(...refs) {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n });\n };\n}\n\n// lib/dom/ssr/errorBoundaries.tsx\nvar RemixErrorBoundary = class extends React9.Component {\n constructor(props) {\n super(props);\n this.state = { error: props.error || null, location: props.location };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n static getDerivedStateFromProps(props, state) {\n if (state.location !== props.location) {\n return { error: props.error || null, location: props.location };\n }\n return { error: props.error || state.error, location: state.location };\n }\n render() {\n if (this.state.error) {\n return /* @__PURE__ */ React9.createElement(\n RemixRootDefaultErrorBoundary,\n {\n error: this.state.error,\n isOutsideRemixApp: true\n }\n );\n } else {\n return this.props.children;\n }\n }\n};\nfunction RemixRootDefaultErrorBoundary({\n error,\n isOutsideRemixApp\n}) {\n console.error(error);\n let heyDeveloper = /* @__PURE__ */ React9.createElement(\n \"script\",\n {\n dangerouslySetInnerHTML: {\n __html: `\n console.log(\n \"\\u{1F4BF} Hey developer \\u{1F44B}. You can provide a way better UX than this when your app throws errors. Check out https://reactrouter.com/how-to/error-boundary for more information.\"\n );\n `\n }\n }\n );\n if (isRouteErrorResponse(error)) {\n return /* @__PURE__ */ React9.createElement(BoundaryShell, { title: \"Unhandled Thrown Response!\" }, /* @__PURE__ */ React9.createElement(\"h1\", { style: { fontSize: \"24px\" } }, error.status, \" \", error.statusText), ENABLE_DEV_WARNINGS ? heyDeveloper : null);\n }\n let errorInstance;\n if (error instanceof Error) {\n errorInstance = error;\n } else {\n let errorString = error == null ? \"Unknown Error\" : typeof error === \"object\" && \"toString\" in error ? error.toString() : JSON.stringify(error);\n errorInstance = new Error(errorString);\n }\n return /* @__PURE__ */ React9.createElement(\n BoundaryShell,\n {\n title: \"Application Error!\",\n isOutsideRemixApp\n },\n /* @__PURE__ */ React9.createElement(\"h1\", { style: { fontSize: \"24px\" } }, \"Application Error\"),\n /* @__PURE__ */ React9.createElement(\n \"pre\",\n {\n style: {\n padding: \"2rem\",\n background: \"hsla(10, 50%, 50%, 0.1)\",\n color: \"red\",\n overflow: \"auto\"\n }\n },\n errorInstance.stack\n ),\n heyDeveloper\n );\n}\nfunction BoundaryShell({\n title,\n renderScripts,\n isOutsideRemixApp,\n children\n}) {\n let { routeModules } = useFrameworkContext();\n if (routeModules.root?.Layout && !isOutsideRemixApp) {\n return children;\n }\n return /* @__PURE__ */ React9.createElement(\"html\", { lang: \"en\" }, /* @__PURE__ */ React9.createElement(\"head\", null, /* @__PURE__ */ React9.createElement(\"meta\", { charSet: \"utf-8\" }), /* @__PURE__ */ React9.createElement(\n \"meta\",\n {\n name: \"viewport\",\n content: \"width=device-width,initial-scale=1,viewport-fit=cover\"\n }\n ), /* @__PURE__ */ React9.createElement(\"title\", null, title)), /* @__PURE__ */ React9.createElement(\"body\", null, /* @__PURE__ */ React9.createElement(\"main\", { style: { fontFamily: \"system-ui, sans-serif\", padding: \"2rem\" } }, children, renderScripts ? /* @__PURE__ */ React9.createElement(Scripts, null) : null)));\n}\n\n// lib/dom/lib.tsx\nimport * as React10 from \"react\";\nvar isBrowser2 = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\ntry {\n if (isBrowser2) {\n window.__reactRouterVersion = // @ts-expect-error\n \"7.15.1\";\n }\n} catch (e) {\n}\nfunction createBrowserRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n getContext: opts?.getContext,\n future: opts?.future,\n history: createBrowserHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n hydrationRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n window: opts?.window,\n instrumentations: opts?.instrumentations\n }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n return createRouter({\n basename: opts?.basename,\n getContext: opts?.getContext,\n future: opts?.future,\n history: createHashHistory({ window: opts?.window }),\n hydrationData: opts?.hydrationData || parseHydrationData(),\n routes,\n mapRouteProperties,\n hydrationRouteProperties,\n dataStrategy: opts?.dataStrategy,\n patchRoutesOnNavigation: opts?.patchRoutesOnNavigation,\n window: opts?.window,\n instrumentations: opts?.instrumentations\n }).initialize();\n}\nfunction parseHydrationData() {\n let state = window?.__staticRouterHydrationData;\n if (state && state.errors) {\n state = {\n ...state,\n errors: deserializeErrors(state.errors)\n };\n }\n return state;\n}\nfunction deserializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new ErrorResponseImpl(\n val.status,\n val.statusText,\n val.data,\n val.internal === true\n );\n } else if (val && val.__type === \"Error\") {\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n let error = new ErrorConstructor(val.message);\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n }\n }\n }\n if (serialized[key] == null) {\n let error = new Error(val.message);\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nfunction BrowserRouter({\n basename,\n children,\n useTransitions,\n window: window2\n}) {\n let historyRef = React10.useRef();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window: window2, v5Compat: true });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n if (useTransitions === false) {\n setStateImpl(newState);\n } else {\n React10.startTransition(() => setStateImpl(newState));\n }\n },\n [useTransitions]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n useTransitions\n }\n );\n}\nfunction HashRouter({\n basename,\n children,\n useTransitions,\n window: window2\n}) {\n let historyRef = React10.useRef();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window: window2, v5Compat: true });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n if (useTransitions === false) {\n setStateImpl(newState);\n } else {\n React10.startTransition(() => setStateImpl(newState));\n }\n },\n [useTransitions]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n useTransitions\n }\n );\n}\nfunction HistoryRouter({\n basename,\n children,\n history,\n useTransitions\n}) {\n let [state, setStateImpl] = React10.useState({\n action: history.action,\n location: history.location\n });\n let setState = React10.useCallback(\n (newState) => {\n if (useTransitions === false) {\n setStateImpl(newState);\n } else {\n React10.startTransition(() => setStateImpl(newState));\n }\n },\n [useTransitions]\n );\n React10.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /* @__PURE__ */ React10.createElement(\n Router,\n {\n basename,\n children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n useTransitions\n }\n );\n}\nHistoryRouter.displayName = \"unstable_HistoryRouter\";\nvar ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nvar Link = React10.forwardRef(\n function LinkWithRef({\n onClick,\n discover = \"render\",\n prefetch = \"none\",\n relative,\n reloadDocument,\n replace: replace2,\n mask,\n state,\n target,\n to,\n preventScrollReset,\n viewTransition,\n defaultShouldRevalidate,\n ...rest\n }, forwardedRef) {\n let { basename, navigator, useTransitions } = React10.useContext(NavigationContext);\n let isAbsolute = typeof to === \"string\" && ABSOLUTE_URL_REGEX2.test(to);\n let parsed = parseToInfo(to, basename);\n to = parsed.to;\n let href = useHref(to, { relative });\n let location = useLocation();\n let maskedHref = null;\n if (mask) {\n let resolved = resolveTo(\n mask,\n [],\n location.mask ? location.mask.pathname : \"/\",\n true\n );\n if (basename !== \"/\") {\n resolved.pathname = resolved.pathname === \"/\" ? basename : joinPaths([basename, resolved.pathname]);\n }\n maskedHref = navigator.createHref(resolved);\n }\n let [shouldPrefetch, prefetchRef, prefetchHandlers] = usePrefetchBehavior(\n prefetch,\n rest\n );\n let internalOnClick = useLinkClickHandler(to, {\n replace: replace2,\n mask,\n state,\n target,\n preventScrollReset,\n relative,\n viewTransition,\n defaultShouldRevalidate,\n useTransitions\n });\n function handleClick(event) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n let isSpaLink = !(parsed.isExternal || reloadDocument);\n let link = (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n /* @__PURE__ */ React10.createElement(\n \"a\",\n {\n ...rest,\n ...prefetchHandlers,\n href: (isSpaLink ? maskedHref : void 0) || parsed.absoluteURL || href,\n onClick: isSpaLink ? handleClick : onClick,\n ref: mergeRefs(forwardedRef, prefetchRef),\n target,\n \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n }\n )\n );\n return shouldPrefetch && !isAbsolute ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, link, /* @__PURE__ */ React10.createElement(PrefetchPageLinks, { page: href })) : link;\n }\n);\nLink.displayName = \"Link\";\nvar NavLink = React10.forwardRef(\n function NavLinkWithRef({\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n viewTransition,\n children,\n ...rest\n }, ref) {\n let path = useResolvedPath(to, { relative: rest.relative });\n let location = useLocation();\n let routerState = React10.useContext(DataRouterStateContext);\n let { navigator, basename } = React10.useContext(NavigationContext);\n let isTransitioning = routerState != null && // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) && viewTransition === true;\n let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n toPathname = toPathname.toLowerCase();\n }\n if (nextLocationPathname && basename) {\n nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n }\n const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n let renderProps = {\n isActive,\n isPending,\n isTransitioning\n };\n let ariaCurrent = isActive ? ariaCurrentProp : void 0;\n let className;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n className = [\n classNameProp,\n isActive ? \"active\" : null,\n isPending ? \"pending\" : null,\n isTransitioning ? \"transitioning\" : null\n ].filter(Boolean).join(\" \");\n }\n let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n return /* @__PURE__ */ React10.createElement(\n Link,\n {\n ...rest,\n \"aria-current\": ariaCurrent,\n className,\n ref,\n style,\n to,\n viewTransition\n },\n typeof children === \"function\" ? children(renderProps) : children\n );\n }\n);\nNavLink.displayName = \"NavLink\";\nvar Form = React10.forwardRef(\n ({\n discover = \"render\",\n fetcherKey,\n navigate,\n reloadDocument,\n replace: replace2,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n viewTransition,\n defaultShouldRevalidate,\n ...props\n }, forwardedRef) => {\n let { useTransitions } = React10.useContext(NavigationContext);\n let submit = useSubmit();\n let formAction = useFormAction(action, { relative });\n let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n let isAbsolute = typeof action === \"string\" && ABSOLUTE_URL_REGEX2.test(action);\n let submitHandler = (event) => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n let submitter = event.nativeEvent.submitter;\n let submitMethod = submitter?.getAttribute(\"formmethod\") || method;\n let doSubmit = () => submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace: replace2,\n state,\n relative,\n preventScrollReset,\n viewTransition,\n defaultShouldRevalidate\n });\n if (useTransitions && navigate !== false) {\n React10.startTransition(() => doSubmit());\n } else {\n doSubmit();\n }\n };\n return /* @__PURE__ */ React10.createElement(\n \"form\",\n {\n ref: forwardedRef,\n method: formMethod,\n action: formAction,\n onSubmit: reloadDocument ? onSubmit : submitHandler,\n ...props,\n \"data-discover\": !isAbsolute && discover === \"render\" ? \"true\" : void 0\n }\n );\n }\n);\nForm.displayName = \"Form\";\nfunction ScrollRestoration({\n getKey,\n storageKey,\n ...props\n}) {\n let remixContext = React10.useContext(FrameworkContext);\n let { basename } = React10.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n useScrollRestoration({ getKey, storageKey });\n let ssrKey = React10.useMemo(\n () => {\n if (!remixContext || !getKey) return null;\n let userKey = getScrollRestorationKey(\n location,\n matches,\n basename,\n getKey\n );\n return userKey !== location.key ? userKey : null;\n },\n // Nah, we only need this the first time for the SSR render\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n if (!remixContext || remixContext.isSpaMode) {\n return null;\n }\n let restoreScroll = ((storageKey2, restoreKey) => {\n if (!window.history.state || !window.history.state.key) {\n let key = Math.random().toString(32).slice(2);\n window.history.replaceState({ key }, \"\");\n }\n try {\n let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \"{}\");\n let storedY = positions[restoreKey || window.history.state.key];\n if (typeof storedY === \"number\") {\n window.scrollTo(0, storedY);\n }\n } catch (error) {\n console.error(error);\n sessionStorage.removeItem(storageKey2);\n }\n }).toString();\n return /* @__PURE__ */ React10.createElement(\n \"script\",\n {\n ...props,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: {\n __html: `(${restoreScroll})(${escapeHtml(\n JSON.stringify(storageKey || SCROLL_RESTORATION_STORAGE_KEY)\n )}, ${escapeHtml(JSON.stringify(ssrKey))})`\n }\n }\n );\n}\nScrollRestoration.displayName = \"ScrollRestoration\";\nfunction getDataRouterConsoleError2(hookName) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;\n}\nfunction useDataRouterContext3(hookName) {\n let ctx = React10.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError2(hookName));\n return ctx;\n}\nfunction useDataRouterState2(hookName) {\n let state = React10.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError2(hookName));\n return state;\n}\nfunction useLinkClickHandler(to, {\n target,\n replace: replaceProp,\n mask,\n state,\n preventScrollReset,\n relative,\n viewTransition,\n defaultShouldRevalidate,\n useTransitions\n} = {}) {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, { relative });\n return React10.useCallback(\n (event) => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n let replace2 = replaceProp !== void 0 ? replaceProp : createPath(location) === createPath(path);\n let doNavigate = () => navigate(to, {\n replace: replace2,\n mask,\n state,\n preventScrollReset,\n relative,\n viewTransition,\n defaultShouldRevalidate\n });\n if (useTransitions) {\n React10.startTransition(() => doNavigate());\n } else {\n doNavigate();\n }\n }\n },\n [\n location,\n navigate,\n path,\n replaceProp,\n mask,\n state,\n target,\n to,\n preventScrollReset,\n relative,\n viewTransition,\n defaultShouldRevalidate,\n useTransitions\n ]\n );\n}\nfunction useSearchParams(defaultInit) {\n warning(\n typeof URLSearchParams !== \"undefined\",\n `You cannot use the \\`useSearchParams\\` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.`\n );\n let defaultSearchParamsRef = React10.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React10.useRef(false);\n let location = useLocation();\n let searchParams = React10.useMemo(\n () => (\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(\n location.search,\n hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current\n )\n ),\n [location.search]\n );\n let navigate = useNavigate();\n let setSearchParams = React10.useCallback(\n (nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(\n typeof nextInit === \"function\" ? nextInit(new URLSearchParams(searchParams)) : nextInit\n );\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n },\n [navigate, searchParams]\n );\n return [searchParams, setSearchParams];\n}\nvar fetcherId = 0;\nvar getUniqueFetcherId = () => `__${String(++fetcherId)}__`;\nfunction useSubmit() {\n let { router } = useDataRouterContext3(\"useSubmit\" /* UseSubmit */);\n let { basename } = React10.useContext(NavigationContext);\n let currentRouteId = useRouteId();\n let routerFetch = router.fetch;\n let routerNavigate = router.navigate;\n return React10.useCallback(\n async (target, options = {}) => {\n let { action, method, encType, formData, body } = getFormSubmissionInfo(\n target,\n basename\n );\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n await routerFetch(key, currentRouteId, options.action || action, {\n defaultShouldRevalidate: options.defaultShouldRevalidate,\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n flushSync: options.flushSync\n });\n } else {\n await routerNavigate(options.action || action, {\n defaultShouldRevalidate: options.defaultShouldRevalidate,\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n flushSync: options.flushSync,\n viewTransition: options.viewTransition\n });\n }\n },\n [routerFetch, routerNavigate, basename, currentRouteId]\n );\n}\nfunction useFormAction(action, { relative } = {}) {\n let { basename } = React10.useContext(NavigationContext);\n let routeContext = React10.useContext(RouteContext);\n invariant(routeContext, \"useFormAction must be used inside a RouteContext\");\n let [match] = routeContext.matches.slice(-1);\n let path = { ...useResolvedPath(action ? action : \".\", { relative }) };\n let location = useLocation();\n if (action == null) {\n path.search = location.search;\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n let hasNakedIndexParam = indexValues.some((v) => v === \"\");\n if (hasNakedIndexParam) {\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n }\n if (basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\nfunction useFetcher({\n key\n} = {}) {\n let { router } = useDataRouterContext3(\"useFetcher\" /* UseFetcher */);\n let state = useDataRouterState2(\"useFetcher\" /* UseFetcher */);\n let fetcherData = React10.useContext(FetchersContext);\n let route = React10.useContext(RouteContext);\n let routeId = route.matches[route.matches.length - 1]?.route.id;\n invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);\n invariant(route, `useFetcher must be used inside a RouteContext`);\n invariant(\n routeId != null,\n `useFetcher can only be used on routes that contain a unique \"id\"`\n );\n let defaultKey = React10.useId();\n let [fetcherKey, setFetcherKey] = React10.useState(key || defaultKey);\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n }\n let { deleteFetcher, getFetcher, resetFetcher, fetch: routerFetch } = router;\n React10.useEffect(() => {\n getFetcher(fetcherKey);\n return () => deleteFetcher(fetcherKey);\n }, [deleteFetcher, getFetcher, fetcherKey]);\n let load = React10.useCallback(\n async (href, opts) => {\n invariant(routeId, \"No routeId available for fetcher.load()\");\n await routerFetch(fetcherKey, routeId, href, opts);\n },\n [fetcherKey, routeId, routerFetch]\n );\n let submitImpl = useSubmit();\n let submit = React10.useCallback(\n async (target, opts) => {\n await submitImpl(target, {\n ...opts,\n navigate: false,\n fetcherKey\n });\n },\n [fetcherKey, submitImpl]\n );\n let reset = React10.useCallback(\n (opts) => resetFetcher(fetcherKey, opts),\n [resetFetcher, fetcherKey]\n );\n let FetcherForm = React10.useMemo(() => {\n let FetcherForm2 = React10.forwardRef(\n (props, ref) => {\n return /* @__PURE__ */ React10.createElement(Form, { ...props, navigate: false, fetcherKey, ref });\n }\n );\n FetcherForm2.displayName = \"fetcher.Form\";\n return FetcherForm2;\n }, [fetcherKey]);\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data2 = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React10.useMemo(\n () => ({\n Form: FetcherForm,\n submit,\n load,\n reset,\n ...fetcher,\n data: data2\n }),\n [FetcherForm, submit, load, reset, fetcher, data2]\n );\n return fetcherWithComponents;\n}\nfunction useFetchers() {\n let state = useDataRouterState2(\"useFetchers\" /* UseFetchers */);\n return React10.useMemo(\n () => Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({\n ...fetcher,\n key\n })),\n [state.fetchers]\n );\n}\nvar SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nvar savedScrollPositions = {};\nfunction getScrollRestorationKey(location, matches, basename, getKey) {\n let key = null;\n if (getKey) {\n if (basename !== \"/\") {\n key = getKey(\n {\n ...location,\n pathname: stripBasename(location.pathname, basename) || location.pathname\n },\n matches\n );\n } else {\n key = getKey(location, matches);\n }\n }\n if (key == null) {\n key = location.key;\n }\n return key;\n}\nfunction useScrollRestoration({\n getKey,\n storageKey\n} = {}) {\n let { router } = useDataRouterContext3(\"useScrollRestoration\" /* UseScrollRestoration */);\n let { restoreScrollPosition, preventScrollReset } = useDataRouterState2(\n \"useScrollRestoration\" /* UseScrollRestoration */\n );\n let { basename } = React10.useContext(NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n React10.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n usePageHide(\n React10.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = getScrollRestorationKey(location, matches, basename, getKey);\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY,\n JSON.stringify(savedScrollPositions)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`\n );\n }\n window.history.scrollRestoration = \"auto\";\n }, [navigation.state, getKey, basename, location, matches, storageKey])\n );\n if (typeof document !== \"undefined\") {\n React10.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(\n storageKey || SCROLL_RESTORATION_STORAGE_KEY\n );\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n }\n }, [storageKey]);\n React10.useLayoutEffect(() => {\n let disableScrollRestoration = router?.enableScrollRestoration(\n savedScrollPositions,\n () => window.scrollY,\n getKey ? (location2, matches2) => getScrollRestorationKey(location2, matches2, basename, getKey) : void 0\n );\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n React10.useLayoutEffect(() => {\n if (restoreScrollPosition === false) {\n return;\n }\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n try {\n if (location.hash) {\n let el = document.getElementById(\n decodeURIComponent(location.hash.slice(1))\n );\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n } catch {\n warning(\n false,\n `\"${location.hash.slice(\n 1\n )}\" is not a decodable element ID. The view will not scroll to it.`\n );\n }\n if (preventScrollReset === true) {\n return;\n }\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\nfunction useBeforeUnload(callback, options) {\n let { capture } = options || {};\n React10.useEffect(() => {\n let opts = capture != null ? { capture } : void 0;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\nfunction usePageHide(callback, options) {\n let { capture } = options || {};\n React10.useEffect(() => {\n let opts = capture != null ? { capture } : void 0;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\nfunction usePrompt({\n when,\n message\n}) {\n let blocker = useBlocker(when);\n React10.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n React10.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\nfunction useViewTransitionState(to, { relative } = {}) {\n let vtContext = React10.useContext(ViewTransitionContext);\n invariant(\n vtContext != null,\n \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?\"\n );\n let { basename } = useDataRouterContext3(\n \"useViewTransitionState\" /* useViewTransitionState */\n );\n let path = useResolvedPath(to, { relative });\n if (!vtContext.isTransitioning) {\n return false;\n }\n let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n\n// lib/dom/server.tsx\nimport * as React11 from \"react\";\nfunction StaticRouter({\n basename,\n children,\n location: locationProp = \"/\"\n}) {\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let action = \"POP\" /* Pop */;\n let location = {\n pathname: locationProp.pathname || \"/\",\n search: locationProp.search || \"\",\n hash: locationProp.hash || \"\",\n state: locationProp.state != null ? locationProp.state : null,\n key: locationProp.key || \"default\",\n mask: void 0\n };\n let staticNavigator = getStatelessNavigator();\n return /* @__PURE__ */ React11.createElement(\n Router,\n {\n basename,\n children,\n location,\n navigationType: action,\n navigator: staticNavigator,\n static: true,\n useTransitions: false\n }\n );\n}\nfunction StaticRouterProvider({\n context,\n router,\n hydrate: hydrate2 = true,\n nonce\n}) {\n invariant(\n router && context,\n \"You must provide `router` and `context` to <StaticRouterProvider>\"\n );\n let dataRouterContext = {\n router,\n navigator: getStatelessNavigator(),\n static: true,\n staticContext: context,\n basename: context.basename || \"/\"\n };\n let fetchersContext = /* @__PURE__ */ new Map();\n let hydrateScript = \"\";\n if (hydrate2 !== false) {\n let data2 = {\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: serializeErrors(context.errors)\n };\n let json = escapeHtml(JSON.stringify(JSON.stringify(data2)));\n hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;\n }\n let { state } = dataRouterContext.router;\n return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React11.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React11.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React11.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React11.createElement(\n Router,\n {\n basename: dataRouterContext.basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: dataRouterContext.navigator,\n static: dataRouterContext.static,\n useTransitions: false\n },\n /* @__PURE__ */ React11.createElement(\n DataRoutes2,\n {\n manifest: router.manifest,\n routes: router.routes,\n future: router.future,\n state,\n isStatic: true\n }\n )\n ))))), hydrateScript ? /* @__PURE__ */ React11.createElement(\n \"script\",\n {\n suppressHydrationWarning: true,\n nonce,\n dangerouslySetInnerHTML: { __html: hydrateScript }\n }\n ) : null);\n}\nfunction serializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n if (isRouteErrorResponse(val)) {\n serialized[key] = { ...val, __type: \"RouteErrorResponse\" };\n } else if (val instanceof Error) {\n serialized[key] = {\n message: val.message,\n __type: \"Error\",\n // If this is a subclass (i.e., ReferenceError), send up the type so we\n // can re-create the same type during hydration.\n ...val.name !== \"Error\" ? {\n __subType: val.name\n } : {}\n };\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nfunction getStatelessNavigator() {\n return {\n createHref,\n encodeLocation,\n push(to) {\n throw new Error(\n `You cannot use navigator.push() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)})\\` somewhere in your app.`\n );\n },\n replace(to) {\n throw new Error(\n `You cannot use navigator.replace() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${JSON.stringify(to)}, { replace: true })\\` somewhere in your app.`\n );\n },\n go(delta) {\n throw new Error(\n `You cannot use navigator.go() on the server because it is a stateless environment. This error was probably triggered when you did a \\`navigate(${delta})\\` somewhere in your app.`\n );\n },\n back() {\n throw new Error(\n `You cannot use navigator.back() on the server because it is a stateless environment.`\n );\n },\n forward() {\n throw new Error(\n `You cannot use navigator.forward() on the server because it is a stateless environment.`\n );\n }\n };\n}\nfunction createStaticHandler2(routes, opts) {\n return createStaticHandler(routes, {\n ...opts,\n mapRouteProperties\n });\n}\nfunction createStaticRouter(routes, context, opts = {}) {\n let manifest = {};\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n void 0,\n manifest\n );\n let matches = context.matches.map((match) => {\n let route = manifest[match.route.id] || match.route;\n return {\n ...match,\n route\n };\n });\n let msg = (method) => `You cannot use router.${method}() on the server because it is a stateless environment`;\n return {\n get basename() {\n return context.basename;\n },\n get future() {\n return {\n v8_middleware: false,\n v8_passThroughRequests: false,\n ...opts?.future\n };\n },\n get state() {\n return {\n historyAction: \"POP\" /* Pop */,\n location: context.location,\n matches,\n loaderData: context.loaderData,\n actionData: context.actionData,\n errors: context.errors,\n initialized: true,\n renderFallback: false,\n navigation: IDLE_NAVIGATION,\n restoreScrollPosition: null,\n preventScrollReset: false,\n revalidation: \"idle\",\n fetchers: /* @__PURE__ */ new Map(),\n blockers: /* @__PURE__ */ new Map()\n };\n },\n get routes() {\n return dataRoutes;\n },\n get branches() {\n return opts.branches;\n },\n get manifest() {\n return manifest;\n },\n get window() {\n return void 0;\n },\n initialize() {\n throw msg(\"initialize\");\n },\n subscribe() {\n throw msg(\"subscribe\");\n },\n enableScrollRestoration() {\n throw msg(\"enableScrollRestoration\");\n },\n navigate() {\n throw msg(\"navigate\");\n },\n fetch() {\n throw msg(\"fetch\");\n },\n revalidate() {\n throw msg(\"revalidate\");\n },\n createHref,\n encodeLocation,\n getFetcher() {\n return IDLE_FETCHER;\n },\n deleteFetcher() {\n throw msg(\"deleteFetcher\");\n },\n resetFetcher() {\n throw msg(\"resetFetcher\");\n },\n dispose() {\n throw msg(\"dispose\");\n },\n getBlocker() {\n return IDLE_BLOCKER;\n },\n deleteBlocker() {\n throw msg(\"deleteBlocker\");\n },\n patchRoutes() {\n throw msg(\"patchRoutes\");\n },\n _internalFetchControllers: /* @__PURE__ */ new Map(),\n _internalSetRoutes() {\n throw msg(\"_internalSetRoutes\");\n },\n _internalSetStateDoNotUseOrYouWillBreakYourApp() {\n throw msg(\"_internalSetStateDoNotUseOrYouWillBreakYourApp\");\n }\n };\n}\nfunction createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n}\nfunction encodeLocation(to) {\n let href = typeof to === \"string\" ? to : createPath(to);\n href = href.replace(/ $/, \"%20\");\n let encoded = ABSOLUTE_URL_REGEX3.test(href) ? new URL(href) : new URL(href, \"http://localhost\");\n return {\n pathname: encoded.pathname,\n search: encoded.search,\n hash: encoded.hash\n };\n}\nvar ABSOLUTE_URL_REGEX3 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nexport {\n Action,\n createMemoryHistory,\n createBrowserHistory,\n createHashHistory,\n invariant,\n createPath,\n parsePath,\n createContext,\n RouterContextProvider,\n convertRoutesToDataRoutes,\n matchRoutes,\n matchRoutesImpl,\n generatePath,\n matchPath,\n stripBasename,\n resolvePath,\n data,\n redirect,\n redirectDocument,\n replace,\n ErrorResponseImpl,\n isRouteErrorResponse,\n instrumentHandler,\n IDLE_NAVIGATION,\n IDLE_FETCHER,\n IDLE_BLOCKER,\n createRouter,\n createStaticHandler,\n getStaticContextFromError,\n invalidProtocols,\n isDataWithResponseInit,\n isResponse,\n isRedirectStatusCode,\n isRedirectResponse,\n isMutationMethod,\n DataRouterContext,\n DataRouterStateContext,\n RSCRouterContext,\n ViewTransitionContext,\n FetchersContext,\n AwaitContextProvider,\n NavigationContext,\n LocationContext,\n RouteContext,\n ENABLE_DEV_WARNINGS,\n decodeRedirectErrorDigest,\n decodeRouteErrorResponseDigest,\n useHref,\n useInRouterContext,\n useLocation,\n useNavigationType,\n useMatch,\n useNavigate,\n useOutletContext,\n useOutlet,\n useParams,\n useResolvedPath,\n useRoutes,\n useNavigation,\n useRevalidator,\n useMatches,\n useLoaderData,\n useRouteLoaderData,\n useActionData,\n useRouteError,\n useAsyncValue,\n useAsyncError,\n useBlocker,\n useRoute,\n useRouterState,\n warnOnce,\n mapRouteProperties,\n hydrationRouteProperties,\n createMemoryRouter,\n RouterProvider,\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n Routes,\n Await,\n createRoutesFromChildren,\n createRoutesFromElements,\n renderMatches,\n WithComponentProps,\n withComponentProps,\n WithHydrateFallbackProps,\n withHydrateFallbackProps,\n WithErrorBoundaryProps,\n withErrorBoundaryProps,\n createSearchParams,\n escapeHtml,\n encode,\n createRequestInit,\n SingleFetchRedirectSymbol,\n SINGLE_FETCH_REDIRECT_STATUS,\n NO_BODY_STATUS_CODES,\n StreamTransfer,\n getTurboStreamSingleFetchDataStrategy,\n getSingleFetchDataStrategyImpl,\n stripIndexParam,\n singleFetchUrl,\n decodeViaTurboStream,\n RemixErrorBoundary,\n createServerRoutes,\n createClientRoutesWithHMRRevalidationOptOut,\n noActionDefinedError,\n createClientRoutes,\n shouldHydrateRouteLoader,\n URL_LIMIT,\n getPatchRoutesOnNavigationFunction,\n useFogOFWarDiscovery,\n getManifestPath,\n FrameworkContext,\n CRITICAL_CSS_DATA_ATTRIBUTE,\n Links,\n PrefetchPageLinks,\n Meta,\n setIsHydrated,\n Scripts,\n createBrowserRouter,\n createHashRouter,\n BrowserRouter,\n HashRouter,\n HistoryRouter,\n Link,\n NavLink,\n Form,\n ScrollRestoration,\n useLinkClickHandler,\n useSearchParams,\n useSubmit,\n useFormAction,\n useFetcher,\n useFetchers,\n useScrollRestoration,\n useBeforeUnload,\n usePrompt,\n useViewTransitionState,\n StaticRouter,\n StaticRouterProvider,\n createStaticHandler2,\n createStaticRouter\n};\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","// This is a magic string replaced by rollup\n\nconst SDK_VERSION = \"8.55.2\" ;\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './version.js';\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n const gbl = (obj || GLOBAL_OBJ) ;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n return versionedCarrier[name] || (versionedCarrier[name] = creator());\n}\n\nexport { GLOBAL_OBJ, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { getGlobalSingleton, GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console ;\n const wrappedFuncs = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] ;\n wrappedFuncs[level] = console[level] ;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] ;\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n const logger = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = (...args) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger ;\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n * The logger is a singleton on the carrier, to ensure that a consistent logger is used throughout the SDK.\n */\nconst logger = getGlobalSingleton('logger', makeLogger);\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack, skipFirstLines = 0, framesToPop = 0) => {\n const frames = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirstLines; i < lines.length; i++) {\n const line = lines[i] ;\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION,\n }));\n}\n\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nfunction getFramesFromEvent(event) {\n const exception = event.exception;\n\n if (exception) {\n const frames = [];\n try {\n // @ts-expect-error Object could be undefined\n exception.values.forEach(value => {\n // @ts-expect-error Value could be undefined\n if (value.stacktrace.frames) {\n // @ts-expect-error Value could be undefined\n frames.push(...value.stacktrace.frames);\n }\n });\n return frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../logger.js';\nimport { getFunctionName } from '../stacktrace.js';\n\n// We keep the handlers globally\nconst handlers = {};\nconst instrumented = {};\n\n/** Add a handler function. */\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nfunction resetInstrumentationHandlers() {\n Object.keys(handlers).forEach(key => {\n handlers[key ] = undefined;\n });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nfunction maybeInstrument(type, instrumentFn) {\n if (!instrumented[type]) {\n instrumented[type] = true;\n try {\n instrumentFn();\n } catch (e) {\n DEBUG_BUILD && logger.error(`Error while instrumenting ${type}`, e);\n }\n }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nfunction triggerHandlers(type, data) {\n const typeHandlers = type && handlers[type];\n if (!typeHandlers) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=handlers.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnErrorHandler = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalErrorInstrumentationHandler(handler) {\n const type = 'error';\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError() {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n // Note: The reason we are doing window.onerror instead of window.addEventListener('error')\n // is that we are using this handler in the Loader Script, to handle buffered errors consistently\n GLOBAL_OBJ.onerror = function (\n msg,\n url,\n line,\n column,\n error,\n ) {\n const handlerData = {\n column,\n error,\n line,\n msg,\n url,\n };\n triggerHandlers('error', handlerData);\n\n if (_oldOnErrorHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n\n GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalUnhandledRejectionInstrumentationHandler(\n handler,\n) {\n const type = 'unhandledrejection';\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n // Note: The reason we are doing window.onunhandledrejection instead of window.addEventListener('unhandledrejection')\n // is that we are using this handler in the Loader Script, to handle buffered rejections consistently\n GLOBAL_OBJ.onunhandledrejection = function (e) {\n const handlerData = e;\n triggerHandlers('unhandledrejection', handlerData);\n\n if (_oldOnUnhandledRejectionHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n\n GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","import { SDK_VERSION } from './utils-hoist/version.js';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide.js';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n // This ensures a Sentry carrier exists\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n // For now: First SDK that sets the .version property wins\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n // Intentionally populating and returning the version of \"this\" SDK instance\n // rather than what's set in .version so that \"this\" SDK always gets its carrier\n return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\nexport { getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n case '[object WebAssembly.Exception]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isString } from './is.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n elem,\n options = {},\n) {\n if (!elem) {\n return '<unknown>';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n const elem = el\n\n;\n\n const out = [];\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset) {\n if (elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n if (elem.dataset['sentryElement']) {\n return elem.dataset['sentryElement'];\n }\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n const className = elem.className;\n if (className && isString(className)) {\n const classes = className.split(/\\s+/);\n for (const c of classes) {\n out.push(`.${c}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (const k of allowedAttrs) {\n const attr = elem.getAttribute(k);\n if (attr) {\n out.push(`[${k}=\"${attr}\"]`);\n }\n }\n\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existence of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n *\n * @deprecated This method is deprecated and will be removed in the next major version.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) ;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precedence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement) {\n if (currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n if (currentElem.dataset['sentryElement']) {\n return currentElem.dataset['sentryElement'];\n }\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n value,\n pattern,\n requireExactStringMatch = false,\n) {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n testString,\n patterns = [],\n requireExactStringMatch = false,\n) {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] ;\n const wrapped = replacementFactory(original) ;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n try {\n source[name] = wrapped;\n } catch (e) {\n DEBUG_BUILD && logger.log(`Failed to replace method \"${name}\" in object`, source);\n }\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n *\n * @deprecated This function is deprecated and will be removed in the next major version of the SDK.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction urlEncode(object) {\n return Object.entries(object)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(value)\n\n {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj\n\n = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n const firstKey = keys[0];\n\n if (!firstKey) {\n return '[object has no keys]';\n }\n\n if (firstKey.length >= maxLength) {\n return truncate(firstKey, maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (isPojo(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.getOwnPropertyNames(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue ;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue ;\n }\n\n return inputValue;\n}\n\nfunction isPojo(input) {\n if (!isPlainObject(input)) {\n return false;\n }\n\n try {\n const name = (Object.getPrototypeOf(input) ).constructor.name;\n return !name || name === 'Object';\n } catch (e2) {\n return true;\n }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n // this will catch both undefined and null\n case wat == undefined:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat ).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nfunction dateTimestampInSeconds() {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n *\n * @deprecated This variable will be removed in the next major version.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nconst browserPerformanceTimeOrigin = (() => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n const gbl = GLOBAL_OBJ ;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = () => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '<unknown>';\n }\n return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\nfunction _parseInt(input) {\n return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = _parseInt(match[1]);\n const minor = _parseInt(match[2]);\n const patch = _parseInt(match[3]);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line) => snipLine(line, 0));\n\n // We guard here to ensure this is not larger than the existing number of lines\n const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n if (isAlreadyCaptured(exception)) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception , '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\nfunction isAlreadyCaptured(exception) {\n try {\n return (exception ).__sentry_captured__;\n } catch (e) {} // eslint-disable-line no-empty\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n *\n * @deprecated This function has been deprecated and will not be replaced.\n */\nfunction arrayify(maybeArray) {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n constructor(\n executor,\n ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n then(\n onfulfilled,\n onrejected,\n ) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result );\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val );\n });\n });\n }\n\n /** JSDoc */\n __init() {this._resolve = (value) => {\n this._setResult(States.RESOLVED, value);\n };}\n\n /** JSDoc */\n __init2() {this._reject = (reason) => {\n this._setResult(States.REJECTED, reason);\n };}\n\n /** JSDoc */\n __init3() {this._setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };}\n\n /** JSDoc */\n __init4() {this._executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport { dropUndefinedKeys } from './utils-hoist/object.js';\nimport { timestampInSeconds } from './utils-hoist/time.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport './utils-hoist/syncpromise.js';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { uuid4 } from './misc.js';\n\n/**\n * Returns a new minimal propagation context.\n *\n * @deprecated Use `generateTraceId` and `generateSpanId` instead.\n */\nfunction generatePropagationContext() {\n return {\n traceId: generateTraceId(),\n spanId: generateSpanId(),\n };\n}\n\n/**\n * Generate a random, valid trace ID.\n */\nfunction generateTraceId() {\n return uuid4();\n}\n\n/**\n * Generate a random, valid span ID.\n */\nfunction generateSpanId() {\n return uuid4().substring(16);\n}\n\nexport { generatePropagationContext, generateSpanId, generateTraceId };\n//# sourceMappingURL=propagationContext.js.map\n","/**\n * Shallow merge two objects.\n * Does not mutate the passed in objects.\n * Undefined/empty values in the merge object will overwrite existing values.\n *\n * By default, this merges 2 levels deep.\n */\nfunction merge(initialObj, mergeObj, levels = 2) {\n // If the merge value is not an object, or we have no merge levels left,\n // we just set the value to the merge value\n if (!mergeObj || typeof mergeObj !== 'object' || levels <= 0) {\n return mergeObj;\n }\n\n // If the merge object is an empty object, and the initial object is not undefined, we return the initial object\n if (initialObj && mergeObj && Object.keys(mergeObj).length === 0) {\n return initialObj;\n }\n\n // Clone object\n const output = { ...initialObj };\n\n // Merge values into output, resursively\n for (const key in mergeObj) {\n if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n output[key] = merge(output[key], mergeObj[key], levels - 1);\n }\n }\n\n return output;\n}\n\nexport { merge };\n//# sourceMappingURL=merge.js.map\n","import { addNonEnumerableProperty } from '../utils-hoist/object.js';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n if (span) {\n addNonEnumerableProperty(scope , SCOPE_SPAN_FIELD, span);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete (scope )[SCOPE_SPAN_FIELD];\n }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n return scope[SCOPE_SPAN_FIELD];\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { updateSession } from './session.js';\nimport { isPlainObject } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport { generateTraceId, generateSpanId } from './utils-hoist/propagationContext.js';\nimport { dateTimestampInSeconds } from './utils-hoist/time.js';\nimport { merge } from './utils/merge.js';\nimport { _setSpanForScope, _getSpanForScope } from './utils/spanOnScope.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information.\n */\nclass ScopeClass {\n /** Flag if notifying is happening. */\n\n /** Callback for client to receive scope changes. */\n\n /** Callback list that will be called during event processing. */\n\n /** Array of breadcrumbs. */\n\n /** User */\n\n /** Tags */\n\n /** Extra */\n\n /** Contexts */\n\n /** Attachments */\n\n /** Propagation Context for distributed tracing */\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n\n /** Fingerprint */\n\n /** Severity */\n\n /**\n * Transaction Name\n *\n * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n */\n\n /** Session */\n\n /** Request Mode Session Status */\n // eslint-disable-next-line deprecation/deprecation\n\n /** The client on this scope */\n\n /** Contains the last event id of a captured event. */\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = {\n traceId: generateTraceId(),\n spanId: generateSpanId(),\n };\n }\n\n /**\n * @inheritDoc\n */\n clone() {\n const newScope = new ScopeClass();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n if (this._contexts.flags) {\n // We need to copy the `values` array so insertions on a cloned scope\n // won't affect the original array.\n newScope._contexts.flags = {\n values: [...this._contexts.flags.values],\n };\n }\n\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n\n _setSpanForScope(newScope, _getSpanForScope(this));\n\n return newScope;\n }\n\n /**\n * @inheritDoc\n */\n setClient(client) {\n this._client = client;\n }\n\n /**\n * @inheritDoc\n */\n setLastEventId(lastEventId) {\n this._lastEventId = lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n getClient() {\n return this._client ;\n }\n\n /**\n * @inheritDoc\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getUser() {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line deprecation/deprecation\n getRequestSession() {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line deprecation/deprecation\n setRequestSession(requestSession) {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setLevel(level) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the transaction name on the scope so that the name of e.g. taken server route or\n * the page location is attached to future events.\n *\n * IMPORTANT: Calling this function does NOT change the name of the currently active\n * root span. If you want to change the name of the active root span, use\n * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n *\n * By default, the SDK updates the scope's transaction name automatically on sensible\n * occasions, such as a page navigation or when handling a new request on the server.\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setContext(key, context) {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n const [scopeInstance, requestSession] =\n scopeToMerge instanceof Scope\n ? // eslint-disable-next-line deprecation/deprecation\n [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()]\n : isPlainObject(scopeToMerge)\n ? [captureContext , (captureContext ).requestSession]\n : [];\n\n const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n this._tags = { ...this._tags, ...tags };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n\n if (level) {\n this._level = level;\n }\n\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n\n if (requestSession) {\n this._requestSession = requestSession;\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clear() {\n // client is not cleared here on purpose!\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._session = undefined;\n _setSpanForScope(this, undefined);\n this._attachments = [];\n this.setPropagationContext({ traceId: generateTraceId() });\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n this._breadcrumbs.push(mergedBreadcrumb);\n if (this._breadcrumbs.length > maxCrumbs) {\n this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n if (this._client) {\n this._client.recordDroppedEvent('buffer_overflow', 'log_item');\n }\n }\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getLastBreadcrumb() {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n getScopeData() {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n span: _getSpanForScope(this),\n };\n }\n\n /**\n * @inheritDoc\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setPropagationContext(\n context,\n ) {\n this._propagationContext = {\n // eslint-disable-next-line deprecation/deprecation\n spanId: generateSpanId(),\n ...context,\n };\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getPropagationContext() {\n return this._propagationContext;\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(message, level, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n/**\n * Holds additional event information.\n */\nconst Scope = ScopeClass;\n\n/**\n * Holds additional event information.\n */\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { Scope } from './scope.js';\nimport { getGlobalSingleton } from './utils-hoist/worldwide.js';\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","import { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { isThenable } from '../utils-hoist/is.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n constructor(scope, isolationScope) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n // scope stack for domains or the process\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Fork a scope for the stack.\n */\n withScope(callback) {\n const scope = this._pushScope();\n\n let maybePromiseResult;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n this._popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n this._popScope();\n return res;\n },\n e => {\n this._popScope();\n throw e;\n },\n );\n }\n\n this._popScope();\n return maybePromiseResult;\n }\n\n /**\n * Get the client of the stack.\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /**\n * Returns the scope of the top stack.\n */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /**\n * Get the isolation scope for the stack.\n */\n getIsolationScope() {\n return this._isolationScope;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n getStackTop() {\n return this._stack[this._stack.length - 1] ;\n }\n\n /**\n * Push a scope to the stack.\n */\n _pushScope() {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this._stack.push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * Pop a scope from the stack.\n */\n _popScope() {\n if (this._stack.length <= 1) return false;\n return !!this._stack.pop();\n }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n\n return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback) {\n return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n const stack = getAsyncContextStack() ;\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\n\nfunction withIsolationScope(callback) {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n return {\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: (_isolationScope, callback) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n };\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getMainCarrier, getSentryCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n const sentry = getSentryCarrier(carrier);\n\n if (sentry.acs) {\n return sentry.acs;\n }\n\n // Otherwise, use the default one (stack)\n return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier } from './carrier.js';\nimport { Scope } from './scope.js';\nimport { dropUndefinedKeys } from './utils-hoist/object.js';\nimport { getGlobalSingleton } from './utils-hoist/worldwide.js';\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nfunction getIsolationScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n ...rest\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n\n if (!scope) {\n return acs.withScope(callback);\n }\n\n return acs.withSetScope(scope, callback);\n }\n\n return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\n\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n ...rest\n\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [isolationScope, callback] = rest;\n\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n\n return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n return getCurrentScope().getClient();\n}\n\n/**\n * Get a trace context for the given scope.\n */\nfunction getTraceContextFromScope(scope) {\n const propagationContext = scope.getPropagationContext();\n\n // TODO(v9): Use generateSpanId() instead of spanId\n // eslint-disable-next-line deprecation/deprecation\n const { traceId, spanId, parentSpanId } = propagationContext;\n\n const traceContext = dropUndefinedKeys({\n trace_id: traceId,\n span_id: spanId,\n parent_span_id: parentSpanId,\n });\n\n return traceContext;\n}\n\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, getTraceContextFromScope, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","import { dropUndefinedKeys } from '../utils-hoist/object.js';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\n\nconst METRICS_SPAN_FIELD = '_sentryMetrics';\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nfunction getMetricSummaryJsonForSpan(span) {\n const storage = (span )[METRICS_SPAN_FIELD];\n\n if (!storage) {\n return undefined;\n }\n const output = {};\n\n for (const [, [exportKey, summary]] of storage) {\n const arr = output[exportKey] || (output[exportKey] = []);\n arr.push(dropUndefinedKeys(summary));\n }\n\n return output;\n}\n\n/**\n * Updates the metric summary on a span.\n */\nfunction updateMetricSummaryOnSpan(\n span,\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const existingStorage = (span )[METRICS_SPAN_FIELD];\n const storage =\n existingStorage ||\n ((span )[METRICS_SPAN_FIELD] = new Map());\n\n const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n const bucketItem = storage.get(bucketKey);\n\n if (bucketItem) {\n const [, summary] = bucketItem;\n storage.set(bucketKey, [\n exportKey,\n {\n min: Math.min(summary.min, value),\n max: Math.max(summary.max, value),\n count: (summary.count += 1),\n sum: (summary.sum += value),\n tags: summary.tags,\n },\n ]);\n } else {\n storage.set(bucketKey, [\n exportKey,\n {\n min: value,\n max: value,\n count: 1,\n sum: value,\n tags,\n },\n ]);\n }\n}\n\nexport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan };\n//# sourceMappingURL=metric-summary.js.map\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * A custom span name set by users guaranteed to be taken over any automatically\n * inferred name. This attribute is removed before the span is sent.\n *\n * @internal only meant for internal SDK usage\n * @hidden\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = 'sentry.custom_span_name';\n\n/**\n * The id of the profile that this span occurred in.\n */\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\nconst SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n\nexport { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_URL_FULL };\n//# sourceMappingURL=semanticAttributes.js.map\n","const SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nfunction getSpanStatusFromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n }\n }\n\n return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nfunction setHttpStatus(span, httpStatus) {\n span.setAttribute('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isString } from './is.js';\nimport { logger } from './logger.js';\n\n/**\n * @deprecated Use a `\"baggage\"` string directly\n */\nconst BAGGAGE_HEADER_NAME = 'baggage';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nfunction baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader,\n) {\n const baggageObject = parseBaggageHeader(baggageHeader);\n\n if (!baggageObject) {\n return undefined;\n }\n\n // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n\n // Only return a dynamic sampling context object if there are keys in it.\n // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext ;\n } else {\n return undefined;\n }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nfunction dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext,\n) {\n if (!dynamicSamplingContext) {\n return undefined;\n }\n\n // Prefix all DSC keys with \"sentry-\" and put them into a new object\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {},\n );\n\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nfunction parseBaggageHeader(\n baggageHeader,\n) {\n if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n return undefined;\n }\n\n if (Array.isArray(baggageHeader)) {\n // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n return baggageHeader.reduce((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n Object.entries(currBaggageObject).forEach(([key, value]) => {\n acc[key] = value;\n });\n return acc;\n }, {});\n }\n\n return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader) {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce((acc, [key, value]) => {\n if (key && value) {\n acc[key] = value;\n }\n return acc;\n }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object) {\n if (Object.keys(object).length === 0) {\n // An empty baggage header is not spec compliant: We return undefined.\n return undefined;\n }\n\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, '');\n}\n\nexport { BAGGAGE_HEADER_NAME, MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { baggageHeaderToDynamicSamplingContext } from './baggage.js';\nimport { generateTraceId, generateSpanId } from './propagationContext.js';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nconst TRACEPARENT_REGEXP = new RegExp(\n '^[ \\\\t]*' + // whitespace\n '([0-9a-f]{32})?' + // trace_id\n '-?([0-9a-f]{16})?' + // span_id\n '-?([01])?' + // sampled\n '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nfunction extractTraceparentData(traceparent) {\n if (!traceparent) {\n return undefined;\n }\n\n const matches = traceparent.match(TRACEPARENT_REGEXP);\n if (!matches) {\n return undefined;\n }\n\n let parentSampled;\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n\n return {\n traceId: matches[1],\n parentSampled,\n parentSpanId: matches[2],\n };\n}\n\n/**\n * Create a propagation context from incoming headers or\n * creates a minimal new one if the headers are undefined.\n */\nfunction propagationContextFromHeaders(\n sentryTrace,\n baggage,\n) {\n const traceparentData = extractTraceparentData(sentryTrace);\n const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n if (!traceparentData || !traceparentData.traceId) {\n return { traceId: generateTraceId(), spanId: generateSpanId() };\n }\n\n const { traceId, parentSpanId, parentSampled } = traceparentData;\n\n const virtualSpanId = generateSpanId();\n\n return {\n traceId,\n parentSpanId,\n spanId: virtualSpanId,\n sampled: parentSampled,\n dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nfunction generateSentryTraceHeader(\n traceId = generateTraceId(),\n spanId = generateSpanId(),\n sampled,\n) {\n let sampledString = '';\n if (sampled !== undefined) {\n sampledString = sampled ? '-1' : '-0';\n }\n return `${traceId}-${spanId}${sampledString}`;\n}\n\nexport { TRACEPARENT_REGEXP, extractTraceparentData, generateSentryTraceHeader, propagationContextFromHeaders };\n//# sourceMappingURL=tracing.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK } from '../tracing/spanstatus.js';\nimport { consoleSandbox } from '../utils-hoist/logger.js';\nimport { dropUndefinedKeys, addNonEnumerableProperty } from '../utils-hoist/object.js';\nimport { generateSpanId } from '../utils-hoist/propagationContext.js';\nimport { timestampInSeconds } from '../utils-hoist/time.js';\nimport { generateSentryTraceHeader } from '../utils-hoist/tracing.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\n// todo(v9): Remove this once we've stopped dropping spans via `beforeSendSpan`\nlet hasShownSpanDropWarning = false;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nfunction spanToTransactionTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nfunction spanToTraceContext(span) {\n const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n\n // If the span is remote, we use a random/virtual span as span_id to the trace context,\n // and the remote span as parent_span_id\n const parent_span_id = isRemote ? spanId : spanToJSON(span).parent_span_id;\n const span_id = isRemote ? generateSpanId() : spanId;\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nfunction spanToJSON(span) {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n\n try {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, parentSpanId, status } = span;\n\n return dropUndefinedKeys({\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: parentSpanId,\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || undefined,\n status: getStatusMessage(status),\n op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n _metrics_summary: getMetricSummaryJsonForSpan(span),\n });\n }\n\n // Finally, at least we have `spanContext()`....\n return {\n span_id,\n trace_id,\n };\n } catch (e) {\n return {};\n }\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n const castSpan = span ;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span) {\n return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nfunction getStatusMessage(status) {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return undefined;\n }\n\n if (status.code === SPAN_STATUS_OK) {\n return 'ok';\n }\n\n return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\n/**\n * Adds an opaque child span reference to a span.\n */\nfunction addChildSpanToSpan(span, childSpan) {\n // We store the root span reference on the child span\n // We need this for `getRootSpan()` to work\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan , ROOT_SPAN_FIELD, rootSpan);\n\n // We store a list of child spans on the parent span\n // We need this for `getSpanDescendants()` to work\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n }\n}\n\n/** This is only used internally by Idle Spans. */\nfunction removeChildSpanFromSpan(span, childSpan) {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nfunction getSpanDescendants(span) {\n const resultSet = new Set();\n\n function addSpanChildren(span) {\n // This exit condition is required to not infinitely loop in case of a circular dependency.\n if (resultSet.has(span)) {\n return;\n // We want to ignore unsampled spans (e.g. non recording spans)\n } else if (spanIsSampled(span)) {\n resultSet.add(span);\n const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n\n addSpanChildren(span);\n\n return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nfunction getRootSpan(span) {\n return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nfunction getActiveSpan() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan();\n }\n\n return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nfunction updateMetricSummaryOnActiveSpan(\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const span = getActiveSpan();\n if (span) {\n updateMetricSummaryOnSpan(span, metricType, sanitizedName, value, unit, tags, bucketKey);\n }\n}\n\n/**\n * Logs a warning once if `beforeSendSpan` is used to drop spans.\n *\n * todo(v9): Remove this once we've stopped dropping spans via `beforeSendSpan`.\n */\nfunction showSpanDropWarning() {\n if (!hasShownSpanDropWarning) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] Deprecation warning: Returning null from `beforeSendSpan` will be disallowed from SDK version 9.0.0 onwards. The callback will only support mutating spans. To drop certain spans, configure the respective integrations directly.',\n );\n });\n hasShownSpanDropWarning = true;\n }\n}\n\n/**\n * Updates the name of the given span and ensures that the span name is not\n * overwritten by the Sentry SDK.\n *\n * Use this function instead of `span.updateName()` if you want to make sure that\n * your name is kept. For some spans, for example root `http.server` spans the\n * Sentry SDK would otherwise overwrite the span name with a high-quality name\n * it infers when the span ends.\n *\n * Use this function in server code or when your span is started on the server\n * and on the client (browser). If you only update a span name on the client,\n * you can also use `span.updateName()` the SDK does not overwrite the name.\n *\n * @param span - The span to update the name of.\n * @param name - The name to set on the span.\n */\nfunction updateSpanName(span, name) {\n span.updateName(name);\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name,\n });\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, removeChildSpanFromSpan, showSpanDropWarning, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader, spanToTransactionTraceContext, updateMetricSummaryOnActiveSpan, updateSpanName };\n//# sourceMappingURL=spanUtils.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { addGlobalErrorInstrumentationHandler } from '../utils-hoist/instrument/globalError.js';\nimport { addGlobalUnhandledRejectionInstrumentationHandler } from '../utils-hoist/instrument/globalUnhandledRejection.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\n\nlet errorsInstrumented = false;\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nfunction registerSpanErrorInstrumentation() {\n if (errorsInstrumented) {\n return;\n }\n\n errorsInstrumented = true;\n addGlobalErrorInstrumentationHandler(errorCallback);\n addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active root span as failed\n */\nfunction errorCallback() {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const message = 'internal_error';\n DEBUG_BUILD && logger.log(`[Tracing] Root span: ${message} -> Global error occurred`);\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n\nexport { registerSpanErrorInstrumentation };\n//# sourceMappingURL=errors.js.map\n","import { addNonEnumerableProperty } from '../utils-hoist/object.js';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nfunction getCapturedScopesOnSpan(span) {\n return {\n scope: (span )[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: (span )[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n };\n}\n\nexport { getCapturedScopesOnSpan, setCapturedScopesOnSpan };\n//# sourceMappingURL=utils.js.map\n","import { getClient } from '../currentScopes.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nfunction hasTracingEnabled(\n maybeOptions,\n) {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const client = getClient();\n const options = maybeOptions || (client && client.getOptions());\n // eslint-disable-next-line deprecation/deprecation\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\nexport { hasTracingEnabled };\n//# sourceMappingURL=hasTracingEnabled.js.map\n","import { generateTraceId, generateSpanId } from '../utils-hoist/propagationContext.js';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils.js';\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nclass SentryNonRecordingSpan {\n\n constructor(spanContext = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n }\n\n /** @inheritdoc */\n spanContext() {\n return {\n spanId: this._spanId,\n traceId: this._traceId,\n traceFlags: TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n end(_timestamp) {}\n\n /** @inheritdoc */\n setAttribute(_key, _value) {\n return this;\n }\n\n /** @inheritdoc */\n setAttributes(_values) {\n return this;\n }\n\n /** @inheritdoc */\n setStatus(_status) {\n return this;\n }\n\n /** @inheritdoc */\n updateName(_name) {\n return this;\n }\n\n /** @inheritdoc */\n isRecording() {\n return false;\n }\n\n /** @inheritdoc */\n addEvent(\n _name,\n _attributesOrStartTime,\n _startTime,\n ) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLink(_link) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLinks(_links) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n recordException(_exception, _time) {\n // noop\n }\n}\n\nexport { SentryNonRecordingSpan };\n//# sourceMappingURL=sentryNonRecordingSpan.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient } from '../currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader } from '../utils-hoist/baggage.js';\nimport { dropUndefinedKeys, addNonEnumerableProperty } from '../utils-hoist/object.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { getRootSpan, spanToJSON, spanIsSampled } from '../utils/spanUtils.js';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\n/**\n * Freeze the given DSC on the given span.\n */\nfunction freezeDscOnSpan(span, dsc) {\n const spanWithMaybeDsc = span ;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n }) ;\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Get the dynamic sampling context for the currently active scopes.\n */\nfunction getDynamicSamplingContextFromScope(client, scope) {\n const propagationContext = scope.getPropagationContext();\n return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n const rootSpan = getRootSpan(span);\n\n // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n const frozenDsc = (rootSpan )[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return frozenDsc;\n }\n\n // For OpenTelemetry, we freeze the DSC on the trace state\n const traceState = rootSpan.spanContext().traceState;\n const traceStateDsc = traceState && traceState.get('sentry.dsc');\n\n // If the span has a DSC, we want it to take precedence\n const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n if (dscOnTraceState) {\n return dscOnTraceState;\n }\n\n // Else, we generate it from the span\n const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\n const jsonSpan = spanToJSON(rootSpan);\n const attributes = jsonSpan.data || {};\n const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n const name = jsonSpan.description;\n if (source !== 'url' && name) {\n dsc.transaction = name;\n }\n\n // How can we even land here with hasTracingEnabled() returning false?\n // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n // So we end up with an active span that is not sampled (neither positively nor negatively)\n if (hasTracingEnabled()) {\n dsc.sampled = String(spanIsSampled(rootSpan));\n }\n\n client.emit('createDsc', dsc, rootSpan);\n\n return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nfunction spanToBaggageHeader(span) {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { spanToJSON, spanIsSampled, getRootSpan } from '../utils/spanUtils.js';\n\n/**\n * Print a log message for a started span.\n */\nfunction logSpanStart(span) {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = spanToJSON(span);\n const { spanId } = span.spanContext();\n\n const sampled = spanIsSampled(span);\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n const infoParts = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n if (parentSpanId) {\n infoParts.push(`parent ID: ${parentSpanId}`);\n }\n\n if (!isRootSpan) {\n const { op, description } = spanToJSON(rootSpan);\n infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n if (op) {\n infoParts.push(`root op: ${op}`);\n }\n if (description) {\n infoParts.push(`root description: ${description}`);\n }\n }\n\n logger.log(`${header}\n ${infoParts.join('\\n ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nfunction logSpanEnd(span) {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >' } = spanToJSON(span);\n const { spanId } = span.spanContext();\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n logger.log(msg);\n}\n\nexport { logSpanEnd, logSpanStart };\n//# sourceMappingURL=logSpans.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\n\n/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nfunction parseSampleRate(sampleRate) {\n if (typeof sampleRate === 'boolean') {\n return Number(sampleRate);\n }\n\n const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n sampleRate,\n )} of type ${JSON.stringify(typeof sampleRate)}.`,\n );\n return undefined;\n }\n\n return rate;\n}\n\nexport { parseSampleRate };\n//# sourceMappingURL=parseSampleRate.js.map\n","import { getIsolationScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { parseSampleRate } from '../utils/parseSampleRate.js';\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nfunction sampleSpan(\n options,\n samplingContext,\n) {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n return [false];\n }\n\n // Casting this from unknown, as the type of `sdkProcessingMetadata` is only changed in v9 and `normalizedRequest` is set in SentryHttpInstrumentation\n const normalizedRequest = getIsolationScope().getScopeData().sdkProcessingMetadata\n .normalizedRequest ;\n\n const enhancedSamplingContext = {\n ...samplingContext,\n normalizedRequest: samplingContext.normalizedRequest || normalizedRequest,\n };\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(enhancedSamplingContext);\n } else if (enhancedSamplingContext.parentSampled !== undefined) {\n sampleRate = enhancedSamplingContext.parentSampled;\n } else if (typeof options.tracesSampleRate !== 'undefined') {\n sampleRate = options.tracesSampleRate;\n } else {\n // When `enableTracing === true`, we use a sample rate of 100%\n sampleRate = 1;\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n // (The only valid values are booleans or numbers between 0 and 1.)\n const parsedSampleRate = parseSampleRate(sampleRate);\n\n if (parsedSampleRate === undefined) {\n DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n return [false];\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!parsedSampleRate) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n return [false, parsedSampleRate];\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n const shouldSample = Math.random() < parsedSampleRate;\n\n // if we're not going to keep it, we're done\n if (!shouldSample) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return [false, parsedSampleRate];\n }\n\n return [true, parsedSampleRate];\n}\n\nexport { sampleSpan };\n//# sourceMappingURL=sampling.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, logger } from './logger.js';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nfunction dsnFromString(str) {\n const match = DSN_REGEX.exec(str);\n\n if (!match) {\n // This should be logged to the console\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(`Invalid Sentry Dsn: ${str}`);\n });\n return undefined;\n }\n\n const [protocol, publicKey, pass = '', host = '', port = '', lastPath = ''] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n const split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() ;\n }\n\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn) {\n if (!DEBUG_BUILD) {\n return true;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n const hasMissingRequiredComponent = requiredComponents.find(component => {\n if (!dsn[component]) {\n logger.error(`Invalid Sentry Dsn: ${component} missing`);\n return true;\n }\n return false;\n });\n\n if (hasMissingRequiredComponent) {\n return false;\n }\n\n if (!projectId.match(/^\\d+$/)) {\n logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n return false;\n }\n\n if (!isValidProtocol(protocol)) {\n logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n return false;\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nfunction makeDsn(from) {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return undefined;\n }\n return components;\n}\n\nexport { dsnFromString, dsnToString, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n *\n * @deprecated This function is deprecated and will be removed in the next major version.\n */\n// TODO(v9): Move this function into normalize() directly\nfunction memoBuilder() {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner = hasWeakSet ? new WeakSet() : [];\n function memoize(obj) {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj) {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normalized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object,\n // Default Node.js REPL depth\n depth = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize = 100 * 1024,\n) {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key,\n value,\n depth = +Infinity,\n maxProperties = +Infinity,\n // eslint-disable-next-line deprecation/deprecation\n memo = memoBuilder(),\n) {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n ['boolean', 'string'].includes(typeof value) ||\n (typeof value === 'number' && Number.isFinite(value))\n ) {\n return value ;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value )['__sentry_skip_normalization__']) {\n return value ;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n ? ((value )['__sentry_override_normalization_depth__'] )\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value ;\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) ;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value );\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value,\n) {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n return `[${value}]`;\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n const prototype = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase };\n//# sourceMappingURL=normalize.js.map\n","import { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { dropUndefinedKeys } from './object.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction createEnvelope(headers, items = []) {\n return [headers, items] ;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction addItemToEnvelope(envelope, newItem) {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] ;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nfunction forEachEnvelopeItem(\n envelope,\n callback,\n) {\n const envelopeItems = envelope[1];\n\n for (const envelopeItem of envelopeItems) {\n const envelopeItemType = envelopeItem[0].type;\n const result = callback(envelopeItem, envelopeItemType);\n\n if (result) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nfunction envelopeContainsItemType(envelope, types) {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input) {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.encodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.encodePolyfill(input)\n : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input) {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.decodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.decodePolyfill(input)\n : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope) {\n const [envHeaders, items] = envelope;\n\n // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n let parts = JSON.stringify(envHeaders);\n\n function append(next) {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next) : next);\n }\n }\n\n for (const item of items) {\n const [itemHeaders, payload] = item;\n\n append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n if (typeof payload === 'string' || payload instanceof Uint8Array) {\n append(payload);\n } else {\n let stringifiedPayload;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch (e) {\n // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.stringify()` still\n // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n // performance impact but in this case a performance hit is better than throwing.\n stringifiedPayload = JSON.stringify(normalize(payload));\n }\n append(stringifiedPayload);\n }\n }\n\n return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers) {\n const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n\n return merged;\n}\n\n/**\n * Parses an envelope\n */\nfunction parseEnvelope(env) {\n let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n function readBinary(length) {\n const bin = buffer.subarray(0, length);\n // Replace the buffer with the remaining data excluding trailing newline\n buffer = buffer.subarray(length + 1);\n return bin;\n }\n\n function readJson() {\n let i = buffer.indexOf(0xa);\n // If we couldn't find a newline, we must have found the end of the buffer\n if (i < 0) {\n i = buffer.length;\n }\n\n return JSON.parse(decodeUTF8(readBinary(i))) ;\n }\n\n const envelopeHeader = readJson();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items = [];\n\n while (buffer.length) {\n const itemHeader = readJson();\n const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n }\n\n return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nfunction createSpanEnvelopeItem(spanJson) {\n const spanHeaders = {\n type: 'span',\n };\n\n return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(attachment) {\n const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\n return [\n dropUndefinedKeys({\n type: 'attachment',\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType,\n }),\n buffer,\n ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP = {\n session: 'session',\n sessions: 'session',\n attachment: 'attachment',\n transaction: 'transaction',\n event: 'error',\n client_report: 'internal',\n user_report: 'default',\n profile: 'profile',\n profile_chunk: 'profile',\n replay_event: 'replay',\n replay_recording: 'replay',\n check_in: 'monitor',\n feedback: 'feedback',\n span: 'span',\n statsd: 'metric_bucket',\n raw_security: 'security',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n if (!metadataOrEvent || !metadataOrEvent.sdk) {\n return;\n }\n const { name, version } = metadataOrEvent.sdk;\n return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nfunction createEventEnvelopeHeaders(\n event,\n sdkInfo,\n tunnel,\n dsn,\n) {\n const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n return {\n event_id: event.event_id ,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n ...(dynamicSamplingContext && {\n trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n }),\n };\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext.js';\nimport { dsnToString } from './utils-hoist/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem } from './utils-hoist/envelope.js';\nimport './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport { spanToJSON, showSpanDropWarning } from './utils/spanUtils.js';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n if (!sdkInfo) {\n return event;\n }\n event.sdk = event.sdk || {};\n event.sdk.name = event.sdk.name || sdkInfo.name;\n event.sdk.version = event.sdk.version || sdkInfo.version;\n event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n session,\n dsn,\n metadata,\n tunnel,\n) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n const envelopeHeaders = {\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const envelopeItem =\n 'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n event,\n dsn,\n metadata,\n tunnel,\n) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n /*\n Note: Due to TS, event.type may be `replay_event`, theoretically.\n In practice, we never call `createEventEnvelope` with `replay_event` type,\n and we'd have to adjust a looot of types to make this work properly.\n We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n So the safe choice is to really guard against the replay_event type here.\n */\n const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete event.sdkProcessingMetadata;\n\n const eventItem = [{ type: eventType }, event];\n return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nfunction createSpanEnvelope(spans, client) {\n function dscHasRequiredProps(dsc) {\n return !!dsc.trace_id && !!dsc.public_key;\n }\n\n // For the moment we'll obtain the DSC from the first span in the array\n // This might need to be changed if we permit sending multiple spans from\n // different segments in one envelope\n const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\n\n const headers = {\n sent_at: new Date().toISOString(),\n ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const beforeSendSpan = client && client.getOptions().beforeSendSpan;\n const convertToSpanJSON = beforeSendSpan\n ? (span) => {\n const spanJson = beforeSendSpan(spanToJSON(span) );\n if (!spanJson) {\n showSpanDropWarning();\n }\n return spanJson;\n }\n : (span) => spanToJSON(span);\n\n const items = [];\n for (const span of spans) {\n const spanJson = convertToSpanJSON(span);\n if (spanJson) {\n items.push(createSpanEnvelopeItem(spanJson));\n }\n }\n\n return createEnvelope(headers, items);\n}\n\nexport { createEventEnvelope, createSessionEnvelope, createSpanEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getRootSpan, getActiveSpan } from '../utils/spanUtils.js';\n\n/**\n * Adds a measurement to the active transaction on the current global scope. You can optionally pass in a different span\n * as the 4th parameter.\n */\nfunction setMeasurement(name, value, unit, activeSpan = getActiveSpan()) {\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n if (rootSpan) {\n DEBUG_BUILD && logger.log(`[Measurement] Setting measurement on root span: ${name} = ${value} ${unit}`);\n rootSpan.addEvent(name, {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit ,\n });\n }\n}\n\n/**\n * Convert timed events to measurements.\n */\nfunction timedEventsToMeasurements(events) {\n if (!events || events.length === 0) {\n return undefined;\n }\n\n const measurements = {};\n events.forEach(event => {\n const attributes = event.attributes || {};\n const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] ;\n const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] ;\n\n if (typeof unit === 'string' && typeof value === 'number') {\n measurements[event.name] = { value, unit };\n }\n });\n\n return measurements;\n}\n\nexport { setMeasurement, timedEventsToMeasurements };\n//# sourceMappingURL=measurement.js.map\n","import { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { createSpanEnvelope } from '../envelope.js';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { dropUndefinedKeys } from '../utils-hoist/object.js';\nimport { generateTraceId, generateSpanId } from '../utils-hoist/propagationContext.js';\nimport { timestampInSeconds } from '../utils-hoist/time.js';\nimport { TRACE_FLAG_SAMPLED, TRACE_FLAG_NONE, spanTimeInputToSeconds, getStatusMessage, getRootSpan, spanToJSON, getSpanDescendants, spanToTransactionTraceContext } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext.js';\nimport { logSpanEnd } from './logSpans.js';\nimport { timedEventsToMeasurements } from './measurement.js';\nimport { getCapturedScopesOnSpan } from './utils.js';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nclass SentrySpan {\n\n /** Epoch timestamp in seconds when the span started. */\n\n /** Epoch timestamp in seconds when the span ended. */\n\n /** Internal keeper of the status */\n\n /** The timed events added to this span. */\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n constructor(spanContext = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLink(_link) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLinks(_links) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n recordException(_exception, _time) {\n // noop\n }\n\n /** @inheritdoc */\n spanContext() {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n setAttribute(key, value) {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n\n return this;\n }\n\n /** @inheritdoc */\n setAttributes(attributes) {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n updateStartTime(timeInput) {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n setStatus(value) {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n updateName(name) {\n this._name = name;\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n return this;\n }\n\n /** @inheritdoc */\n end(endTimestamp) {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n getSpanJSON() {\n return dropUndefinedKeys({\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] ,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] ,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n });\n }\n\n /** @inheritdoc */\n isRecording() {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n addEvent(\n name,\n attributesOrStartTime,\n startTime,\n ) {\n DEBUG_BUILD && logger.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n isStandaloneSpan() {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n _onSpanEnded() {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n if (this._sampled) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n } else {\n DEBUG_BUILD &&\n logger.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n if (client) {\n client.recordDroppedEvent('sample_rate', 'span');\n }\n }\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n _convertSpanToTransaction() {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this._name = '<unlabeled transaction>';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n const scope = capturedSpanScope || getCurrentScope();\n const client = scope.getClient() || getClient();\n\n if (this._sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n if (client) {\n client.recordDroppedEvent('sample_rate', 'transaction');\n }\n\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] ;\n\n // remove internal root span attributes we don't need to send.\n /* eslint-disable @typescript-eslint/no-dynamic-delete */\n delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n spans.forEach(span => {\n span.data && delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n });\n // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n const transaction = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n ...dropUndefinedKeys({\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n }),\n },\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n logger.log(\n '[Measurements] Adding measurements to transaction event',\n JSON.stringify(measurements, undefined, 2),\n );\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value) {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input) {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span) {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope) {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n client.sendEnvelope(envelope);\n}\n\nexport { SentrySpan };\n//# sourceMappingURL=sentrySpan.js.map\n","import { getMainCarrier } from '../carrier.js';\nimport { withScope, getCurrentScope, getIsolationScope, getClient } from '../currentScopes.js';\nimport { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { generateTraceId } from '../utils-hoist/propagationContext.js';\nimport { propagationContextFromHeaders } from '../utils-hoist/tracing.js';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope, _getSpanForScope } from '../utils/spanOnScope.js';\nimport { spanToJSON, addChildSpanToSpan, spanIsSampled, spanTimeInputToSeconds, getRootSpan } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan, freezeDscOnSpan } from './dynamicSamplingContext.js';\nimport { logSpanStart } from './logSpans.js';\nimport { sampleSpan } from './sampling.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SentrySpan } from './sentrySpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { setCapturedScopesOnSpan } from './utils.js';\n\nconst SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpan(options, callback) {\n const acs = getAcs();\n if (acs.startSpan) {\n return acs.startSpan(options, callback);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n return withScope(options.scope, () => {\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = getActiveSpanWrapper(customParentSpan);\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n () => activeSpan.end(),\n );\n });\n });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpanManual(options, callback) {\n const acs = getAcs();\n if (acs.startSpanManual) {\n return acs.startSpanManual(options, callback);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n return withScope(options.scope, () => {\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = getActiveSpanWrapper(customParentSpan);\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n function finishAndSetSpan() {\n activeSpan.end();\n }\n\n return handleCallbackErrors(\n () => callback(activeSpan, finishAndSetSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n );\n });\n });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startInactiveSpan(options) {\n const acs = getAcs();\n if (acs.startInactiveSpan) {\n return acs.startInactiveSpan(options);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n // If `options.scope` is defined, we use this as as a wrapper,\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = options.scope\n ? (callback) => withScope(options.scope, callback)\n : customParentSpan !== undefined\n ? (callback) => withActiveSpan(customParentSpan, callback)\n : (callback) => callback();\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n\n if (shouldSkipSpan) {\n return new SentryNonRecordingSpan();\n }\n\n return createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n * and `<meta name=\"baggage\">` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nconst continueTrace = (\n options\n\n,\n callback,\n) => {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.continueTrace) {\n return acs.continueTrace(options, callback);\n }\n\n const { sentryTrace, baggage } = options;\n\n return withScope(scope => {\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n scope.setPropagationContext(propagationContext);\n return callback();\n });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nfunction withActiveSpan(span, callback) {\n const acs = getAcs();\n if (acs.withActiveSpan) {\n return acs.withActiveSpan(span, callback);\n }\n\n return withScope(scope => {\n _setSpanForScope(scope, span || undefined);\n return callback(scope);\n });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nfunction suppressTracing(callback) {\n const acs = getAcs();\n\n if (acs.suppressTracing) {\n return acs.suppressTracing(callback);\n }\n\n return withScope(scope => {\n scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n return callback();\n });\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n * or page will automatically create a new trace.\n */\nfunction startNewTrace(callback) {\n return withScope(scope => {\n scope.setPropagationContext({ traceId: generateTraceId() });\n DEBUG_BUILD && logger.info(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n return withActiveSpan(null, callback);\n });\n}\n\nfunction createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n}\n\n) {\n if (!hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const isolationScope = getIsolationScope();\n\n let span;\n if (parentSpan && !forceTransaction) {\n span = _startChildSpan(parentSpan, scope, spanArguments);\n addChildSpanToSpan(parentSpan, span);\n } else if (parentSpan) {\n // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n const parentSampled = spanIsSampled(parentSpan);\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanArguments,\n },\n scope,\n parentSampled,\n );\n\n freezeDscOnSpan(span, dsc);\n } else {\n const {\n traceId,\n dsc,\n parentSpanId,\n sampled: parentSampled,\n } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanArguments,\n },\n scope,\n parentSampled,\n );\n\n if (dsc) {\n freezeDscOnSpan(span, dsc);\n }\n }\n\n logSpanStart(span);\n\n setCapturedScopesOnSpan(span, scope, isolationScope);\n\n return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n */\nfunction parseSentrySpanArguments(options) {\n const exp = options.experimental || {};\n const initialCtx = {\n isStandalone: exp.standalone,\n ...options,\n };\n\n if (options.startTime) {\n const ctx = { ...initialCtx };\n ctx.startTimestamp = spanTimeInputToSeconds(options.startTime);\n delete ctx.startTime;\n return ctx;\n }\n\n return initialCtx;\n}\n\nfunction getAcs() {\n const carrier = getMainCarrier();\n return getAsyncContextStrategy(carrier);\n}\n\nfunction _startRootSpan(spanArguments, scope, parentSampled) {\n const client = getClient();\n const options = (client && client.getOptions()) || {};\n\n const { name = '', attributes } = spanArguments;\n const [sampled, sampleRate] = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY]\n ? [false]\n : sampleSpan(options, {\n name,\n parentSampled,\n attributes,\n transactionContext: {\n name,\n parentSampled,\n },\n });\n\n const rootSpan = new SentrySpan({\n ...spanArguments,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n ...spanArguments.attributes,\n },\n sampled,\n });\n if (sampleRate !== undefined) {\n rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n }\n\n if (client) {\n client.emit('spanStart', rootSpan);\n }\n\n return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(parentSpan, scope, spanArguments) {\n const { spanId, traceId } = parentSpan.spanContext();\n const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : spanIsSampled(parentSpan);\n\n const childSpan = sampled\n ? new SentrySpan({\n ...spanArguments,\n parentSpanId: spanId,\n traceId,\n sampled,\n })\n : new SentryNonRecordingSpan({ traceId });\n\n addChildSpanToSpan(parentSpan, childSpan);\n\n const client = getClient();\n if (client) {\n client.emit('spanStart', childSpan);\n // If it has an endTimestamp, it's already ended\n if (spanArguments.endTimestamp) {\n client.emit('spanEnd', childSpan);\n }\n }\n\n return childSpan;\n}\n\nfunction getParentSpan(scope) {\n const span = _getSpanForScope(scope) ;\n\n if (!span) {\n return undefined;\n }\n\n const client = getClient();\n const options = client ? client.getOptions() : {};\n if (options.parentSpanIsAlwaysRootSpan) {\n return getRootSpan(span) ;\n }\n\n return span;\n}\n\nfunction getActiveSpanWrapper(parentSpan) {\n return parentSpan !== undefined\n ? (callback) => {\n return withActiveSpan(parentSpan, callback);\n }\n : (callback) => callback();\n}\n\nexport { continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan };\n//# sourceMappingURL=trace.js.map\n","import { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { timestampInSeconds } from '../utils-hoist/time.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope } from '../utils/spanOnScope.js';\nimport { getActiveSpan, spanTimeInputToSeconds, getSpanDescendants, spanToJSON, removeChildSpanFromSpan } from '../utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { startInactiveSpan } from './trace.js';\n\nconst TRACING_DEFAULTS = {\n idleTimeout: 1000,\n finalTimeout: 30000,\n childSpanTimeout: 15000,\n};\n\nconst FINISH_REASON_HEARTBEAT_FAILED = 'heartbeatFailed';\nconst FINISH_REASON_IDLE_TIMEOUT = 'idleTimeout';\nconst FINISH_REASON_FINAL_TIMEOUT = 'finalTimeout';\nconst FINISH_REASON_EXTERNAL_FINISH = 'externalFinish';\n\n/**\n * An idle span is a span that automatically finishes. It does this by tracking child spans as activities.\n * An idle span is always the active span.\n */\nfunction startIdleSpan(startSpanOptions, options = {}) {\n // Activities store a list of active spans\n const activities = new Map();\n\n // We should not use heartbeat if we finished a span\n let _finished = false;\n\n // Timer that tracks idleTimeout\n let _idleTimeoutID;\n\n // The reason why the span was finished\n let _finishReason = FINISH_REASON_EXTERNAL_FINISH;\n\n let _autoFinishAllowed = !options.disableAutoFinish;\n\n const _cleanupHooks = [];\n\n const {\n idleTimeout = TRACING_DEFAULTS.idleTimeout,\n finalTimeout = TRACING_DEFAULTS.finalTimeout,\n childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n beforeSpanEnd,\n } = options;\n\n const client = getClient();\n\n if (!client || !hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const scope = getCurrentScope();\n const previousActiveSpan = getActiveSpan();\n const span = _startIdleSpan(startSpanOptions);\n\n // We patch span.end to ensure we can run some things before the span is ended\n // eslint-disable-next-line @typescript-eslint/unbound-method\n span.end = new Proxy(span.end, {\n apply(target, thisArg, args) {\n if (beforeSpanEnd) {\n beforeSpanEnd(span);\n }\n\n // Just ensuring that this keeps working, even if we ever have more arguments here\n const [definedEndTimestamp, ...rest] = args;\n const timestamp = definedEndTimestamp || timestampInSeconds();\n const spanEndTimestamp = spanTimeInputToSeconds(timestamp);\n\n // Ensure we end with the last span timestamp, if possible\n const spans = getSpanDescendants(span).filter(child => child !== span);\n\n // If we have no spans, we just end, nothing else to do here\n if (!spans.length) {\n onIdleSpanEnded(spanEndTimestamp);\n return Reflect.apply(target, thisArg, [spanEndTimestamp, ...rest]);\n }\n\n const childEndTimestamps = spans\n .map(span => spanToJSON(span).timestamp)\n .filter(timestamp => !!timestamp) ;\n const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : undefined;\n\n // In reality this should always exist here, but type-wise it may be undefined...\n const spanStartTimestamp = spanToJSON(span).start_timestamp;\n\n // The final endTimestamp should:\n // * Never be before the span start timestamp\n // * Be the latestSpanEndTimestamp, if there is one, and it is smaller than the passed span end timestamp\n // * Otherwise be the passed end timestamp\n // Final timestamp can never be after finalTimeout\n const endTimestamp = Math.min(\n spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1000 : Infinity,\n Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)),\n );\n\n onIdleSpanEnded(endTimestamp);\n return Reflect.apply(target, thisArg, [endTimestamp, ...rest]);\n },\n });\n\n /**\n * Cancels the existing idle timeout, if there is one.\n */\n function _cancelIdleTimeout() {\n if (_idleTimeoutID) {\n clearTimeout(_idleTimeoutID);\n _idleTimeoutID = undefined;\n }\n }\n\n /**\n * Restarts idle timeout, if there is no running idle timeout it will start one.\n */\n function _restartIdleTimeout(endTimestamp) {\n _cancelIdleTimeout();\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n span.end(endTimestamp);\n }\n }, idleTimeout);\n }\n\n /**\n * Restarts child span timeout, if there is none running it will start one.\n */\n function _restartChildSpanTimeout(endTimestamp) {\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n span.end(endTimestamp);\n }\n }, childSpanTimeout);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n function _pushActivity(spanId) {\n _cancelIdleTimeout();\n activities.set(spanId, true);\n\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1000);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n function _popActivity(spanId) {\n if (activities.has(spanId)) {\n activities.delete(spanId);\n }\n\n if (activities.size === 0) {\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartIdleTimeout(endTimestamp + idleTimeout / 1000);\n }\n }\n\n function onIdleSpanEnded(endTimestamp) {\n _finished = true;\n activities.clear();\n\n _cleanupHooks.forEach(cleanup => cleanup());\n\n _setSpanForScope(scope, previousActiveSpan);\n\n const spanJSON = spanToJSON(span);\n\n const { start_timestamp: startTimestamp } = spanJSON;\n // This should never happen, but to make TS happy...\n if (!startTimestamp) {\n return;\n }\n\n const attributes = spanJSON.data || {};\n if (!attributes[SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n }\n\n logger.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n\n const childSpans = getSpanDescendants(span).filter(child => child !== span);\n\n let discardedSpans = 0;\n childSpans.forEach(childSpan => {\n // We cancel all pending spans with status \"cancelled\" to indicate the idle span was finished early\n if (childSpan.isRecording()) {\n childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'cancelled' });\n childSpan.end(endTimestamp);\n DEBUG_BUILD &&\n logger.log('[Tracing] Cancelling span since span ended early', JSON.stringify(childSpan, undefined, 2));\n }\n\n const childSpanJSON = spanToJSON(childSpan);\n const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n\n const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n\n // Add a delta with idle timeout so that we prevent false positives\n const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1000;\n const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;\n\n if (DEBUG_BUILD) {\n const stringifiedSpan = JSON.stringify(childSpan, undefined, 2);\n if (!spanStartedBeforeIdleSpanEnd) {\n logger.log('[Tracing] Discarding span since it happened after idle span was finished', stringifiedSpan);\n } else if (!spanEndedBeforeFinalTimeout) {\n logger.log('[Tracing] Discarding span since it finished after idle span final timeout', stringifiedSpan);\n }\n }\n\n if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n removeChildSpanFromSpan(span, childSpan);\n discardedSpans++;\n }\n });\n\n if (discardedSpans > 0) {\n span.setAttribute('sentry.idle_span_discarded_spans', discardedSpans);\n }\n }\n\n _cleanupHooks.push(\n client.on('spanStart', startedSpan => {\n // If we already finished the idle span,\n // or if this is the idle span itself being started,\n // or if the started span has already been closed,\n // we don't care about it for activity\n if (_finished || startedSpan === span || !!spanToJSON(startedSpan).timestamp) {\n return;\n }\n\n const allSpans = getSpanDescendants(span);\n\n // If the span that was just started is a child of the idle span, we should track it\n if (allSpans.includes(startedSpan)) {\n _pushActivity(startedSpan.spanContext().spanId);\n }\n }),\n );\n\n _cleanupHooks.push(\n client.on('spanEnd', endedSpan => {\n if (_finished) {\n return;\n }\n\n _popActivity(endedSpan.spanContext().spanId);\n }),\n );\n\n _cleanupHooks.push(\n client.on('idleSpanEnableAutoFinish', spanToAllowAutoFinish => {\n if (spanToAllowAutoFinish === span) {\n _autoFinishAllowed = true;\n _restartIdleTimeout();\n\n if (activities.size) {\n _restartChildSpanTimeout();\n }\n }\n }),\n );\n\n // We only start the initial idle timeout if we are not delaying the auto finish\n if (!options.disableAutoFinish) {\n _restartIdleTimeout();\n }\n\n setTimeout(() => {\n if (!_finished) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' });\n _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n span.end();\n }\n }, finalTimeout);\n\n return span;\n}\n\nfunction _startIdleSpan(options) {\n const span = startInactiveSpan(options);\n\n _setSpanForScope(getCurrentScope(), span);\n\n DEBUG_BUILD && logger.log('[Tracing] Started span is an idle span');\n\n return span;\n}\n\nexport { TRACING_DEFAULTS, startIdleSpan };\n//# sourceMappingURL=idleSpan.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isThenable } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { SyncPromise } from './utils-hoist/syncpromise.js';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n) {\n return new SyncPromise((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) ;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nlet parsedStackResults;\nlet lastKeysCount;\nlet cachedFilenameDebugIds;\n\n/**\n * Returns a map of filenames to debug identifiers.\n */\nfunction getFilenameToDebugIdMap(stackParser) {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n if (!debugIdMap) {\n return {};\n }\n\n const debugIdKeys = Object.keys(debugIdMap);\n\n // If the count of registered globals hasn't changed since the last call, we\n // can just return the cached result.\n if (cachedFilenameDebugIds && debugIdKeys.length === lastKeysCount) {\n return cachedFilenameDebugIds;\n }\n\n lastKeysCount = debugIdKeys.length;\n\n // Build a map of filename -> debug_id.\n cachedFilenameDebugIds = debugIdKeys.reduce((acc, stackKey) => {\n if (!parsedStackResults) {\n parsedStackResults = {};\n }\n\n const result = parsedStackResults[stackKey];\n\n if (result) {\n acc[result[0]] = result[1];\n } else {\n const parsedStack = stackParser(stackKey);\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n const filename = stackFrame && stackFrame.filename;\n const debugId = debugIdMap[stackKey];\n\n if (filename && debugId) {\n acc[filename] = debugId;\n parsedStackResults[stackKey] = [filename, debugId];\n break;\n }\n }\n }\n\n return acc;\n }, {});\n\n return cachedFilenameDebugIds;\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nfunction getDebugImagesForResources(\n stackParser,\n resource_paths,\n) {\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n if (!filenameDebugIdMap) {\n return [];\n }\n\n const images = [];\n for (const path of resource_paths) {\n if (path && filenameDebugIdMap[path]) {\n images.push({\n type: 'sourcemap',\n code_file: path,\n debug_id: filenameDebugIdMap[path] ,\n });\n }\n }\n\n return images;\n}\n\nexport { getDebugImagesForResources, getFilenameToDebugIdMap };\n//# sourceMappingURL=debug-ids.js.map\n","import { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { dropUndefinedKeys } from '../utils-hoist/object.js';\nimport { merge } from './merge.js';\nimport { spanToTraceContext, getRootSpan, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n transactionName,\n span,\n } = mergeData;\n\n mergeAndOverwriteScopeData(data, 'extra', extra);\n mergeAndOverwriteScopeData(data, 'tags', tags);\n mergeAndOverwriteScopeData(data, 'user', user);\n mergeAndOverwriteScopeData(data, 'contexts', contexts);\n\n data.sdkProcessingMetadata = merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n data[prop] = merge(data[prop], mergeVal, 1);\n}\n\nfunction applyDataToEvent(event, data) {\n const { extra, tags, user, contexts, level, transactionName } = data;\n\n const cleanedExtra = dropUndefinedKeys(extra);\n if (cleanedExtra && Object.keys(cleanedExtra).length) {\n event.extra = { ...cleanedExtra, ...event.extra };\n }\n\n const cleanedTags = dropUndefinedKeys(tags);\n if (cleanedTags && Object.keys(cleanedTags).length) {\n event.tags = { ...cleanedTags, ...event.tags };\n }\n\n const cleanedUser = dropUndefinedKeys(user);\n if (cleanedUser && Object.keys(cleanedUser).length) {\n event.user = { ...cleanedUser, ...event.user };\n }\n\n const cleanedContexts = dropUndefinedKeys(contexts);\n if (cleanedContexts && Object.keys(cleanedContexts).length) {\n event.contexts = { ...cleanedContexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n // transaction events get their `transaction` from the root span name\n if (transactionName && event.type !== 'transaction') {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event, span) {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts,\n };\n\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n\n const rootSpan = getRootSpan(span);\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === 'transaction') {\n event.transaction = transactionName;\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint\n ? Array.isArray(event.fingerprint)\n ? event.fingerprint\n : [event.fingerprint]\n : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalScope } from '../currentScopes.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { getFilenameToDebugIdMap } from '../utils-hoist/debug-ids.js';\nimport { uuid4, addExceptionMechanism } from '../utils-hoist/misc.js';\nimport { normalize } from '../utils-hoist/normalize.js';\nimport { truncate } from '../utils-hoist/string.js';\nimport { dateTimestampInSeconds } from '../utils-hoist/time.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n options,\n event,\n hint,\n scope,\n client,\n isolationScope,\n) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n const prepared = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n if (client) {\n client.emit('applyFrameMetadata', event);\n }\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Scope.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n const eventProcessors = [\n ...clientEventProcessors,\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n *\n * Only exported for tests.\n *\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n // empty strings do not make sense for environment, release, and dist\n // so we handle them the same as if they were not provided\n event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n\n if (!event.release && release) {\n event.release = release;\n }\n\n if (!event.dist && dist) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (filenameDebugIdMap && frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id,\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n\n const normalized = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n return {\n ...span,\n ...(span.data && {\n data: normalize(span.data, depth, maxBreadth),\n }),\n };\n });\n }\n\n // event.contexts.flags (FeatureFlagContext) stores context for our feature\n // flag integrations. It has a greater nesting depth than our other typed\n // Contexts, so we re-normalize with a fixed depth of 3 here. We do not want\n // to skip this in case of conflicting, user-provided context.\n if (event.contexts && event.contexts.flags && normalized.contexts) {\n normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n }\n\n return normalized;\n}\n\nfunction getFinalScope(\n scope,\n captureContext,\n) {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n hint,\n) {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint,\n) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyClientOptions, applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getCurrentScope, getIsolationScope, getClient, withIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { isThenable } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport { timestampInSeconds } from './utils-hoist/time.js';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(exception, hint) {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(message, captureContext) {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nfunction setContext(name, context) {\n getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n monitorSlug,\n callback,\n upsertMonitorConfig,\n) {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status) {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n return withIsolationScope(() => {\n let maybePromiseResult;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n e => {\n finishCheckIn('error');\n throw e;\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n const client = getClient();\n return !!client && client.getOptions().enabled !== false && !!client.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const client = getClient();\n // TODO (v8): Remove currentScope and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nfunction captureSession(end = false) {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };\n//# sourceMappingURL=exports.js.map\n","import { makeDsn, dsnToString } from './utils-hoist/dsn.js';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n const params = {\n sentry_version: SENTRY_API_VERSION,\n };\n\n if (dsn.publicKey) {\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n params.sentry_key = dsn.publicKey;\n }\n\n if (sdkInfo) {\n params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n }\n\n return new URLSearchParams(params).toString();\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(\n dsnLike,\n dialogOptions\n\n,\n) {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return '';\n }\n\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'onClose') {\n continue;\n }\n\n if (key === 'user') {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './utils-hoist/logger.js';\n\nconst installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preserve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations) {\n const integrationsByName = {};\n\n integrations.forEach((currentInstance) => {\n const { name } = currentInstance;\n\n const existingInstance = integrationsByName[name];\n\n // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n // default instance to overwrite an existing user instance\n if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n return;\n }\n\n integrationsByName[name] = currentInstance;\n });\n\n return Object.values(integrationsByName);\n}\n\n/** Gets integrations to install */\nfunction getIntegrationsToSetup(options) {\n const defaultIntegrations = options.defaultIntegrations || [];\n const userIntegrations = options.integrations;\n\n // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n defaultIntegrations.forEach((integration) => {\n integration.isDefaultInstance = true;\n });\n\n let integrations;\n\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === 'function') {\n const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n } else {\n integrations = defaultIntegrations;\n }\n\n const finalIntegrations = filterDuplicates(integrations);\n\n // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n const debugIndex = finalIntegrations.findIndex(integration => integration.name === 'Debug');\n if (debugIndex > -1) {\n const [debugInstance] = finalIntegrations.splice(debugIndex, 1) ;\n finalIntegrations.push(debugInstance);\n }\n\n return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(client, integrations) {\n const integrationIndex = {};\n\n integrations.forEach(integration => {\n // guard against empty provided integrations\n if (integration) {\n setupIntegration(client, integration, integrationIndex);\n }\n });\n\n return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nfunction afterSetupIntegrations(client, integrations) {\n for (const integration of integrations) {\n // guard against empty provided integrations\n if (integration && integration.afterAllSetup) {\n integration.afterAllSetup(client);\n }\n }\n}\n\n/** Setup a single integration. */\nfunction setupIntegration(client, integration, integrationIndex) {\n if (integrationIndex[integration.name]) {\n DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n return;\n }\n integrationIndex[integration.name] = integration;\n\n // `setupOnce` is only called the first time\n if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === 'function') {\n integration.setupOnce();\n installedIntegrations.push(integration.name);\n }\n\n // `setup` is run for each client\n if (integration.setup && typeof integration.setup === 'function') {\n integration.setup(client);\n }\n\n if (typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration) ;\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n\n if (typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration) ;\n\n const processor = Object.assign((event, hint) => callback(event, hint, client), {\n id: integration.name,\n });\n\n client.addEventProcessor(processor);\n }\n\n DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nfunction addIntegration(integration) {\n const client = getClient();\n\n if (!client) {\n DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n return;\n }\n\n client.addIntegration(integration);\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nfunction defineIntegration(fn) {\n return fn;\n}\n\nexport { addIntegration, afterSetupIntegrations, defineIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n discarded_events,\n dsn,\n timestamp,\n) {\n const clientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","/** An error emitted by Sentry SDKs and related utilities. */\nclass SentryError extends Error {\n\n constructor(\n message,\n logLevel = 'warn',\n ) {\n super(message);this.message = message;\n this.logLevel = logLevel;\n }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { getTraceContextFromScope, getCurrentScope, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromScope } from './tracing/dynamicSamplingContext.js';\nimport { createClientReportEnvelope } from './utils-hoist/clientreport.js';\nimport { makeDsn, dsnToString } from './utils-hoist/dsn.js';\nimport { addItemToEnvelope, createAttachmentEnvelopeItem } from './utils-hoist/envelope.js';\nimport { SentryError } from './utils-hoist/error.js';\nimport { isPrimitive, isThenable, isPlainObject, isParameterizedString } from './utils-hoist/is.js';\nimport { logger, consoleSandbox } from './utils-hoist/logger.js';\nimport { uuid4, checkOrSetAlreadyCaught } from './utils-hoist/misc.js';\nimport { resolvedSyncPromise, SyncPromise, rejectedSyncPromise } from './utils-hoist/syncpromise.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\nimport { showSpanDropWarning } from './utils/spanUtils.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nclass BaseClient {\n /** Options passed to the SDK. */\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n /** Array of set up integrations. */\n\n /** Number of calls being processed */\n\n /** Holds flushable */\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n constructor(options) {\n this._options = options;\n this._integrations = {};\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n }\n\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(\n this._dsn,\n options.tunnel,\n options._metadata ? options._metadata.sdk : undefined,\n );\n this._transport = options.transport({\n tunnel: this._options.tunnel,\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n }\n\n // TODO(v9): Remove this deprecation warning\n const tracingOptions = ['enableTracing', 'tracesSampleRate', 'tracesSampler'] ;\n const undefinedOption = tracingOptions.find(option => option in options && options[option] == undefined);\n if (undefinedOption) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] Deprecation warning: \\`${undefinedOption}\\` is set to undefined, which leads to tracing being enabled. In v9, a value of \\`undefined\\` will result in tracing being disabled.`,\n );\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint, scope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n this._process(\n this.eventFromException(exception, hintWithEventId).then(event =>\n this._captureEvent(event, hintWithEventId, scope),\n ),\n );\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(\n message,\n level,\n hint,\n currentScope,\n ) {\n const hintWithEventId = {\n event_id: uuid4(),\n ...hint,\n };\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n : this.eventFromException(message, hintWithEventId);\n\n this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint, currentScope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n\n this._process(this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureSession(session) {\n if (!(typeof session.release === 'string')) {\n DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this.sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n updateSession(session, { init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n getDsn() {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n getOptions() {\n return this._options;\n }\n\n /**\n * @see SdkMetadata\n *\n * @return The metadata of the SDK\n */\n getSdkMetadata() {\n return this._options._metadata;\n }\n\n /**\n * @inheritDoc\n */\n getTransport() {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n flush(timeout) {\n const transport = this._transport;\n if (transport) {\n this.emit('flush');\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n });\n } else {\n return resolvedSyncPromise(true);\n }\n }\n\n /**\n * @inheritDoc\n */\n close(timeout) {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n this.emit('close');\n return result;\n });\n }\n\n /** Get all installed event processors. */\n getEventProcessors() {\n return this._eventProcessors;\n }\n\n /** @inheritDoc */\n addEventProcessor(eventProcessor) {\n this._eventProcessors.push(eventProcessor);\n }\n\n /** @inheritdoc */\n init() {\n if (\n this._isEnabled() ||\n // Force integrations to be setup even if no DSN was set when we have\n // Spotlight enabled. This is particularly important for browser as we\n // don't support the `spotlight` option there and rely on the users\n // adding the `spotlightBrowserIntegration()` to their integrations which\n // wouldn't get initialized with the check below when there's no DSN set.\n this._options.integrations.some(({ name }) => name.startsWith('Spotlight'))\n ) {\n this._setupIntegrations();\n }\n }\n\n /**\n * Gets an installed integration by its name.\n *\n * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n */\n getIntegrationByName(integrationName) {\n return this._integrations[integrationName] ;\n }\n\n /**\n * @inheritDoc\n */\n addIntegration(integration) {\n const isAlreadyInstalled = this._integrations[integration.name];\n\n // This hook takes care of only installing if not already installed\n setupIntegration(this, integration, this._integrations);\n // Here we need to check manually to make sure to not run this multiple times\n if (!isAlreadyInstalled) {\n afterSetupIntegrations(this, [integration]);\n }\n }\n\n /**\n * @inheritDoc\n */\n sendEvent(event, hint = {}) {\n this.emit('beforeSendEvent', event, hint);\n\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n }\n\n const promise = this.sendEnvelope(env);\n if (promise) {\n promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n }\n }\n\n /**\n * @inheritDoc\n */\n sendSession(session) {\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(env);\n }\n\n /**\n * @inheritDoc\n */\n recordDroppedEvent(reason, category, eventOrCount) {\n if (this._options.sendClientReports) {\n // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n // If event is passed as third argument, we assume this is a count of 1\n const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\n // We want to track each category (error, transaction, session, replay_event) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n this._outcomes[key] = (this._outcomes[key] || 0) + count;\n }\n }\n\n // Keep on() & emit() signatures in sync with types' client.ts interface\n /* eslint-disable @typescript-eslint/unified-signatures */\n\n /** @inheritdoc */\n\n /** @inheritdoc */\n on(hook, callback) {\n const hooks = (this._hooks[hook] = this._hooks[hook] || []);\n\n // @ts-expect-error We assume the types are correct\n hooks.push(callback);\n\n // This function returns a callback execution handler that, when invoked,\n // deregisters a callback. This is crucial for managing instances where callbacks\n // need to be unregistered to prevent self-referencing in callback closures,\n // ensuring proper garbage collection.\n return () => {\n // @ts-expect-error We assume the types are correct\n const cbIndex = hooks.indexOf(callback);\n if (cbIndex > -1) {\n hooks.splice(cbIndex, 1);\n }\n };\n }\n\n /** @inheritdoc */\n\n /** @inheritdoc */\n emit(hook, ...rest) {\n const callbacks = this._hooks[hook];\n if (callbacks) {\n callbacks.forEach(callback => callback(...rest));\n }\n }\n\n /**\n * @inheritdoc\n */\n sendEnvelope(envelope) {\n this.emit('beforeEnvelope', envelope);\n\n if (this._isEnabled() && this._transport) {\n return this._transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending envelope:', reason);\n return reason;\n });\n }\n\n DEBUG_BUILD && logger.error('Transport disabled');\n\n return resolvedSyncPromise({});\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Setup integrations for this client. */\n _setupIntegrations() {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n }\n\n /** Updates existing session based on the provided event */\n _updateSessionFromEvent(session, event) {\n let crashed = event.level === 'fatal';\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n _isClientDoneProcessing(timeout) {\n return new SyncPromise(resolve => {\n let ticked = 0;\n const tick = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Determines whether this SDK is enabled and a transport is present. */\n _isEnabled() {\n return this.getOptions().enabled !== false && this._transport !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A new event with more information.\n */\n _prepareEvent(\n event,\n hint,\n currentScope = getCurrentScope(),\n isolationScope = getIsolationScope(),\n ) {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations.length > 0) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n if (!event.type) {\n isolationScope.setLastEventId(event.event_id || hint.event_id);\n }\n\n return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n evt.contexts = {\n trace: getTraceContextFromScope(currentScope),\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\n\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata,\n };\n\n return evt;\n });\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n _captureEvent(event, hint = {}, scope) {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n if (DEBUG_BUILD) {\n // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n // control flow, log just the message (no stack) as a log-level log.\n if (reason instanceof SentryError && reason.logLevel === 'log') {\n logger.log(reason.message);\n } else {\n logger.warn(reason);\n }\n }\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n _processEvent(event, hint, currentScope) {\n const options = this.getOptions();\n const { sampleRate } = options;\n\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || 'error';\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n this.recordDroppedEvent('sample_rate', 'error', event);\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n 'log',\n ),\n );\n }\n\n const dataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n return this._prepareEvent(event, hint, currentScope, capturedSpanIsolationScope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory, event);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(this, options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory, event);\n if (isTransaction) {\n const spans = event.spans || [];\n // the transaction itself counts as one span, plus all the child spans that are added\n const spanCount = 1 + spans.length;\n this.recordDroppedEvent('before_send', 'span', spanCount);\n }\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = currentScope && currentScope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n if (isTransaction) {\n const spanCountBefore =\n (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n 0;\n const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n const droppedSpanCount = spanCountBefore - spanCountAfter;\n if (droppedSpanCount > 0) {\n this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n }\n }\n\n // None of the Sentry built event processor will update transaction name,\n // so if the transaction name has been changed by an event processor, we know\n // it has to come from custom event processor added by a user\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = 'custom';\n processedEvent.transaction_info = {\n ...transactionInfo,\n source,\n };\n }\n\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n _process(promise) {\n this._numProcessing++;\n void promise.then(\n value => {\n this._numProcessing--;\n return value;\n },\n reason => {\n this._numProcessing--;\n return reason;\n },\n );\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n _clearOutcomes() {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.entries(outcomes).map(([key, quantity]) => {\n const [reason, category] = key.split(':') ;\n return {\n reason,\n category,\n quantity,\n };\n });\n }\n\n /**\n * Sends client reports as an envelope.\n */\n _flushOutcomes() {\n DEBUG_BUILD && logger.log('Flushing outcomes...');\n\n const outcomes = this._clearOutcomes();\n\n if (outcomes.length === 0) {\n DEBUG_BUILD && logger.log('No outcomes to send');\n return;\n }\n\n // This is really the only place where we want to check for a DSN and only send outcomes then\n if (!this._dsn) {\n DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n return;\n }\n\n DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n beforeSendResult,\n beforeSendLabel,\n) {\n const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n if (isThenable(beforeSendResult)) {\n return beforeSendResult.then(\n event => {\n if (!isPlainObject(event) && event !== null) {\n throw new SentryError(invalidValueError);\n }\n return event;\n },\n e => {\n throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n },\n );\n } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n throw new SentryError(invalidValueError);\n }\n return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n client,\n options,\n event,\n hint,\n) {\n const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n\n if (isErrorEvent(event) && beforeSend) {\n return beforeSend(event, hint);\n }\n\n if (isTransactionEvent(event)) {\n if (event.spans && beforeSendSpan) {\n const processedSpans = [];\n for (const span of event.spans) {\n const processedSpan = beforeSendSpan(span);\n if (processedSpan) {\n processedSpans.push(processedSpan);\n } else {\n showSpanDropWarning();\n client.recordDroppedEvent('before_send', 'span');\n }\n }\n event.spans = processedSpans;\n }\n\n if (beforeSendTransaction) {\n if (event.spans) {\n // We store the # of spans before processing in SDK metadata,\n // so we can compare it afterwards to determine how many spans were dropped\n const spanCountBefore = event.spans.length;\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n spanCountBeforeProcessing: spanCountBefore,\n };\n }\n return beforeSendTransaction(event, hint);\n }\n }\n\n return event;\n}\n\nfunction isErrorEvent(event) {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\nexport { BaseClient };\n//# sourceMappingURL=baseclient.js.map\n","import { getCurrentScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { logger, consoleSandbox } from './utils-hoist/logger.js';\n\n/** A class object that can instantiate Client objects. */\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nfunction initAndBind(\n clientClass,\n options,\n) {\n if (options.debug === true) {\n if (DEBUG_BUILD) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n });\n }\n }\n const scope = getCurrentScope();\n scope.update(options.initialScope);\n\n const client = new clientClass(options);\n setCurrentClient(client);\n client.init();\n return client;\n}\n\n/**\n * Make the given client the current client.\n */\nfunction setCurrentClient(client) {\n getCurrentScope().setClient(client);\n}\n\nexport { initAndBind, setCurrentClient };\n//# sourceMappingURL=sdk.js.map\n","import { SentryError } from './error.js';\nimport { rejectedSyncPromise, SyncPromise, resolvedSyncPromise } from './syncpromise.js';\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nfunction makePromiseBuffer(limit) {\n const buffer = [];\n\n function isReady() {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike<T>\n * @returns Removed promise.\n */\n function remove(task) {\n return buffer.splice(buffer.indexOf(task), 1)[0] || Promise.resolve(undefined);\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n * PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer) {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout) {\n return new SyncPromise((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n\nexport { makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nfunction disabledUntil(limits, dataCategory) {\n return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n limits,\n { statusCode, headers },\n now = Date.now(),\n) {\n const updatedRateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers && headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n * <header>,<header>,..\n * where each <header> is of the form\n * <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n * where\n * <retry_after> is a delay in seconds\n * <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * <category>;<category>;...\n * <scope> is what's being limited (org, project, or key) - ignored by SDK\n * <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n * <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n * Only present if rate limit applies to the metric_bucket data category.\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories, , , namespaces] = limit.split(':', 5) ;\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(';')) {\n if (category === 'metric_bucket') {\n // namespaces will be present when category === 'metric_bucket'\n if (!namespaces || namespaces.split(';').includes('custom')) {\n updatedRateLimits[category] = now + delay;\n }\n } else {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1000;\n }\n\n return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { forEachEnvelopeItem, envelopeItemTypeToDataCategory, createEnvelope, serializeEnvelope } from '../utils-hoist/envelope.js';\nimport { SentryError } from '../utils-hoist/error.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { makePromiseBuffer } from '../utils-hoist/promisebuffer.js';\nimport { isRateLimited, updateRateLimits } from '../utils-hoist/ratelimit.js';\nimport { resolvedSyncPromise } from '../utils-hoist/syncpromise.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n options,\n makeRequest,\n buffer = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n) {\n let rateLimits = {};\n const flush = (timeout) => buffer.drain(timeout);\n\n function send(envelope) {\n const filteredEnvelopeItems = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, dataCategory)) {\n const event = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise({});\n }\n\n const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason) => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = () =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise({});\n } else {\n throw error;\n }\n },\n );\n }\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item, type) {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item )[1] : undefined;\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { SDK_VERSION } from '../utils-hoist/version.js';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\n const metadata = options._metadata || {};\n\n if (!metadata.sdk) {\n metadata.sdk = {\n name: `sentry.javascript.${name}`,\n packages: names.map(name => ({\n name: `${source}:@sentry/${name}`,\n version: SDK_VERSION,\n })),\n version: SDK_VERSION,\n };\n }\n\n options._metadata = metadata;\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getClient, getCurrentScope } from '../currentScopes.js';\nimport { isEnabled } from '../exports.js';\nimport '../tracing/errors.js';\nimport '../utils-hoist/debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport '../debug-build.js';\nimport '../utils-hoist/time.js';\nimport { getActiveSpan, spanToTraceHeader } from './spanUtils.js';\nimport { TRACEPARENT_REGEXP, generateSentryTraceHeader } from '../utils-hoist/tracing.js';\nimport { getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromScope } from '../tracing/dynamicSamplingContext.js';\nimport { dynamicSamplingContextToSentryBaggageHeader } from '../utils-hoist/baggage.js';\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values to strings. These values can be used to propagate\n * a trace via our tracing Http headers or Html `<meta>` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nfunction getTraceData(options = {}) {\n const client = getClient();\n if (!isEnabled() || !client) {\n return {};\n }\n\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getTraceData) {\n return acs.getTraceData(options);\n }\n\n const scope = getCurrentScope();\n const span = options.span || getActiveSpan();\n const sentryTrace = span ? spanToTraceHeader(span) : scopeToTraceHeader(scope);\n const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope);\n const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc);\n\n const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n if (!isValidSentryTraceHeader) {\n logger.warn('Invalid sentry-trace data. Cannot generate trace data');\n return {};\n }\n\n return {\n 'sentry-trace': sentryTrace,\n baggage,\n };\n}\n\n/**\n * Get a sentry-trace header value for the given scope.\n */\nfunction scopeToTraceHeader(scope) {\n // TODO(v9): Use generateSpanId() instead of spanId\n // eslint-disable-next-line deprecation/deprecation\n const { traceId, sampled, spanId } = scope.getPropagationContext();\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\nexport { getTraceData };\n//# sourceMappingURL=traceData.js.map\n","import { getClient, getIsolationScope } from './currentScopes.js';\nimport { consoleSandbox } from './utils-hoist/logger.js';\nimport { dateTimestampInSeconds } from './utils-hoist/time.js';\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nfunction addBreadcrumb(breadcrumb, hint) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { getOriginalFunction } from '../utils-hoist/object.js';\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString;\n\n // intrinsics (like Function.prototype) might be immutable in some environments\n // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n try {\n Function.prototype.toString = function ( ...args) {\n const originalFunction = getOriginalFunction(this);\n const context =\n SETUP_CLIENTS.has(getClient() ) && originalFunction !== undefined ? originalFunction : this;\n return originalFunctionToString.apply(context, args);\n };\n } catch (e) {\n // ignore errors here, just don't patch this\n }\n },\n setup(client) {\n SETUP_CLIENTS.set(client, true);\n },\n };\n}) ;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n * integrations: [\n * functionToStringIntegration(),\n * ],\n * });\n * ```\n */\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getEventDescription } from '../utils-hoist/misc.js';\nimport { stringMatchesSomePattern } from '../utils-hoist/string.js';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n /^Script error\\.?$/,\n /^Javascript error: Script error\\.? on line 0$/,\n /^ResizeObserver loop completed with undelivered notifications.$/, // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n /^Cannot redefine property: googletag$/, // This is thrown when google tag manager is used in combination with an ad blocker\n /^Can't find variable: gmo$/, // Error from Google Search App https://issuetracker.google.com/issues/396043331\n \"undefined is not an object (evaluating 'a.L')\", // Random error that happens but not actionable or noticeable to end-users.\n 'can\\'t redefine non-configurable property \"solana\"', // Probably a browser extension or custom browser (Brave) throwing this error\n \"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)\", // Error thrown by GTM, seemingly not affecting end-users\n \"Can't find variable: _AutofillCallbackHandler\", // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n /^Non-Error promise rejection captured with value: Object Not Found Matching Id:\\d+, MethodName:simulateEvent, ParamCount:\\d+$/, // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n /^Java exception was raised during method invocation$/, // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065)\n];\n\n/** Options for the InboundFilters integration */\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options = {}) => {\n return {\n name: INTEGRATION_NAME,\n processEvent(event, _hint, client) {\n const clientOptions = client.getOptions();\n const mergedOptions = _mergeOptions(options, clientOptions);\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n },\n };\n}) ;\n\nconst inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\nfunction _mergeOptions(\n internalOptions = {},\n clientOptions = {},\n) {\n return {\n allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n ignoreErrors: [\n ...(internalOptions.ignoreErrors || []),\n ...(clientOptions.ignoreErrors || []),\n ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n ],\n ignoreTransactions: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\nfunction _shouldDropEvent(event, options) {\n if (options.ignoreInternal && _isSentryError(event)) {\n DEBUG_BUILD &&\n logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n return true;\n }\n if (_isIgnoredError(event, options.ignoreErrors)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isUselessError(event)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not having an error message, error type or stacktrace.\\nEvent: ${getEventDescription(\n event,\n )}`,\n );\n return true;\n }\n if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n // If event.type, this is not an error\n if (event.type || !ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n return false;\n }\n\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event) {\n const possibleMessages = [];\n\n if (event.message) {\n possibleMessages.push(event.message);\n }\n\n let lastException;\n try {\n // @ts-expect-error Try catching to save bundle size\n lastException = event.exception.values[event.exception.values.length - 1];\n } catch (e) {\n // try catching to save bundle size checking existence of variables\n }\n\n if (lastException) {\n if (lastException.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n }\n\n return possibleMessages;\n}\n\nfunction _isSentryError(event) {\n try {\n // @ts-expect-error can't be a sentry error if undefined\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames = []) {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event) {\n try {\n let frames;\n try {\n // @ts-expect-error we only care about frames if the whole thing here is defined\n frames = event.exception.values[0].stacktrace.frames;\n } catch (e) {\n // ignore\n }\n return frames ? _getLastValidUrl(frames) : null;\n } catch (oO) {\n DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n\nfunction _isUselessError(event) {\n if (event.type) {\n // event is not an error\n return false;\n }\n\n // We only want to consider events for dropping that actually have recorded exception values.\n if (!event.exception || !event.exception.values || event.exception.values.length === 0) {\n return false;\n }\n\n return (\n // No top-level message\n !event.message &&\n // There are no exception values that have a stacktrace, a non-generic-Error type or value\n !event.exception.values.some(value => value.stacktrace || (value.type && value.type !== 'Error') || value.value)\n );\n}\n\nexport { inboundFiltersIntegration };\n//# sourceMappingURL=inboundfilters.js.map\n","import { isInstanceOf } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n exceptionFromErrorImplementation,\n parser,\n maxValueLimit = 250,\n key,\n limit,\n event,\n hint,\n) {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return;\n }\n\n // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n const originalException =\n event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n // We only create exception grouping if there is an exception in the event.\n if (originalException) {\n event.exception.values = truncateAggregateExceptions(\n aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n hint.originalException ,\n key,\n event.exception.values,\n originalException,\n 0,\n ),\n maxValueLimit,\n );\n }\n}\n\nfunction aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error,\n key,\n prevExceptions,\n exception,\n exceptionId,\n) {\n if (prevExceptions.length >= limit + 1) {\n return prevExceptions;\n }\n\n let newExceptions = [...prevExceptions];\n\n // Recursively call this function in order to walk down a chain of errors\n if (isInstanceOf(error[key], Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, error[key]);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error[key],\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n\n // This will create exception grouping for AggregateErrors\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n if (Array.isArray(error.errors)) {\n error.errors.forEach((childError, i) => {\n if (isInstanceOf(childError, Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, childError);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n childError,\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n });\n }\n\n return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId) {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n exception_id: exceptionId,\n };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n exception,\n source,\n exceptionId,\n parentId,\n) {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n type: 'chained',\n source,\n exception_id: exceptionId,\n parent_id: parentId,\n };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions, maxValueLength) {\n return exceptions.map(exception => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n return exception;\n });\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url) {\n if (!url) {\n return {};\n }\n\n const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n }\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n const query = match[6] || '';\n const fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n search: query,\n hash: fragment,\n relative: match[5] + query + fragment, // everything minus origin\n };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nfunction stripUrlQueryAndFragment(urlPath) {\n return (urlPath.split(/[?#]/, 1) )[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n *\n * @deprecated This function will be removed in the next major version.\n */\n// TODO(v9): Hoist this function into the places where we use it. (as it stands only react router v6 instrumentation)\nfunction getNumberOfUrlSegments(url) {\n // split at '/' or at '\\/' to split regex urls correctly\n return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlString(url) {\n const { protocol, host, path } = url;\n\n const filteredHost =\n (host &&\n host\n // Always filter out authority\n .replace(/^.*@/, '[filtered]:[filtered]@')\n // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n // TODO: Use new URL global if it exists\n .replace(/(:80)$/, '')\n .replace(/(:443)$/, '')) ||\n '';\n\n return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\nexport { getNumberOfUrlSegments, getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","import { CONSOLE_LEVELS, originalConsoleMethods } from '../logger.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addConsoleInstrumentationHandler(handler) {\n const type = 'console';\n addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level) {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args) {\n const handlerData = { args, level };\n triggerHandlers('console', handlerData);\n\n const log = originalConsoleMethods[level];\n log && log.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n\nexport { addConsoleInstrumentationHandler };\n//# sourceMappingURL=console.js.map\n","/**\n * @deprecated This variable has been deprecated and will be removed in the next major version.\n */\nconst validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nfunction severityLevelFromString(level) {\n return (\n level === 'warn' ? 'warning' : ['fatal', 'error', 'warning', 'log', 'info', 'debug'].includes(level) ? level : 'log'\n ) ;\n}\n\nexport { severityLevelFromString, validSeverityLevels };\n//# sourceMappingURL=severity.js.map\n","import { defineIntegration } from '../integration.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getFramesFromEvent } from '../utils-hoist/stacktrace.js';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n let previousEvent;\n\n return {\n name: INTEGRATION_NAME,\n processEvent(currentEvent) {\n // We want to ignore any non-error type events, e.g. transactions or replays\n // These should never be deduped, and also not be compared against as _previousEvent.\n if (currentEvent.type) {\n return currentEvent;\n }\n\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, previousEvent)) {\n DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n return (previousEvent = currentEvent);\n },\n };\n}) ;\n\n/**\n * Deduplication filter.\n */\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/** only exported for tests. */\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n if (!previousEvent) {\n return false;\n }\n\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n}\n\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n let currentFrames = getFramesFromEvent(currentEvent);\n let previousFrames = getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames ;\n previousFrames = previousFrames ;\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const frameA = previousFrames[i];\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint ;\n previousFingerprint = previousFingerprint ;\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n}\n\nfunction _getExceptionFromEvent(event) {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP } from './semanticAttributes.js';\nimport './tracing/errors.js';\nimport { isInstanceOf } from './utils-hoist/is.js';\nimport './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport './utils-hoist/time.js';\nimport './utils-hoist/syncpromise.js';\nimport { parseUrl } from './utils-hoist/url.js';\nimport { SENTRY_BAGGAGE_KEY_PREFIX } from './utils-hoist/baggage.js';\nimport './debug-build.js';\nimport { hasTracingEnabled } from './utils/hasTracingEnabled.js';\nimport { getActiveSpan } from './utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan.js';\nimport { setHttpStatus, SPAN_STATUS_ERROR } from './tracing/spanstatus.js';\nimport { startInactiveSpan } from './tracing/trace.js';\nimport { getTraceData } from './utils/traceData.js';\n\n/**\n * Create and track fetch request spans for usage in combination with `addFetchInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction instrumentFetchRequest(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n spanOrigin = 'auto.http.browser',\n) {\n if (!handlerData.fetchData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(handlerData.fetchData.url);\n\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n endSpan(span, handlerData);\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const { method, url } = handlerData.fetchData;\n\n const fullUrl = getFullURL(url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${method} ${url}`,\n attributes: {\n url,\n type: 'fetch',\n 'http.method': method,\n 'http.url': fullUrl,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n handlerData.fetchData.__span = span.spanContext().spanId;\n spans[span.spanContext().spanId] = span;\n\n if (shouldAttachHeaders(handlerData.fetchData.url)) {\n const request = handlerData.args[0];\n\n const options = handlerData.args[1] || {};\n\n const headers = _addTracingHeadersToFetchRequest(\n request,\n options,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n if (headers) {\n // Ensure this is actually set, if no options have been passed previously\n handlerData.args[1] = options;\n options.headers = headers;\n }\n }\n\n return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers.\n */\nfunction _addTracingHeadersToFetchRequest(\n request,\n fetchOptionsObj\n\n,\n span,\n) {\n const traceHeaders = getTraceData({ span });\n const sentryTrace = traceHeaders['sentry-trace'];\n const baggage = traceHeaders.baggage;\n\n // Nothing to do, when we return undefined here, the original headers will be used\n if (!sentryTrace) {\n return undefined;\n }\n\n const headers = fetchOptionsObj.headers || (isRequest(request) ? request.headers : undefined);\n\n if (!headers) {\n return { ...traceHeaders };\n } else if (isHeaders(headers)) {\n const newHeaders = new Headers(headers);\n newHeaders.set('sentry-trace', sentryTrace);\n\n if (baggage) {\n const prevBaggageHeader = newHeaders.get('baggage');\n if (prevBaggageHeader) {\n const prevHeaderStrippedFromSentryBaggage = stripBaggageHeaderOfSentryBaggageValues(prevBaggageHeader);\n newHeaders.set(\n 'baggage',\n // If there are non-sentry entries (i.e. if the stripped string is non-empty/truthy) combine the stripped header and sentry baggage header\n // otherwise just set the sentry baggage header\n prevHeaderStrippedFromSentryBaggage ? `${prevHeaderStrippedFromSentryBaggage},${baggage}` : baggage,\n );\n } else {\n newHeaders.set('baggage', baggage);\n }\n }\n\n return newHeaders;\n } else if (Array.isArray(headers)) {\n const newHeaders = [\n ...headers\n // Remove any existing sentry-trace headers\n .filter(header => {\n return !(Array.isArray(header) && header[0] === 'sentry-trace');\n })\n // Get rid of previous sentry baggage values in baggage header\n .map(header => {\n if (Array.isArray(header) && header[0] === 'baggage' && typeof header[1] === 'string') {\n const [headerName, headerValue, ...rest] = header;\n return [headerName, stripBaggageHeaderOfSentryBaggageValues(headerValue), ...rest];\n } else {\n return header;\n }\n }),\n // Attach the new sentry-trace header\n ['sentry-trace', sentryTrace],\n ];\n\n if (baggage) {\n // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.push(['baggage', baggage]);\n }\n\n return newHeaders ;\n } else {\n const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n let newBaggageHeaders = [];\n\n if (Array.isArray(existingBaggageHeader)) {\n newBaggageHeaders = existingBaggageHeader\n .map(headerItem =>\n typeof headerItem === 'string' ? stripBaggageHeaderOfSentryBaggageValues(headerItem) : headerItem,\n )\n .filter(headerItem => headerItem === '');\n } else if (existingBaggageHeader) {\n newBaggageHeaders.push(stripBaggageHeaderOfSentryBaggageValues(existingBaggageHeader));\n }\n\n if (baggage) {\n newBaggageHeaders.push(baggage);\n }\n\n return {\n ...(headers ),\n 'sentry-trace': sentryTrace,\n baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n };\n }\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers.\n *\n * @deprecated This function will not be exported anymore in v9.\n */\nfunction addTracingHeadersToFetchRequest(\n request,\n _client,\n _scope,\n fetchOptionsObj\n\n,\n span,\n) {\n return _addTracingHeadersToFetchRequest(request , fetchOptionsObj, span);\n}\n\nfunction getFullURL(url) {\n try {\n const parsed = new URL(url);\n return parsed.href;\n } catch (e) {\n return undefined;\n }\n}\n\nfunction endSpan(span, handlerData) {\n if (handlerData.response) {\n setHttpStatus(span, handlerData.response.status);\n\n const contentLength =\n handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n if (contentLength) {\n const contentLengthNum = parseInt(contentLength);\n if (contentLengthNum > 0) {\n span.setAttribute('http.response_content_length', contentLengthNum);\n }\n }\n } else if (handlerData.error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n span.end();\n}\n\nfunction stripBaggageHeaderOfSentryBaggageValues(baggageHeader) {\n return (\n baggageHeader\n .split(',')\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n .filter(baggageEntry => !baggageEntry.split('=')[0].startsWith(SENTRY_BAGGAGE_KEY_PREFIX))\n .join(',')\n );\n}\n\nfunction isRequest(request) {\n return typeof Request !== 'undefined' && isInstanceOf(request, Request);\n}\n\nfunction isHeaders(headers) {\n return typeof Headers !== 'undefined' && isInstanceOf(headers, Headers);\n}\n\nexport { addTracingHeadersToFetchRequest, instrumentFetchRequest };\n//# sourceMappingURL=fetch.js.map\n","/**\n * Determine a breadcrumb's log level (only `warning` or `error`) based on an HTTP status code.\n */\nfunction getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n // NOTE: undefined defaults to 'info' in Sentry\n if (statusCode === undefined) {\n return undefined;\n } else if (statusCode >= 400 && statusCode < 500) {\n return 'warning';\n } else if (statusCode >= 500) {\n return 'error';\n } else {\n return undefined;\n }\n}\n\nexport { getBreadcrumbLogLevelFromHttpStatusCode };\n//# sourceMappingURL=breadcrumb-log-level.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './logger.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMError() {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-expect-error It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMException() {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsFetch() {\n if (!('fetch' in WINDOW)) {\n return false;\n }\n\n try {\n new Headers();\n new Request('http://www.example.com');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * isNative checks if the given function is a native implementation\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFunction(func) {\n return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nfunction supportsNativeFetch() {\n if (typeof EdgeRuntime === 'string') {\n return true;\n }\n\n if (!supportsFetch()) {\n return false;\n }\n\n // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNativeFunction(WINDOW.fetch)) {\n return true;\n }\n\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n let result = false;\n const doc = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (doc && typeof (doc.createElement ) === 'function') {\n try {\n const sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFunction(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n DEBUG_BUILD &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReportingObserver() {\n return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReferrerPolicy() {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin' ,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport { isNativeFunction, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","import { isError } from '../is.js';\nimport { fill, addNonEnumerableProperty } from '../object.js';\nimport { supportsNativeFetch } from '../supports.js';\nimport { timestampInSeconds } from '../time.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addFetchInstrumentationHandler(\n handler,\n skipNativeFetchCheck,\n) {\n const type = 'fetch';\n addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch(undefined, skipNativeFetchCheck));\n}\n\n/**\n * Add an instrumentation handler for long-lived fetch requests, like consuming server-sent events (SSE) via fetch.\n * The handler will resolve the request body and emit the actual `endTimestamp`, so that the\n * span can be updated accordingly.\n *\n * Only used internally\n * @hidden\n */\nfunction addFetchEndInstrumentationHandler(handler) {\n const type = 'fetch-body-resolved';\n addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch(streamHandler));\n}\n\nfunction instrumentFetch(onFetchResolved, skipNativeFetchCheck = false) {\n if (skipNativeFetchCheck && !supportsNativeFetch()) {\n return;\n }\n\n fill(GLOBAL_OBJ, 'fetch', function (originalFetch) {\n return function (...args) {\n // We capture the error right here and not in the Promise error callback because Safari (and probably other\n // browsers too) will wipe the stack trace up to this point, only leaving us with this file which is useless.\n\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your fetch call did not\n // have a stack trace, so the SDK backfilled the stack trace so\n // you can see which fetch call failed.\n const virtualError = new Error();\n\n const { method, url } = parseFetchArgs(args);\n const handlerData = {\n args,\n fetchData: {\n method,\n url,\n },\n startTimestamp: timestampInSeconds() * 1000,\n // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n virtualError,\n };\n\n // if there is no callback, fetch is instrumented directly\n if (!onFetchResolved) {\n triggerHandlers('fetch', {\n ...handlerData,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(GLOBAL_OBJ, args).then(\n async (response) => {\n if (onFetchResolved) {\n onFetchResolved(response);\n } else {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n response,\n });\n }\n\n return response;\n },\n (error) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n error,\n });\n\n if (isError(error) && error.stack === undefined) {\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your fetch call did not\n // have a stack trace, so the SDK backfilled the stack trace so\n // you can see which fetch call failed.\n error.stack = virtualError.stack;\n addNonEnumerableProperty(error, 'framesToPop', 1);\n }\n\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\nasync function resolveResponse(res, onFinishedResolving) {\n if (res && res.body) {\n const body = res.body;\n const responseReader = body.getReader();\n\n // Define a maximum duration after which we just cancel\n const maxFetchDurationTimeout = setTimeout(\n () => {\n body.cancel().then(null, () => {\n // noop\n });\n },\n 90 * 1000, // 90s\n );\n\n let readingActive = true;\n while (readingActive) {\n let chunkTimeout;\n try {\n // abort reading if read op takes more than 5s\n chunkTimeout = setTimeout(() => {\n body.cancel().then(null, () => {\n // noop on error\n });\n }, 5000);\n\n // This .read() call will reject/throw when we abort due to timeouts through `body.cancel()`\n const { done } = await responseReader.read();\n\n clearTimeout(chunkTimeout);\n\n if (done) {\n onFinishedResolving();\n readingActive = false;\n }\n } catch (error) {\n readingActive = false;\n } finally {\n clearTimeout(chunkTimeout);\n }\n }\n\n clearTimeout(maxFetchDurationTimeout);\n\n responseReader.releaseLock();\n body.cancel().then(null, () => {\n // noop on error\n });\n }\n}\n\nfunction streamHandler(response) {\n // clone response for awaiting stream\n let clonedResponseForResolving;\n try {\n clonedResponseForResolving = response.clone();\n } catch (e) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n resolveResponse(clonedResponseForResolving, () => {\n triggerHandlers('fetch-body-resolved', {\n endTimestamp: timestampInSeconds() * 1000,\n response,\n });\n });\n}\n\nfunction hasProp(obj, prop) {\n return !!obj && typeof obj === 'object' && !!(obj )[prop];\n}\n\nfunction getUrlFromResource(resource) {\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (!resource) {\n return '';\n }\n\n if (hasProp(resource, 'url')) {\n return resource.url;\n }\n\n if (resource.toString) {\n return resource.toString();\n }\n\n return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nfunction parseFetchArgs(fetchArgs) {\n if (fetchArgs.length === 0) {\n return { method: 'GET', url: '' };\n }\n\n if (fetchArgs.length === 2) {\n const [url, options] = fetchArgs ;\n\n return {\n url: getUrlFromResource(url),\n method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n };\n }\n\n const arg = fetchArgs[0];\n return {\n url: getUrlFromResource(arg ),\n method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n };\n}\n\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n // This comment is used to identify this line in the CDN bundle build step and replace this with \"return 'cdn';\"\n /* __SENTRY_SDK_SOURCE__ */ return 'npm';\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\n\n// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n\nconst WINDOW = GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n // TODO(v9): Remove this custom check, it is pretty old and likely not needed anymore\n const chromeVar = (WINDOW ).chrome;\n const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n return !isChromePackagedApp && hasHistoryApi;\n}\n\nexport { supportsHistory };\n//# sourceMappingURL=supportsHistory.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n fn,\n options\n\n = {},\n) {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n function isFunction(fn) {\n return typeof fn === 'function';\n }\n\n if (!isFunction(fn)) {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = (fn ).__sentry_wrapped__;\n if (wrapper) {\n if (typeof wrapper === 'function') {\n return wrapper;\n } else {\n // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n // that something messed with it. In that case we want to return the originally passed function.\n return fn;\n }\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n // Wrap the function itself\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped = function ( ...args) {\n try {\n // Also wrap arguments that are themselves functions\n const wrappedArguments = args.map(arg => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n } ;\n\n // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property ] = fn[property ];\n }\n }\n } catch (e2) {\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n }\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get() {\n return fn.name;\n },\n });\n }\n } catch (e3) {\n // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.\n // to save some bytes we simply try-catch this\n }\n\n return sentryWrapped;\n}\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, getClient, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/core';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception = {\n type: extractType(ex),\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\nfunction eventFromPlainObject(\n stackParser,\n exception,\n syntheticException,\n isUnhandledRejection,\n) {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n } ,\n ],\n },\n extra,\n } ;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser, ex) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser,\n ex,\n) {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex) {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception) {\n // Check for support\n // @ts-expect-error - WebAssembly.Exception is a valid class\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n // @ts-expect-error - WebAssembly.Exception is a valid class\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nfunction extractType(ex) {\n const name = ex && ex.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n const message = ex && ex.message;\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (isWebAssemblyException(ex) && Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n stackParser,\n exception,\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n stackParser,\n message,\n level = 'info',\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n stackParser,\n exception,\n syntheticException,\n attachStacktrace,\n isUnhandledRejection,\n) {\n let event;\n\n if (isErrorEvent(exception ) && (exception ).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception ;\n return eventFromError(stackParser, errorEvent.error );\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception )) {\n const domException = exception ;\n\n if ('stack' in (exception )) {\n event = eventFromError(stackParser, exception );\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line deprecation/deprecation\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception ;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser,\n message,\n syntheticException,\n attachStacktrace,\n) {\n const event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n addExceptionMechanism(event, { synthetic: true });\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception,\n { isUnhandledRejection },\n) {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj) {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (value instanceof Error) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError, extractMessage, extractType };\n//# sourceMappingURL=eventbuilder.js.map\n","import { dsnToString, createEnvelope } from '@sentry/core';\n\n/**\n * Creates an envelope from a user feedback.\n */\nfunction createUserFeedbackEnvelope(\n feedback,\n {\n metadata,\n tunnel,\n dsn,\n }\n\n,\n) {\n const headers = {\n event_id: feedback.event_id,\n sent_at: new Date().toISOString(),\n ...(metadata &&\n metadata.sdk && {\n sdk: {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n },\n }),\n ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n };\n const item = createUserFeedbackEnvelopeItem(feedback);\n\n return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback) {\n const feedbackHeaders = {\n type: 'user_report',\n };\n return [feedbackHeaders, feedback];\n}\n\nexport { createUserFeedbackEnvelope };\n//# sourceMappingURL=userfeedback.js.map\n","import { BaseClient, getSDKSource, applySdkMetadata, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/core Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n const opts = {\n // We default this to true, as it is the safer scenario\n parentSpanIsAlwaysRootSpan: true,\n ...options,\n };\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n applySdkMetadata(opts, 'browser', ['browser'], sdkSource);\n\n super(opts);\n\n if (opts.sendClientReports && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n if (WINDOW.document.visibilityState === 'hidden') {\n this._flushOutcomes();\n }\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n eventFromException(exception, hint) {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n eventFromMessage(\n message,\n level = 'info',\n hint,\n ) {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * Sends user feedback to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\n captureUserFeedback(feedback) {\n if (!this._isEnabled()) {\n DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n return;\n }\n\n const envelope = createUserFeedbackEnvelope(feedback, {\n metadata: this.getSdkMetadata(),\n dsn: this.getDsn(),\n tunnel: this.getOptions().tunnel,\n });\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n _prepareEvent(event, hint, scope) {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, hint, scope);\n }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","const getRating = (value, thresholds) => {\n if (value > thresholds[1]) {\n return 'poor';\n }\n if (value > thresholds[0]) {\n return 'needs-improvement';\n }\n return 'good';\n};\n\nconst bindReporter = (\n callback,\n metric,\n thresholds,\n reportAllChanges,\n) => {\n let prevValue;\n let delta;\n return (forceReport) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n metric.rating = getRating(metric.value, thresholds);\n callback(metric);\n }\n }\n }\n };\n};\n\nexport { bindReporter };\n//# sourceMappingURL=bindReporter.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ\n\n;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nconst generateUniqueID = () => {\n return `v4-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\nexport { generateUniqueID };\n//# sourceMappingURL=generateUniqueID.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// sentry-specific change:\n// add optional param to not check for responseStart (see comment below)\nconst getNavigationEntry = (checkResponseStart = true) => {\n const navigationEntry =\n WINDOW.performance && WINDOW.performance.getEntriesByType && WINDOW.performance.getEntriesByType('navigation')[0];\n // Check to ensure the `responseStart` property is present and valid.\n // In some cases no value is reported by the browser (for\n // privacy/security reasons), and in other cases (bugs) the value is\n // negative or is larger than the current page time. Ignore these cases:\n // https://github.com/GoogleChrome/web-vitals/issues/137\n // https://github.com/GoogleChrome/web-vitals/issues/162\n // https://github.com/GoogleChrome/web-vitals/issues/275\n if (\n // sentry-specific change:\n // We don't want to check for responseStart for our own use of `getNavigationEntry`\n !checkResponseStart ||\n (navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now())\n ) {\n return navigationEntry;\n }\n};\n\nexport { getNavigationEntry };\n//# sourceMappingURL=getNavigationEntry.js.map\n","import { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst getActivationStart = () => {\n const navEntry = getNavigationEntry();\n return (navEntry && navEntry.activationStart) || 0;\n};\n\nexport { getActivationStart };\n//# sourceMappingURL=getActivationStart.js.map\n","import { WINDOW } from '../../../types.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst initMetric = (name, value) => {\n const navEntry = getNavigationEntry();\n let navigationType = 'navigate';\n\n if (navEntry) {\n if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n navigationType = 'prerender';\n } else if (WINDOW.document && WINDOW.document.wasDiscarded) {\n navigationType = 'restore';\n } else if (navEntry.type) {\n navigationType = navEntry.type.replace(/_/g, '-') ;\n }\n }\n\n // Use `entries` type specific for the metric.\n const entries = [];\n\n return {\n name,\n value: typeof value === 'undefined' ? -1 : value,\n rating: 'good' , // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n delta: 0,\n entries,\n id: generateUniqueID(),\n navigationType,\n };\n};\n\nexport { initMetric };\n//# sourceMappingURL=initMetric.js.map\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nconst observe = (\n type,\n callback,\n opts,\n) => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n const po = new PerformanceObserver(list => {\n // Delay by a microtask to workaround a bug in Safari where the\n // callback is invoked immediately, rather than in a separate task.\n // See: https://github.com/GoogleChrome/web-vitals/issues/277\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n callback(list.getEntries() );\n });\n });\n po.observe(\n Object.assign(\n {\n type,\n buffered: true,\n },\n opts || {},\n ) ,\n );\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n\nexport { observe };\n//# sourceMappingURL=observe.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// Sentry-specific change:\n// This function's logic was NOT updated to web-vitals 4.2.4 but we continue\n// to use the web-vitals 3.5.2 due to us having stricter browser support.\n// PR with context that made the changes: https://github.com/GoogleChrome/web-vitals/pull/442/files#r1530492402\n// The PR removed listening to the `pagehide` event, in favour of only listening to `visibilitychange` event.\n// This is \"more correct\" but some browsers we still support (Safari 12.1-14.0) don't fully support `visibilitychange`\n// or have known bugs w.r.t the `visibilitychange` event.\n// TODO (v9): If we decide to drop support for Safari 12.1-14.0, we can use the logic from web-vitals 4.2.4\n// In this case, we also need to update the integration tests that currently trigger the `pagehide` event to\n// simulate the page being hidden.\nconst onHidden = (cb) => {\n const onHiddenOrPageHide = (event) => {\n if (event.type === 'pagehide' || (WINDOW.document && WINDOW.document.visibilityState === 'hidden')) {\n cb(event);\n }\n };\n\n if (WINDOW.document) {\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n }\n};\n\nexport { onHidden };\n//# sourceMappingURL=onHidden.js.map\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst runOnce = (cb) => {\n let called = false;\n return () => {\n if (!called) {\n cb();\n called = true;\n }\n };\n};\n\nexport { runOnce };\n//# sourceMappingURL=runOnce.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n // If the document is hidden when this code runs, assume it was always\n // hidden and the page was loaded in the background, with the one exception\n // that visibility state is always 'hidden' during prerendering, so we have\n // to ignore that case until prerendering finishes (see: `prerenderingchange`\n // event logic below).\n return WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst onVisibilityUpdate = (event) => {\n // If the document is 'hidden' and no previous hidden timestamp has been\n // set, update it based on the current event data.\n if (WINDOW.document.visibilityState === 'hidden' && firstHiddenTime > -1) {\n // If the event is a 'visibilitychange' event, it means the page was\n // visible prior to this change, so the event timestamp is the first\n // hidden time.\n // However, if the event is not a 'visibilitychange' event, then it must\n // be a 'prerenderingchange' event, and the fact that the document is\n // still 'hidden' from the above check means the tab was activated\n // in a background state and so has always been hidden.\n firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n\n // Remove all listeners now that a `firstHiddenTime` value has been set.\n removeChangeListeners();\n }\n};\n\nconst addChangeListeners = () => {\n addEventListener('visibilitychange', onVisibilityUpdate, true);\n // IMPORTANT: when a page is prerendering, its `visibilityState` is\n // 'hidden', so in order to account for cases where this module checks for\n // visibility during prerendering, an additional check after prerendering\n // completes is also required.\n addEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst removeChangeListeners = () => {\n removeEventListener('visibilitychange', onVisibilityUpdate, true);\n removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst getVisibilityWatcher = () => {\n if (WINDOW.document && firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n firstHiddenTime = initHiddenTime();\n addChangeListeners();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n\nexport { getVisibilityWatcher };\n//# sourceMappingURL=getVisibilityWatcher.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst whenActivated = (callback) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n addEventListener('prerenderingchange', () => callback(), true);\n } else {\n callback();\n }\n};\n\nexport { whenActivated };\n//# sourceMappingURL=whenActivated.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nconst FCPThresholds = [1800, 3000];\n\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nconst onFCP = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FCP');\n let report;\n\n const handleEntries = (entries) => {\n entries.forEach(entry => {\n if (entry.name === 'first-contentful-paint') {\n po.disconnect();\n\n // Only report if the page wasn't hidden prior to the first paint.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n // The activationStart reference is used because FCP should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the FCP, this time should be clamped at 0.\n metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n metric.entries.push(entry);\n report(true);\n }\n }\n });\n };\n\n const po = observe('paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n }\n });\n};\n\nexport { FCPThresholds, onFCP };\n//# sourceMappingURL=onFCP.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { onFCP } from './onFCP.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nconst CLSThresholds = [0.1, 0.25];\n\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onCLS = (onReport, opts = {}) => {\n // Start monitoring FCP so we can only report CLS if FCP is also reported.\n // Note: this is done to match the current behavior of CrUX.\n onFCP(\n runOnce(() => {\n const metric = initMetric('CLS', 0);\n let report;\n\n let sessionValue = 0;\n let sessionEntries = [];\n\n const handleEntries = (entries) => {\n entries.forEach(entry => {\n // Only count layout shifts without recent user input.\n if (!entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry\n // and less than 5 seconds after the first entry in the session,\n // include the entry in the current session. Otherwise, start a new\n // session.\n if (\n sessionValue &&\n firstSessionEntry &&\n lastSessionEntry &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n }\n });\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n report();\n }\n };\n\n const po = observe('layout-shift', handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n\n onHidden(() => {\n handleEntries(po.takeRecords() );\n report(true);\n });\n\n // Queue a task to report (if nothing else triggers a report first).\n // This allows CLS to be reported as soon as FCP fires when\n // `reportAllChanges` is true.\n setTimeout(report, 0);\n }\n }),\n );\n};\n\nexport { CLSThresholds, onCLS };\n//# sourceMappingURL=getCLS.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for FID. See https://web.dev/articles/fid#what_is_a_good_fid_score */\nconst FIDThresholds = [100, 300];\n\n/**\n * Calculates the [FID](https://web.dev/articles/fid) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nconst onFID = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n // eslint-disable-next-line prefer-const\n let report;\n\n const handleEntry = (entry) => {\n // Only report if the page wasn't hidden prior to the first input.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const handleEntries = (entries) => {\n (entries ).forEach(handleEntry);\n };\n\n const po = observe('first-input', handleEntries);\n\n report = bindReporter(onReport, metric, FIDThresholds, opts.reportAllChanges);\n\n if (po) {\n onHidden(\n runOnce(() => {\n handleEntries(po.takeRecords() );\n po.disconnect();\n }),\n );\n }\n });\n};\n\nexport { FIDThresholds, onFID };\n//# sourceMappingURL=getFID.js.map\n","import { observe } from '../observe.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries) => {\n entries.forEach(e => {\n if (e.interactionId) {\n minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n }\n });\n};\n\nlet po;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nconst getInteractionCount = () => {\n return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nconst initInteractionCountPolyfill = () => {\n if ('interactionCount' in performance || po) return;\n\n po = observe('event', updateEstimate, {\n type: 'event',\n buffered: true,\n durationThreshold: 0,\n } );\n};\n\nexport { getInteractionCount, initInteractionCountPolyfill };\n//# sourceMappingURL=interactionCountPolyfill.js.map\n","import { getInteractionCount } from './polyfills/interactionCountPolyfill.js';\n\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is at most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap = new Map();\n\n// The default `durationThreshold` used across this library for observing\n// `event` entries via PerformanceObserver.\nconst DEFAULT_DURATION_THRESHOLD = 40;\n\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nlet prevInteractionCount = 0;\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n return getInteractionCount() - prevInteractionCount;\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = () => {\n const candidateInteractionIndex = Math.min(\n longestInteractionList.length - 1,\n Math.floor(getInteractionCountForNavigation() / 50),\n );\n\n return longestInteractionList[candidateInteractionIndex];\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n/**\n * A list of callback functions to run before each entry is processed.\n * Exposing this list allows the attribution build to hook into the\n * entry processing pipeline.\n */\nconst entryPreProcessingCallbacks = [];\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processInteractionEntry = (entry) => {\n entryPreProcessingCallbacks.forEach(cb => cb(entry));\n\n // Skip further processing for entries that cannot be INP candidates.\n if (!(entry.interactionId || entry.entryType === 'first-input')) return;\n\n // The least-long of the 10 longest interactions.\n const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n const existingInteraction = longestInteractionMap.get(entry.interactionId);\n\n // Only process the entry if it's possibly one of the ten longest,\n // or if it's part of an existing interaction.\n if (\n existingInteraction ||\n longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n (minLongestInteraction && entry.duration > minLongestInteraction.latency)\n ) {\n // If the interaction already exists, update it. Otherwise create one.\n if (existingInteraction) {\n // If the new entry has a longer duration, replace the old entries,\n // otherwise add to the array.\n if (entry.duration > existingInteraction.latency) {\n existingInteraction.entries = [entry];\n existingInteraction.latency = entry.duration;\n } else if (\n entry.duration === existingInteraction.latency &&\n entry.startTime === (existingInteraction.entries[0] && existingInteraction.entries[0].startTime)\n ) {\n existingInteraction.entries.push(entry);\n }\n } else {\n const interaction = {\n id: entry.interactionId,\n latency: entry.duration,\n entries: [entry],\n };\n longestInteractionMap.set(interaction.id, interaction);\n longestInteractionList.push(interaction);\n }\n\n // Sort the entries by latency (descending) and keep only the top ten.\n longestInteractionList.sort((a, b) => b.latency - a.latency);\n if (longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) {\n longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => longestInteractionMap.delete(i.id));\n }\n }\n};\n\nexport { DEFAULT_DURATION_THRESHOLD, entryPreProcessingCallbacks, estimateP98LongestInteraction, longestInteractionList, longestInteractionMap, processInteractionEntry };\n//# sourceMappingURL=interactions.js.map\n","import { WINDOW } from '../../../types.js';\nimport { onHidden } from './onHidden.js';\nimport { runOnce } from './runOnce.js';\n\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * Runs the passed callback during the next idle period, or immediately\n * if the browser's visibility state is (or becomes) hidden.\n */\nconst whenIdle = (cb) => {\n const rIC = WINDOW.requestIdleCallback || WINDOW.setTimeout;\n\n let handle = -1;\n // eslint-disable-next-line no-param-reassign\n cb = runOnce(cb) ;\n // If the document is hidden, run the callback immediately, otherwise\n // race an idle callback with the next `visibilitychange` event.\n if (WINDOW.document && WINDOW.document.visibilityState === 'hidden') {\n cb();\n } else {\n handle = rIC(cb);\n onHidden(cb);\n }\n return handle;\n};\n\nexport { whenIdle };\n//# sourceMappingURL=whenIdle.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { DEFAULT_DURATION_THRESHOLD, processInteractionEntry, estimateP98LongestInteraction } from './lib/interactions.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { whenIdle } from './lib/whenIdle.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nconst INPThresholds = [200, 500];\n\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onINP = (onReport, opts = {}) => {\n // Return if the browser doesn't support all APIs needed to measure INP.\n if (!('PerformanceEventTiming' in WINDOW && 'interactionId' in PerformanceEventTiming.prototype)) {\n return;\n }\n\n whenActivated(() => {\n // TODO(philipwalton): remove once the polyfill is no longer needed.\n initInteractionCountPolyfill();\n\n const metric = initMetric('INP');\n // eslint-disable-next-line prefer-const\n let report;\n\n const handleEntries = (entries) => {\n // Queue the `handleEntries()` callback in the next idle task.\n // This is needed to increase the chances that all event entries that\n // occurred between the user interaction and the next paint\n // have been dispatched. Note: there is currently an experiment\n // running in Chrome (EventTimingKeypressAndCompositionInteractionId)\n // 123+ that if rolled out fully may make this no longer necessary.\n whenIdle(() => {\n entries.forEach(processInteractionEntry);\n\n const inp = estimateP98LongestInteraction();\n\n if (inp && inp.latency !== metric.value) {\n metric.value = inp.latency;\n metric.entries = inp.entries;\n report();\n }\n });\n };\n\n const po = observe('event', handleEntries, {\n // Event Timing entries have their durations rounded to the nearest 8ms,\n // so a duration of 40ms would be any event that spans 2.5 or more frames\n // at 60Hz. This threshold is chosen to strike a balance between usefulness\n // and performance. Running this callback for any interaction that spans\n // just one or two frames is likely not worth the insight that could be\n // gained.\n durationThreshold: opts.durationThreshold != null ? opts.durationThreshold : DEFAULT_DURATION_THRESHOLD,\n });\n\n report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n\n if (po) {\n // Also observe entries of type `first-input`. This is useful in cases\n // where the first interaction is less than the `durationThreshold`.\n po.observe({ type: 'first-input', buffered: true });\n\n onHidden(() => {\n handleEntries(po.takeRecords() );\n report(true);\n });\n }\n });\n};\n\nexport { INPThresholds, onINP };\n//# sourceMappingURL=getINP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { whenIdle } from './lib/whenIdle.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nconst LCPThresholds = [2500, 4000];\n\nconst reportedMetricIDs = {};\n\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nconst onLCP = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report;\n\n const handleEntries = (entries) => {\n // If reportAllChanges is set then call this function for each entry,\n // otherwise only consider the last one.\n if (!opts.reportAllChanges) {\n // eslint-disable-next-line no-param-reassign\n entries = entries.slice(-1);\n }\n\n entries.forEach(entry => {\n // Only report if the page wasn't hidden prior to LCP.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was pre-rendered. But in cases\n // where `activationStart` occurs after the LCP, this time should be\n // clamped at 0.\n metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n metric.entries = [entry];\n report();\n }\n });\n };\n\n const po = observe('largest-contentful-paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n\n const stopListening = runOnce(() => {\n if (!reportedMetricIDs[metric.id]) {\n handleEntries(po.takeRecords() );\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n });\n\n // Stop listening after input. Note: while scrolling is an input that\n // stops LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n // Wrap in a setTimeout so the callback is run in a separate task\n // to avoid extending the keyboard/click handler to reduce INP impact\n // https://github.com/GoogleChrome/web-vitals/issues/383\n if (WINDOW.document) {\n addEventListener(type, () => whenIdle(stopListening ), {\n once: true,\n capture: true,\n });\n }\n });\n\n onHidden(stopListening);\n }\n });\n};\n\nexport { LCPThresholds, onLCP };\n//# sourceMappingURL=getLCP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getNavigationEntry } from './lib/getNavigationEntry.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nconst TTFBThresholds = [800, 1800];\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n whenActivated(() => whenReady(callback));\n } else if (WINDOW.document && WINDOW.document.readyState !== 'complete') {\n addEventListener('load', () => whenReady(callback), true);\n } else {\n // Queue a task so the callback runs after `loadEventEnd`.\n setTimeout(callback, 0);\n }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nconst onTTFB = (onReport, opts = {}) => {\n const metric = initMetric('TTFB');\n const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n\n whenReady(() => {\n const navigationEntry = getNavigationEntry();\n\n if (navigationEntry) {\n // The activationStart reference is used because TTFB should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the first byte is received, this time should be clamped at 0.\n metric.value = Math.max(navigationEntry.responseStart - getActivationStart(), 0);\n\n metric.entries = [navigationEntry];\n report(true);\n }\n });\n};\n\nexport { TTFBThresholds, onTTFB };\n//# sourceMappingURL=onTTFB.js.map\n","import { logger, getFunctionName } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { onCLS } from './web-vitals/getCLS.js';\nimport { onFID } from './web-vitals/getFID.js';\nimport { onINP } from './web-vitals/getINP.js';\nimport { onLCP } from './web-vitals/getLCP.js';\nimport { observe } from './web-vitals/lib/observe.js';\nimport { onTTFB } from './web-vitals/onTTFB.js';\n\nconst handlers = {};\nconst instrumented = {};\n\nlet _previousCls;\nlet _previousFid;\nlet _previousLcp;\nlet _previousTtfb;\nlet _previousInp;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nfunction addClsInstrumentationHandler(\n callback,\n stopOnCallback = false,\n) {\n return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nfunction addLcpInstrumentationHandler(\n callback,\n stopOnCallback = false,\n) {\n return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addFidInstrumentationHandler(callback) {\n return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nfunction addTtfbInstrumentationHandler(callback) {\n return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addInpInstrumentationHandler(\n callback,\n) {\n return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addPerformanceInstrumentationHandler(\n type,\n callback,\n) {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentPerformanceObserver(type);\n instrumented[type] = true;\n }\n\n return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type, data) {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers || !typeHandlers.length) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nfunction instrumentCls() {\n return onCLS(\n metric => {\n triggerHandlers('cls', {\n metric,\n });\n _previousCls = metric;\n },\n // We want the callback to be called whenever the CLS value updates.\n // By default, the callback is only called when the tab goes to the background.\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentFid() {\n return onFID(metric => {\n triggerHandlers('fid', {\n metric,\n });\n _previousFid = metric;\n });\n}\n\nfunction instrumentLcp() {\n return onLCP(\n metric => {\n triggerHandlers('lcp', {\n metric,\n });\n _previousLcp = metric;\n },\n // We want the callback to be called whenever the LCP value updates.\n // By default, the callback is only called when the tab goes to the background.\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentTtfb() {\n return onTTFB(metric => {\n triggerHandlers('ttfb', {\n metric,\n });\n _previousTtfb = metric;\n });\n}\n\nfunction instrumentInp() {\n return onINP(metric => {\n triggerHandlers('inp', {\n metric,\n });\n _previousInp = metric;\n });\n}\n\nfunction addMetricObserver(\n type,\n callback,\n instrumentFn,\n previousValue,\n stopOnCallback = false,\n) {\n addHandler(type, callback);\n\n let stopListening;\n\n if (!instrumented[type]) {\n stopListening = instrumentFn();\n instrumented[type] = true;\n }\n\n if (previousValue) {\n callback({ metric: previousValue });\n }\n\n return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type) {\n const options = {};\n\n // Special per-type options we want to use\n if (type === 'event') {\n options.durationThreshold = 0;\n }\n\n observe(\n type,\n entries => {\n triggerHandlers(type, { entries });\n },\n options,\n );\n}\n\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n type,\n callback,\n stopListening,\n) {\n return () => {\n if (stopListening) {\n stopListening();\n }\n\n const typeHandlers = handlers[type];\n\n if (!typeHandlers) {\n return;\n }\n\n const index = typeHandlers.indexOf(callback);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n };\n}\n\n/**\n * Check if a PerformanceEntry is a PerformanceEventTiming by checking for the `duration` property.\n */\nfunction isPerformanceEventTiming(entry) {\n return 'duration' in entry;\n}\n\nexport { addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, addLcpInstrumentationHandler, addPerformanceInstrumentationHandler, addTtfbInstrumentationHandler, isPerformanceEventTiming };\n//# sourceMappingURL=instrument.js.map\n","import { spanToJSON, withActiveSpan, startInactiveSpan, getClient, getCurrentScope } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nfunction startAndEndSpan(\n parentSpan,\n startTimeInSeconds,\n endTime,\n { ...ctx },\n) {\n const parentStartTime = spanToJSON(parentSpan).start_timestamp;\n if (parentStartTime && parentStartTime > startTimeInSeconds) {\n // We can only do this for SentrySpans...\n if (typeof (parentSpan ).updateStartTime === 'function') {\n (parentSpan ).updateStartTime(startTimeInSeconds);\n }\n }\n\n // The return value only exists for tests\n return withActiveSpan(parentSpan, () => {\n const span = startInactiveSpan({\n startTime: startTimeInSeconds,\n ...ctx,\n });\n\n if (span) {\n span.end(endTime);\n }\n\n return span;\n });\n}\n\n/**\n * Starts an inactive, standalone span used to send web vital values to Sentry.\n * DO NOT use this for arbitrary spans, as these spans require special handling\n * during ingestion to extract metrics.\n *\n * This function adds a bunch of attributes and data to the span that's shared\n * by all web vital standalone spans. However, you need to take care of adding\n * the actual web vital value as an event to the span. Also, you need to assign\n * a transaction name and some other values that are specific to the web vital.\n *\n * Ultimately, you also need to take care of ending the span to send it off.\n *\n * @param options\n *\n * @returns an inactive, standalone and NOT YET ended span\n */\nfunction startStandaloneWebVitalSpan(options) {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const { name, transaction, attributes: passedAttributes, startTime } = options;\n\n const { release, environment } = client.getOptions();\n // We need to get the replay, user, and activeTransaction from the current scope\n // so that we can associate replay id, profile id, and a user display to the span\n const replay = client.getIntegrationByName('Replay');\n const replayId = replay && replay.getReplayId();\n\n const scope = getCurrentScope();\n\n const user = scope.getUser();\n const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n\n let profileId;\n try {\n // @ts-expect-error skip optional chaining to save bundle size with try catch\n profileId = scope.getScopeData().contexts.profile.profile_id;\n } catch (e) {\n // do nothing\n }\n\n const attributes = {\n release,\n environment,\n\n user: userDisplay || undefined,\n profile_id: profileId || undefined,\n replay_id: replayId || undefined,\n\n transaction,\n\n // Web vital score calculation relies on the user agent to account for different\n // browsers setting different thresholds for what is considered a good/meh/bad value.\n // For example: Chrome vs. Chrome Mobile\n 'user_agent.original': WINDOW.navigator && WINDOW.navigator.userAgent,\n\n ...passedAttributes,\n };\n\n return startInactiveSpan({\n name,\n attributes,\n startTime,\n experimental: {\n standalone: true,\n },\n });\n}\n\n/** Get the browser performance API. */\nfunction getBrowserPerformanceAPI() {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n return time / 1000;\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/') ;\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1] ;\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nexport { extractNetworkProtocol, getBrowserPerformanceAPI, isMeasurementValue, msToSec, startAndEndSpan, startStandaloneWebVitalSpan };\n//# sourceMappingURL=utils.js.map\n","import { getClient, getActiveSpan, getRootSpan, spanToJSON, logger, browserPerformanceTimeOrigin, getCurrentScope, htmlTreeAsString, dropUndefinedKeys, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { addClsInstrumentationHandler } from './instrument.js';\nimport { msToSec, startStandaloneWebVitalSpan } from './utils.js';\nimport { onHidden } from './web-vitals/lib/onHidden.js';\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value once\n *\n * - the page visibility is hidden\n * - a navigation span is started (to stop CLS measurement for SPA soft navigations)\n *\n * Once either of these events triggers, the CLS value is sent as a standalone span and we stop\n * measuring CLS.\n */\nfunction trackClsAsStandaloneSpan() {\n let standaloneCLsValue = 0;\n let standaloneClsEntry;\n let pageloadSpanId;\n\n if (!supportsLayoutShift()) {\n return;\n }\n\n let sentSpan = false;\n function _collectClsOnce() {\n if (sentSpan) {\n return;\n }\n sentSpan = true;\n if (pageloadSpanId) {\n sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId);\n }\n cleanupClsHandler();\n }\n\n const cleanupClsHandler = addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1] ;\n if (!entry) {\n return;\n }\n standaloneCLsValue = metric.value;\n standaloneClsEntry = entry;\n }, true);\n\n // use pagehide event from web-vitals\n onHidden(() => {\n _collectClsOnce();\n });\n\n // Since the call chain of this function is synchronous and evaluates before the SDK client is created,\n // we need to wait with subscribing to a client hook until the client is created. Therefore, we defer\n // to the next tick after the SDK setup.\n setTimeout(() => {\n const client = getClient();\n\n if (!client) {\n return;\n }\n\n const unsubscribeStartNavigation = client.on('startNavigationSpan', () => {\n _collectClsOnce();\n unsubscribeStartNavigation && unsubscribeStartNavigation();\n });\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n const spanJSON = rootSpan && spanToJSON(rootSpan);\n if (spanJSON && spanJSON.op === 'pageload') {\n pageloadSpanId = rootSpan.spanContext().spanId;\n }\n }, 0);\n}\n\nfunction sendStandaloneClsSpan(clsValue, entry, pageloadSpanId) {\n DEBUG_BUILD && logger.log(`Sending CLS span (${clsValue})`);\n\n const startTime = msToSec((browserPerformanceTimeOrigin || 0) + ((entry && entry.startTime) || 0));\n const routeName = getCurrentScope().getScopeData().transactionName;\n\n const name = entry ? htmlTreeAsString(entry.sources[0] && entry.sources[0].node) : 'Layout shift';\n\n const attributes = dropUndefinedKeys({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.cls',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.webvital.cls',\n [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: (entry && entry.duration) || 0,\n // attach the pageload span id to the CLS span so that we can link them in the UI\n 'sentry.pageload.span_id': pageloadSpanId,\n });\n\n const span = startStandaloneWebVitalSpan({\n name,\n transaction: routeName,\n attributes,\n startTime,\n });\n\n if (span) {\n span.addEvent('cls', {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: '',\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: clsValue,\n });\n\n // LayoutShift performance entries always have a duration of 0, so we don't need to add `entry.duration` here\n // see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/duration\n span.end(startTime);\n }\n}\n\nfunction supportsLayoutShift() {\n try {\n return PerformanceObserver.supportedEntryTypes.includes('layout-shift');\n } catch (e) {\n return false;\n }\n}\n\nexport { trackClsAsStandaloneSpan };\n//# sourceMappingURL=cls.js.map\n","import { browserPerformanceTimeOrigin, getActiveSpan, spanToJSON, setMeasurement, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, parseUrl, htmlTreeAsString, getComponentName } from '@sentry/core';\nimport { WINDOW } from '../types.js';\nimport { trackClsAsStandaloneSpan } from './cls.js';\nimport { addPerformanceInstrumentationHandler, addClsInstrumentationHandler, addLcpInstrumentationHandler, addFidInstrumentationHandler, addTtfbInstrumentationHandler } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startAndEndSpan, extractNetworkProtocol, isMeasurementValue } from './utils.js';\nimport { getActivationStart } from './web-vitals/lib/getActivationStart.js';\nimport { getNavigationEntry } from './web-vitals/lib/getNavigationEntry.js';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher.js';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nfunction startTrackingWebVitals({ recordClsStandaloneSpans }) {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n if (performance.mark) {\n WINDOW.performance.mark('sentry-tracing-init');\n }\n const fidCleanupCallback = _trackFID();\n const lcpCleanupCallback = _trackLCP();\n const ttfbCleanupCallback = _trackTtfb();\n const clsCleanupCallback = recordClsStandaloneSpans ? trackClsAsStandaloneSpan() : _trackCLS();\n\n return () => {\n fidCleanupCallback();\n lcpCleanupCallback();\n ttfbCleanupCallback();\n clsCleanupCallback && clsCleanupCallback();\n };\n }\n\n return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nfunction startTrackingLongTasks() {\n addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n const parent = getActiveSpan();\n if (!parent) {\n return;\n }\n\n const { op: parentOp, start_timestamp: parentStartTimestamp } = spanToJSON(parent);\n\n for (const entry of entries) {\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n // Skip adding a span if the long task started before the navigation started.\n // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n // time, potentially skewing the duration of the actual navigation as reported via our\n // routing instrumentations\n continue;\n }\n\n startAndEndSpan(parent, startTime, startTime + duration, {\n name: 'Main UI thread blocked',\n op: 'ui.long-task',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n }\n });\n}\n\n/**\n * Start tracking long animation frames.\n */\nfunction startTrackingLongAnimationFrames() {\n // NOTE: the current web-vitals version (3.5.2) does not support long-animation-frame, so\n // we directly observe `long-animation-frame` events instead of through the web-vitals\n // `observe` helper function.\n const observer = new PerformanceObserver(list => {\n const parent = getActiveSpan();\n if (!parent) {\n return;\n }\n for (const entry of list.getEntries() ) {\n if (!entry.scripts[0]) {\n continue;\n }\n\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n\n const { start_timestamp: parentStartTimestamp, op: parentOp } = spanToJSON(parent);\n\n if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n // Skip adding the span if the long animation frame started before the navigation started.\n // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n // time, potentially skewing the duration of the actual navigation as reported via our\n // routing instrumentations\n continue;\n }\n\n const duration = msToSec(entry.duration);\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n };\n\n const initialScript = entry.scripts[0];\n const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;\n attributes['browser.script.invoker'] = invoker;\n attributes['browser.script.invoker_type'] = invokerType;\n if (sourceURL) {\n attributes['code.filepath'] = sourceURL;\n }\n if (sourceFunctionName) {\n attributes['code.function'] = sourceFunctionName;\n }\n if (sourceCharPosition !== -1) {\n attributes['browser.script.source_char_position'] = sourceCharPosition;\n }\n\n startAndEndSpan(parent, startTime, startTime + duration, {\n name: 'Main UI thread blocked',\n op: 'ui.long-animation-frame',\n attributes,\n });\n }\n });\n\n observer.observe({ type: 'long-animation-frame', buffered: true });\n}\n\n/**\n * Start tracking interaction events.\n */\nfunction startTrackingInteractions() {\n addPerformanceInstrumentationHandler('event', ({ entries }) => {\n const parent = getActiveSpan();\n if (!parent) {\n return;\n }\n for (const entry of entries) {\n if (entry.name === 'click') {\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const spanOptions = {\n name: htmlTreeAsString(entry.target),\n op: `ui.interaction.${entry.name}`,\n startTime: startTime,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n };\n\n const componentName = getComponentName(entry.target);\n if (componentName) {\n spanOptions.attributes['ui.component_name'] = componentName;\n }\n\n startAndEndSpan(parent, startTime, startTime + duration, spanOptions);\n }\n }\n });\n}\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value and last entry\n * to the `_measurements` object which ultimately is applied to the pageload span's measurements.\n */\nfunction _trackCLS() {\n return addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1] ;\n if (!entry) {\n return;\n }\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry;\n }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP() {\n return addLcpInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _lcpEntry = entry ;\n }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n return addFidInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin );\n const startTime = msToSec(entry.startTime);\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\nfunction _trackTtfb() {\n return addTtfbInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(span, options) {\n const performance = getBrowserPerformanceAPI();\n if (!performance || !performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n const performanceEntries = performance.getEntries();\n\n const { op, start_timestamp: transactionStartTime } = spanToJSON(span);\n\n performanceEntries.slice(_performanceCursor).forEach(entry => {\n const startTime = msToSec(entry.startTime);\n const duration = msToSec(\n // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.\n // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display\n // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.\n // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.\n Math.max(0, entry.duration),\n );\n\n if (op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(span, entry , timeOrigin);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n _addMeasureSpans(span, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n break;\n }\n case 'resource': {\n _addResourceSpans(span, entry , entry.name, startTime, duration, timeOrigin);\n break;\n }\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(span);\n\n // Measurements are only available for pageload transactions\n if (op === 'pageload') {\n _addTtfbRequestTimeToMeasurements(_measurements);\n\n const fidMark = _measurements['mark.fid'];\n if (fidMark && _measurements['fid']) {\n // create span for FID\n startAndEndSpan(span, fidMark.value, fidMark.value + msToSec(_measurements['fid'].value), {\n name: 'first input delay',\n op: 'ui.action',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n\n // Delete mark.fid as we don't want it to be part of final payload\n delete _measurements['mark.fid'];\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n // TODO: Check if the first condition is still necessary: `onCLS` already only fires once `onFCP` was called.\n if (!('fcp' in _measurements) || !options.recordClsOnPageloadSpan) {\n delete _measurements.cls;\n }\n\n Object.entries(_measurements).forEach(([measurementName, measurement]) => {\n setMeasurement(measurementName, measurement.value, measurement.unit);\n });\n\n // Set timeOrigin which denotes the timestamp which to base the LCP/FCP/FP/TTFB measurements on\n span.setAttribute('performance.timeOrigin', timeOrigin);\n\n // In prerendering scenarios, where a page might be prefetched and pre-rendered before the user clicks the link,\n // the navigation starts earlier than when the user clicks it. Web Vitals should always be based on the\n // user-perceived time, so they are not reported from the actual start of the navigation, but rather from the\n // time where the user actively started the navigation, for example by clicking a link.\n // This is user action is called \"activation\" and the time between navigation and activation is stored in\n // the `activationStart` attribute of the \"navigation\" PerformanceEntry.\n span.setAttribute('performance.activationStart', getActivationStart());\n\n _setWebVitalAttributes(span);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/**\n * Create measure related spans.\n * Exported only for tests.\n */\nfunction _addMeasureSpans(\n span,\n entry,\n startTime,\n duration,\n timeOrigin,\n) {\n const navEntry = getNavigationEntry(false);\n const requestTime = msToSec(navEntry ? navEntry.requestStart : 0);\n // Because performance.measure accepts arbitrary timestamps it can produce\n // spans that happen before the browser even makes a request for the page.\n //\n // An example of this is the automatically generated Next.js-before-hydration\n // spans created by the Next.js framework.\n //\n // To prevent this we will pin the start timestamp to the request start time\n // This does make duration inaccurate, so if this does happen, we will add\n // an attribute to the span\n const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime);\n const startTimeStamp = timeOrigin + startTime;\n const measureEndTimestamp = startTimeStamp + duration;\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n };\n\n if (measureStartTimestamp !== startTimeStamp) {\n attributes['sentry.browser.measure_happened_before_request'] = true;\n attributes['sentry.browser.measure_start_time'] = measureStartTimestamp;\n }\n\n // Measurements from third parties can be off, which would create invalid spans, dropping transactions in the process.\n if (measureStartTimestamp <= measureEndTimestamp) {\n startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, {\n name: entry.name ,\n op: entry.entryType ,\n attributes,\n });\n }\n}\n\n/** Instrument navigation entries */\nfunction _addNavigationSpans(span, entry, timeOrigin) {\n (['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'] ).forEach(event => {\n _addPerformanceNavigationTiming(span, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(span, entry, 'secureConnection', timeOrigin, 'TLS/SSL');\n _addPerformanceNavigationTiming(span, entry, 'fetch', timeOrigin, 'cache');\n _addPerformanceNavigationTiming(span, entry, 'domainLookup', timeOrigin, 'DNS');\n\n _addRequest(span, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n span,\n entry,\n event,\n timeOrigin,\n name = event,\n) {\n const eventEnd = _getEndPropertyNameForNavigationTiming(event) ;\n const end = entry[eventEnd];\n const start = entry[`${event}Start`];\n if (!start || !end) {\n return;\n }\n startAndEndSpan(span, timeOrigin + msToSec(start), timeOrigin + msToSec(end), {\n op: `browser.${name}`,\n name: entry.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n}\n\nfunction _getEndPropertyNameForNavigationTiming(event) {\n if (event === 'secureConnection') {\n return 'connectEnd';\n }\n if (event === 'fetch') {\n return 'domainLookupStart';\n }\n return `${event}End`;\n}\n\n/** Create request and response related spans */\nfunction _addRequest(span, entry, timeOrigin) {\n const requestStartTimestamp = timeOrigin + msToSec(entry.requestStart );\n const responseEndTimestamp = timeOrigin + msToSec(entry.responseEnd );\n const responseStartTimestamp = timeOrigin + msToSec(entry.responseStart );\n if (entry.responseEnd) {\n // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n // these spans when the responseEnd value is available. The backend (Relay) would drop the entire span if it contained faulty spans.\n startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, {\n op: 'browser.request',\n name: entry.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n\n startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, {\n op: 'browser.response',\n name: entry.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n }\n}\n\n/**\n * Create resource-related spans.\n * Exported only for tests.\n */\nfunction _addResourceSpans(\n span,\n entry,\n resourceUrl,\n startTime,\n duration,\n timeOrigin,\n) {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n const parsedUrl = parseUrl(resourceUrl);\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n };\n setResourceEntrySizeData(attributes, entry, 'transferSize', 'http.response_transfer_size');\n setResourceEntrySizeData(attributes, entry, 'encodedBodySize', 'http.response_content_length');\n setResourceEntrySizeData(attributes, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n // `deliveryType` is experimental and does not exist everywhere\n const deliveryType = (entry ).deliveryType;\n if (deliveryType != null) {\n attributes['http.response_delivery_type'] = deliveryType;\n }\n\n // Types do not reflect this property yet\n const renderBlockingStatus = (entry )\n .renderBlockingStatus;\n if (renderBlockingStatus) {\n attributes['resource.render_blocking_status'] = renderBlockingStatus;\n }\n\n if (parsedUrl.protocol) {\n attributes['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n }\n\n if (parsedUrl.host) {\n attributes['server.address'] = parsedUrl.host;\n }\n\n attributes['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n const { name, version } = extractNetworkProtocol(entry.nextHopProtocol);\n attributes['network.protocol.name'] = name;\n attributes['network.protocol.version'] = version;\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n startAndEndSpan(span, startTimestamp, endTimestamp, {\n name: resourceUrl.replace(WINDOW.location.origin, ''),\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n attributes,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(span) {\n const navigator = WINDOW.navigator ;\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n span.setAttribute('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n span.setAttribute('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n span.setAttribute('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n span.setAttribute('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to span to allow debugging */\nfunction _setWebVitalAttributes(span) {\n if (_lcpEntry) {\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n span.setAttribute('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n span.setAttribute('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n span.setAttribute('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n if (_lcpEntry.loadTime != null) {\n // loadTime is the time of LCP that's related to receiving the LCP element response..\n span.setAttribute('lcp.loadTime', _lcpEntry.loadTime);\n }\n\n if (_lcpEntry.renderTime != null) {\n // renderTime is loadTime + rendering time\n // it's 0 if the LCP element is loaded from a 3rd party origin that doesn't send the\n // `Timing-Allow-Origin` header.\n span.setAttribute('lcp.renderTime', _lcpEntry.renderTime);\n }\n\n span.setAttribute('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n _clsEntry.sources.forEach((source, index) =>\n span.setAttribute(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nfunction setResourceEntrySizeData(\n attributes,\n entry,\n key,\n dataKey,\n) {\n const entryVal = entry[key];\n if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n attributes[dataKey] = entryVal;\n }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements) {\n const navEntry = getNavigationEntry(false);\n if (!navEntry) {\n return;\n }\n\n const { responseStart, requestStart } = navEntry;\n\n if (requestStart <= responseStart) {\n _measurements['ttfb.requestTime'] = {\n value: responseStart - requestStart,\n unit: 'millisecond',\n };\n }\n}\n\nexport { _addMeasureSpans, _addResourceSpans, addPerformanceEntries, startTrackingInteractions, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingWebVitals };\n//# sourceMappingURL=browserMetrics.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addClickKeypressInstrumentationHandler(handler) {\n const type = 'dom';\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\n if (!WINDOW.document) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target) => {\n const globalObject = WINDOW ;\n const targetObj = globalObject[target];\n const proto = targetObj && targetObj.prototype;\n\n // eslint-disable-next-line no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener) {\n return function ( type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n const handlers = (this.__sentry_instrumentation_handlers__ =\n this.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount++;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener) {\n return function ( type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n const handlers = this.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount--;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete this.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event) {\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (!event.target || (event.target )._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType, target) {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n handler,\n globalListener = false,\n) {\n return (event) => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || event['_sentryCaptured']) {\n return;\n }\n\n const target = getEventTarget(event);\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n\n // Mark event as \"seen\"\n addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n if (target && !target._sentryId) {\n // Add UUID to event target so we can identify if\n addNonEnumerableProperty(target, '_sentryId', uuid4());\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n if (!isSimilarToLastCapturedEvent(event)) {\n const handlerData = { event, name, global: globalListener };\n handler(handlerData);\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : undefined;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = undefined;\n lastCapturedEventType = undefined;\n }, DEBOUNCE_DURATION);\n };\n}\n\nfunction getEventTarget(event) {\n try {\n return event.target ;\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n return null;\n }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { addHandler, maybeInstrument, supportsHistory, triggerHandlers, fill } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nlet lastHref;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addHistoryInstrumentationHandler(handler) {\n const type = 'history';\n addHandler(type, handler);\n maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory() {\n if (!supportsHistory()) {\n return;\n }\n\n const oldOnPopState = WINDOW.onpopstate;\n WINDOW.onpopstate = function ( ...args) {\n const to = WINDOW.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n const from = lastHref;\n lastHref = to;\n const handlerData = { from, to };\n triggerHandlers('history', handlerData);\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n function historyReplacementFunction(originalHistoryFunction) {\n return function ( ...args) {\n const url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n const from = lastHref;\n const to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n const handlerData = { from, to };\n triggerHandlers('history', handlerData);\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(WINDOW.history, 'pushState', historyReplacementFunction);\n fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nexport { addHistoryInstrumentationHandler };\n//# sourceMappingURL=history.js.map\n","import { isNativeFunction, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\nconst cachedImplementations = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nfunction getNativeImplementation(\n name,\n) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n\n let impl = WINDOW[name] ;\n\n // Fast path to avoid DOM I/O\n if (isNativeFunction(impl)) {\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n }\n\n const document = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl = contentWindow[name] ;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n // Could not create sandbox iframe, just use window.xxx\n DEBUG_BUILD && logger.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n }\n }\n\n // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n if (!impl) {\n return impl;\n }\n\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n}\n\n/** Clear a cached implementation. */\nfunction clearCachedImplementation(name) {\n cachedImplementations[name] = undefined;\n}\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nfunction fetch(...rest) {\n return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nfunction setTimeout(...rest) {\n return getNativeImplementation('setTimeout')(...rest);\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { addHandler, maybeInstrument, timestampInSeconds, isString, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addXhrInstrumentationHandler(handler) {\n const type = 'xhr';\n addHandler(type, handler);\n maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nfunction instrumentXHR() {\n if (!(WINDOW ).XMLHttpRequest) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n xhrproto.open = new Proxy(xhrproto.open, {\n apply(originalOpen, xhrOpenThisArg, xhrOpenArgArray) {\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your XHR call did not\n // have a stack trace. If you are using HttpClient integration,\n // this is the expected behavior, as we are using this virtual error to capture\n // the location of your XHR call, and group your HttpClient events accordingly.\n const virtualError = new Error();\n\n const startTimestamp = timestampInSeconds() * 1000;\n\n // open() should always be called with two or more arguments\n // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n const method = isString(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : undefined;\n const url = parseUrl(xhrOpenArgArray[1]);\n\n if (!method || !url) {\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n }\n\n xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {\n method,\n url,\n request_headers: {},\n };\n\n // if Sentry key appears in URL, don't capture it as a request\n if (method === 'POST' && url.match(/sentry_key/)) {\n xhrOpenThisArg.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler = () => {\n // For whatever reason, this is not the same instance here as from the outer method\n const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n\n if (!xhrInfo) {\n return;\n }\n\n if (xhrOpenThisArg.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = xhrOpenThisArg.status;\n } catch (e) {\n /* do nothing */\n }\n\n const handlerData = {\n endTimestamp: timestampInSeconds() * 1000,\n startTimestamp,\n xhr: xhrOpenThisArg,\n virtualError,\n };\n triggerHandlers('xhr', handlerData);\n }\n };\n\n if ('onreadystatechange' in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === 'function') {\n xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {\n onreadystatechangeHandler();\n return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n },\n });\n } else {\n xhrOpenThisArg.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n apply(\n originalSetRequestHeader,\n setRequestHeaderThisArg,\n setRequestHeaderArgArray,\n ) {\n const [header, value] = setRequestHeaderArgArray;\n\n const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n\n if (xhrInfo && isString(header) && isString(value)) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n\n return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n },\n });\n\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n xhrproto.send = new Proxy(xhrproto.send, {\n apply(originalSend, sendThisArg, sendArgArray) {\n const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n\n if (!sentryXhrData) {\n return originalSend.apply(sendThisArg, sendArgArray);\n }\n\n if (sendArgArray[0] !== undefined) {\n sentryXhrData.body = sendArgArray[0];\n }\n\n const handlerData = {\n startTimestamp: timestampInSeconds() * 1000,\n xhr: sendThisArg,\n };\n triggerHandlers('xhr', handlerData);\n\n return originalSend.apply(sendThisArg, sendArgArray);\n },\n });\n}\n\nfunction parseUrl(url) {\n if (isString(url)) {\n return url;\n }\n\n try {\n // url can be a string or URL\n // but since URL is not available in IE11, we do not check for it,\n // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n // If that fails, we just return undefined\n return (url ).toString();\n } catch (e2) {} // eslint-disable-line no-empty\n\n return undefined;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","import { browserPerformanceTimeOrigin, getActiveSpan, getRootSpan, spanToJSON, getCurrentScope, htmlTreeAsString, dropUndefinedKeys, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { addInpInstrumentationHandler, addPerformanceInstrumentationHandler, isPerformanceEventTiming } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startStandaloneWebVitalSpan } from './utils.js';\n\nconst LAST_INTERACTIONS = [];\nconst INTERACTIONS_SPAN_MAP = new Map();\n\n/**\n * Start tracking INP webvital events.\n */\nfunction startTrackingINP() {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n const inpCallback = _trackINP();\n\n return () => {\n inpCallback();\n };\n }\n\n return () => undefined;\n}\n\nconst INP_ENTRY_MAP = {\n click: 'click',\n pointerdown: 'click',\n pointerup: 'click',\n mousedown: 'click',\n mouseup: 'click',\n touchstart: 'click',\n touchend: 'click',\n mouseover: 'hover',\n mouseout: 'hover',\n mouseenter: 'hover',\n mouseleave: 'hover',\n pointerover: 'hover',\n pointerout: 'hover',\n pointerenter: 'hover',\n pointerleave: 'hover',\n dragstart: 'drag',\n dragend: 'drag',\n drag: 'drag',\n dragenter: 'drag',\n dragleave: 'drag',\n dragover: 'drag',\n drop: 'drag',\n keydown: 'press',\n keyup: 'press',\n keypress: 'press',\n input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP() {\n return addInpInstrumentationHandler(({ metric }) => {\n if (metric.value == undefined) {\n return;\n }\n\n const entry = metric.entries.find(entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name]);\n\n if (!entry) {\n return;\n }\n\n const { interactionId } = entry;\n const interactionType = INP_ENTRY_MAP[entry.name];\n\n /** Build the INP span, create an envelope from the span, and then send the envelope */\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(metric.value);\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n // We first try to lookup the span from our INTERACTIONS_SPAN_MAP,\n // where we cache the route per interactionId\n const cachedSpan = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : undefined;\n\n const spanToUse = cachedSpan || rootSpan;\n\n // Else, we try to use the active span.\n // Finally, we fall back to look at the transactionName on the scope\n const routeName = spanToUse ? spanToJSON(spanToUse).description : getCurrentScope().getScopeData().transactionName;\n\n const name = htmlTreeAsString(entry.target);\n const attributes = dropUndefinedKeys({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.inp',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `ui.interaction.${interactionType}`,\n [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry.duration,\n });\n\n const span = startStandaloneWebVitalSpan({\n name,\n transaction: routeName,\n attributes,\n startTime,\n });\n\n if (span) {\n span.addEvent('inp', {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value,\n });\n\n span.end(startTime + duration);\n }\n });\n}\n\n/**\n * Register a listener to cache route information for INP interactions.\n * TODO(v9): `latestRoute` no longer needs to be passed in and will be removed in v9.\n */\nfunction registerInpInteractionListener(_latestRoute) {\n const handleEntries = ({ entries }) => {\n const activeSpan = getActiveSpan();\n const activeRootSpan = activeSpan && getRootSpan(activeSpan);\n\n entries.forEach(entry => {\n if (!isPerformanceEventTiming(entry) || !activeRootSpan) {\n return;\n }\n\n const interactionId = entry.interactionId;\n if (interactionId == null) {\n return;\n }\n\n // If the interaction was already recorded before, nothing more to do\n if (INTERACTIONS_SPAN_MAP.has(interactionId)) {\n return;\n }\n\n // We keep max. 10 interactions in the list, then remove the oldest one & clean up\n if (LAST_INTERACTIONS.length > 10) {\n const last = LAST_INTERACTIONS.shift() ;\n INTERACTIONS_SPAN_MAP.delete(last);\n }\n\n // We add the interaction to the list of recorded interactions\n // and store the span for this interaction\n LAST_INTERACTIONS.push(interactionId);\n INTERACTIONS_SPAN_MAP.set(interactionId, activeRootSpan);\n });\n };\n\n addPerformanceInstrumentationHandler('event', handleEntries);\n addPerformanceInstrumentationHandler('first-input', handleEntries);\n}\n\nexport { registerInpInteractionListener, startTrackingINP };\n//# sourceMappingURL=inp.js.map\n","import { getNativeImplementation, clearCachedImplementation } from '@sentry-internal/browser-utils';\nimport { createTransport, rejectedSyncPromise } from '@sentry/core';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n options,\n nativeFetch = getNativeImplementation('fetch'),\n) {\n let pendingBodySize = 0;\n let pendingCount = 0;\n\n function makeRequest(request) {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n\n const requestOptions = {\n body: request.body,\n method: 'POST',\n referrerPolicy: 'origin',\n headers: options.headers,\n // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).\n // Gotchas:\n // - `keepalive` isn't supported by Firefox\n // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n // We will therefore only activate the flag when we're below that limit.\n // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n keepalive: pendingBodySize <= 60000 && pendingCount < 15,\n ...options.fetchOptions,\n };\n\n if (!nativeFetch) {\n clearCachedImplementation('fetch');\n return rejectedSyncPromise('No fetch implementation available');\n }\n\n try {\n // TODO: This may need a `suppressTracing` call in the future when we switch the browser SDK to OTEL\n return nativeFetch(options.url, requestOptions).then(response => {\n pendingBodySize -= requestSize;\n pendingCount--;\n return {\n statusCode: response.status,\n headers: {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n },\n };\n });\n } catch (e) {\n clearCachedImplementation('fetch');\n pendingBodySize -= requestSize;\n pendingCount--;\n return rejectedSyncPromise(e);\n }\n }\n\n return createTransport(options, makeRequest);\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core';\n\n// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n const frame = {\n filename,\n function: func === '<anonymous>' ? UNKNOWN_FUNCTION : func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn = line => {\n // If the stack line has no function name, we need to parse it differently\n const noFnParts = chromeRegexNoFnName.exec(line) ;\n\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n\n const parts = chromeRegex.exec(line) ;\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]) ;\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko = line => {\n const parts = geckoREgex.exec(line) ;\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]) ;\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = line => {\n const parts = winjsRegex.exec(line) ;\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n const parts = opera10Regex.exec(line) ;\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = line => {\n const parts = opera11Regex.exec(line) ;\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func, filename) => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? (func.split('@')[0] ) : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { defineIntegration, addConsoleInstrumentationHandler, addFetchInstrumentationHandler, getClient, addBreadcrumb, getEventDescription, logger, htmlTreeAsString, getComponentName, severityLevelFromString, safeJoin, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/* eslint-disable max-lines */\n\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options = {}) => {\n const _options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (_options.console) {\n addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n }\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n}) ;\n\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n return function addSentryBreadcrumb(event) {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n };\n}\n\n/**\n * A HOC that creates a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client,\n dom,\n) {\n return function _innerDomBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n let target;\n let componentName;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n let maxStringLength =\n typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n const event = handlerData.event ;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target,\n };\n\n if (componentName) {\n breadcrumb.data = { 'ui.component_name': componentName };\n }\n\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client) {\n return function _consoleBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client) {\n return function _xhrBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n // We only capture complete, non-sentry requests\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n\n const { method, url, status_code, body } = sentryXhrData;\n\n const data = {\n method,\n url,\n status_code,\n };\n\n const hint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n const level = getBreadcrumbLogLevelFromHttpStatusCode(status_code);\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n return function _fetchBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n const data = handlerData.fetchData;\n const hint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const response = handlerData.response ;\n const data = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n const level = getBreadcrumbLogLevelFromHttpStatusCode(data.status_code);\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n return function _historyBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : undefined;\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom || !parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n };\n}\n\nfunction _isEvent(event) {\n return !!event && !!(event ).target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'BroadcastChannel',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'SharedWorker',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'BrowserApiErrors';\n\nconst _browserApiErrorsIntegration = ((options = {}) => {\n const _options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n // TODO: This currently only works for the first client this is setup\n // We may want to adjust this to check for client etc.\n setupOnce() {\n if (_options.setTimeout) {\n fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n }\n\n if (_options.setInterval) {\n fill(WINDOW, 'setInterval', _wrapTimeFunction);\n }\n\n if (_options.requestAnimationFrame) {\n fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = _options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n },\n };\n}) ;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original) {\n return function ( ...args) {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: false,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\nfunction _wrapRAF(original) {\n return function ( callback) {\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\nfunction _wrapXHR(originalSend) {\n return function ( ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n fill(xhr, prop, function (original) {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before BrowserApiErrors, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\nfunction _wrapEventTarget(target) {\n const globalObject = WINDOW ;\n const targetObj = globalObject[target];\n const proto = targetObj && targetObj.prototype;\n\n // eslint-disable-next-line no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original)\n\n {\n return function ( eventName, fn, options) {\n try {\n if (isEventListenerObject(fn)) {\n // ESlint disable explanation:\n // First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n // introduce a bug here, because bind returns a new function that doesn't have our\n // flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n // Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n });\n }\n } catch (e2) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n wrap(fn, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(proto, 'removeEventListener', function (originalRemoveEventListener)\n\n {\n return function ( eventName, fn, options) {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n try {\n const originalEventHandler = (fn ).__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, fn, options);\n };\n });\n}\n\nfunction isEventListenerObject(obj) {\n return typeof (obj ).handleEvent === 'function';\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\nimport { defineIntegration, logger, startSession, captureSession } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * When added, automatically creates sessions which allow you to track adoption and crashes (crash free rate) in your Releases in Sentry.\n * More information: https://docs.sentry.io/product/releases/health/\n *\n * Note: In order for session tracking to work, you need to set up Releases: https://docs.sentry.io/product/releases/\n */\nconst browserSessionIntegration = defineIntegration(() => {\n return {\n name: 'BrowserSession',\n setupOnce() {\n if (typeof WINDOW.document === 'undefined') {\n DEBUG_BUILD &&\n logger.warn('Using the `browserSessionIntegration` in non-browser environments is not supported.');\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSession({ ignoreDuration: true });\n captureSession();\n\n // We want to create a session for every navigation as well\n addHistoryInstrumentationHandler(({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (from !== undefined && from !== to) {\n startSession({ ignoreDuration: true });\n captureSession();\n }\n });\n },\n };\n});\n\nexport { browserSessionIntegration };\n//# sourceMappingURL=browsersession.js.map\n","import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isString, getLocationHref, UNKNOWN_FUNCTION, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\n const _options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n Error.stackTraceLimit = 50;\n },\n setup(client) {\n if (_options.onerror) {\n _installGlobalOnErrorHandler(client);\n globalHandlerLog('onerror');\n }\n if (_options.onunhandledrejection) {\n _installGlobalOnUnhandledRejectionHandler(client);\n globalHandlerLog('onunhandledrejection');\n }\n },\n };\n}) ;\n\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client) {\n addGlobalErrorInstrumentationHandler(data => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const { msg, url, line, column, error } = data;\n\n const event = _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onerror',\n },\n });\n });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e );\n\n const event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onunhandledrejection',\n },\n });\n });\n}\n\nfunction _getUnhandledRejectionError(error) {\n if (isPrimitive(error)) {\n return error;\n }\n\n // dig the object of the rejection out of known event types\n try {\n\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in (error )) {\n return (error ).reason;\n }\n\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n if ('detail' in (error ) && 'reason' in (error ).detail) {\n return (error ).detail.reason;\n }\n } catch (e2) {} // eslint-disable-line no-empty\n\n return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason) {\n return {\n exception: {\n values: [\n {\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n },\n ],\n },\n };\n}\n\nfunction _enhanceEventWithInitialFrame(\n event,\n url,\n line,\n column,\n) {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = column;\n const lineno = line;\n const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: UNKNOWN_FUNCTION,\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type) {\n DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n const client = getClient();\n const options = (client && client.getOptions()) || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n\nexport { globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Collects information about HTTP request headers and\n * attaches them to the event.\n */\nconst httpContextIntegration = defineIntegration(() => {\n return {\n name: 'HttpContext',\n preprocessEvent(event) {\n // if none of the information we want exists, don't bother\n if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n return;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n const { referrer } = WINDOW.document || {};\n const { userAgent } = WINDOW.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...event.request, ...(url && { url }), headers };\n\n event.request = request;\n },\n };\n});\n\nexport { httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, applyAggregateErrorsToEvent } from '@sentry/core';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event, hint, client) {\n const options = client.getOptions();\n\n applyAggregateErrorsToEvent(\n // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n exceptionFromError,\n options.stackParser,\n options.maxValueLength,\n key,\n limit,\n event,\n hint,\n );\n },\n };\n}) ;\n\n/**\n * Aggregrate linked errors in an event.\n */\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, dedupeIntegration, consoleSandbox, supportsFetch, logger, stackParserFromStackParserOptions, getIntegrationsToSetup, initAndBind, getCurrentScope, lastEventId, getReportDialogEndpoint, getClient } from '@sentry/core';\nimport { BrowserClient } from './client.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './helpers.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { browserSessionIntegration } from './integrations/browsersession.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(options) {\n /**\n * Note: Please make sure this stays in sync with Angular SDK, which re-exports\n * `getDefaultIntegrations` but with an adjusted set of integrations.\n */\n const integrations = [\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n ];\n\n // eslint-disable-next-line deprecation/deprecation\n if (options.autoSessionTracking !== false) {\n integrations.push(browserSessionIntegration());\n }\n\n return integrations;\n}\n\nfunction applyDefaultOptions(optionsArg = {}) {\n const defaultOptions = {\n defaultIntegrations: getDefaultIntegrations(optionsArg),\n release:\n typeof __SENTRY_RELEASE__ === 'string' // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n ? __SENTRY_RELEASE__\n : WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id // This supports the variable that sentry-webpack-plugin injects\n ? WINDOW.SENTRY_RELEASE.id\n : undefined,\n autoSessionTracking: true,\n sendClientReports: true,\n };\n\n // TODO: Instead of dropping just `defaultIntegrations`, we should simply\n // call `dropUndefinedKeys` on the entire `optionsArg`.\n // However, for this to work we need to adjust the `hasTracingEnabled()` logic\n // first as it differentiates between `undefined` and the key not being in the object.\n if (optionsArg.defaultIntegrations == null) {\n delete optionsArg.defaultIntegrations;\n }\n\n return { ...defaultOptions, ...optionsArg };\n}\n\nfunction shouldShowBrowserExtensionError() {\n const windowWithMaybeExtension =\n typeof WINDOW.window !== 'undefined' && (WINDOW );\n if (!windowWithMaybeExtension) {\n // No need to show the error if we're not in a browser window environment (e.g. service workers)\n return false;\n }\n\n const extensionKey = windowWithMaybeExtension.chrome ? 'chrome' : 'browser';\n const extensionObject = windowWithMaybeExtension[extensionKey];\n\n const runtimeId = extensionObject && extensionObject.runtime && extensionObject.runtime.id;\n const href = (WINDOW.location && WINDOW.location.href) || '';\n\n const extensionProtocols = ['chrome-extension:', 'moz-extension:', 'ms-browser-extension:', 'safari-web-extension:'];\n\n // Running the SDK in a dedicated extension page and calling Sentry.init is fine; no risk of data leakage\n const isDedicatedExtensionPage =\n !!runtimeId && WINDOW === WINDOW.top && extensionProtocols.some(protocol => href.startsWith(`${protocol}//`));\n\n // Running the SDK in NW.js, which appears like a browser extension but isn't, is also fine\n // see: https://github.com/getsentry/sentry-javascript/issues/12668\n const isNWjs = typeof windowWithMaybeExtension.nw !== 'undefined';\n\n return !!runtimeId && !isDedicatedExtensionPage && !isNWjs;\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nfunction init(browserOptions = {}) {\n const options = applyDefaultOptions(browserOptions);\n\n if (!options.skipBrowserExtensionCheck && shouldShowBrowserExtensionError()) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(\n '[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/',\n );\n });\n return;\n }\n\n if (DEBUG_BUILD) {\n if (!supportsFetch()) {\n logger.warn(\n 'No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill.',\n );\n }\n }\n const clientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || makeFetchTransport,\n };\n\n return initAndBind(BrowserClient, clientOptions);\n}\n\n/**\n * All properties the report dialog supports\n */\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nfunction showReportDialog(options = {}) {\n // doesn't work without a document (React Native)\n if (!WINDOW.document) {\n DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n return;\n }\n\n const scope = getCurrentScope();\n const client = scope.getClient();\n const dsn = client && client.getDsn();\n\n if (!dsn) {\n DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n return;\n }\n\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n const eventId = lastEventId();\n if (eventId) {\n options.eventId = eventId;\n }\n }\n\n const script = WINDOW.document.createElement('script');\n script.async = true;\n script.crossOrigin = 'anonymous';\n script.src = getReportDialogEndpoint(dsn, options);\n\n if (options.onLoad) {\n script.onload = options.onLoad;\n }\n\n const { onClose } = options;\n if (onClose) {\n const reportDialogClosedMessageHandler = (event) => {\n if (event.data === '__sentry_reportdialog_closed__') {\n try {\n onClose();\n } finally {\n WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n }\n }\n };\n WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n }\n\n const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n } else {\n DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n }\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction forceLoad() {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n callback();\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\nfunction captureUserFeedback(feedback) {\n const client = getClient();\n if (client) {\n // eslint-disable-next-line deprecation/deprecation\n client.captureUserFeedback(feedback);\n }\n}\n\nexport { captureUserFeedback, forceLoad, getDefaultIntegrations, init, onLoad, showReportDialog };\n//# sourceMappingURL=sdk.js.map\n","import { addXhrInstrumentationHandler, addPerformanceInstrumentationHandler, extractNetworkProtocol, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, instrumentFetchRequest, parseUrl, spanToJSON, browserPerformanceTimeOrigin, hasTracingEnabled, setHttpStatus, getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SentryNonRecordingSpan, getTraceData, stringMatchesSomePattern } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n/** Options for Request Instrumentation */\n\nconst responseToSpanId = new WeakMap();\nconst spanIdToEndTimestamp = new Map();\n\nconst defaultRequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n trackFetchStreamPerformance: false,\n};\n\n/** Registers span creators for xhr and fetch requests */\nfunction instrumentOutgoingRequests(client, _options) {\n const {\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n tracePropagationTargets,\n } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n trackFetchStreamPerformance: defaultRequestInstrumentationOptions.trackFetchStreamPerformance,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n const shouldAttachHeadersWithTargets = (url) => shouldAttachHeaders(url, tracePropagationTargets);\n\n const spans = {};\n\n if (traceFetch) {\n // Keeping track of http requests, whose body payloads resolved later than the initial resolved request\n // e.g. streaming using server sent events (SSE)\n client.addEventProcessor(event => {\n if (event.type === 'transaction' && event.spans) {\n event.spans.forEach(span => {\n if (span.op === 'http.client') {\n const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id);\n if (updatedTimestamp) {\n span.timestamp = updatedTimestamp / 1000;\n spanIdToEndTimestamp.delete(span.span_id);\n }\n }\n });\n }\n return event;\n });\n\n if (trackFetchStreamPerformance) {\n addFetchEndInstrumentationHandler(handlerData => {\n if (handlerData.response) {\n const span = responseToSpanId.get(handlerData.response);\n if (span && handlerData.endTimestamp) {\n spanIdToEndTimestamp.set(span, handlerData.endTimestamp);\n }\n }\n });\n }\n\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n\n if (handlerData.response && handlerData.fetchData.__span) {\n responseToSpanId.set(handlerData.response, handlerData.fetchData.__span);\n }\n\n // We cannot use `window.location` in the generic fetch instrumentation,\n // but we need it for reliable `server.address` attribute.\n // so we extend this in here\n if (createdSpan) {\n const fullUrl = getFullURL(handlerData.fetchData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n createdSpan.setAttributes({\n 'http.url': fullUrl,\n 'server.address': host,\n });\n }\n\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n\n if (traceXHR) {\n addXhrInstrumentationHandler(handlerData => {\n const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n}\n\nfunction isPerformanceResourceTiming(entry) {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry ).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\nfunction getAbsoluteTime(time = 0) {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming) {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nfunction shouldAttachHeaders(\n targetUrl,\n tracePropagationTargets,\n) {\n // window.location.href not being defined is an edge case in the browser but we need to handle it.\n // Potentially dangerous situations where it may not be defined: Browser Extensions, Web Workers, patching of the location obj\n const href = WINDOW.location && WINDOW.location.href;\n\n if (!href) {\n // If there is no window.location.origin, we default to only attaching tracing headers to relative requests, i.e. ones that start with `/`\n // BIG DISCLAIMER: Users can call URLs with a double slash (fetch(\"//example.com/api\")), this is a shorthand for \"send to the same protocol\",\n // so we need a to exclude those requests, because they might be cross origin.\n const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n if (!tracePropagationTargets) {\n return isRelativeSameOriginRequest;\n } else {\n return stringMatchesSomePattern(targetUrl, tracePropagationTargets);\n }\n } else {\n let resolvedUrl;\n let currentOrigin;\n\n // URL parsing may fail, we default to not attaching trace headers in that case.\n try {\n resolvedUrl = new URL(targetUrl, href);\n currentOrigin = new URL(href).origin;\n } catch (e) {\n return false;\n }\n\n const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n if (!tracePropagationTargets) {\n return isSameOriginRequest;\n } else {\n return (\n stringMatchesSomePattern(resolvedUrl.toString(), tracePropagationTargets) ||\n (isSameOriginRequest && stringMatchesSomePattern(resolvedUrl.pathname, tracePropagationTargets))\n );\n }\n }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction xhrCallback(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n) {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(sentryXhrData.url);\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span && sentryXhrData.status_code !== undefined) {\n setHttpStatus(span, sentryXhrData.status_code);\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const fullUrl = getFullURL(sentryXhrData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n attributes: {\n type: 'xhr',\n 'http.method': sentryXhrData.method,\n 'http.url': fullUrl,\n url: sentryXhrData.url,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n spans[xhr.__sentry_xhr_span_id__] = span;\n\n if (shouldAttachHeaders(sentryXhrData.url)) {\n addTracingHeadersToXhrRequest(\n xhr,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n }\n\n return span;\n}\n\nfunction addTracingHeadersToXhrRequest(xhr, span) {\n const { 'sentry-trace': sentryTrace, baggage } = getTraceData({ span });\n\n if (sentryTrace) {\n setHeaderOnXhr(xhr, sentryTrace, baggage);\n }\n}\n\nfunction setHeaderOnXhr(\n xhr,\n sentryTraceHeader,\n sentryBaggageHeader,\n) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('baggage', sentryBaggageHeader);\n }\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n}\n\nfunction getFullURL(url) {\n try {\n // By adding a base URL to new URL(), this will also work for relative urls\n // If `url` is a full URL, the base URL is ignored anyhow\n const parsed = new URL(url, WINDOW.location.origin);\n return parsed.href;\n } catch (e2) {\n return undefined;\n }\n}\n\nexport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { getActiveSpan, getRootSpan, spanToJSON, logger, SPAN_STATUS_ERROR } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n if (WINDOW && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n\n const rootSpan = getRootSpan(activeSpan);\n\n if (WINDOW.document.hidden && rootSpan) {\n const cancelledStatus = 'cancelled';\n\n const { op, status } = spanToJSON(rootSpan);\n\n if (DEBUG_BUILD) {\n logger.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n }\n\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!status) {\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n }\n\n rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n rootSpan.end();\n }\n });\n } else {\n DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","import { startTrackingWebVitals, startTrackingINP, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingInteractions, addHistoryInstrumentationHandler, registerInpInteractionListener, addPerformanceEntries } from '@sentry-internal/browser-utils';\nimport { TRACING_DEFAULTS, registerSpanErrorInstrumentation, GLOBAL_OBJ, getClient, propagationContextFromHeaders, getCurrentScope, spanToJSON, getRootSpan, spanIsSampled, getDynamicSamplingContextFromSpan, browserPerformanceTimeOrigin, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getActiveSpan, getIsolationScope, generateTraceId, getDomElement, startIdleSpan, logger, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\n\n/* eslint-disable max-lines */\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n ...TRACING_DEFAULTS,\n instrumentNavigation: true,\n instrumentPageLoad: true,\n markBackgroundSpan: true,\n enableLongTask: true,\n enableLongAnimationFrame: true,\n enableInp: true,\n _experiments: {},\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nconst browserTracingIntegration = ((_options = {}) => {\n registerSpanErrorInstrumentation();\n\n const {\n enableInp,\n enableLongTask,\n enableLongAnimationFrame,\n _experiments: { enableInteractions, enableStandaloneClsSpans },\n beforeStartSpan,\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n markBackgroundSpan,\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n instrumentPageLoad,\n instrumentNavigation,\n } = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n const _collectWebVitals = startTrackingWebVitals({ recordClsStandaloneSpans: enableStandaloneClsSpans || false });\n\n if (enableInp) {\n startTrackingINP();\n }\n\n if (\n enableLongAnimationFrame &&\n GLOBAL_OBJ.PerformanceObserver &&\n PerformanceObserver.supportedEntryTypes &&\n PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n ) {\n startTrackingLongAnimationFrames();\n } else if (enableLongTask) {\n startTrackingLongTasks();\n }\n\n if (enableInteractions) {\n startTrackingInteractions();\n }\n\n const latestRoute = {\n name: undefined,\n source: undefined,\n };\n\n /** Create routing idle transaction. */\n function _createRouteSpan(client, startSpanOptions) {\n const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n const finalStartSpanOptions = beforeStartSpan\n ? beforeStartSpan(startSpanOptions)\n : startSpanOptions;\n\n const attributes = finalStartSpanOptions.attributes || {};\n\n // If `finalStartSpanOptions.name` is different than `startSpanOptions.name`\n // it is because `beforeStartSpan` set a custom name. Therefore we set the source to 'custom'.\n if (startSpanOptions.name !== finalStartSpanOptions.name) {\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'custom';\n finalStartSpanOptions.attributes = attributes;\n }\n\n latestRoute.name = finalStartSpanOptions.name;\n latestRoute.source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n const idleSpan = startIdleSpan(finalStartSpanOptions, {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n // should wait for finish signal if it's a pageload transaction\n disableAutoFinish: isPageloadTransaction,\n beforeSpanEnd: span => {\n _collectWebVitals();\n addPerformanceEntries(span, { recordClsOnPageloadSpan: !enableStandaloneClsSpans });\n },\n });\n\n function emitFinish() {\n if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n client.emit('idleSpanEnableAutoFinish', idleSpan);\n }\n }\n\n if (isPageloadTransaction && WINDOW.document) {\n WINDOW.document.addEventListener('readystatechange', () => {\n emitFinish();\n });\n\n emitFinish();\n }\n\n return idleSpan;\n }\n\n return {\n name: BROWSER_TRACING_INTEGRATION_ID,\n afterAllSetup(client) {\n let activeSpan;\n let startingUrl = WINDOW.location && WINDOW.location.href;\n\n function maybeEndActiveSpan() {\n if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current active span with op: ${spanToJSON(activeSpan).op}`);\n // If there's an open active span, we need to finish it before creating an new one.\n activeSpan.end();\n }\n }\n\n client.on('startNavigationSpan', startSpanOptions => {\n if (getClient() !== client) {\n return;\n }\n\n maybeEndActiveSpan();\n\n activeSpan = _createRouteSpan(client, {\n op: 'navigation',\n ...startSpanOptions,\n });\n });\n\n client.on('startPageLoadSpan', (startSpanOptions, traceOptions = {}) => {\n if (getClient() !== client) {\n return;\n }\n maybeEndActiveSpan();\n\n const sentryTrace = traceOptions.sentryTrace || getMetaContent('sentry-trace');\n const baggage = traceOptions.baggage || getMetaContent('baggage');\n\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n getCurrentScope().setPropagationContext(propagationContext);\n\n activeSpan = _createRouteSpan(client, {\n op: 'pageload',\n ...startSpanOptions,\n });\n });\n\n // A trace should to stay the consistent over the entire time span of one route.\n // Therefore, when the initial pageload or navigation root span ends, we update the\n // scope's propagation context to keep span-specific attributes like the `sampled` decision and\n // the dynamic sampling context valid, even after the root span has ended.\n // This ensures that the trace data is consistent for the entire duration of the route.\n client.on('spanEnd', span => {\n const op = spanToJSON(span).op;\n if (span !== getRootSpan(span) || (op !== 'navigation' && op !== 'pageload')) {\n return;\n }\n\n const scope = getCurrentScope();\n const oldPropagationContext = scope.getPropagationContext();\n\n scope.setPropagationContext({\n ...oldPropagationContext,\n sampled: oldPropagationContext.sampled !== undefined ? oldPropagationContext.sampled : spanIsSampled(span),\n dsc: oldPropagationContext.dsc || getDynamicSamplingContextFromSpan(span),\n });\n });\n\n if (WINDOW.location) {\n if (instrumentPageLoad) {\n startBrowserTracingPageLoadSpan(client, {\n name: WINDOW.location.pathname,\n // pageload should always start at timeOrigin (and needs to be in s, not ms)\n startTime: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser',\n },\n });\n }\n\n if (instrumentNavigation) {\n addHistoryInstrumentationHandler(({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n startBrowserTracingNavigationSpan(client, {\n name: WINDOW.location.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser',\n },\n });\n }\n });\n }\n }\n\n if (markBackgroundSpan) {\n registerBackgroundTabDetection();\n }\n\n if (enableInteractions) {\n registerInteractionListener(idleTimeout, finalTimeout, childSpanTimeout, latestRoute);\n }\n\n if (enableInp) {\n registerInpInteractionListener();\n }\n\n instrumentOutgoingRequests(client, {\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n tracePropagationTargets: client.getOptions().tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n },\n };\n}) ;\n\n/**\n * Manually start a page load span.\n * This will only do something if a browser tracing integration integration has been setup.\n *\n * If you provide a custom `traceOptions` object, it will be used to continue the trace\n * instead of the default behavior, which is to look it up on the <meta> tags.\n */\nfunction startBrowserTracingPageLoadSpan(\n client,\n spanOptions,\n traceOptions,\n) {\n client.emit('startPageLoadSpan', spanOptions, traceOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'pageload' ? span : undefined;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if a browser tracing integration has been setup.\n */\nfunction startBrowserTracingNavigationSpan(client, spanOptions) {\n getIsolationScope().setPropagationContext({ traceId: generateTraceId() });\n getCurrentScope().setPropagationContext({ traceId: generateTraceId() });\n\n client.emit('startNavigationSpan', spanOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'navigation' ? span : undefined;\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n // eslint-disable-next-line deprecation/deprecation\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n latestRoute,\n) {\n let inflightInteractionSpan;\n const registerInteractionTransaction = () => {\n const op = 'ui.action.click';\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const currentRootSpanOp = spanToJSON(rootSpan).op;\n if (['navigation', 'pageload'].includes(currentRootSpanOp )) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`);\n return undefined;\n }\n }\n\n if (inflightInteractionSpan) {\n inflightInteractionSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'interactionInterrupted');\n inflightInteractionSpan.end();\n inflightInteractionSpan = undefined;\n }\n\n if (!latestRoute.name) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n return undefined;\n }\n\n inflightInteractionSpan = startIdleSpan(\n {\n name: latestRoute.name,\n op,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || 'url',\n },\n },\n {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n },\n );\n };\n\n if (WINDOW.document) {\n addEventListener('click', registerInteractionTransaction, { once: false, capture: true });\n }\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, browserTracingIntegration, getMetaContent, startBrowserTracingNavigationSpan, startBrowserTracingPageLoadSpan };\n//# sourceMappingURL=browserTracingIntegration.js.map\n","import { setContext, init as init$1 } from '@sentry/browser';\nimport { applySdkMetadata } from '@sentry/core';\nimport { version } from 'react';\n\n/**\n * Inits the React SDK\n */\nfunction init(options) {\n const opts = {\n ...options,\n };\n\n applySdkMetadata(opts, 'react');\n setContext('react', { version });\n return init$1(opts);\n}\n\nexport { init };\n//# sourceMappingURL=sdk.js.map\n","import { captureException } from '@sentry/browser';\nimport { isError } from '@sentry/core';\nimport { version } from 'react';\n\n/**\n * See if React major version is 17+ by parsing version string.\n */\nfunction isAtLeastReact17(reactVersion) {\n const reactMajor = reactVersion.match(/^([^.]+)/);\n return reactMajor !== null && parseInt(reactMajor[0]) >= 17;\n}\n\n/**\n * Recurse through `error.cause` chain to set cause on an error.\n */\nfunction setCause(error, cause) {\n const seenErrors = new WeakSet();\n\n function recurse(error, cause) {\n // If we've already seen the error, there is a recursive loop somewhere in the error's\n // cause chain. Let's just bail out then to prevent a stack overflow.\n if (seenErrors.has(error)) {\n return;\n }\n if (error.cause) {\n seenErrors.add(error);\n return recurse(error.cause, cause);\n }\n error.cause = cause;\n }\n\n recurse(error, cause);\n}\n\n/**\n * Captures an error that was thrown by a React ErrorBoundary or React root.\n *\n * @param error The error to capture.\n * @param errorInfo The errorInfo provided by React.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureReactException(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error,\n { componentStack },\n hint,\n) {\n // If on React version >= 17, create stack trace from componentStack param and links\n // to to the original error using `error.cause` otherwise relies on error param for stacktrace.\n // Linking errors requires the `LinkedErrors` integration be enabled.\n // See: https://reactjs.org/blog/2020/08/10/react-v17-rc.html#native-component-stacks\n //\n // Although `componentDidCatch` is typed to accept an `Error` object, it can also be invoked\n // with non-error objects. This is why we need to check if the error is an error-like object.\n // See: https://github.com/getsentry/sentry-javascript/issues/6167\n if (isAtLeastReact17(version) && isError(error) && componentStack) {\n const errorBoundaryError = new Error(error.message);\n errorBoundaryError.name = `React ErrorBoundary ${error.name}`;\n errorBoundaryError.stack = componentStack;\n\n // Using the `LinkedErrors` integration to link the errors together.\n setCause(error, errorBoundaryError);\n }\n\n return captureException(error, {\n ...hint,\n captureContext: {\n contexts: { react: { componentStack } },\n },\n });\n}\n\n/**\n * Creates an error handler that can be used with the `onCaughtError`, `onUncaughtError`,\n * and `onRecoverableError` options in `createRoot` and `hydrateRoot` React DOM methods.\n *\n * @param callback An optional callback that will be called after the error is captured.\n * Use this to add custom handling for errors.\n *\n * @example\n *\n * ```JavaScript\n * const root = createRoot(container, {\n * onCaughtError: Sentry.reactErrorHandler(),\n * onUncaughtError: Sentry.reactErrorHandler((error, errorInfo) => {\n * console.warn('Caught error', error, errorInfo.componentStack);\n * });\n * });\n * ```\n */\nfunction reactErrorHandler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (error, errorInfo) => {\n const eventId = captureReactException(error, errorInfo);\n if (callback) {\n callback(error, errorInfo, eventId);\n }\n };\n}\n\nexport { captureReactException, isAtLeastReact17, reactErrorHandler, setCause };\n//# sourceMappingURL=error.js.map\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { getClient, showReportDialog, withScope } from '@sentry/browser';\nimport { logger } from '@sentry/core';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { captureReactException } from './error.js';\n\nconst UNKNOWN_COMPONENT = 'unknown';\n\nconst INITIAL_STATE = {\n componentStack: null,\n error: null,\n eventId: null,\n};\n\n/**\n * A ErrorBoundary component that logs errors to Sentry.\n * NOTE: If you are a Sentry user, and you are seeing this stack frame, it means the\n * Sentry React SDK ErrorBoundary caught an error invoking your application code. This\n * is expected behavior and NOT indicative of a bug with the Sentry React SDK.\n */\nclass ErrorBoundary extends React.Component {\n\n constructor(props) {\n super(props);ErrorBoundary.prototype.__init.call(this);\n this.state = INITIAL_STATE;\n this._openFallbackReportDialog = true;\n\n const client = getClient();\n if (client && props.showDialog) {\n this._openFallbackReportDialog = false;\n this._cleanupHook = client.on('afterSendEvent', event => {\n if (!event.type && this._lastEventId && event.event_id === this._lastEventId) {\n showReportDialog({ ...props.dialogOptions, eventId: this._lastEventId });\n }\n });\n }\n }\n\n componentDidCatch(error, errorInfo) {\n const { componentStack } = errorInfo;\n // TODO(v9): Remove this check and type `componentStack` to be React.ErrorInfo['componentStack'].\n const passedInComponentStack = componentStack == null ? undefined : componentStack;\n\n const { beforeCapture, onError, showDialog, dialogOptions } = this.props;\n withScope(scope => {\n if (beforeCapture) {\n beforeCapture(scope, error, passedInComponentStack);\n }\n\n const handled = this.props.handled != null ? this.props.handled : !!this.props.fallback;\n const eventId = captureReactException(error, errorInfo, { mechanism: { handled } });\n\n if (onError) {\n onError(error, passedInComponentStack, eventId);\n }\n if (showDialog) {\n this._lastEventId = eventId;\n if (this._openFallbackReportDialog) {\n showReportDialog({ ...dialogOptions, eventId });\n }\n }\n\n // componentDidCatch is used over getDerivedStateFromError\n // so that componentStack is accessible through state.\n this.setState({ error, componentStack, eventId });\n });\n }\n\n componentDidMount() {\n const { onMount } = this.props;\n if (onMount) {\n onMount();\n }\n }\n\n componentWillUnmount() {\n const { error, componentStack, eventId } = this.state;\n const { onUnmount } = this.props;\n if (onUnmount) {\n onUnmount(error, componentStack, eventId);\n }\n\n if (this._cleanupHook) {\n this._cleanupHook();\n this._cleanupHook = undefined;\n }\n }\n\n __init() {this.resetErrorBoundary = () => {\n const { onReset } = this.props;\n const { error, componentStack, eventId } = this.state;\n if (onReset) {\n onReset(error, componentStack, eventId);\n }\n this.setState(INITIAL_STATE);\n };}\n\n render() {\n const { fallback, children } = this.props;\n const state = this.state;\n\n if (state.error) {\n let element = undefined;\n if (typeof fallback === 'function') {\n element = React.createElement(fallback, {\n error: state.error,\n componentStack: state.componentStack ,\n resetError: this.resetErrorBoundary,\n eventId: state.eventId ,\n });\n } else {\n element = fallback;\n }\n\n if (React.isValidElement(element)) {\n return element;\n }\n\n if (fallback) {\n DEBUG_BUILD && logger.warn('fallback did not produce a valid ReactElement');\n }\n\n // Fail gracefully if no fallback provided or is not valid\n return null;\n }\n\n if (typeof children === 'function') {\n return (children )();\n }\n return children;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withErrorBoundary(\n WrappedComponent,\n errorBoundaryOptions,\n) {\n const componentDisplayName = WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n\n const Wrapped = (props) => (\n React.createElement(ErrorBoundary, { ...errorBoundaryOptions,}\n , React.createElement(WrappedComponent, { ...props,} )\n )\n );\n\n Wrapped.displayName = `errorBoundary(${componentDisplayName})`;\n\n // Copy over static methods from Wrapped component to Profiler HOC\n // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n hoistNonReactStatics(Wrapped, WrappedComponent);\n return Wrapped;\n}\n\nexport { ErrorBoundary, UNKNOWN_COMPONENT, withErrorBoundary };\n//# sourceMappingURL=errorboundary.js.map\n","import { browserTracingIntegration, WINDOW, startBrowserTracingPageLoadSpan, startBrowserTracingNavigationSpan } from '@sentry/browser';\nimport { logger, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getClient, getNumberOfUrlSegments, getCurrentScope, getActiveSpan, getRootSpan, spanToJSON } from '@sentry/core';\nimport * as React from 'react';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/* eslint-disable max-lines */\n// Inspired from Donnie McNeal's solution:\n// https://gist.github.com/wontondon/e8c4bdf2888875e4c755712e99279536\n\n\nlet _useEffect;\nlet _useLocation;\nlet _useNavigationType;\nlet _createRoutesFromChildren;\nlet _matchRoutes;\nlet _stripBasename = false;\n\nconst CLIENTS_WITH_INSTRUMENT_NAVIGATION = new WeakSet();\n\n// Keeping as a global variable for cross-usage in multiple functions\nconst allRoutes = new Set();\n\n/**\n * Creates a wrapCreateBrowserRouter function that can be used with all React Router v6 compatible versions.\n */\nfunction createV6CompatibleWrapCreateBrowserRouter\n\n(\n createRouterFunction,\n version,\n) {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n `reactRouterV${version}Instrumentation was unable to wrap the \\`createRouter\\` function because of one or more missing parameters.`,\n );\n\n return createRouterFunction;\n }\n\n return function (routes, opts) {\n routes.forEach(route => {\n allRoutes.add(route);\n });\n\n const router = createRouterFunction(routes, opts);\n const basename = opts && opts.basename;\n\n const activeRootSpan = getActiveRootSpan();\n\n // The initial load ends when `createBrowserRouter` is called.\n // This is the earliest convenient time to update the transaction name.\n // Callbacks to `router.subscribe` are not called for the initial load.\n if (router.state.historyAction === 'POP' && activeRootSpan) {\n updatePageloadTransaction(\n activeRootSpan,\n router.state.location,\n routes,\n undefined,\n basename,\n Array.from(allRoutes),\n );\n }\n\n router.subscribe((state) => {\n if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n // Wait for the next render if loading an unsettled route\n if (state.navigation.state !== 'idle') {\n requestAnimationFrame(() => {\n handleNavigation({\n location: state.location,\n routes,\n navigationType: state.historyAction,\n version,\n basename,\n allRoutes: Array.from(allRoutes),\n });\n });\n } else {\n handleNavigation({\n location: state.location,\n routes,\n navigationType: state.historyAction,\n version,\n basename,\n allRoutes: Array.from(allRoutes),\n });\n }\n }\n });\n\n return router;\n };\n}\n\n/**\n * Creates a wrapCreateMemoryRouter function that can be used with all React Router v6 compatible versions.\n */\nfunction createV6CompatibleWrapCreateMemoryRouter\n\n(\n createRouterFunction,\n version,\n) {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n `reactRouterV${version}Instrumentation was unable to wrap the \\`createMemoryRouter\\` function because of one or more missing parameters.`,\n );\n\n return createRouterFunction;\n }\n\n return function (\n routes,\n opts\n\n,\n ) {\n routes.forEach(route => {\n allRoutes.add(route);\n });\n\n const router = createRouterFunction(routes, opts);\n const basename = opts ? opts.basename : undefined;\n\n const activeRootSpan = getActiveRootSpan();\n let initialEntry = undefined;\n\n const initialEntries = opts ? opts.initialEntries : undefined;\n const initialIndex = opts ? opts.initialIndex : undefined;\n\n const hasOnlyOneInitialEntry = initialEntries && initialEntries.length === 1;\n const hasIndexedEntry = initialIndex !== undefined && initialEntries && initialEntries[initialIndex];\n\n initialEntry = hasOnlyOneInitialEntry\n ? initialEntries[0]\n : hasIndexedEntry\n ? initialEntries[initialIndex]\n : undefined;\n\n const location = initialEntry\n ? typeof initialEntry === 'string'\n ? { pathname: initialEntry }\n : initialEntry\n : router.state.location;\n\n if (router.state.historyAction === 'POP' && activeRootSpan) {\n updatePageloadTransaction(activeRootSpan, location, routes, undefined, basename, Array.from(allRoutes));\n }\n\n router.subscribe((state) => {\n const location = state.location;\n if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n handleNavigation({\n location,\n routes,\n navigationType: state.historyAction,\n version,\n basename,\n allRoutes: Array.from(allRoutes),\n });\n }\n });\n\n return router;\n };\n}\n\n/**\n * Creates a browser tracing integration that can be used with all React Router v6 compatible versions.\n */\nfunction createReactRouterV6CompatibleTracingIntegration(\n options,\n version,\n) {\n const integration = browserTracingIntegration({\n ...options,\n instrumentPageLoad: false,\n instrumentNavigation: false,\n });\n\n const {\n useEffect,\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n stripBasename,\n instrumentPageLoad = true,\n instrumentNavigation = true,\n } = options;\n\n return {\n ...integration,\n setup() {\n _useEffect = useEffect;\n _useLocation = useLocation;\n _useNavigationType = useNavigationType;\n _matchRoutes = matchRoutes;\n _createRoutesFromChildren = createRoutesFromChildren;\n _stripBasename = stripBasename || false;\n },\n afterAllSetup(client) {\n integration.afterAllSetup(client);\n\n const initPathName = WINDOW && WINDOW.location && WINDOW.location.pathname;\n if (instrumentPageLoad && initPathName) {\n startBrowserTracingPageLoadSpan(client, {\n name: initPathName,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.pageload.react.reactrouter_v${version}`,\n },\n });\n }\n\n if (instrumentNavigation) {\n CLIENTS_WITH_INSTRUMENT_NAVIGATION.add(client);\n }\n },\n };\n}\n\nfunction createV6CompatibleWrapUseRoutes(origUseRoutes, version) {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(\n 'reactRouterV6Instrumentation was unable to wrap `useRoutes` because of one or more missing parameters.',\n );\n\n return origUseRoutes;\n }\n\n const SentryRoutes\n\n = (props) => {\n const isMountRenderPass = React.useRef(true);\n const { routes, locationArg } = props;\n\n const Routes = origUseRoutes(routes, locationArg);\n\n const location = _useLocation();\n const navigationType = _useNavigationType();\n\n // A value with stable identity to either pick `locationArg` if available or `location` if not\n const stableLocationParam =\n typeof locationArg === 'string' || (locationArg && locationArg.pathname)\n ? (locationArg )\n : location;\n\n _useEffect(() => {\n const normalizedLocation =\n typeof stableLocationParam === 'string' ? { pathname: stableLocationParam } : stableLocationParam;\n\n if (isMountRenderPass.current) {\n routes.forEach(route => {\n const extractedChildRoutes = getChildRoutesRecursively(route);\n\n extractedChildRoutes.forEach(r => {\n allRoutes.add(r);\n });\n });\n\n updatePageloadTransaction(\n getActiveRootSpan(),\n normalizedLocation,\n routes,\n undefined,\n undefined,\n Array.from(allRoutes),\n );\n isMountRenderPass.current = false;\n } else {\n handleNavigation({\n location: normalizedLocation,\n routes,\n navigationType,\n version,\n allRoutes: Array.from(allRoutes),\n });\n }\n }, [navigationType, stableLocationParam]);\n\n return Routes;\n };\n\n // eslint-disable-next-line react/display-name\n return (routes, locationArg) => {\n return React.createElement(SentryRoutes, { routes: routes, locationArg: locationArg,} );\n };\n}\n\nfunction handleNavigation(opts\n\n) {\n const { location, routes, navigationType, version, matches, basename, allRoutes } = opts;\n const branches = Array.isArray(matches) ? matches : _matchRoutes(routes, location, basename);\n\n const client = getClient();\n if (!client || !CLIENTS_WITH_INSTRUMENT_NAVIGATION.has(client)) {\n return;\n }\n\n if ((navigationType === 'PUSH' || navigationType === 'POP') && branches) {\n let name,\n source = 'url';\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n startBrowserTracingNavigationSpan(client, {\n name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.navigation.react.reactrouter_v${version}`,\n },\n });\n }\n}\n\n/**\n * Strip the basename from a pathname if exists.\n *\n * Vendored and modified from `react-router`\n * https://github.com/remix-run/react-router/blob/462bb712156a3f739d6139a0f14810b76b002df6/packages/router/utils.ts#L1038\n */\nfunction stripBasenameFromPathname(pathname, basename) {\n if (!basename || basename === '/') {\n return pathname;\n }\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return pathname;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n const startIndex = basename.endsWith('/') ? basename.length - 1 : basename.length;\n const nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== '/') {\n // pathname does not start with basename/\n return pathname;\n }\n\n return pathname.slice(startIndex) || '/';\n}\n\nfunction sendIndexPath(pathBuilder, pathname, basename) {\n const reconstructedPath = pathBuilder || _stripBasename ? stripBasenameFromPathname(pathname, basename) : pathname;\n\n const formattedPath =\n // If the path ends with a slash, remove it\n reconstructedPath[reconstructedPath.length - 1] === '/'\n ? reconstructedPath.slice(0, -1)\n : // If the path ends with a wildcard, remove it\n reconstructedPath.slice(-2) === '/*'\n ? reconstructedPath.slice(0, -1)\n : reconstructedPath;\n\n return [formattedPath, 'route'];\n}\n\nfunction pathEndsWithWildcard(path) {\n return path.endsWith('*');\n}\n\nfunction pathIsWildcardAndHasChildren(path, branch) {\n return (pathEndsWithWildcard(path) && branch.route.children && branch.route.children.length > 0) || false;\n}\n\nfunction routeIsDescendant(route) {\n return !!(!route.children && route.element && route.path && route.path.endsWith('/*'));\n}\n\nfunction locationIsInsideDescendantRoute(location, routes) {\n const matchedRoutes = _matchRoutes(routes, location) ;\n\n if (matchedRoutes) {\n for (const match of matchedRoutes) {\n if (routeIsDescendant(match.route) && pickSplat(match)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nfunction getChildRoutesRecursively(route, allRoutes = new Set()) {\n if (!allRoutes.has(route)) {\n allRoutes.add(route);\n\n if (route.children && !route.index) {\n route.children.forEach(child => {\n const childRoutes = getChildRoutesRecursively(child, allRoutes);\n\n childRoutes.forEach(r => allRoutes.add(r));\n });\n }\n }\n\n return allRoutes;\n}\n\nfunction pickPath(match) {\n return trimWildcard(match.route.path || '');\n}\n\nfunction pickSplat(match) {\n return match.params['*'] || '';\n}\n\nfunction trimWildcard(path) {\n return path[path.length - 1] === '*' ? path.slice(0, -1) : path;\n}\n\nfunction trimSlash(path) {\n return path[path.length - 1] === '/' ? path.slice(0, -1) : path;\n}\n\nfunction prefixWithSlash(path) {\n return path[0] === '/' ? path : `/${path}`;\n}\n\nfunction rebuildRoutePathFromAllRoutes(allRoutes, location) {\n const matchedRoutes = _matchRoutes(allRoutes, location) ;\n\n if (!matchedRoutes || matchedRoutes.length === 0) {\n return '';\n }\n\n for (const match of matchedRoutes) {\n if (match.route.path && match.route.path !== '*') {\n const path = pickPath(match);\n const strippedPath = stripBasenameFromPathname(location.pathname, prefixWithSlash(match.pathnameBase));\n\n return trimSlash(\n trimSlash(path || '') +\n prefixWithSlash(\n rebuildRoutePathFromAllRoutes(\n allRoutes.filter(route => route !== match.route),\n {\n pathname: strippedPath,\n },\n ),\n ),\n );\n }\n }\n\n return '';\n}\n\nfunction getNormalizedName(\n routes,\n location,\n branches,\n basename = '',\n) {\n if (!routes || routes.length === 0) {\n return [_stripBasename ? stripBasenameFromPathname(location.pathname, basename) : location.pathname, 'url'];\n }\n\n let pathBuilder = '';\n if (branches) {\n for (const branch of branches) {\n const route = branch.route;\n if (route) {\n // Early return if index route\n if (route.index) {\n return sendIndexPath(pathBuilder, branch.pathname, basename);\n }\n const path = route.path;\n\n // If path is not a wildcard and has no child routes, append the path\n if (path && !pathIsWildcardAndHasChildren(path, branch)) {\n const newPath = path[0] === '/' || pathBuilder[pathBuilder.length - 1] === '/' ? path : `/${path}`;\n pathBuilder = trimSlash(pathBuilder) + prefixWithSlash(newPath);\n\n // If the path matches the current location, return the path\n if (trimSlash(location.pathname) === trimSlash(basename + branch.pathname)) {\n if (\n // If the route defined on the element is something like\n // <Route path=\"/stores/:storeId/products/:productId\" element={<div>Product</div>} />\n // We should check against the branch.pathname for the number of / separators\n // TODO(v9): Put the implementation of `getNumberOfUrlSegments` in this file\n // eslint-disable-next-line deprecation/deprecation\n getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) &&\n // We should not count wildcard operators in the url segments calculation\n !pathEndsWithWildcard(pathBuilder)\n ) {\n return [(_stripBasename ? '' : basename) + newPath, 'route'];\n }\n\n // if the last character of the pathbuilder is a wildcard and there are children, remove the wildcard\n if (pathIsWildcardAndHasChildren(pathBuilder, branch)) {\n pathBuilder = pathBuilder.slice(0, -1);\n }\n\n return [(_stripBasename ? '' : basename) + pathBuilder, 'route'];\n }\n }\n }\n }\n }\n\n const fallbackTransactionName = _stripBasename\n ? stripBasenameFromPathname(location.pathname, basename)\n : location.pathname || '/';\n\n return [fallbackTransactionName, 'url'];\n}\n\nfunction updatePageloadTransaction(\n activeRootSpan,\n location,\n routes,\n matches,\n basename,\n allRoutes,\n) {\n const branches = Array.isArray(matches)\n ? matches\n : (_matchRoutes(allRoutes || routes, location, basename) );\n\n if (branches) {\n let name,\n source = 'url';\n const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n if (isInDescendantRoute) {\n name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n source = 'route';\n }\n\n if (!isInDescendantRoute || !name) {\n [name, source] = getNormalizedName(routes, location, branches, basename);\n }\n\n getCurrentScope().setTransactionName(name || '/');\n\n if (activeRootSpan) {\n activeRootSpan.updateName(name);\n activeRootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createV6CompatibleWithSentryReactRouterRouting(\n Routes,\n version,\n) {\n if (!_useEffect || !_useLocation || !_useNavigationType || !_createRoutesFromChildren || !_matchRoutes) {\n DEBUG_BUILD &&\n logger.warn(`reactRouterV6Instrumentation was unable to wrap Routes because of one or more missing parameters.\n useEffect: ${_useEffect}. useLocation: ${_useLocation}. useNavigationType: ${_useNavigationType}.\n createRoutesFromChildren: ${_createRoutesFromChildren}. matchRoutes: ${_matchRoutes}.`);\n\n return Routes;\n }\n\n const SentryRoutes = (props) => {\n const isMountRenderPass = React.useRef(true);\n\n const location = _useLocation();\n const navigationType = _useNavigationType();\n\n _useEffect(\n () => {\n const routes = _createRoutesFromChildren(props.children) ;\n\n if (isMountRenderPass.current) {\n routes.forEach(route => {\n const extractedChildRoutes = getChildRoutesRecursively(route);\n\n extractedChildRoutes.forEach(r => {\n allRoutes.add(r);\n });\n });\n\n updatePageloadTransaction(getActiveRootSpan(), location, routes, undefined, undefined, Array.from(allRoutes));\n isMountRenderPass.current = false;\n } else {\n handleNavigation({\n location,\n routes,\n navigationType,\n version,\n allRoutes: Array.from(allRoutes),\n });\n }\n },\n // `props.children` is purposely not included in the dependency array, because we do not want to re-run this effect\n // when the children change. We only want to start transactions when the location or navigation type change.\n [location, navigationType],\n );\n\n // @ts-expect-error Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params\n return React.createElement(Routes, { ...props,} );\n };\n\n hoistNonReactStatics(SentryRoutes, Routes);\n\n // @ts-expect-error Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params\n return SentryRoutes;\n}\n\nfunction getActiveRootSpan() {\n const span = getActiveSpan();\n const rootSpan = span ? getRootSpan(span) : undefined;\n\n if (!rootSpan) {\n return undefined;\n }\n\n const op = spanToJSON(rootSpan).op;\n\n // Only use this root span if it is a pageload or navigation span\n return op === 'navigation' || op === 'pageload' ? rootSpan : undefined;\n}\n\nexport { createReactRouterV6CompatibleTracingIntegration, createV6CompatibleWithSentryReactRouterRouting, createV6CompatibleWrapCreateBrowserRouter, createV6CompatibleWrapCreateMemoryRouter, createV6CompatibleWrapUseRoutes, handleNavigation };\n//# sourceMappingURL=reactrouterv6-compat-utils.js.map\n","import { createReactRouterV6CompatibleTracingIntegration, createV6CompatibleWithSentryReactRouterRouting, createV6CompatibleWrapCreateBrowserRouter, createV6CompatibleWrapCreateMemoryRouter, createV6CompatibleWrapUseRoutes } from './reactrouterv6-compat-utils.js';\n\n/**\n * A browser tracing integration that uses React Router v7 to instrument navigations.\n * Expects `useEffect`, `useLocation`, `useNavigationType`, `createRoutesFromChildren` and `matchRoutes` to be passed as options.\n */\nfunction reactRouterV7BrowserTracingIntegration(\n options,\n) {\n return createReactRouterV6CompatibleTracingIntegration(options, '7');\n}\n\n/**\n * A higher-order component that adds Sentry routing instrumentation to a React Router v7 Route component.\n * This is used to automatically capture route changes as transactions.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withSentryReactRouterV7Routing(routes) {\n return createV6CompatibleWithSentryReactRouterRouting(routes, '7');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v7 createBrowserRouter function.\n * This is used to automatically capture route changes as transactions when using the createBrowserRouter API.\n */\nfunction wrapCreateBrowserRouterV7\n\n(createRouterFunction) {\n return createV6CompatibleWrapCreateBrowserRouter(createRouterFunction, '7');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v7 createMemoryRouter function.\n * This is used to automatically capture route changes as transactions when using the createMemoryRouter API.\n * The difference between createBrowserRouter and createMemoryRouter is that with createMemoryRouter,\n * optional `initialEntries` are also taken into account.\n */\nfunction wrapCreateMemoryRouterV7\n\n(createMemoryRouterFunction) {\n return createV6CompatibleWrapCreateMemoryRouter(createMemoryRouterFunction, '7');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v7 useRoutes hook.\n * This is used to automatically capture route changes as transactions when using the useRoutes hook.\n */\nfunction wrapUseRoutesV7(origUseRoutes) {\n return createV6CompatibleWrapUseRoutes(origUseRoutes, '7');\n}\n\nexport { reactRouterV7BrowserTracingIntegration, withSentryReactRouterV7Routing, wrapCreateBrowserRouterV7, wrapCreateMemoryRouterV7, wrapUseRoutesV7 };\n//# sourceMappingURL=reactrouterv7.js.map\n","var Typography_module_default = {\n\t\"font-body-xs-regular\": \"_font-body-xs-regular_6v6n8_12\",\n\t\"font-body-xs-semibold\": \"_font-body-xs-semibold_6v6n8_17\",\n\t\"font-body-xs-medium\": \"_font-body-xs-medium_6v6n8_22\",\n\t\"font-body-sm-regular\": \"_font-body-sm-regular_6v6n8_31\",\n\t\"font-body-sm-semibold\": \"_font-body-sm-semibold_6v6n8_36\",\n\t\"font-body-sm-medium\": \"_font-body-sm-medium_6v6n8_41\",\n\t\"font-body-md-regular\": \"_font-body-md-regular_6v6n8_50\",\n\t\"font-body-md-semibold\": \"_font-body-md-semibold_6v6n8_55\",\n\t\"font-body-md-medium\": \"_font-body-md-medium_6v6n8_60\",\n\t\"font-body-lg-regular\": \"_font-body-lg-regular_6v6n8_69\",\n\t\"font-body-lg-semibold\": \"_font-body-lg-semibold_6v6n8_74\",\n\t\"font-body-lg-medium\": \"_font-body-lg-medium_6v6n8_79\",\n\t\"font-heading-sm-regular\": \"_font-heading-sm-regular_6v6n8_88\",\n\t\"font-heading-sm-semibold\": \"_font-heading-sm-semibold_6v6n8_93\",\n\t\"font-heading-sm-medium\": \"_font-heading-sm-medium_6v6n8_98\",\n\t\"font-heading-md-regular\": \"_font-heading-md-regular_6v6n8_107\",\n\t\"font-heading-md-semibold\": \"_font-heading-md-semibold_6v6n8_112\",\n\t\"font-heading-lg-regular\": \"_font-heading-lg-regular_6v6n8_121\",\n\t\"font-heading-lg-semibold\": \"_font-heading-lg-semibold_6v6n8_126\",\n\t\"font-heading-xl-regular\": \"_font-heading-xl-regular_6v6n8_135\",\n\t\"font-heading-xl-semibold\": \"_font-heading-xl-semibold_6v6n8_140\",\n\ttypography: \"_typography_6v6n8_153\"\n};\n//#endregion\nexport { Typography_module_default as default };\n\n//# sourceMappingURL=Typography.module.js.map","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import Typography_module_default from \"./Typography.module.js\";\nimport classNames from \"classnames\";\nimport \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Typography/Typography.tsx\nvar Typography = ({ as, children, type = \"body\", weight = \"regular\", size = \"md\", className, ...restProps }) => {\n\treturn /* @__PURE__ */ jsx(as || \"p\", {\n\t\t...restProps,\n\t\tclassName: classNames(Typography_module_default.typography, Typography_module_default[`font-${type}-${size}-${weight}`], className),\n\t\tchildren\n\t});\n};\n//#endregion\nexport { Typography };\n\n//# sourceMappingURL=Typography.js.map","import { Typography } from \"./Typography.js\";\nimport \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Typography/Text.tsx\n/**\n* A text component. Underlying HTML element can be changed using the `as`\n* property. Will default to be a paragraph.\n*/\nvar Text = ({ as = \"p\", children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Typography, {\n\t\tas,\n\t\ttype: \"body\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n//#endregion\nexport { Text };\n\n//# sourceMappingURL=Text.js.map","var Button_module_default = {\n\tbutton: \"_button_1nw83_8\",\n\t\"icon-only\": \"_icon-only_1nw83_53\",\n\t\"has-icon\": \"_has-icon_1nw83_60\",\n\tdestructive: \"_destructive_1nw83_110\"\n};\n//#endregion\nexport { Button_module_default as default };\n\n//# sourceMappingURL=Button.module.js.map","import { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Button/UnstyledButton.tsx\n/**\n* Unstyled button component. Can be disabled and optionally rendered as an anchor.\n* Intended to be wrapped with styles and exported as new button type - eg `IconButton` or `Button`.\n*\n* Not to be used externally.\n*/\nvar UnstyledButton = forwardRef(function UnstyledButton({ as, children, className, disabled, ...props }, ref) {\n\tconst Component = as || \"button\";\n\tconst { onClick, onSubmit, onPointerDown, onPointerUp, onKeyDown, onKeyUp, onKeyPress, ...restProps } = props;\n\tconst eventHandlers = disabled ? {} : {\n\t\tonClick,\n\t\tonSubmit,\n\t\tonPointerDown,\n\t\tonPointerUp,\n\t\tonKeyDown,\n\t\tonKeyUp,\n\t\tonKeyPress\n\t};\n\treturn /* @__PURE__ */ jsx(Component, {\n\t\tref,\n\t\tclassName,\n\t\trole: as === \"a\" ? \"link\" : \"button\",\n\t\ttabIndex: 0,\n\t\t\"aria-disabled\": disabled,\n\t\t...restProps,\n\t\t...eventHandlers,\n\t\tchildren\n\t});\n});\n//#endregion\nexport { UnstyledButton };\n\n//# sourceMappingURL=UnstyledButton.js.map","import Button_module_default from \"./Button.module.js\";\nimport { UnstyledButton } from \"./UnstyledButton.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\n//#region src/components/Button/Button.tsx\n/**\n* A button component that can be transformed into a link, but keep the button\n* styling using the `as` property.\n*/\nvar Button = forwardRef(function Button({ as, kind: kindProp = \"primary\", size = \"lg\", children, className, iconOnly, Icon, destructive: destructiveProp, disabled, ...props }, ref) {\n\tconst [kind, destructive] = kindProp === \"destructive\" ? [\"secondary\", true] : [kindProp, destructiveProp];\n\tconst classes = classNames(Button_module_default.button, className, {\n\t\t[Button_module_default[\"has-icon\"]]: Icon,\n\t\t[Button_module_default[\"icon-only\"]]: iconOnly,\n\t\t[Button_module_default.destructive]: destructive\n\t});\n\tconst iconSize = iconOnly && size === \"lg\" ? 24 : 20;\n\treturn /* @__PURE__ */ jsxs(UnstyledButton, {\n\t\t...props,\n\t\tas: as || \"button\",\n\t\tref,\n\t\tclassName: classes,\n\t\t\"data-size\": size,\n\t\t\"data-kind\": kind,\n\t\ttabIndex: 0,\n\t\tdisabled,\n\t\tchildren: [Icon && /* @__PURE__ */ jsx(Icon, {\n\t\t\twidth: iconSize,\n\t\t\theight: iconSize,\n\t\t\tclassName: Button_module_default.icon,\n\t\t\t\"aria-hidden\": true\n\t\t}), children]\n\t});\n});\n//#endregion\nexport { Button };\n\n//# sourceMappingURL=Button.js.map","//#region src/components/Icon/IndicatorIcon/IndicatorIcon.module.css\nvar IndicatorIcon_module_default = { \"indicator-icon\": \"_indicator-icon_147l5_17\" };\n//#endregion\nexport { IndicatorIcon_module_default as default };\n\n//# sourceMappingURL=IndicatorIcon.module.js.map","import IndicatorIcon_module_default from \"./IndicatorIcon.module.js\";\nimport classNames from \"classnames\";\nimport React, { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Icon/IndicatorIcon/IndicatorIcon.tsx\nvar IndicatorIcon = forwardRef(function IconButton({ children, className, size = \"100%\", colour, indicator }, ref) {\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tref,\n\t\tclassName: classNames(IndicatorIcon_module_default[\"indicator-icon\"], className),\n\t\t\"data-indicator\": indicator,\n\t\tstyle: {\n\t\t\t\"--cpd-icon-button-size\": size,\n\t\t\t\"--cpd-color-icon-tertiary\": colour\n\t\t},\n\t\tchildren: React.Children.only(children)\n\t});\n});\n//#endregion\nexport { IndicatorIcon };\n\n//# sourceMappingURL=IndicatorIcon.js.map","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","/*!\n* tabbable 6.5.0\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\n// NOTE: separate `:not()` selectors has broader browser support than the newer\n// `:not([inert], [inert] *)` (Feb 2023)\nvar candidateSelectors = ['input:not([inert]):not([inert] *)', 'select:not([inert]):not([inert] *)', 'textarea:not([inert]):not([inert] *)', 'a[href]:not([inert]):not([inert] *)', 'area[href]:not([inert]):not([inert] *)', 'button:not([inert]):not([inert] *)', '[tabindex]:not(slot):not([inert]):not([inert] *)', 'audio[controls]:not([inert]):not([inert] *)', 'video[controls]:not([inert]):not([inert] *)', '[contenteditable]:not([contenteditable=\"false\"]):not([inert]):not([inert] *)', 'details>summary:first-of-type:not([inert]):not([inert] *)', 'details:not([inert]):not([inert] *)'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n var _element$getRootNode;\n return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);\n} : function (element) {\n return element === null || element === void 0 ? void 0 : element.ownerDocument;\n};\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Node} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n * see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n * False if `node` is falsy.\n */\nvar _isInert = function isInert(node, lookUp) {\n var _node$getAttribute;\n if (lookUp === void 0) {\n lookUp = true;\n }\n // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n // JS API property; we have to check the attribute, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's an active element\n var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'inert');\n var inert = inertAtt === '' || inertAtt === 'true';\n\n // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n // if it weren't for `matches()` not being a function on shadow roots; the following\n // code works for any kind of node\n var result = inert || lookUp && node && (\n // closest does not exist on shadow roots, so we fall back to a manual\n // lookup upward, in case it is not defined.\n typeof node.closest === 'function' ? node.closest('[inert]') : _isInert(node.parentNode));\n return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nvar isContentEditable = function isContentEditable(node) {\n var _node$getAttribute2;\n // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n // to use the attribute directly to check for this, which can either be empty or 'true';\n // if it's `null` (not specified) or 'false', it's a non-editable element\n var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, 'contenteditable');\n return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n // even if `includeContainer=false`, we still have to check it for inertness because\n // if it's inert (either by itself or via its parent), then all its children are inert\n if (_isInert(el)) {\n return [];\n }\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidateScope>}\n */\nvar _getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n if (_isInert(element, false)) {\n // no need to look up since we're drilling down\n // anything inside this container will also be inert\n continue;\n }\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = _getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: nestedCandidates\n });\n }\n } else {\n // check candidate element\n var validCandidate = matches.call(element, candidateSelector);\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n var shadowRoot = element.shadowRoot ||\n // check for an undisclosed shadow\n typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n\n // no inert look up because we're already drilling down and checking for inertness\n // on the way down, so all containers to this root node should have already been\n // vetted as non-inert\n var validShadowRoot = !_isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n var _nestedCandidates = _getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nvar hasTabIndex = function hasTabIndex(node) {\n return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nvar getTabIndex = function getTabIndex(node) {\n if (!node) {\n throw new Error('No node provided');\n }\n if (node.tabIndex < 0) {\n // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n if ((/^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || isContentEditable(node)) && !hasTabIndex(node)) {\n return 0;\n }\n }\n return node.tabIndex;\n};\n\n/**\n * Determine the tab index of a given node __for sort order purposes__.\n * @param {HTMLElement} node\n * @param {boolean} [isScope] True for a custom element with shadow root or slot that, by default,\n * has tabIndex -1, but needs to be sorted by document order in order for its content to be\n * inserted into the correct sort position.\n * @returns {number} Tab order (negative, 0, or positive number).\n */\nvar getSortOrderTabIndex = function getSortOrderTabIndex(node, isScope) {\n var tabIndex = getTabIndex(node);\n if (tabIndex < 0 && isScope && !hasTabIndex(node)) {\n return 0;\n }\n return tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput(node) {\n return node.tagName === 'INPUT';\n};\nvar isHiddenInput = function isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n};\nvar isDetailsWithSummary = function isDetailsWithSummary(node) {\n var r = node.tagName === 'DETAILS' && Array.prototype.slice.apply(node.children).some(function (child) {\n return child.tagName === 'SUMMARY';\n });\n return r;\n};\nvar getCheckedRadio = function getCheckedRadio(nodes, form) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\nvar isTabbableRadio = function isTabbableRadio(node) {\n if (!node.name) {\n return true;\n }\n var radioScope = node.form || getRootNode(node);\n var queryRadios = function queryRadios(name) {\n return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n };\n var radioSet;\n if (typeof window !== 'undefined' && typeof window.CSS !== 'undefined' && typeof window.CSS.escape === 'function') {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s', err.message);\n return false;\n }\n }\n var checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\nvar isRadio = function isRadio(node) {\n return isInput(node) && node.type === 'radio';\n};\nvar isNonTabbableRadio = function isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\n\n// determines if a node is ultimately attached to the window's document\nvar isNodeAttached = function isNodeAttached(node) {\n var _nodeRoot;\n // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n // (but NOT _the_ document; see second 'If' comment below for more).\n // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n // is attached, and the one we need to check if it's in the document or not (because the\n // shadow, and all nodes it contains, is never considered in the document since shadows\n // behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n // is hidden, or is not in the document itself but is detached, it will affect the shadow's\n // visibility, including all the nodes it contains). The host could be any normal node,\n // or a custom element (i.e. web component). Either way, that's the one that is considered\n // part of the document, not the shadow root, nor any of its children (i.e. the node being\n // tested).\n // To further complicate things, we have to look all the way up until we find a shadow HOST\n // that is attached (or find none) because the node might be in nested shadows...\n // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n // document (per the docs) and while it's a Document-type object, that document does not\n // appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n // to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n // using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n // node is actually detached.\n // NOTE: If `nodeRootHost` or `node` happens to be the `document` itself (which is possible\n // if a tabbable/focusable node was quickly added to the DOM, focused, and then removed\n // from the DOM as in https://github.com/focus-trap/focus-trap-react/issues/905), then\n // `ownerDocument` will be `null`, hence the optional chaining on it.\n var nodeRoot = node && getRootNode(node);\n var nodeRootHost = (_nodeRoot = nodeRoot) === null || _nodeRoot === void 0 ? void 0 : _nodeRoot.host;\n\n // in some cases, a detached node will return itself as the root instead of a document or\n // shadow root object, in which case, we shouldn't try to look further up the host chain\n var attached = false;\n if (nodeRoot && nodeRoot !== node) {\n var _nodeRootHost, _nodeRootHost$ownerDo, _node$ownerDocument;\n attached = !!((_nodeRootHost = nodeRootHost) !== null && _nodeRootHost !== void 0 && (_nodeRootHost$ownerDo = _nodeRootHost.ownerDocument) !== null && _nodeRootHost$ownerDo !== void 0 && _nodeRootHost$ownerDo.contains(nodeRootHost) || node !== null && node !== void 0 && (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 && _node$ownerDocument.contains(node));\n while (!attached && nodeRootHost) {\n var _nodeRoot2, _nodeRootHost2, _nodeRootHost2$ownerD;\n // since it's not attached and we have a root host, the node MUST be in a nested shadow DOM,\n // which means we need to get the host's host and check if that parent host is contained\n // in (i.e. attached to) the document\n nodeRoot = getRootNode(nodeRootHost);\n nodeRootHost = (_nodeRoot2 = nodeRoot) === null || _nodeRoot2 === void 0 ? void 0 : _nodeRoot2.host;\n attached = !!((_nodeRootHost2 = nodeRootHost) !== null && _nodeRootHost2 !== void 0 && (_nodeRootHost2$ownerD = _nodeRootHost2.ownerDocument) !== null && _nodeRootHost2$ownerD !== void 0 && _nodeRootHost2$ownerD.contains(nodeRootHost));\n }\n }\n return attached;\n};\nvar isZeroArea = function isZeroArea(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n width = _node$getBoundingClie.width,\n height = _node$getBoundingClie.height;\n return width === 0 && height === 0;\n};\nvar isHidden = function isHidden(node, _ref) {\n var displayCheck = _ref.displayCheck,\n getShadowRoot = _ref.getShadowRoot;\n if (displayCheck === 'full-native') {\n if ('checkVisibility' in node) {\n // Chrome >= 105, Edge >= 105, Firefox >= 106, Safari >= 17.4\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility#browser_compatibility\n var visible = node.checkVisibility({\n // Checking opacity might be desirable for some use cases, but natively,\n // opacity zero elements _are_ focusable and tabbable.\n checkOpacity: false,\n opacityProperty: false,\n contentVisibilityAuto: true,\n visibilityProperty: true,\n // This is an alias for `visibilityProperty`. Contemporary browsers\n // support both. However, this alias has wider browser support (Chrome\n // >= 105 and Firefox >= 106, vs. Chrome >= 121 and Firefox >= 122), so\n // we include it anyway.\n checkVisibilityCSS: true\n });\n return !visible;\n }\n // Fall through to manual visibility checks\n }\n\n // NOTE: visibility will be `undefined` if node is detached from the document\n // (see notes about this further down), which means we will consider it visible\n // (this is legacy behavior from a very long way back)\n // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n // _visibility_ check, not a _display_ check\n var _getComputedStyle = getComputedStyle(node),\n visibility = _getComputedStyle.visibility;\n if (visibility === 'hidden' || visibility === 'collapse') {\n return true;\n }\n var isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n return true;\n }\n if (!displayCheck || displayCheck === 'full' ||\n // full-native can run this branch when it falls through in case\n // Element#checkVisibility is unsupported\n displayCheck === 'full-native' || displayCheck === 'legacy-full') {\n if (typeof getShadowRoot === 'function') {\n // figure out if we should consider the node to be in an undisclosed shadow and use the\n // 'non-zero-area' fallback\n var originalNode = node;\n while (node) {\n var parentElement = node.parentElement;\n var rootNode = getRootNode(node);\n if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n ) {\n // node has an undisclosed shadow which means we can only treat it as a black box, so we\n // fall back to a non-zero-area test\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n // iterate up slot\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n // cross shadow boundary\n node = rootNode.host;\n } else {\n // iterate up normal dom\n node = parentElement;\n }\n }\n node = originalNode;\n }\n // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n // (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n // it might be a falsy value, which means shadow DOM support is disabled\n\n // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n // now we can just test to see if it would normally be visible or not, provided it's\n // attached to the main document.\n // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n // `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n if (isNodeAttached(node)) {\n // this works wherever the node is: if there's at least one client rect, it's\n // somehow displayed; it also covers the CSS 'display: contents' case where the\n // node itself is hidden in place of its contents; and there's no need to search\n // up the hierarchy either\n return !node.getClientRects().length;\n }\n\n // Else, the node isn't attached to the document, which means the `getClientRects()`\n // API will __always__ return zero rects (this can happen, for example, if React\n // is used to render nodes onto a detached tree, as confirmed in this thread:\n // https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n //\n // It also means that even window.getComputedStyle(node).display will return `undefined`\n // because styles are only computed for nodes that are in the document.\n //\n // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n // somehow. Though it was never stated officially, anyone who has ever used tabbable\n // APIs on nodes in detached containers has actually implicitly used tabbable in what\n // was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n // considering __everything__ to be visible because of the innability to determine styles.\n //\n // v6.0.0: As of this major release, the default 'full' option __no longer treats detached\n // nodes as visible with the 'none' fallback.__\n if (displayCheck !== 'legacy-full') {\n return true; // hidden\n }\n // else, fallback to 'none' mode and consider the node visible\n } else if (displayCheck === 'non-zero-area') {\n // NOTE: Even though this tests that the node's client rect is non-zero to determine\n // whether it's displayed, and that a detached node will __always__ have a zero-area\n // client rect, we don't special-case for whether the node is attached or not. In\n // this mode, we do want to consider nodes that have a zero area to be hidden at all\n // times, and that includes attached or not.\n return isZeroArea(node);\n }\n\n // visible, as far as we can tell, or per current `displayCheck=none` mode, we assume\n // it's visible\n return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n// unless they are in the _first_ <legend> element of the top-most disabled\n// fieldset\nvar isDisabledFromFieldset = function isDisabledFromFieldset(node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n var parentNode = node.parentElement;\n // check if `node` is contained in a disabled <fieldset>\n while (parentNode) {\n if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n // look for the first <legend> among the children of the disabled <fieldset>\n for (var i = 0; i < parentNode.children.length; i++) {\n var child = parentNode.children.item(i);\n // when the first <legend> (in document order) is found\n if (child.tagName === 'LEGEND') {\n // if its parent <fieldset> is not nested in another disabled <fieldset>,\n // return whether `node` is a descendant of its first <legend>\n return matches.call(parentNode, 'fieldset[disabled] *') ? true : !child.contains(node);\n }\n }\n // the disabled <fieldset> containing `node` has no <legend>\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n\n // else, node's tabbable/focusable state should not be affected by a fieldset's\n // enabled/disabled state\n return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {\n if (node.disabled || isHiddenInput(node) || isHidden(node, options) ||\n // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n return false;\n }\n return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {\n if (isNonTabbableRadio(node) || getTabIndex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n return false;\n }\n return true;\n};\nvar isShadowRootTabbable = function isShadowRootTabbable(shadowHostNode) {\n var tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n // If a custom element has an explicit negative tabindex,\n // browsers will not allow tab targeting said element's children.\n return false;\n};\n\n/**\n * @param {Array.<Element|CandidateScope>} candidates\n * @returns Element[]\n */\nvar _sortByOrder = function sortByOrder(candidates) {\n var regularTabbables = [];\n var orderedTabbables = [];\n candidates.forEach(function (item, i) {\n var isScope = !!item.scopeParent;\n var element = isScope ? item.scopeParent : item;\n var candidateTabindex = getSortOrderTabIndex(element, isScope);\n var elements = isScope ? _sortByOrder(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item: item,\n isScope: isScope,\n content: elements\n });\n }\n });\n return orderedTabbables.sort(sortOrderedTabbables).reduce(function (acc, sortable) {\n sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n return acc;\n }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable(container, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = _getCandidatesIteratively([container], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isShadowRootTabbable\n });\n } else {\n candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n }\n return _sortByOrder(candidates);\n};\nvar focusable = function focusable(container, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = _getCandidatesIteratively([container], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot\n });\n } else {\n candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n }\n return candidates;\n};\nvar isTabbable = function isTabbable(node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* #__PURE__ */candidateSelectors.concat('iframe:not([inert]):not([inert] *)').join(',');\nvar isFocusable = function isFocusable(node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { focusable, getTabIndex, isFocusable, isTabbable, tabbable };\n//# sourceMappingURL=index.esm.js.map\n","import { isShadowRoot, isHTMLElement } from '@floating-ui/utils/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport { floor } from '@floating-ui/utils';\nimport { tabbable } from 'tabbable';\n\n// Avoid Chrome DevTools blue warning.\nfunction getPlatform() {\n const uaData = navigator.userAgentData;\n if (uaData != null && uaData.platform) {\n return uaData.platform;\n }\n return navigator.platform;\n}\nfunction getUserAgent() {\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n return uaData.brands.map(_ref => {\n let {\n brand,\n version\n } = _ref;\n return brand + \"/\" + version;\n }).join(' ');\n }\n return navigator.userAgent;\n}\nfunction isSafari() {\n // Chrome DevTools does not complain about navigator.vendor\n return /apple/i.test(navigator.vendor);\n}\nfunction isAndroid() {\n const re = /android/i;\n return re.test(getPlatform()) || re.test(getUserAgent());\n}\nfunction isMac() {\n return getPlatform().toLowerCase().startsWith('mac') && !navigator.maxTouchPoints;\n}\nfunction isJSDOM() {\n return getUserAgent().includes('jsdom/');\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction activeElement(doc) {\n let activeElement = doc.activeElement;\n while (((_activeElement = activeElement) == null || (_activeElement = _activeElement.shadowRoot) == null ? void 0 : _activeElement.activeElement) != null) {\n var _activeElement;\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n}\nfunction contains(parent, child) {\n if (!parent || !child) {\n return false;\n }\n const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n // First, attempt with faster native method\n if (parent.contains(child)) {\n return true;\n }\n\n // then fallback to custom implementation with Shadow DOM support\n if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n while (next) {\n if (parent === next) {\n return true;\n }\n // @ts-ignore\n next = next.parentNode || next.host;\n }\n }\n\n // Give up, the result is false\n return false;\n}\nfunction getTarget(event) {\n if ('composedPath' in event) {\n return event.composedPath()[0];\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support\n // `composedPath()`, but browsers without shadow DOM don't.\n return event.target;\n}\nfunction isEventTargetWithin(event, node) {\n if (node == null) {\n return false;\n }\n if ('composedPath' in event) {\n return event.composedPath().includes(node);\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n const e = event;\n return e.target != null && node.contains(e.target);\n}\nfunction isRootElement(element) {\n return element.matches('html,body');\n}\nfunction getDocument(node) {\n return (node == null ? void 0 : node.ownerDocument) || document;\n}\nfunction isTypeableElement(element) {\n return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);\n}\nfunction isTypeableCombobox(element) {\n if (!element) return false;\n return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\nfunction matchesFocusVisible(element) {\n // We don't want to block focus from working with `visibleOnly`\n // (JSDOM doesn't match `:focus-visible` when the element has `:focus`)\n if (!element || isJSDOM()) return true;\n try {\n return element.matches(':focus-visible');\n } catch (_e) {\n return true;\n }\n}\nfunction getFloatingFocusElement(floatingElement) {\n if (!floatingElement) {\n return null;\n }\n // Try to find the element that has `{...getFloatingProps()}` spread on it.\n // This indicates the floating element is acting as a positioning wrapper, and\n // so focus should be managed on the child element with the event handlers and\n // aria props.\n return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(\"[\" + FOCUSABLE_ATTRIBUTE + \"]\") || floatingElement;\n}\n\nfunction getNodeChildren(nodes, id, onlyOpenChildren) {\n if (onlyOpenChildren === void 0) {\n onlyOpenChildren = true;\n }\n const directChildren = nodes.filter(node => {\n var _node$context;\n return node.parentId === id && (!onlyOpenChildren || ((_node$context = node.context) == null ? void 0 : _node$context.open));\n });\n return directChildren.flatMap(child => [child, ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);\n}\nfunction getDeepestNode(nodes, id) {\n let deepestNodeId;\n let maxDepth = -1;\n function findDeepest(nodeId, depth) {\n if (depth > maxDepth) {\n deepestNodeId = nodeId;\n maxDepth = depth;\n }\n const children = getNodeChildren(nodes, nodeId);\n children.forEach(child => {\n findDeepest(child.id, depth + 1);\n });\n }\n findDeepest(id, 0);\n return nodes.find(node => node.id === deepestNodeId);\n}\nfunction getNodeAncestors(nodes, id) {\n var _nodes$find;\n let allAncestors = [];\n let currentParentId = (_nodes$find = nodes.find(node => node.id === id)) == null ? void 0 : _nodes$find.parentId;\n while (currentParentId) {\n const currentNode = nodes.find(node => node.id === currentParentId);\n currentParentId = currentNode == null ? void 0 : currentNode.parentId;\n if (currentNode) {\n allAncestors = allAncestors.concat(currentNode);\n }\n }\n return allAncestors;\n}\n\nfunction stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction isReactEvent(event) {\n return 'nativeEvent' in event;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/b35d5c02fe900badccd0cf1a8f23bb593419f238/packages/@react-aria/utils/src/isVirtualEvent.ts\nfunction isVirtualClick(event) {\n // FIXME: Firefox is now emitting a deprecation warning for `mozInputSource`.\n // Try to find a workaround for this. `react-aria` source still has the check.\n if (event.mozInputSource === 0 && event.isTrusted) {\n return true;\n }\n if (isAndroid() && event.pointerType) {\n return event.type === 'click' && event.buttons === 1;\n }\n return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n if (isJSDOM()) return false;\n return !isAndroid() && event.width === 0 && event.height === 0 || isAndroid() && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n // iOS VoiceOver returns 0.333• for width/height.\n event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n const values = ['mouse', 'pen'];\n if (!strict) {\n values.push('', undefined);\n }\n return values.includes(pointerType);\n}\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n ...React\n};\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\nconst useInsertionEffect = SafeReact.useInsertionEffect;\nconst useSafeInsertionEffect = useInsertionEffect || (fn => fn());\nfunction useEffectEvent(callback) {\n const ref = React.useRef(() => {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error('Cannot call an event handler while rendering.');\n }\n });\n useSafeInsertionEffect(() => {\n ref.current = callback;\n });\n return React.useCallback(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return ref.current == null ? void 0 : ref.current(...args);\n }, []);\n}\n\nfunction isDifferentGridRow(index, cols, prevRow) {\n return Math.floor(index / cols) !== prevRow;\n}\nfunction isIndexOutOfListBounds(listRef, index) {\n return index < 0 || index >= listRef.current.length;\n}\nfunction getMinListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n disabledIndices\n });\n}\nfunction getMaxListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef, {\n decrement: true,\n startingIndex: listRef.current.length,\n disabledIndices\n });\n}\nfunction findNonDisabledListIndex(listRef, _temp) {\n let {\n startingIndex = -1,\n decrement = false,\n disabledIndices,\n amount = 1\n } = _temp === void 0 ? {} : _temp;\n let index = startingIndex;\n do {\n index += decrement ? -amount : amount;\n } while (index >= 0 && index <= listRef.current.length - 1 && isListIndexDisabled(listRef, index, disabledIndices));\n return index;\n}\nfunction getGridNavigatedIndex(listRef, _ref) {\n let {\n event,\n orientation,\n loop,\n rtl,\n cols,\n disabledIndices,\n minIndex,\n maxIndex,\n prevIndex,\n stopEvent: stop = false\n } = _ref;\n let nextIndex = prevIndex;\n if (event.key === ARROW_UP) {\n stop && stopEvent(event);\n if (prevIndex === -1) {\n nextIndex = maxIndex;\n } else {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: nextIndex,\n amount: cols,\n decrement: true,\n disabledIndices\n });\n if (loop && (prevIndex - cols < minIndex || nextIndex < 0)) {\n const col = prevIndex % cols;\n const maxCol = maxIndex % cols;\n const offset = maxIndex - (maxCol - col);\n if (maxCol === col) {\n nextIndex = maxIndex;\n } else {\n nextIndex = maxCol > col ? offset : offset - cols;\n }\n }\n }\n if (isIndexOutOfListBounds(listRef, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === ARROW_DOWN) {\n stop && stopEvent(event);\n if (prevIndex === -1) {\n nextIndex = minIndex;\n } else {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex,\n amount: cols,\n disabledIndices\n });\n if (loop && prevIndex + cols > maxIndex) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex % cols - cols,\n amount: cols,\n disabledIndices\n });\n }\n }\n if (isIndexOutOfListBounds(listRef, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n\n // Remains on the same row/column.\n if (orientation === 'both') {\n const prevRow = floor(prevIndex / cols);\n if (event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT)) {\n stop && stopEvent(event);\n if (prevIndex % cols !== cols - 1) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex,\n disabledIndices\n });\n if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n }\n } else if (loop) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT)) {\n stop && stopEvent(event);\n if (prevIndex % cols !== 0) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex,\n decrement: true,\n disabledIndices\n });\n if (loop && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n }\n } else if (loop) {\n nextIndex = findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n const lastRow = floor(maxIndex / cols) === prevRow;\n if (isIndexOutOfListBounds(listRef, nextIndex)) {\n if (loop && lastRow) {\n nextIndex = event.key === (rtl ? ARROW_RIGHT : ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(listRef, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n } else {\n nextIndex = prevIndex;\n }\n }\n }\n return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nfunction createGridCellMap(sizes, cols, dense) {\n const cellMap = [];\n let startIndex = 0;\n sizes.forEach((_ref2, index) => {\n let {\n width,\n height\n } = _ref2;\n if (width > cols) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(\"[Floating UI]: Invalid grid - item width at index \" + index + \" is greater than grid columns\");\n }\n }\n let itemPlaced = false;\n if (dense) {\n startIndex = 0;\n }\n while (!itemPlaced) {\n const targetCells = [];\n for (let i = 0; i < width; i++) {\n for (let j = 0; j < height; j++) {\n targetCells.push(startIndex + i + j * cols);\n }\n }\n if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n targetCells.forEach(cell => {\n cellMap[cell] = index;\n });\n itemPlaced = true;\n } else {\n startIndex++;\n }\n }\n });\n\n // convert into a non-sparse array\n return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nfunction getGridCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n if (index === -1) return -1;\n const firstCellIndex = cellMap.indexOf(index);\n const sizeItem = sizes[index];\n switch (corner) {\n case 'tl':\n return firstCellIndex;\n case 'tr':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + sizeItem.width - 1;\n case 'bl':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + (sizeItem.height - 1) * cols;\n case 'br':\n return cellMap.lastIndexOf(index);\n }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nfunction getGridCellIndices(indices, cellMap) {\n return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nfunction isListIndexDisabled(listRef, index, disabledIndices) {\n if (typeof disabledIndices === 'function') {\n return disabledIndices(index);\n } else if (disabledIndices) {\n return disabledIndices.includes(index);\n }\n const element = listRef.current[index];\n return element == null || element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true';\n}\n\nconst getTabbableOptions = () => ({\n getShadowRoot: true,\n displayCheck:\n // JSDOM does not support the `tabbable` library. To solve this we can\n // check if `ResizeObserver` is a real function (not polyfilled), which\n // determines if the current environment is JSDOM-like.\n typeof ResizeObserver === 'function' && ResizeObserver.toString().includes('[native code]') ? 'full' : 'none'\n});\nfunction getTabbableIn(container, dir) {\n const list = tabbable(container, getTabbableOptions());\n const len = list.length;\n if (len === 0) return;\n const active = activeElement(getDocument(container));\n const index = list.indexOf(active);\n const nextIndex = index === -1 ? dir === 1 ? 0 : len - 1 : index + dir;\n return list[nextIndex];\n}\nfunction getNextTabbable(referenceElement) {\n return getTabbableIn(getDocument(referenceElement).body, 1) || referenceElement;\n}\nfunction getPreviousTabbable(referenceElement) {\n return getTabbableIn(getDocument(referenceElement).body, -1) || referenceElement;\n}\nfunction isOutsideEvent(event, container) {\n const containerElement = container || event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return !relatedTarget || !contains(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n const tabbableElements = tabbable(container, getTabbableOptions());\n tabbableElements.forEach(element => {\n element.dataset.tabindex = element.getAttribute('tabindex') || '';\n element.setAttribute('tabindex', '-1');\n });\n}\nfunction enableFocusInside(container) {\n const elements = container.querySelectorAll('[data-tabindex]');\n elements.forEach(element => {\n const tabindex = element.dataset.tabindex;\n delete element.dataset.tabindex;\n if (tabindex) {\n element.setAttribute('tabindex', tabindex);\n } else {\n element.removeAttribute('tabindex');\n }\n });\n}\n\nexport { activeElement, contains, createGridCellMap, disableFocusInside, enableFocusInside, findNonDisabledListIndex, getDeepestNode, getDocument, getFloatingFocusElement, getGridCellIndexOfCorner, getGridCellIndices, getGridNavigatedIndex, getMaxListIndex, getMinListIndex, getNextTabbable, getNodeAncestors, getNodeChildren, getPlatform, getPreviousTabbable, getTabbableOptions, getTarget, getUserAgent, isAndroid, isDifferentGridRow, isEventTargetWithin, isIndexOutOfListBounds, isJSDOM, isListIndexDisabled, isMac, isMouseLikePointerType, isOutsideEvent, isReactEvent, isRootElement, isSafari, isTypeableCombobox, isTypeableElement, isVirtualClick, isVirtualPointerEvent, matchesFocusVisible, stopEvent, useEffectEvent, useLatestRef, index as useModernLayoutEffect };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => {\n const result = offset$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => {\n const result = shift$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => {\n const result = limitShift$1(options);\n return {\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => {\n const result = flip$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => {\n const result = size$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => {\n const result = autoPlacement$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => {\n const result = hide$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => {\n const result = inline$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => {\n const result = arrow$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { useModernLayoutEffect, useEffectEvent, getMinListIndex, getMaxListIndex, createGridCellMap, isListIndexDisabled, getGridNavigatedIndex, getGridCellIndexOfCorner, getGridCellIndices, findNonDisabledListIndex, isIndexOutOfListBounds, useLatestRef, getDocument as getDocument$1, isMouseLikePointerType, contains as contains$1, isSafari, enableFocusInside, isOutsideEvent, getPreviousTabbable, getNextTabbable, disableFocusInside, isTypeableCombobox, getFloatingFocusElement, getTabbableOptions, getNodeAncestors, activeElement, getNodeChildren as getNodeChildren$1, stopEvent, getTarget as getTarget$1, isVirtualClick, isVirtualPointerEvent, getPlatform, isTypeableElement, isReactEvent, isRootElement, isEventTargetWithin, matchesFocusVisible, isMac, getDeepestNode, getUserAgent } from '@floating-ui/react/utils';\nimport { jsx, jsxs, Fragment } from 'react/jsx-runtime';\nimport { getComputedStyle, isElement, isShadowRoot, getNodeName, isNode, isHTMLElement, getWindow, isLastTraversableNode, getParentNode, isWebKit } from '@floating-ui/utils/dom';\nimport { tabbable, isTabbable, focusable } from 'tabbable';\nimport * as ReactDOM from 'react-dom';\nimport { getOverflowAncestors, useFloating as useFloating$1, offset } from '@floating-ui/react-dom';\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/react-dom';\nimport { evaluate, max, min, round } from '@floating-ui/utils';\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n * @see https://floating-ui.com/docs/react-utils#usemergerefs\n */\nfunction useMergeRefs(refs) {\n const cleanupRef = React.useRef(undefined);\n const refEffect = React.useCallback(instance => {\n const cleanups = refs.map(ref => {\n if (ref == null) {\n return;\n }\n if (typeof ref === 'function') {\n const refCallback = ref;\n const refCleanup = refCallback(instance);\n return typeof refCleanup === 'function' ? refCleanup : () => {\n refCallback(null);\n };\n }\n ref.current = instance;\n return () => {\n ref.current = null;\n };\n });\n return () => {\n cleanups.forEach(refCleanup => refCleanup == null ? void 0 : refCleanup());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return value => {\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = undefined;\n }\n if (value != null) {\n cleanupRef.current = refEffect(value);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\n\nfunction sortByDocumentPosition(a, b) {\n const position = a.compareDocumentPosition(b);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n return 0;\n}\nconst FloatingListContext = /*#__PURE__*/React.createContext({\n register: () => {},\n unregister: () => {},\n map: /*#__PURE__*/new Map(),\n elementsRef: {\n current: []\n }\n});\n/**\n * Provides context for a list of items within the floating element.\n * @see https://floating-ui.com/docs/FloatingList\n */\nfunction FloatingList(props) {\n const {\n children,\n elementsRef,\n labelsRef\n } = props;\n const [nodes, setNodes] = React.useState(() => new Set());\n const register = React.useCallback(node => {\n setNodes(prevSet => new Set(prevSet).add(node));\n }, []);\n const unregister = React.useCallback(node => {\n setNodes(prevSet => {\n const set = new Set(prevSet);\n set.delete(node);\n return set;\n });\n }, []);\n const map = React.useMemo(() => {\n const newMap = new Map();\n const sortedNodes = Array.from(nodes.keys()).sort(sortByDocumentPosition);\n sortedNodes.forEach((node, index) => {\n newMap.set(node, index);\n });\n return newMap;\n }, [nodes]);\n return /*#__PURE__*/jsx(FloatingListContext.Provider, {\n value: React.useMemo(() => ({\n register,\n unregister,\n map,\n elementsRef,\n labelsRef\n }), [register, unregister, map, elementsRef, labelsRef]),\n children: children\n });\n}\n/**\n * Used to register a list item and its index (DOM position) in the\n * `FloatingList`.\n * @see https://floating-ui.com/docs/FloatingList#uselistitem\n */\nfunction useListItem(props) {\n if (props === void 0) {\n props = {};\n }\n const {\n label\n } = props;\n const {\n register,\n unregister,\n map,\n elementsRef,\n labelsRef\n } = React.useContext(FloatingListContext);\n const [index, setIndex] = React.useState(null);\n const componentRef = React.useRef(null);\n const ref = React.useCallback(node => {\n componentRef.current = node;\n if (index !== null) {\n elementsRef.current[index] = node;\n if (labelsRef) {\n var _node$textContent;\n const isLabelDefined = label !== undefined;\n labelsRef.current[index] = isLabelDefined ? label : (_node$textContent = node == null ? void 0 : node.textContent) != null ? _node$textContent : null;\n }\n }\n }, [index, elementsRef, labelsRef, label]);\n useModernLayoutEffect(() => {\n const node = componentRef.current;\n if (node) {\n register(node);\n return () => {\n unregister(node);\n };\n }\n }, [register, unregister]);\n useModernLayoutEffect(() => {\n const index = componentRef.current ? map.get(componentRef.current) : null;\n if (index != null) {\n setIndex(index);\n }\n }, [map]);\n return React.useMemo(() => ({\n ref,\n index: index == null ? -1 : index\n }), [index, ref]);\n}\n\nconst FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\n\nfunction renderJsx(render, computedProps) {\n if (typeof render === 'function') {\n return render(computedProps);\n }\n if (render) {\n return /*#__PURE__*/React.cloneElement(render, computedProps);\n }\n return /*#__PURE__*/jsx(\"div\", {\n ...computedProps\n });\n}\nconst CompositeContext = /*#__PURE__*/React.createContext({\n activeIndex: 0,\n onNavigate: () => {}\n});\nconst horizontalKeys = [ARROW_LEFT, ARROW_RIGHT];\nconst verticalKeys = [ARROW_UP, ARROW_DOWN];\nconst allKeys = [...horizontalKeys, ...verticalKeys];\n\n/**\n * Creates a single tab stop whose items are navigated by arrow keys, which\n * provides list navigation outside of floating element contexts.\n *\n * This is useful to enable navigation of a list of items that aren’t part of a\n * floating element. A menubar is an example of a composite, with each reference\n * element being an item.\n * @see https://floating-ui.com/docs/Composite\n */\nconst Composite = /*#__PURE__*/React.forwardRef(function Composite(props, forwardedRef) {\n const {\n render,\n orientation = 'both',\n loop = true,\n rtl = false,\n cols = 1,\n disabledIndices,\n activeIndex: externalActiveIndex,\n onNavigate: externalSetActiveIndex,\n itemSizes,\n dense = false,\n ...domProps\n } = props;\n const [internalActiveIndex, internalSetActiveIndex] = React.useState(0);\n const activeIndex = externalActiveIndex != null ? externalActiveIndex : internalActiveIndex;\n const onNavigate = useEffectEvent(externalSetActiveIndex != null ? externalSetActiveIndex : internalSetActiveIndex);\n const elementsRef = React.useRef([]);\n const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n const contextValue = React.useMemo(() => ({\n activeIndex,\n onNavigate\n }), [activeIndex, onNavigate]);\n const isGrid = cols > 1;\n function handleKeyDown(event) {\n if (!allKeys.includes(event.key)) return;\n let nextIndex = activeIndex;\n const minIndex = getMinListIndex(elementsRef, disabledIndices);\n const maxIndex = getMaxListIndex(elementsRef, disabledIndices);\n const horizontalEndKey = rtl ? ARROW_LEFT : ARROW_RIGHT;\n const horizontalStartKey = rtl ? ARROW_RIGHT : ARROW_LEFT;\n if (isGrid) {\n const sizes = itemSizes || Array.from({\n length: elementsRef.current.length\n }, () => ({\n width: 1,\n height: 1\n }));\n // To calculate movements on the grid, we use hypothetical cell indices\n // as if every item was 1x1, then convert back to real indices.\n const cellMap = createGridCellMap(sizes, cols, dense);\n const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices));\n // last enabled index\n const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(elementsRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n const maybeNextIndex = cellMap[getGridNavigatedIndex({\n current: cellMap.map(itemIndex => itemIndex ? elementsRef.current[itemIndex] : null)\n }, {\n event,\n orientation,\n loop,\n rtl,\n cols,\n // treat undefined (empty grid spaces) as disabled indices so we\n // don't end up in them\n disabledIndices: getGridCellIndices([...((typeof disabledIndices !== 'function' ? disabledIndices : null) || elementsRef.current.map((_, index) => isListIndexDisabled(elementsRef, index, disabledIndices) ? index : undefined)), undefined], cellMap),\n minIndex: minGridIndex,\n maxIndex: maxGridIndex,\n prevIndex: getGridCellIndexOfCorner(activeIndex > maxIndex ? minIndex : activeIndex, sizes, cellMap, cols,\n // use a corner matching the edge closest to the direction we're\n // moving in so we don't end up in the same item. Prefer\n // top/left over bottom/right.\n event.key === ARROW_DOWN ? 'bl' : event.key === horizontalEndKey ? 'tr' : 'tl')\n })];\n if (maybeNextIndex != null) {\n nextIndex = maybeNextIndex;\n }\n }\n const toEndKeys = {\n horizontal: [horizontalEndKey],\n vertical: [ARROW_DOWN],\n both: [horizontalEndKey, ARROW_DOWN]\n }[orientation];\n const toStartKeys = {\n horizontal: [horizontalStartKey],\n vertical: [ARROW_UP],\n both: [horizontalStartKey, ARROW_UP]\n }[orientation];\n const preventedKeys = isGrid ? allKeys : {\n horizontal: horizontalKeys,\n vertical: verticalKeys,\n both: allKeys\n }[orientation];\n if (nextIndex === activeIndex && [...toEndKeys, ...toStartKeys].includes(event.key)) {\n if (loop && nextIndex === maxIndex && toEndKeys.includes(event.key)) {\n nextIndex = minIndex;\n } else if (loop && nextIndex === minIndex && toStartKeys.includes(event.key)) {\n nextIndex = maxIndex;\n } else {\n nextIndex = findNonDisabledListIndex(elementsRef, {\n startingIndex: nextIndex,\n decrement: toStartKeys.includes(event.key),\n disabledIndices\n });\n }\n }\n if (nextIndex !== activeIndex && !isIndexOutOfListBounds(elementsRef, nextIndex)) {\n var _elementsRef$current$;\n event.stopPropagation();\n if (preventedKeys.includes(event.key)) {\n event.preventDefault();\n }\n onNavigate(nextIndex);\n (_elementsRef$current$ = elementsRef.current[nextIndex]) == null || _elementsRef$current$.focus();\n }\n }\n const computedProps = {\n ...domProps,\n ...renderElementProps,\n ref: forwardedRef,\n 'aria-orientation': orientation === 'both' ? undefined : orientation,\n onKeyDown(e) {\n domProps.onKeyDown == null || domProps.onKeyDown(e);\n renderElementProps.onKeyDown == null || renderElementProps.onKeyDown(e);\n handleKeyDown(e);\n }\n };\n return /*#__PURE__*/jsx(CompositeContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/jsx(FloatingList, {\n elementsRef: elementsRef,\n children: renderJsx(render, computedProps)\n })\n });\n});\n/**\n * @see https://floating-ui.com/docs/Composite\n */\nconst CompositeItem = /*#__PURE__*/React.forwardRef(function CompositeItem(props, forwardedRef) {\n const {\n render,\n ...domProps\n } = props;\n const renderElementProps = render && typeof render !== 'function' ? render.props : {};\n const {\n activeIndex,\n onNavigate\n } = React.useContext(CompositeContext);\n const {\n ref,\n index\n } = useListItem();\n const mergedRef = useMergeRefs([ref, forwardedRef, renderElementProps.ref]);\n const isActive = activeIndex === index;\n const computedProps = {\n ...domProps,\n ...renderElementProps,\n ref: mergedRef,\n tabIndex: isActive ? 0 : -1,\n 'data-active': isActive ? '' : undefined,\n onFocus(e) {\n domProps.onFocus == null || domProps.onFocus(e);\n renderElementProps.onFocus == null || renderElementProps.onFocus(e);\n onNavigate(index);\n }\n };\n return renderJsx(render, computedProps);\n});\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n ...React\n};\n\nlet serverHandoffComplete = false;\nlet count = 0;\nconst genId = () => // Ensure the id is unique with multiple independent versions of Floating UI\n// on <React 18\n\"floating-ui-\" + Math.random().toString(36).slice(2, 6) + count++;\nfunction useFloatingId() {\n const [id, setId] = React.useState(() => serverHandoffComplete ? genId() : undefined);\n useModernLayoutEffect(() => {\n if (id == null) {\n setId(genId());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n React.useEffect(() => {\n serverHandoffComplete = true;\n }, []);\n return id;\n}\nconst useReactId = SafeReact.useId;\n\n/**\n * Uses React 18's built-in `useId()` when available, or falls back to a\n * slightly less performant (requiring a double render) implementation for\n * earlier React versions.\n * @see https://floating-ui.com/docs/react-utils#useid\n */\nconst useId = useReactId || useFloatingId;\n\nlet devMessageSet;\nif (process.env.NODE_ENV !== \"production\") {\n devMessageSet = /*#__PURE__*/new Set();\n}\nfunction warn() {\n var _devMessageSet;\n for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet = devMessageSet) != null && _devMessageSet.has(message))) {\n var _devMessageSet2;\n (_devMessageSet2 = devMessageSet) == null || _devMessageSet2.add(message);\n console.warn(message);\n }\n}\nfunction error() {\n var _devMessageSet3;\n for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n messages[_key2] = arguments[_key2];\n }\n const message = \"Floating UI: \" + messages.join(' ');\n if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {\n var _devMessageSet4;\n (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);\n console.error(message);\n }\n}\n\n/**\n * Renders a pointing arrow triangle.\n * @see https://floating-ui.com/docs/FloatingArrow\n */\nconst FloatingArrow = /*#__PURE__*/React.forwardRef(function FloatingArrow(props, ref) {\n const {\n context: {\n placement,\n elements: {\n floating\n },\n middlewareData: {\n arrow,\n shift\n }\n },\n width = 14,\n height = 7,\n tipRadius = 0,\n strokeWidth = 0,\n staticOffset,\n stroke,\n d,\n style: {\n transform,\n ...restStyle\n } = {},\n ...rest\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (!ref) {\n warn('The `ref` prop is required for `FloatingArrow`.');\n }\n }\n const clipPathId = useId();\n const [isRTL, setIsRTL] = React.useState(false);\n\n // https://github.com/floating-ui/floating-ui/issues/2932\n useModernLayoutEffect(() => {\n if (!floating) return;\n const isRTL = getComputedStyle(floating).direction === 'rtl';\n if (isRTL) {\n setIsRTL(true);\n }\n }, [floating]);\n if (!floating) {\n return null;\n }\n const [side, alignment] = placement.split('-');\n const isVerticalSide = side === 'top' || side === 'bottom';\n let computedStaticOffset = staticOffset;\n if (isVerticalSide && shift != null && shift.x || !isVerticalSide && shift != null && shift.y) {\n computedStaticOffset = null;\n }\n\n // Strokes must be double the border width, this ensures the stroke's width\n // works as you'd expect.\n const computedStrokeWidth = strokeWidth * 2;\n const halfStrokeWidth = computedStrokeWidth / 2;\n const svgX = width / 2 * (tipRadius / -8 + 1);\n const svgY = height / 2 * tipRadius / 4;\n const isCustomShape = !!d;\n const yOffsetProp = computedStaticOffset && alignment === 'end' ? 'bottom' : 'top';\n let xOffsetProp = computedStaticOffset && alignment === 'end' ? 'right' : 'left';\n if (computedStaticOffset && isRTL) {\n xOffsetProp = alignment === 'end' ? 'left' : 'right';\n }\n const arrowX = (arrow == null ? void 0 : arrow.x) != null ? computedStaticOffset || arrow.x : '';\n const arrowY = (arrow == null ? void 0 : arrow.y) != null ? computedStaticOffset || arrow.y : '';\n const dValue = d || 'M0,0' + (\" H\" + width) + (\" L\" + (width - svgX) + \",\" + (height - svgY)) + (\" Q\" + width / 2 + \",\" + height + \" \" + svgX + \",\" + (height - svgY)) + ' Z';\n const rotation = {\n top: isCustomShape ? 'rotate(180deg)' : '',\n left: isCustomShape ? 'rotate(90deg)' : 'rotate(-90deg)',\n bottom: isCustomShape ? '' : 'rotate(180deg)',\n right: isCustomShape ? 'rotate(-90deg)' : 'rotate(90deg)'\n }[side];\n return /*#__PURE__*/jsxs(\"svg\", {\n ...rest,\n \"aria-hidden\": true,\n ref: ref,\n width: isCustomShape ? width : width + computedStrokeWidth,\n height: width,\n viewBox: \"0 0 \" + width + \" \" + (height > width ? height : width),\n style: {\n position: 'absolute',\n pointerEvents: 'none',\n [xOffsetProp]: arrowX,\n [yOffsetProp]: arrowY,\n [side]: isVerticalSide || isCustomShape ? '100%' : \"calc(100% - \" + computedStrokeWidth / 2 + \"px)\",\n transform: [rotation, transform].filter(t => !!t).join(' '),\n ...restStyle\n },\n children: [computedStrokeWidth > 0 && /*#__PURE__*/jsx(\"path\", {\n clipPath: \"url(#\" + clipPathId + \")\",\n fill: \"none\",\n stroke: stroke\n // Account for the stroke on the fill path rendered below.\n ,\n strokeWidth: computedStrokeWidth + (d ? 0 : 1),\n d: dValue\n }), /*#__PURE__*/jsx(\"path\", {\n stroke: computedStrokeWidth && !d ? rest.fill : 'none',\n d: dValue\n }), /*#__PURE__*/jsx(\"clipPath\", {\n id: clipPathId,\n children: /*#__PURE__*/jsx(\"rect\", {\n x: -halfStrokeWidth,\n y: halfStrokeWidth * (isCustomShape ? -1 : 1),\n width: width + computedStrokeWidth,\n height: width\n })\n })]\n });\n});\n\nfunction createEventEmitter() {\n const map = new Map();\n return {\n emit(event, data) {\n var _map$get;\n (_map$get = map.get(event)) == null || _map$get.forEach(listener => listener(data));\n },\n on(event, listener) {\n if (!map.has(event)) {\n map.set(event, new Set());\n }\n map.get(event).add(listener);\n },\n off(event, listener) {\n var _map$get2;\n (_map$get2 = map.get(event)) == null || _map$get2.delete(listener);\n }\n };\n}\n\nconst FloatingNodeContext = /*#__PURE__*/React.createContext(null);\nconst FloatingTreeContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */\nconst useFloatingParentNodeId = () => {\n var _React$useContext;\n return ((_React$useContext = React.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;\n};\n\n/**\n * Returns the nearest floating tree context, if available.\n */\nconst useFloatingTree = () => React.useContext(FloatingTreeContext);\n\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction useFloatingNodeId(customParentId) {\n const id = useId();\n const tree = useFloatingTree();\n const reactParentId = useFloatingParentNodeId();\n const parentId = customParentId || reactParentId;\n useModernLayoutEffect(() => {\n if (!id) return;\n const node = {\n id,\n parentId\n };\n tree == null || tree.addNode(node);\n return () => {\n tree == null || tree.removeNode(node);\n };\n }, [tree, id, parentId]);\n return id;\n}\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingNode(props) {\n const {\n children,\n id\n } = props;\n const parentId = useFloatingParentNodeId();\n return /*#__PURE__*/jsx(FloatingNodeContext.Provider, {\n value: React.useMemo(() => ({\n id,\n parentId\n }), [id, parentId]),\n children: children\n });\n}\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n */\nfunction FloatingTree(props) {\n const {\n children\n } = props;\n const nodesRef = React.useRef([]);\n const addNode = React.useCallback(node => {\n nodesRef.current = [...nodesRef.current, node];\n }, []);\n const removeNode = React.useCallback(node => {\n nodesRef.current = nodesRef.current.filter(n => n !== node);\n }, []);\n const [events] = React.useState(() => createEventEmitter());\n return /*#__PURE__*/jsx(FloatingTreeContext.Provider, {\n value: React.useMemo(() => ({\n nodesRef,\n addNode,\n removeNode,\n events\n }), [addNode, removeNode, events]),\n children: children\n });\n}\n\nfunction createAttribute(name) {\n return \"data-floating-ui-\" + name;\n}\n\nfunction clearTimeoutIfSet(timeoutRef) {\n if (timeoutRef.current !== -1) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = -1;\n }\n}\n\nconst safePolygonIdentifier = /*#__PURE__*/createAttribute('safe-polygon');\nfunction getDelay(value, prop, pointerType) {\n if (pointerType && !isMouseLikePointerType(pointerType)) {\n return 0;\n }\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'function') {\n const result = value();\n if (typeof result === 'number') {\n return result;\n }\n return result == null ? void 0 : result[prop];\n }\n return value == null ? void 0 : value[prop];\n}\nfunction getRestMs(value) {\n if (typeof value === 'function') {\n return value();\n }\n return value;\n}\n/**\n * Opens the floating element while hovering over the reference element, like\n * CSS `:hover`.\n * @see https://floating-ui.com/docs/useHover\n */\nfunction useHover(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n events,\n elements\n } = context;\n const {\n enabled = true,\n delay = 0,\n handleClose = null,\n mouseOnly = false,\n restMs = 0,\n move = true\n } = props;\n const tree = useFloatingTree();\n const parentId = useFloatingParentNodeId();\n const handleCloseRef = useLatestRef(handleClose);\n const delayRef = useLatestRef(delay);\n const openRef = useLatestRef(open);\n const restMsRef = useLatestRef(restMs);\n const pointerTypeRef = React.useRef();\n const timeoutRef = React.useRef(-1);\n const handlerRef = React.useRef();\n const restTimeoutRef = React.useRef(-1);\n const blockMouseMoveRef = React.useRef(true);\n const performedPointerEventsMutationRef = React.useRef(false);\n const unbindMouseMoveRef = React.useRef(() => {});\n const restTimeoutPendingRef = React.useRef(false);\n const isHoverOpen = useEffectEvent(() => {\n var _dataRef$current$open;\n const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;\n return (type == null ? void 0 : type.includes('mouse')) && type !== 'mousedown';\n });\n\n // When closing before opening, clear the delay timeouts to cancel it\n // from showing.\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n open\n } = _ref;\n if (!open) {\n clearTimeoutIfSet(timeoutRef);\n clearTimeoutIfSet(restTimeoutRef);\n blockMouseMoveRef.current = true;\n restTimeoutPendingRef.current = false;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [enabled, events]);\n React.useEffect(() => {\n if (!enabled) return;\n if (!handleCloseRef.current) return;\n if (!open) return;\n function onLeave(event) {\n if (isHoverOpen()) {\n onOpenChange(false, event, 'hover');\n }\n }\n const html = getDocument$1(elements.floating).documentElement;\n html.addEventListener('mouseleave', onLeave);\n return () => {\n html.removeEventListener('mouseleave', onLeave);\n };\n }, [elements.floating, open, onOpenChange, enabled, handleCloseRef, isHoverOpen]);\n const closeWithDelay = React.useCallback(function (event, runElseBranch, reason) {\n if (runElseBranch === void 0) {\n runElseBranch = true;\n }\n if (reason === void 0) {\n reason = 'hover';\n }\n const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);\n if (closeDelay && !handlerRef.current) {\n clearTimeoutIfSet(timeoutRef);\n timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);\n } else if (runElseBranch) {\n clearTimeoutIfSet(timeoutRef);\n onOpenChange(false, event, reason);\n }\n }, [delayRef, onOpenChange]);\n const cleanupMouseMoveHandler = useEffectEvent(() => {\n unbindMouseMoveRef.current();\n handlerRef.current = undefined;\n });\n const clearPointerEvents = useEffectEvent(() => {\n if (performedPointerEventsMutationRef.current) {\n const body = getDocument$1(elements.floating).body;\n body.style.pointerEvents = '';\n body.removeAttribute(safePolygonIdentifier);\n performedPointerEventsMutationRef.current = false;\n }\n });\n const isClickLikeOpenEvent = useEffectEvent(() => {\n return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;\n });\n\n // Registering the mouse events on the reference directly to bypass React's\n // delegation system. If the cursor was on a disabled element and then entered\n // the reference (no gap), `mouseenter` doesn't fire in the delegation system.\n React.useEffect(() => {\n if (!enabled) return;\n function onReferenceMouseEnter(event) {\n clearTimeoutIfSet(timeoutRef);\n blockMouseMoveRef.current = false;\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || getRestMs(restMsRef.current) > 0 && !getDelay(delayRef.current, 'open')) {\n return;\n }\n const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);\n if (openDelay) {\n timeoutRef.current = window.setTimeout(() => {\n if (!openRef.current) {\n onOpenChange(true, event, 'hover');\n }\n }, openDelay);\n } else if (!open) {\n onOpenChange(true, event, 'hover');\n }\n }\n function onReferenceMouseLeave(event) {\n if (isClickLikeOpenEvent()) {\n clearPointerEvents();\n return;\n }\n unbindMouseMoveRef.current();\n const doc = getDocument$1(elements.floating);\n clearTimeoutIfSet(restTimeoutRef);\n restTimeoutPendingRef.current = false;\n if (handleCloseRef.current && dataRef.current.floatingContext) {\n // Prevent clearing `onScrollMouseLeave` timeout.\n if (!open) {\n clearTimeoutIfSet(timeoutRef);\n }\n handlerRef.current = handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event, true, 'safe-polygon');\n }\n }\n });\n const handler = handlerRef.current;\n doc.addEventListener('mousemove', handler);\n unbindMouseMoveRef.current = () => {\n doc.removeEventListener('mousemove', handler);\n };\n return;\n }\n\n // Allow interactivity without `safePolygon` on touch devices. With a\n // pointer, a short close delay is an alternative, so it should work\n // consistently.\n const shouldClose = pointerTypeRef.current === 'touch' ? !contains$1(elements.floating, event.relatedTarget) : true;\n if (shouldClose) {\n closeWithDelay(event);\n }\n }\n\n // Ensure the floating element closes after scrolling even if the pointer\n // did not move.\n // https://github.com/floating-ui/floating-ui/discussions/1692\n function onScrollMouseLeave(event) {\n if (isClickLikeOpenEvent()) return;\n if (!dataRef.current.floatingContext) return;\n handleCloseRef.current == null || handleCloseRef.current({\n ...dataRef.current.floatingContext,\n tree,\n x: event.clientX,\n y: event.clientY,\n onClose() {\n clearPointerEvents();\n cleanupMouseMoveHandler();\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event);\n }\n }\n })(event);\n }\n function onFloatingMouseEnter() {\n clearTimeoutIfSet(timeoutRef);\n }\n function onFloatingMouseLeave(event) {\n if (!isClickLikeOpenEvent()) {\n closeWithDelay(event, false);\n }\n }\n if (isElement(elements.domReference)) {\n const reference = elements.domReference;\n const floating = elements.floating;\n if (open) {\n reference.addEventListener('mouseleave', onScrollMouseLeave);\n }\n if (move) {\n reference.addEventListener('mousemove', onReferenceMouseEnter, {\n once: true\n });\n }\n reference.addEventListener('mouseenter', onReferenceMouseEnter);\n reference.addEventListener('mouseleave', onReferenceMouseLeave);\n if (floating) {\n floating.addEventListener('mouseleave', onScrollMouseLeave);\n floating.addEventListener('mouseenter', onFloatingMouseEnter);\n floating.addEventListener('mouseleave', onFloatingMouseLeave);\n }\n return () => {\n if (open) {\n reference.removeEventListener('mouseleave', onScrollMouseLeave);\n }\n if (move) {\n reference.removeEventListener('mousemove', onReferenceMouseEnter);\n }\n reference.removeEventListener('mouseenter', onReferenceMouseEnter);\n reference.removeEventListener('mouseleave', onReferenceMouseLeave);\n if (floating) {\n floating.removeEventListener('mouseleave', onScrollMouseLeave);\n floating.removeEventListener('mouseenter', onFloatingMouseEnter);\n floating.removeEventListener('mouseleave', onFloatingMouseLeave);\n }\n };\n }\n }, [elements, enabled, context, mouseOnly, move, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, onOpenChange, open, openRef, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent, restMsRef]);\n\n // Block pointer-events of every element other than the reference and floating\n // while the floating element is open and has a `handleClose` handler. Also\n // handles nested floating elements.\n // https://github.com/floating-ui/floating-ui/issues/1722\n useModernLayoutEffect(() => {\n var _handleCloseRef$curre;\n if (!enabled) return;\n if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && (_handleCloseRef$curre = _handleCloseRef$curre.__options) != null && _handleCloseRef$curre.blockPointerEvents && isHoverOpen()) {\n performedPointerEventsMutationRef.current = true;\n const floatingEl = elements.floating;\n if (isElement(elements.domReference) && floatingEl) {\n var _tree$nodesRef$curren;\n const body = getDocument$1(elements.floating).body;\n body.setAttribute(safePolygonIdentifier, '');\n const ref = elements.domReference;\n const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;\n if (parentFloating) {\n parentFloating.style.pointerEvents = '';\n }\n body.style.pointerEvents = 'none';\n ref.style.pointerEvents = 'auto';\n floatingEl.style.pointerEvents = 'auto';\n return () => {\n body.style.pointerEvents = '';\n ref.style.pointerEvents = '';\n floatingEl.style.pointerEvents = '';\n };\n }\n }\n }, [enabled, open, parentId, elements, tree, handleCloseRef, isHoverOpen]);\n useModernLayoutEffect(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n restTimeoutPendingRef.current = false;\n cleanupMouseMoveHandler();\n clearPointerEvents();\n }\n }, [open, cleanupMouseMoveHandler, clearPointerEvents]);\n React.useEffect(() => {\n return () => {\n cleanupMouseMoveHandler();\n clearTimeoutIfSet(timeoutRef);\n clearTimeoutIfSet(restTimeoutRef);\n clearPointerEvents();\n };\n }, [enabled, elements.domReference, cleanupMouseMoveHandler, clearPointerEvents]);\n const reference = React.useMemo(() => {\n function setPointerRef(event) {\n pointerTypeRef.current = event.pointerType;\n }\n return {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n onMouseMove(event) {\n const {\n nativeEvent\n } = event;\n function handleMouseMove() {\n if (!blockMouseMoveRef.current && !openRef.current) {\n onOpenChange(true, nativeEvent, 'hover');\n }\n }\n if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) {\n return;\n }\n if (open || getRestMs(restMsRef.current) === 0) {\n return;\n }\n\n // Ignore insignificant movements to account for tremors.\n if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {\n return;\n }\n clearTimeoutIfSet(restTimeoutRef);\n if (pointerTypeRef.current === 'touch') {\n handleMouseMove();\n } else {\n restTimeoutPendingRef.current = true;\n restTimeoutRef.current = window.setTimeout(handleMouseMove, getRestMs(restMsRef.current));\n }\n }\n };\n }, [mouseOnly, onOpenChange, open, openRef, restMsRef]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst NOOP = () => {};\nconst FloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n delay: 0,\n initialDelay: 0,\n timeoutMs: 0,\n currentId: null,\n setCurrentId: NOOP,\n setState: NOOP,\n isInstantPhase: false\n});\n\n/**\n * @deprecated\n * Use the return value of `useDelayGroup()` instead.\n */\nconst useDelayGroupContext = () => React.useContext(FloatingDelayGroupContext);\n/**\n * Provides context for a group of floating elements that should share a\n * `delay`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction FloatingDelayGroup(props) {\n const {\n children,\n delay,\n timeoutMs = 0\n } = props;\n const [state, setState] = React.useReducer((prev, next) => ({\n ...prev,\n ...next\n }), {\n delay,\n timeoutMs,\n initialDelay: delay,\n currentId: null,\n isInstantPhase: false\n });\n const initialCurrentIdRef = React.useRef(null);\n const setCurrentId = React.useCallback(currentId => {\n setState({\n currentId\n });\n }, []);\n useModernLayoutEffect(() => {\n if (state.currentId) {\n if (initialCurrentIdRef.current === null) {\n initialCurrentIdRef.current = state.currentId;\n } else if (!state.isInstantPhase) {\n setState({\n isInstantPhase: true\n });\n }\n } else {\n if (state.isInstantPhase) {\n setState({\n isInstantPhase: false\n });\n }\n initialCurrentIdRef.current = null;\n }\n }, [state.currentId, state.isInstantPhase]);\n return /*#__PURE__*/jsx(FloatingDelayGroupContext.Provider, {\n value: React.useMemo(() => ({\n ...state,\n setState,\n setCurrentId\n }), [state, setCurrentId]),\n children: children\n });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `FloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useDelayGroup(context, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n open,\n onOpenChange,\n floatingId\n } = context;\n const {\n id: optionId,\n enabled = true\n } = options;\n const id = optionId != null ? optionId : floatingId;\n const groupContext = useDelayGroupContext();\n const {\n currentId,\n setCurrentId,\n initialDelay,\n setState,\n timeoutMs\n } = groupContext;\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!currentId) return;\n setState({\n delay: {\n open: 1,\n close: getDelay(initialDelay, 'close')\n }\n });\n if (currentId !== id) {\n onOpenChange(false);\n }\n }, [enabled, id, onOpenChange, setState, currentId, initialDelay]);\n useModernLayoutEffect(() => {\n function unset() {\n onOpenChange(false);\n setState({\n delay: initialDelay,\n currentId: null\n });\n }\n if (!enabled) return;\n if (!currentId) return;\n if (!open && currentId === id) {\n if (timeoutMs) {\n const timeout = window.setTimeout(unset, timeoutMs);\n return () => {\n clearTimeout(timeout);\n };\n }\n unset();\n }\n }, [enabled, open, setState, currentId, id, onOpenChange, initialDelay, timeoutMs]);\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (setCurrentId === NOOP || !open) return;\n setCurrentId(id);\n }, [enabled, open, setCurrentId, id]);\n return groupContext;\n}\n\nconst NextFloatingDelayGroupContext = /*#__PURE__*/React.createContext({\n hasProvider: false,\n timeoutMs: 0,\n delayRef: {\n current: 0\n },\n initialDelayRef: {\n current: 0\n },\n timeoutIdRef: {\n current: -1\n },\n currentIdRef: {\n current: null\n },\n currentContextRef: {\n current: null\n }\n});\n/**\n * Experimental next version of `FloatingDelayGroup` to become the default\n * in the future. This component is not yet stable.\n * Provides context for a group of floating elements that should share a\n * `delay`. Unlike `FloatingDelayGroup`, `useNextDelayGroup` with this\n * component does not cause a re-render of unrelated consumers of the\n * context when the delay changes.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction NextFloatingDelayGroup(props) {\n const {\n children,\n delay,\n timeoutMs = 0\n } = props;\n const delayRef = React.useRef(delay);\n const initialDelayRef = React.useRef(delay);\n const currentIdRef = React.useRef(null);\n const currentContextRef = React.useRef(null);\n const timeoutIdRef = React.useRef(-1);\n return /*#__PURE__*/jsx(NextFloatingDelayGroupContext.Provider, {\n value: React.useMemo(() => ({\n hasProvider: true,\n delayRef,\n initialDelayRef,\n currentIdRef,\n timeoutMs,\n currentContextRef,\n timeoutIdRef\n }), [timeoutMs]),\n children: children\n });\n}\n/**\n * Enables grouping when called inside a component that's a child of a\n * `NextFloatingDelayGroup`.\n * @see https://floating-ui.com/docs/FloatingDelayGroup\n */\nfunction useNextDelayGroup(context, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n open,\n onOpenChange,\n floatingId\n } = context;\n const {\n enabled = true\n } = options;\n const groupContext = React.useContext(NextFloatingDelayGroupContext);\n const {\n currentIdRef,\n delayRef,\n timeoutMs,\n initialDelayRef,\n currentContextRef,\n hasProvider,\n timeoutIdRef\n } = groupContext;\n const [isInstantPhase, setIsInstantPhase] = React.useState(false);\n useModernLayoutEffect(() => {\n function unset() {\n var _currentContextRef$cu;\n setIsInstantPhase(false);\n (_currentContextRef$cu = currentContextRef.current) == null || _currentContextRef$cu.setIsInstantPhase(false);\n currentIdRef.current = null;\n currentContextRef.current = null;\n delayRef.current = initialDelayRef.current;\n }\n if (!enabled) return;\n if (!currentIdRef.current) return;\n if (!open && currentIdRef.current === floatingId) {\n setIsInstantPhase(false);\n if (timeoutMs) {\n timeoutIdRef.current = window.setTimeout(unset, timeoutMs);\n return () => {\n clearTimeout(timeoutIdRef.current);\n };\n }\n unset();\n }\n }, [enabled, open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!open) return;\n const prevContext = currentContextRef.current;\n const prevId = currentIdRef.current;\n currentContextRef.current = {\n onOpenChange,\n setIsInstantPhase\n };\n currentIdRef.current = floatingId;\n delayRef.current = {\n open: 0,\n close: getDelay(initialDelayRef.current, 'close')\n };\n if (prevId !== null && prevId !== floatingId) {\n clearTimeoutIfSet(timeoutIdRef);\n setIsInstantPhase(true);\n prevContext == null || prevContext.setIsInstantPhase(true);\n prevContext == null || prevContext.onOpenChange(false);\n } else {\n setIsInstantPhase(false);\n prevContext == null || prevContext.setIsInstantPhase(false);\n }\n }, [enabled, open, floatingId, onOpenChange, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeoutIdRef]);\n useModernLayoutEffect(() => {\n return () => {\n currentContextRef.current = null;\n };\n }, [currentContextRef]);\n return React.useMemo(() => ({\n hasProvider,\n delayRef,\n isInstantPhase\n }), [hasProvider, delayRef, isInstantPhase]);\n}\n\nlet rafId = 0;\nfunction enqueueFocus(el, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n preventScroll = false,\n cancelPrevious = true,\n sync = false\n } = options;\n cancelPrevious && cancelAnimationFrame(rafId);\n const exec = () => el == null ? void 0 : el.focus({\n preventScroll\n });\n if (sync) {\n exec();\n } else {\n rafId = requestAnimationFrame(exec);\n }\n}\n\nfunction contains(parent, child) {\n if (!parent || !child) {\n return false;\n }\n const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();\n\n // First, attempt with faster native method\n if (parent.contains(child)) {\n return true;\n }\n\n // then fallback to custom implementation with Shadow DOM support\n if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n while (next) {\n if (parent === next) {\n return true;\n }\n // @ts-ignore\n next = next.parentNode || next.host;\n }\n }\n\n // Give up, the result is false\n return false;\n}\nfunction getTarget(event) {\n if ('composedPath' in event) {\n return event.composedPath()[0];\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support\n // `composedPath()`, but browsers without shadow DOM don't.\n return event.target;\n}\nfunction getDocument(node) {\n return (node == null ? void 0 : node.ownerDocument) || document;\n}\n\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\nconst counters = {\n inert: /*#__PURE__*/new WeakMap(),\n 'aria-hidden': /*#__PURE__*/new WeakMap(),\n none: /*#__PURE__*/new WeakMap()\n};\nfunction getCounterMap(control) {\n if (control === 'inert') return counters.inert;\n if (control === 'aria-hidden') return counters['aria-hidden'];\n return counters.none;\n}\nlet uncontrolledElementsSet = /*#__PURE__*/new WeakSet();\nlet markerMap = {};\nlet lockCount$1 = 0;\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nfunction unwrapHost(node) {\n if (!node) {\n return null;\n }\n return isShadowRoot(node) ? node.host : unwrapHost(node.parentNode);\n}\nconst correctElements = (parent, targets) => targets.map(target => {\n if (parent.contains(target)) {\n return target;\n }\n const correctedTarget = unwrapHost(target);\n if (parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n return null;\n}).filter(x => x != null);\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert) {\n const markerName = 'data-floating-ui-inert';\n const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n const avoidElements = correctElements(body, uncorrectedAvoidElements);\n const elementsToKeep = new Set();\n const elementsToStop = new Set(avoidElements);\n const hiddenElements = [];\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n const markerCounter = markerMap[markerName];\n avoidElements.forEach(keep);\n deep(body);\n elementsToKeep.clear();\n function keep(el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n el.parentNode && keep(el.parentNode);\n }\n function deep(parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n [].forEach.call(parent.children, node => {\n if (getNodeName(node) === 'script') return;\n if (elementsToKeep.has(node)) {\n deep(node);\n } else {\n const attr = controlAttribute ? node.getAttribute(controlAttribute) : null;\n const alreadyHidden = attr !== null && attr !== 'false';\n const counterMap = getCounterMap(controlAttribute);\n const counterValue = (counterMap.get(node) || 0) + 1;\n const markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenElements.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledElementsSet.add(node);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, '');\n }\n if (!alreadyHidden && controlAttribute) {\n node.setAttribute(controlAttribute, controlAttribute === 'inert' ? '' : 'true');\n }\n }\n });\n }\n lockCount$1++;\n return () => {\n hiddenElements.forEach(element => {\n const counterMap = getCounterMap(controlAttribute);\n const currentCounterValue = counterMap.get(element) || 0;\n const counterValue = currentCounterValue - 1;\n const markerValue = (markerCounter.get(element) || 0) - 1;\n counterMap.set(element, counterValue);\n markerCounter.set(element, markerValue);\n if (!counterValue) {\n if (!uncontrolledElementsSet.has(element) && controlAttribute) {\n element.removeAttribute(controlAttribute);\n }\n uncontrolledElementsSet.delete(element);\n }\n if (!markerValue) {\n element.removeAttribute(markerName);\n }\n });\n lockCount$1--;\n if (!lockCount$1) {\n counters.inert = new WeakMap();\n counters['aria-hidden'] = new WeakMap();\n counters.none = new WeakMap();\n uncontrolledElementsSet = new WeakSet();\n markerMap = {};\n }\n };\n}\nfunction markOthers(avoidElements, ariaHidden, inert) {\n if (ariaHidden === void 0) {\n ariaHidden = false;\n }\n if (inert === void 0) {\n inert = false;\n }\n const body = getDocument(avoidElements[0]).body;\n return applyAttributeToOthers(avoidElements.concat(Array.from(body.querySelectorAll('[aria-live],[role=\"status\"],output'))), body, ariaHidden, inert);\n}\n\nconst HIDDEN_STYLES = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'fixed',\n whiteSpace: 'nowrap',\n width: '1px',\n top: 0,\n left: 0\n};\nconst FocusGuard = /*#__PURE__*/React.forwardRef(function FocusGuard(props, ref) {\n const [role, setRole] = React.useState();\n useModernLayoutEffect(() => {\n if (isSafari()) {\n // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n // on VoiceOver does trigger the onFocus event, so we can use the focus\n // trap element. On Safari, only buttons trigger the onFocus event.\n // NB: \"group\" role in the Sandbox no longer appears to work, must be a\n // button role.\n setRole('button');\n }\n }, []);\n const restProps = {\n ref,\n tabIndex: 0,\n // Role is only for VoiceOver\n role,\n 'aria-hidden': role ? undefined : true,\n [createAttribute('focus-guard')]: '',\n style: HIDDEN_STYLES\n };\n return /*#__PURE__*/jsx(\"span\", {\n ...props,\n ...restProps\n });\n});\n\nconst HIDDEN_OWNER_STYLES = {\n clipPath: 'inset(50%)',\n position: 'fixed',\n top: 0,\n left: 0\n};\nconst PortalContext = /*#__PURE__*/React.createContext(null);\nconst attr = /*#__PURE__*/createAttribute('portal');\n/**\n * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode\n */\nfunction useFloatingPortalNode(props) {\n if (props === void 0) {\n props = {};\n }\n const {\n id,\n root\n } = props;\n const uniqueId = useId();\n const portalContext = usePortalContext();\n const [portalNode, setPortalNode] = React.useState(null);\n const portalNodeRef = React.useRef(null);\n useModernLayoutEffect(() => {\n return () => {\n portalNode == null || portalNode.remove();\n // Allow the subsequent layout effects to create a new node on updates.\n // The portal node will still be cleaned up on unmount.\n // https://github.com/floating-ui/floating-ui/issues/2454\n queueMicrotask(() => {\n portalNodeRef.current = null;\n });\n };\n }, [portalNode]);\n useModernLayoutEffect(() => {\n // Wait for the uniqueId to be generated before creating the portal node in\n // React <18 (using `useFloatingId` instead of the native `useId`).\n // https://github.com/floating-ui/floating-ui/issues/2778\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n const existingIdRoot = id ? document.getElementById(id) : null;\n if (!existingIdRoot) return;\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n existingIdRoot.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, uniqueId]);\n useModernLayoutEffect(() => {\n // Wait for the root to exist before creating the portal node. The root must\n // be stored in state, not a ref, for this to work reactively.\n if (root === null) return;\n if (!uniqueId) return;\n if (portalNodeRef.current) return;\n let container = root || (portalContext == null ? void 0 : portalContext.portalNode);\n if (container && !isNode(container)) container = container.current;\n container = container || document.body;\n let idWrapper = null;\n if (id) {\n idWrapper = document.createElement('div');\n idWrapper.id = id;\n container.appendChild(idWrapper);\n }\n const subRoot = document.createElement('div');\n subRoot.id = uniqueId;\n subRoot.setAttribute(attr, '');\n container = idWrapper || container;\n container.appendChild(subRoot);\n portalNodeRef.current = subRoot;\n setPortalNode(subRoot);\n }, [id, root, uniqueId, portalContext]);\n return portalNode;\n}\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n */\nfunction FloatingPortal(props) {\n const {\n children,\n id,\n root,\n preserveTabOrder = true\n } = props;\n const portalNode = useFloatingPortalNode({\n id,\n root\n });\n const [focusManagerState, setFocusManagerState] = React.useState(null);\n const beforeOutsideRef = React.useRef(null);\n const afterOutsideRef = React.useRef(null);\n const beforeInsideRef = React.useRef(null);\n const afterInsideRef = React.useRef(null);\n const modal = focusManagerState == null ? void 0 : focusManagerState.modal;\n const open = focusManagerState == null ? void 0 : focusManagerState.open;\n const shouldRenderGuards =\n // The FocusManager and therefore floating element are currently open/\n // rendered.\n !!focusManagerState &&\n // Guards are only for non-modal focus management.\n !focusManagerState.modal &&\n // Don't render if unmount is transitioning.\n focusManagerState.open && preserveTabOrder && !!(root || portalNode);\n\n // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n React.useEffect(() => {\n if (!portalNode || !preserveTabOrder || modal) {\n return;\n }\n\n // Make sure elements inside the portal element are tabbable only when the\n // portal has already been focused, either by tabbing into a focus trap\n // element outside or using the mouse.\n function onFocus(event) {\n if (portalNode && isOutsideEvent(event)) {\n const focusing = event.type === 'focusin';\n const manageFocus = focusing ? enableFocusInside : disableFocusInside;\n manageFocus(portalNode);\n }\n }\n // Listen to the event on the capture phase so they run before the focus\n // trap elements onFocus prop is called.\n portalNode.addEventListener('focusin', onFocus, true);\n portalNode.addEventListener('focusout', onFocus, true);\n return () => {\n portalNode.removeEventListener('focusin', onFocus, true);\n portalNode.removeEventListener('focusout', onFocus, true);\n };\n }, [portalNode, preserveTabOrder, modal]);\n React.useEffect(() => {\n if (!portalNode) return;\n if (open) return;\n enableFocusInside(portalNode);\n }, [open, portalNode]);\n return /*#__PURE__*/jsxs(PortalContext.Provider, {\n value: React.useMemo(() => ({\n preserveTabOrder,\n beforeOutsideRef,\n afterOutsideRef,\n beforeInsideRef,\n afterInsideRef,\n portalNode,\n setFocusManagerState\n }), [preserveTabOrder, portalNode]),\n children: [shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"outside\",\n ref: beforeOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _beforeInsideRef$curr;\n (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const prevTabbable = getPreviousTabbable(domReference);\n prevTabbable == null || prevTabbable.focus();\n }\n }\n }), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(\"span\", {\n \"aria-owns\": portalNode.id,\n style: HIDDEN_OWNER_STYLES\n }), portalNode && /*#__PURE__*/ReactDOM.createPortal(children, portalNode), shouldRenderGuards && portalNode && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"outside\",\n ref: afterOutsideRef,\n onFocus: event => {\n if (isOutsideEvent(event, portalNode)) {\n var _afterInsideRef$curre;\n (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const nextTabbable = getNextTabbable(domReference);\n nextTabbable == null || nextTabbable.focus();\n (focusManagerState == null ? void 0 : focusManagerState.closeOnFocusOut) && (focusManagerState == null ? void 0 : focusManagerState.onOpenChange(false, event.nativeEvent, 'focus-out'));\n }\n }\n })]\n });\n}\nconst usePortalContext = () => React.useContext(PortalContext);\n\nfunction useLiteMergeRefs(refs) {\n return React.useMemo(() => {\n return value => {\n refs.forEach(ref => {\n if (ref) {\n ref.current = value;\n }\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\n\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction clearDisconnectedPreviouslyFocusedElements() {\n previouslyFocusedElements = previouslyFocusedElements.filter(elementRef => {\n var _elementRef$deref;\n return (_elementRef$deref = elementRef.deref()) == null ? void 0 : _elementRef$deref.isConnected;\n });\n}\nfunction addPreviouslyFocusedElement(element) {\n clearDisconnectedPreviouslyFocusedElements();\n if (element && getNodeName(element) !== 'body') {\n previouslyFocusedElements.push(new WeakRef(element));\n if (previouslyFocusedElements.length > LIST_LIMIT) {\n previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT);\n }\n }\n}\nfunction getPreviouslyFocusedElement() {\n clearDisconnectedPreviouslyFocusedElements();\n const elementRef = previouslyFocusedElements[previouslyFocusedElements.length - 1];\n return elementRef == null ? void 0 : elementRef.deref();\n}\nfunction getFirstTabbableElement(container) {\n const tabbableOptions = getTabbableOptions();\n if (isTabbable(container, tabbableOptions)) {\n return container;\n }\n return tabbable(container, tabbableOptions)[0] || container;\n}\nfunction handleTabIndex(floatingFocusElement, orderRef) {\n var _floatingFocusElement;\n if (!orderRef.current.includes('floating') && !((_floatingFocusElement = floatingFocusElement.getAttribute('role')) != null && _floatingFocusElement.includes('dialog'))) {\n return;\n }\n const options = getTabbableOptions();\n const focusableElements = focusable(floatingFocusElement, options);\n const tabbableContent = focusableElements.filter(element => {\n const dataTabIndex = element.getAttribute('data-tabindex') || '';\n return isTabbable(element, options) || element.hasAttribute('data-tabindex') && !dataTabIndex.startsWith('-');\n });\n const tabIndex = floatingFocusElement.getAttribute('tabindex');\n if (orderRef.current.includes('floating') || tabbableContent.length === 0) {\n if (tabIndex !== '0') {\n floatingFocusElement.setAttribute('tabindex', '0');\n }\n } else if (tabIndex !== '-1' || floatingFocusElement.hasAttribute('data-tabindex') && floatingFocusElement.getAttribute('data-tabindex') !== '-1') {\n floatingFocusElement.setAttribute('tabindex', '-1');\n floatingFocusElement.setAttribute('data-tabindex', '-1');\n }\n}\nconst VisuallyHiddenDismiss = /*#__PURE__*/React.forwardRef(function VisuallyHiddenDismiss(props, ref) {\n return /*#__PURE__*/jsx(\"button\", {\n ...props,\n type: \"button\",\n ref: ref,\n tabIndex: -1,\n style: HIDDEN_STYLES\n });\n});\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n */\nfunction FloatingFocusManager(props) {\n const {\n context,\n children,\n disabled = false,\n order = ['content'],\n guards: _guards = true,\n initialFocus = 0,\n returnFocus = true,\n restoreFocus = false,\n modal = true,\n visuallyHiddenDismiss = false,\n closeOnFocusOut = true,\n outsideElementsInert = false,\n getInsideElements: _getInsideElements = () => []\n } = props;\n const {\n open,\n onOpenChange,\n events,\n dataRef,\n elements: {\n domReference,\n floating\n }\n } = context;\n const getNodeId = useEffectEvent(() => {\n var _dataRef$current$floa;\n return (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n });\n const getInsideElements = useEffectEvent(_getInsideElements);\n const ignoreInitialFocus = typeof initialFocus === 'number' && initialFocus < 0;\n // If the reference is a combobox and is typeable (e.g. input/textarea),\n // there are different focus semantics. The guards should not be rendered, but\n // aria-hidden should be applied to all nodes still. Further, the visually\n // hidden dismiss button should only appear at the end of the list, not the\n // start.\n const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;\n\n // Force the guards to be rendered if the `inert` attribute is not supported.\n const inertSupported = supportsInert();\n const guards = inertSupported ? _guards : true;\n const useInert = !guards || inertSupported && outsideElementsInert;\n const orderRef = useLatestRef(order);\n const initialFocusRef = useLatestRef(initialFocus);\n const returnFocusRef = useLatestRef(returnFocus);\n const tree = useFloatingTree();\n const portalContext = usePortalContext();\n const startDismissButtonRef = React.useRef(null);\n const endDismissButtonRef = React.useRef(null);\n const preventReturnFocusRef = React.useRef(false);\n const isPointerDownRef = React.useRef(false);\n const tabbableIndexRef = React.useRef(-1);\n const blurTimeoutRef = React.useRef(-1);\n const isInsidePortal = portalContext != null;\n const floatingFocusElement = getFloatingFocusElement(floating);\n const getTabbableContent = useEffectEvent(function (container) {\n if (container === void 0) {\n container = floatingFocusElement;\n }\n return container ? tabbable(container, getTabbableOptions()) : [];\n });\n const getTabbableElements = useEffectEvent(container => {\n const content = getTabbableContent(container);\n return orderRef.current.map(type => {\n if (domReference && type === 'reference') {\n return domReference;\n }\n if (floatingFocusElement && type === 'floating') {\n return floatingFocusElement;\n }\n return content;\n }).filter(Boolean).flat();\n });\n React.useEffect(() => {\n if (disabled) return;\n if (!modal) return;\n function onKeyDown(event) {\n if (event.key === 'Tab') {\n // The focus guards have nothing to focus, so we need to stop the event.\n if (contains$1(floatingFocusElement, activeElement(getDocument$1(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n stopEvent(event);\n }\n const els = getTabbableElements();\n const target = getTarget$1(event);\n if (orderRef.current[0] === 'reference' && target === domReference) {\n stopEvent(event);\n if (event.shiftKey) {\n enqueueFocus(els[els.length - 1]);\n } else {\n enqueueFocus(els[1]);\n }\n }\n if (orderRef.current[1] === 'floating' && target === floatingFocusElement && event.shiftKey) {\n stopEvent(event);\n enqueueFocus(els[0]);\n }\n }\n }\n const doc = getDocument$1(floatingFocusElement);\n doc.addEventListener('keydown', onKeyDown);\n return () => {\n doc.removeEventListener('keydown', onKeyDown);\n };\n }, [disabled, domReference, floatingFocusElement, modal, orderRef, isUntrappedTypeableCombobox, getTabbableContent, getTabbableElements]);\n React.useEffect(() => {\n if (disabled) return;\n if (!floating) return;\n function handleFocusIn(event) {\n const target = getTarget$1(event);\n const tabbableContent = getTabbableContent();\n const tabbableIndex = tabbableContent.indexOf(target);\n if (tabbableIndex !== -1) {\n tabbableIndexRef.current = tabbableIndex;\n }\n }\n floating.addEventListener('focusin', handleFocusIn);\n return () => {\n floating.removeEventListener('focusin', handleFocusIn);\n };\n }, [disabled, floating, getTabbableContent]);\n React.useEffect(() => {\n if (disabled) return;\n if (!closeOnFocusOut) return;\n\n // In Safari, buttons lose focus when pressing them.\n function handlePointerDown() {\n isPointerDownRef.current = true;\n setTimeout(() => {\n isPointerDownRef.current = false;\n });\n }\n function handleFocusOutside(event) {\n const relatedTarget = event.relatedTarget;\n const currentTarget = event.currentTarget;\n const target = getTarget$1(event);\n queueMicrotask(() => {\n const nodeId = getNodeId();\n const movedToUnrelatedNode = !(contains$1(domReference, relatedTarget) || contains$1(floating, relatedTarget) || contains$1(relatedTarget, floating) || contains$1(portalContext == null ? void 0 : portalContext.portalNode, relatedTarget) || relatedTarget != null && relatedTarget.hasAttribute(createAttribute('focus-guard')) || tree && (getNodeChildren$1(tree.nodesRef.current, nodeId).find(node => {\n var _node$context, _node$context2;\n return contains$1((_node$context = node.context) == null ? void 0 : _node$context.elements.floating, relatedTarget) || contains$1((_node$context2 = node.context) == null ? void 0 : _node$context2.elements.domReference, relatedTarget);\n }) || getNodeAncestors(tree.nodesRef.current, nodeId).find(node => {\n var _node$context3, _node$context4, _node$context5;\n return [(_node$context3 = node.context) == null ? void 0 : _node$context3.elements.floating, getFloatingFocusElement((_node$context4 = node.context) == null ? void 0 : _node$context4.elements.floating)].includes(relatedTarget) || ((_node$context5 = node.context) == null ? void 0 : _node$context5.elements.domReference) === relatedTarget;\n })));\n if (currentTarget === domReference && floatingFocusElement) {\n handleTabIndex(floatingFocusElement, orderRef);\n }\n\n // Restore focus to the previous tabbable element index to prevent\n // focus from being lost outside the floating tree.\n if (restoreFocus && currentTarget !== domReference && !(target != null && target.isConnected) && activeElement(getDocument$1(floatingFocusElement)) === getDocument$1(floatingFocusElement).body) {\n // Let `FloatingPortal` effect knows that focus is still inside the\n // floating tree.\n if (isHTMLElement(floatingFocusElement)) {\n floatingFocusElement.focus();\n }\n const prevTabbableIndex = tabbableIndexRef.current;\n const tabbableContent = getTabbableContent();\n const nodeToFocus = tabbableContent[prevTabbableIndex] || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n if (isHTMLElement(nodeToFocus)) {\n nodeToFocus.focus();\n }\n }\n\n // https://github.com/floating-ui/floating-ui/issues/3060\n if (dataRef.current.insideReactTree) {\n dataRef.current.insideReactTree = false;\n return;\n }\n\n // Focus did not move inside the floating tree, and there are no tabbable\n // portal guards to handle closing.\n if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current &&\n // Fix React 18 Strict Mode returnFocus due to double rendering.\n relatedTarget !== getPreviouslyFocusedElement()) {\n preventReturnFocusRef.current = true;\n onOpenChange(false, event, 'focus-out');\n }\n });\n }\n const shouldHandleBlurCapture = Boolean(!tree && portalContext);\n function markInsideReactTree() {\n clearTimeoutIfSet(blurTimeoutRef);\n dataRef.current.insideReactTree = true;\n blurTimeoutRef.current = window.setTimeout(() => {\n dataRef.current.insideReactTree = false;\n });\n }\n if (floating && isHTMLElement(domReference)) {\n domReference.addEventListener('focusout', handleFocusOutside);\n domReference.addEventListener('pointerdown', handlePointerDown);\n floating.addEventListener('focusout', handleFocusOutside);\n if (shouldHandleBlurCapture) {\n floating.addEventListener('focusout', markInsideReactTree, true);\n }\n return () => {\n domReference.removeEventListener('focusout', handleFocusOutside);\n domReference.removeEventListener('pointerdown', handlePointerDown);\n floating.removeEventListener('focusout', handleFocusOutside);\n if (shouldHandleBlurCapture) {\n floating.removeEventListener('focusout', markInsideReactTree, true);\n }\n };\n }\n }, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, onOpenChange, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef]);\n const beforeGuardRef = React.useRef(null);\n const afterGuardRef = React.useRef(null);\n const mergedBeforeGuardRef = useLiteMergeRefs([beforeGuardRef, portalContext == null ? void 0 : portalContext.beforeInsideRef]);\n const mergedAfterGuardRef = useLiteMergeRefs([afterGuardRef, portalContext == null ? void 0 : portalContext.afterInsideRef]);\n React.useEffect(() => {\n var _portalContext$portal, _ancestors$find;\n if (disabled) return;\n if (!floating) return;\n\n // Don't hide portals nested within the parent portal.\n const portalNodes = Array.from((portalContext == null || (_portalContext$portal = portalContext.portalNode) == null ? void 0 : _portalContext$portal.querySelectorAll(\"[\" + createAttribute('portal') + \"]\")) || []);\n const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : [];\n const rootAncestorComboboxDomReference = (_ancestors$find = ancestors.find(node => {\n var _node$context6;\n return isTypeableCombobox(((_node$context6 = node.context) == null ? void 0 : _node$context6.elements.domReference) || null);\n })) == null || (_ancestors$find = _ancestors$find.context) == null ? void 0 : _ancestors$find.elements.domReference;\n const insideElements = [floating, rootAncestorComboboxDomReference, ...portalNodes, ...getInsideElements(), startDismissButtonRef.current, endDismissButtonRef.current, beforeGuardRef.current, afterGuardRef.current, portalContext == null ? void 0 : portalContext.beforeOutsideRef.current, portalContext == null ? void 0 : portalContext.afterOutsideRef.current, orderRef.current.includes('reference') || isUntrappedTypeableCombobox ? domReference : null].filter(x => x != null);\n const cleanup = modal || isUntrappedTypeableCombobox ? markOthers(insideElements, !useInert, useInert) : markOthers(insideElements);\n return () => {\n cleanup();\n };\n }, [disabled, domReference, floating, modal, orderRef, portalContext, isUntrappedTypeableCombobox, guards, useInert, tree, getNodeId, getInsideElements]);\n useModernLayoutEffect(() => {\n if (disabled || !isHTMLElement(floatingFocusElement)) return;\n const doc = getDocument$1(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n\n // Wait for any layout effect state setters to execute to set `tabIndex`.\n queueMicrotask(() => {\n const focusableElements = getTabbableElements(floatingFocusElement);\n const initialFocusValue = initialFocusRef.current;\n const elToFocus = (typeof initialFocusValue === 'number' ? focusableElements[initialFocusValue] : initialFocusValue.current) || floatingFocusElement;\n const focusAlreadyInsideFloatingEl = contains$1(floatingFocusElement, previouslyFocusedElement);\n if (!ignoreInitialFocus && !focusAlreadyInsideFloatingEl && open) {\n enqueueFocus(elToFocus, {\n preventScroll: elToFocus === floatingFocusElement\n });\n }\n });\n }, [disabled, open, floatingFocusElement, ignoreInitialFocus, getTabbableElements, initialFocusRef]);\n useModernLayoutEffect(() => {\n if (disabled || !floatingFocusElement) return;\n const doc = getDocument$1(floatingFocusElement);\n const previouslyFocusedElement = activeElement(doc);\n addPreviouslyFocusedElement(previouslyFocusedElement);\n\n // Dismissing via outside press should always ignore `returnFocus` to\n // prevent unwanted scrolling.\n function onOpenChange(_ref) {\n let {\n reason,\n event,\n nested\n } = _ref;\n if (['hover', 'safe-polygon'].includes(reason) && event.type === 'mouseleave') {\n preventReturnFocusRef.current = true;\n }\n if (reason !== 'outside-press') return;\n if (nested) {\n preventReturnFocusRef.current = false;\n } else if (isVirtualClick(event) || isVirtualPointerEvent(event)) {\n preventReturnFocusRef.current = false;\n } else {\n let isPreventScrollSupported = false;\n document.createElement('div').focus({\n get preventScroll() {\n isPreventScrollSupported = true;\n return false;\n }\n });\n if (isPreventScrollSupported) {\n preventReturnFocusRef.current = false;\n } else {\n preventReturnFocusRef.current = true;\n }\n }\n }\n events.on('openchange', onOpenChange);\n const fallbackEl = doc.createElement('span');\n fallbackEl.setAttribute('tabindex', '-1');\n fallbackEl.setAttribute('aria-hidden', 'true');\n Object.assign(fallbackEl.style, HIDDEN_STYLES);\n if (isInsidePortal && domReference) {\n domReference.insertAdjacentElement('afterend', fallbackEl);\n }\n function getReturnElement() {\n if (typeof returnFocusRef.current === 'boolean') {\n const el = domReference || getPreviouslyFocusedElement();\n return el && el.isConnected ? el : fallbackEl;\n }\n return returnFocusRef.current.current || fallbackEl;\n }\n return () => {\n events.off('openchange', onOpenChange);\n const activeEl = activeElement(doc);\n const isFocusInsideFloatingTree = contains$1(floating, activeEl) || tree && getNodeChildren$1(tree.nodesRef.current, getNodeId(), false).some(node => {\n var _node$context7;\n return contains$1((_node$context7 = node.context) == null ? void 0 : _node$context7.elements.floating, activeEl);\n });\n const returnElement = getReturnElement();\n queueMicrotask(() => {\n // This is `returnElement`, if it's tabbable, or its first tabbable child.\n const tabbableReturnElement = getFirstTabbableElement(returnElement);\n if (\n // eslint-disable-next-line react-hooks/exhaustive-deps\n returnFocusRef.current && !preventReturnFocusRef.current && isHTMLElement(tabbableReturnElement) && (\n // If the focus moved somewhere else after mount, avoid returning focus\n // since it likely entered a different element which should be\n // respected: https://github.com/floating-ui/floating-ui/issues/2607\n tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n tabbableReturnElement.focus({\n preventScroll: true\n });\n }\n fallbackEl.remove();\n });\n };\n }, [disabled, floating, floatingFocusElement, returnFocusRef, dataRef, events, tree, isInsidePortal, domReference, getNodeId]);\n React.useEffect(() => {\n // The `returnFocus` cleanup behavior is inside a microtask; ensure we\n // wait for it to complete before resetting the flag.\n queueMicrotask(() => {\n preventReturnFocusRef.current = false;\n });\n return () => {\n queueMicrotask(clearDisconnectedPreviouslyFocusedElements);\n };\n }, [disabled]);\n\n // Synchronize the `context` & `modal` value to the FloatingPortal context.\n // It will decide whether or not it needs to render its own guards.\n useModernLayoutEffect(() => {\n if (disabled) return;\n if (!portalContext) return;\n portalContext.setFocusManagerState({\n modal,\n closeOnFocusOut,\n open,\n onOpenChange,\n domReference\n });\n return () => {\n portalContext.setFocusManagerState(null);\n };\n }, [disabled, portalContext, modal, open, onOpenChange, closeOnFocusOut, domReference]);\n useModernLayoutEffect(() => {\n if (disabled) return;\n if (!floatingFocusElement) return;\n handleTabIndex(floatingFocusElement, orderRef);\n }, [disabled, floatingFocusElement, orderRef]);\n function renderDismissButton(location) {\n if (disabled || !visuallyHiddenDismiss || !modal) {\n return null;\n }\n return /*#__PURE__*/jsx(VisuallyHiddenDismiss, {\n ref: location === 'start' ? startDismissButtonRef : endDismissButtonRef,\n onClick: event => onOpenChange(false, event.nativeEvent),\n children: typeof visuallyHiddenDismiss === 'string' ? visuallyHiddenDismiss : 'Dismiss'\n });\n }\n const shouldRenderGuards = !disabled && guards && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n return /*#__PURE__*/jsxs(Fragment, {\n children: [shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"inside\",\n ref: mergedBeforeGuardRef,\n onFocus: event => {\n if (modal) {\n const els = getTabbableElements();\n enqueueFocus(order[0] === 'reference' ? els[0] : els[els.length - 1]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n preventReturnFocusRef.current = false;\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const nextTabbable = getNextTabbable(domReference);\n nextTabbable == null || nextTabbable.focus();\n } else {\n var _portalContext$before;\n (_portalContext$before = portalContext.beforeOutsideRef.current) == null || _portalContext$before.focus();\n }\n }\n }\n }), !isUntrappedTypeableCombobox && renderDismissButton('start'), children, renderDismissButton('end'), shouldRenderGuards && /*#__PURE__*/jsx(FocusGuard, {\n \"data-type\": \"inside\",\n ref: mergedAfterGuardRef,\n onFocus: event => {\n if (modal) {\n enqueueFocus(getTabbableElements()[0]);\n } else if (portalContext != null && portalContext.preserveTabOrder && portalContext.portalNode) {\n if (closeOnFocusOut) {\n preventReturnFocusRef.current = true;\n }\n if (isOutsideEvent(event, portalContext.portalNode)) {\n const prevTabbable = getPreviousTabbable(domReference);\n prevTabbable == null || prevTabbable.focus();\n } else {\n var _portalContext$afterO;\n (_portalContext$afterO = portalContext.afterOutsideRef.current) == null || _portalContext$afterO.focus();\n }\n }\n }\n })]\n });\n}\n\nlet lockCount = 0;\nconst scrollbarProperty = '--floating-ui-scrollbar-width';\nfunction enableScrollLock() {\n const platform = getPlatform();\n const isIOS = /iP(hone|ad|od)|iOS/.test(platform) ||\n // iPads can claim to be MacIntel\n platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n const bodyStyle = document.body.style;\n // RTL <body> scrollbar\n const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;\n const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;\n const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;\n bodyStyle.overflow = 'hidden';\n bodyStyle.setProperty(scrollbarProperty, scrollbarWidth + \"px\");\n if (scrollbarWidth) {\n bodyStyle[paddingProp] = scrollbarWidth + \"px\";\n }\n\n // Only iOS doesn't respect `overflow: hidden` on document.body, and this\n // technique has fewer side effects.\n if (isIOS) {\n var _window$visualViewpor, _window$visualViewpor2;\n // iOS 12 does not support `visualViewport`.\n const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? void 0 : _window$visualViewpor.offsetLeft) || 0;\n const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? void 0 : _window$visualViewpor2.offsetTop) || 0;\n Object.assign(bodyStyle, {\n position: 'fixed',\n top: -(scrollY - Math.floor(offsetTop)) + \"px\",\n left: -(scrollX - Math.floor(offsetLeft)) + \"px\",\n right: '0'\n });\n }\n return () => {\n Object.assign(bodyStyle, {\n overflow: '',\n [paddingProp]: ''\n });\n bodyStyle.removeProperty(scrollbarProperty);\n if (isIOS) {\n Object.assign(bodyStyle, {\n position: '',\n top: '',\n left: '',\n right: ''\n });\n window.scrollTo(scrollX, scrollY);\n }\n };\n}\nlet cleanup = () => {};\n\n/**\n * Provides base styling for a fixed overlay element to dim content or block\n * pointer events behind a floating element.\n * It's a regular `<div>`, so it can be styled via any CSS solution you prefer.\n * @see https://floating-ui.com/docs/FloatingOverlay\n */\nconst FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {\n const {\n lockScroll = false,\n ...rest\n } = props;\n useModernLayoutEffect(() => {\n if (!lockScroll) return;\n lockCount++;\n if (lockCount === 1) {\n cleanup = enableScrollLock();\n }\n return () => {\n lockCount--;\n if (lockCount === 0) {\n cleanup();\n }\n };\n }, [lockScroll]);\n return /*#__PURE__*/jsx(\"div\", {\n ref: ref,\n ...rest,\n style: {\n position: 'fixed',\n overflow: 'auto',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...rest.style\n }\n });\n});\n\nfunction isButtonTarget(event) {\n return isHTMLElement(event.target) && event.target.tagName === 'BUTTON';\n}\nfunction isAnchorTarget(event) {\n return isHTMLElement(event.target) && event.target.tagName === 'A';\n}\nfunction isSpaceIgnored(element) {\n return isTypeableElement(element);\n}\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */\nfunction useClick(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n dataRef,\n elements: {\n domReference\n }\n } = context;\n const {\n enabled = true,\n event: eventOption = 'click',\n toggle = true,\n ignoreMouse = false,\n keyboardHandlers = true,\n stickIfOpen = true\n } = props;\n const pointerTypeRef = React.useRef();\n const didKeyDownRef = React.useRef(false);\n const reference = React.useMemo(() => ({\n onPointerDown(event) {\n pointerTypeRef.current = event.pointerType;\n },\n onMouseDown(event) {\n const pointerType = pointerTypeRef.current;\n\n // Ignore all buttons except for the \"main\" button.\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button !== 0) return;\n if (eventOption === 'click') return;\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'mousedown' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n // Prevent stealing focus from the floating element\n event.preventDefault();\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onClick(event) {\n const pointerType = pointerTypeRef.current;\n if (eventOption === 'mousedown' && pointerTypeRef.current) {\n pointerTypeRef.current = undefined;\n return;\n }\n if (isMouseLikePointerType(pointerType, true) && ignoreMouse) return;\n if (open && toggle && (dataRef.current.openEvent && stickIfOpen ? dataRef.current.openEvent.type === 'click' : true)) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n },\n onKeyDown(event) {\n pointerTypeRef.current = undefined;\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {\n return;\n }\n if (event.key === ' ' && !isSpaceIgnored(domReference)) {\n // Prevent scrolling\n event.preventDefault();\n didKeyDownRef.current = true;\n }\n if (isAnchorTarget(event)) {\n return;\n }\n if (event.key === 'Enter') {\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n },\n onKeyUp(event) {\n if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event) || isSpaceIgnored(domReference)) {\n return;\n }\n if (event.key === ' ' && didKeyDownRef.current) {\n didKeyDownRef.current = false;\n if (open && toggle) {\n onOpenChange(false, event.nativeEvent, 'click');\n } else {\n onOpenChange(true, event.nativeEvent, 'click');\n }\n }\n }\n }), [dataRef, domReference, eventOption, ignoreMouse, keyboardHandlers, onOpenChange, open, stickIfOpen, toggle]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nfunction createVirtualElement(domElement, data) {\n let offsetX = null;\n let offsetY = null;\n let isAutoUpdateEvent = false;\n return {\n contextElement: domElement || undefined,\n getBoundingClientRect() {\n var _data$dataRef$current;\n const domRect = (domElement == null ? void 0 : domElement.getBoundingClientRect()) || {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n const isXAxis = data.axis === 'x' || data.axis === 'both';\n const isYAxis = data.axis === 'y' || data.axis === 'both';\n const canTrackCursorOnAutoUpdate = ['mouseenter', 'mousemove'].includes(((_data$dataRef$current = data.dataRef.current.openEvent) == null ? void 0 : _data$dataRef$current.type) || '') && data.pointerType !== 'touch';\n let width = domRect.width;\n let height = domRect.height;\n let x = domRect.x;\n let y = domRect.y;\n if (offsetX == null && data.x && isXAxis) {\n offsetX = domRect.x - data.x;\n }\n if (offsetY == null && data.y && isYAxis) {\n offsetY = domRect.y - data.y;\n }\n x -= offsetX || 0;\n y -= offsetY || 0;\n width = 0;\n height = 0;\n if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {\n width = data.axis === 'y' ? domRect.width : 0;\n height = data.axis === 'x' ? domRect.height : 0;\n x = isXAxis && data.x != null ? data.x : x;\n y = isYAxis && data.y != null ? data.y : y;\n } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {\n height = data.axis === 'x' ? domRect.height : height;\n width = data.axis === 'y' ? domRect.width : width;\n }\n isAutoUpdateEvent = true;\n return {\n width,\n height,\n x,\n y,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x\n };\n }\n };\n}\nfunction isMouseBasedEvent(event) {\n return event != null && event.clientX != null;\n}\n/**\n * Positions the floating element relative to a client point (in the viewport),\n * such as the mouse position. By default, it follows the mouse cursor.\n * @see https://floating-ui.com/docs/useClientPoint\n */\nfunction useClientPoint(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n dataRef,\n elements: {\n floating,\n domReference\n },\n refs\n } = context;\n const {\n enabled = true,\n axis = 'both',\n x = null,\n y = null\n } = props;\n const initialRef = React.useRef(false);\n const cleanupListenerRef = React.useRef(null);\n const [pointerType, setPointerType] = React.useState();\n const [reactive, setReactive] = React.useState([]);\n const setReference = useEffectEvent((x, y) => {\n if (initialRef.current) return;\n\n // Prevent setting if the open event was not a mouse-like one\n // (e.g. focus to open, then hover over the reference element).\n // Only apply if the event exists.\n if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {\n return;\n }\n refs.setPositionReference(createVirtualElement(domReference, {\n x,\n y,\n axis,\n dataRef,\n pointerType\n }));\n });\n const handleReferenceEnterOrMove = useEffectEvent(event => {\n if (x != null || y != null) return;\n if (!open) {\n setReference(event.clientX, event.clientY);\n } else if (!cleanupListenerRef.current) {\n // If there's no cleanup, there's no listener, but we want to ensure\n // we add the listener if the cursor landed on the floating element and\n // then back on the reference (i.e. it's interactive).\n setReactive([]);\n }\n });\n\n // If the pointer is a mouse-like pointer, we want to continue following the\n // mouse even if the floating element is transitioning out. On touch\n // devices, this is undesirable because the floating element will move to\n // the dismissal touch point.\n const openCheck = isMouseLikePointerType(pointerType) ? floating : open;\n const addListener = React.useCallback(() => {\n // Explicitly specified `x`/`y` coordinates shouldn't add a listener.\n if (!openCheck || !enabled || x != null || y != null) return;\n const win = getWindow(floating);\n function handleMouseMove(event) {\n const target = getTarget$1(event);\n if (!contains$1(floating, target)) {\n setReference(event.clientX, event.clientY);\n } else {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n }\n }\n if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {\n win.addEventListener('mousemove', handleMouseMove);\n const cleanup = () => {\n win.removeEventListener('mousemove', handleMouseMove);\n cleanupListenerRef.current = null;\n };\n cleanupListenerRef.current = cleanup;\n return cleanup;\n }\n refs.setPositionReference(domReference);\n }, [openCheck, enabled, x, y, floating, dataRef, refs, domReference, setReference]);\n React.useEffect(() => {\n return addListener();\n }, [addListener, reactive]);\n React.useEffect(() => {\n if (enabled && !floating) {\n initialRef.current = false;\n }\n }, [enabled, floating]);\n React.useEffect(() => {\n if (!enabled && open) {\n initialRef.current = true;\n }\n }, [enabled, open]);\n useModernLayoutEffect(() => {\n if (enabled && (x != null || y != null)) {\n initialRef.current = false;\n setReference(x, y);\n }\n }, [enabled, x, y, setReference]);\n const reference = React.useMemo(() => {\n function setPointerTypeRef(_ref) {\n let {\n pointerType\n } = _ref;\n setPointerType(pointerType);\n }\n return {\n onPointerDown: setPointerTypeRef,\n onPointerEnter: setPointerTypeRef,\n onMouseMove: handleReferenceEnterOrMove,\n onMouseEnter: handleReferenceEnterOrMove\n };\n }, [handleReferenceEnterOrMove]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nconst bubbleHandlerKeys = {\n pointerdown: 'onPointerDown',\n mousedown: 'onMouseDown',\n click: 'onClick'\n};\nconst captureHandlerKeys = {\n pointerdown: 'onPointerDownCapture',\n mousedown: 'onMouseDownCapture',\n click: 'onClickCapture'\n};\nconst normalizeProp = normalizable => {\n var _normalizable$escapeK, _normalizable$outside;\n return {\n escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable$escapeK = normalizable == null ? void 0 : normalizable.escapeKey) != null ? _normalizable$escapeK : false,\n outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable$outside = normalizable == null ? void 0 : normalizable.outsidePress) != null ? _normalizable$outside : true\n };\n};\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */\nfunction useDismiss(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n elements,\n dataRef\n } = context;\n const {\n enabled = true,\n escapeKey = true,\n outsidePress: unstable_outsidePress = true,\n outsidePressEvent = 'pointerdown',\n referencePress = false,\n referencePressEvent = 'pointerdown',\n ancestorScroll = false,\n bubbles,\n capture\n } = props;\n const tree = useFloatingTree();\n const outsidePressFn = useEffectEvent(typeof unstable_outsidePress === 'function' ? unstable_outsidePress : () => false);\n const outsidePress = typeof unstable_outsidePress === 'function' ? outsidePressFn : unstable_outsidePress;\n const endedOrStartedInsideRef = React.useRef(false);\n const {\n escapeKey: escapeKeyBubbles,\n outsidePress: outsidePressBubbles\n } = normalizeProp(bubbles);\n const {\n escapeKey: escapeKeyCapture,\n outsidePress: outsidePressCapture\n } = normalizeProp(capture);\n const isComposingRef = React.useRef(false);\n const closeOnEscapeKeyDown = useEffectEvent(event => {\n var _dataRef$current$floa;\n if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n return;\n }\n\n // Wait until IME is settled. Pressing `Escape` while composing should\n // close the compose menu, but not the floating element.\n if (isComposingRef.current) {\n return;\n }\n const nodeId = (_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.nodeId;\n const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n if (!escapeKeyBubbles) {\n event.stopPropagation();\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context;\n if ((_child$context = child.context) != null && _child$context.open && !child.context.dataRef.current.__escapeKeyBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n }\n onOpenChange(false, isReactEvent(event) ? event.nativeEvent : event, 'escape-key');\n });\n const closeOnEscapeKeyDownCapture = useEffectEvent(event => {\n var _getTarget2;\n const callback = () => {\n var _getTarget;\n closeOnEscapeKeyDown(event);\n (_getTarget = getTarget$1(event)) == null || _getTarget.removeEventListener('keydown', callback);\n };\n (_getTarget2 = getTarget$1(event)) == null || _getTarget2.addEventListener('keydown', callback);\n });\n const closeOnPressOutside = useEffectEvent(event => {\n var _dataRef$current$floa2;\n // Given developers can stop the propagation of the synthetic event,\n // we can only be confident with a positive value.\n const insideReactTree = dataRef.current.insideReactTree;\n dataRef.current.insideReactTree = false;\n\n // When click outside is lazy (`click` event), handle dragging.\n // Don't close if:\n // - The click started inside the floating element.\n // - The click ended inside the floating element.\n const endedOrStartedInside = endedOrStartedInsideRef.current;\n endedOrStartedInsideRef.current = false;\n if (outsidePressEvent === 'click' && endedOrStartedInside) {\n return;\n }\n if (insideReactTree) {\n return;\n }\n if (typeof outsidePress === 'function' && !outsidePress(event)) {\n return;\n }\n const target = getTarget$1(event);\n const inertSelector = \"[\" + createAttribute('inert') + \"]\";\n const markers = getDocument$1(elements.floating).querySelectorAll(inertSelector);\n let targetRootAncestor = isElement(target) ? target : null;\n while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {\n const nextParent = getParentNode(targetRootAncestor);\n if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {\n break;\n }\n targetRootAncestor = nextParent;\n }\n\n // Check if the click occurred on a third-party element injected after the\n // floating element rendered.\n if (markers.length && isElement(target) && !isRootElement(target) &&\n // Clicked on a direct ancestor (e.g. FloatingOverlay).\n !contains$1(target, elements.floating) &&\n // If the target root element contains none of the markers, then the\n // element was injected after the floating element rendered.\n Array.from(markers).every(marker => !contains$1(targetRootAncestor, marker))) {\n return;\n }\n\n // Check if the click occurred on the scrollbar\n if (isHTMLElement(target) && floating) {\n const lastTraversableNode = isLastTraversableNode(target);\n const style = getComputedStyle(target);\n const scrollRe = /auto|scroll/;\n const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);\n const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);\n const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n const isRTL = style.direction === 'rtl';\n\n // Check click position relative to scrollbar.\n // In some browsers it is possible to change the <body> (or window)\n // scrollbar to the left side, but is very rare and is difficult to\n // check for. Plus, for modal dialogs with backdrops, it is more\n // important that the backdrop is checked but not so much the window.\n const pressedVerticalScrollbar = canScrollY && (isRTL ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);\n const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;\n if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {\n return;\n }\n }\n const nodeId = (_dataRef$current$floa2 = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa2.nodeId;\n const targetIsInsideChildren = tree && getNodeChildren$1(tree.nodesRef.current, nodeId).some(node => {\n var _node$context;\n return isEventTargetWithin(event, (_node$context = node.context) == null ? void 0 : _node$context.elements.floating);\n });\n if (isEventTargetWithin(event, elements.floating) || isEventTargetWithin(event, elements.domReference) || targetIsInsideChildren) {\n return;\n }\n const children = tree ? getNodeChildren$1(tree.nodesRef.current, nodeId) : [];\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach(child => {\n var _child$context2;\n if ((_child$context2 = child.context) != null && _child$context2.open && !child.context.dataRef.current.__outsidePressBubbles) {\n shouldDismiss = false;\n return;\n }\n });\n if (!shouldDismiss) {\n return;\n }\n }\n onOpenChange(false, event, 'outside-press');\n });\n const closeOnPressOutsideCapture = useEffectEvent(event => {\n var _getTarget4;\n const callback = () => {\n var _getTarget3;\n closeOnPressOutside(event);\n (_getTarget3 = getTarget$1(event)) == null || _getTarget3.removeEventListener(outsidePressEvent, callback);\n };\n (_getTarget4 = getTarget$1(event)) == null || _getTarget4.addEventListener(outsidePressEvent, callback);\n });\n React.useEffect(() => {\n if (!open || !enabled) {\n return;\n }\n dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n let compositionTimeout = -1;\n function onScroll(event) {\n onOpenChange(false, event, 'ancestor-scroll');\n }\n function handleCompositionStart() {\n window.clearTimeout(compositionTimeout);\n isComposingRef.current = true;\n }\n function handleCompositionEnd() {\n // Safari fires `compositionend` before `keydown`, so we need to wait\n // until the next tick to set `isComposing` to `false`.\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n compositionTimeout = window.setTimeout(() => {\n isComposingRef.current = false;\n },\n // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n // Only apply to WebKit for the test to remain 0ms.\n isWebKit() ? 5 : 0);\n }\n const doc = getDocument$1(elements.floating);\n if (escapeKey) {\n doc.addEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.addEventListener('compositionstart', handleCompositionStart);\n doc.addEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.addEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n let ancestors = [];\n if (ancestorScroll) {\n if (isElement(elements.domReference)) {\n ancestors = getOverflowAncestors(elements.domReference);\n }\n if (isElement(elements.floating)) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.floating));\n }\n if (!isElement(elements.reference) && elements.reference && elements.reference.contextElement) {\n ancestors = ancestors.concat(getOverflowAncestors(elements.reference.contextElement));\n }\n }\n\n // Ignore the visual viewport for scrolling dismissal (allow pinch-zoom)\n ancestors = ancestors.filter(ancestor => {\n var _doc$defaultView;\n return ancestor !== ((_doc$defaultView = doc.defaultView) == null ? void 0 : _doc$defaultView.visualViewport);\n });\n ancestors.forEach(ancestor => {\n ancestor.addEventListener('scroll', onScroll, {\n passive: true\n });\n });\n return () => {\n if (escapeKey) {\n doc.removeEventListener('keydown', escapeKeyCapture ? closeOnEscapeKeyDownCapture : closeOnEscapeKeyDown, escapeKeyCapture);\n doc.removeEventListener('compositionstart', handleCompositionStart);\n doc.removeEventListener('compositionend', handleCompositionEnd);\n }\n outsidePress && doc.removeEventListener(outsidePressEvent, outsidePressCapture ? closeOnPressOutsideCapture : closeOnPressOutside, outsidePressCapture);\n ancestors.forEach(ancestor => {\n ancestor.removeEventListener('scroll', onScroll);\n });\n window.clearTimeout(compositionTimeout);\n };\n }, [dataRef, elements, escapeKey, outsidePress, outsidePressEvent, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, escapeKeyCapture, closeOnEscapeKeyDownCapture, closeOnPressOutside, outsidePressCapture, closeOnPressOutsideCapture]);\n React.useEffect(() => {\n dataRef.current.insideReactTree = false;\n }, [dataRef, outsidePress, outsidePressEvent]);\n const reference = React.useMemo(() => ({\n onKeyDown: closeOnEscapeKeyDown,\n ...(referencePress && {\n [bubbleHandlerKeys[referencePressEvent]]: event => {\n onOpenChange(false, event.nativeEvent, 'reference-press');\n },\n ...(referencePressEvent !== 'click' && {\n onClick(event) {\n onOpenChange(false, event.nativeEvent, 'reference-press');\n }\n })\n })\n }), [closeOnEscapeKeyDown, onOpenChange, referencePress, referencePressEvent]);\n const floating = React.useMemo(() => {\n function setMouseDownOrUpInside(event) {\n if (event.button !== 0) {\n return;\n }\n endedOrStartedInsideRef.current = true;\n }\n return {\n onKeyDown: closeOnEscapeKeyDown,\n onMouseDown: setMouseDownOrUpInside,\n onMouseUp: setMouseDownOrUpInside,\n [captureHandlerKeys[outsidePressEvent]]: () => {\n dataRef.current.insideReactTree = true;\n }\n };\n }, [closeOnEscapeKeyDown, outsidePressEvent, dataRef]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction useFloatingRootContext(options) {\n const {\n open = false,\n onOpenChange: onOpenChangeProp,\n elements: elementsProp\n } = options;\n const floatingId = useId();\n const dataRef = React.useRef({});\n const [events] = React.useState(() => createEventEmitter());\n const nested = useFloatingParentNodeId() != null;\n if (process.env.NODE_ENV !== \"production\") {\n const optionDomReference = elementsProp.reference;\n if (optionDomReference && !isElement(optionDomReference)) {\n error('Cannot pass a virtual element to the `elements.reference` option,', 'as it must be a real DOM element. Use `refs.setPositionReference()`', 'instead.');\n }\n }\n const [positionReference, setPositionReference] = React.useState(elementsProp.reference);\n const onOpenChange = useEffectEvent((open, event, reason) => {\n dataRef.current.openEvent = open ? event : undefined;\n events.emit('openchange', {\n open,\n event,\n reason,\n nested\n });\n onOpenChangeProp == null || onOpenChangeProp(open, event, reason);\n });\n const refs = React.useMemo(() => ({\n setPositionReference\n }), []);\n const elements = React.useMemo(() => ({\n reference: positionReference || elementsProp.reference || null,\n floating: elementsProp.floating || null,\n domReference: elementsProp.reference\n }), [positionReference, elementsProp.reference, elementsProp.floating]);\n return React.useMemo(() => ({\n dataRef,\n open,\n onOpenChange,\n elements,\n events,\n floatingId,\n refs\n }), [open, onOpenChange, elements, events, floatingId, refs]);\n}\n\n/**\n * Provides data to position a floating element and context to add interactions.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n nodeId\n } = options;\n const internalRootContext = useFloatingRootContext({\n ...options,\n elements: {\n reference: null,\n floating: null,\n ...options.elements\n }\n });\n const rootContext = options.rootContext || internalRootContext;\n const computedElements = rootContext.elements;\n const [_domReference, setDomReference] = React.useState(null);\n const [positionReference, _setPositionReference] = React.useState(null);\n const optionDomReference = computedElements == null ? void 0 : computedElements.domReference;\n const domReference = optionDomReference || _domReference;\n const domReferenceRef = React.useRef(null);\n const tree = useFloatingTree();\n useModernLayoutEffect(() => {\n if (domReference) {\n domReferenceRef.current = domReference;\n }\n }, [domReference]);\n const position = useFloating$1({\n ...options,\n elements: {\n ...computedElements,\n ...(positionReference && {\n reference: positionReference\n })\n }\n });\n const setPositionReference = React.useCallback(node => {\n const computedPositionReference = isElement(node) ? {\n getBoundingClientRect: () => node.getBoundingClientRect(),\n getClientRects: () => node.getClientRects(),\n contextElement: node\n } : node;\n // Store the positionReference in state if the DOM reference is specified externally via the\n // `elements.reference` option. This ensures that it won't be overridden on future renders.\n _setPositionReference(computedPositionReference);\n position.refs.setReference(computedPositionReference);\n }, [position.refs]);\n const setReference = React.useCallback(node => {\n if (isElement(node) || node === null) {\n domReferenceRef.current = node;\n setDomReference(node);\n }\n\n // Backwards-compatibility for passing a virtual element to `reference`\n // after it has set the DOM reference.\n if (isElement(position.refs.reference.current) || position.refs.reference.current === null ||\n // Don't allow setting virtual elements using the old technique back to\n // `null` to support `positionReference` + an unstable `reference`\n // callback ref.\n node !== null && !isElement(node)) {\n position.refs.setReference(node);\n }\n }, [position.refs]);\n const refs = React.useMemo(() => ({\n ...position.refs,\n setReference,\n setPositionReference,\n domReference: domReferenceRef\n }), [position.refs, setReference, setPositionReference]);\n const elements = React.useMemo(() => ({\n ...position.elements,\n domReference: domReference\n }), [position.elements, domReference]);\n const context = React.useMemo(() => ({\n ...position,\n ...rootContext,\n refs,\n elements,\n nodeId\n }), [position, refs, elements, nodeId, rootContext]);\n useModernLayoutEffect(() => {\n rootContext.dataRef.current.floatingContext = context;\n const node = tree == null ? void 0 : tree.nodesRef.current.find(node => node.id === nodeId);\n if (node) {\n node.context = context;\n }\n });\n return React.useMemo(() => ({\n ...position,\n context,\n refs,\n elements\n }), [position, refs, elements, context]);\n}\n\nfunction isMacSafari() {\n return isMac() && isSafari();\n}\n/**\n * Opens the floating element while the reference element has focus, like CSS\n * `:focus`.\n * @see https://floating-ui.com/docs/useFocus\n */\nfunction useFocus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n onOpenChange,\n events,\n dataRef,\n elements\n } = context;\n const {\n enabled = true,\n visibleOnly = true\n } = props;\n const blockFocusRef = React.useRef(false);\n const timeoutRef = React.useRef(-1);\n const keyboardModalityRef = React.useRef(true);\n React.useEffect(() => {\n if (!enabled) return;\n const win = getWindow(elements.domReference);\n\n // If the reference was focused and the user left the tab/window, and the\n // floating element was not open, the focus should be blocked when they\n // return to the tab/window.\n function onBlur() {\n if (!open && isHTMLElement(elements.domReference) && elements.domReference === activeElement(getDocument$1(elements.domReference))) {\n blockFocusRef.current = true;\n }\n }\n function onKeyDown() {\n keyboardModalityRef.current = true;\n }\n function onPointerDown() {\n keyboardModalityRef.current = false;\n }\n win.addEventListener('blur', onBlur);\n if (isMacSafari()) {\n win.addEventListener('keydown', onKeyDown, true);\n win.addEventListener('pointerdown', onPointerDown, true);\n }\n return () => {\n win.removeEventListener('blur', onBlur);\n if (isMacSafari()) {\n win.removeEventListener('keydown', onKeyDown, true);\n win.removeEventListener('pointerdown', onPointerDown, true);\n }\n };\n }, [elements.domReference, open, enabled]);\n React.useEffect(() => {\n if (!enabled) return;\n function onOpenChange(_ref) {\n let {\n reason\n } = _ref;\n if (reason === 'reference-press' || reason === 'escape-key') {\n blockFocusRef.current = true;\n }\n }\n events.on('openchange', onOpenChange);\n return () => {\n events.off('openchange', onOpenChange);\n };\n }, [events, enabled]);\n React.useEffect(() => {\n return () => {\n clearTimeoutIfSet(timeoutRef);\n };\n }, []);\n const reference = React.useMemo(() => ({\n onMouseLeave() {\n blockFocusRef.current = false;\n },\n onFocus(event) {\n if (blockFocusRef.current) return;\n const target = getTarget$1(event.nativeEvent);\n if (visibleOnly && isElement(target)) {\n // Safari fails to match `:focus-visible` if focus was initially\n // outside the document.\n if (isMacSafari() && !event.relatedTarget) {\n if (!keyboardModalityRef.current && !isTypeableElement(target)) {\n return;\n }\n } else if (!matchesFocusVisible(target)) {\n return;\n }\n }\n onOpenChange(true, event.nativeEvent, 'focus');\n },\n onBlur(event) {\n blockFocusRef.current = false;\n const relatedTarget = event.relatedTarget;\n const nativeEvent = event.nativeEvent;\n\n // Hit the non-modal focus management portal guard. Focus will be\n // moved into the floating element immediately after.\n const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';\n\n // Wait for the window blur listener to fire.\n timeoutRef.current = window.setTimeout(() => {\n var _dataRef$current$floa;\n const activeEl = activeElement(elements.domReference ? elements.domReference.ownerDocument : document);\n\n // Focus left the page, keep it open.\n if (!relatedTarget && activeEl === elements.domReference) return;\n\n // When focusing the reference element (e.g. regular click), then\n // clicking into the floating element, prevent it from hiding.\n // Note: it must be focusable, e.g. `tabindex=\"-1\"`.\n // We can not rely on relatedTarget to point to the correct element\n // as it will only point to the shadow host of the newly focused element\n // and not the element that actually has received focus if it is located\n // inside a shadow root.\n if (contains$1((_dataRef$current$floa = dataRef.current.floatingContext) == null ? void 0 : _dataRef$current$floa.refs.floating.current, activeEl) || contains$1(elements.domReference, activeEl) || movedToFocusGuard) {\n return;\n }\n onOpenChange(false, nativeEvent, 'focus');\n });\n }\n }), [dataRef, elements.domReference, onOpenChange, visibleOnly]);\n return React.useMemo(() => enabled ? {\n reference\n } : {}, [enabled, reference]);\n}\n\nfunction mergeProps(userProps, propsList, elementKey) {\n const map = new Map();\n const isItem = elementKey === 'item';\n let domUserProps = userProps;\n if (isItem && userProps) {\n const {\n [ACTIVE_KEY]: _,\n [SELECTED_KEY]: __,\n ...validProps\n } = userProps;\n domUserProps = validProps;\n }\n return {\n ...(elementKey === 'floating' && {\n tabIndex: -1,\n [FOCUSABLE_ATTRIBUTE]: ''\n }),\n ...domUserProps,\n ...propsList.map(value => {\n const propsOrGetProps = value ? value[elementKey] : null;\n if (typeof propsOrGetProps === 'function') {\n return userProps ? propsOrGetProps(userProps) : null;\n }\n return propsOrGetProps;\n }).concat(userProps).reduce((acc, props) => {\n if (!props) {\n return acc;\n }\n Object.entries(props).forEach(_ref => {\n let [key, value] = _ref;\n if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) {\n return;\n }\n if (key.indexOf('on') === 0) {\n if (!map.has(key)) {\n map.set(key, []);\n }\n if (typeof value === 'function') {\n var _map$get;\n (_map$get = map.get(key)) == null || _map$get.push(value);\n acc[key] = function () {\n var _map$get2;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map(fn => fn(...args)).find(val => val !== undefined);\n };\n }\n } else {\n acc[key] = value;\n }\n });\n return acc;\n }, {})\n };\n}\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList) {\n if (propsList === void 0) {\n propsList = [];\n }\n const referenceDeps = propsList.map(key => key == null ? void 0 : key.reference);\n const floatingDeps = propsList.map(key => key == null ? void 0 : key.floating);\n const itemDeps = propsList.map(key => key == null ? void 0 : key.item);\n const getReferenceProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n referenceDeps);\n const getFloatingProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n floatingDeps);\n const getItemProps = React.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n itemDeps);\n return React.useMemo(() => ({\n getReferenceProps,\n getFloatingProps,\n getItemProps\n }), [getReferenceProps, getFloatingProps, getItemProps]);\n}\n\nconst ESCAPE = 'Escape';\nfunction doSwitch(orientation, vertical, horizontal) {\n switch (orientation) {\n case 'vertical':\n return vertical;\n case 'horizontal':\n return horizontal;\n default:\n return vertical || horizontal;\n }\n}\nfunction isMainOrientationKey(key, orientation) {\n const vertical = key === ARROW_UP || key === ARROW_DOWN;\n const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isMainOrientationToEndKey(key, orientation, rtl) {\n const vertical = key === ARROW_DOWN;\n const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n return doSwitch(orientation, vertical, horizontal) || key === 'Enter' || key === ' ' || key === '';\n}\nfunction isCrossOrientationOpenKey(key, orientation, rtl) {\n const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT;\n const horizontal = key === ARROW_DOWN;\n return doSwitch(orientation, vertical, horizontal);\n}\nfunction isCrossOrientationCloseKey(key, orientation, rtl, cols) {\n const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT;\n const horizontal = key === ARROW_UP;\n if (orientation === 'both' || orientation === 'horizontal' && cols && cols > 1) {\n return key === ESCAPE;\n }\n return doSwitch(orientation, vertical, horizontal);\n}\n/**\n * Adds arrow key-based navigation of a list of items, either using real DOM\n * focus or virtual focus.\n * @see https://floating-ui.com/docs/useListNavigation\n */\nfunction useListNavigation(context, props) {\n const {\n open,\n onOpenChange,\n elements,\n floatingId\n } = context;\n const {\n listRef,\n activeIndex,\n onNavigate: unstable_onNavigate = () => {},\n enabled = true,\n selectedIndex = null,\n allowEscape = false,\n loop = false,\n nested = false,\n rtl = false,\n virtual = false,\n focusItemOnOpen = 'auto',\n focusItemOnHover = true,\n openOnArrowKeyDown = true,\n disabledIndices = undefined,\n orientation = 'vertical',\n parentOrientation,\n cols = 1,\n scrollItemIntoView = true,\n virtualItemRef,\n itemSizes,\n dense = false\n } = props;\n if (process.env.NODE_ENV !== \"production\") {\n if (allowEscape) {\n if (!loop) {\n warn('`useListNavigation` looping must be enabled to allow escaping.');\n }\n if (!virtual) {\n warn('`useListNavigation` must be virtual to allow escaping.');\n }\n }\n if (orientation === 'vertical' && cols > 1) {\n warn('In grid list navigation mode (`cols` > 1), the `orientation` should', 'be either \"horizontal\" or \"both\".');\n }\n }\n const floatingFocusElement = getFloatingFocusElement(elements.floating);\n const floatingFocusElementRef = useLatestRef(floatingFocusElement);\n const parentId = useFloatingParentNodeId();\n const tree = useFloatingTree();\n useModernLayoutEffect(() => {\n context.dataRef.current.orientation = orientation;\n }, [context, orientation]);\n const onNavigate = useEffectEvent(() => {\n unstable_onNavigate(indexRef.current === -1 ? null : indexRef.current);\n });\n const typeableComboboxReference = isTypeableCombobox(elements.domReference);\n const focusItemOnOpenRef = React.useRef(focusItemOnOpen);\n const indexRef = React.useRef(selectedIndex != null ? selectedIndex : -1);\n const keyRef = React.useRef(null);\n const isPointerModalityRef = React.useRef(true);\n const previousOnNavigateRef = React.useRef(onNavigate);\n const previousMountedRef = React.useRef(!!elements.floating);\n const previousOpenRef = React.useRef(open);\n const forceSyncFocusRef = React.useRef(false);\n const forceScrollIntoViewRef = React.useRef(false);\n const disabledIndicesRef = useLatestRef(disabledIndices);\n const latestOpenRef = useLatestRef(open);\n const scrollItemIntoViewRef = useLatestRef(scrollItemIntoView);\n const selectedIndexRef = useLatestRef(selectedIndex);\n const [activeId, setActiveId] = React.useState();\n const [virtualId, setVirtualId] = React.useState();\n const focusItem = useEffectEvent(() => {\n function runFocus(item) {\n if (virtual) {\n var _item$id;\n if ((_item$id = item.id) != null && _item$id.endsWith('-fui-option')) {\n item.id = floatingId + \"-\" + Math.random().toString(16).slice(2, 10);\n }\n setActiveId(item.id);\n tree == null || tree.events.emit('virtualfocus', item);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n } else {\n enqueueFocus(item, {\n sync: forceSyncFocusRef.current,\n preventScroll: true\n });\n }\n }\n const initialItem = listRef.current[indexRef.current];\n const forceScrollIntoView = forceScrollIntoViewRef.current;\n if (initialItem) {\n runFocus(initialItem);\n }\n const scheduler = forceSyncFocusRef.current ? v => v() : requestAnimationFrame;\n scheduler(() => {\n const waitedItem = listRef.current[indexRef.current] || initialItem;\n if (!waitedItem) return;\n if (!initialItem) {\n runFocus(waitedItem);\n }\n const scrollIntoViewOptions = scrollItemIntoViewRef.current;\n const shouldScrollIntoView = scrollIntoViewOptions && item && (forceScrollIntoView || !isPointerModalityRef.current);\n if (shouldScrollIntoView) {\n // JSDOM doesn't support `.scrollIntoView()` but it's widely supported\n // by all browsers.\n waitedItem.scrollIntoView == null || waitedItem.scrollIntoView(typeof scrollIntoViewOptions === 'boolean' ? {\n block: 'nearest',\n inline: 'nearest'\n } : scrollIntoViewOptions);\n }\n });\n });\n\n // Sync `selectedIndex` to be the `activeIndex` upon opening the floating\n // element. Also, reset `activeIndex` upon closing the floating element.\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (open && elements.floating) {\n if (focusItemOnOpenRef.current && selectedIndex != null) {\n // Regardless of the pointer modality, we want to ensure the selected\n // item comes into view when the floating element is opened.\n forceScrollIntoViewRef.current = true;\n indexRef.current = selectedIndex;\n onNavigate();\n }\n } else if (previousMountedRef.current) {\n // Since the user can specify `onNavigate` conditionally\n // (onNavigate: open ? setActiveIndex : setSelectedIndex),\n // we store and call the previous function.\n indexRef.current = -1;\n previousOnNavigateRef.current();\n }\n }, [enabled, open, elements.floating, selectedIndex, onNavigate]);\n\n // Sync `activeIndex` to be the focused item while the floating element is\n // open.\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!open) return;\n if (!elements.floating) return;\n if (activeIndex == null) {\n forceSyncFocusRef.current = false;\n if (selectedIndexRef.current != null) {\n return;\n }\n\n // Reset while the floating element was open (e.g. the list changed).\n if (previousMountedRef.current) {\n indexRef.current = -1;\n focusItem();\n }\n\n // Initial sync.\n if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) {\n let runs = 0;\n const waitForListPopulated = () => {\n if (listRef.current[0] == null) {\n // Avoid letting the browser paint if possible on the first try,\n // otherwise use rAF. Don't try more than twice, since something\n // is wrong otherwise.\n if (runs < 2) {\n const scheduler = runs ? requestAnimationFrame : queueMicrotask;\n scheduler(waitForListPopulated);\n }\n runs++;\n } else {\n indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef, disabledIndicesRef.current) : getMaxListIndex(listRef, disabledIndicesRef.current);\n keyRef.current = null;\n onNavigate();\n }\n };\n waitForListPopulated();\n }\n } else if (!isIndexOutOfListBounds(listRef, activeIndex)) {\n indexRef.current = activeIndex;\n focusItem();\n forceScrollIntoViewRef.current = false;\n }\n }, [enabled, open, elements.floating, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, disabledIndicesRef]);\n\n // Ensure the parent floating element has focus when a nested child closes\n // to allow arrow key navigation to work after the pointer leaves the child.\n useModernLayoutEffect(() => {\n var _nodes$find;\n if (!enabled || elements.floating || !tree || virtual || !previousMountedRef.current) {\n return;\n }\n const nodes = tree.nodesRef.current;\n const parent = (_nodes$find = nodes.find(node => node.id === parentId)) == null || (_nodes$find = _nodes$find.context) == null ? void 0 : _nodes$find.elements.floating;\n const activeEl = activeElement(getDocument$1(elements.floating));\n const treeContainsActiveEl = nodes.some(node => node.context && contains$1(node.context.elements.floating, activeEl));\n if (parent && !treeContainsActiveEl && isPointerModalityRef.current) {\n parent.focus({\n preventScroll: true\n });\n }\n }, [enabled, elements.floating, tree, parentId, virtual]);\n useModernLayoutEffect(() => {\n if (!enabled) return;\n if (!tree) return;\n if (!virtual) return;\n if (parentId) return;\n function handleVirtualFocus(item) {\n setVirtualId(item.id);\n if (virtualItemRef) {\n virtualItemRef.current = item;\n }\n }\n tree.events.on('virtualfocus', handleVirtualFocus);\n return () => {\n tree.events.off('virtualfocus', handleVirtualFocus);\n };\n }, [enabled, tree, virtual, parentId, virtualItemRef]);\n useModernLayoutEffect(() => {\n previousOnNavigateRef.current = onNavigate;\n previousOpenRef.current = open;\n previousMountedRef.current = !!elements.floating;\n });\n useModernLayoutEffect(() => {\n if (!open) {\n keyRef.current = null;\n focusItemOnOpenRef.current = focusItemOnOpen;\n }\n }, [open, focusItemOnOpen]);\n const hasActiveIndex = activeIndex != null;\n const item = React.useMemo(() => {\n function syncCurrentTarget(currentTarget) {\n if (!latestOpenRef.current) return;\n const index = listRef.current.indexOf(currentTarget);\n if (index !== -1 && indexRef.current !== index) {\n indexRef.current = index;\n onNavigate();\n }\n }\n const props = {\n onFocus(_ref) {\n let {\n currentTarget\n } = _ref;\n forceSyncFocusRef.current = true;\n syncCurrentTarget(currentTarget);\n },\n onClick: _ref2 => {\n let {\n currentTarget\n } = _ref2;\n return currentTarget.focus({\n preventScroll: true\n });\n },\n // Safari\n onMouseMove(_ref3) {\n let {\n currentTarget\n } = _ref3;\n forceSyncFocusRef.current = true;\n forceScrollIntoViewRef.current = false;\n if (focusItemOnHover) {\n syncCurrentTarget(currentTarget);\n }\n },\n onPointerLeave(_ref4) {\n let {\n pointerType\n } = _ref4;\n if (!isPointerModalityRef.current || pointerType === 'touch') {\n return;\n }\n forceSyncFocusRef.current = true;\n if (!focusItemOnHover) {\n return;\n }\n indexRef.current = -1;\n onNavigate();\n if (!virtual) {\n var _floatingFocusElement;\n (_floatingFocusElement = floatingFocusElementRef.current) == null || _floatingFocusElement.focus({\n preventScroll: true\n });\n }\n }\n };\n return props;\n }, [latestOpenRef, floatingFocusElementRef, focusItemOnHover, listRef, onNavigate, virtual]);\n const getParentOrientation = React.useCallback(() => {\n var _tree$nodesRef$curren;\n return parentOrientation != null ? parentOrientation : tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find(node => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.dataRef) == null ? void 0 : _tree$nodesRef$curren.current.orientation;\n }, [parentId, tree, parentOrientation]);\n const commonOnKeyDown = useEffectEvent(event => {\n isPointerModalityRef.current = false;\n forceSyncFocusRef.current = true;\n\n // When composing a character, Chrome fires ArrowDown twice. Firefox/Safari\n // don't appear to suffer from this. `event.isComposing` is avoided due to\n // Safari not supporting it properly (although it's not needed in the first\n // place for Safari, just avoiding any possible issues).\n if (event.which === 229) {\n return;\n }\n\n // If the floating element is animating out, ignore navigation. Otherwise,\n // the `activeIndex` gets set to 0 despite not being open so the next time\n // the user ArrowDowns, the first item won't be focused.\n if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) {\n return;\n }\n if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl, cols)) {\n // If the nested list's close key is also the parent navigation key,\n // let the parent navigate. Otherwise, stop propagating the event.\n if (!isMainOrientationKey(event.key, getParentOrientation())) {\n stopEvent(event);\n }\n onOpenChange(false, event.nativeEvent, 'list-navigation');\n if (isHTMLElement(elements.domReference)) {\n if (virtual) {\n tree == null || tree.events.emit('virtualfocus', elements.domReference);\n } else {\n elements.domReference.focus();\n }\n }\n return;\n }\n const currentIndex = indexRef.current;\n const minIndex = getMinListIndex(listRef, disabledIndices);\n const maxIndex = getMaxListIndex(listRef, disabledIndices);\n if (!typeableComboboxReference) {\n if (event.key === 'Home') {\n stopEvent(event);\n indexRef.current = minIndex;\n onNavigate();\n }\n if (event.key === 'End') {\n stopEvent(event);\n indexRef.current = maxIndex;\n onNavigate();\n }\n }\n\n // Grid navigation.\n if (cols > 1) {\n const sizes = itemSizes || Array.from({\n length: listRef.current.length\n }, () => ({\n width: 1,\n height: 1\n }));\n // To calculate movements on the grid, we use hypothetical cell indices\n // as if every item was 1x1, then convert back to real indices.\n const cellMap = createGridCellMap(sizes, cols, dense);\n const minGridIndex = cellMap.findIndex(index => index != null && !isListIndexDisabled(listRef, index, disabledIndices));\n // last enabled index\n const maxGridIndex = cellMap.reduce((foundIndex, index, cellIndex) => index != null && !isListIndexDisabled(listRef, index, disabledIndices) ? cellIndex : foundIndex, -1);\n const index = cellMap[getGridNavigatedIndex({\n current: cellMap.map(itemIndex => itemIndex != null ? listRef.current[itemIndex] : null)\n }, {\n event,\n orientation,\n loop,\n rtl,\n cols,\n // treat undefined (empty grid spaces) as disabled indices so we\n // don't end up in them\n disabledIndices: getGridCellIndices([...((typeof disabledIndices !== 'function' ? disabledIndices : null) || listRef.current.map((_, index) => isListIndexDisabled(listRef, index, disabledIndices) ? index : undefined)), undefined], cellMap),\n minIndex: minGridIndex,\n maxIndex: maxGridIndex,\n prevIndex: getGridCellIndexOfCorner(indexRef.current > maxIndex ? minIndex : indexRef.current, sizes, cellMap, cols,\n // use a corner matching the edge closest to the direction\n // we're moving in so we don't end up in the same item. Prefer\n // top/left over bottom/right.\n event.key === ARROW_DOWN ? 'bl' : event.key === (rtl ? ARROW_LEFT : ARROW_RIGHT) ? 'tr' : 'tl'),\n stopEvent: true\n })];\n if (index != null) {\n indexRef.current = index;\n onNavigate();\n }\n if (orientation === 'both') {\n return;\n }\n }\n if (isMainOrientationKey(event.key, orientation)) {\n stopEvent(event);\n\n // Reset the index if no item is focused.\n if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) {\n indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex;\n onNavigate();\n return;\n }\n if (isMainOrientationToEndKey(event.key, orientation, rtl)) {\n if (loop) {\n indexRef.current = currentIndex >= maxIndex ? allowEscape && currentIndex !== listRef.current.length ? -1 : minIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n });\n } else {\n indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n disabledIndices\n }));\n }\n } else {\n if (loop) {\n indexRef.current = currentIndex <= minIndex ? allowEscape && currentIndex !== -1 ? listRef.current.length : maxIndex : findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n });\n } else {\n indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef, {\n startingIndex: currentIndex,\n decrement: true,\n disabledIndices\n }));\n }\n }\n if (isIndexOutOfListBounds(listRef, indexRef.current)) {\n indexRef.current = -1;\n }\n onNavigate();\n }\n });\n const ariaActiveDescendantProp = React.useMemo(() => {\n return virtual && open && hasActiveIndex && {\n 'aria-activedescendant': virtualId || activeId\n };\n }, [virtual, open, hasActiveIndex, virtualId, activeId]);\n const floating = React.useMemo(() => {\n return {\n 'aria-orientation': orientation === 'both' ? undefined : orientation,\n ...(!typeableComboboxReference ? ariaActiveDescendantProp : {}),\n onKeyDown: commonOnKeyDown,\n onPointerMove() {\n isPointerModalityRef.current = true;\n }\n };\n }, [ariaActiveDescendantProp, commonOnKeyDown, orientation, typeableComboboxReference]);\n const reference = React.useMemo(() => {\n function checkVirtualMouse(event) {\n if (focusItemOnOpen === 'auto' && isVirtualClick(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n function checkVirtualPointer(event) {\n // `pointerdown` fires first, reset the state then perform the checks.\n focusItemOnOpenRef.current = focusItemOnOpen;\n if (focusItemOnOpen === 'auto' && isVirtualPointerEvent(event.nativeEvent)) {\n focusItemOnOpenRef.current = true;\n }\n }\n return {\n ...ariaActiveDescendantProp,\n onKeyDown(event) {\n isPointerModalityRef.current = false;\n const isArrowKey = event.key.startsWith('Arrow');\n const isHomeOrEndKey = ['Home', 'End'].includes(event.key);\n const isMoveKey = isArrowKey || isHomeOrEndKey;\n const isCrossOpenKey = isCrossOrientationOpenKey(event.key, orientation, rtl);\n const isCrossCloseKey = isCrossOrientationCloseKey(event.key, orientation, rtl, cols);\n const isParentCrossOpenKey = isCrossOrientationOpenKey(event.key, getParentOrientation(), rtl);\n const isMainKey = isMainOrientationKey(event.key, orientation);\n const isNavigationKey = (nested ? isParentCrossOpenKey : isMainKey) || event.key === 'Enter' || event.key.trim() === '';\n if (virtual && open) {\n const rootNode = tree == null ? void 0 : tree.nodesRef.current.find(node => node.parentId == null);\n const deepestNode = tree && rootNode ? getDeepestNode(tree.nodesRef.current, rootNode.id) : null;\n if (isMoveKey && deepestNode && virtualItemRef) {\n const eventObject = new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true\n });\n if (isCrossOpenKey || isCrossCloseKey) {\n var _deepestNode$context, _deepestNode$context2;\n const isCurrentTarget = ((_deepestNode$context = deepestNode.context) == null ? void 0 : _deepestNode$context.elements.domReference) === event.currentTarget;\n const dispatchItem = isCrossCloseKey && !isCurrentTarget ? (_deepestNode$context2 = deepestNode.context) == null ? void 0 : _deepestNode$context2.elements.domReference : isCrossOpenKey ? listRef.current.find(item => (item == null ? void 0 : item.id) === activeId) : null;\n if (dispatchItem) {\n stopEvent(event);\n dispatchItem.dispatchEvent(eventObject);\n setVirtualId(undefined);\n }\n }\n if ((isMainKey || isHomeOrEndKey) && deepestNode.context) {\n if (deepestNode.context.open && deepestNode.parentId && event.currentTarget !== deepestNode.context.elements.domReference) {\n var _deepestNode$context$;\n stopEvent(event);\n (_deepestNode$context$ = deepestNode.context.elements.domReference) == null || _deepestNode$context$.dispatchEvent(eventObject);\n return;\n }\n }\n }\n return commonOnKeyDown(event);\n }\n // If a floating element should not open on arrow key down, avoid\n // setting `activeIndex` while it's closed.\n if (!open && !openOnArrowKeyDown && isArrowKey) {\n return;\n }\n if (isNavigationKey) {\n const isParentMainKey = isMainOrientationKey(event.key, getParentOrientation());\n keyRef.current = nested && isParentMainKey ? null : event.key;\n }\n if (nested) {\n if (isParentCrossOpenKey) {\n stopEvent(event);\n if (open) {\n indexRef.current = getMinListIndex(listRef, disabledIndicesRef.current);\n onNavigate();\n } else {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n }\n }\n return;\n }\n if (isMainKey) {\n if (selectedIndex != null) {\n indexRef.current = selectedIndex;\n }\n stopEvent(event);\n if (!open && openOnArrowKeyDown) {\n onOpenChange(true, event.nativeEvent, 'list-navigation');\n } else {\n commonOnKeyDown(event);\n }\n if (open) {\n onNavigate();\n }\n }\n },\n onFocus() {\n if (open && !virtual) {\n indexRef.current = -1;\n onNavigate();\n }\n },\n onPointerDown: checkVirtualPointer,\n onPointerEnter: checkVirtualPointer,\n onMouseDown: checkVirtualMouse,\n onClick: checkVirtualMouse\n };\n }, [activeId, ariaActiveDescendantProp, cols, commonOnKeyDown, disabledIndicesRef, focusItemOnOpen, listRef, nested, onNavigate, onOpenChange, open, openOnArrowKeyDown, orientation, getParentOrientation, rtl, selectedIndex, tree, virtual, virtualItemRef]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\nconst componentRoleToAriaRoleMap = /*#__PURE__*/new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props) {\n var _elements$domReferenc, _componentRoleToAriaR;\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n elements,\n floatingId: defaultFloatingId\n } = context;\n const {\n enabled = true,\n role = 'dialog'\n } = props;\n const defaultReferenceId = useId();\n const referenceId = ((_elements$domReferenc = elements.domReference) == null ? void 0 : _elements$domReferenc.id) || defaultReferenceId;\n const floatingId = React.useMemo(() => {\n var _getFloatingFocusElem;\n return ((_getFloatingFocusElem = getFloatingFocusElement(elements.floating)) == null ? void 0 : _getFloatingFocusElem.id) || defaultFloatingId;\n }, [elements.floating, defaultFloatingId]);\n const ariaRole = (_componentRoleToAriaR = componentRoleToAriaRoleMap.get(role)) != null ? _componentRoleToAriaR : role;\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n const reference = React.useMemo(() => {\n if (ariaRole === 'tooltip' || role === 'label') {\n return {\n [\"aria-\" + (role === 'label' ? 'labelledby' : 'describedby')]: open ? floatingId : undefined\n };\n }\n return {\n 'aria-expanded': open ? 'true' : 'false',\n 'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n 'aria-controls': open ? floatingId : undefined,\n ...(ariaRole === 'listbox' && {\n role: 'combobox'\n }),\n ...(ariaRole === 'menu' && {\n id: referenceId\n }),\n ...(ariaRole === 'menu' && isNested && {\n role: 'menuitem'\n }),\n ...(role === 'select' && {\n 'aria-autocomplete': 'none'\n }),\n ...(role === 'combobox' && {\n 'aria-autocomplete': 'list'\n })\n };\n }, [ariaRole, floatingId, isNested, open, referenceId, role]);\n const floating = React.useMemo(() => {\n const floatingProps = {\n id: floatingId,\n ...(ariaRole && {\n role: ariaRole\n })\n };\n if (ariaRole === 'tooltip' || role === 'label') {\n return floatingProps;\n }\n return {\n ...floatingProps,\n ...(ariaRole === 'menu' && {\n 'aria-labelledby': referenceId\n })\n };\n }, [ariaRole, floatingId, referenceId, role]);\n const item = React.useCallback(_ref => {\n let {\n active,\n selected\n } = _ref;\n const commonProps = {\n role: 'option',\n ...(active && {\n id: floatingId + \"-fui-option\"\n })\n };\n\n // For `menu`, we are unable to tell if the item is a `menuitemradio`\n // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n // avoid defaulting to `menuitem` as it may overwrite custom role props.\n switch (role) {\n case 'select':\n case 'combobox':\n return {\n ...commonProps,\n 'aria-selected': selected\n };\n }\n return {};\n }, [floatingId, role]);\n return React.useMemo(() => enabled ? {\n reference,\n floating,\n item\n } : {}, [enabled, reference, floating, item]);\n}\n\n// Converts a JS style key like `backgroundColor` to a CSS transition-property\n// like `background-color`.\nconst camelCaseToKebabCase = str => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? '-' : '') + $.toLowerCase());\nfunction execWithArgsOrReturn(valueOrFn, args) {\n return typeof valueOrFn === 'function' ? valueOrFn(args) : valueOrFn;\n}\nfunction useDelayUnmount(open, durationMs) {\n const [isMounted, setIsMounted] = React.useState(open);\n if (open && !isMounted) {\n setIsMounted(true);\n }\n React.useEffect(() => {\n if (!open && isMounted) {\n const timeout = setTimeout(() => setIsMounted(false), durationMs);\n return () => clearTimeout(timeout);\n }\n }, [open, isMounted, durationMs]);\n return isMounted;\n}\n/**\n * Provides a status string to apply CSS transitions to a floating element,\n * correctly handling placement-aware transitions.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstatus\n */\nfunction useTransitionStatus(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n open,\n elements: {\n floating\n }\n } = context;\n const {\n duration = 250\n } = props;\n const isNumberDuration = typeof duration === 'number';\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [status, setStatus] = React.useState('unmounted');\n const isMounted = useDelayUnmount(open, closeDuration);\n if (!isMounted && status === 'close') {\n setStatus('unmounted');\n }\n useModernLayoutEffect(() => {\n if (!floating) return;\n if (open) {\n setStatus('initial');\n const frame = requestAnimationFrame(() => {\n // Ensure it opens before paint. With `FloatingDelayGroup`,\n // this avoids a flicker when moving between floating elements\n // to ensure one is always open with no missing frames.\n ReactDOM.flushSync(() => {\n setStatus('open');\n });\n });\n return () => {\n cancelAnimationFrame(frame);\n };\n }\n setStatus('close');\n }, [open, floating]);\n return {\n isMounted,\n status\n };\n}\n/**\n * Provides styles to apply CSS transitions to a floating element, correctly\n * handling placement-aware transitions. Wrapper around `useTransitionStatus`.\n * @see https://floating-ui.com/docs/useTransition#usetransitionstyles\n */\nfunction useTransitionStyles(context, props) {\n if (props === void 0) {\n props = {};\n }\n const {\n initial: unstable_initial = {\n opacity: 0\n },\n open: unstable_open,\n close: unstable_close,\n common: unstable_common,\n duration = 250\n } = props;\n const placement = context.placement;\n const side = placement.split('-')[0];\n const fnArgs = React.useMemo(() => ({\n side,\n placement\n }), [side, placement]);\n const isNumberDuration = typeof duration === 'number';\n const openDuration = (isNumberDuration ? duration : duration.open) || 0;\n const closeDuration = (isNumberDuration ? duration : duration.close) || 0;\n const [styles, setStyles] = React.useState(() => ({\n ...execWithArgsOrReturn(unstable_common, fnArgs),\n ...execWithArgsOrReturn(unstable_initial, fnArgs)\n }));\n const {\n isMounted,\n status\n } = useTransitionStatus(context, {\n duration\n });\n const initialRef = useLatestRef(unstable_initial);\n const openRef = useLatestRef(unstable_open);\n const closeRef = useLatestRef(unstable_close);\n const commonRef = useLatestRef(unstable_common);\n useModernLayoutEffect(() => {\n const initialStyles = execWithArgsOrReturn(initialRef.current, fnArgs);\n const closeStyles = execWithArgsOrReturn(closeRef.current, fnArgs);\n const commonStyles = execWithArgsOrReturn(commonRef.current, fnArgs);\n const openStyles = execWithArgsOrReturn(openRef.current, fnArgs) || Object.keys(initialStyles).reduce((acc, key) => {\n acc[key] = '';\n return acc;\n }, {});\n if (status === 'initial') {\n setStyles(styles => ({\n transitionProperty: styles.transitionProperty,\n ...commonStyles,\n ...initialStyles\n }));\n }\n if (status === 'open') {\n setStyles({\n transitionProperty: Object.keys(openStyles).map(camelCaseToKebabCase).join(','),\n transitionDuration: openDuration + \"ms\",\n ...commonStyles,\n ...openStyles\n });\n }\n if (status === 'close') {\n const styles = closeStyles || initialStyles;\n setStyles({\n transitionProperty: Object.keys(styles).map(camelCaseToKebabCase).join(','),\n transitionDuration: closeDuration + \"ms\",\n ...commonStyles,\n ...styles\n });\n }\n }, [closeDuration, closeRef, initialRef, openRef, commonRef, openDuration, status, fnArgs]);\n return {\n isMounted,\n styles\n };\n}\n\n/**\n * Provides a matching callback that can be used to focus an item as the user\n * types, often used in tandem with `useListNavigation()`.\n * @see https://floating-ui.com/docs/useTypeahead\n */\nfunction useTypeahead(context, props) {\n var _ref;\n const {\n open,\n dataRef\n } = context;\n const {\n listRef,\n activeIndex,\n onMatch: unstable_onMatch,\n onTypingChange: unstable_onTypingChange,\n enabled = true,\n findMatch = null,\n resetMs = 750,\n ignoreKeys = [],\n selectedIndex = null\n } = props;\n const timeoutIdRef = React.useRef(-1);\n const stringRef = React.useRef('');\n const prevIndexRef = React.useRef((_ref = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref : -1);\n const matchIndexRef = React.useRef(null);\n const onMatch = useEffectEvent(unstable_onMatch);\n const onTypingChange = useEffectEvent(unstable_onTypingChange);\n const findMatchRef = useLatestRef(findMatch);\n const ignoreKeysRef = useLatestRef(ignoreKeys);\n useModernLayoutEffect(() => {\n if (open) {\n clearTimeoutIfSet(timeoutIdRef);\n matchIndexRef.current = null;\n stringRef.current = '';\n }\n }, [open]);\n useModernLayoutEffect(() => {\n // Sync arrow key navigation but not typeahead navigation.\n if (open && stringRef.current === '') {\n var _ref2;\n prevIndexRef.current = (_ref2 = selectedIndex != null ? selectedIndex : activeIndex) != null ? _ref2 : -1;\n }\n }, [open, selectedIndex, activeIndex]);\n const setTypingChange = useEffectEvent(value => {\n if (value) {\n if (!dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n } else {\n if (dataRef.current.typing) {\n dataRef.current.typing = value;\n onTypingChange(value);\n }\n }\n });\n const onKeyDown = useEffectEvent(event => {\n function getMatchingIndex(list, orderedList, string) {\n const str = findMatchRef.current ? findMatchRef.current(orderedList, string) : orderedList.find(text => (text == null ? void 0 : text.toLocaleLowerCase().indexOf(string.toLocaleLowerCase())) === 0);\n return str ? list.indexOf(str) : -1;\n }\n const listContent = listRef.current;\n if (stringRef.current.length > 0 && stringRef.current[0] !== ' ') {\n if (getMatchingIndex(listContent, listContent, stringRef.current) === -1) {\n setTypingChange(false);\n } else if (event.key === ' ') {\n stopEvent(event);\n }\n }\n if (listContent == null || ignoreKeysRef.current.includes(event.key) ||\n // Character key.\n event.key.length !== 1 ||\n // Modifier key.\n event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n if (open && event.key !== ' ') {\n stopEvent(event);\n setTypingChange(true);\n }\n\n // Bail out if the list contains a word like \"llama\" or \"aaron\". TODO:\n // allow it in this case, too.\n const allowRapidSuccessionOfFirstLetter = listContent.every(text => {\n var _text$, _text$2;\n return text ? ((_text$ = text[0]) == null ? void 0 : _text$.toLocaleLowerCase()) !== ((_text$2 = text[1]) == null ? void 0 : _text$2.toLocaleLowerCase()) : true;\n });\n\n // Allows the user to cycle through items that start with the same letter\n // in rapid succession.\n if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n }\n stringRef.current += event.key;\n clearTimeoutIfSet(timeoutIdRef);\n timeoutIdRef.current = window.setTimeout(() => {\n stringRef.current = '';\n prevIndexRef.current = matchIndexRef.current;\n setTypingChange(false);\n }, resetMs);\n const prevIndex = prevIndexRef.current;\n const index = getMatchingIndex(listContent, [...listContent.slice((prevIndex || 0) + 1), ...listContent.slice(0, (prevIndex || 0) + 1)], stringRef.current);\n if (index !== -1) {\n onMatch(index);\n matchIndexRef.current = index;\n } else if (event.key !== ' ') {\n stringRef.current = '';\n setTypingChange(false);\n }\n });\n const reference = React.useMemo(() => ({\n onKeyDown\n }), [onKeyDown]);\n const floating = React.useMemo(() => {\n return {\n onKeyDown,\n onKeyUp(event) {\n if (event.key === ' ') {\n setTypingChange(false);\n }\n }\n };\n }, [onKeyDown, setTypingChange]);\n return React.useMemo(() => enabled ? {\n reference,\n floating\n } : {}, [enabled, reference, floating]);\n}\n\nfunction getArgsWithCustomFloatingHeight(state, height) {\n return {\n ...state,\n rects: {\n ...state.rects,\n floating: {\n ...state.rects.floating,\n height\n }\n }\n };\n}\n/**\n * Positions the floating element such that an inner element inside of it is\n * anchored to the reference element.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nconst inner = props => ({\n name: 'inner',\n options: props,\n async fn(state) {\n const {\n listRef,\n overflowRef,\n onFallbackChange,\n offset: innerOffset = 0,\n index = 0,\n minItemsVisible = 4,\n referenceOverflowThreshold = 0,\n scrollRef,\n ...detectOverflowOptions\n } = evaluate(props, state);\n const {\n rects,\n platform,\n elements: {\n floating\n }\n } = state;\n const item = listRef.current[index];\n const scrollEl = (scrollRef == null ? void 0 : scrollRef.current) || floating;\n\n // Valid combinations:\n // 1. Floating element is the scrollRef and has a border (default)\n // 2. Floating element is not the scrollRef, floating element has a border\n // 3. Floating element is not the scrollRef, scrollRef has a border\n // Floating > {...getFloatingProps()} wrapper > scrollRef > items is not\n // allowed as VoiceOver doesn't work.\n const clientTop = floating.clientTop || scrollEl.clientTop;\n const floatingIsBordered = floating.clientTop !== 0;\n const scrollElIsBordered = scrollEl.clientTop !== 0;\n const floatingIsScrollEl = floating === scrollEl;\n if (process.env.NODE_ENV !== \"production\") {\n if (!state.placement.startsWith('bottom')) {\n warn('`placement` side must be \"bottom\" when using the `inner`', 'middleware.');\n }\n }\n if (!item) {\n return {};\n }\n const nextArgs = {\n ...state,\n ...(await offset(-item.offsetTop - floating.clientTop - rects.reference.height / 2 - item.offsetHeight / 2 - innerOffset).fn(state))\n };\n const overflow = await platform.detectOverflow(getArgsWithCustomFloatingHeight(nextArgs, scrollEl.scrollHeight + clientTop + floating.clientTop), detectOverflowOptions);\n const refOverflow = await platform.detectOverflow(nextArgs, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const diffY = max(0, overflow.top);\n const nextY = nextArgs.y + diffY;\n const isScrollable = scrollEl.scrollHeight > scrollEl.clientHeight;\n const rounder = isScrollable ? v => v : round;\n const maxHeight = rounder(max(0, scrollEl.scrollHeight + (floatingIsBordered && floatingIsScrollEl || scrollElIsBordered ? clientTop * 2 : 0) - diffY - max(0, overflow.bottom)));\n scrollEl.style.maxHeight = maxHeight + \"px\";\n scrollEl.scrollTop = diffY;\n\n // There is not enough space, fallback to standard anchored positioning\n if (onFallbackChange) {\n const shouldFallback = scrollEl.offsetHeight < item.offsetHeight * min(minItemsVisible, listRef.current.length) - 1 || refOverflow.top >= -referenceOverflowThreshold || refOverflow.bottom >= -referenceOverflowThreshold;\n ReactDOM.flushSync(() => onFallbackChange(shouldFallback));\n }\n if (overflowRef) {\n overflowRef.current = await platform.detectOverflow(getArgsWithCustomFloatingHeight({\n ...nextArgs,\n y: nextY\n }, scrollEl.offsetHeight + clientTop + floating.clientTop), detectOverflowOptions);\n }\n return {\n y: nextY\n };\n }\n});\n/**\n * Changes the `inner` middleware's `offset` upon a `wheel` event to\n * expand the floating element's height, revealing more list items.\n * @see https://floating-ui.com/docs/inner\n * @deprecated\n */\nfunction useInnerOffset(context, props) {\n const {\n open,\n elements\n } = context;\n const {\n enabled = true,\n overflowRef,\n scrollRef,\n onChange: unstable_onChange\n } = props;\n const onChange = useEffectEvent(unstable_onChange);\n const controlledScrollingRef = React.useRef(false);\n const prevScrollTopRef = React.useRef(null);\n const initialOverflowRef = React.useRef(null);\n React.useEffect(() => {\n if (!enabled) return;\n function onWheel(e) {\n if (e.ctrlKey || !el || overflowRef.current == null) {\n return;\n }\n const dY = e.deltaY;\n const isAtTop = overflowRef.current.top >= -0.5;\n const isAtBottom = overflowRef.current.bottom >= -0.5;\n const remainingScroll = el.scrollHeight - el.clientHeight;\n const sign = dY < 0 ? -1 : 1;\n const method = dY < 0 ? 'max' : 'min';\n if (el.scrollHeight <= el.clientHeight) {\n return;\n }\n if (!isAtTop && dY > 0 || !isAtBottom && dY < 0) {\n e.preventDefault();\n ReactDOM.flushSync(() => {\n onChange(d => d + Math[method](dY, remainingScroll * sign));\n });\n } else if (/firefox/i.test(getUserAgent())) {\n // Needed to propagate scrolling during momentum scrolling phase once\n // it gets limited by the boundary. UX improvement, not critical.\n el.scrollTop += dY;\n }\n }\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (open && el) {\n el.addEventListener('wheel', onWheel);\n\n // Wait for the position to be ready.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n if (overflowRef.current != null) {\n initialOverflowRef.current = {\n ...overflowRef.current\n };\n }\n });\n return () => {\n prevScrollTopRef.current = null;\n initialOverflowRef.current = null;\n el.removeEventListener('wheel', onWheel);\n };\n }\n }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);\n const floating = React.useMemo(() => ({\n onKeyDown() {\n controlledScrollingRef.current = true;\n },\n onWheel() {\n controlledScrollingRef.current = false;\n },\n onPointerMove() {\n controlledScrollingRef.current = false;\n },\n onScroll() {\n const el = (scrollRef == null ? void 0 : scrollRef.current) || elements.floating;\n if (!overflowRef.current || !el || !controlledScrollingRef.current) {\n return;\n }\n if (prevScrollTopRef.current !== null) {\n const scrollDiff = el.scrollTop - prevScrollTopRef.current;\n if (overflowRef.current.bottom < -0.5 && scrollDiff < -1 || overflowRef.current.top < -0.5 && scrollDiff > 1) {\n ReactDOM.flushSync(() => onChange(d => d + scrollDiff));\n }\n }\n\n // [Firefox] Wait for the height change to have been applied.\n requestAnimationFrame(() => {\n prevScrollTopRef.current = el.scrollTop;\n });\n }\n }), [elements.floating, onChange, overflowRef, scrollRef]);\n return React.useMemo(() => enabled ? {\n floating\n } : {}, [enabled, floating]);\n}\n\nfunction getNodeChildren(nodes, id, onlyOpenChildren) {\n if (onlyOpenChildren === void 0) {\n onlyOpenChildren = true;\n }\n const directChildren = nodes.filter(node => {\n var _node$context;\n return node.parentId === id && (!onlyOpenChildren || ((_node$context = node.context) == null ? void 0 : _node$context.open));\n });\n return directChildren.flatMap(child => [child, ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);\n}\n\nfunction isPointInPolygon(point, polygon) {\n const [x, y] = point;\n let isInside = false;\n const length = polygon.length;\n for (let i = 0, j = length - 1; i < length; j = i++) {\n const [xi, yi] = polygon[i] || [0, 0];\n const [xj, yj] = polygon[j] || [0, 0];\n const intersect = yi >= y !== yj >= y && x <= (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) {\n isInside = !isInside;\n }\n }\n return isInside;\n}\nfunction isInside(point, rect) {\n return point[0] >= rect.x && point[0] <= rect.x + rect.width && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n}\n/**\n * Generates a safe polygon area that the user can traverse without closing the\n * floating element once leaving the reference element.\n * @see https://floating-ui.com/docs/useHover#safepolygon\n */\nfunction safePolygon(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n buffer = 0.5,\n blockPointerEvents = false,\n requireIntent = true\n } = options;\n const timeoutRef = {\n current: -1\n };\n let hasLanded = false;\n let lastX = null;\n let lastY = null;\n let lastCursorTime = typeof performance !== 'undefined' ? performance.now() : 0;\n function getCursorSpeed(x, y) {\n const currentTime = performance.now();\n const elapsedTime = currentTime - lastCursorTime;\n if (lastX === null || lastY === null || elapsedTime === 0) {\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return null;\n }\n const deltaX = x - lastX;\n const deltaY = y - lastY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const speed = distance / elapsedTime; // px / ms\n\n lastX = x;\n lastY = y;\n lastCursorTime = currentTime;\n return speed;\n }\n const fn = _ref => {\n let {\n x,\n y,\n placement,\n elements,\n onClose,\n nodeId,\n tree\n } = _ref;\n return function onMouseMove(event) {\n function close() {\n clearTimeoutIfSet(timeoutRef);\n onClose();\n }\n clearTimeoutIfSet(timeoutRef);\n if (!elements.domReference || !elements.floating || placement == null || x == null || y == null) {\n return;\n }\n const {\n clientX,\n clientY\n } = event;\n const clientPoint = [clientX, clientY];\n const target = getTarget(event);\n const isLeave = event.type === 'mouseleave';\n const isOverFloatingEl = contains(elements.floating, target);\n const isOverReferenceEl = contains(elements.domReference, target);\n const refRect = elements.domReference.getBoundingClientRect();\n const rect = elements.floating.getBoundingClientRect();\n const side = placement.split('-')[0];\n const cursorLeaveFromRight = x > rect.right - rect.width / 2;\n const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;\n const isOverReferenceRect = isInside(clientPoint, refRect);\n const isFloatingWider = rect.width > refRect.width;\n const isFloatingTaller = rect.height > refRect.height;\n const left = (isFloatingWider ? refRect : rect).left;\n const right = (isFloatingWider ? refRect : rect).right;\n const top = (isFloatingTaller ? refRect : rect).top;\n const bottom = (isFloatingTaller ? refRect : rect).bottom;\n if (isOverFloatingEl) {\n hasLanded = true;\n if (!isLeave) {\n return;\n }\n }\n if (isOverReferenceEl) {\n hasLanded = false;\n }\n if (isOverReferenceEl && !isLeave) {\n hasLanded = true;\n return;\n }\n\n // Prevent overlapping floating element from being stuck in an open-close\n // loop: https://github.com/floating-ui/floating-ui/issues/1910\n if (isLeave && isElement(event.relatedTarget) && contains(elements.floating, event.relatedTarget)) {\n return;\n }\n\n // If any nested child is open, abort.\n if (tree && getNodeChildren(tree.nodesRef.current, nodeId).length) {\n return;\n }\n\n // If the pointer is leaving from the opposite side, the \"buffer\" logic\n // creates a point where the floating element remains open, but should be\n // ignored.\n // A constant of 1 handles floating point rounding errors.\n if (side === 'top' && y >= refRect.bottom - 1 || side === 'bottom' && y <= refRect.top + 1 || side === 'left' && x >= refRect.right - 1 || side === 'right' && x <= refRect.left + 1) {\n return close();\n }\n\n // Ignore when the cursor is within the rectangular trough between the\n // two elements. Since the triangle is created from the cursor point,\n // which can start beyond the ref element's edge, traversing back and\n // forth from the ref to the floating element can cause it to close. This\n // ensures it always remains open in that case.\n let rectPoly = [];\n switch (side) {\n case 'top':\n rectPoly = [[left, refRect.top + 1], [left, rect.bottom - 1], [right, rect.bottom - 1], [right, refRect.top + 1]];\n break;\n case 'bottom':\n rectPoly = [[left, rect.top + 1], [left, refRect.bottom - 1], [right, refRect.bottom - 1], [right, rect.top + 1]];\n break;\n case 'left':\n rectPoly = [[rect.right - 1, bottom], [rect.right - 1, top], [refRect.left + 1, top], [refRect.left + 1, bottom]];\n break;\n case 'right':\n rectPoly = [[refRect.right - 1, bottom], [refRect.right - 1, top], [rect.left + 1, top], [rect.left + 1, bottom]];\n break;\n }\n function getPolygon(_ref2) {\n let [x, y] = _ref2;\n switch (side) {\n case 'top':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y + buffer + 1];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.bottom - buffer : isFloatingWider ? rect.bottom - buffer : rect.top], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.bottom - buffer : rect.top : rect.bottom - buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'bottom':\n {\n const cursorPointOne = [isFloatingWider ? x + buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const cursorPointTwo = [isFloatingWider ? x - buffer / 2 : cursorLeaveFromRight ? x + buffer * 4 : x - buffer * 4, y - buffer];\n const commonPoints = [[rect.left, cursorLeaveFromRight ? rect.top + buffer : isFloatingWider ? rect.top + buffer : rect.bottom], [rect.right, cursorLeaveFromRight ? isFloatingWider ? rect.top + buffer : rect.bottom : rect.top + buffer]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n case 'left':\n {\n const cursorPointOne = [x + buffer + 1, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x + buffer + 1, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.right - buffer : isFloatingTaller ? rect.right - buffer : rect.left, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.right - buffer : rect.left : rect.right - buffer, rect.bottom]];\n return [...commonPoints, cursorPointOne, cursorPointTwo];\n }\n case 'right':\n {\n const cursorPointOne = [x - buffer, isFloatingTaller ? y + buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const cursorPointTwo = [x - buffer, isFloatingTaller ? y - buffer / 2 : cursorLeaveFromBottom ? y + buffer * 4 : y - buffer * 4];\n const commonPoints = [[cursorLeaveFromBottom ? rect.left + buffer : isFloatingTaller ? rect.left + buffer : rect.right, rect.top], [cursorLeaveFromBottom ? isFloatingTaller ? rect.left + buffer : rect.right : rect.left + buffer, rect.bottom]];\n return [cursorPointOne, cursorPointTwo, ...commonPoints];\n }\n }\n }\n if (isPointInPolygon([clientX, clientY], rectPoly)) {\n return;\n }\n if (hasLanded && !isOverReferenceRect) {\n return close();\n }\n if (!isLeave && requireIntent) {\n const cursorSpeed = getCursorSpeed(event.clientX, event.clientY);\n const cursorSpeedThreshold = 0.1;\n if (cursorSpeed !== null && cursorSpeed < cursorSpeedThreshold) {\n return close();\n }\n }\n if (!isPointInPolygon([clientX, clientY], getPolygon([x, y]))) {\n close();\n } else if (!hasLanded && requireIntent) {\n timeoutRef.current = window.setTimeout(close, 40);\n }\n };\n };\n fn.__options = {\n blockPointerEvents\n };\n return fn;\n}\n\nexport { Composite, CompositeItem, FloatingArrow, FloatingDelayGroup, FloatingFocusManager, FloatingList, FloatingNode, FloatingOverlay, FloatingPortal, FloatingTree, NextFloatingDelayGroup, inner, safePolygon, useClick, useClientPoint, useDelayGroup, useDelayGroupContext, useDismiss, useFloating, useFloatingNodeId, useFloatingParentNodeId, useFloatingPortalNode, useFloatingRootContext, useFloatingTree, useFocus, useHover, useId, useInnerOffset, useInteractions, useListItem, useListNavigation, useMergeRefs, useNextDelayGroup, useRole, useTransitionStatus, useTransitionStyles, useTypeahead };\n","import \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { FloatingDelayGroup } from \"@floating-ui/react\";\n//#region src/components/Tooltip/TooltipProvider.tsx\nvar hoverDelay = {\n\topen: 300,\n\tclose: 0\n};\n/**\n* Enables tooltips to share a global \"warm-up\" period for their hover delay.\n* You must wrap your application in this component for tooltips to function.\n*/\nvar TooltipProvider = ({ children }) => /* @__PURE__ */ jsx(FloatingDelayGroup, {\n\tdelay: hoverDelay,\n\ttimeoutMs: 300,\n\tchildren\n});\nTooltipProvider.displayName = \"TooltipProvider\";\n//#endregion\nexport { TooltipProvider, hoverDelay };\n\n//# sourceMappingURL=TooltipProvider.js.map","import { hoverDelay } from \"./TooltipProvider.js\";\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { arrow, autoUpdate, flip, hide, offset, shift, useDelayGroup, useDismiss, useFloating, useFocus, useHover, useInteractions, useRole } from \"@floating-ui/react\";\n//#region src/components/Tooltip/useTooltip.ts\nfunction useTooltip({ open: controlledOpen, disabled = false, onOpenChange, placement = \"bottom\", isTriggerInteractive, caption, \"aria-atomic\": ariaAtomic, \"aria-live\": ariaLive, boundary, ...props }) {\n\tconst labelId = useId();\n\tconst captionId = useId();\n\tconst arrowRef = useRef(null);\n\tconst [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n\tconst open = disabled ? false : controlledOpen ?? uncontrolledOpen;\n\tconst setOpen = (open, event, reason) => {\n\t\tonOpenChange?.(open, event, reason);\n\t\tif (controlledOpen === void 0) setUncontrolledOpen(open);\n\t};\n\tconst data = useFloating({\n\t\tplacement,\n\t\topen,\n\t\tonOpenChange: setOpen,\n\t\twhileElementsMounted: autoUpdate,\n\t\tmiddleware: [\n\t\t\toffset(6),\n\t\t\tflip({\n\t\t\t\tcrossAxis: placement.includes(\"-\"),\n\t\t\t\tfallbackAxisSideDirection: \"start\",\n\t\t\t\tpadding: 5,\n\t\t\t\tboundary\n\t\t\t}),\n\t\t\tshift({ padding: 5 }),\n\t\t\thide({\n\t\t\t\tstrategy: \"escaped\",\n\t\t\t\tboundary,\n\t\t\t\tpadding: 6\n\t\t\t}),\n\t\t\tarrow({ element: arrowRef })\n\t\t]\n\t});\n\tconst context = data.context;\n\tconst { delay, initialDelay } = useDelayGroup(context);\n\tif (initialDelay !== hoverDelay) throw new Error(\"Tooltips must be wrapped in a global <TooltipProvider>\");\n\tconst hover = useHover(context, {\n\t\tmove: false,\n\t\tenabled: controlledOpen === void 0,\n\t\tdelay: isTriggerInteractive ? delay : {},\n\t\tmouseOnly: true\n\t});\n\tconst focus = useFocus(context, { enabled: controlledOpen === void 0 });\n\tconst pressTimer = useRef(void 0);\n\tuseEffect(() => () => window.clearTimeout(pressTimer.current), []);\n\tconst press = useMemo(() => {\n\t\tconst onTouchEnd = () => {\n\t\t\tif (pressTimer.current === void 0) pressTimer.current = window.setTimeout(() => {\n\t\t\t\tsetOpen(false);\n\t\t\t\tpressTimer.current = void 0;\n\t\t\t}, 1500);\n\t\t\telse window.clearTimeout(pressTimer.current);\n\t\t};\n\t\treturn { reference: {\n\t\t\tonTouchStart: () => {\n\t\t\t\tif (pressTimer.current !== void 0) window.clearTimeout(pressTimer.current);\n\t\t\t\tpressTimer.current = window.setTimeout(() => {\n\t\t\t\t\tsetOpen(true);\n\t\t\t\t\tpressTimer.current = void 0;\n\t\t\t\t}, 500);\n\t\t\t},\n\t\t\tonTouchEnd,\n\t\t\tonTouchCancel: onTouchEnd\n\t\t} };\n\t}, []);\n\tconst dismiss = useDismiss(context);\n\tconst purpose = \"label\" in props ? \"label\" : \"description\";\n\tconst role = useRole(context, {\n\t\tenabled: purpose === \"description\",\n\t\trole: \"tooltip\"\n\t});\n\tconst interactions = useInteractions([\n\t\thover,\n\t\tfocus,\n\t\tpress,\n\t\tdismiss,\n\t\trole,\n\t\tuseMemo(() => purpose === \"label\" ? { reference: {\n\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\"aria-describedby\": caption ? captionId : void 0\n\t\t} } : {}, [\n\t\t\tpurpose,\n\t\t\tlabelId,\n\t\t\tcaptionId\n\t\t])\n\t]);\n\treturn useMemo(() => ({\n\t\tlabelId,\n\t\tcaptionId: caption ? captionId : void 0,\n\t\tcaption,\n\t\tpurpose,\n\t\topen,\n\t\tsetOpen,\n\t\ttooltipProps: {\n\t\t\t\"aria-atomic\": ariaAtomic,\n\t\t\t\"aria-live\": ariaLive\n\t\t},\n\t\t...interactions,\n\t\t...data,\n\t\tarrowRef\n\t}), [\n\t\tlabelId,\n\t\tcaptionId,\n\t\tcaption,\n\t\trole,\n\t\topen,\n\t\tsetOpen,\n\t\tinteractions,\n\t\tdata,\n\t\tarrowRef\n\t]);\n}\n//#endregion\nexport { useTooltip };\n\n//# sourceMappingURL=useTooltip.js.map","import { createContext, useContext } from \"react\";\n//#region src/components/Tooltip/TooltipContext.ts\n/**\n* The context for the Tooltip components.\n*/\nvar TooltipContext = createContext(null);\n/**\n* Provides the context for the Tooltip components.\n*/\nfunction useTooltipContext() {\n\tconst context = useContext(TooltipContext);\n\tif (context == null) throw new Error(\"Tooltip components must be wrapped in <Tooltip />\");\n\treturn context;\n}\n//#endregion\nexport { TooltipContext, useTooltipContext };\n\n//# sourceMappingURL=TooltipContext.js.map","var Tooltip_module_default = {\n\ttooltip: \"_tooltip_1nqnq_8\",\n\tinvisible: \"_invisible_1nqnq_21\",\n\tcaption: \"_caption_1nqnq_28\",\n\tarrow: \"_arrow_1nqnq_33\"\n};\n//#endregion\nexport { Tooltip_module_default as default };\n\n//# sourceMappingURL=Tooltip.module.js.map","import { useTooltip } from \"./useTooltip.js\";\nimport { TooltipContext, useTooltipContext } from \"./TooltipContext.js\";\nimport Tooltip_module_default from \"./Tooltip.module.js\";\nimport classNames from \"classnames\";\nimport { cloneElement, isValidElement, useMemo } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { FloatingArrow, FloatingPortal, useMergeRefs } from \"@floating-ui/react\";\n//#region src/components/Tooltip/Tooltip.tsx\nvar hasLabel = (props) => \"label\" in props && !!props.label;\n/**\n* A tooltip component\n*/\nfunction Tooltip({ children, isTriggerInteractive = true, nonInteractiveTriggerTabIndex = 0, ...props }) {\n\tconst context = useTooltip({\n\t\tisTriggerInteractive,\n\t\t...props\n\t});\n\treturn /* @__PURE__ */ jsxs(TooltipContext.Provider, {\n\t\tvalue: context,\n\t\tchildren: [/* @__PURE__ */ jsx(TooltipAnchor, {\n\t\t\tisTriggerInteractive,\n\t\t\tnonInteractiveTriggerTabIndex,\n\t\t\tchildren\n\t\t}), /* @__PURE__ */ jsxs(TooltipContent, { children: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\tid: context.labelId,\n\t\t\tchildren: hasLabel(props) ? props.label : props.description\n\t\t}), /* @__PURE__ */ jsx(Caption, {})] })]\n\t});\n}\nfunction Caption() {\n\tconst { caption, captionId } = useTooltipContext();\n\tif (!caption) return null;\n\t/**\n\t* Forcing dark theme, so that we have the correct contrast when\n\t* using the text color secondary on a solid dark background.\n\t* This is temporary and should only remain until we figure out\n\t* the approach to on-solid tokens\n\t**/\n\treturn /* @__PURE__ */ jsx(typeof caption === \"string\" ? \"span\" : \"div\", {\n\t\tid: captionId,\n\t\tclassName: classNames(Tooltip_module_default.caption, \"cpd-theme-dark\"),\n\t\tchildren: caption\n\t});\n}\n/**\n* The content of the tooltip\n* @param children\n*/\nfunction TooltipContent({ children }) {\n\tconst { context: floatingContext, open, arrowRef, purpose, ...rest } = useTooltipContext();\n\tif (!open && purpose !== \"label\") return null;\n\tconst escaped = floatingContext.middlewareData?.hide?.escaped ?? false;\n\treturn /* @__PURE__ */ jsx(FloatingPortal, { children: /* @__PURE__ */ jsxs(\"div\", {\n\t\tref: rest.refs.setFloating,\n\t\tstyle: rest.floatingStyles,\n\t\t...rest.tooltipProps,\n\t\t...rest.getFloatingProps(),\n\t\tclassName: classNames(Tooltip_module_default.tooltip, { [Tooltip_module_default.invisible]: purpose === \"label\" && !open || escaped }),\n\t\tchildren: [/* @__PURE__ */ jsx(FloatingArrow, {\n\t\t\tref: arrowRef,\n\t\t\tcontext: floatingContext,\n\t\t\twidth: 10,\n\t\t\theight: 6,\n\t\t\tclassName: Tooltip_module_default.arrow\n\t\t}), children]\n\t}) });\n}\n/**\n* The anchor of the tooltip\n* @param children\n*/\nvar TooltipAnchor = ({ children, isTriggerInteractive, nonInteractiveTriggerTabIndex }) => {\n\tconst context = useTooltipContext();\n\tconst childrenRef = children?.ref;\n\tconst ref = useMergeRefs([context.refs.setReference, childrenRef]);\n\tconst element = useMemo(() => {\n\t\tif (!isValidElement(children)) return;\n\t\tif (isTriggerInteractive) return cloneElement(children, context.getReferenceProps({\n\t\t\t...typeof children.props === \"object\" ? children.props : {},\n\t\t\tref\n\t\t}));\n\t\telse {\n\t\t\tconst { \"aria-labelledby\": labelId, \"aria-describedby\": descriptionId, ...spanProps } = context.getReferenceProps({\n\t\t\t\tref,\n\t\t\t\ttabIndex: nonInteractiveTriggerTabIndex\n\t\t\t});\n\t\t\treturn /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\ttabIndex: nonInteractiveTriggerTabIndex,\n\t\t\t\t...spanProps,\n\t\t\t\tchildren: cloneElement(children, {\n\t\t\t\t\t\"aria-labelledby\": labelId,\n\t\t\t\t\t\"aria-describedby\": descriptionId\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}, [\n\t\tcontext,\n\t\tref,\n\t\tchildren\n\t]);\n\tif (!element) throw new Error(\"Tooltip anchor must be a single valid React element\");\n\treturn element;\n};\n//#endregion\nexport { Tooltip };\n\n//# sourceMappingURL=Tooltip.js.map","var IconButton_module_default = {\n\t\"icon-button\": \"_icon-button_1215g_8\",\n\t\"no-background\": \"_no-background_1215g_42\",\n\tdestructive: \"_destructive_1215g_95\"\n};\n//#endregion\nexport { IconButton_module_default as default };\n\n//# sourceMappingURL=IconButton.module.js.map","import { UnstyledButton } from \"../UnstyledButton.js\";\nimport IconButton_module_default from \"./IconButton.module.js\";\nimport { IndicatorIcon } from \"../../Icon/IndicatorIcon/IndicatorIcon.js\";\nimport { Tooltip } from \"../../Tooltip/Tooltip.js\";\nimport classNames from \"classnames\";\nimport React, { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Button/IconButton/IconButton.tsx\n/**\n* Display an icon as a button. Can render an indicator\n*/\nvar IconButton = forwardRef(function IconButton({ kind = \"primary\", children, className, indicator, size = \"32px\", style, disabled, destructive, tooltip, tooltipPlacement, noBackground = false, ...props }, ref) {\n\tconst button = /* @__PURE__ */ jsx(UnstyledButton, {\n\t\tas: \"button\",\n\t\tref,\n\t\tclassName: classNames(IconButton_module_default[\"icon-button\"], className, {\n\t\t\t[IconButton_module_default.destructive]: destructive,\n\t\t\t[IconButton_module_default[\"no-background\"]]: noBackground\n\t\t}),\n\t\tstyle: {\n\t\t\t\"--cpd-icon-button-size\": size,\n\t\t\t...style\n\t\t},\n\t\tdisabled,\n\t\t...props,\n\t\t\"data-indicator\": indicator,\n\t\t\"data-kind\": kind,\n\t\tchildren: /* @__PURE__ */ jsx(IndicatorIcon, {\n\t\t\tindicator,\n\t\t\tcolour: disabled ? \"var(--cpd-color-icon-disabled)\" : void 0,\n\t\t\tchildren: React.Children.only(children)\n\t\t})\n\t});\n\treturn tooltip ? /* @__PURE__ */ jsx(Tooltip, {\n\t\tlabel: tooltip,\n\t\tplacement: tooltipPlacement,\n\t\tchildren: button\n\t}) : button;\n});\n//#endregion\nexport { IconButton };\n\n//# sourceMappingURL=IconButton.js.map","var Alert_module_default = {\n\talert: \"_alert_zx76t_10\",\n\tcontent: \"_content_zx76t_37\",\n\t\"text-content\": \"_text-content_zx76t_44\",\n\ttitle: \"_title_zx76t_48\",\n\ticon: \"_icon_zx76t_48\",\n\tactions: \"_actions_zx76t_64\"\n};\n//#endregion\nexport { Alert_module_default as default };\n\n//# sourceMappingURL=Alert.module.js.map","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction CheckCircleIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"m10.6 13.8-2.15-2.15a.95.95 0 0 0-.7-.275.95.95 0 0 0-.7.275.95.95 0 0 0-.275.7q0 .425.275.7L9.9 15.9q.3.3.7.3t.7-.3l5.65-5.65a.95.95 0 0 0 .275-.7.95.95 0 0 0-.275-.7.95.95 0 0 0-.7-.275.95.95 0 0 0-.7.275zM12 22a9.7 9.7 0 0 1-3.9-.788 10.1 10.1 0 0 1-3.175-2.137q-1.35-1.35-2.137-3.175A9.7 9.7 0 0 1 2 12q0-2.075.788-3.9a10.1 10.1 0 0 1 2.137-3.175q1.35-1.35 3.175-2.137A9.7 9.7 0 0 1 12 2q2.075 0 3.9.788a10.1 10.1 0 0 1 3.175 2.137q1.35 1.35 2.137 3.175A9.7 9.7 0 0 1 22 12a9.7 9.7 0 0 1-.788 3.9 10.1 10.1 0 0 1-2.137 3.175q-1.35 1.35-3.175 2.137A9.7 9.7 0 0 1 12 22m0-2q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4 6.325 6.325 4 12t2.325 5.675T12 20\"\n })\n });\n}\n;\nCheckCircleIcon.displayName = \"CheckCircleIcon\";\nexport default forwardRef(CheckCircleIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ErrorSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 17q.424 0 .713-.288A.97.97 0 0 0 13 16a.97.97 0 0 0-.287-.713A.97.97 0 0 0 12 15a.97.97 0 0 0-.713.287A.97.97 0 0 0 11 16q0 .424.287.712.288.288.713.288m0-4q.424 0 .713-.287A.97.97 0 0 0 13 12V8a.97.97 0 0 0-.287-.713A.97.97 0 0 0 12 7a.97.97 0 0 0-.713.287A.97.97 0 0 0 11 8v4q0 .424.287.713.288.287.713.287m0 9a9.7 9.7 0 0 1-3.9-.788 10.1 10.1 0 0 1-3.175-2.137q-1.35-1.35-2.137-3.175A9.7 9.7 0 0 1 2 12q0-2.075.788-3.9a10.1 10.1 0 0 1 2.137-3.175q1.35-1.35 3.175-2.137A9.7 9.7 0 0 1 12 2q2.075 0 3.9.788a10.1 10.1 0 0 1 3.175 2.137q1.35 1.35 2.137 3.175A9.7 9.7 0 0 1 22 12a9.7 9.7 0 0 1-.788 3.9 10.1 10.1 0 0 1-2.137 3.175q-1.35 1.35-3.175 2.137A9.7 9.7 0 0 1 12 22\"\n })\n });\n}\n;\nErrorSolidIcon.displayName = \"ErrorSolidIcon\";\nexport default forwardRef(ErrorSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction InfoIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M11.288 7.288A.97.97 0 0 1 12 7q.424 0 .713.287Q13 7.576 13 8t-.287.713A.97.97 0 0 1 12 9a.97.97 0 0 1-.713-.287A.97.97 0 0 1 11 8q0-.424.287-.713m.001 4.001A.97.97 0 0 1 12 11q.424 0 .713.287.287.288.287.713v4q0 .424-.287.712A.97.97 0 0 1 12 17a.97.97 0 0 1-.713-.288A.97.97 0 0 1 11 16v-4q0-.424.287-.713\"\n }), /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10m-2 0a8 8 0 1 1-16 0 8 8 0 0 1 16 0\",\n clipRule: \"evenodd\"\n })]\n });\n}\n;\nInfoIcon.displayName = \"InfoIcon\";\nexport default forwardRef(InfoIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction CloseIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M6.293 6.293a1 1 0 0 1 1.414 0L12 10.586l4.293-4.293a1 1 0 1 1 1.414 1.414L13.414 12l4.293 4.293a1 1 0 0 1-1.414 1.414L12 13.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L10.586 12 6.293 7.707a1 1 0 0 1 0-1.414\"\n })\n });\n}\n;\nCloseIcon.displayName = \"CloseIcon\";\nexport default forwardRef(CloseIcon);","import Alert_module_default from \"./Alert.module.js\";\nimport { Text } from \"../Typography/Text.js\";\nimport { IconButton } from \"../Button/IconButton/IconButton.js\";\nimport classNames from \"classnames\";\nimport { useCallback } from \"react\";\nimport CheckCircleIcon from \"@vector-im/compound-design-tokens/assets/web/icons/check-circle\";\nimport ErrorIcon from \"@vector-im/compound-design-tokens/assets/web/icons/error-solid\";\nimport InfoIcon from \"@vector-im/compound-design-tokens/assets/web/icons/info\";\nimport CloseIcon from \"@vector-im/compound-design-tokens/assets/web/icons/close\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\n//#region src/components/Alert/Alert.tsx\n/**\n* An alert component component that is dismissable when passing an `onClose`\n* property.\n*/\nvar Alert = ({ type, title, children, className, actions, onClose, ...props }) => {\n\tconst classes = classNames(Alert_module_default.alert, className);\n\tconst renderIcon = useCallback((props) => {\n\t\tswitch (type) {\n\t\t\tcase \"critical\": return /* @__PURE__ */ jsx(ErrorIcon, { ...props });\n\t\t\tcase \"info\": return /* @__PURE__ */ jsx(InfoIcon, { ...props });\n\t\t\tcase \"success\": return /* @__PURE__ */ jsx(CheckCircleIcon, { ...props });\n\t\t}\n\t}, [type]);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t...props,\n\t\tclassName: classes,\n\t\t\"data-type\": type,\n\t\tchildren: [\n\t\t\trenderIcon({\n\t\t\t\twidth: 24,\n\t\t\t\theight: 24,\n\t\t\t\tclassName: Alert_module_default.icon,\n\t\t\t\t\"aria-hidden\": true\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: Alert_module_default.content,\n\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: Alert_module_default[\"text-content\"],\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Text, {\n\t\t\t\t\t\tsize: \"md\",\n\t\t\t\t\t\tweight: \"semibold\",\n\t\t\t\t\t\tchildren: title\n\t\t\t\t\t}), /* @__PURE__ */ jsx(Text, {\n\t\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\t\tweight: \"regular\",\n\t\t\t\t\t\tchildren\n\t\t\t\t\t})]\n\t\t\t\t}), actions && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: Alert_module_default.actions,\n\t\t\t\t\tchildren: actions\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tonClose && /* @__PURE__ */ jsx(IconButton, {\n\t\t\t\tonClick: onClose,\n\t\t\t\t\"aria-label\": \"Close\",\n\t\t\t\trole: \"button\",\n\t\t\t\tclassName: Alert_module_default.close,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(CloseIcon, {})\n\t\t\t})\n\t\t]\n\t});\n};\n//#endregion\nexport { Alert };\n\n//# sourceMappingURL=Alert.js.map","var graphemeSegmenter = new Intl.Segmenter();\n/**\n* returns the first (non-sigil) character of 'name',\n* converted to uppercase\n* @param {string} name\n* @return {string} the first letter\n*/\nfunction getInitialLetter(name) {\n\tif (name.length < 1) return \"\";\n\tconst initial = name[0];\n\tif ([\n\t\t\"@\",\n\t\t\"#\",\n\t\t\"+\"\n\t].includes(initial)) name = name.substring(1);\n\tconst result = graphemeSegmenter.segment(name)[Symbol.iterator]().next();\n\treturn result.done ? \"\" : result.value.segment;\n}\n//#endregion\nexport { getInitialLetter };\n\n//# sourceMappingURL=string.js.map","//#region src/components/Avatar/useIdColorHash.ts\n/**\n* Determines a number for a given Matrix ID or room ID, helps disambiguating users\n* who are trying to impersonate someone else.\n* @param id - a Matrix ID or room ID\n* @returns a hash of the ID provided\n*/\nfunction useIdColorHash(id) {\n\treturn id.split(\"\").reduce((sum, char) => {\n\t\treturn sum + char.charCodeAt(0);\n\t}, 0) % 6 + 1;\n}\n//#endregion\nexport { useIdColorHash };\n\n//# sourceMappingURL=useIdColorHash.js.map","var Avatar_module_default = {\n\tavatar: \"_avatar_va14e_8\",\n\timage: \"_image_va14e_43\",\n\t\"avatar-imageless\": \"_avatar-imageless_va14e_55\",\n\t\"stacked-avatars\": \"_stacked-avatars_va14e_109\",\n\t\"clip-path\": \"_clip-path_va14e_128\"\n};\n//#endregion\nexport { Avatar_module_default as default };\n\n//# sourceMappingURL=Avatar.module.js.map","import { getInitialLetter } from \"../../utils/string.js\";\nimport Avatar_module_default from \"./Avatar.module.js\";\nimport { useIdColorHash } from \"./useIdColorHash.js\";\nimport classNames from \"classnames\";\nimport React, { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Avatar/Avatar.tsx\n/**\n* Some props warrant that the avatar become a button for accessibility purposes\n* @param props Avatar props\n* @returns whether the avatar should be a button or not\n*/\nfunction shouldBeAButton(props) {\n\treturn !!(props.onClick || props.onKeyDown || props.onKeyUp);\n}\n/**\n* Avatar component that will fallback to an initial letter over a coloured\n* background if no source is provided or if the source has failed to load.\n*/\nvar Avatar = forwardRef(function Avatar({ src, id, name = \"\", type = \"round\", className = \"\", size, style = {}, onError, ...props }, ref) {\n\treturn React.createElement(shouldBeAButton(props) ? \"button\" : \"span\", {\n\t\tref,\n\t\trole: \"img\",\n\t\t\"aria-label\": id,\n\t\t...props,\n\t\t\"data-type\": type,\n\t\t\"data-color\": useIdColorHash(id),\n\t\tclassName: classNames(Avatar_module_default.avatar, className, { [Avatar_module_default[\"avatar-imageless\"]]: !src }),\n\t\tstyle: {\n\t\t\t...style,\n\t\t\t\"--cpd-avatar-size\": size\n\t\t}\n\t}, /* @__PURE__ */ jsx(React.Fragment, { children: !src ? getInitialLetter(name) : /* @__PURE__ */ jsx(\"img\", {\n\t\tloading: \"lazy\",\n\t\talt: \"\",\n\t\tsrc,\n\t\treferrerPolicy: \"no-referrer\",\n\t\tclassName: classNames(Avatar_module_default.image),\n\t\t\"data-type\": type,\n\t\tstyle,\n\t\twidth: size,\n\t\theight: size,\n\t\tonError\n\t}) }));\n});\n//#endregion\nexport { Avatar };\n\n//# sourceMappingURL=Avatar.js.map","var Switch_module_default = { toggle: \"_toggle_13rnk_9\" };\n//#endregion\nexport { Switch_module_default as default };\n\n//# sourceMappingURL=Switch.module.js.map","import { Tooltip } from \"../Tooltip/Tooltip.js\";\nimport Switch_module_default from \"./Switch.module.js\";\nimport classNames from \"classnames\";\nimport { useCallback } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\n//#region src/components/Switch/Switch.tsx\nvar Switch = ({ name, leftIcon: LeftIcon, leftLabel, leftValue, rightIcon: RightIcon, rightLabel, rightValue, value, className, onChange, size = \"lg\", ...fieldSetProps }) => {\n\tconst onInputChange = useCallback((e) => onChange(e.target.value), [onChange]);\n\treturn /* @__PURE__ */ jsxs(\"fieldset\", {\n\t\t\"data-size\": size,\n\t\tclassName: classNames(Switch_module_default.toggle, className),\n\t\t...fieldSetProps,\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(Tooltip, {\n\t\t\t\tlabel: leftLabel,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"input\", {\n\t\t\t\t\ttype: \"radio\",\n\t\t\t\t\tname,\n\t\t\t\t\tvalue: leftValue,\n\t\t\t\t\tchecked: value === leftValue,\n\t\t\t\t\tonChange: onInputChange\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(LeftIcon, { \"aria-hidden\": true }),\n\t\t\t/* @__PURE__ */ jsx(Tooltip, {\n\t\t\t\tlabel: rightLabel,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"input\", {\n\t\t\t\t\ttype: \"radio\",\n\t\t\t\t\tname,\n\t\t\t\t\tvalue: rightValue,\n\t\t\t\t\tchecked: value === rightValue,\n\t\t\t\t\tonChange: onInputChange\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(RightIcon, { \"aria-hidden\": true })\n\t\t]\n\t});\n};\n//#endregion\nexport { Switch };\n\n//# sourceMappingURL=Switch.js.map","//#region src/components/Menu/MenuTitle.module.css\nvar MenuTitle_module_default = { \"menu-title\": \"_menu-title_1sgvx_8\" };\n//#endregion\nexport { MenuTitle_module_default as default };\n\n//# sourceMappingURL=MenuTitle.module.js.map","import { Text } from \"../Typography/Text.js\";\nimport MenuTitle_module_default from \"./MenuTitle.module.js\";\nimport classNames from \"classnames\";\nimport \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Menu/MenuTitle.tsx\nvar MenuTitle = ({ title, id, className }) => {\n\treturn /* @__PURE__ */ jsx(Text, {\n\t\tas: \"h3\",\n\t\tid,\n\t\tclassName: classNames(MenuTitle_module_default[\"menu-title\"], className),\n\t\tsize: \"sm\",\n\t\tweight: \"semibold\",\n\t\tchildren: title\n\t});\n};\n//#endregion\nexport { MenuTitle };\n\n//# sourceMappingURL=MenuTitle.js.map","var FloatingMenu_module_default = {\n\tmenu: \"_menu_1kl3y_8\",\n\t\"slide-in\": \"_slide-in_1kl3y_1\",\n\t\"fade-in\": \"_fade-in_1kl3y_1\",\n\t\"fade-out\": \"_fade-out_1kl3y_1\",\n\ttitle: \"_title_1kl3y_65\"\n};\n//#endregion\nexport { FloatingMenu_module_default as default };\n\n//# sourceMappingURL=FloatingMenu.module.js.map","import FloatingMenu_module_default from \"./FloatingMenu.module.js\";\nimport { MenuTitle } from \"./MenuTitle.js\";\nimport classNames from \"classnames\";\nimport { forwardRef, useId } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\n//#region src/components/Menu/FloatingMenu.tsx\n/**\n* A menu in a floating box, as commonly seen on desktop.\n*/\nvar FloatingMenu = forwardRef(({ title, showTitle = true, className, children, ...props }, ref) => {\n\tconst titleId = useId();\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\trole: \"menu\",\n\t\tref,\n\t\t\"aria-label\": showTitle ? void 0 : title,\n\t\t\"aria-labelledby\": showTitle ? titleId : void 0,\n\t\tclassName: classNames(className, FloatingMenu_module_default.menu),\n\t\t...props,\n\t\tchildren: [showTitle && /* @__PURE__ */ jsx(MenuTitle, {\n\t\t\tclassName: FloatingMenu_module_default.title,\n\t\t\ttitle,\n\t\t\tid: titleId\n\t\t}), children]\n\t});\n});\nFloatingMenu.displayName = \"FloatingMenu\";\n//#endregion\nexport { FloatingMenu };\n\n//# sourceMappingURL=FloatingMenu.js.map","var DrawerMenu_module_default = {\n\tbg: \"_bg_610zp_8\",\n\tdrawer: \"_drawer_610zp_17\",\n\tbody: \"_body_610zp_51\"\n};\n//#endregion\nexport { DrawerMenu_module_default as default };\n\n//# sourceMappingURL=DrawerMenu.module.js.map","import { createContext } from \"react\";\n//#region src/components/Menu/MenuContext.tsx\n/**\n* A React context providing information about the menu in which a given\n* component resides.\n*/\nvar MenuContext = createContext(null);\n//#endregion\nexport { MenuContext };\n\n//# sourceMappingURL=MenuContext.js.map","//#region src/utils/platform.ts\n/**\n* Gets the platform on which the application is running.\n* If the userAgent could not be determined, this will default to \"other\"\n*/\nfunction getPlatform() {\n\tconst userAgent = globalThis.navigator?.userAgent;\n\tif (/android/i.test(userAgent)) return \"android\";\n\telse if (/iPad|iPhone|iPod|Mac/.test(userAgent) && \"ontouchend\" in document) return \"ios\";\n\telse return \"other\";\n}\n//#endregion\nexport { getPlatform };\n\n//# sourceMappingURL=platform.js.map","import DrawerMenu_module_default from \"./DrawerMenu.module.js\";\nimport { getPlatform } from \"../../utils/platform.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Menu/DrawerMenu.tsx\n/**\n* A menu in a drawer, as commonly seen on mobile.\n*/\nvar DrawerMenu = forwardRef(({ title, children, className, ...props }, ref) => /* @__PURE__ */ jsx(\"div\", {\n\tref,\n\tclassName: classNames(className, DrawerMenu_module_default.drawer),\n\t\"aria-label\": title,\n\t\"data-platform\": getPlatform(),\n\t...props,\n\trole: \"menu\",\n\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: DrawerMenu_module_default.body,\n\t\tchildren\n\t})\n}));\nDrawerMenu.displayName = \"DrawerMenu\";\n//#endregion\nexport { DrawerMenu };\n\n//# sourceMappingURL=DrawerMenu.js.map","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n Context.displayName = rootComponentName + \"Context\";\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n BaseContext.displayName = rootComponentName + \"Context\";\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n let slottableElement = null;\n let hasSlottable = false;\n const newChildren = [];\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n React.Children.forEach(children, (maybeSlottable) => {\n if (isSlottable(maybeSlottable)) {\n hasSlottable = true;\n const slottable = maybeSlottable;\n let child = \"child\" in slottable.props ? slottable.props.child : slottable.props.children;\n if (isLazyComponent(child) && typeof use === \"function\") {\n child = use(child._payload);\n }\n slottableElement = getSlottableElementFromSlottable(slottable, child);\n newChildren.push(slottableElement?.props?.children);\n } else {\n newChildren.push(maybeSlottable);\n }\n });\n if (slottableElement) {\n slottableElement = React.cloneElement(slottableElement, void 0, newChildren);\n } else if (\n // A `Slottable` was found but it didn't resolve to a single element (e.g.\n // it wrapped multiple elements, text, or a render-prop `child` that\n // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n // itself as the slot target — throw a descriptive error below instead.\n !hasSlottable && React.Children.count(children) === 1 && React.isValidElement(children)\n ) {\n slottableElement = children;\n }\n const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;\n const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n if (!slottableElement) {\n if (children || children === 0) {\n throw new Error(\n hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)\n );\n }\n return children;\n }\n const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n if (slottableElement.type !== React.Fragment) {\n mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n }\n return React.cloneElement(slottableElement, mergedProps);\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\nvar SLOTTABLE_IDENTIFIER = Symbol.for(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = (props) => \"child\" in props ? props.children(props.child) : props.children;\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nvar getSlottableElementFromSlottable = (slottable, child) => {\n if (\"child\" in slottable.props) {\n const child2 = slottable.props.child;\n if (!React.isValidElement(child2)) return null;\n return React.cloneElement(child2, void 0, slottable.props.children(child2.props.children));\n }\n return React.isValidElement(child) ? child : null;\n};\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nvar createSlotError = (ownerName) => {\n return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\nvar createSlottableError = (ownerName) => {\n return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\nvar use = React[\" use \".trim().toString()];\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport * as React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set(),\n // Outside elements that belong to a layer's own dismiss affordance (eg, a\n // dialog overlay). Pressing them should dismiss the layer regardless of\n // whether or not they stop propagation.\n //\n // See https://github.com/radix-ui/primitives/issues/3346\n dismissableSurfaces: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n deferPointerDownOutside = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const isDeferredPointerDownOutsideRef = React.useRef(false);\n const pointerDownOutside = usePointerDownOutside(\n (event) => {\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n const isPointerDownOnBranch = [...context.branches].some(\n (branch) => branch.contains(target)\n );\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n },\n {\n ownerDocument,\n deferPointerDownOutside,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces: context.dismissableSurfaces\n }\n );\n const focusOutside = useFocusOutside((event) => {\n if (deferPointerDownOutside && isDeferredPointerDownOutsideRef.current) {\n return;\n }\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents) {\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction useDismissableLayerSurface() {\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n React.useEffect(() => {\n if (!node) {\n return;\n }\n context.dismissableSurfaces.add(node);\n return () => {\n context.dismissableSurfaces.delete(node);\n };\n }, [node, context.dismissableSurfaces]);\n return setNode;\n}\nfunction usePointerDownOutside(onPointerDownOutside, args) {\n const {\n ownerDocument = globalThis?.document,\n deferPointerDownOutside = false,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces\n } = args;\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const isPointerDownOutsideRef = React.useRef(false);\n const interceptedOutsideInteractionEventsRef = React.useRef(/* @__PURE__ */ new Map());\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n function resetOutsideInteraction() {\n isPointerDownOutsideRef.current = false;\n isDeferredPointerDownOutsideRef.current = false;\n interceptedOutsideInteractionEventsRef.current.clear();\n }\n function isOutsideInteractionIntercepted() {\n return Array.from(interceptedOutsideInteractionEventsRef.current.values()).some(Boolean);\n }\n function handleInteractionCapture(event) {\n if (!isPointerDownOutsideRef.current) {\n return;\n }\n const target = event.target;\n const isDismissableSurface = target instanceof Node && [...dismissableSurfaces].some((surface) => surface.contains(target));\n if (!isDismissableSurface) {\n interceptedOutsideInteractionEventsRef.current.set(event.type, true);\n }\n if (event.type === \"click\") {\n window.setTimeout(() => {\n if (isPointerDownOutsideRef.current) {\n handleClickRef.current();\n }\n }, 0);\n }\n }\n function handleInteractionBubble(event) {\n if (isPointerDownOutsideRef.current) {\n interceptedOutsideInteractionEventsRef.current.set(event.type, false);\n }\n }\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n const wasOutsideInteractionIntercepted = isOutsideInteractionIntercepted();\n resetOutsideInteraction();\n if (!wasOutsideInteractionIntercepted) {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n isPointerDownOutsideRef.current = true;\n isDeferredPointerDownOutsideRef.current = deferPointerDownOutside && event.button === 0;\n interceptedOutsideInteractionEventsRef.current.clear();\n if (!deferPointerDownOutside || event.button !== 0) {\n handleAndDispatchPointerDownOutsideEvent2();\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n resetOutsideInteraction();\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const outsideInteractionEvents = [\n \"pointerup\",\n \"mousedown\",\n \"mouseup\",\n \"touchstart\",\n \"touchend\",\n \"click\"\n ];\n for (const eventName of outsideInteractionEvents) {\n ownerDocument.addEventListener(eventName, handleInteractionCapture, true);\n ownerDocument.addEventListener(eventName, handleInteractionBubble);\n }\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n for (const eventName of outsideInteractionEvents) {\n ownerDocument.removeEventListener(eventName, handleInteractionCapture, true);\n ownerDocument.removeEventListener(eventName, handleInteractionBubble);\n }\n };\n }, [\n ownerDocument,\n handlePointerDownOutside,\n deferPointerDownOutside,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces\n ]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root,\n useDismissableLayerSurface\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nvar guards = null;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n if (!guards) {\n guards = { start: createFocusGuard(), end: createFocusGuard() };\n }\n const { start, end } = guards;\n if (document.body.firstElementChild !== start) {\n document.body.insertAdjacentElement(\"afterbegin\", start);\n }\n if (document.body.lastElementChild !== end) {\n document.body.insertAdjacentElement(\"beforeend\", end);\n }\n count++;\n return () => {\n if (count === 1) {\n guards?.start.remove();\n guards?.end.remove();\n guards = null;\n }\n count = Math.max(0, count - 1);\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n const [placementState, setPlacementState] = React.useState(void 0);\n return /* @__PURE__ */ jsx(\n PopperProvider,\n {\n scope: __scopePopper,\n anchor,\n onAnchorChange: setAnchor,\n placementState,\n setPlacementState,\n children\n }\n );\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const onAnchorChange = context.onAnchorChange;\n const callbackRef = React.useCallback(\n (node) => {\n ref.current = node;\n if (node) {\n onAnchorChange(node);\n }\n },\n [onAnchorChange]\n );\n const composedRefs = useComposedRefs(forwardedRef, callbackRef);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n if (!virtualRef) {\n return;\n }\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef.current;\n if (previousAnchor !== anchorRef.current) {\n onAnchorChange(anchorRef.current);\n }\n });\n const sideAndAlign = context.placementState && getSideAndAlignFromPlacement(context.placementState);\n const placedSide = sideAndAlign?.[0];\n const placedAlign = sideAndAlign?.[1];\n return virtualRef ? null : /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-popper-side\": placedSide,\n \"data-radix-popper-align\": placedAlign,\n ...anchorProps,\n ref: composedRefs\n }\n );\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({\n strategy: \"referenceHidden\",\n ...detectOverflowOptions,\n // `hide` detects whether the anchor (reference) is clipped, so when\n // no explicit `collisionBoundary` is set we fall back to Floating\n // UI's default clipping ancestors (e.g. a scrollable menu). This\n // lets an occluded submenu hide once its anchor scrolls out of view\n // (#3237). The collision/size middlewares deliberately keep the\n // viewport-based default to avoid clamping content rendered inside\n // transformed or overflow-clipping portal containers.\n boundary: hasExplicitBoundaries ? detectOverflowOptions.boundary : void 0\n })\n ]\n });\n const setPlacementState = context.setPlacementState;\n useLayoutEffect(() => {\n setPlacementState(placement);\n return () => {\n setPlacementState(void 0);\n };\n }, [placement, setPlacementState]);\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n \"--radix-popper-transform-origin\": [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n placedAlign,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useStableComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction useStableComposedRefs(...refs) {\n const refsRef = React2.useRef(refs);\n refsRef.current = refs;\n return React2.useCallback((node) => {\n const currentRefs = refsRef.current;\n let hasCleanup = false;\n const cleanups = currentRefs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === \"function\") {\n cleanup();\n } else {\n setRef(currentRefs[i], null);\n }\n }\n };\n }\n }, []);\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n React.useEffect(() => {\n if (!open) {\n return;\n }\n const handleBlur = () => handleOpenChange(false);\n window.addEventListener(\"blur\", handleBlur);\n return () => window.removeEventListener(\"blur\", handleBlur);\n }, [open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? subContext.contentId : void 0,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, align = \"start\", ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align,\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/context-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CONTEXT_MENU_NAME = \"ContextMenu\";\nvar [createContextMenuContext, createContextMenuScope] = createContextScope(CONTEXT_MENU_NAME, [\n createMenuScope\n]);\nvar useMenuScope = createMenuScope();\nvar [ContextMenuProvider, useContextMenuContext] = createContextMenuContext(CONTEXT_MENU_NAME);\nvar ContextMenu = (props) => {\n const { __scopeContextMenu, children, onOpenChange, open: openProp, dir, modal = true } = props;\n const hasInteractedRef = React.useRef(false);\n if (true) {\n const hasWarnedRef = React.useRef(false);\n React.useEffect(() => {\n if (openProp === true && !hasInteractedRef.current && !hasWarnedRef.current) {\n hasWarnedRef.current = true;\n console.warn(\n \"ContextMenu: The `open` prop has been set to `true` before the user has interacted with the trigger, so its position is indeterminate. This is likely unintended and will result in the menu being anchored to the top-left corner of the viewport.\"\n );\n }\n }, [openProp]);\n }\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: false,\n onChange: onOpenChange,\n caller: CONTEXT_MENU_NAME\n });\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(\n ContextMenuProvider,\n {\n scope: __scopeContextMenu,\n open,\n onOpenChange: setOpen,\n modal,\n hasInteractedRef,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, dir, open, onOpenChange: setOpen, modal, children })\n }\n );\n};\nContextMenu.displayName = CONTEXT_MENU_NAME;\nvar TRIGGER_NAME = \"ContextMenuTrigger\";\nvar ContextMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, disabled = false, ...triggerProps } = props;\n const context = useContextMenuContext(TRIGGER_NAME, __scopeContextMenu);\n const menuScope = useMenuScope(__scopeContextMenu);\n const pointRef = React.useRef({ x: 0, y: 0 });\n const virtualRef = React.useRef({\n getBoundingClientRect: () => DOMRect.fromRect({ width: 0, height: 0, ...pointRef.current })\n });\n const longPressTimerRef = React.useRef(0);\n const clearLongPress = React.useCallback(\n () => window.clearTimeout(longPressTimerRef.current),\n []\n );\n const handleOpen = (event) => {\n context.hasInteractedRef.current = true;\n pointRef.current = { x: event.clientX, y: event.clientY };\n context.onOpenChange(true);\n };\n React.useEffect(() => clearLongPress, [clearLongPress]);\n React.useEffect(() => void (disabled && clearLongPress()), [disabled, clearLongPress]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { ...menuScope, virtualRef }),\n /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n ...triggerProps,\n ref: forwardedRef,\n style: { WebkitTouchCallout: \"none\", ...props.style },\n onContextMenu: disabled ? props.onContextMenu : composeEventHandlers(props.onContextMenu, (event) => {\n clearLongPress();\n handleOpen(event);\n event.preventDefault();\n }),\n onPointerDown: disabled ? props.onPointerDown : composeEventHandlers(\n props.onPointerDown,\n whenTouchOrPen((event) => {\n clearLongPress();\n if (context.open) {\n context.onOpenChange(false);\n }\n longPressTimerRef.current = window.setTimeout(() => handleOpen(event), 700);\n })\n ),\n onPointerMove: disabled ? props.onPointerMove : composeEventHandlers(props.onPointerMove, whenTouchOrPen(clearLongPress)),\n onPointerCancel: disabled ? props.onPointerCancel : composeEventHandlers(props.onPointerCancel, whenTouchOrPen(clearLongPress)),\n onPointerUp: disabled ? props.onPointerUp : composeEventHandlers(props.onPointerUp, whenTouchOrPen(clearLongPress))\n }\n )\n ] });\n }\n);\nContextMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"ContextMenuPortal\";\nvar ContextMenuPortal = (props) => {\n const { __scopeContextMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nContextMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"ContextMenuContent\";\nvar ContextMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...contentProps } = props;\n const context = useContextMenuContext(CONTENT_NAME, __scopeContextMenu);\n const menuScope = useMenuScope(__scopeContextMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n side: \"right\",\n sideOffset: 2,\n align: \"start\",\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented && hasInteractedOutsideRef.current) {\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented && !context.modal) hasInteractedOutsideRef.current = true;\n },\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-context-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-context-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-context-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-context-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-context-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nContextMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"ContextMenuGroup\";\nvar ContextMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nContextMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"ContextMenuLabel\";\nvar ContextMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nContextMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"ContextMenuItem\";\nvar ContextMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nContextMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"ContextMenuCheckboxItem\";\nvar ContextMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nContextMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"ContextMenuRadioGroup\";\nvar ContextMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nContextMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"ContextMenuRadioItem\";\nvar ContextMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nContextMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"ContextMenuItemIndicator\";\nvar ContextMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nContextMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"ContextMenuSeparator\";\nvar ContextMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nContextMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"ContextMenuArrow\";\nvar ContextMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeContextMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nContextMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"ContextMenuSub\";\nvar ContextMenuSub = (props) => {\n const { __scopeContextMenu, children, onOpenChange, open: openProp, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SUB_NAME\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nContextMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"ContextMenuSubTrigger\";\nvar ContextMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...triggerItemProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...triggerItemProps, ref: forwardedRef });\n});\nContextMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"ContextMenuSubContent\";\nvar ContextMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeContextMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeContextMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-context-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-context-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-context-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-context-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-context-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nContextMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction whenTouchOrPen(handler) {\n return (event) => event.pointerType !== \"mouse\" ? handler(event) : void 0;\n}\nvar Root2 = ContextMenu;\nvar Trigger = ContextMenuTrigger;\nvar Portal2 = ContextMenuPortal;\nvar Content2 = ContextMenuContent;\nvar Group2 = ContextMenuGroup;\nvar Label2 = ContextMenuLabel;\nvar Item2 = ContextMenuItem;\nvar CheckboxItem2 = ContextMenuCheckboxItem;\nvar RadioGroup2 = ContextMenuRadioGroup;\nvar RadioItem2 = ContextMenuRadioItem;\nvar ItemIndicator2 = ContextMenuItemIndicator;\nvar Separator2 = ContextMenuSeparator;\nvar Arrow2 = ContextMenuArrow;\nvar Sub2 = ContextMenuSub;\nvar SubTrigger2 = ContextMenuSubTrigger;\nvar SubContent2 = ContextMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n ContextMenu,\n ContextMenuArrow,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuItem,\n ContextMenuItemIndicator,\n ContextMenuLabel,\n ContextMenuPortal,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createContextMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as React from 'react';\nimport React__default, { useLayoutEffect, useEffect, useMemo } from 'react';\n\nconst DrawerContext = React__default.createContext({\n drawerRef: {\n current: null\n },\n overlayRef: {\n current: null\n },\n onPress: ()=>{},\n onRelease: ()=>{},\n onDrag: ()=>{},\n onNestedDrag: ()=>{},\n onNestedOpenChange: ()=>{},\n onNestedRelease: ()=>{},\n openProp: undefined,\n dismissible: false,\n isOpen: false,\n isDragging: false,\n keyboardIsOpen: {\n current: false\n },\n snapPointsOffset: null,\n snapPoints: null,\n handleOnly: false,\n modal: false,\n shouldFade: false,\n activeSnapPoint: null,\n onOpenChange: ()=>{},\n setActiveSnapPoint: ()=>{},\n closeDrawer: ()=>{},\n direction: 'bottom',\n shouldAnimate: {\n current: true\n },\n shouldScaleBackground: false,\n setBackgroundColorOnScale: true,\n noBodyStyles: false,\n container: null,\n autoFocus: false\n});\nconst useDrawerContext = ()=>{\n const context = React__default.useContext(DrawerContext);\n if (!context) {\n throw new Error('useDrawerContext must be used within a Drawer.Root');\n }\n return context;\n};\n\n__insertCSS(\"[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\\n[data-state=closed]\\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}\");\n\nfunction isMobileFirefox() {\n const userAgent = navigator.userAgent;\n return typeof window !== 'undefined' && (/Firefox/.test(userAgent) && /Mobile/.test(userAgent) || // Android Firefox\n /FxiOS/.test(userAgent) // iOS Firefox\n );\n}\nfunction isMac() {\n return testPlatform(/^Mac/);\n}\nfunction isIPhone() {\n return testPlatform(/^iPhone/);\n}\nfunction isSafari() {\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n}\nfunction isIPad() {\n return testPlatform(/^iPad/) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n isMac() && navigator.maxTouchPoints > 1;\n}\nfunction isIOS() {\n return isIPhone() || isIPad();\n}\nfunction testPlatform(re) {\n return typeof window !== 'undefined' && window.navigator != null ? re.test(window.navigator.platform) : undefined;\n}\n\n// This code comes from https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/overlays/src/usePreventScroll.ts\nconst KEYBOARD_BUFFER = 24;\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction chain$1(...callbacks) {\n return (...args)=>{\n for (let callback of callbacks){\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n };\n}\n// @ts-ignore\nconst visualViewport = typeof document !== 'undefined' && window.visualViewport;\nfunction isScrollable(node) {\n let style = window.getComputedStyle(node);\n return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n}\nfunction getScrollParent(node) {\n if (isScrollable(node)) {\n node = node.parentElement;\n }\n while(node && !isScrollable(node)){\n node = node.parentElement;\n }\n return node || document.scrollingElement || document.documentElement;\n}\n// HTML input types that do not cause the software keyboard to appear.\nconst nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet preventScrollCount = 0;\nlet restore;\n/**\n * Prevents scrolling on the document body on mount, and\n * restores it on unmount. Also ensures that content does not\n * shift due to the scrollbars disappearing.\n */ function usePreventScroll(options = {}) {\n let { isDisabled } = options;\n useIsomorphicLayoutEffect(()=>{\n if (isDisabled) {\n return;\n }\n preventScrollCount++;\n if (preventScrollCount === 1) {\n if (isIOS()) {\n restore = preventScrollMobileSafari();\n }\n }\n return ()=>{\n preventScrollCount--;\n if (preventScrollCount === 0) {\n restore == null ? void 0 : restore();\n }\n };\n }, [\n isDisabled\n ]);\n}\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n// it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n// This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n// scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n// on the window.\n// 2. Prevent default on `touchmove` events inside a scrollable element when the scroll position is at the\n// top or bottom. This avoids the whole page scrolling instead, but does prevent overscrolling.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\n// 4. When focusing an input, apply a transform to trick Safari into thinking the input is at the top\n// of the page, which prevents it from scrolling the page. After the input is focused, scroll the element\n// into view ourselves, without scrolling the whole page.\n// 5. Offset the body by the scroll position using a negative margin and scroll to the top. This should appear the\n// same visually, but makes the actual scroll position always zero. This is required to make all of the\n// above work or Safari will still try to scroll the page when focusing an input.\n// 6. As a last resort, handle window scroll events, and scroll back to the top. This can happen when attempting\n// to navigate to an input with the next/previous buttons that's outside a modal.\nfunction preventScrollMobileSafari() {\n let scrollable;\n let lastY = 0;\n let onTouchStart = (e)=>{\n // Store the nearest scrollable parent element from the element that the user touched.\n scrollable = getScrollParent(e.target);\n if (scrollable === document.documentElement && scrollable === document.body) {\n return;\n }\n lastY = e.changedTouches[0].pageY;\n };\n let onTouchMove = (e)=>{\n // Prevent scrolling the window.\n if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n e.preventDefault();\n return;\n }\n // Prevent scrolling up when at the top and scrolling down when at the bottom\n // of a nested scrollable area, otherwise mobile Safari will start scrolling\n // the window instead. Unfortunately, this disables bounce scrolling when at\n // the top but it's the best we can do.\n let y = e.changedTouches[0].pageY;\n let scrollTop = scrollable.scrollTop;\n let bottom = scrollable.scrollHeight - scrollable.clientHeight;\n if (bottom === 0) {\n return;\n }\n if (scrollTop <= 0 && y > lastY || scrollTop >= bottom && y < lastY) {\n e.preventDefault();\n }\n lastY = y;\n };\n let onTouchEnd = (e)=>{\n let target = e.target;\n // Apply this change if we're not already focused on the target element\n if (isInput(target) && target !== document.activeElement) {\n e.preventDefault();\n // Apply a transform to trick Safari into thinking the input is at the top of the page\n // so it doesn't try to scroll it into view. When tapping on an input, this needs to\n // be done before the \"focus\" event, so we have to focus the element ourselves.\n target.style.transform = 'translateY(-2000px)';\n target.focus();\n requestAnimationFrame(()=>{\n target.style.transform = '';\n });\n }\n };\n let onFocus = (e)=>{\n let target = e.target;\n if (isInput(target)) {\n // Transform also needs to be applied in the focus event in cases where focus moves\n // other than tapping on an input directly, e.g. the next/previous buttons in the\n // software keyboard. In these cases, it seems applying the transform in the focus event\n // is good enough, whereas when tapping an input, it must be done before the focus event. 🤷♂️\n target.style.transform = 'translateY(-2000px)';\n requestAnimationFrame(()=>{\n target.style.transform = '';\n // This will have prevented the browser from scrolling the focused element into view,\n // so we need to do this ourselves in a way that doesn't cause the whole page to scroll.\n if (visualViewport) {\n if (visualViewport.height < window.innerHeight) {\n // If the keyboard is already visible, do this after one additional frame\n // to wait for the transform to be removed.\n requestAnimationFrame(()=>{\n scrollIntoView(target);\n });\n } else {\n // Otherwise, wait for the visual viewport to resize before scrolling so we can\n // measure the correct position to scroll to.\n visualViewport.addEventListener('resize', ()=>scrollIntoView(target), {\n once: true\n });\n }\n }\n });\n }\n };\n let onWindowScroll = ()=>{\n // Last resort. If the window scrolled, scroll it back to the top.\n // It should always be at the top because the body will have a negative margin (see below).\n window.scrollTo(0, 0);\n };\n // Record the original scroll position so we can restore it.\n // Then apply a negative margin to the body to offset it by the scroll position. This will\n // enable us to scroll the window to the top, which is required for the rest of this to work.\n let scrollX = window.pageXOffset;\n let scrollY = window.pageYOffset;\n let restoreStyles = chain$1(setStyle(document.documentElement, 'paddingRight', `${window.innerWidth - document.documentElement.clientWidth}px`));\n // Scroll to the top. The negative margin on the body will make this appear the same.\n window.scrollTo(0, 0);\n let removeEvents = chain$1(addEvent(document, 'touchstart', onTouchStart, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchmove', onTouchMove, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchend', onTouchEnd, {\n passive: false,\n capture: true\n }), addEvent(document, 'focus', onFocus, true), addEvent(window, 'scroll', onWindowScroll));\n return ()=>{\n // Restore styles and scroll the page back to where it was.\n restoreStyles();\n removeEvents();\n window.scrollTo(scrollX, scrollY);\n };\n}\n// Sets a CSS property on an element, and returns a function to revert it to the previous value.\nfunction setStyle(element, style, value) {\n // https://github.com/microsoft/TypeScript/issues/17827#issuecomment-391663310\n // @ts-ignore\n let cur = element.style[style];\n // @ts-ignore\n element.style[style] = value;\n return ()=>{\n // @ts-ignore\n element.style[style] = cur;\n };\n}\n// Adds an event listener to an element, and returns a function to remove it.\nfunction addEvent(target, event, handler, options) {\n // @ts-ignore\n target.addEventListener(event, handler, options);\n return ()=>{\n // @ts-ignore\n target.removeEventListener(event, handler, options);\n };\n}\nfunction scrollIntoView(target) {\n let root = document.scrollingElement || document.documentElement;\n while(target && target !== root){\n // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n let scrollable = getScrollParent(target);\n if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== target) {\n let scrollableTop = scrollable.getBoundingClientRect().top;\n let targetTop = target.getBoundingClientRect().top;\n let targetBottom = target.getBoundingClientRect().bottom;\n // Buffer is needed for some edge cases\n const keyboardHeight = scrollable.getBoundingClientRect().bottom + KEYBOARD_BUFFER;\n if (targetBottom > keyboardHeight) {\n scrollable.scrollTop += targetTop - scrollableTop;\n }\n }\n // @ts-ignore\n target = scrollable.parentElement;\n }\n}\nfunction isInput(target) {\n return target instanceof HTMLInputElement && !nonTextInputTypes.has(target.type) || target instanceof HTMLTextAreaElement || target instanceof HTMLElement && target.isContentEditable;\n}\n\n// This code comes from https://github.com/radix-ui/primitives/tree/main/packages/react/compose-refs\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */ function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */ function composeRefs(...refs) {\n return (node)=>refs.forEach((ref)=>setRef(ref, node));\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */ function useComposedRefs(...refs) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nconst cache = new WeakMap();\nfunction set(el, styles, ignoreCache = false) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = {};\n Object.entries(styles).forEach(([key, value])=>{\n if (key.startsWith('--')) {\n el.style.setProperty(key, value);\n return;\n }\n originalStyles[key] = el.style[key];\n el.style[key] = value;\n });\n if (ignoreCache) return;\n cache.set(el, originalStyles);\n}\nfunction reset(el, prop) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = cache.get(el);\n if (!originalStyles) {\n return;\n }\n {\n el.style[prop] = originalStyles[prop];\n }\n}\nconst isVertical = (direction)=>{\n switch(direction){\n case 'top':\n case 'bottom':\n return true;\n case 'left':\n case 'right':\n return false;\n default:\n return direction;\n }\n};\nfunction getTranslate(element, direction) {\n if (!element) {\n return null;\n }\n const style = window.getComputedStyle(element);\n const transform = // @ts-ignore\n style.transform || style.webkitTransform || style.mozTransform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) {\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix3d\n return parseFloat(mat[1].split(', ')[isVertical(direction) ? 13 : 12]);\n }\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[isVertical(direction) ? 5 : 4]) : null;\n}\nfunction dampenValue(v) {\n return 8 * (Math.log(v + 1) - 2);\n}\nfunction assignStyle(element, style) {\n if (!element) return ()=>{};\n const prevStyle = element.style.cssText;\n Object.assign(element.style, style);\n return ()=>{\n element.style.cssText = prevStyle;\n };\n}\n/**\n * Receives functions as arguments and returns a new function that calls all.\n */ function chain(...fns) {\n return (...args)=>{\n for (const fn of fns){\n if (typeof fn === 'function') {\n // @ts-ignore\n fn(...args);\n }\n }\n };\n}\n\nconst TRANSITIONS = {\n DURATION: 0.5,\n EASE: [\n 0.32,\n 0.72,\n 0,\n 1\n ]\n};\nconst VELOCITY_THRESHOLD = 0.4;\nconst CLOSE_THRESHOLD = 0.25;\nconst SCROLL_LOCK_TIMEOUT = 100;\nconst BORDER_RADIUS = 8;\nconst NESTED_DISPLACEMENT = 16;\nconst WINDOW_TOP_OFFSET = 26;\nconst DRAG_CLASS = 'vaul-dragging';\n\n// This code comes from https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx\nfunction useCallbackRef(callback) {\n const callbackRef = React__default.useRef(callback);\n React__default.useEffect(()=>{\n callbackRef.current = callback;\n });\n // https://github.com/facebook/react/issues/19240\n return React__default.useMemo(()=>(...args)=>callbackRef.current == null ? void 0 : callbackRef.current.call(callbackRef, ...args), []);\n}\nfunction useUncontrolledState({ defaultProp, onChange }) {\n const uncontrolledState = React__default.useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React__default.useRef(value);\n const handleChange = useCallbackRef(onChange);\n React__default.useEffect(()=>{\n if (prevValueRef.current !== value) {\n handleChange(value);\n prevValueRef.current = value;\n }\n }, [\n value,\n prevValueRef,\n handleChange\n ]);\n return uncontrolledState;\n}\nfunction useControllableState({ prop, defaultProp, onChange = ()=>{} }) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n const setValue = React__default.useCallback((nextValue)=>{\n if (isControlled) {\n const setter = nextValue;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value);\n } else {\n setUncontrolledProp(nextValue);\n }\n }, [\n isControlled,\n prop,\n setUncontrolledProp,\n handleChange\n ]);\n return [\n value,\n setValue\n ];\n}\n\nfunction useSnapPoints({ activeSnapPointProp, setActiveSnapPointProp, snapPoints, drawerRef, overlayRef, fadeFromIndex, onSnapPointChange, direction = 'bottom', container, snapToSequentialPoint }) {\n const [activeSnapPoint, setActiveSnapPoint] = useControllableState({\n prop: activeSnapPointProp,\n defaultProp: snapPoints == null ? void 0 : snapPoints[0],\n onChange: setActiveSnapPointProp\n });\n const [windowDimensions, setWindowDimensions] = React__default.useState(typeof window !== 'undefined' ? {\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n } : undefined);\n React__default.useEffect(()=>{\n function onResize() {\n setWindowDimensions({\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n });\n }\n window.addEventListener('resize', onResize);\n return ()=>window.removeEventListener('resize', onResize);\n }, []);\n const isLastSnapPoint = React__default.useMemo(()=>activeSnapPoint === (snapPoints == null ? void 0 : snapPoints[snapPoints.length - 1]) || null, [\n snapPoints,\n activeSnapPoint\n ]);\n const activeSnapPointIndex = React__default.useMemo(()=>{\n var _snapPoints_findIndex;\n return (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : null;\n }, [\n snapPoints,\n activeSnapPoint\n ]);\n const shouldFade = snapPoints && snapPoints.length > 0 && (fadeFromIndex || fadeFromIndex === 0) && !Number.isNaN(fadeFromIndex) && snapPoints[fadeFromIndex] === activeSnapPoint || !snapPoints;\n const snapPointsOffset = React__default.useMemo(()=>{\n const containerSize = container ? {\n width: container.getBoundingClientRect().width,\n height: container.getBoundingClientRect().height\n } : typeof window !== 'undefined' ? {\n width: window.innerWidth,\n height: window.innerHeight\n } : {\n width: 0,\n height: 0\n };\n var _snapPoints_map;\n return (_snapPoints_map = snapPoints == null ? void 0 : snapPoints.map((snapPoint)=>{\n const isPx = typeof snapPoint === 'string';\n let snapPointAsNumber = 0;\n if (isPx) {\n snapPointAsNumber = parseInt(snapPoint, 10);\n }\n if (isVertical(direction)) {\n const height = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.height : 0;\n if (windowDimensions) {\n return direction === 'bottom' ? containerSize.height - height : -containerSize.height + height;\n }\n return height;\n }\n const width = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.width : 0;\n if (windowDimensions) {\n return direction === 'right' ? containerSize.width - width : -containerSize.width + width;\n }\n return width;\n })) != null ? _snapPoints_map : [];\n }, [\n snapPoints,\n windowDimensions,\n container\n ]);\n const activeSnapPointOffset = React__default.useMemo(()=>activeSnapPointIndex !== null ? snapPointsOffset == null ? void 0 : snapPointsOffset[activeSnapPointIndex] : null, [\n snapPointsOffset,\n activeSnapPointIndex\n ]);\n const snapToPoint = React__default.useCallback((dimension)=>{\n var _snapPointsOffset_findIndex;\n const newSnapPointIndex = (_snapPointsOffset_findIndex = snapPointsOffset == null ? void 0 : snapPointsOffset.findIndex((snapPointDim)=>snapPointDim === dimension)) != null ? _snapPointsOffset_findIndex : null;\n onSnapPointChange(newSnapPointIndex);\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `translate3d(0, ${dimension}px, 0)` : `translate3d(${dimension}px, 0, 0)`\n });\n if (snapPointsOffset && newSnapPointIndex !== snapPointsOffset.length - 1 && fadeFromIndex !== undefined && newSnapPointIndex !== fadeFromIndex && newSnapPointIndex < fadeFromIndex) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '0'\n });\n } else {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n }\n setActiveSnapPoint(snapPoints == null ? void 0 : snapPoints[Math.max(newSnapPointIndex, 0)]);\n }, [\n drawerRef.current,\n snapPoints,\n snapPointsOffset,\n fadeFromIndex,\n overlayRef,\n setActiveSnapPoint\n ]);\n React__default.useEffect(()=>{\n if (activeSnapPoint || activeSnapPointProp) {\n var _snapPoints_findIndex;\n const newIndex = (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPointProp || snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : -1;\n if (snapPointsOffset && newIndex !== -1 && typeof snapPointsOffset[newIndex] === 'number') {\n snapToPoint(snapPointsOffset[newIndex]);\n }\n }\n }, [\n activeSnapPoint,\n activeSnapPointProp,\n snapPoints,\n snapPointsOffset,\n snapToPoint\n ]);\n function onRelease({ draggedDistance, closeDrawer, velocity, dismissible }) {\n if (fadeFromIndex === undefined) return;\n const currentPosition = direction === 'bottom' || direction === 'right' ? (activeSnapPointOffset != null ? activeSnapPointOffset : 0) - draggedDistance : (activeSnapPointOffset != null ? activeSnapPointOffset : 0) + draggedDistance;\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isFirst = activeSnapPointIndex === 0;\n const hasDraggedUp = draggedDistance > 0;\n if (isOverlaySnapPoint) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n }\n if (!snapToSequentialPoint && velocity > 2 && !hasDraggedUp) {\n if (dismissible) closeDrawer();\n else snapToPoint(snapPointsOffset[0]); // snap to initial point\n return;\n }\n if (!snapToSequentialPoint && velocity > 2 && hasDraggedUp && snapPointsOffset && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n // Find the closest snap point to the current position\n const closestSnapPoint = snapPointsOffset == null ? void 0 : snapPointsOffset.reduce((prev, curr)=>{\n if (typeof prev !== 'number' || typeof curr !== 'number') return prev;\n return Math.abs(curr - currentPosition) < Math.abs(prev - currentPosition) ? curr : prev;\n });\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n if (velocity > VELOCITY_THRESHOLD && Math.abs(draggedDistance) < dim * 0.4) {\n const dragDirection = hasDraggedUp ? 1 : -1; // 1 = up, -1 = down\n // Don't do anything if we swipe upwards while being on the last snap point\n if (dragDirection > 0 && isLastSnapPoint && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n if (isFirst && dragDirection < 0 && dismissible) {\n closeDrawer();\n }\n if (activeSnapPointIndex === null) return;\n snapToPoint(snapPointsOffset[activeSnapPointIndex + dragDirection]);\n return;\n }\n snapToPoint(closestSnapPoint);\n }\n function onDrag({ draggedDistance }) {\n if (activeSnapPointOffset === null) return;\n const newValue = direction === 'bottom' || direction === 'right' ? activeSnapPointOffset - draggedDistance : activeSnapPointOffset + draggedDistance;\n // Don't do anything if we exceed the last(biggest) snap point\n if ((direction === 'bottom' || direction === 'right') && newValue < snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n if ((direction === 'top' || direction === 'left') && newValue > snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${newValue}px, 0)` : `translate3d(${newValue}px, 0, 0)`\n });\n }\n function getPercentageDragged(absDraggedDistance, isDraggingDown) {\n if (!snapPoints || typeof activeSnapPointIndex !== 'number' || !snapPointsOffset || fadeFromIndex === undefined) return null;\n // If this is true we are dragging to a snap point that is supposed to have an overlay\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isOverlaySnapPointOrHigher = activeSnapPointIndex >= fadeFromIndex;\n if (isOverlaySnapPointOrHigher && isDraggingDown) {\n return 0;\n }\n // Don't animate, but still use this one if we are dragging away from the overlaySnapPoint\n if (isOverlaySnapPoint && !isDraggingDown) return 1;\n if (!shouldFade && !isOverlaySnapPoint) return null;\n // Either fadeFrom index or the one before\n const targetSnapPointIndex = isOverlaySnapPoint ? activeSnapPointIndex + 1 : activeSnapPointIndex - 1;\n // Get the distance from overlaySnapPoint to the one before or vice-versa to calculate the opacity percentage accordingly\n const snapPointDistance = isOverlaySnapPoint ? snapPointsOffset[targetSnapPointIndex] - snapPointsOffset[targetSnapPointIndex - 1] : snapPointsOffset[targetSnapPointIndex + 1] - snapPointsOffset[targetSnapPointIndex];\n const percentageDragged = absDraggedDistance / Math.abs(snapPointDistance);\n if (isOverlaySnapPoint) {\n return 1 - percentageDragged;\n } else {\n return percentageDragged;\n }\n }\n return {\n isLastSnapPoint,\n activeSnapPoint,\n shouldFade,\n getPercentageDragged,\n setActiveSnapPoint,\n activeSnapPointIndex,\n onRelease,\n onDrag,\n snapPointsOffset\n };\n}\n\nconst noop = ()=>()=>{};\nfunction useScaleBackground() {\n const { direction, isOpen, shouldScaleBackground, setBackgroundColorOnScale, noBodyStyles } = useDrawerContext();\n const timeoutIdRef = React__default.useRef(null);\n const initialBackgroundColor = useMemo(()=>document.body.style.backgroundColor, []);\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n React__default.useEffect(()=>{\n if (isOpen && shouldScaleBackground) {\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]') || document.querySelector('[vaul-drawer-wrapper]');\n if (!wrapper) return;\n chain(setBackgroundColorOnScale && !noBodyStyles ? assignStyle(document.body, {\n background: 'black'\n }) : noop, assignStyle(wrapper, {\n transformOrigin: isVertical(direction) ? 'top' : 'left',\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }));\n const wrapperStylesCleanup = assignStyle(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`\n }\n });\n return ()=>{\n wrapperStylesCleanup();\n timeoutIdRef.current = window.setTimeout(()=>{\n if (initialBackgroundColor) {\n document.body.style.background = initialBackgroundColor;\n } else {\n document.body.style.removeProperty('background');\n }\n }, TRANSITIONS.DURATION * 1000);\n };\n }\n }, [\n isOpen,\n shouldScaleBackground,\n initialBackgroundColor\n ]);\n}\n\nlet previousBodyPosition = null;\n/**\n * This hook is necessary to prevent buggy behavior on iOS devices (need to test on Android).\n * I won't get into too much detail about what bugs it solves, but so far I've found that setting the body to `position: fixed` is the most reliable way to prevent those bugs.\n * Issues that this hook solves:\n * https://github.com/emilkowalski/vaul/issues/435\n * https://github.com/emilkowalski/vaul/issues/433\n * And more that I discovered, but were just not reported.\n */ function usePositionFixed({ isOpen, modal, nested, hasBeenOpened, preventScrollRestoration, noBodyStyles }) {\n const [activeUrl, setActiveUrl] = React__default.useState(()=>typeof window !== 'undefined' ? window.location.href : '');\n const scrollPos = React__default.useRef(0);\n const setPositionFixed = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n // If previousBodyPosition is already set, don't set it again.\n if (previousBodyPosition === null && isOpen && !noBodyStyles) {\n previousBodyPosition = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left,\n height: document.body.style.height,\n right: 'unset'\n };\n // Update the dom inside an animation frame\n const { scrollX, innerHeight } = window;\n document.body.style.setProperty('position', 'fixed', 'important');\n Object.assign(document.body.style, {\n top: `${-scrollPos.current}px`,\n left: `${-scrollX}px`,\n right: '0px',\n height: 'auto'\n });\n window.setTimeout(()=>window.requestAnimationFrame(()=>{\n // Attempt to check if the bottom bar appeared due to the position change\n const bottomBarHeight = innerHeight - window.innerHeight;\n if (bottomBarHeight && scrollPos.current >= innerHeight) {\n // Move the content further up so that the bottom bar doesn't hide it\n document.body.style.top = `${-(scrollPos.current + bottomBarHeight)}px`;\n }\n }), 300);\n }\n }, [\n isOpen\n ]);\n const restorePositionSetting = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n if (previousBodyPosition !== null && !noBodyStyles) {\n // Convert the position from \"px\" to Int\n const y = -parseInt(document.body.style.top, 10);\n const x = -parseInt(document.body.style.left, 10);\n // Restore styles\n Object.assign(document.body.style, previousBodyPosition);\n window.requestAnimationFrame(()=>{\n if (preventScrollRestoration && activeUrl !== window.location.href) {\n setActiveUrl(window.location.href);\n return;\n }\n window.scrollTo(x, y);\n });\n previousBodyPosition = null;\n }\n }, [\n activeUrl\n ]);\n React__default.useEffect(()=>{\n function onScroll() {\n scrollPos.current = window.scrollY;\n }\n onScroll();\n window.addEventListener('scroll', onScroll);\n return ()=>{\n window.removeEventListener('scroll', onScroll);\n };\n }, []);\n React__default.useEffect(()=>{\n if (!modal) return;\n return ()=>{\n if (typeof document === 'undefined') return;\n // Another drawer is opened, safe to ignore the execution\n const hasDrawerOpened = !!document.querySelector('[data-vaul-drawer]');\n if (hasDrawerOpened) return;\n restorePositionSetting();\n };\n }, [\n modal,\n restorePositionSetting\n ]);\n React__default.useEffect(()=>{\n if (nested || !hasBeenOpened) return;\n // This is needed to force Safari toolbar to show **before** the drawer starts animating to prevent a gnarly shift from happening\n if (isOpen) {\n // avoid for standalone mode (PWA)\n const isStandalone = window.matchMedia('(display-mode: standalone)').matches;\n !isStandalone && setPositionFixed();\n if (!modal) {\n window.setTimeout(()=>{\n restorePositionSetting();\n }, 500);\n }\n } else {\n restorePositionSetting();\n }\n }, [\n isOpen,\n hasBeenOpened,\n activeUrl,\n modal,\n nested,\n setPositionFixed,\n restorePositionSetting\n ]);\n return {\n restorePositionSetting\n };\n}\n\nfunction Root({ open: openProp, onOpenChange, children, onDrag: onDragProp, onRelease: onReleaseProp, snapPoints, shouldScaleBackground = false, setBackgroundColorOnScale = true, closeThreshold = CLOSE_THRESHOLD, scrollLockTimeout = SCROLL_LOCK_TIMEOUT, dismissible = true, handleOnly = false, fadeFromIndex = snapPoints && snapPoints.length - 1, activeSnapPoint: activeSnapPointProp, setActiveSnapPoint: setActiveSnapPointProp, fixed, modal = true, onClose, nested, noBodyStyles = false, direction = 'bottom', defaultOpen = false, disablePreventScroll = true, snapToSequentialPoint = false, preventScrollRestoration = false, repositionInputs = true, onAnimationEnd, container, autoFocus = false }) {\n var _drawerRef_current, _drawerRef_current1;\n const [isOpen = false, setIsOpen] = useControllableState({\n defaultProp: defaultOpen,\n prop: openProp,\n onChange: (o)=>{\n onOpenChange == null ? void 0 : onOpenChange(o);\n if (!o && !nested) {\n restorePositionSetting();\n }\n setTimeout(()=>{\n onAnimationEnd == null ? void 0 : onAnimationEnd(o);\n }, TRANSITIONS.DURATION * 1000);\n if (o && !modal) {\n if (typeof window !== 'undefined') {\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }\n if (!o) {\n // This will be removed when the exit animation ends (`500ms`)\n document.body.style.pointerEvents = 'auto';\n }\n }\n });\n const [hasBeenOpened, setHasBeenOpened] = React__default.useState(false);\n const [isDragging, setIsDragging] = React__default.useState(false);\n const [justReleased, setJustReleased] = React__default.useState(false);\n const overlayRef = React__default.useRef(null);\n const openTime = React__default.useRef(null);\n const dragStartTime = React__default.useRef(null);\n const dragEndTime = React__default.useRef(null);\n const lastTimeDragPrevented = React__default.useRef(null);\n const isAllowedToDrag = React__default.useRef(false);\n const nestedOpenChangeTimer = React__default.useRef(null);\n const pointerStart = React__default.useRef(0);\n const keyboardIsOpen = React__default.useRef(false);\n const shouldAnimate = React__default.useRef(!defaultOpen);\n const previousDiffFromInitial = React__default.useRef(0);\n const drawerRef = React__default.useRef(null);\n const drawerHeightRef = React__default.useRef(((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0);\n const drawerWidthRef = React__default.useRef(((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0);\n const initialDrawerHeight = React__default.useRef(0);\n const onSnapPointChange = React__default.useCallback((activeSnapPointIndex)=>{\n // Change openTime ref when we reach the last snap point to prevent dragging for 500ms incase it's scrollable.\n if (snapPoints && activeSnapPointIndex === snapPointsOffset.length - 1) openTime.current = new Date();\n }, []);\n const { activeSnapPoint, activeSnapPointIndex, setActiveSnapPoint, onRelease: onReleaseSnapPoints, snapPointsOffset, onDrag: onDragSnapPoints, shouldFade, getPercentageDragged: getSnapPointsPercentageDragged } = useSnapPoints({\n snapPoints,\n activeSnapPointProp,\n setActiveSnapPointProp,\n drawerRef,\n fadeFromIndex,\n overlayRef,\n onSnapPointChange,\n direction,\n container,\n snapToSequentialPoint\n });\n usePreventScroll({\n isDisabled: !isOpen || isDragging || !modal || justReleased || !hasBeenOpened || !repositionInputs || !disablePreventScroll\n });\n const { restorePositionSetting } = usePositionFixed({\n isOpen,\n modal,\n nested: nested != null ? nested : false,\n hasBeenOpened,\n preventScrollRestoration,\n noBodyStyles\n });\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n function onPress(event) {\n var _drawerRef_current, _drawerRef_current1;\n if (!dismissible && !snapPoints) return;\n if (drawerRef.current && !drawerRef.current.contains(event.target)) return;\n drawerHeightRef.current = ((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0;\n drawerWidthRef.current = ((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0;\n setIsDragging(true);\n dragStartTime.current = new Date();\n // iOS doesn't trigger mouseUp after scrolling so we need to listen to touched in order to disallow dragging\n if (isIOS()) {\n window.addEventListener('touchend', ()=>isAllowedToDrag.current = false, {\n once: true\n });\n }\n // Ensure we maintain correct pointer capture even when going outside of the drawer\n event.target.setPointerCapture(event.pointerId);\n pointerStart.current = isVertical(direction) ? event.pageY : event.pageX;\n }\n function shouldDrag(el, isDraggingInDirection) {\n var _window_getSelection;\n let element = el;\n const highlightedText = (_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString();\n const swipeAmount = drawerRef.current ? getTranslate(drawerRef.current, direction) : null;\n const date = new Date();\n // Fixes https://github.com/emilkowalski/vaul/issues/483\n if (element.tagName === 'SELECT') {\n return false;\n }\n if (element.hasAttribute('data-vaul-no-drag') || element.closest('[data-vaul-no-drag]')) {\n return false;\n }\n if (direction === 'right' || direction === 'left') {\n return true;\n }\n // Allow scrolling when animating\n if (openTime.current && date.getTime() - openTime.current.getTime() < 500) {\n return false;\n }\n if (swipeAmount !== null) {\n if (direction === 'bottom' ? swipeAmount > 0 : swipeAmount < 0) {\n return true;\n }\n }\n // Don't drag if there's highlighted text\n if (highlightedText && highlightedText.length > 0) {\n return false;\n }\n // Disallow dragging if drawer was scrolled within `scrollLockTimeout`\n if (lastTimeDragPrevented.current && date.getTime() - lastTimeDragPrevented.current.getTime() < scrollLockTimeout && swipeAmount === 0) {\n lastTimeDragPrevented.current = date;\n return false;\n }\n if (isDraggingInDirection) {\n lastTimeDragPrevented.current = date;\n // We are dragging down so we should allow scrolling\n return false;\n }\n // Keep climbing up the DOM tree as long as there's a parent\n while(element){\n // Check if the element is scrollable\n if (element.scrollHeight > element.clientHeight) {\n if (element.scrollTop !== 0) {\n lastTimeDragPrevented.current = new Date();\n // The element is scrollable and not scrolled to the top, so don't drag\n return false;\n }\n if (element.getAttribute('role') === 'dialog') {\n return true;\n }\n }\n // Move up to the parent element\n element = element.parentNode;\n }\n // No scrollable parents not scrolled to the top found, so drag\n return true;\n }\n function onDrag(event) {\n if (!drawerRef.current) {\n return;\n }\n // We need to know how much of the drawer has been dragged in percentages so that we can transform background accordingly\n if (isDragging) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n const draggedDistance = (pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX)) * directionMultiplier;\n const isDraggingInDirection = draggedDistance > 0;\n // Pre condition for disallowing dragging in the close direction.\n const noCloseSnapPointsPreCondition = snapPoints && !dismissible && !isDraggingInDirection;\n // Disallow dragging down to close when first snap point is the active one and dismissible prop is set to false.\n if (noCloseSnapPointsPreCondition && activeSnapPointIndex === 0) return;\n // We need to capture last time when drag with scroll was triggered and have a timeout between\n const absDraggedDistance = Math.abs(draggedDistance);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const drawerDimension = direction === 'bottom' || direction === 'top' ? drawerHeightRef.current : drawerWidthRef.current;\n // Calculate the percentage dragged, where 1 is the closed position\n let percentageDragged = absDraggedDistance / drawerDimension;\n const snapPointPercentageDragged = getSnapPointsPercentageDragged(absDraggedDistance, isDraggingInDirection);\n if (snapPointPercentageDragged !== null) {\n percentageDragged = snapPointPercentageDragged;\n }\n // Disallow close dragging beyond the smallest snap point.\n if (noCloseSnapPointsPreCondition && percentageDragged >= 1) {\n return;\n }\n if (!isAllowedToDrag.current && !shouldDrag(event.target, isDraggingInDirection)) return;\n drawerRef.current.classList.add(DRAG_CLASS);\n // If shouldDrag gave true once after pressing down on the drawer, we set isAllowedToDrag to true and it will remain true until we let go, there's no reason to disable dragging mid way, ever, and that's the solution to it\n isAllowedToDrag.current = true;\n set(drawerRef.current, {\n transition: 'none'\n });\n set(overlayRef.current, {\n transition: 'none'\n });\n if (snapPoints) {\n onDragSnapPoints({\n draggedDistance\n });\n }\n // Run this only if snapPoints are not defined or if we are at the last snap point (highest one)\n if (isDraggingInDirection && !snapPoints) {\n const dampenedDraggedDistance = dampenValue(draggedDistance);\n const translateValue = Math.min(dampenedDraggedDistance * -1, 0) * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n return;\n }\n const opacityValue = 1 - percentageDragged;\n if (shouldFade || fadeFromIndex && activeSnapPointIndex === fadeFromIndex - 1) {\n onDragProp == null ? void 0 : onDragProp(event, percentageDragged);\n set(overlayRef.current, {\n opacity: `${opacityValue}`,\n transition: 'none'\n }, true);\n }\n if (wrapper && overlayRef.current && shouldScaleBackground) {\n // Calculate percentageDragged as a fraction (0 to 1)\n const scaleValue = Math.min(getScale() + percentageDragged * (1 - getScale()), 1);\n const borderRadiusValue = 8 - percentageDragged * 8;\n const translateValue = Math.max(0, 14 - percentageDragged * 14);\n set(wrapper, {\n borderRadius: `${borderRadiusValue}px`,\n transform: isVertical(direction) ? `scale(${scaleValue}) translate3d(0, ${translateValue}px, 0)` : `scale(${scaleValue}) translate3d(${translateValue}px, 0, 0)`,\n transition: 'none'\n }, true);\n }\n if (!snapPoints) {\n const translateValue = absDraggedDistance * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }\n }\n }\n React__default.useEffect(()=>{\n window.requestAnimationFrame(()=>{\n shouldAnimate.current = true;\n });\n }, []);\n React__default.useEffect(()=>{\n var _window_visualViewport;\n function onVisualViewportChange() {\n if (!drawerRef.current || !repositionInputs) return;\n const focusedElement = document.activeElement;\n if (isInput(focusedElement) || keyboardIsOpen.current) {\n var _window_visualViewport;\n const visualViewportHeight = ((_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.height) || 0;\n const totalHeight = window.innerHeight;\n // This is the height of the keyboard\n let diffFromInitial = totalHeight - visualViewportHeight;\n const drawerHeight = drawerRef.current.getBoundingClientRect().height || 0;\n // Adjust drawer height only if it's tall enough\n const isTallEnough = drawerHeight > totalHeight * 0.8;\n if (!initialDrawerHeight.current) {\n initialDrawerHeight.current = drawerHeight;\n }\n const offsetFromTop = drawerRef.current.getBoundingClientRect().top;\n // visualViewport height may change due to somq e subtle changes to the keyboard. Checking if the height changed by 60 or more will make sure that they keyboard really changed its open state.\n if (Math.abs(previousDiffFromInitial.current - diffFromInitial) > 60) {\n keyboardIsOpen.current = !keyboardIsOpen.current;\n }\n if (snapPoints && snapPoints.length > 0 && snapPointsOffset && activeSnapPointIndex) {\n const activeSnapPointHeight = snapPointsOffset[activeSnapPointIndex] || 0;\n diffFromInitial += activeSnapPointHeight;\n }\n previousDiffFromInitial.current = diffFromInitial;\n // We don't have to change the height if the input is in view, when we are here we are in the opened keyboard state so we can correctly check if the input is in view\n if (drawerHeight > visualViewportHeight || keyboardIsOpen.current) {\n const height = drawerRef.current.getBoundingClientRect().height;\n let newDrawerHeight = height;\n if (height > visualViewportHeight) {\n newDrawerHeight = visualViewportHeight - (isTallEnough ? offsetFromTop : WINDOW_TOP_OFFSET);\n }\n // When fixed, don't move the drawer upwards if there's space, but rather only change it's height so it's fully scrollable when the keyboard is open\n if (fixed) {\n drawerRef.current.style.height = `${height - Math.max(diffFromInitial, 0)}px`;\n } else {\n drawerRef.current.style.height = `${Math.max(newDrawerHeight, visualViewportHeight - offsetFromTop)}px`;\n }\n } else if (!isMobileFirefox()) {\n drawerRef.current.style.height = `${initialDrawerHeight.current}px`;\n }\n if (snapPoints && snapPoints.length > 0 && !keyboardIsOpen.current) {\n drawerRef.current.style.bottom = `0px`;\n } else {\n // Negative bottom value would never make sense\n drawerRef.current.style.bottom = `${Math.max(diffFromInitial, 0)}px`;\n }\n }\n }\n (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.addEventListener('resize', onVisualViewportChange);\n return ()=>{\n var _window_visualViewport;\n return (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.removeEventListener('resize', onVisualViewportChange);\n };\n }, [\n activeSnapPointIndex,\n snapPoints,\n snapPointsOffset\n ]);\n function closeDrawer(fromWithin) {\n cancelDrag();\n onClose == null ? void 0 : onClose();\n if (!fromWithin) {\n setIsOpen(false);\n }\n setTimeout(()=>{\n if (snapPoints) {\n setActiveSnapPoint(snapPoints[0]);\n }\n }, TRANSITIONS.DURATION * 1000); // seconds to ms\n }\n function resetDrawer() {\n if (!drawerRef.current) return;\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const currentSwipeAmount = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transform: 'translate3d(0, 0, 0)',\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n // Don't reset background if swiped upwards\n if (shouldScaleBackground && currentSwipeAmount && currentSwipeAmount > 0 && isOpen) {\n set(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,\n transformOrigin: 'top'\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,\n transformOrigin: 'left'\n },\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }, true);\n }\n }\n function cancelDrag() {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n }\n function onRelease(event) {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n const swipeAmount = getTranslate(drawerRef.current, direction);\n if (!event || !shouldDrag(event.target, false) || !swipeAmount || Number.isNaN(swipeAmount)) return;\n if (dragStartTime.current === null) return;\n const timeTaken = dragEndTime.current.getTime() - dragStartTime.current.getTime();\n const distMoved = pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX);\n const velocity = Math.abs(distMoved) / timeTaken;\n if (velocity > 0.05) {\n // `justReleased` is needed to prevent the drawer from focusing on an input when the drag ends, as it's not the intent most of the time.\n setJustReleased(true);\n setTimeout(()=>{\n setJustReleased(false);\n }, 200);\n }\n if (snapPoints) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n onReleaseSnapPoints({\n draggedDistance: distMoved * directionMultiplier,\n closeDrawer,\n velocity,\n dismissible\n });\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n // Moved upwards, don't do anything\n if (direction === 'bottom' || direction === 'right' ? distMoved > 0 : distMoved < 0) {\n resetDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n if (velocity > VELOCITY_THRESHOLD) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n var _drawerRef_current_getBoundingClientRect_height;\n const visibleDrawerHeight = Math.min((_drawerRef_current_getBoundingClientRect_height = drawerRef.current.getBoundingClientRect().height) != null ? _drawerRef_current_getBoundingClientRect_height : 0, window.innerHeight);\n var _drawerRef_current_getBoundingClientRect_width;\n const visibleDrawerWidth = Math.min((_drawerRef_current_getBoundingClientRect_width = drawerRef.current.getBoundingClientRect().width) != null ? _drawerRef_current_getBoundingClientRect_width : 0, window.innerWidth);\n const isHorizontalSwipe = direction === 'left' || direction === 'right';\n if (Math.abs(swipeAmount) >= (isHorizontalSwipe ? visibleDrawerWidth : visibleDrawerHeight) * closeThreshold) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n resetDrawer();\n }\n React__default.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n if (isOpen) {\n set(document.documentElement, {\n scrollBehavior: 'auto'\n });\n openTime.current = new Date();\n }\n return ()=>{\n reset(document.documentElement, 'scrollBehavior');\n };\n }, [\n isOpen\n ]);\n function onNestedOpenChange(o) {\n const scale = o ? (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth : 1;\n const initialTranslate = o ? -NESTED_DISPLACEMENT : 0;\n if (nestedOpenChangeTimer.current) {\n window.clearTimeout(nestedOpenChangeTimer.current);\n }\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${initialTranslate}px, 0)` : `scale(${scale}) translate3d(${initialTranslate}px, 0, 0)`\n });\n if (!o && drawerRef.current) {\n nestedOpenChangeTimer.current = setTimeout(()=>{\n const translateValue = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transition: 'none',\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }, 500);\n }\n }\n function onNestedDrag(_event, percentageDragged) {\n if (percentageDragged < 0) return;\n const initialScale = (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth;\n const newScale = initialScale + percentageDragged * (1 - initialScale);\n const newTranslate = -NESTED_DISPLACEMENT + percentageDragged * NESTED_DISPLACEMENT;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `scale(${newScale}) translate3d(0, ${newTranslate}px, 0)` : `scale(${newScale}) translate3d(${newTranslate}px, 0, 0)`,\n transition: 'none'\n });\n }\n function onNestedRelease(_event, o) {\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n const scale = o ? (dim - NESTED_DISPLACEMENT) / dim : 1;\n const translate = o ? -NESTED_DISPLACEMENT : 0;\n if (o) {\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${translate}px, 0)` : `scale(${scale}) translate3d(${translate}px, 0, 0)`\n });\n }\n }\n React__default.useEffect(()=>{\n if (!modal) {\n // Need to do this manually unfortunately\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }, [\n modal\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Root, {\n defaultOpen: defaultOpen,\n onOpenChange: (open)=>{\n if (!dismissible && !open) return;\n if (open) {\n setHasBeenOpened(true);\n } else {\n closeDrawer(true);\n }\n setIsOpen(open);\n },\n open: isOpen\n }, /*#__PURE__*/ React__default.createElement(DrawerContext.Provider, {\n value: {\n activeSnapPoint,\n snapPoints,\n setActiveSnapPoint,\n drawerRef,\n overlayRef,\n onOpenChange,\n onPress,\n onRelease,\n onDrag,\n dismissible,\n shouldAnimate,\n handleOnly,\n isOpen,\n isDragging,\n shouldFade,\n closeDrawer,\n onNestedDrag,\n onNestedOpenChange,\n onNestedRelease,\n keyboardIsOpen,\n modal,\n snapPointsOffset,\n activeSnapPointIndex,\n direction,\n shouldScaleBackground,\n setBackgroundColorOnScale,\n noBodyStyles,\n container,\n autoFocus\n }\n }, children));\n}\nconst Overlay = /*#__PURE__*/ React__default.forwardRef(function({ ...rest }, ref) {\n const { overlayRef, snapPoints, onRelease, shouldFade, isOpen, modal, shouldAnimate } = useDrawerContext();\n const composedRef = useComposedRefs(ref, overlayRef);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n // Overlay is the component that is locking scroll, removing it will unlock the scroll without having to dig into Radix's Dialog library\n if (!modal) {\n return null;\n }\n const onMouseUp = React__default.useCallback((event)=>onRelease(event), [\n onRelease\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Overlay, {\n onMouseUp: onMouseUp,\n ref: composedRef,\n \"data-vaul-overlay\": \"\",\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points-overlay\": isOpen && shouldFade ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest\n });\n});\nOverlay.displayName = 'Drawer.Overlay';\nconst Content = /*#__PURE__*/ React__default.forwardRef(function({ onPointerDownOutside, style, onOpenAutoFocus, ...rest }, ref) {\n const { drawerRef, onPress, onRelease, onDrag, keyboardIsOpen, snapPointsOffset, activeSnapPointIndex, modal, isOpen, direction, snapPoints, container, handleOnly, shouldAnimate, autoFocus } = useDrawerContext();\n // Needed to use transition instead of animations\n const [delayedSnapPoints, setDelayedSnapPoints] = React__default.useState(false);\n const composedRef = useComposedRefs(ref, drawerRef);\n const pointerStartRef = React__default.useRef(null);\n const lastKnownPointerEventRef = React__default.useRef(null);\n const wasBeyondThePointRef = React__default.useRef(false);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n useScaleBackground();\n const isDeltaInDirection = (delta, direction, threshold = 0)=>{\n if (wasBeyondThePointRef.current) return true;\n const deltaY = Math.abs(delta.y);\n const deltaX = Math.abs(delta.x);\n const isDeltaX = deltaX > deltaY;\n const dFactor = [\n 'bottom',\n 'right'\n ].includes(direction) ? 1 : -1;\n if (direction === 'left' || direction === 'right') {\n const isReverseDirection = delta.x * dFactor < 0;\n if (!isReverseDirection && deltaX >= 0 && deltaX <= threshold) {\n return isDeltaX;\n }\n } else {\n const isReverseDirection = delta.y * dFactor < 0;\n if (!isReverseDirection && deltaY >= 0 && deltaY <= threshold) {\n return !isDeltaX;\n }\n }\n wasBeyondThePointRef.current = true;\n return true;\n };\n React__default.useEffect(()=>{\n if (hasSnapPoints) {\n window.requestAnimationFrame(()=>{\n setDelayedSnapPoints(true);\n });\n }\n }, []);\n function handleOnPointerUp(event) {\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n }\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Content, {\n \"data-vaul-drawer-direction\": direction,\n \"data-vaul-drawer\": \"\",\n \"data-vaul-delayed-snap-points\": delayedSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-custom-container\": container ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest,\n ref: composedRef,\n style: snapPointsOffset && snapPointsOffset.length > 0 ? {\n '--snap-point-height': `${snapPointsOffset[activeSnapPointIndex != null ? activeSnapPointIndex : 0]}px`,\n ...style\n } : style,\n onPointerDown: (event)=>{\n if (handleOnly) return;\n rest.onPointerDown == null ? void 0 : rest.onPointerDown.call(rest, event);\n pointerStartRef.current = {\n x: event.pageX,\n y: event.pageY\n };\n onPress(event);\n },\n onOpenAutoFocus: (e)=>{\n onOpenAutoFocus == null ? void 0 : onOpenAutoFocus(e);\n if (!autoFocus) {\n e.preventDefault();\n }\n },\n onPointerDownOutside: (e)=>{\n onPointerDownOutside == null ? void 0 : onPointerDownOutside(e);\n if (!modal || e.defaultPrevented) {\n e.preventDefault();\n return;\n }\n if (keyboardIsOpen.current) {\n keyboardIsOpen.current = false;\n }\n },\n onFocusOutside: (e)=>{\n if (!modal) {\n e.preventDefault();\n return;\n }\n },\n onPointerMove: (event)=>{\n lastKnownPointerEventRef.current = event;\n if (handleOnly) return;\n rest.onPointerMove == null ? void 0 : rest.onPointerMove.call(rest, event);\n if (!pointerStartRef.current) return;\n const yPosition = event.pageY - pointerStartRef.current.y;\n const xPosition = event.pageX - pointerStartRef.current.x;\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const delta = {\n x: xPosition,\n y: yPosition\n };\n const isAllowedToSwipe = isDeltaInDirection(delta, direction, swipeStartThreshold);\n if (isAllowedToSwipe) onDrag(event);\n else if (Math.abs(xPosition) > swipeStartThreshold || Math.abs(yPosition) > swipeStartThreshold) {\n pointerStartRef.current = null;\n }\n },\n onPointerUp: (event)=>{\n rest.onPointerUp == null ? void 0 : rest.onPointerUp.call(rest, event);\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n },\n onPointerOut: (event)=>{\n rest.onPointerOut == null ? void 0 : rest.onPointerOut.call(rest, event);\n handleOnPointerUp(lastKnownPointerEventRef.current);\n },\n onContextMenu: (event)=>{\n rest.onContextMenu == null ? void 0 : rest.onContextMenu.call(rest, event);\n if (lastKnownPointerEventRef.current) {\n handleOnPointerUp(lastKnownPointerEventRef.current);\n }\n }\n });\n});\nContent.displayName = 'Drawer.Content';\nconst LONG_HANDLE_PRESS_TIMEOUT = 250;\nconst DOUBLE_TAP_TIMEOUT = 120;\nconst Handle = /*#__PURE__*/ React__default.forwardRef(function({ preventCycle = false, children, ...rest }, ref) {\n const { closeDrawer, isDragging, snapPoints, activeSnapPoint, setActiveSnapPoint, dismissible, handleOnly, isOpen, onPress, onDrag } = useDrawerContext();\n const closeTimeoutIdRef = React__default.useRef(null);\n const shouldCancelInteractionRef = React__default.useRef(false);\n function handleStartCycle() {\n // Stop if this is the second click of a double click\n if (shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n window.setTimeout(()=>{\n handleCycleSnapPoints();\n }, DOUBLE_TAP_TIMEOUT);\n }\n function handleCycleSnapPoints() {\n // Prevent accidental taps while resizing drawer\n if (isDragging || preventCycle || shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n // Make sure to clear the timeout id if the user releases the handle before the cancel timeout\n handleCancelInteraction();\n if (!snapPoints || snapPoints.length === 0) {\n if (!dismissible) {\n closeDrawer();\n }\n return;\n }\n const isLastSnapPoint = activeSnapPoint === snapPoints[snapPoints.length - 1];\n if (isLastSnapPoint && dismissible) {\n closeDrawer();\n return;\n }\n const currentSnapIndex = snapPoints.findIndex((point)=>point === activeSnapPoint);\n if (currentSnapIndex === -1) return; // activeSnapPoint not found in snapPoints\n const nextSnapPoint = snapPoints[currentSnapIndex + 1];\n setActiveSnapPoint(nextSnapPoint);\n }\n function handleStartInteraction() {\n closeTimeoutIdRef.current = window.setTimeout(()=>{\n // Cancel click interaction on a long press\n shouldCancelInteractionRef.current = true;\n }, LONG_HANDLE_PRESS_TIMEOUT);\n }\n function handleCancelInteraction() {\n if (closeTimeoutIdRef.current) {\n window.clearTimeout(closeTimeoutIdRef.current);\n }\n shouldCancelInteractionRef.current = false;\n }\n return /*#__PURE__*/ React__default.createElement(\"div\", {\n onClick: handleStartCycle,\n onPointerCancel: handleCancelInteraction,\n onPointerDown: (e)=>{\n if (handleOnly) onPress(e);\n handleStartInteraction();\n },\n onPointerMove: (e)=>{\n if (handleOnly) onDrag(e);\n },\n // onPointerUp is already handled by the content component\n ref: ref,\n \"data-vaul-drawer-visible\": isOpen ? 'true' : 'false',\n \"data-vaul-handle\": \"\",\n \"aria-hidden\": \"true\",\n ...rest\n }, /*#__PURE__*/ React__default.createElement(\"span\", {\n \"data-vaul-handle-hitarea\": \"\",\n \"aria-hidden\": \"true\"\n }, children));\n});\nHandle.displayName = 'Drawer.Handle';\nfunction NestedRoot({ onDrag, onOpenChange, open: nestedIsOpen, ...rest }) {\n const { onNestedDrag, onNestedOpenChange, onNestedRelease } = useDrawerContext();\n if (!onNestedDrag) {\n throw new Error('Drawer.NestedRoot must be placed in another drawer');\n }\n return /*#__PURE__*/ React__default.createElement(Root, {\n nested: true,\n open: nestedIsOpen,\n onClose: ()=>{\n onNestedOpenChange(false);\n },\n onDrag: (e, p)=>{\n onNestedDrag(e, p);\n onDrag == null ? void 0 : onDrag(e, p);\n },\n onOpenChange: (o)=>{\n if (o) {\n onNestedOpenChange(o);\n }\n onOpenChange == null ? void 0 : onOpenChange(o);\n },\n onRelease: onNestedRelease,\n ...rest\n });\n}\nfunction Portal(props) {\n const context = useDrawerContext();\n const { container = context.container, ...portalProps } = props;\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Portal, {\n container: container,\n ...portalProps\n });\n}\nconst Drawer = {\n Root,\n NestedRoot,\n Content,\n Overlay,\n Trigger: DialogPrimitive.Trigger,\n Portal,\n Handle,\n Close: DialogPrimitive.Close,\n Title: DialogPrimitive.Title,\n Description: DialogPrimitive.Description\n};\n\nexport { Content, Drawer, Handle, NestedRoot, Overlay, Portal, Root };\n","import { FloatingMenu } from \"./FloatingMenu.js\";\nimport DrawerMenu_module_default from \"./DrawerMenu.module.js\";\nimport { MenuContext } from \"./MenuContext.js\";\nimport { getPlatform } from \"../../utils/platform.js\";\nimport { DrawerMenu } from \"./DrawerMenu.js\";\nimport classNames from \"classnames\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { Content, ContextMenuItem, ContextMenuPortal, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, Portal, Root, Trigger } from \"@radix-ui/react-context-menu\";\nimport { Drawer } from \"vaul\";\n//#region src/components/Menu/ContextMenu.tsx\nvar ContextMenuItemWrapper = ({ onSelect, children }) => /* @__PURE__ */ jsx(ContextMenuItem, {\n\tonSelect: onSelect ?? void 0,\n\tasChild: true,\n\tchildren\n});\nvar ContextSubMenuWrapper = ({ trigger, children, open, onOpenChange }) => /* @__PURE__ */ jsxs(ContextMenuSub, {\n\topen,\n\tonOpenChange,\n\tchildren: [/* @__PURE__ */ jsx(ContextMenuSubTrigger, {\n\t\tasChild: true,\n\t\tchildren: trigger\n\t}), /* @__PURE__ */ jsx(ContextMenuPortal, { children: /* @__PURE__ */ jsx(ContextMenuSubContent, {\n\t\tasChild: true,\n\t\talignOffset: -20,\n\t\tchildren: /* @__PURE__ */ jsx(FloatingMenu, {\n\t\t\ttitle: \"\",\n\t\t\tshowTitle: false,\n\t\t\tchildren\n\t\t})\n\t}) })]\n});\n/**\n* A menu opened by right-clicking or long-pressing another UI element.\n*/\nvar ContextMenu = ({ title, showTitle = true, onOpenChange: onOpenChangeProp, trigger: triggerProp, hasAccessibleAlternative, children: childrenProp }) => {\n\tconst [open, setOpen] = useState(false);\n\tconst onOpenChange = useCallback((value) => {\n\t\tsetOpen(value);\n\t\tonOpenChangeProp?.(value);\n\t}, [setOpen, onOpenChangeProp]);\n\tconst platform = getPlatform();\n\tconst drawer = platform === \"android\" || platform === \"ios\";\n\tconst context = useMemo(() => ({\n\t\tMenuItemWrapper: drawer ? null : ContextMenuItemWrapper,\n\t\tSubMenuWrapper: drawer ? null : ContextSubMenuWrapper,\n\t\tonOpenChange\n\t}), [onOpenChange]);\n\tconst children = /* @__PURE__ */ jsx(MenuContext.Provider, {\n\t\tvalue: context,\n\t\tchildren: childrenProp\n\t});\n\tconst trigger = /* @__PURE__ */ jsx(Trigger, {\n\t\t\"aria-haspopup\": \"menu\",\n\t\ttabIndex: hasAccessibleAlternative ? void 0 : 0,\n\t\tasChild: true,\n\t\tchildren: triggerProp\n\t});\n\treturn drawer ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Root, {\n\t\tonOpenChange,\n\t\tchildren: trigger\n\t}), /* @__PURE__ */ jsx(Drawer.Root, {\n\t\topen,\n\t\tonOpenChange,\n\t\tchildren: /* @__PURE__ */ jsxs(Drawer.Portal, { children: [/* @__PURE__ */ jsx(Drawer.Overlay, { className: classNames(DrawerMenu_module_default.bg) }), /* @__PURE__ */ jsx(Drawer.Content, {\n\t\t\tasChild: true,\n\t\t\tchildren: /* @__PURE__ */ jsx(DrawerMenu, {\n\t\t\t\ttitle,\n\t\t\t\tchildren\n\t\t\t})\n\t\t})] })\n\t})] }) : /* @__PURE__ */ jsxs(Root, {\n\t\tonOpenChange,\n\t\tchildren: [trigger, /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Content, {\n\t\t\tasChild: true,\n\t\t\tchildren: /* @__PURE__ */ jsx(FloatingMenu, {\n\t\t\t\tshowTitle,\n\t\t\t\ttitle,\n\t\t\t\tchildren\n\t\t\t})\n\t\t}) })]\n\t});\n};\n//#endregion\nexport { ContextMenu };\n\n//# sourceMappingURL=ContextMenu.js.map","var Glass_module_default = { glass: \"_glass_sepwu_8\" };\n//#endregion\nexport { Glass_module_default as default };\n\n//# sourceMappingURL=Glass.module.js.map","import Glass_module_default from \"./Glass.module.js\";\nimport classNames from \"classnames\";\nimport { Children, forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Glass/Glass.tsx\n/**\n* Adds a border of glass around a child component.\n*/\nvar Glass = forwardRef(({ children, className, ...rest }, ref) => /* @__PURE__ */ jsx(\"div\", {\n\tref,\n\tclassName: classNames(className, Glass_module_default.glass),\n\t...rest,\n\tchildren: Children.only(children)\n}));\nGlass.displayName = \"Glass\";\n//#endregion\nexport { Glass };\n\n//# sourceMappingURL=Glass.js.map","import { Typography } from \"./Typography.js\";\nimport { Text } from \"./Text.js\";\nimport \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Typography/Heading.tsx\n/**\n* A heading component.\n*/\nvar Heading = ({ as = \"h1\", children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Typography, {\n\t\tas,\n\t\ttype: \"heading\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n/**\n* A Heading level-1 styled component. Underlying HTML element can be changed\n* usign the `as` property.\n*/\nvar H1 = ({ children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Heading, {\n\t\tas: \"h1\",\n\t\tweight: \"semibold\",\n\t\tsize: \"xl\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n/**\n* A Heading level-2 styled component. Underlying HTML element can be changed\n* usign the `as` property.\n*/\nvar H2 = ({ children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Heading, {\n\t\tas: \"h2\",\n\t\tweight: \"semibold\",\n\t\tsize: \"lg\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n/**\n* A Heading level-3 styled component. Underlying HTML element can be changed\n* usign the `as` property.\n*/\nvar H3 = ({ children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Heading, {\n\t\tas: \"h3\",\n\t\tweight: \"semibold\",\n\t\tsize: \"md\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n/**\n* A Heading level-4 styled component. Underlying HTML element can be changed\n* usign the `as` property.\n*/\nvar H4 = ({ children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Heading, {\n\t\tas: \"h4\",\n\t\tweight: \"semibold\",\n\t\tsize: \"sm\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n/**\n* A Heading level-5 styled component. Underlying HTML element can be changed\n* usign the `as` property.\n*/\nvar H5 = ({ children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Text, {\n\t\tas: \"h5\",\n\t\tweight: \"semibold\",\n\t\tsize: \"lg\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n/**\n* A Heading level-6 styled component. Underlying HTML element can be changed\n* usign the `as` property.\n*/\nvar H6 = ({ children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(Text, {\n\t\tas: \"h6\",\n\t\tweight: \"semibold\",\n\t\tsize: \"md\",\n\t\t...props,\n\t\tchildren\n\t});\n};\n//#endregion\nexport { H1, H2, H3, H4, H5, H6, Heading };\n\n//# sourceMappingURL=Heading.js.map","//#region src/components/Icon/BigIcon/BigIcon.module.css\nvar BigIcon_module_default = { \"big-icon\": \"_big-icon_1ssbv_8\" };\n//#endregion\nexport { BigIcon_module_default as default };\n\n//# sourceMappingURL=BigIcon.module.js.map","import BigIcon_module_default from \"./BigIcon.module.js\";\nimport classNames from \"classnames\";\nimport React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Icon/BigIcon/BigIcon.tsx\nfunction BigIcon({ className, size = \"lg\", kind = \"primary\", children }) {\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: classNames(BigIcon_module_default[\"big-icon\"], className),\n\t\t\"data-size\": size,\n\t\t\"data-kind\": kind,\n\t\tchildren: React.Children.only(children)\n\t});\n}\n//#endregion\nexport { BigIcon };\n\n//# sourceMappingURL=BigIcon.js.map","var Link_module_default = { link: \"_link_k9ljz_8\" };\n//#endregion\nexport { Link_module_default as default };\n\n//# sourceMappingURL=Link.module.js.map","import Link_module_default from \"./Link.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Link/Link.tsx\n/**\n* A link component.\n*/\nvar Link = forwardRef(function Link({ children, className, kind = \"primary\", size = \"md\", ...props }, ref) {\n\treturn /* @__PURE__ */ jsx(\"a\", {\n\t\tref,\n\t\t...props,\n\t\trel: \"noreferrer noopener\",\n\t\tclassName: classNames(Link_module_default.link, className),\n\t\t\"data-kind\": kind,\n\t\t\"data-size\": size,\n\t\tchildren\n\t});\n});\n//#endregion\nexport { Link };\n\n//# sourceMappingURL=Link.js.map","//#region src/components/Nav/Nav.module.css\nvar Nav_module_default = {\n\t\"nav-bar\": \"_nav-bar_pmal2_8\",\n\t\"nav-bar-items\": \"_nav-bar-items_pmal2_14\",\n\t\"nav-tab\": \"_nav-tab_pmal2_25\",\n\t\"nav-item\": \"_nav-item_pmal2_50\"\n};\n//#endregion\nexport { Nav_module_default as default };\n\n//# sourceMappingURL=Nav.module.js.map","import Nav_module_default from \"./Nav.module.js\";\nimport classNames from \"classnames\";\nimport \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Nav/NavBar.tsx\n/**\n* A navigation bar component\n*/\nvar NavBar = ({ children, className, role, \"aria-label\": ariaLabel, ...rest }) => {\n\tconst classes = classNames(className, Nav_module_default[\"nav-bar\"]);\n\t/**\n\t* We sometimes want to use this NavBar for tabs.\n\t* This is done by passing `role=tablist` to this component.\n\t* By default, this component is used as a navigation bar.\n\t*\n\t* Depending on this role, a different set of accessibility\n\t* attributes need to be applied to the nav/ul element.\n\t*/\n\tconst a11yAttributesForNav = role !== \"tablist\" ? {\n\t\trole: \"navigation\",\n\t\t\"aria-label\": ariaLabel\n\t} : { role: \"presentation\" };\n\t/**\n\t* When used as tabs, the tablist role must be applied to ul.\n\t* When used as navigation, no special accessibility attribute\n\t* is needed for the ul element.\n\t*/\n\tconst a11yAttributesForUl = role === \"tablist\" ? {\n\t\trole: \"tablist\",\n\t\t\"aria-label\": ariaLabel\n\t} : {};\n\treturn /* @__PURE__ */ jsx(\"nav\", {\n\t\t...a11yAttributesForNav,\n\t\t...rest,\n\t\tclassName: classes,\n\t\tchildren: /* @__PURE__ */ jsx(\"ul\", {\n\t\t\t...a11yAttributesForUl,\n\t\t\tclassName: Nav_module_default[\"nav-bar-items\"],\n\t\t\tchildren\n\t\t})\n\t});\n};\n//#endregion\nexport { NavBar };\n\n//# sourceMappingURL=NavBar.js.map","import Nav_module_default from \"./Nav.module.js\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Nav/NavItem.tsx\nvar NavItemLink = forwardRef(function NavItemLink({ children, href, onClick, ...rest }, ref) {\n\treturn /* @__PURE__ */ jsx(\"a\", {\n\t\thref,\n\t\tonClick,\n\t\tclassName: Nav_module_default[\"nav-item\"],\n\t\t...rest,\n\t\tref,\n\t\tchildren\n\t});\n});\nvar NavItemButton = forwardRef(function NavItemButton({ children, disabled, onClick, ...rest }, ref) {\n\treturn /* @__PURE__ */ jsx(\"button\", {\n\t\tonClick,\n\t\tclassName: Nav_module_default[\"nav-item\"],\n\t\tdisabled,\n\t\tref,\n\t\t...rest,\n\t\tchildren\n\t});\n});\nvar renderAsLink = (props) => \"href\" in props && !!props.href;\n/**\n* A navigation item component to be used with a navigation bar.\n* Will render an anchor when href is provided, otherwise a button element.\n*/\nvar NavItem = forwardRef(function NavItem(props, ref) {\n\t/**\n\t* For accessibility rules related to tabs,\n\t* see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/#wai-ariaroles,states,andproperties\n\t*\n\t* For accessibility rules related to navigation,\n\t* see https://www.digitala11y.com/navigation-role/\n\t*/\n\tconst ariaControls = props[\"aria-controls\"];\n\tconst a11yAttributes = !!ariaControls ? {\n\t\t\"aria-controls\": ariaControls,\n\t\trole: \"tab\",\n\t\t\"aria-selected\": props.active\n\t} : { \"aria-current\": props.active ? true : void 0 };\n\tconst propsForChild = { ...props };\n\tdelete propsForChild[\"active\"];\n\tlet navItem;\n\tif (renderAsLink(propsForChild)) {\n\t\tconst buttonRef = ref;\n\t\tnavItem = /* @__PURE__ */ jsx(NavItemLink, {\n\t\t\t...propsForChild,\n\t\t\t...a11yAttributes,\n\t\t\tref: buttonRef\n\t\t});\n\t} else {\n\t\tconst buttonRef = ref;\n\t\tnavItem = /* @__PURE__ */ jsx(NavItemButton, {\n\t\t\t...propsForChild,\n\t\t\t...a11yAttributes,\n\t\t\tref: buttonRef\n\t\t});\n\t}\n\treturn /* @__PURE__ */ jsx(\"li\", {\n\t\tclassName: Nav_module_default[\"nav-tab\"],\n\t\t\"data-current\": props.active ? true : void 0,\n\t\trole: \"presentation\",\n\t\tchildren: navItem\n\t});\n});\n//#endregion\nexport { NavItem };\n\n//# sourceMappingURL=NavItem.js.map","\"use client\";\n\n// src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { FloatingMenu } from \"./FloatingMenu.js\";\nimport DrawerMenu_module_default from \"./DrawerMenu.module.js\";\nimport { MenuContext } from \"./MenuContext.js\";\nimport { getPlatform } from \"../../utils/platform.js\";\nimport { DrawerMenu } from \"./DrawerMenu.js\";\nimport classNames from \"classnames\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Drawer } from \"vaul\";\nimport { Content, DropdownMenuItem, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, Portal, Root, Trigger } from \"@radix-ui/react-dropdown-menu\";\n//#region src/components/Menu/Menu.tsx\nvar DropdownMenuItemWrapper = ({ onSelect, children }) => /* @__PURE__ */ jsx(DropdownMenuItem, {\n\tonSelect: onSelect ?? void 0,\n\tasChild: true,\n\tchildren\n});\n/** Duration of the parent menu's slide-in animation (ms). */\nvar MENU_ANIMATION_DURATION = 180;\nvar DropdownSubMenuWrapper = ({ trigger, children, open: openProp, onOpenChange }) => {\n\tconst [deferredOpen, setDeferredOpen] = useState(false);\n\tuseEffect(() => {\n\t\tif (openProp) {\n\t\t\tconst timer = setTimeout(() => setDeferredOpen(true), MENU_ANIMATION_DURATION);\n\t\t\treturn () => clearTimeout(timer);\n\t\t} else setDeferredOpen(false);\n\t}, [openProp]);\n\treturn /* @__PURE__ */ jsxs(DropdownMenuSub, {\n\t\topen: openProp ? deferredOpen : openProp,\n\t\tonOpenChange,\n\t\tchildren: [/* @__PURE__ */ jsx(DropdownMenuSubTrigger, {\n\t\t\tasChild: true,\n\t\t\tchildren: trigger\n\t\t}), /* @__PURE__ */ jsx(DropdownMenuPortal, { children: /* @__PURE__ */ jsx(DropdownMenuSubContent, {\n\t\t\tasChild: true,\n\t\t\talignOffset: -20,\n\t\t\tchildren: /* @__PURE__ */ jsx(FloatingMenu, {\n\t\t\t\ttitle: \"\",\n\t\t\t\tshowTitle: false,\n\t\t\t\tchildren\n\t\t\t})\n\t\t}) })]\n\t});\n};\n/**\n* A menu opened by pressing a button.\n*/\nvar Menu = ({ className, title, showTitle = true, open, onOpenChange, trigger, children: childrenProp, side = \"bottom\", align = \"center\" }) => {\n\tconst platform = getPlatform();\n\tconst drawer = platform === \"android\" || platform === \"ios\";\n\tconst context = useMemo(() => ({\n\t\tMenuItemWrapper: drawer ? null : DropdownMenuItemWrapper,\n\t\tSubMenuWrapper: drawer ? null : DropdownSubMenuWrapper,\n\t\tonOpenChange\n\t}), [onOpenChange]);\n\tconst children = /* @__PURE__ */ jsx(MenuContext.Provider, {\n\t\tvalue: context,\n\t\tchildren: childrenProp\n\t});\n\treturn drawer ? /* @__PURE__ */ jsxs(Drawer.Root, {\n\t\topen,\n\t\tonOpenChange,\n\t\tchildren: [/* @__PURE__ */ jsx(Drawer.Trigger, {\n\t\t\tasChild: true,\n\t\t\tchildren: trigger\n\t\t}), /* @__PURE__ */ jsxs(Drawer.Portal, { children: [/* @__PURE__ */ jsx(Drawer.Overlay, { className: classNames(DrawerMenu_module_default.bg) }), /* @__PURE__ */ jsx(Drawer.Content, {\n\t\t\tasChild: true,\n\t\t\tchildren: /* @__PURE__ */ jsx(DrawerMenu, {\n\t\t\t\ttitle,\n\t\t\t\tchildren\n\t\t\t})\n\t\t})] })]\n\t}) : /* @__PURE__ */ jsxs(Root, {\n\t\topen,\n\t\tonOpenChange,\n\t\tchildren: [/* @__PURE__ */ jsx(Trigger, {\n\t\t\tasChild: true,\n\t\t\tchildren: trigger\n\t\t}), /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Content, {\n\t\t\tasChild: true,\n\t\t\tside,\n\t\t\talign,\n\t\t\tsideOffset: 8,\n\t\t\tchildren: /* @__PURE__ */ jsx(FloatingMenu, {\n\t\t\t\tclassName,\n\t\t\t\ttitle,\n\t\t\t\tshowTitle,\n\t\t\t\tchildren\n\t\t\t})\n\t\t}) })]\n\t});\n};\n//#endregion\nexport { Menu };\n\n//# sourceMappingURL=Menu.js.map","var MenuItem_module_default = {\n\titem: \"_item_bym9p_8\",\n\tinteractive: \"_interactive_bym9p_26\",\n\t\"no-label\": \"_no-label_bym9p_31\",\n\tlabel: \"_label_bym9p_35\",\n\t\"no-icon\": \"_no-icon_bym9p_42\",\n\ticon: \"_icon_bym9p_51\",\n\t\"nav-hint\": \"_nav-hint_bym9p_60\",\n\tdisabled: \"_disabled_bym9p_140\"\n};\n//#endregion\nexport { MenuItem_module_default as default };\n\n//# sourceMappingURL=MenuItem.module.js.map","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ChevronRightIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M8.7 17.3a.95.95 0 0 1-.275-.7q0-.425.275-.7l3.9-3.9-3.9-3.9a.95.95 0 0 1-.275-.7q0-.425.275-.7a.95.95 0 0 1 .7-.275q.425 0 .7.275l4.6 4.6q.15.15.213.325.062.175.062.375t-.062.375a.9.9 0 0 1-.213.325l-4.6 4.6a.95.95 0 0 1-.7.275.95.95 0 0 1-.7-.275\"\n })\n });\n}\n;\nChevronRightIcon.displayName = \"ChevronRightIcon\";\nexport default forwardRef(ChevronRightIcon);","import { Text } from \"../Typography/Text.js\";\nimport { MenuContext } from \"./MenuContext.js\";\nimport MenuItem_module_default from \"./MenuItem.module.js\";\nimport classNames from \"classnames\";\nimport { isValidElement, useCallback, useContext } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport ChevronRightIcon from \"@vector-im/compound-design-tokens/assets/web/icons/chevron-right\";\nimport { Slot } from \"@radix-ui/react-slot\";\n//#region src/components/Menu/MenuItem.tsx\n/**\n* An item within a menu, acting either as a navigation button, or simply a\n* container for other interactive elements.\n* Must be used within a compound Menu or other `menu` or `menubar` aria role subtree.\n*/\nvar MenuItem = ({ as, className, Icon, label, labelProps, onSelect, kind = \"primary\", children, onClick: onClickProp, disabled, hideChevron, ...props }) => {\n\tconst Component = as ?? \"button\";\n\tconst context = useContext(MenuContext);\n\tconst onClick = useCallback((e) => {\n\t\tonClickProp?.(e);\n\t\tif (onSelect !== null && context?.MenuItemWrapper == null) {\n\t\t\tconst selectEvent = new CustomEvent(\"menu.itemSelect\", {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t\tonSelect(selectEvent);\n\t\t\tif (!selectEvent.defaultPrevented) context?.onOpenChange(false);\n\t\t}\n\t}, [context, onSelect]);\n\tconst iconIsReactElement = isValidElement(Icon);\n\tconst componentIcon = Icon;\n\tconst SvgIcon = Icon;\n\tconst content = /* @__PURE__ */ jsxs(Component, {\n\t\trole: \"menuitem\",\n\t\t...props,\n\t\tclassName: classNames(className, MenuItem_module_default.item, {\n\t\t\t[MenuItem_module_default.interactive]: onSelect !== null,\n\t\t\t[MenuItem_module_default[\"no-label\"]]: label === null,\n\t\t\t[MenuItem_module_default[\"no-icon\"]]: !Icon,\n\t\t\t[MenuItem_module_default[\"disabled\"]]: disabled\n\t\t}),\n\t\t\"data-kind\": kind,\n\t\tonClick,\n\t\tdisabled: Component === \"button\" ? disabled : void 0,\n\t\t\"aria-disabled\": Component === \"button\" ? void 0 : disabled,\n\t\tchildren: [\n\t\t\tIcon && (iconIsReactElement ? /* @__PURE__ */ jsx(Slot, {\n\t\t\t\tclassName: MenuItem_module_default.icon,\n\t\t\t\tchildren: componentIcon\n\t\t\t}) : /* @__PURE__ */ jsx(SvgIcon, {\n\t\t\t\twidth: 24,\n\t\t\t\theight: 24,\n\t\t\t\tclassName: MenuItem_module_default.icon,\n\t\t\t\t\"aria-hidden\": true\n\t\t\t})),\n\t\t\tlabel !== null && /* @__PURE__ */ jsx(Text, {\n\t\t\t\tclassName: classNames(MenuItem_module_default.label, labelProps?.className),\n\t\t\t\tsize: \"md\",\n\t\t\t\tweight: \"medium\",\n\t\t\t\tas: \"span\",\n\t\t\t\t...labelProps,\n\t\t\t\tchildren: label\n\t\t\t}),\n\t\t\t!hideChevron && (Component === \"button\" || Component === \"a\") && /* @__PURE__ */ jsx(ChevronRightIcon, {\n\t\t\t\twidth: 8,\n\t\t\t\theight: 24,\n\t\t\t\tclassName: MenuItem_module_default[\"nav-hint\"],\n\t\t\t\t\"aria-hidden\": true,\n\t\t\t\tviewBox: \"8 0 8 24\"\n\t\t\t}),\n\t\t\tchildren\n\t\t]\n\t});\n\treturn context?.MenuItemWrapper == null || onSelect === null ? content : /* @__PURE__ */ jsx(context.MenuItemWrapper, {\n\t\tonSelect,\n\t\tchildren: content\n\t});\n};\n//#endregion\nexport { MenuItem };\n\n//# sourceMappingURL=MenuItem.js.map","var Text_module_default = {\n\tcontrol: \"_control_d83jn_10\",\n\t\"enable-ligatures\": \"_enable-ligatures_d83jn_63\"\n};\n//#endregion\nexport { Text_module_default as default };\n\n//# sourceMappingURL=Text.module.js.map","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/form.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Label as LabelPrimitive } from \"@radix-ui/react-label\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nvar [createFormContext, createFormScope] = createContextScope(\"Form\");\nvar FORM_NAME = \"Form\";\nvar [ValidationProvider, useValidationContext] = createFormContext(FORM_NAME);\nvar [AriaDescriptionProvider, useAriaDescriptionContext] = createFormContext(FORM_NAME);\nvar Form = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeForm, onClearServerErrors = () => {\n }, ...rootProps } = props;\n const formRef = React.useRef(null);\n const composedFormRef = useComposedRefs(forwardedRef, formRef);\n const [validityMap, setValidityMap] = React.useState({});\n const getFieldValidity = React.useCallback(\n (fieldName) => validityMap[fieldName],\n [validityMap]\n );\n const handleFieldValidityChange = React.useCallback(\n (fieldName, validity) => setValidityMap((prevValidityMap) => ({\n ...prevValidityMap,\n [fieldName]: { ...prevValidityMap[fieldName] ?? {}, ...validity }\n })),\n []\n );\n const handleFieldValiditionClear = React.useCallback((fieldName) => {\n setValidityMap((prevValidityMap) => ({ ...prevValidityMap, [fieldName]: void 0 }));\n setCustomErrorsMap((prevCustomErrorsMap) => ({ ...prevCustomErrorsMap, [fieldName]: {} }));\n }, []);\n const [customMatcherEntriesMap, setCustomMatcherEntriesMap] = React.useState({});\n const getFieldCustomMatcherEntries = React.useCallback(\n (fieldName) => customMatcherEntriesMap[fieldName] ?? [],\n [customMatcherEntriesMap]\n );\n const handleFieldCustomMatcherAdd = React.useCallback((fieldName, matcherEntry) => {\n setCustomMatcherEntriesMap((prevCustomMatcherEntriesMap) => ({\n ...prevCustomMatcherEntriesMap,\n [fieldName]: [...prevCustomMatcherEntriesMap[fieldName] ?? [], matcherEntry]\n }));\n }, []);\n const handleFieldCustomMatcherRemove = React.useCallback((fieldName, matcherEntryId) => {\n setCustomMatcherEntriesMap((prevCustomMatcherEntriesMap) => ({\n ...prevCustomMatcherEntriesMap,\n [fieldName]: (prevCustomMatcherEntriesMap[fieldName] ?? []).filter(\n (matcherEntry) => matcherEntry.id !== matcherEntryId\n )\n }));\n }, []);\n const [customErrorsMap, setCustomErrorsMap] = React.useState({});\n const getFieldCustomErrors = React.useCallback(\n (fieldName) => customErrorsMap[fieldName] ?? {},\n [customErrorsMap]\n );\n const handleFieldCustomErrorsChange = React.useCallback((fieldName, customErrors) => {\n setCustomErrorsMap((prevCustomErrorsMap) => ({\n ...prevCustomErrorsMap,\n [fieldName]: { ...prevCustomErrorsMap[fieldName] ?? {}, ...customErrors }\n }));\n }, []);\n const [messageIdsMap, setMessageIdsMap] = React.useState({});\n const handleFieldMessageIdAdd = React.useCallback((fieldName, id) => {\n setMessageIdsMap((prevMessageIdsMap) => {\n const fieldDescriptionIds = new Set(prevMessageIdsMap[fieldName]).add(id);\n return { ...prevMessageIdsMap, [fieldName]: fieldDescriptionIds };\n });\n }, []);\n const handleFieldMessageIdRemove = React.useCallback((fieldName, id) => {\n setMessageIdsMap((prevMessageIdsMap) => {\n const fieldDescriptionIds = new Set(prevMessageIdsMap[fieldName]);\n fieldDescriptionIds.delete(id);\n return { ...prevMessageIdsMap, [fieldName]: fieldDescriptionIds };\n });\n }, []);\n const getFieldDescription = React.useCallback(\n (fieldName) => Array.from(messageIdsMap[fieldName] ?? []).join(\" \") || void 0,\n [messageIdsMap]\n );\n return /* @__PURE__ */ jsx(\n ValidationProvider,\n {\n scope: __scopeForm,\n getFieldValidity,\n onFieldValidityChange: handleFieldValidityChange,\n getFieldCustomMatcherEntries,\n onFieldCustomMatcherEntryAdd: handleFieldCustomMatcherAdd,\n onFieldCustomMatcherEntryRemove: handleFieldCustomMatcherRemove,\n getFieldCustomErrors,\n onFieldCustomErrorsChange: handleFieldCustomErrorsChange,\n onFieldValiditionClear: handleFieldValiditionClear,\n children: /* @__PURE__ */ jsx(\n AriaDescriptionProvider,\n {\n scope: __scopeForm,\n onFieldMessageIdAdd: handleFieldMessageIdAdd,\n onFieldMessageIdRemove: handleFieldMessageIdRemove,\n getFieldDescription,\n children: /* @__PURE__ */ jsx(\n Primitive.form,\n {\n ...rootProps,\n ref: composedFormRef,\n onInvalid: composeEventHandlers(props.onInvalid, (event) => {\n const firstInvalidControl = getFirstInvalidControl(event.currentTarget);\n if (firstInvalidControl === event.target) firstInvalidControl.focus();\n event.preventDefault();\n }),\n onSubmit: composeEventHandlers(props.onSubmit, onClearServerErrors, {\n checkForDefaultPrevented: false\n }),\n onReset: composeEventHandlers(props.onReset, onClearServerErrors)\n }\n )\n }\n )\n }\n );\n }\n);\nForm.displayName = FORM_NAME;\nvar FIELD_NAME = \"FormField\";\nvar [FormFieldProvider, useFormFieldContext] = createFormContext(FIELD_NAME);\nvar FormField = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeForm, name, serverInvalid = false, ...fieldProps } = props;\n const validationContext = useValidationContext(FIELD_NAME, __scopeForm);\n const validity = validationContext.getFieldValidity(name);\n const id = useId();\n return /* @__PURE__ */ jsx(FormFieldProvider, { scope: __scopeForm, id, name, serverInvalid, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-valid\": getValidAttribute(validity, serverInvalid),\n \"data-invalid\": getInvalidAttribute(validity, serverInvalid),\n ...fieldProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nFormField.displayName = FIELD_NAME;\nvar LABEL_NAME = \"FormLabel\";\nvar FormLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeForm, ...labelProps } = props;\n const validationContext = useValidationContext(LABEL_NAME, __scopeForm);\n const fieldContext = useFormFieldContext(LABEL_NAME, __scopeForm);\n const htmlFor = labelProps.htmlFor || fieldContext.id;\n const validity = validationContext.getFieldValidity(fieldContext.name);\n return /* @__PURE__ */ jsx(\n LabelPrimitive,\n {\n \"data-valid\": getValidAttribute(validity, fieldContext.serverInvalid),\n \"data-invalid\": getInvalidAttribute(validity, fieldContext.serverInvalid),\n ...labelProps,\n ref: forwardedRef,\n htmlFor\n }\n );\n }\n);\nFormLabel.displayName = LABEL_NAME;\nvar CONTROL_NAME = \"FormControl\";\nvar FormControl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeForm, ...controlProps } = props;\n const validationContext = useValidationContext(CONTROL_NAME, __scopeForm);\n const fieldContext = useFormFieldContext(CONTROL_NAME, __scopeForm);\n const ariaDescriptionContext = useAriaDescriptionContext(CONTROL_NAME, __scopeForm);\n const ref = React.useRef(null);\n const composedRef = useComposedRefs(forwardedRef, ref);\n const name = controlProps.name || fieldContext.name;\n const id = controlProps.id || fieldContext.id;\n const customMatcherEntries = validationContext.getFieldCustomMatcherEntries(name);\n const { onFieldValidityChange, onFieldCustomErrorsChange, onFieldValiditionClear } = validationContext;\n const updateControlValidity = React.useCallback(\n async (control) => {\n if (hasBuiltInError(control.validity)) {\n const controlValidity2 = validityStateToObject(control.validity);\n onFieldValidityChange(name, controlValidity2);\n return;\n }\n const formData = control.form ? new FormData(control.form) : new FormData();\n const matcherArgs = [control.value, formData];\n const syncCustomMatcherEntries = [];\n const ayncCustomMatcherEntries = [];\n customMatcherEntries.forEach((customMatcherEntry) => {\n if (isAsyncCustomMatcherEntry(customMatcherEntry, matcherArgs)) {\n ayncCustomMatcherEntries.push(customMatcherEntry);\n } else if (isSyncCustomMatcherEntry(customMatcherEntry)) {\n syncCustomMatcherEntries.push(customMatcherEntry);\n }\n });\n const syncCustomErrors = syncCustomMatcherEntries.map(({ id: id2, match }) => {\n return [id2, match(...matcherArgs)];\n });\n const syncCustomErrorsById = Object.fromEntries(syncCustomErrors);\n const hasSyncCustomErrors = Object.values(syncCustomErrorsById).some(Boolean);\n const hasCustomError = hasSyncCustomErrors;\n control.setCustomValidity(hasCustomError ? DEFAULT_INVALID_MESSAGE : \"\");\n const controlValidity = validityStateToObject(control.validity);\n onFieldValidityChange(name, controlValidity);\n onFieldCustomErrorsChange(name, syncCustomErrorsById);\n if (!hasSyncCustomErrors && ayncCustomMatcherEntries.length > 0) {\n const promisedCustomErrors = ayncCustomMatcherEntries.map(\n ({ id: id2, match }) => match(...matcherArgs).then((matches) => [id2, matches])\n );\n const asyncCustomErrors = await Promise.all(promisedCustomErrors);\n const asyncCustomErrorsById = Object.fromEntries(asyncCustomErrors);\n const hasAsyncCustomErrors = Object.values(asyncCustomErrorsById).some(Boolean);\n const hasCustomError2 = hasAsyncCustomErrors;\n control.setCustomValidity(hasCustomError2 ? DEFAULT_INVALID_MESSAGE : \"\");\n const controlValidity2 = validityStateToObject(control.validity);\n onFieldValidityChange(name, controlValidity2);\n onFieldCustomErrorsChange(name, asyncCustomErrorsById);\n }\n },\n [customMatcherEntries, name, onFieldCustomErrorsChange, onFieldValidityChange]\n );\n React.useEffect(() => {\n const control = ref.current;\n if (control) {\n const handleChange = () => updateControlValidity(control);\n control.addEventListener(\"change\", handleChange);\n return () => control.removeEventListener(\"change\", handleChange);\n }\n }, [updateControlValidity]);\n const resetControlValidity = React.useCallback(() => {\n const control = ref.current;\n if (control) {\n control.setCustomValidity(\"\");\n onFieldValiditionClear(name);\n }\n }, [name, onFieldValiditionClear]);\n React.useEffect(() => {\n const form = ref.current?.form;\n if (form) {\n form.addEventListener(\"reset\", resetControlValidity);\n return () => form.removeEventListener(\"reset\", resetControlValidity);\n }\n }, [resetControlValidity]);\n React.useEffect(() => {\n const control = ref.current;\n const form = control?.closest(\"form\");\n if (form && fieldContext.serverInvalid) {\n const firstInvalidControl = getFirstInvalidControl(form);\n if (firstInvalidControl === control) firstInvalidControl.focus();\n }\n }, [fieldContext.serverInvalid]);\n const validity = validationContext.getFieldValidity(name);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n \"data-valid\": getValidAttribute(validity, fieldContext.serverInvalid),\n \"data-invalid\": getInvalidAttribute(validity, fieldContext.serverInvalid),\n \"aria-invalid\": fieldContext.serverInvalid ? true : void 0,\n \"aria-describedby\": ariaDescriptionContext.getFieldDescription(name),\n title: \"\",\n ...controlProps,\n ref: composedRef,\n id,\n name,\n onInvalid: composeEventHandlers(props.onInvalid, (event) => {\n const control = event.currentTarget;\n updateControlValidity(control);\n }),\n onChange: composeEventHandlers(props.onChange, (_event) => {\n resetControlValidity();\n })\n }\n );\n }\n);\nFormControl.displayName = CONTROL_NAME;\nvar DEFAULT_INVALID_MESSAGE = \"This value is not valid\";\nvar DEFAULT_BUILT_IN_MESSAGES = {\n badInput: DEFAULT_INVALID_MESSAGE,\n patternMismatch: \"This value does not match the required pattern\",\n rangeOverflow: \"This value is too large\",\n rangeUnderflow: \"This value is too small\",\n stepMismatch: \"This value does not match the required step\",\n tooLong: \"This value is too long\",\n tooShort: \"This value is too short\",\n typeMismatch: \"This value does not match the required type\",\n valid: void 0,\n valueMissing: \"This value is missing\"\n};\nvar MESSAGE_NAME = \"FormMessage\";\nvar FormMessage = React.forwardRef(\n (props, forwardedRef) => {\n const { match, name: nameProp, ...messageProps } = props;\n const fieldContext = useFormFieldContext(MESSAGE_NAME, props.__scopeForm);\n const name = nameProp ?? fieldContext.name;\n if (match === void 0) {\n return /* @__PURE__ */ jsx(FormMessageImpl, { ...messageProps, ref: forwardedRef, name, children: props.children || DEFAULT_INVALID_MESSAGE });\n } else if (typeof match === \"function\") {\n return /* @__PURE__ */ jsx(FormCustomMessage, { match, ...messageProps, ref: forwardedRef, name });\n } else {\n return /* @__PURE__ */ jsx(FormBuiltInMessage, { match, ...messageProps, ref: forwardedRef, name });\n }\n }\n);\nFormMessage.displayName = MESSAGE_NAME;\nvar FormBuiltInMessage = React.forwardRef(\n (props, forwardedRef) => {\n const { match, forceMatch = false, name, children, ...messageProps } = props;\n const validationContext = useValidationContext(MESSAGE_NAME, messageProps.__scopeForm);\n const validity = validationContext.getFieldValidity(name);\n const matches = forceMatch || validity?.[match];\n if (matches) {\n return /* @__PURE__ */ jsx(FormMessageImpl, { ref: forwardedRef, ...messageProps, name, children: children ?? DEFAULT_BUILT_IN_MESSAGES[match] });\n }\n return null;\n }\n);\nvar FormCustomMessage = React.forwardRef(\n (props, forwardedRef) => {\n const { match, forceMatch = false, name, id: idProp, children, ...messageProps } = props;\n const validationContext = useValidationContext(MESSAGE_NAME, messageProps.__scopeForm);\n const ref = React.useRef(null);\n const composedRef = useComposedRefs(forwardedRef, ref);\n const _id = useId();\n const id = idProp ?? _id;\n const customMatcherEntry = React.useMemo(() => ({ id, match }), [id, match]);\n const { onFieldCustomMatcherEntryAdd, onFieldCustomMatcherEntryRemove } = validationContext;\n React.useEffect(() => {\n onFieldCustomMatcherEntryAdd(name, customMatcherEntry);\n return () => onFieldCustomMatcherEntryRemove(name, customMatcherEntry.id);\n }, [customMatcherEntry, name, onFieldCustomMatcherEntryAdd, onFieldCustomMatcherEntryRemove]);\n const validity = validationContext.getFieldValidity(name);\n const customErrors = validationContext.getFieldCustomErrors(name);\n const hasMatchingCustomError = customErrors[id];\n const matches = forceMatch || validity && !hasBuiltInError(validity) && hasMatchingCustomError;\n if (matches) {\n return /* @__PURE__ */ jsx(FormMessageImpl, { id, ref: composedRef, ...messageProps, name, children: children ?? DEFAULT_INVALID_MESSAGE });\n }\n return null;\n }\n);\nvar FormMessageImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeForm, id: idProp, name, ...messageProps } = props;\n const ariaDescriptionContext = useAriaDescriptionContext(MESSAGE_NAME, __scopeForm);\n const _id = useId();\n const id = idProp ?? _id;\n const { onFieldMessageIdAdd, onFieldMessageIdRemove } = ariaDescriptionContext;\n React.useEffect(() => {\n onFieldMessageIdAdd(name, id);\n return () => onFieldMessageIdRemove(name, id);\n }, [name, id, onFieldMessageIdAdd, onFieldMessageIdRemove]);\n return /* @__PURE__ */ jsx(Primitive.span, { id, ...messageProps, ref: forwardedRef });\n }\n);\nvar VALIDITY_STATE_NAME = \"FormValidityState\";\nvar FormValidityState = (props) => {\n const { __scopeForm, name: nameProp, children } = props;\n const validationContext = useValidationContext(VALIDITY_STATE_NAME, __scopeForm);\n const fieldContext = useFormFieldContext(VALIDITY_STATE_NAME, __scopeForm);\n const name = nameProp ?? fieldContext.name;\n const validity = validationContext.getFieldValidity(name);\n return /* @__PURE__ */ jsx(Fragment, { children: children(validity) });\n};\nFormValidityState.displayName = VALIDITY_STATE_NAME;\nvar SUBMIT_NAME = \"FormSubmit\";\nvar FormSubmit = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeForm, ...submitProps } = props;\n return /* @__PURE__ */ jsx(Primitive.button, { type: \"submit\", ...submitProps, ref: forwardedRef });\n }\n);\nFormSubmit.displayName = SUBMIT_NAME;\nfunction validityStateToObject(validity) {\n const object = {};\n for (const key in validity) {\n object[key] = validity[key];\n }\n return object;\n}\nfunction isHTMLElement(element) {\n return element instanceof HTMLElement;\n}\nfunction isFormControl(element) {\n return \"validity\" in element;\n}\nfunction isInvalid(control) {\n return isFormControl(control) && (control.validity.valid === false || control.getAttribute(\"aria-invalid\") === \"true\");\n}\nfunction getFirstInvalidControl(form) {\n const elements = form.elements;\n const [firstInvalidControl] = Array.from(elements).filter(isHTMLElement).filter(isInvalid);\n return firstInvalidControl;\n}\nfunction isAsyncCustomMatcherEntry(entry, args) {\n return entry.match.constructor.name === \"AsyncFunction\" || returnsPromise(entry.match, args);\n}\nfunction isSyncCustomMatcherEntry(entry) {\n return entry.match.constructor.name === \"Function\";\n}\nfunction returnsPromise(func, args) {\n return func(...args) instanceof Promise;\n}\nfunction hasBuiltInError(validity) {\n let error = false;\n for (const validityKey in validity) {\n const key = validityKey;\n if (key !== \"valid\" && key !== \"customError\" && validity[key]) {\n error = true;\n break;\n }\n }\n return error;\n}\nfunction getValidAttribute(validity, serverInvalid) {\n if (validity?.valid === true && !serverInvalid) return true;\n return void 0;\n}\nfunction getInvalidAttribute(validity, serverInvalid) {\n if (validity?.valid === false || serverInvalid) return true;\n return void 0;\n}\nvar Root = Form;\nvar Field = FormField;\nvar Label = FormLabel;\nvar Control = FormControl;\nvar Message = FormMessage;\nvar ValidityState = FormValidityState;\nvar Submit = FormSubmit;\nexport {\n Control,\n Field,\n Form,\n FormControl,\n FormField,\n FormLabel,\n FormMessage,\n FormSubmit,\n FormValidityState,\n Label,\n Message,\n Root,\n Submit,\n ValidityState,\n createFormScope\n};\n//# sourceMappingURL=index.mjs.map\n","import Text_module_default from \"./Text.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Control } from \"@radix-ui/react-form\";\n//#region src/components/Form/Controls/Text/Text.tsx\n/**\n* A styled text input, for standalone use.\n*/\nvar TextInput = forwardRef(function TextInput({ className, enableLigatures, ...props }, ref) {\n\tconst classes = classNames(Text_module_default.control, className, { [Text_module_default[\"enable-ligatures\"]]: enableLigatures });\n\treturn /* @__PURE__ */ jsx(\"input\", {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes\n\t});\n});\n/**\n* A styled text input wrapped in a `Control` component, for use in Radix forms.\n*/\nvar TextControl = forwardRef(function TextControl(props, ref) {\n\treturn /* @__PURE__ */ jsx(Control, {\n\t\tasChild: true,\n\t\tchildren: /* @__PURE__ */ jsx(TextInput, {\n\t\t\tref,\n\t\t\t...props\n\t\t})\n\t});\n});\n//#endregion\nexport { TextControl, TextInput };\n\n//# sourceMappingURL=Text.js.map","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VisibilityOnIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 16q1.875 0 3.188-1.312Q16.5 13.375 16.5 11.5t-1.312-3.187T12 7 8.813 8.313 7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.787A2.6 2.6 0 0 1 9.3 11.5q0-1.125.787-1.912A2.6 2.6 0 0 1 12 8.8q1.125 0 1.912.787.788.788.788 1.913t-.787 1.912A2.6 2.6 0 0 1 12 14.2m0 4.8q-3.475 0-6.35-1.837Q2.775 15.324 1.3 12.2a.8.8 0 0 1-.1-.312 3 3 0 0 1 0-.775.8.8 0 0 1 .1-.313q1.475-3.125 4.35-4.962Q8.525 4 12 4t6.35 1.838T22.7 10.8a.8.8 0 0 1 .1.313 3 3 0 0 1 0 .774.8.8 0 0 1-.1.313q-1.475 3.125-4.35 4.963Q15.475 19 12 19m0-2a9.54 9.54 0 0 0 5.188-1.488A9.77 9.77 0 0 0 20.8 11.5a9.77 9.77 0 0 0-3.613-4.012A9.54 9.54 0 0 0 12 6a9.55 9.55 0 0 0-5.187 1.487A9.77 9.77 0 0 0 3.2 11.5a9.77 9.77 0 0 0 3.613 4.012A9.54 9.54 0 0 0 12 17\"\n })\n });\n}\n;\nVisibilityOnIcon.displayName = \"VisibilityOnIcon\";\nexport default forwardRef(VisibilityOnIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction CheckIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M9.55 17.575q-.2 0-.375-.062a.9.9 0 0 1-.325-.213L4.55 13q-.274-.274-.262-.713.012-.437.287-.712a.95.95 0 0 1 .7-.275q.425 0 .7.275L9.55 15.15l8.475-8.475q.274-.275.713-.275.437 0 .712.275.275.274.275.713 0 .437-.275.712l-9.2 9.2q-.15.15-.325.212a1.1 1.1 0 0 1-.375.063\"\n })\n });\n}\n;\nCheckIcon.displayName = \"CheckIcon\";\nexport default forwardRef(CheckIcon);","var Radio_module_default = {\n\tcontainer: \"_container_1ug7n_10\",\n\tinput: \"_input_1ug7n_18\",\n\tui: \"_ui_1ug7n_19\"\n};\n//#endregion\nexport { Radio_module_default as default };\n\n//# sourceMappingURL=Radio.module.js.map","import Radio_module_default from \"./Radio.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Control } from \"@radix-ui/react-form\";\n//#region src/components/Form/Controls/Radio/Radio.tsx\n/**\n* A radio component.\n*/\nvar RadioInput = forwardRef(function Radio({ className, ...props }, ref) {\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: classNames(Radio_module_default.container, className),\n\t\tchildren: [/* @__PURE__ */ jsx(\"input\", {\n\t\t\tref,\n\t\t\t...props,\n\t\t\tclassName: Radio_module_default.input,\n\t\t\ttype: \"radio\"\n\t\t}), /* @__PURE__ */ jsx(\"div\", { className: Radio_module_default.ui })]\n\t});\n});\nvar RadioControl = forwardRef(function RadioControl(props, ref) {\n\treturn /* @__PURE__ */ jsx(Control, {\n\t\tasChild: true,\n\t\tchildren: /* @__PURE__ */ jsx(RadioInput, {\n\t\t\tref,\n\t\t\t...props\n\t\t})\n\t});\n});\n//#endregion\nexport { RadioControl, RadioInput };\n\n//# sourceMappingURL=Radio.js.map","var Toggle_module_default = {\n\tcontainer: \"_container_udcm8_10\",\n\tinput: \"_input_udcm8_24\",\n\tui: \"_ui_udcm8_34\"\n};\n//#endregion\nexport { Toggle_module_default as default };\n\n//# sourceMappingURL=Toggle.module.js.map","import Toggle_module_default from \"./Toggle.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Control } from \"@radix-ui/react-form\";\n//#region src/components/Form/Controls/Toggle/Toggle.tsx\n/**\n* A toggle component.\n*/\nvar ToggleInput = forwardRef(function Toggle({ className, ...props }, ref) {\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: classNames(Toggle_module_default.container, className),\n\t\tchildren: [/* @__PURE__ */ jsx(\"input\", {\n\t\t\trole: \"switch\",\n\t\t\tref,\n\t\t\tclassName: Toggle_module_default.input,\n\t\t\t...props,\n\t\t\ttype: \"checkbox\"\n\t\t}), /* @__PURE__ */ jsx(\"div\", { className: Toggle_module_default.ui })]\n\t});\n});\n/**\n* A styled checkbox input wrapped in a `Control` component, for use in Radix forms.\n*/\nvar ToggleControl = forwardRef(function ToggleControl(props, ref) {\n\treturn /* @__PURE__ */ jsx(Control, {\n\t\tasChild: true,\n\t\tchildren: /* @__PURE__ */ jsx(ToggleInput, {\n\t\t\tref,\n\t\t\t...props\n\t\t})\n\t});\n});\n//#endregion\nexport { ToggleControl, ToggleInput };\n\n//# sourceMappingURL=Toggle.js.map","var EditInPlace_module_default = {\n\tcontrols: \"_controls_17lij_8\",\n\t\"button-group\": \"_button-group_17lij_18\"\n};\n//#endregion\nexport { EditInPlace_module_default as default };\n\n//# sourceMappingURL=EditInPlace.module.js.map","var form_module_default = {\n\troot: \"_root_1o4d9_17\",\n\tfield: \"_field_1o4d9_27\",\n\t\"inline-field\": \"_inline-field_1o4d9_33\",\n\t\"inline-field-body\": \"_inline-field-body_1o4d9_39\",\n\t\"inline-field-control\": \"_inline-field-control_1o4d9_45\",\n\tlabel: \"_label_1o4d9_60\",\n\tmessage: \"_message_1o4d9_86\",\n\t\"help-message\": \"_help-message_1o4d9_92\",\n\t\"error-message\": \"_error-message_1o4d9_96\",\n\t\"success-message\": \"_success-message_1o4d9_100\"\n};\n//#endregion\nexport { form_module_default as default };\n\n//# sourceMappingURL=form.module.js.map","import form_module_default from \"./form.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Label } from \"@radix-ui/react-form\";\n//#region src/components/Form/Label.tsx\n/**\n* Thin wrapper around Radix UI Label component\n* https://www.radix-ui.com/docs/primitives/components/form#label\n*/\nvar Label$1 = forwardRef(function Label$2({ children, ...props }, ref) {\n\tconst classes = classNames(form_module_default.label, props.className);\n\treturn /* @__PURE__ */ jsx(Label, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren\n\t});\n});\n//#endregion\nexport { Label$1 as Label };\n\n//# sourceMappingURL=Label.js.map","var InlineSpinner_module_default = {\n\ticon: \"_icon_1855a_18\",\n\tspin: \"_spin_1855a_1\"\n};\n//#endregion\nexport { InlineSpinner_module_default as default };\n\n//# sourceMappingURL=InlineSpinner.module.js.map","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction SpinnerIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 4.031a8 8 0 1 0 8 8 1 1 0 0 1 2 0c0 5.523-4.477 10-10 10s-10-4.477-10-10 4.477-10 10-10a1 1 0 1 1 0 2\",\n clipRule: \"evenodd\"\n })\n });\n}\n;\nSpinnerIcon.displayName = \"SpinnerIcon\";\nexport default forwardRef(SpinnerIcon);","import InlineSpinner_module_default from \"./InlineSpinner.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport SpinnerIcon from \"@vector-im/compound-design-tokens/assets/web/icons/spinner\";\n//#region src/components/InlineSpinner/InlineSpinner.tsx\nvar InlineSpinner = forwardRef(function InlineSpinner({ size = 20, className, ...props }, ref) {\n\treturn /* @__PURE__ */ jsx(SpinnerIcon, {\n\t\tref,\n\t\tclassName: classNames(InlineSpinner_module_default.icon, className),\n\t\tstyle: {\n\t\t\twidth: size,\n\t\t\theight: size\n\t\t},\n\t\t...props\n\t});\n});\n//#endregion\nexport { InlineSpinner };\n\n//# sourceMappingURL=InlineSpinner.js.map","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction CheckCircleSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"m10.6 13.8-2.15-2.15a.95.95 0 0 0-.7-.275.95.95 0 0 0-.7.275.95.95 0 0 0-.275.7q0 .425.275.7L9.9 15.9q.3.3.7.3t.7-.3l5.65-5.65a.95.95 0 0 0 .275-.7.95.95 0 0 0-.275-.7.95.95 0 0 0-.7-.275.95.95 0 0 0-.7.275zM12 22a9.7 9.7 0 0 1-3.9-.788 10.1 10.1 0 0 1-3.175-2.137q-1.35-1.35-2.137-3.175A9.7 9.7 0 0 1 2 12q0-2.075.788-3.9a10.1 10.1 0 0 1 2.137-3.175q1.35-1.35 3.175-2.137A9.7 9.7 0 0 1 12 2q2.075 0 3.9.788a10.1 10.1 0 0 1 3.175 2.137q1.35 1.35 2.137 3.175A9.7 9.7 0 0 1 22 12a9.7 9.7 0 0 1-.788 3.9 10.1 10.1 0 0 1-2.137 3.175q-1.35 1.35-3.175 2.137A9.7 9.7 0 0 1 12 22\"\n })\n });\n}\n;\nCheckCircleSolidIcon.displayName = \"CheckCircleSolidIcon\";\nexport default forwardRef(CheckCircleSolidIcon);","import form_module_default from \"./form.module.js\";\nimport { InlineSpinner } from \"../InlineSpinner/InlineSpinner.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport ErrorIcon from \"@vector-im/compound-design-tokens/assets/web/icons/error-solid\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Message } from \"@radix-ui/react-form\";\nimport CheckCircleSolidIcon from \"@vector-im/compound-design-tokens/assets/web/icons/check-circle-solid\";\n//#region src/components/Form/Message.tsx\n/**\n* An error message to display below a form control.\n*/\nvar ErrorMessage = forwardRef(function ErrorMessage({ children, className, ...props }, ref) {\n\tconst classes = classNames(form_module_default.message, form_module_default[\"error-message\"], className);\n\treturn /* @__PURE__ */ jsxs(Message, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren: [/* @__PURE__ */ jsx(ErrorIcon, {}), children]\n\t});\n});\n/**\n* A success message to display below a form control.\n*/\nvar SuccessMessage = forwardRef(function SuccessMessage({ children, className, ...props }, ref) {\n\tconst classes = classNames(form_module_default.message, form_module_default[\"success-message\"], className);\n\treturn /* @__PURE__ */ jsxs(Message, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren: [/* @__PURE__ */ jsx(CheckCircleSolidIcon, {}), children]\n\t});\n});\n/**\n* A message showing a loading state\n*/\nvar LoadingMessage = forwardRef(function LoadingMessage({ children, className, ...props }, ref) {\n\tconst classes = classNames(form_module_default.message, className);\n\treturn /* @__PURE__ */ jsxs(Message, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren: [/* @__PURE__ */ jsx(InlineSpinner, {}), children]\n\t});\n});\n/**\n* A help message to display below a form control.\n*/\nvar HelpMessage = forwardRef(function HelpMessage({ children, className, ...props }, ref) {\n\tconst classes = classNames(form_module_default.message, form_module_default[\"help-message\"], className);\n\treturn /* @__PURE__ */ jsx(Message, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren\n\t});\n});\n//#endregion\nexport { ErrorMessage, HelpMessage, LoadingMessage, SuccessMessage };\n\n//# sourceMappingURL=Message.js.map","import form_module_default from \"./form.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Root } from \"@radix-ui/react-form\";\n//#region src/components/Form/Root.tsx\n/**\n* Thin wrapper around Radix UI Root component\n* https://www.radix-ui.com/docs/primitives/components/form#root\n*/\nvar Root$1 = forwardRef(function Root$2({ children, ...props }, ref) {\n\tconst classes = classNames(form_module_default.root, props.className);\n\treturn /* @__PURE__ */ jsx(Root, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren\n\t});\n});\n//#endregion\nexport { Root$1 as Root };\n\n//# sourceMappingURL=Root.js.map","import form_module_default from \"./form.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { Field } from \"@radix-ui/react-form\";\n//#region src/components/Form/Field.tsx\n/**\n* Thin wrapper around Radix UI Field component\n* https://www.radix-ui.com/docs/primitives/components/form#field\n*/\nvar Field$1 = forwardRef(function Field$2({ children, ...props }, ref) {\n\tconst classes = classNames(form_module_default.field, props.className);\n\treturn /* @__PURE__ */ jsx(Field, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren\n\t});\n});\n//#endregion\nexport { Field$1 as Field };\n\n//# sourceMappingURL=Field.js.map","import { Button } from \"../../../Button/Button.js\";\nimport { Tooltip } from \"../../../Tooltip/Tooltip.js\";\nimport { TextControl } from \"../Text/Text.js\";\nimport EditInPlace_module_default from \"./EditInPlace.module.js\";\nimport { Label as Label$1 } from \"../../Label.js\";\nimport { HelpMessage, LoadingMessage, SuccessMessage } from \"../../Message.js\";\nimport { Root as Root$1 } from \"../../Root.js\";\nimport { Field as Field$1 } from \"../../Field.js\";\nimport { forwardRef, useCallback, useEffect, useReducer, useRef, useState } from \"react\";\nimport CloseIcon from \"@vector-im/compound-design-tokens/assets/web/icons/close\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Submit, ValidityState } from \"@radix-ui/react-form\";\nimport Check from \"@vector-im/compound-design-tokens/assets/web/icons/check\";\n//#region src/components/Form/Controls/EditInPlace/EditInPlace.tsx\nfunction reducer(state, action) {\n\tswitch (action) {\n\t\tcase 0: if (state === 0 || state === 3) return 1;\n\t\telse return state;\n\t\tcase 1: return 2;\n\t\tcase 4: return 0;\n\t\tcase 2: if (state === 2) return 3;\n\t\telse return state;\n\t\tcase 3: if (state === 2) return 0;\n\t\telse return state;\n\t\tcase 5: if (state === 3) return 0;\n\t\telse return state;\n\t}\n\tassertNever(action);\n}\nfunction assertNever(value) {\n\tthrow new Error(`Unreachable value: ${value}`);\n}\n/**\n* A text box with save/cancel buttons that appear when the field is active.\n* Since thios control has its own 'save' button, it should *not* appear as part\n* of a larger form: it exists as its own form that submits separately.\n*/\nvar EditInPlace = forwardRef(function EditInPlace({ className, label, onSave, onCancel, onInput, onClearServerErrors, serverInvalid, saveButtonLabel, cancelButtonLabel, savedLabel, savingLabel, helpLabel, disabled, children, ...props }, ref) {\n\tconst [state, dispatch] = useReducer(reducer, 0);\n\tconst isFocusWithinRef = useRef(false);\n\tconst [isFocusWithin, setFocusWithin] = useState(false);\n\tconst shouldShowSaveButton = state === 1 || state === 2 || isFocusWithin;\n\tconst hideTimer = useRef(void 0);\n\tuseEffect(() => {\n\t\tif (state === 3) hideTimer.current = setTimeout(() => {\n\t\t\tdispatch(5);\n\t\t\thideTimer.current = void 0;\n\t\t}, 2e3);\n\t\treturn () => {\n\t\t\tif (hideTimer.current) clearTimeout(hideTimer.current);\n\t\t\thideTimer.current = void 0;\n\t\t};\n\t}, [state]);\n\tconst formRef = useRef(null);\n\tconst saveButtonRef = useRef(null);\n\tconst cancelButtonRef = useRef(null);\n\tconst onFocus = useCallback(() => {\n\t\tif (isFocusWithinRef.current) return;\n\t\tisFocusWithinRef.current = true;\n\t\tsetFocusWithin(true);\n\t}, [isFocusWithin, setFocusWithin]);\n\tconst onBlur = useCallback((e) => {\n\t\tif (!isFocusWithinRef.current) return;\n\t\tif (e.currentTarget.contains(e.relatedTarget)) return;\n\t\tisFocusWithinRef.current = false;\n\t\tsetFocusWithin(false);\n\t}, [isFocusWithin, setFocusWithin]);\n\tconst onInputHandler = useCallback((e) => {\n\t\tdispatch(0);\n\t\tonInput?.(e);\n\t}, [dispatch, onInput]);\n\treturn /* @__PURE__ */ jsx(Root$1, {\n\t\tclassName,\n\t\tonSubmit: useCallback(async (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (state === 0) return;\n\t\t\ttry {\n\t\t\t\tdispatch(1);\n\t\t\t\tsaveButtonRef.current?.blur();\n\t\t\t\tawait onSave?.(e);\n\t\t\t\tdispatch(2);\n\t\t\t} catch {\n\t\t\t\tdispatch(3);\n\t\t\t}\n\t\t}, [\n\t\t\tonSave,\n\t\t\tstate,\n\t\t\thideTimer\n\t\t]),\n\t\tonReset: useCallback((e) => {\n\t\t\tcancelButtonRef.current?.blur();\n\t\t\tonCancel?.(e);\n\t\t\tdispatch(4);\n\t\t}, [cancelButtonRef, onCancel]),\n\t\tonFocus,\n\t\tonBlur,\n\t\tonClearServerErrors,\n\t\tref: formRef,\n\t\tchildren: /* @__PURE__ */ jsxs(Field$1, {\n\t\t\tname: \"input\",\n\t\t\tserverInvalid,\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(Label$1, { children: label }),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: EditInPlace_module_default.controls,\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(TextControl, {\n\t\t\t\t\t\tref,\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tonInput: onInputHandler,\n\t\t\t\t\t\tdisabled: disabled || state === 2\n\t\t\t\t\t}), shouldShowSaveButton && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: EditInPlace_module_default[\"button-group\"],\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Tooltip, {\n\t\t\t\t\t\t\tlabel: saveButtonLabel,\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Submit, {\n\t\t\t\t\t\t\t\tasChild: true,\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Button, {\n\t\t\t\t\t\t\t\t\ttype: \"submit\",\n\t\t\t\t\t\t\t\t\tkind: \"primary\",\n\t\t\t\t\t\t\t\t\tsize: \"md\",\n\t\t\t\t\t\t\t\t\tref: saveButtonRef,\n\t\t\t\t\t\t\t\t\tdisabled: state !== 1,\n\t\t\t\t\t\t\t\t\ticonOnly: true,\n\t\t\t\t\t\t\t\t\tIcon: Check\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}), /* @__PURE__ */ jsx(Tooltip, {\n\t\t\t\t\t\t\tlabel: cancelButtonLabel,\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Button, {\n\t\t\t\t\t\t\t\ttype: \"reset\",\n\t\t\t\t\t\t\t\tkind: \"secondary\",\n\t\t\t\t\t\t\t\tsize: \"md\",\n\t\t\t\t\t\t\t\tref: cancelButtonRef,\n\t\t\t\t\t\t\t\tclassName: EditInPlace_module_default.button,\n\t\t\t\t\t\t\t\tdisabled: state === 2,\n\t\t\t\t\t\t\t\ticonOnly: true,\n\t\t\t\t\t\t\t\tIcon: CloseIcon\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})]\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\tstate === 2 ? /* @__PURE__ */ jsx(LoadingMessage, { children: savingLabel }) : children,\n\t\t\t\tsavedLabel && state === 3 && /* @__PURE__ */ jsx(SuccessMessage, { children: savedLabel }),\n\t\t\t\thelpLabel && (state === 0 || state === 1) && /* @__PURE__ */ jsx(ValidityState, { children: (validity) => (validity === void 0 || validity.valid) && !serverInvalid && /* @__PURE__ */ jsx(HelpMessage, { children: helpLabel }) })\n\t\t\t]\n\t\t})\n\t});\n});\n//#endregion\nexport { EditInPlace };\n\n//# sourceMappingURL=EditInPlace.js.map","import form_module_default from \"./form.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Field } from \"@radix-ui/react-form\";\n//#region src/components/Form/InlineField.tsx\nvar InlineField = forwardRef(function InlineField({ className, control, children, ...props }, ref) {\n\tconst classes = classNames(form_module_default[\"inline-field\"], className);\n\treturn /* @__PURE__ */ jsxs(Field, {\n\t\tref,\n\t\t...props,\n\t\tclassName: classes,\n\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: form_module_default[\"inline-field-control\"],\n\t\t\tchildren: control\n\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: form_module_default[\"inline-field-body\"],\n\t\t\tchildren\n\t\t})]\n\t});\n});\n//#endregion\nexport { InlineField };\n\n//# sourceMappingURL=InlineField.js.map","var Separator_module_default = { separator: \"_separator_13qwf_8\" };\n//#endregion\nexport { Separator_module_default as default };\n\n//# sourceMappingURL=Separator.module.js.map","// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","import Separator_module_default from \"./Separator.module.js\";\nimport classNames from \"classnames\";\nimport { forwardRef, useEffect, useRef } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport * as RadixSeparator from \"@radix-ui/react-separator\";\n//#region src/components/Separator/Separator.tsx\nvar SPACING_CUSTOM_PROP = \"--cpd-separator-spacing\";\n/**\n* A separator component.\n*/\nvar Separator = forwardRef(({ className, spacing, kind = \"primary\", ...props }, theirRef) => {\n\tconst classes = classNames(Separator_module_default.separator, className);\n\tconst ourRef = useRef(null);\n\tconst ref = useMergeRefs([ourRef, theirRef]);\n\tuseEffect(() => {\n\t\tconst style = ourRef.current?.style;\n\t\tif (spacing) style?.setProperty(SPACING_CUSTOM_PROP, spacing);\n\t\telse style?.removeProperty(SPACING_CUSTOM_PROP);\n\t}, [spacing]);\n\treturn /* @__PURE__ */ jsx(RadixSeparator.Root, {\n\t\t...props,\n\t\tclassName: classes,\n\t\tref,\n\t\t\"data-kind\": kind\n\t});\n});\nSeparator.displayName = \"Separator\";\n//#endregion\nexport { Separator };\n\n//# sourceMappingURL=Separator.js.map","import { MenuItem } from \"./MenuItem.js\";\nimport { ToggleInput } from \"../Form/Controls/Toggle/Toggle.js\";\nimport { forwardRef, useCallback, useId } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/components/Menu/ToggleMenuItem.tsx\n/**\n* A menu item with a toggle control.\n* Must be used within a compound Menu or other `menu` or `menubar` aria role subtree.\n*/\nvar ToggleMenuItem = forwardRef(function ToggleMenuItem({ className, Icon, label, onSelect, checked, disabled, onClick }, ref) {\n\treturn /* @__PURE__ */ jsx(MenuItem, {\n\t\tas: \"button\",\n\t\trole: \"menuitemcheckbox\",\n\t\t\"aria-checked\": checked,\n\t\tclassName,\n\t\tIcon,\n\t\tlabel,\n\t\thideChevron: true,\n\t\tonSelect,\n\t\tdisabled,\n\t\tonClick,\n\t\tchildren: /* @__PURE__ */ jsx(ToggleInput, {\n\t\t\tid: useId(),\n\t\t\tref,\n\t\t\t\"aria-hidden\": true,\n\t\t\ttabIndex: -1,\n\t\t\tchecked,\n\t\t\tdisabled,\n\t\t\tonChange: useCallback(() => {}, [])\n\t\t})\n\t});\n});\n//#endregion\nexport { ToggleMenuItem };\n\n//# sourceMappingURL=ToggleMenuItem.js.map","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ChevronDownIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 14.95q-.2 0-.375-.062a.9.9 0 0 1-.325-.213l-4.6-4.6a.95.95 0 0 1-.275-.7q0-.425.275-.7a.95.95 0 0 1 .7-.275q.425 0 .7.275l3.9 3.9 3.9-3.9a.95.95 0 0 1 .7-.275q.425 0 .7.275a.95.95 0 0 1 .275.7.95.95 0 0 1-.275.7l-4.6 4.6q-.15.15-.325.212a1.1 1.1 0 0 1-.375.063\"\n })\n });\n}\n;\nChevronDownIcon.displayName = \"ChevronDownIcon\";\nexport default forwardRef(ChevronDownIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ChevronLeftIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"m13.3 17.3-4.6-4.6a.9.9 0 0 1-.213-.325A1.1 1.1 0 0 1 8.425 12q0-.2.062-.375A.9.9 0 0 1 8.7 11.3l4.6-4.6a.95.95 0 0 1 .7-.275q.425 0 .7.275a.95.95 0 0 1 .275.7.95.95 0 0 1-.275.7L10.8 12l3.9 3.9a.95.95 0 0 1 .275.7.95.95 0 0 1-.275.7.95.95 0 0 1-.7.275.95.95 0 0 1-.7-.275\"\n })\n });\n}\n;\nChevronLeftIcon.displayName = \"ChevronLeftIcon\";\nexport default forwardRef(ChevronLeftIcon);","const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return '' + object;\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = (obj, path, keySeparator = '.') => {\n if (!obj) return undefined;\n if (obj[path]) {\n if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;\n return obj[path];\n }\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code?.replace(/_/g, '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n console?.[type]?.apply?.(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger, options = {}) {\n this.init(concreteLogger, options);\n }\n init(concreteLogger, options = {}) {\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log(...args) {\n return this.forward(args, 'log', '', true);\n }\n warn(...args) {\n return this.forward(args, 'warn', '', true);\n }\n error(...args) {\n return this.forward(args, 'error', '');\n }\n deprecate(...args) {\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n emit(event, ...args) {\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer.apply(observer, [event, ...args]);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data, options = {\n ns: ['translation'],\n defaultNS: 'translation'\n }) {\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key, options = {}) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.indexOf('.') > -1) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data?.[lng]?.[ns], key, keySeparator);\n }\n addResource(lng, ns, key, value, options = {\n silent: false\n }) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources, options = {\n silent: false\n }) {\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite, options = {\n silent: false,\n skipCopy: false\n }) {\n let path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n value = this.processors[processor]?.process(value, key, options, translator) ?? value;\n });\n return value;\n }\n};\n\nconst PATH_KEY = Symbol('i18next/PATH_KEY');\nfunction createProxy() {\n const state = [];\n const handler = Object.create(null);\n let proxy;\n handler.get = (target, key) => {\n proxy?.revoke?.();\n if (key === PATH_KEY) return state;\n state.push(key);\n proxy = Proxy.revocable(target, handler);\n return proxy.proxy;\n };\n return Proxy.revocable(Object.create(null), handler).proxy;\n}\nfunction keysFromSelector(selector, opts) {\n const {\n [PATH_KEY]: path\n } = selector(createProxy());\n const keySeparator = opts?.keySeparator ?? '.';\n const nsSeparator = opts?.nsSeparator ?? ':';\n if (path.length > 1 && nsSeparator) {\n const ns = opts?.ns;\n const nsArray = Array.isArray(ns) ? ns : null;\n if (nsArray && nsArray.length > 1 && nsArray.slice(1).includes(path[0])) {\n return `${path[0]}${nsSeparator}${path.slice(1).join(keySeparator)}`;\n }\n }\n return path.join(keySeparator);\n}\n\nconst checkedLoadedFor = {};\nconst shouldHandleAsObject = res => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\nclass Translator extends EventEmitter {\n constructor(services, options = {}) {\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key, o = {\n interpolation: {}\n }) {\n const opt = {\n ...o\n };\n if (key == null) return false;\n const resolved = this.resolve(key, opt);\n if (resolved?.res === undefined) return false;\n const isObject = shouldHandleAsObject(resolved.res);\n if (opt.returnObjects === false && isObject) {\n return false;\n }\n return true;\n }\n extractFromKey(key, opt) {\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n let namespaces = opt.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, o, lastKey) {\n let opt = typeof o === 'object' ? {\n ...o\n } : o;\n if (typeof opt !== 'object' && this.options.overloadTranslationOptionHandler) {\n opt = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof opt === 'object') opt = {\n ...opt\n };\n if (!opt) opt = {};\n if (keys == null) return '';\n if (typeof keys === 'function') keys = keysFromSelector(keys, {\n ...this.options,\n ...opt\n });\n if (!Array.isArray(keys)) keys = [String(keys)];\n keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : String(k));\n const returnDetails = opt.returnDetails !== undefined ? opt.returnDetails : this.options.returnDetails;\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], opt);\n const namespace = namespaces[namespaces.length - 1];\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const lng = opt.lng || this.language;\n const appendNamespaceToCIMode = opt.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng?.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, opt);\n let res = resolved?.res;\n const resUsedKey = resolved?.usedKey || key;\n const resExactUsedKey = resolved?.exactUsedKey || key;\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = opt.joinArrays !== undefined ? opt.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const hasDefaultValue = Translator.hasDefaultValue(opt);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, opt) : '';\n const defaultValueSuffixOrdinalFallback = opt.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const defaultValue = needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] || opt[`defaultValue${defaultValueSuffix}`] || opt[`defaultValue${defaultValueSuffixOrdinalFallback}`] || opt.defaultValue;\n let resForObjHndl = res;\n if (handleAsObjectInI18nFormat && !res && hasDefaultValue) {\n resForObjHndl = defaultValue;\n }\n const handleAsObject = shouldHandleAsObject(resForObjHndl);\n const resType = Object.prototype.toString.apply(resForObjHndl);\n if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {\n if (!opt.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, {\n ...opt,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(resForObjHndl);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in resForObjHndl) {\n if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n if (hasDefaultValue && !res) {\n copy[m] = this.translate(deepKey, {\n ...opt,\n defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n } else {\n copy[m] = this.translate(deepKey, {\n ...opt,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n }\n if (copy[m] === deepKey) copy[m] = resForObjHndl[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, opt, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = opt.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...opt,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, opt.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(opt.lng || this.language);\n } else {\n lngs.push(opt.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, opt);\n } else if (this.backendConnector?.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, opt);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, opt);\n if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, opt[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, opt, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) {\n res = `${namespace}${nsSeparator}${key}`;\n }\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}${nsSeparator}${key}` : key, usedDefault ? res : undefined, opt);\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, opt, resolved, lastKey) {\n if (this.i18nFormat?.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...opt\n }, opt.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!opt.skipInterpolation) {\n if (opt.interpolation) this.interpolator.init({\n ...opt,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...opt.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (opt?.interpolation?.skipOnVariables !== undefined ? opt.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = opt.replace && !isString(opt.replace) ? opt.replace : opt;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, opt.lng || this.language || resolved.usedLng, opt);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) opt.nest = false;\n }\n if (!opt.lng && resolved && resolved.res) opt.lng = this.language || resolved.usedLng;\n if (opt.nest !== false) res = this.interpolator.nest(res, (...args) => {\n if (lastKey?.[0] === args[0] && !opt.context) {\n this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return this.translate(...args, key);\n }, opt);\n if (opt.interpolation) this.interpolator.reset();\n }\n const postProcess = opt.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res != null && postProcessorNames?.length && opt.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(opt)\n },\n ...opt\n } : opt, this);\n }\n return res;\n }\n resolve(keys, opt = {}) {\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n if (Array.isArray(keys)) keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : k);\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, opt);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const needsContextHandling = opt.context !== undefined && (isString(opt.context) || typeof opt.context === 'number') && opt.context !== '';\n const codes = opt.lngs ? opt.lngs : this.languageUtils.toResolveHierarchy(opt.lng || this.language, opt.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat?.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, opt);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, opt.count, opt);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator || '_'}${opt.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, opt);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key, options = {}) {\n if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails(options = {}) {\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.indexOf('-') > -1) {\n let formattedCode;\n try {\n formattedCode = Intl.getCanonicalLocales(code)[0];\n } catch (e) {}\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n if (this.options.lowerCaseLng) {\n return code.toLowerCase();\n }\n return code;\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngScOnly = this.getScriptPartFromCode(code);\n if (this.isSupportedCode(lngScOnly)) return found = lngScOnly;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return supportedLng;\n if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n if (supportedLng.indexOf('-') > 0 && lngOnly.indexOf('-') < 0 && supportedLng.substring(0, supportedLng.indexOf('-')) === lngOnly) return supportedLng;\n if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes((fallbackCode === false ? [] : fallbackCode) || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst dummyRule = {\n select: count => count === 1 ? 'one' : 'other',\n resolvedOptions: () => ({\n pluralCategories: ['one', 'other']\n })\n};\nclass PluralResolver {\n constructor(languageUtils, options = {}) {\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.pluralRulesCache = {};\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code, options = {}) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (typeof Intl === 'undefined') {\n this.logger.error('No Intl support, please use an Intl polyfill!');\n return dummyRule;\n }\n if (!code.match(/-|_/)) return dummyRule;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n needsPlural(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n return rule?.resolvedOptions().pluralCategories.length > 1;\n }\n getPluralFormsOfKey(code, key, options = {}) {\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n if (!rule) return [];\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n getSuffix(code, count, options = {}) {\n const rule = this.getRule(code, options);\n if (rule) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return this.getSuffix('dev', count, options);\n }\n}\n\nconst deepFindWithDefaults = (data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true) => {\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor(options = {}) {\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options?.interpolation?.format || (value => value);\n this.init(options);\n }\n init(options = {}) {\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp?.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\\\))*?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (key.indexOf(this.formatSeparator) < 0) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc, options = {}) {\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n const c = key.split(new RegExp(`${regexEscape(sep)}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes || (matchedDoubleQuotes?.length ?? 0) % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n const keyEndIndex = /{.*}/.test(match[1]) ? match[1].lastIndexOf('}') + 1 : match[1].indexOf(this.formatSeparator);\n if (keyEndIndex !== -1) {\n formatters = match[1].slice(keyEndIndex).split(this.formatSeparator).map(elem => elem.trim()).filter(Boolean);\n match[1] = match[1].slice(0, keyEndIndex);\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (formatters.length) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (v, l, o) => {\n let optForCache = o;\n if (o && o.interpolationkey && o.formatParams && o.formatParams[o.interpolationkey] && o[o.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [o.interpolationkey]: undefined\n };\n }\n const key = l + JSON.stringify(optForCache);\n let frm = cache[key];\n if (!frm) {\n frm = fn(getCleanedCode(l), o);\n cache[key] = frm;\n }\n return frm(v);\n };\n};\nconst createNonCachedFormatter = fn => (v, l, o) => fn(getCleanedCode(l), o)(v);\nclass Formatter {\n constructor(options = {}) {\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.init(options);\n }\n init(services, options = {\n interpolation: {}\n }) {\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n const cf = options.cacheInBuiltFormats ? createCachedFormatter : createNonCachedFormatter;\n this.formats = {\n number: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: cf((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: cf((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: cf((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng, options = {}) {\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && formats[0].indexOf(')') < 0 && formats.find(f => f.indexOf(')') > -1)) {\n const lastIndex = formats.findIndex(f => f.indexOf(')') > -1);\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options?.formatParams?.[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services, options = {}) {\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n this.backend?.init?.(services, options.backend, options);\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) {\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces, options = {}, callback) {\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name, prefix = '') {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}) {\n if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend?.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initAsync: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: value => value,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n },\n cacheInBuiltFormats: true\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs?.indexOf?.('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n if (typeof options.initImmediate === 'boolean') options.initAsync = options.initImmediate;\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nconst SUPPORT_NOTICE_KEY = '__i18next_supportNoticeShown';\nconst getSupportNoticeShown = () => {\n if (typeof globalThis !== 'undefined' && !!globalThis[SUPPORT_NOTICE_KEY]) return true;\n if (typeof process !== 'undefined' && process.env && process.env.I18NEXT_NO_SUPPORT_NOTICE) return true;\n if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'production') return true;\n return false;\n};\nconst setSupportNoticeShown = () => {\n if (typeof globalThis !== 'undefined') globalThis[SUPPORT_NOTICE_KEY] = true;\n};\nconst usesLocize = inst => {\n if (inst?.modules?.backend?.name?.indexOf('Locize') > 0) return true;\n if (inst?.modules?.backend?.constructor?.name?.indexOf('Locize') > 0) return true;\n if (inst?.options?.backend?.backends) {\n if (inst.options.backend.backends.some(b => b?.name?.indexOf('Locize') > 0 || b?.constructor?.name?.indexOf('Locize') > 0)) return true;\n }\n if (inst?.options?.backend?.projectId) return true;\n if (inst?.options?.backend?.backendOptions) {\n if (inst.options.backend.backendOptions.some(b => b?.projectId)) return true;\n }\n return false;\n};\nclass I18n extends EventEmitter {\n constructor(options = {}, callback) {\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initAsync) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init(options = {}, callback) {\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (options.defaultNS == null && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n if (typeof this.options.overloadTranslationOptionHandler !== 'function') {\n this.options.overloadTranslationOptionHandler = defOpts.overloadTranslationOptionHandler;\n }\n if (this.options.showSupportNotice !== false && !usesLocize(this) && !getSupportNoticeShown()) {\n if (typeof console !== 'undefined' && typeof console.info !== 'undefined') console.info('🌐 i18next is made possible by our own product, Locize — consider powering your project with managed localization (AI, CDN, integrations): https://locize.com 💙');\n setSupportNoticeShown();\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n const usingLegacyFormatFunction = this.options.interpolation.format && this.options.interpolation.format !== defOpts.interpolation.format;\n if (usingLegacyFormatFunction) {\n this.logger.deprecate(`init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting`);\n }\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n if (s.formatter.init) s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = (...args) => this.store[fcName](...args);\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = (...args) => {\n this.store[fcName](...args);\n return this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initAsync) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language, callback = noop) {\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n this.options.preload?.forEach?.(l => append(l));\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n if (!this.resolvedLanguage && this.languages.indexOf(l) < 0 && this.store.hasLanguageSomeTranslations(l)) {\n this.resolvedLanguage = l;\n this.languages.unshift(l);\n }\n }\n changeLanguage(lng, callback) {\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n if (this.isLanguageChangingTo === lng) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n }\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve((...args) => this.t(...args));\n if (callback) callback(err, (...args) => this.t(...args));\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const fl = isString(lngs) ? lngs : lngs && lngs[0];\n const l = this.store.hasLanguageSomeTranslations(fl) ? fl : this.services.languageUtils.getBestMatchFromCodes(isString(lngs) ? [lngs] : lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n this.services.languageDetector?.cacheUserLanguage?.(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n const fixedT = (key, opts, ...rest) => {\n let o;\n if (typeof opts !== 'object') {\n o = this.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n o = {\n ...opts\n };\n }\n o.lng = o.lng || fixedT.lng;\n o.lngs = o.lngs || fixedT.lngs;\n o.ns = o.ns || fixedT.ns;\n if (o.keyPrefix !== '') o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const selectorOpts = {\n ...this.options,\n ...o\n };\n if (typeof o.keyPrefix === 'function') o.keyPrefix = keysFromSelector(o.keyPrefix, selectorOpts);\n const keySeparator = this.options.keySeparator || '.';\n let resultKey;\n if (o.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => {\n if (typeof k === 'function') k = keysFromSelector(k, selectorOpts);\n return `${o.keyPrefix}${keySeparator}${k}`;\n });\n } else {\n if (typeof key === 'function') key = keysFromSelector(key, selectorOpts);\n resultKey = o.keyPrefix ? `${o.keyPrefix}${keySeparator}${key}` : key;\n }\n return this.t(resultKey, o);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t(...args) {\n return this.translator?.translate(...args);\n }\n exists(...args) {\n return this.translator?.exists(...args);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns, options = {}) {\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n try {\n const l = new Intl.Locale(lng);\n if (l && l.getTextInfo) {\n const ti = l.getTextInfo();\n if (ti && ti.direction) return ti.direction;\n }\n } catch (e) {}\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services?.languageUtils || new LanguageUtil(get());\n if (lng.toLowerCase().indexOf('-latn') > 1) return 'ltr';\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance(options = {}, callback) {\n const instance = new I18n(options, callback);\n instance.createInstance = I18n.createInstance;\n return instance;\n }\n cloneInstance(options = {}, callback = noop) {\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n const clonedData = Object.keys(this.store.data).reduce((prev, l) => {\n prev[l] = {\n ...this.store.data[l]\n };\n prev[l] = Object.keys(prev[l]).reduce((acc, n) => {\n acc[n] = {\n ...prev[l][n]\n };\n return acc;\n }, prev[l]);\n return prev;\n }, {});\n clone.store = new ResourceStore(clonedData, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n if (options.interpolation) {\n const defOpts = get();\n const mergedInterpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation,\n ...options.interpolation\n };\n const mergedForInterpolator = {\n ...mergedOptions,\n interpolation: mergedInterpolation\n };\n clone.services.interpolator = new Interpolator(mergedForInterpolator);\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', (event, ...args) => {\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, keysFromSelector as keyFromSelector, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n","import e from\"void-elements\";var t=/\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;function n(n){var r={type:\"tag\",name:\"\",voidElement:!1,attrs:{},children:[]},i=n.match(/<\\/?([^\\s]+?)[/\\s>]/);if(i&&(r.name=i[1],(e[i[1]]||\"/\"===n.charAt(n.length-2))&&(r.voidElement=!0),r.name.startsWith(\"!--\"))){var s=n.indexOf(\"--\\x3e\");return{type:\"comment\",comment:-1!==s?n.slice(4,s):\"\"}}for(var a=new RegExp(t),c=null;null!==(c=a.exec(n));)if(c[0].trim())if(c[1]){var o=c[1].trim(),l=[o,\"\"];o.indexOf(\"=\")>-1&&(l=o.split(\"=\")),r.attrs[l[0]]=l[1],a.lastIndex--}else c[2]&&(r.attrs[c[2]]=c[3].trim().substring(1,c[3].length-1));return r}var r=/<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g,i=/^\\s*$/,s=Object.create(null);function a(e,t){switch(t.type){case\"text\":return e+t.content;case\"tag\":return e+=\"<\"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'=\"'+e[n]+'\"');return t.length?\" \"+t.join(\" \"):\"\"}(t.attrs):\"\")+(t.voidElement?\"/>\":\">\"),t.voidElement?e:e+t.children.reduce(a,\"\")+\"</\"+t.name+\">\";case\"comment\":return e+\"\\x3c!--\"+t.comment+\"--\\x3e\"}}var c={parse:function(e,t){t||(t={}),t.components||(t.components=s);var a,c=[],o=[],l=-1,m=!1;if(0!==e.indexOf(\"<\")){var u=e.indexOf(\"<\");c.push({type:\"text\",content:-1===u?e:e.substring(0,u)})}return e.replace(r,function(r,s){if(m){if(r!==\"</\"+a.name+\">\")return;m=!1}var u,f=\"/\"!==r.charAt(1),h=r.startsWith(\"\\x3c!--\"),p=s+r.length,d=e.charAt(p);if(h){var v=n(r);return l<0?(c.push(v),c):((u=o[l]).children.push(v),c)}if(f&&(l++,\"tag\"===(a=n(r)).type&&t.components[a.name]&&(a.type=\"component\",m=!0),a.voidElement||m||!d||\"<\"===d||a.children.push({type:\"text\",content:e.slice(p,e.indexOf(\"<\",p))}),0===l&&c.push(a),(u=o[l-1])&&u.children.push(a),o[l]=a),(!f||a.voidElement)&&(l>-1&&(a.voidElement||a.name===r.slice(2,-1))&&(l--,a=-1===l?c:o[l]),!m&&\"<\"!==d&&d)){u=-1===l?c:o[l].children;var x=e.indexOf(\"<\",p),g=e.slice(p,-1===x?void 0:x);i.test(g)&&(g=\" \"),(x>-1&&l+u.length>=0||\" \"!==g)&&u.push({type:\"text\",content:g})}}),c},stringify:function(e){return e.reduce(function(e,t){return e+a(\"\",t)},\"\")}};export default c;\n//# sourceMappingURL=html-parse-stringify.module.js.map\n","export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape,\n transDefaultProps: undefined\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { Fragment, isValidElement, cloneElement, createElement, Children } from 'react';\nimport { keyFromSelector } from 'i18next';\nimport HTML from 'html-parse-stringify';\nimport { isObject, isString, warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\nimport { unescape } from './unescape.js';\nconst hasChildren = (node, checkLength) => {\n if (!node) return false;\n const base = node.props?.children ?? node.children;\n if (checkLength) return base.length > 0;\n return !!base;\n};\nconst getChildren = node => {\n if (!node) return [];\n const children = node.props?.children ?? node.children;\n return node.props?.i18nIsDynamicList ? getAsArray(children) : children;\n};\nconst hasValidReactChildren = children => Array.isArray(children) && children.every(isValidElement);\nconst getAsArray = data => Array.isArray(data) ? data : [data];\nconst mergeProps = (source, target) => {\n const newTarget = {\n ...target\n };\n newTarget.props = {\n ...target.props,\n ...source.props\n };\n return newTarget;\n};\nconst getValuesFromChildren = children => {\n const values = {};\n if (!children) return values;\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(values, child);\n });\n };\n getData(children);\n return values;\n};\nexport const nodesToString = (children, i18nOptions, i18n, i18nKey) => {\n if (!children) return '';\n let stringNode = '';\n const childrenArray = getAsArray(children);\n const keepArray = i18nOptions?.transSupportBasicHtmlNodes ? i18nOptions.transKeepBasicHtmlNodesFor ?? [] : [];\n childrenArray.forEach((child, childIndex) => {\n if (isString(child)) {\n stringNode += `${child}`;\n return;\n }\n if (isValidElement(child)) {\n const {\n props,\n type\n } = child;\n const childPropsCount = Object.keys(props).length;\n const shouldKeepChild = keepArray.indexOf(type) > -1;\n const childChildren = props.children;\n if (!childChildren && shouldKeepChild && !childPropsCount) {\n stringNode += `<${type}/>`;\n return;\n }\n if (!childChildren && (!shouldKeepChild || childPropsCount) || props.i18nIsDynamicList) {\n stringNode += `<${childIndex}></${childIndex}>`;\n return;\n }\n if (shouldKeepChild && childPropsCount === 1 && isString(childChildren)) {\n stringNode += `<${type}>${childChildren}</${type}>`;\n return;\n }\n const content = nodesToString(childChildren, i18nOptions, i18n, i18nKey);\n stringNode += `<${childIndex}>${content}</${childIndex}>`;\n return;\n }\n if (child === null) {\n warn(i18n, 'TRANS_NULL_VALUE', `Passed in a null value as child`, {\n i18nKey\n });\n return;\n }\n if (isObject(child)) {\n const {\n format,\n ...clone\n } = child;\n const keys = Object.keys(clone);\n if (keys.length === 1) {\n const value = format ? `${keys[0]}, ${format}` : keys[0];\n stringNode += `{{${value}}}`;\n return;\n }\n warn(i18n, 'TRANS_INVALID_OBJ', `Invalid child - Object should only have keys {{ value, format }} (format is optional).`, {\n i18nKey,\n child\n });\n return;\n }\n warn(i18n, 'TRANS_INVALID_VAR', `Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`, {\n i18nKey,\n child\n });\n });\n return stringNode;\n};\nconst escapeLiteralLessThan = (str, keepArray = [], knownComponentsMap = {}) => {\n if (!str) return str;\n const knownNames = Object.keys(knownComponentsMap);\n const allValidNames = [...keepArray, ...knownNames];\n let result = '';\n let i = 0;\n while (i < str.length) {\n if (str[i] === '<') {\n let isValidTag = false;\n const closingMatch = str.slice(i).match(/^<\\/(\\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);\n if (closingMatch) {\n const tagName = closingMatch[1];\n if (/^\\d+$/.test(tagName) || allValidNames.includes(tagName)) {\n isValidTag = true;\n result += closingMatch[0];\n i += closingMatch[0].length;\n }\n }\n if (!isValidTag) {\n const openingMatch = str.slice(i).match(/^<(\\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\\s+[\\w-]+(?:=(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?)*\\s*(\\/)?>/);\n if (openingMatch) {\n const tagName = openingMatch[1];\n if (/^\\d+$/.test(tagName) || allValidNames.includes(tagName)) {\n isValidTag = true;\n result += openingMatch[0];\n i += openingMatch[0].length;\n }\n }\n }\n if (!isValidTag) {\n result += '<';\n i += 1;\n }\n } else {\n result += str[i];\n i += 1;\n }\n }\n return result;\n};\nconst renderNodes = (children, knownComponentsMap, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {\n if (targetString === '') return [];\n const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);\n if (!children && !knownComponentsMap && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];\n const data = knownComponentsMap ?? {};\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(data, child);\n });\n };\n getData(children);\n const escapedString = escapeLiteralLessThan(targetString, keepArray, data);\n const ast = HTML.parse(`<0>${escapedString}</0>`);\n const opts = {\n ...data,\n ...combinedTOpts\n };\n const renderInner = (child, node, rootReactNode) => {\n const childs = getChildren(child);\n const mappedChildren = mapAST(childs, node.children, rootReactNode);\n return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props?.i18nIsDynamicList ? childs : mappedChildren;\n };\n const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {\n if (child.dummy) {\n child.children = inner;\n mem.push(cloneElement(child, {\n key: i\n }, isVoid ? undefined : inner));\n } else {\n mem.push(...Children.map([child], c => {\n const INTERNAL_DYNAMIC_MARKER = 'data-i18n-is-dynamic-list';\n const override = {\n key: i,\n [INTERNAL_DYNAMIC_MARKER]: undefined\n };\n if (c && c.props) {\n Object.keys(c.props).forEach(k => {\n if (k === 'ref' || k === 'children' || k === 'i18nIsDynamicList' || k === INTERNAL_DYNAMIC_MARKER) return;\n override[k] = c.props[k];\n });\n }\n return cloneElement(c, override, isVoid ? null : inner);\n }));\n }\n };\n const mapAST = (reactNode, astNode, rootReactNode) => {\n const reactNodes = getAsArray(reactNode);\n const astNodes = getAsArray(astNode);\n return astNodes.reduce((mem, node, i) => {\n const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n if (node.type === 'tag') {\n let tmp = reactNodes[parseInt(node.name, 10)];\n if (!tmp && knownComponentsMap) tmp = knownComponentsMap[node.name];\n if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];\n if (!tmp) tmp = {};\n const props = {\n ...node.attrs\n };\n if (shouldUnescape) {\n Object.keys(props).forEach(p => {\n const val = props[p];\n if (isString(val)) {\n props[p] = unescape(val);\n }\n });\n }\n const child = Object.keys(props).length !== 0 ? mergeProps({\n props\n }, tmp) : tmp;\n const isElement = isValidElement(child);\n const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && isObject(child) && child.dummy && !isElement;\n const isKnownComponent = isObject(knownComponentsMap) && Object.hasOwnProperty.call(knownComponentsMap, node.name);\n if (isString(child)) {\n const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n mem.push(value);\n } else if (hasChildren(child) || isValidTranslationWithChildren) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (isEmptyTransWithHTML) {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (Number.isNaN(parseFloat(node.name))) {\n if (isKnownComponent) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i, node.voidElement);\n } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n if (node.voidElement) {\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }));\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }, inner));\n }\n } else if (node.voidElement) {\n mem.push(`<${node.name} />`);\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(`<${node.name}>${inner}</${node.name}>`);\n }\n } else if (isObject(child) && !isElement) {\n const content = node.children[0] ? translationContent : null;\n if (content) mem.push(content);\n } else {\n pushTranslatedJSX(child, translationContent, mem, i, node.children.length !== 1 || !translationContent);\n }\n } else if (node.type === 'text') {\n const wrapTextNodes = i18nOptions.transWrapTextNodes;\n const unescapeFn = typeof i18nOptions.unescape === 'function' ? i18nOptions.unescape : getDefaults().unescape;\n const content = shouldUnescape ? unescapeFn(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n if (wrapTextNodes) {\n mem.push(createElement(wrapTextNodes, {\n key: `${node.name}-${i}`\n }, content));\n } else {\n mem.push(content);\n }\n }\n return mem;\n }, []);\n };\n const result = mapAST([{\n dummy: true,\n children: children || []\n }], ast, getAsArray(children || []));\n return getChildren(result[0]);\n};\nconst fixComponentProps = (component, index, translation) => {\n const componentKey = component.key || index;\n const comp = cloneElement(component, {\n key: componentKey\n });\n if (!comp.props || !comp.props.children || translation.indexOf(`${index}/>`) < 0 && translation.indexOf(`${index} />`) < 0) {\n return comp;\n }\n function Componentized() {\n return createElement(Fragment, null, comp);\n }\n return createElement(Componentized, {\n key: componentKey\n });\n};\nconst generateArrayComponents = (components, translation) => components.map((c, index) => fixComponentProps(c, index, translation));\nconst generateObjectComponents = (components, translation) => {\n const componentMap = {};\n Object.keys(components).forEach(c => {\n Object.assign(componentMap, {\n [c]: fixComponentProps(components[c], c, translation)\n });\n });\n return componentMap;\n};\nconst generateComponents = (components, translation, i18n, i18nKey) => {\n if (!components) return null;\n if (Array.isArray(components)) {\n return generateArrayComponents(components, translation);\n }\n if (isObject(components)) {\n return generateObjectComponents(components, translation);\n }\n warnOnce(i18n, 'TRANS_INVALID_COMPONENTS', `<Trans /> \"components\" prop expects an object or array`, {\n i18nKey\n });\n return null;\n};\nconst isComponentsMap = object => {\n if (!isObject(object)) return false;\n if (Array.isArray(object)) return false;\n return Object.keys(object).reduce((acc, key) => acc && Number.isNaN(Number.parseFloat(key)), true);\n};\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const i18n = i18nFromProps || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `Trans: You need to pass in an i18next instance using i18nextReactModule`, {\n i18nKey\n });\n return children;\n }\n const t = tFromProps || i18n.t.bind(i18n) || (k => k);\n const reactI18nextOptions = {\n ...getDefaults(),\n ...i18n.options?.react\n };\n let namespaces = ns || t.ns || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n const {\n transDefaultProps\n } = reactI18nextOptions;\n const mergedTOptions = transDefaultProps?.tOptions ? {\n ...transDefaultProps.tOptions,\n ...tOptions\n } : tOptions;\n const mergedShouldUnescape = shouldUnescape ?? transDefaultProps?.shouldUnescape;\n const mergedValues = transDefaultProps?.values ? {\n ...transDefaultProps.values,\n ...values\n } : values;\n const mergedComponents = transDefaultProps?.components ? {\n ...transDefaultProps.components,\n ...components\n } : components;\n const nodeAsString = nodesToString(children, reactI18nextOptions, i18n, i18nKey);\n const defaultValue = defaults || mergedTOptions?.defaultValue || nodeAsString || reactI18nextOptions.transEmptyNodeValue || (typeof i18nKey === 'function' ? keyFromSelector(i18nKey) : i18nKey);\n const {\n hashTransKey\n } = reactI18nextOptions;\n const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);\n if (i18n.options?.interpolation?.defaultVariables) {\n values = mergedValues && Object.keys(mergedValues).length > 0 ? {\n ...mergedValues,\n ...i18n.options.interpolation.defaultVariables\n } : {\n ...i18n.options.interpolation.defaultVariables\n };\n } else {\n values = mergedValues;\n }\n const valuesFromChildren = getValuesFromChildren(children);\n if (valuesFromChildren && typeof valuesFromChildren.count === 'number' && count === undefined) {\n count = valuesFromChildren.count;\n }\n const interpolationOverride = values || count !== undefined && !i18n.options?.interpolation?.alwaysFormat || !children ? mergedTOptions.interpolation : {\n interpolation: {\n ...mergedTOptions.interpolation,\n prefix: '#$?',\n suffix: '?$#'\n }\n };\n const combinedTOpts = {\n ...mergedTOptions,\n context: context || mergedTOptions.context,\n count,\n ...values,\n ...interpolationOverride,\n defaultValue,\n ns: namespaces\n };\n let translation = key ? t(key, combinedTOpts) : defaultValue;\n if (translation === key && defaultValue) translation = defaultValue;\n const generatedComponents = generateComponents(mergedComponents, translation, i18n, i18nKey);\n let indexedChildren = generatedComponents || children;\n let componentsMap = null;\n if (isComponentsMap(generatedComponents)) {\n componentsMap = generatedComponents;\n indexedChildren = children;\n }\n const content = renderNodes(indexedChildren, componentsMap, translation, i18n, reactI18nextOptions, combinedTOpts, mergedShouldUnescape);\n const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;\n return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n if (!i18n) {\n console.warn('react-i18next:: getInitialProps: You will need to pass in an i18next instance by using initReactI18next');\n return {};\n }\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useContext } from 'react';\nimport { nodesToString, Trans as TransWithoutContext } from './TransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport { nodesToString };\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n const t = tFromProps || i18n?.t.bind(i18n);\n return TransWithoutContext({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions,\n values,\n defaults,\n components,\n ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,\n i18n,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n });\n}","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { useContext, useCallback, useMemo, useEffect, useRef, useState } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n if (typeof k === 'function') return '';\n if (Array.isArray(k)) {\n const last = k[k.length - 1];\n return typeof last === 'function' ? '' : last;\n }\n return k;\n};\nconst notReadySnapshot = {\n t: notReadyT,\n ready: false\n};\nconst dummySubscribe = () => () => {};\nexport const useTranslation = (ns, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useTranslation: You will need to pass in an i18next instance by using initReactI18next');\n }\n const i18nOptions = useMemo(() => ({\n ...getDefaults(),\n ...i18n?.options?.react,\n ...props\n }), [i18n, props]);\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n const nsOrContext = ns || defaultNSFromContext || i18n?.options?.defaultNS;\n const unstableNamespaces = isString(nsOrContext) ? [nsOrContext] : nsOrContext || ['translation'];\n const namespaces = useMemo(() => unstableNamespaces, unstableNamespaces);\n i18n?.reportNamespaces?.addUsedNamespaces?.(namespaces);\n const revisionRef = useRef(0);\n const subscribe = useCallback(callback => {\n if (!i18n) return dummySubscribe;\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n const wrappedCallback = () => {\n revisionRef.current += 1;\n callback();\n };\n if (bindI18n) i18n.on(bindI18n, wrappedCallback);\n if (bindI18nStore) i18n.store.on(bindI18nStore, wrappedCallback);\n return () => {\n if (bindI18n) bindI18n.split(' ').forEach(e => i18n.off(e, wrappedCallback));\n if (bindI18nStore) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, wrappedCallback));\n };\n }, [i18n, i18nOptions]);\n const snapshotRef = useRef();\n const getSnapshot = useCallback(() => {\n if (!i18n) {\n return notReadySnapshot;\n }\n const calculatedReady = !!(i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const currentLng = props.lng || i18n.language;\n const currentRevision = revisionRef.current;\n const lastSnapshot = snapshotRef.current;\n if (lastSnapshot && lastSnapshot.ready === calculatedReady && lastSnapshot.lng === currentLng && lastSnapshot.keyPrefix === keyPrefix && lastSnapshot.revision === currentRevision) {\n return lastSnapshot;\n }\n const calculatedT = i18n.getFixedT(currentLng, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const newSnapshot = {\n t: calculatedT,\n ready: calculatedReady,\n lng: currentLng,\n keyPrefix,\n revision: currentRevision\n };\n snapshotRef.current = newSnapshot;\n return newSnapshot;\n }, [i18n, namespaces, keyPrefix, i18nOptions, props.lng]);\n const [loadCount, setLoadCount] = useState(0);\n const {\n t,\n ready\n } = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n useEffect(() => {\n if (i18n && !ready && !useSuspense) {\n const onLoaded = () => setLoadCount(c => c + 1);\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n }\n }, [i18n, props.lng, namespaces, ready, useSuspense, loadCount]);\n const finalI18n = i18n || {};\n const wrapperRef = useRef(null);\n const wrapperLangRef = useRef();\n const createI18nWrapper = original => {\n const descriptors = Object.getOwnPropertyDescriptors(original);\n if (descriptors.__original) delete descriptors.__original;\n const wrapper = Object.create(Object.getPrototypeOf(original), descriptors);\n if (!Object.prototype.hasOwnProperty.call(wrapper, '__original')) {\n try {\n Object.defineProperty(wrapper, '__original', {\n value: original,\n writable: false,\n enumerable: false,\n configurable: false\n });\n } catch (_) {}\n }\n return wrapper;\n };\n const ret = useMemo(() => {\n const original = finalI18n;\n const lang = original?.language;\n let i18nWrapper = original;\n if (original) {\n if (wrapperRef.current && wrapperRef.current.__original === original) {\n if (wrapperLangRef.current !== lang) {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n } else {\n i18nWrapper = wrapperRef.current;\n }\n } else {\n i18nWrapper = createI18nWrapper(original);\n wrapperRef.current = i18nWrapper;\n wrapperLangRef.current = lang;\n }\n }\n const effectiveT = !ready && !useSuspense ? (...args) => {\n warnOnce(i18n, 'USE_T_BEFORE_READY', 'useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.');\n return t(...args);\n } : t;\n const arr = [effectiveT, i18nWrapper, ready];\n arr.t = effectiveT;\n arr.i18n = i18nWrapper;\n arr.ready = ready;\n return arr;\n }, [t, finalI18n, ready, finalI18n.resolvedLanguage, finalI18n.language, finalI18n.languages]);\n if (i18n && useSuspense && !ready) {\n throw new Promise(resolve => {\n const onLoaded = () => resolve();\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, onLoaded);\n } else {\n loadNamespaces(i18n, namespaces, onLoaded);\n }\n });\n }\n return ret;\n};","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction AdminIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"m12 4.236-6 3V12c0 5.156 4.239 7.254 6 7.898 1.761-.644 6-2.742 6-7.898V7.236zm-.894-1.789a2 2 0 0 1 1.788 0l6 3A2 2 0 0 1 20 7.236V12c0 6.742-5.773 9.246-7.51 9.846-.32.111-.66.111-.98 0C9.774 21.246 4 18.743 4 12V7.236a2 2 0 0 1 1.106-1.789z\",\n clipRule: \"evenodd\"\n })\n });\n}\n;\nAdminIcon.displayName = \"AdminIcon\";\nexport default forwardRef(AdminIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ArrowLeftIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12.207 5.293a1 1 0 0 1 0 1.414L7.914 11H18.5a1 1 0 1 1 0 2H7.914l4.293 4.293a1 1 0 0 1-1.414 1.414l-6-6a1 1 0 0 1 0-1.414l6-6a1 1 0 0 1 1.414 0\"\n })\n });\n}\n;\nArrowLeftIcon.displayName = \"ArrowLeftIcon\";\nexport default forwardRef(ArrowLeftIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ChevronUpIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"m12 10.775-3.9 3.9a.95.95 0 0 1-.7.275.95.95 0 0 1-.7-.275.95.95 0 0 1-.275-.7q0-.425.275-.7l4.6-4.6q.15-.15.325-.212Q11.8 8.4 12 8.4t.375.063a.9.9 0 0 1 .325.212l4.6 4.6a.95.95 0 0 1 .275.7.95.95 0 0 1-.275.7.95.95 0 0 1-.7.275.95.95 0 0 1-.7-.275z\"\n })\n });\n}\n;\nChevronUpIcon.displayName = \"ChevronUpIcon\";\nexport default forwardRef(ChevronUpIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction CollapseIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 11.034a1 1 0 0 0 .29.702l.005.005c.18.18.43.29.705.29h8a1 1 0 0 0 0-2h-5.586L22 3.445a1 1 0 0 0-1.414-1.414L14 8.617V3.031a1 1 0 1 0-2 0zm0 1.963a1 1 0 0 0-.29-.702l-.005-.004A1 1 0 0 0 11 12H3a1 1 0 1 0 0 2h5.586L2 20.586A1 1 0 1 0 3.414 22L10 15.414V21a1 1 0 0 0 2 0z\"\n })\n });\n}\n;\nCollapseIcon.displayName = \"CollapseIcon\";\nexport default forwardRef(CollapseIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction DeleteIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M7 21q-.824 0-1.412-.587A1.93 1.93 0 0 1 5 19V6a.97.97 0 0 1-.713-.287A.97.97 0 0 1 4 5q0-.424.287-.713A.97.97 0 0 1 5 4h4q0-.424.287-.712A.97.97 0 0 1 10 3h4q.424 0 .713.288Q15 3.575 15 4h4q.424 0 .712.287Q20 4.576 20 5t-.288.713A.97.97 0 0 1 19 6v13q0 .824-.587 1.413A1.93 1.93 0 0 1 17 21zM7 6v13h10V6zm2 10q0 .424.287.712Q9.576 17 10 17t.713-.288A.97.97 0 0 0 11 16V9a.97.97 0 0 0-.287-.713A.97.97 0 0 0 10 8a.97.97 0 0 0-.713.287A.97.97 0 0 0 9 9zm4 0q0 .424.287.712.288.288.713.288.424 0 .713-.288A.97.97 0 0 0 15 16V9a.97.97 0 0 0-.287-.713A.97.97 0 0 0 14 8a.97.97 0 0 0-.713.287A.97.97 0 0 0 13 9z\"\n })\n });\n}\n;\nDeleteIcon.displayName = \"DeleteIcon\";\nexport default forwardRef(DeleteIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction EditIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M15.706 2.637a2 2 0 0 1 2.829 0l2.828 2.828a2 2 0 0 1 0 2.829L9.605 20.052a1 1 0 0 1-.465.263L3.483 21.73a1 1 0 0 1-1.212-1.213l1.414-5.657a1 1 0 0 1 .263-.465zm1.224 7.262L14.102 7.07l-8.544 8.544-.943 3.771 3.771-.943z\",\n clipRule: \"evenodd\"\n })\n });\n}\n;\nEditIcon.displayName = \"EditIcon\";\nexport default forwardRef(EditIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction EndCallIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"m2.765 16.02-2.47-2.416A1.02 1.02 0 0 1 0 12.852q0-.456.295-.751a15.6 15.6 0 0 1 5.316-3.786A15.9 15.9 0 0 1 12 7q3.355 0 6.39 1.329a16 16 0 0 1 5.315 3.772q.295.294.295.751t-.295.752l-2.47 2.416a1.047 1.047 0 0 1-1.396.108l-3.114-2.363a1.1 1.1 0 0 1-.322-.376 1.1 1.1 0 0 1-.108-.483v-2.27a13.6 13.6 0 0 0-2.12-.524C13.459 9.996 12 9.937 12 9.937s-1.459.059-2.174.175q-1.074.174-2.121.523v2.271q0 .268-.108.483a1.1 1.1 0 0 1-.322.376l-3.114 2.363a1.047 1.047 0 0 1-1.396-.107\"\n })\n });\n}\n;\nEndCallIcon.displayName = \"EndCallIcon\";\nexport default forwardRef(EndCallIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ExpandIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M21 3.997a1 1 0 0 0-.29-.702l-.005-.004A1 1 0 0 0 20 3h-8a1 1 0 1 0 0 2h5.586L5 17.586V12a1 1 0 1 0-2 0v8.003a1 1 0 0 0 .29.702l.005.004c.18.18.43.291.705.291h8a1 1 0 1 0 0-2H6.414L19 6.414V12a1 1 0 1 0 2 0z\"\n })\n });\n}\n;\nExpandIcon.displayName = \"ExpandIcon\";\nexport default forwardRef(ExpandIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GridIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M4 11a.97.97 0 0 1-.712-.287A.97.97 0 0 1 3 10V4q0-.424.288-.712A.97.97 0 0 1 4 3h6q.424 0 .713.288Q11 3.575 11 4v6q0 .424-.287.713A.97.97 0 0 1 10 11zm5-2V5H5v4zm5 12a.97.97 0 0 1-.713-.288A.97.97 0 0 1 13 20v-6q0-.424.287-.713A.97.97 0 0 1 14 13h6q.424 0 .712.287.288.288.288.713v6q0 .424-.288.712A.97.97 0 0 1 20 21zm5-2v-4h-4v4zM4 21a.97.97 0 0 1-.712-.288A.97.97 0 0 1 3 20v-6q0-.424.288-.713A.97.97 0 0 1 4 13h6q.424 0 .713.287.287.288.287.713v6q0 .424-.287.712A.97.97 0 0 1 10 21zm5-2v-4H5v4zm5-8a.97.97 0 0 1-.713-.287A.97.97 0 0 1 13 10V4q0-.424.287-.712A.97.97 0 0 1 14 3h6q.424 0 .712.288Q21 3.575 21 4v6q0 .424-.288.713A.97.97 0 0 1 20 11zm5-2V5h-4v4z\"\n })\n });\n}\n;\nGridIcon.displayName = \"GridIcon\";\nexport default forwardRef(GridIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction HostIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M16.713 6.713A.97.97 0 0 1 16 7a.97.97 0 0 1-.713-.287A.97.97 0 0 1 15 6q0-.424.287-.713A.97.97 0 0 1 16 5q.424 0 .712.287Q17 5.576 17 6t-.288.713\"\n }), /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M6 2a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2zm12 2H6v4h12zM6 12v-2h12v2zm0 2v2h12v-2zm0 6v-2h12v2z\",\n clipRule: \"evenodd\"\n })]\n });\n}\n;\nHostIcon.displayName = \"HostIcon\";\nexport default forwardRef(HostIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction LinkIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 19.071q-1.467 1.467-3.536 1.467-2.067 0-3.535-1.467t-1.467-3.535q0-2.07 1.467-3.536L7.05 9.879q.3-.3.707-.3t.707.3.301.707-.3.707l-2.122 2.121a2.9 2.9 0 0 0-.884 2.122q0 1.237.884 2.12.884.885 2.121.885t2.122-.884l2.121-2.121q.3-.3.707-.3t.707.3.3.707q0 .405-.3.707zm-1.414-4.243q-.3.3-.707.301a.97.97 0 0 1-.707-.3q-.3-.3-.301-.708 0-.405.3-.707l4.243-4.242q.3-.3.707-.3t.707.3.3.707-.3.707zm6.364-.707q-.3.3-.707.3a.97.97 0 0 1-.707-.3q-.3-.3-.301-.707 0-.405.3-.707l2.122-2.121q.884-.885.884-2.121 0-1.238-.884-2.122a2.9 2.9 0 0 0-2.121-.884q-1.237 0-2.122.884l-2.121 2.122q-.3.3-.707.3a.97.97 0 0 1-.707-.3q-.3-.3-.3-.708 0-.405.3-.707L12 4.93q1.467-1.467 3.536-1.467t3.535 1.467 1.467 3.536T19.071 12z\"\n })\n });\n}\n;\nLinkIcon.displayName = \"LinkIcon\";\nexport default forwardRef(LinkIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction LockOffIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M6 22q-.825 0-1.412-.587A1.93 1.93 0 0 1 4 20V10q0-.825.588-1.412a2 2 0 0 1 .702-.463L1.333 4.167a1 1 0 0 1 1.414-1.414L7 7.006v-.012l13 13v.012l1.247 1.247a1 1 0 1 1-1.414 1.414l-.896-.896A1.94 1.94 0 0 1 18 22zm14-4.834V10q0-.825-.587-1.412A1.93 1.93 0 0 0 18 8h-1V6q0-2.075-1.463-3.537Q14.075 1 12 1T8.463 2.463a4.9 4.9 0 0 0-1.22 1.946L9 6.166V6q0-1.25.875-2.125A2.9 2.9 0 0 1 12 3q1.25 0 2.125.875T15 6v2h-4.166z\"\n })\n });\n}\n;\nLockOffIcon.displayName = \"LockOffIcon\";\nexport default forwardRef(LockOffIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction LockSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M6 22q-.824 0-1.412-.587A1.93 1.93 0 0 1 4 20V10q0-.825.588-1.412A1.93 1.93 0 0 1 6 8h1V6q0-2.075 1.463-3.537Q9.926 1 12 1q2.075 0 3.537 1.463Q17 3.925 17 6v2h1q.824 0 1.413.588Q20 9.175 20 10v10q0 .824-.587 1.413A1.93 1.93 0 0 1 18 22zM9 8h6V6q0-1.25-.875-2.125A2.9 2.9 0 0 0 12 3q-1.25 0-2.125.875A2.9 2.9 0 0 0 9 6z\"\n })\n });\n}\n;\nLockSolidIcon.displayName = \"LockSolidIcon\";\nexport default forwardRef(LockSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction MicOffSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M8 8v-.006l6.831 6.832-.002.002 1.414 1.415.003-.003 1.414 1.414-.003.003L20.5 20.5a1 1 0 0 1-1.414 1.414l-3.022-3.022A7.95 7.95 0 0 1 13 19.938V21a1 1 0 0 1-2 0v-1.062A8 8 0 0 1 4 12a1 1 0 1 1 2 0 6 6 0 0 0 8.587 5.415l-1.55-1.55A4.005 4.005 0 0 1 8 12v-1.172L2.086 4.914A1 1 0 0 1 3.5 3.5zm9.417 6.583 1.478 1.477A7.96 7.96 0 0 0 20 12a1 1 0 0 0-2 0c0 .925-.21 1.8-.583 2.583M8.073 5.238l7.793 7.793q.132-.495.134-1.031V6a4 4 0 0 0-7.927-.762\"\n })\n });\n}\n;\nMicOffSolidIcon.displayName = \"MicOffSolidIcon\";\nexport default forwardRef(MicOffSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction MicOffIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M8 8v-.006l2 2V10l3.414 3.414.003-.003 1.414 1.415-.002.002 1.414 1.415.003-.003 1.414 1.414-.003.003L20.5 20.5a1 1 0 0 1-1.414 1.414l-3.022-3.022A7.95 7.95 0 0 1 13 19.938V21a1 1 0 1 1-2 0v-1.062A8 8 0 0 1 4 12a1 1 0 1 1 2 0 6 6 0 0 0 8.587 5.415l-1.55-1.55A4.005 4.005 0 0 1 8 12v-1.172L2.086 4.914A1 1 0 0 1 3.5 3.5z\",\n clipRule: \"evenodd\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M14 6v5.166l1.866 1.866q.132-.496.134-1.032V6a4 4 0 0 0-7.928-.762L10 7.166V6a2 2 0 1 1 4 0m3.417 8.583 1.477 1.477A7.96 7.96 0 0 0 20 12a1 1 0 1 0-2 0c0 .925-.21 1.8-.583 2.583\"\n })]\n });\n}\n;\nMicOffIcon.displayName = \"MicOffIcon\";\nexport default forwardRef(MicOffIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction MicOnSolidIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M8 6a4 4 0 1 1 8 0v6a4 4 0 0 1-8 0z\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M5 11a1 1 0 0 1 1 1 6 6 0 0 0 12 0 1 1 0 1 1 2 0 8 8 0 0 1-7 7.938V21a1 1 0 1 1-2 0v-1.062A8 8 0 0 1 4 12a1 1 0 0 1 1-1\"\n })]\n });\n}\n;\nMicOnSolidIcon.displayName = \"MicOnSolidIcon\";\nexport default forwardRef(MicOnSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction MicOnIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M6 12a1 1 0 1 0-2 0 8 8 0 0 0 7 7.938V21a1 1 0 1 0 2 0v-1.062A8 8 0 0 0 20 12a1 1 0 1 0-2 0 6 6 0 0 1-12 0\"\n }), /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M14 12V6a2 2 0 1 0-4 0v6a2 2 0 1 0 4 0M12 2a4 4 0 0 0-4 4v6a4 4 0 0 0 8 0V6a4 4 0 0 0-4-4\",\n clipRule: \"evenodd\"\n })]\n });\n}\n;\nMicOnIcon.displayName = \"MicOnIcon\";\nexport default forwardRef(MicOnIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction OfflineIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M3.5 3.5a1 1 0 1 0-1.414 1.414l4.113 4.114a5.5 5.5 0 0 0-.184 1.07A5.002 5.002 0 0 0 7 20h10.172l1.914 1.914A1 1 0 1 0 20.5 20.5l-.979-.979.004-.001L7.145 7.14l-.002.003zm18.5 12a4.48 4.48 0 0 1-.928 2.738L8.637 5.803A5.47 5.47 0 0 1 11.5 5a5.49 5.49 0 0 1 4.25 2.008 4 4 0 0 1 4.187 4.708A4.5 4.5 0 0 1 22 15.5\"\n })\n });\n}\n;\nOfflineIcon.displayName = \"OfflineIcon\";\nexport default forwardRef(OfflineIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction OverflowHorizontalIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M6 14q-.824 0-1.412-.588A1.93 1.93 0 0 1 4 12q0-.825.588-1.412A1.93 1.93 0 0 1 6 10q.824 0 1.412.588Q8 11.175 8 12t-.588 1.412A1.93 1.93 0 0 1 6 14m6 0q-.825 0-1.412-.588A1.93 1.93 0 0 1 10 12q0-.825.588-1.412A1.93 1.93 0 0 1 12 10q.825 0 1.412.588Q14 11.175 14 12t-.588 1.412A1.93 1.93 0 0 1 12 14m6 0q-.824 0-1.413-.588A1.93 1.93 0 0 1 16 12q0-.825.587-1.412A1.93 1.93 0 0 1 18 10q.824 0 1.413.588Q20 11.175 20 12t-.587 1.412A1.93 1.93 0 0 1 18 14\"\n })\n });\n}\n;\nOverflowHorizontalIcon.displayName = \"OverflowHorizontalIcon\";\nexport default forwardRef(OverflowHorizontalIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction OverflowVerticalIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 20q-.825 0-1.412-.587A1.93 1.93 0 0 1 10 18q0-.824.588-1.413A1.93 1.93 0 0 1 12 16q.825 0 1.412.587Q14 17.176 14 18t-.588 1.413A1.93 1.93 0 0 1 12 20m0-6q-.825 0-1.412-.588A1.93 1.93 0 0 1 10 12q0-.825.588-1.412A1.93 1.93 0 0 1 12 10q.825 0 1.412.588Q14 11.175 14 12t-.588 1.412A1.93 1.93 0 0 1 12 14m0-6q-.825 0-1.412-.588A1.93 1.93 0 0 1 10 6q0-.824.588-1.412A1.93 1.93 0 0 1 12 4q.825 0 1.412.588Q14 5.175 14 6q0 .824-.588 1.412A1.93 1.93 0 0 1 12 8\"\n })\n });\n}\n;\nOverflowVerticalIcon.displayName = \"OverflowVerticalIcon\";\nexport default forwardRef(OverflowVerticalIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction PopOutIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M5 3h6a1 1 0 1 1 0 2H5v14h14v-6a1 1 0 1 1 2 0v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M15 3h5a1 1 0 0 1 1 1v5a1 1 0 1 1-2 0V6.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L17.586 5H15a1 1 0 1 1 0-2\"\n })]\n });\n}\n;\nPopOutIcon.displayName = \"PopOutIcon\";\nexport default forwardRef(PopOutIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction RaisedHandSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M11 3a1 1 0 1 1 2 0v8.5a.5.5 0 0 0 1 0V4a1 1 0 1 1 2 0v10.2l3.284-2.597a1.081 1.081 0 0 1 1.47 1.577c-.613.673-1.214 1.367-1.818 2.064-1.267 1.463-2.541 2.934-3.943 4.235A6 6 0 0 1 5 15V7a1 1 0 0 1 1.999 0v5.5a.5.5 0 0 0 1 0V4a1 1 0 0 1 2 0v7.5a.5.5 0 0 0 1 0z\"\n })\n });\n}\n;\nRaisedHandSolidIcon.displayName = \"RaisedHandSolidIcon\";\nexport default forwardRef(RaisedHandSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ReactionSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10m3.536-6.464a1 1 0 0 0-1.415-1.415A3 3 0 0 1 12 15a3 3 0 0 1-2.121-.879 1 1 0 1 0-1.414 1.415A5 5 0 0 0 12 17c1.38 0 2.632-.56 3.536-1.464M10 10.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m5.5 1.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3\",\n clipRule: \"evenodd\"\n })\n });\n}\n;\nReactionSolidIcon.displayName = \"ReactionSolidIcon\";\nexport default forwardRef(ReactionSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ShareScreenSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M1.288 20.713Q1.575 21 2 21h20q.424 0 .712-.288A.97.97 0 0 0 23 20a.97.97 0 0 0-.288-.712A.97.97 0 0 0 22 19H2a.97.97 0 0 0-.712.288A.97.97 0 0 0 1 20q0 .424.288.712m1.3-3.299A1.93 1.93 0 0 1 2 16V5q0-.824.587-1.412A1.93 1.93 0 0 1 4 3h16q.824 0 1.413.587Q22 4.176 22 5v11q0 .824-.587 1.413A1.93 1.93 0 0 1 20 18H4q-.824 0-1.412-.587m10.12-10.12a1 1 0 0 0-1.415 0l-2.5 2.5a1 1 0 0 0 1.414 1.414l.793-.793V13a1 1 0 1 0 2 0v-2.586l.793.793a1 1 0 0 0 1.414-1.414z\"\n })\n });\n}\n;\nShareScreenSolidIcon.displayName = \"ShareScreenSolidIcon\";\nexport default forwardRef(ShareScreenSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ShareIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 16a.97.97 0 0 1-.713-.287A.97.97 0 0 1 11 15V7.85L9.125 9.725q-.3.3-.7.3T7.7 9.7a.93.93 0 0 1-.288-.713A.98.98 0 0 1 7.7 8.3l3.6-3.6q.15-.15.325-.213.175-.062.375-.062t.375.062a.9.9 0 0 1 .325.213l3.6 3.6q.3.3.287.712a.98.98 0 0 1-.287.688q-.3.3-.713.313a.93.93 0 0 1-.712-.288L13 7.85V15q0 .424-.287.713A.97.97 0 0 1 12 16m-6 4q-.824 0-1.412-.587A1.93 1.93 0 0 1 4 18v-2q0-.424.287-.713A.97.97 0 0 1 5 15q.424 0 .713.287Q6 15.576 6 16v2h12v-2q0-.424.288-.713A.97.97 0 0 1 19 15q.424 0 .712.287.288.288.288.713v2q0 .824-.587 1.413A1.93 1.93 0 0 1 18 20z\"\n })\n });\n}\n;\nShareIcon.displayName = \"ShareIcon\";\nexport default forwardRef(ShareIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction SpotlightIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M5 5h14v8h-5a1 1 0 0 0-1 1v5H5zm10 14v-4h4v4zM5 21h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2\"\n })\n });\n}\n;\nSpotlightIcon.displayName = \"SpotlightIcon\";\nexport default forwardRef(SpotlightIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction SwitchCameraSolidIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M16.293 2.293a1 1 0 0 1 1.414 0l2 2a1 1 0 0 1 0 1.414l-2 2a1 1 0 1 1-1.414-1.414L16.586 6H6a2 2 0 0 0-2 2v7a1 1 0 1 1-2 0V8a4 4 0 0 1 4-4h10.586l-.293-.293a1 1 0 0 1 0-1.414M18 18H7.414l.293-.293a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 0 0 0 1.414l2 2a1 1 0 0 0 1.414-1.414L7.414 20H18a4 4 0 0 0 4-4V9a1 1 0 1 0-2 0v7a2 2 0 0 1-2 2\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6\"\n })]\n });\n}\n;\nSwitchCameraSolidIcon.displayName = \"SwitchCameraSolidIcon\";\nexport default forwardRef(SwitchCameraSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction UnknownSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M12.999 13.012v-.005zm-9.411 7.401Q4.175 21 5 21h14q.824 0 1.413-.587Q21 19.825 21 19V5q0-.824-.587-1.412A1.93 1.93 0 0 0 19 3H5q-.824 0-1.412.587A1.93 1.93 0 0 0 3 5v14q0 .824.587 1.413M12 9a1 1 0 0 0-1 1 1 1 0 1 1-2 0 3 3 0 1 1 4.44 2.633 1.4 1.4 0 0 0-.383.288.3.3 0 0 0-.057.085A1 1 0 0 1 11 13c0-.58.253-1.047.539-1.38.281-.33.63-.572.94-.742A1 1 0 0 0 12 9m1 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0\"\n })\n });\n}\n;\nUnknownSolidIcon.displayName = \"UnknownSolidIcon\";\nexport default forwardRef(UnknownSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction UserAddIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M10 12q-1.65 0-2.825-1.175T6 8t1.175-2.825T10 4t2.825 1.175T14 8t-1.175 2.825T10 12m-8 6v-.8q0-.85.438-1.562.437-.713 1.162-1.088a14.8 14.8 0 0 1 3.15-1.163A13.8 13.8 0 0 1 10 13q1.65 0 3.25.387 1.6.388 3.15 1.163.724.375 1.163 1.087Q18 16.35 18 17.2v.8q0 .824-.587 1.413A1.93 1.93 0 0 1 16 20H4q-.824 0-1.412-.587A1.93 1.93 0 0 1 2 18m2 0h12v-.8a.97.97 0 0 0-.5-.85q-1.35-.675-2.725-1.012a11.6 11.6 0 0 0-5.55 0Q5.85 15.675 4.5 16.35a.97.97 0 0 0-.5.85zm6-8q.825 0 1.412-.588Q12 8.826 12 8q0-.824-.588-1.412A1.93 1.93 0 0 0 10 6q-.825 0-1.412.588A1.93 1.93 0 0 0 8 8q0 .825.588 1.412Q9.175 10 10 10m7 1h2v2q0 .424.288.713.287.287.712.287.424 0 .712-.287A.97.97 0 0 0 21 13v-2h2q.424 0 .712-.287A.97.97 0 0 0 24 10a.97.97 0 0 0-.288-.713A.97.97 0 0 0 23 9h-2V7a.97.97 0 0 0-.288-.713A.97.97 0 0 0 20 6a.97.97 0 0 0-.712.287A.97.97 0 0 0 19 7v2h-2a.97.97 0 0 0-.712.287A.97.97 0 0 0 16 10q0 .424.288.713.287.287.712.287\"\n })\n });\n}\n;\nUserAddIcon.displayName = \"UserAddIcon\";\nexport default forwardRef(UserAddIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction UserProfileIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M9.175 13.825Q10.35 15 12 15t2.825-1.175T16 11t-1.175-2.825T12 7 9.175 8.175 8 11t1.175 2.825m4.237-1.412A1.93 1.93 0 0 1 12 13q-.825 0-1.412-.588A1.93 1.93 0 0 1 10 11q0-.825.588-1.412A1.93 1.93 0 0 1 12 9q.825 0 1.412.588Q14 10.175 14 11t-.588 1.412\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10m-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M16.23 18.792a13 13 0 0 0-1.455-.455 11.6 11.6 0 0 0-5.55 0q-.73.18-1.455.455a8 8 0 0 1-1.729-1.454q1.336-.618 2.709-.95A13.8 13.8 0 0 1 12 16q1.65 0 3.25.387 1.373.333 2.709.95a8 8 0 0 1-1.73 1.455\"\n })]\n });\n}\n;\nUserProfileIcon.displayName = \"UserProfileIcon\";\nexport default forwardRef(UserProfileIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VideoCallOffSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M2.747 2.753 4.35 4.355l.007-.003L18 17.994v.012l3.247 3.247a1 1 0 0 1-1.414 1.414l-2.898-2.898A2 2 0 0 1 16 20H6a4 4 0 0 1-4-4V8c0-.892.292-1.715.785-2.38L1.333 4.166a1 1 0 0 1 1.414-1.414M18 15.166 6.834 4H16a2 2 0 0 1 2 2v4.286l3.35-2.871a1 1 0 0 1 1.65.76v7.65a1 1 0 0 1-1.65.76L18 13.715z\"\n })\n });\n}\n;\nVideoCallOffSolidIcon.displayName = \"VideoCallOffSolidIcon\";\nexport default forwardRef(VideoCallOffSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VideoCallSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M6 4h10a2 2 0 0 1 2 2v4.286l3.35-2.871a1 1 0 0 1 1.65.76v7.65a1 1 0 0 1-1.65.76L18 13.715V18a2 2 0 0 1-2 2H6a4 4 0 0 1-4-4V8a4 4 0 0 1 4-4\"\n })\n });\n}\n;\nVideoCallSolidIcon.displayName = \"VideoCallSolidIcon\";\nexport default forwardRef(VideoCallSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VideoCallIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M2 8a4 4 0 0 1 4-4h10a2 2 0 0 1 2 2v4.286l3.35-2.871a1 1 0 0 1 1.65.76v7.65a1 1 0 0 1-1.65.76L18 13.715V18a2 2 0 0 1-2 2H6a4 4 0 0 1-4-4zm4-2a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h10V6zm15 7.652v-3.303L19.073 12z\"\n })\n });\n}\n;\nVideoCallIcon.displayName = \"VideoCallIcon\";\nexport default forwardRef(VideoCallIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VoiceCallSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"m20.958 16.374.039 3.527q0 .427-.33.756-.33.33-.756.33a16 16 0 0 1-6.57-1.105 16.2 16.2 0 0 1-5.563-3.663 16.1 16.1 0 0 1-3.653-5.573 16.3 16.3 0 0 1-1.115-6.56q0-.427.33-.757T4.095 3l3.528.039a1.07 1.07 0 0 1 1.085.93l.543 3.954q.039.271-.039.504a1.1 1.1 0 0 1-.271.426l-1.64 1.64q.505 1.008 1.154 1.909c.433.6 1.444 1.696 1.444 1.696s1.095 1.01 1.696 1.444q.9.65 1.909 1.153l1.64-1.64q.193-.193.426-.27t.504-.04l3.954.543q.406.059.668.359t.262.727\"\n })\n });\n}\n;\nVoiceCallSolidIcon.displayName = \"VoiceCallSolidIcon\";\nexport default forwardRef(VoiceCallSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VoiceCallIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M8.929 15.1a13.6 13.6 0 0 0 4.654 3.066q2.62 1.036 5.492.923h.008l.003-.004.003-.002-.034-3.124-3.52-.483-1.791 1.792-.645-.322a13.5 13.5 0 0 1-3.496-2.52 13.4 13.4 0 0 1-2.52-3.496l-.322-.645 1.792-1.791-.483-3.52-3.123-.033-.003.002-.003.004v.002a13.65 13.65 0 0 0 .932 5.492A13.4 13.4 0 0 0 8.93 15.1m3.92 4.926a15.6 15.6 0 0 1-5.334-3.511 15.4 15.4 0 0 1-3.505-5.346 15.6 15.6 0 0 1-1.069-6.274 1.93 1.93 0 0 1 .589-1.366c.366-.366.84-.589 1.386-.589h.01l3.163.035a1.96 1.96 0 0 1 1.958 1.694v.005l.487 3.545v.003c.043.297.025.605-.076.907a2 2 0 0 1-.485.773l-.762.762a11.3 11.3 0 0 0 1.806 2.348 11.4 11.4 0 0 0 2.348 1.806l.762-.762a2 2 0 0 1 .774-.485c.302-.1.61-.118.907-.076l3.553.487a1.96 1.96 0 0 1 1.694 1.958l.034 3.174c0 .546-.223 1.02-.588 1.386-.36.36-.827.582-1.363.588a15.3 15.3 0 0 1-6.29-1.062\",\n clipRule: \"evenodd\"\n })\n });\n}\n;\nVoiceCallIcon.displayName = \"VoiceCallIcon\";\nexport default forwardRef(VoiceCallIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VolumeOffSolidIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M3.5 3.5a1 1 0 1 0-1.414 1.414L5.172 8H5a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h2l3.293 3.293c.63.63 1.707.184 1.707-.707v-3.758l7.086 7.086A1 1 0 0 0 20.5 20.5l-2.136-2.136.003-.003-1.414-1.414-.003.003-1.414-1.414.003-.003-1.415-1.415-.002.003L12 12v-.006L7.503 7.497 7.5 7.5zm11.496 8.662 1.661 1.66c.222-.564.343-1.18.343-1.822 0-1.38-.56-2.632-1.464-3.536a1 1 0 1 0-1.414 1.414 3 3 0 0 1 .874 2.284m3.164 3.165 1.462 1.46A8.96 8.96 0 0 0 21 12a8.98 8.98 0 0 0-2.636-6.364A1 1 0 0 0 16.95 7.05 6.98 6.98 0 0 1 19 12a7 7 0 0 1-.84 3.326M8.917 6.083 12 9.166V5.414c0-.89-1.077-1.337-1.707-.707z\"\n })\n });\n}\n;\nVolumeOffSolidIcon.displayName = \"VolumeOffSolidIcon\";\nexport default forwardRef(VolumeOffSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction VolumeOffIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"m3.5 3.5 4 4 .003-.003L8.917 8.91l-.003.003L10 10v-.006l2 2V12l2.122 2.121.002-.003 1.415 1.415-.003.003 1.414 1.414.003-.003 1.414 1.414-.003.003L20.5 20.5a1 1 0 0 1-1.414 1.414L12 14.828v3.758c0 .89-1.077 1.337-1.707.707L7 16H5a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h.172L2.086 4.914A1 1 0 0 1 3.5 3.5M7.172 10H5v4h2.828L10 16.17v-3.343zm7.824 2.162 1.661 1.66c.222-.564.343-1.18.343-1.822 0-1.38-.56-2.632-1.464-3.536a1 1 0 1 0-1.414 1.414 3 3 0 0 1 .874 2.284m3.164 3.165 1.462 1.46A8.96 8.96 0 0 0 21 12a8.98 8.98 0 0 0-2.636-6.364A1 1 0 0 0 16.95 7.05 6.98 6.98 0 0 1 19 12a7 7 0 0 1-.84 3.326M8.917 6.083 12 9.166V5.414c0-.89-1.077-1.337-1.707-.707z\"\n })\n });\n}\n;\nVolumeOffIcon.displayName = \"VolumeOffIcon\";\nexport default forwardRef(VolumeOffIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction VolumeOnSolidIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 14v-4a2 2 0 0 1 2-2h2l3.293-3.293c.63-.63 1.707-.184 1.707.707v13.172c0 .89-1.077 1.337-1.707.707L7 16H5a2 2 0 0 1-2-2m11.122-5.536a1 1 0 0 1 1.414 0A5 5 0 0 1 17 12c0 1.38-.56 2.632-1.464 3.536a1 1 0 0 1-1.415-1.415 3 3 0 0 0 .88-2.121c0-.829-.335-1.577-.88-2.121a1 1 0 0 1 0-1.415\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M16.95 5.636a1 1 0 0 1 1.414 0A8.98 8.98 0 0 1 21 12a8.98 8.98 0 0 1-2.636 6.364 1 1 0 0 1-1.414-1.414A6.98 6.98 0 0 0 19 12a6.98 6.98 0 0 0-2.05-4.95 1 1 0 0 1 0-1.414\"\n })]\n });\n}\n;\nVolumeOnSolidIcon.displayName = \"VolumeOnSolidIcon\";\nexport default forwardRef(VolumeOnSolidIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction VolumeOnIcon(props, ref) {\n return /*#__PURE__*/_jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 10a2 2 0 0 1 2-2h2l3.293-3.293c.63-.63 1.707-.184 1.707.707v13.172c0 .89-1.077 1.337-1.707.707L7 16H5a2 2 0 0 1-2-2zm4.828 4L10 16.172V7.828L7.828 10H5v4zm6.294-5.536a1 1 0 0 1 1.414 0A5 5 0 0 1 17 12c0 1.38-.56 2.632-1.464 3.535a1 1 0 1 1-1.415-1.414 3 3 0 0 0 .88-2.121c0-.829-.335-1.578-.88-2.122a1 1 0 0 1 0-1.414\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M18.364 5.636A1 1 0 1 0 16.95 7.05 6.98 6.98 0 0 1 19 12a6.98 6.98 0 0 1-2.05 4.95 1 1 0 0 0 1.414 1.414A8.98 8.98 0 0 0 21 12a8.98 8.98 0 0 0-2.636-6.364\"\n })]\n });\n}\n;\nVolumeOnIcon.displayName = \"VolumeOnIcon\";\nexport default forwardRef(VolumeOnIcon);","import { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction WebBrowserIcon(props, ref) {\n return /*#__PURE__*/_jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n ref: ref,\n ...props,\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M4 20q-.824 0-1.412-.587A1.93 1.93 0 0 1 2 18V6q0-.824.587-1.412A1.93 1.93 0 0 1 4 4h16q.824 0 1.413.588Q22 5.175 22 6v12q0 .824-.587 1.413A1.93 1.93 0 0 1 20 20zm0-2h16V8H4z\"\n })\n });\n}\n;\nWebBrowserIcon.displayName = \"WebBrowserIcon\";\nexport default forwardRef(WebBrowserIcon);","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst SvgLogo = (props, ref) => /* @__PURE__ */ _jsxs(\"svg\", {\n\twidth: 260,\n\theight: 30,\n\tviewBox: \"0 0 260 30\",\n\tfill: \"none\",\n\txmlns: \"http://www.w3.org/2000/svg\",\n\tref,\n\t...props,\n\tchildren: [\n\t\t/* @__PURE__ */ _jsx(\"desc\", { children: \"Element Call (Beta)\" }),\n\t\t/* @__PURE__ */ _jsx(\"circle\", {\n\t\t\tcx: 15,\n\t\t\tcy: 15,\n\t\t\tr: 13,\n\t\t\tfill: \"white\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\tfillRule: \"evenodd\",\n\t\t\tclipRule: \"evenodd\",\n\t\t\td: \"M15 30C23.2843 30 30 23.2843 30 15C30 6.71573 23.2843 0 15 0C6.71573 0 0 6.71573 0 15C0 23.2843 6.71573 30 15 30ZM12.2579 6.98923C12.2579 6.38376 12.7497 5.89292 13.3565 5.89292C17.4687 5.89292 20.8024 9.21967 20.8024 13.3234C20.8024 13.9289 20.3106 14.4197 19.7038 14.4197C19.0971 14.4197 18.6052 13.9289 18.6052 13.3234C18.6052 10.4306 16.2553 8.08554 13.3565 8.08554C12.7497 8.08554 12.2579 7.59471 12.2579 6.98923ZM24.1066 13.3235C24.1066 12.7181 23.6148 12.2272 23.008 12.2272C22.4013 12.2272 21.9094 12.7181 21.9094 13.3235C21.9094 16.2163 19.5595 18.5614 16.6607 18.5614C16.0539 18.5614 15.5621 19.0523 15.5621 19.6577C15.5621 20.2632 16.0539 20.754 16.6607 20.754C20.7729 20.754 24.1066 17.4273 24.1066 13.3235ZM17.7601 23.011C17.7601 23.6164 17.2682 24.1073 16.6615 24.1073C12.5492 24.1073 9.21553 20.7805 9.21553 16.6768C9.21553 16.0713 9.70739 15.5805 10.3141 15.5805C10.9209 15.5805 11.4127 16.0713 11.4127 16.6768C11.4127 19.5696 13.7627 21.9146 16.6615 21.9146C17.2682 21.9146 17.7601 22.4055 17.7601 23.011ZM5.89281 16.6769C5.89281 17.2824 6.38466 17.7732 6.9914 17.7732C7.59813 17.7732 8.08999 17.2824 8.08999 16.6769C8.08999 13.7841 10.4399 11.439 13.3388 11.439C13.9455 11.439 14.4373 10.9482 14.4373 10.3427C14.4373 9.73722 13.9455 9.24639 13.3388 9.24639C9.22647 9.24639 5.89281 12.5731 5.89281 16.6769Z\",\n\t\t\tfill: \"#0DBD8B\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M53.5406 17.258H42.8052C42.932 18.3814 43.3397 19.2782 44.0282 19.9486C44.7167 20.6009 45.6227 20.927 46.746 20.927C47.4889 20.927 48.1593 20.7459 48.7572 20.3835C49.3551 20.0211 49.7809 19.5319 50.0346 18.9159H53.296C52.8611 20.3472 52.0458 21.5068 50.8499 22.3947C49.6722 23.2644 48.2771 23.6992 46.6645 23.6992C44.5627 23.6992 42.8596 23.0016 41.555 21.6065C40.2686 20.2114 39.6254 18.4448 39.6254 16.3068C39.6254 14.2231 40.2776 12.4747 41.5822 11.0614C42.8867 9.64814 44.5718 8.94151 46.6373 8.94151C48.7029 8.94151 50.3698 9.63908 51.6381 11.0342C52.9245 12.4112 53.5677 14.1506 53.5677 16.2524L53.5406 17.258ZM46.6373 11.5778C45.6227 11.5778 44.7801 11.8767 44.1098 12.4747C43.4394 13.0726 43.0226 13.8698 42.8596 14.8663H50.3607C50.2158 13.8698 49.8172 13.0726 49.1649 12.4747C48.5126 11.8767 47.6701 11.5778 46.6373 11.5778Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M55.7934 19.1605V2.9895H59.0276V19.2148C59.0276 19.9396 59.4262 20.302 60.2234 20.302L60.7941 20.2748V23.3459C60.4861 23.4003 60.16 23.4274 59.8157 23.4274C58.4206 23.4274 57.3969 23.0741 56.7446 22.3675C56.1104 21.6609 55.7934 20.5919 55.7934 19.1605Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M75.8563 17.258H65.121C65.2478 18.3814 65.6555 19.2782 66.344 19.9486C67.0325 20.6009 67.9384 20.927 69.0618 20.927C69.8047 20.927 70.4751 20.7459 71.073 20.3835C71.6709 20.0211 72.0967 19.5319 72.3503 18.9159H75.6117C75.1769 20.3472 74.3615 21.5068 73.1657 22.3947C71.988 23.2644 70.5928 23.6992 68.9803 23.6992C66.8785 23.6992 65.1753 23.0016 63.8708 21.6065C62.5843 20.2114 61.9411 18.4448 61.9411 16.3068C61.9411 14.2231 62.5934 12.4747 63.898 11.0614C65.2025 9.64814 66.8875 8.94151 68.9531 8.94151C71.0186 8.94151 72.6855 9.63908 73.9539 11.0342C75.2403 12.4112 75.8835 14.1506 75.8835 16.2524L75.8563 17.258ZM68.9531 11.5778C67.9384 11.5778 67.0959 11.8767 66.4255 12.4747C65.7551 13.0726 65.3384 13.8698 65.1753 14.8663H72.6765C72.5315 13.8698 72.1329 13.0726 71.4806 12.4747C70.8284 11.8767 69.9859 11.5778 68.9531 11.5778Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M90.448 15.274V23.3731H87.2138V14.9207C87.2138 12.7827 86.326 11.7137 84.5503 11.7137C83.59 11.7137 82.82 12.0217 82.2402 12.6377C81.6785 13.2538 81.3977 14.0963 81.3977 15.1653V23.3731H78.1635V9.26764H81.1531V11.1429C81.4973 10.5088 82.0228 9.98333 82.7294 9.5666C83.436 9.14987 84.3148 8.94151 85.3657 8.94151C87.3225 8.94151 88.7358 9.68438 89.6055 11.1701C90.8013 9.68438 92.3958 8.94151 94.3888 8.94151C96.0376 8.94151 97.3059 9.45789 98.1937 10.4907C99.0816 11.5053 99.5255 12.8461 99.5255 14.513V23.3731H96.2913V14.9207C96.2913 12.7827 95.4035 11.7137 93.6278 11.7137C92.6494 11.7137 91.8703 12.0308 91.2905 12.6649C90.7288 13.2809 90.448 14.1506 90.448 15.274Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M115.61 17.258H104.874C105.001 18.3814 105.409 19.2782 106.097 19.9486C106.786 20.6009 107.692 20.927 108.815 20.927C109.558 20.927 110.228 20.7459 110.826 20.3835C111.424 20.0211 111.85 19.5319 112.104 18.9159H115.365C114.93 20.3472 114.115 21.5068 112.919 22.3947C111.741 23.2644 110.346 23.6992 108.734 23.6992C106.632 23.6992 104.929 23.0016 103.624 21.6065C102.338 20.2114 101.694 18.4448 101.694 16.3068C101.694 14.2231 102.347 12.4747 103.651 11.0614C104.956 9.64814 106.641 8.94151 108.706 8.94151C110.772 8.94151 112.439 9.63908 113.707 11.0342C114.994 12.4112 115.637 14.1506 115.637 16.2524L115.61 17.258ZM108.706 11.5778C107.692 11.5778 106.849 11.8767 106.179 12.4747C105.508 13.0726 105.092 13.8698 104.929 14.8663H112.43C112.285 13.8698 111.886 13.0726 111.234 12.4747C110.582 11.8767 109.739 11.5778 108.706 11.5778Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M120.906 9.26764V11.1429C121.232 10.5269 121.767 10.0105 122.51 9.59378C123.271 9.15893 124.186 8.94151 125.255 8.94151C126.922 8.94151 128.208 9.44883 129.114 10.4635C130.038 11.4781 130.5 12.828 130.5 14.513V23.3731H127.266V14.9207C127.266 13.9242 127.03 13.1451 126.559 12.5834C126.106 12.0036 125.409 11.7137 124.467 11.7137C123.434 11.7137 122.619 12.0217 122.021 12.6377C121.441 13.2538 121.151 14.1053 121.151 15.1925V23.3731H117.917V9.26764H120.906Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M139.946 20.4922V23.2915C139.547 23.4003 138.985 23.4546 138.261 23.4546C135.507 23.4546 134.13 22.0685 134.13 19.2964V11.8496H131.982V9.26764H134.13V5.5986H137.364V9.26764H140V11.8496H137.364V18.9702C137.364 20.0755 137.889 20.6281 138.94 20.6281L139.946 20.4922Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M148.304 20.864C146.768 19.184 146 17.056 146 14.48C146 11.904 146.768 9.784 148.304 8.12C149.856 6.44 151.896 5.6 154.424 5.6C156.504 5.6 158.264 6.176 159.704 7.328C161.144 8.48 162.064 10.024 162.464 11.96H160.616C160.28 10.52 159.552 9.376 158.432 8.528C157.312 7.68 155.976 7.256 154.424 7.256C152.44 7.256 150.84 7.92 149.624 9.248C148.424 10.576 147.824 12.32 147.824 14.48C147.824 16.64 148.424 18.384 149.624 19.712C150.84 21.04 152.44 21.704 154.424 21.704C155.976 21.704 157.312 21.28 158.432 20.432C159.552 19.584 160.28 18.44 160.616 17H162.464C162.064 18.936 161.144 20.48 159.704 21.632C158.264 22.784 156.504 23.36 154.424 23.36C151.896 23.36 149.856 22.528 148.304 20.864Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M173.63 17.192C171.438 17.192 169.942 17.24 169.142 17.336C168.358 17.416 167.782 17.552 167.414 17.744C166.758 18.112 166.43 18.704 166.43 19.52C166.43 21.088 167.358 21.872 169.214 21.872C170.638 21.872 171.726 21.552 172.478 20.912C173.246 20.272 173.63 19.416 173.63 18.344V17.192ZM169.022 23.288C167.63 23.288 166.566 22.952 165.83 22.28C165.11 21.592 164.75 20.688 164.75 19.568C164.75 18.832 164.942 18.176 165.326 17.6C165.726 17.024 166.27 16.6 166.958 16.328C167.534 16.104 168.278 15.96 169.19 15.896C170.102 15.816 171.582 15.776 173.63 15.776V14.984C173.63 12.968 172.478 11.96 170.174 11.96C168.19 11.96 167.038 12.768 166.718 14.384H165.062C165.238 13.2 165.742 12.256 166.574 11.552C167.422 10.848 168.646 10.496 170.246 10.496C171.958 10.496 173.23 10.896 174.062 11.696C174.91 12.496 175.334 13.6 175.334 15.008V23H173.702V21.224C172.854 22.6 171.294 23.288 169.022 23.288Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M179.418 20.312V5H181.122V20.12C181.122 20.616 181.202 20.96 181.362 21.152C181.538 21.344 181.85 21.44 182.298 21.44L182.778 21.392V22.952C182.506 23 182.21 23.024 181.89 23.024C180.242 23.024 179.418 22.12 179.418 20.312Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M185.582 20.312V5H187.286V20.12C187.286 20.616 187.366 20.96 187.526 21.152C187.702 21.344 188.014 21.44 188.462 21.44L188.942 21.392V22.952C188.67 23 188.374 23.024 188.054 23.024C186.406 23.024 185.582 22.12 185.582 20.312Z\",\n\t\t\tfill: \"currentColor\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M201 10C201 5.58172 204.582 2 209 2H252C256.418 2 260 5.58172 260 10V20C260 24.4183 256.418 28 252 28H209C204.582 28 201 24.4183 201 20V10Z\",\n\t\t\tfill: \"#368BD6\"\n\t\t}),\n\t\t/* @__PURE__ */ _jsx(\"path\", {\n\t\t\td: \"M212.076 20H216.492C218.99 20 220.215 18.7269 220.215 17.0277C220.215 15.3764 219.043 14.407 217.882 14.3484V14.2418C218.947 13.9915 219.789 13.2457 219.789 11.9194C219.789 10.2947 218.617 9.09091 216.252 9.09091H212.076V20ZM214.052 18.3487V15.1527H216.231C217.451 15.1527 218.207 15.8984 218.207 16.8732C218.207 17.7415 217.61 18.3487 216.178 18.3487H214.052ZM214.052 13.7305V10.7209H216.05C217.211 10.7209 217.813 11.3335 217.813 12.1751C217.813 13.1339 217.035 13.7305 216.007 13.7305H214.052ZM221.934 20H229.072V18.3434H223.911V15.3658H228.662V13.7092H223.911V10.7475H229.03V9.09091H221.934V20ZM230.566 10.7475H233.938V20H235.898V10.7475H239.27V9.09091H230.566V10.7475ZM241.031 20L241.931 17.31H246.032L246.938 20H249.047L245.201 9.09091H242.762L238.921 20H241.031ZM242.464 15.7227L243.939 11.3281H244.024L245.5 15.7227H242.464Z\",\n\t\t\tfill: \"white\"\n\t\t})\n\t]\n});\nconst ForwardRef = forwardRef(SvgLogo);\nexport default ForwardRef;\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport EventEmitter from \"events\";\n\ntype NonEmptyArray<T> = [T, ...T[]];\n\n/**\n * An event emitter that lets events pile up in a backlog until a listener is\n * present, at which point any events that were missed are re-emitted.\n */\nexport class LazyEventEmitter extends EventEmitter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private eventBacklogs = new Map<string | symbol, NonEmptyArray<any[]>>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public emit(type: string | symbol, ...args: any[]): boolean {\n const hasListeners = super.emit(type, ...args);\n\n if (!hasListeners) {\n // The event was missed, so add it to the backlog\n const backlog = this.eventBacklogs.get(type);\n if (backlog) {\n backlog.push(args);\n } else {\n // Start a new backlog\n this.eventBacklogs.set(type, [args]);\n }\n }\n\n return hasListeners;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public on(type: string | symbol, listener: (...args: any[]) => void): this {\n super.on(type, listener);\n\n const backlog = this.eventBacklogs.get(type);\n if (backlog) {\n // That was the first listener for this type, so let's send it all the\n // events that have piled up\n for (const args of backlog) super.emit(type, ...args);\n // Backlog is now clear\n this.eventBacklogs.delete(type);\n }\n\n return this;\n }\n\n public addListener(\n type: string | symbol,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n listener: (...args: any[]) => void,\n ): this {\n return this.on(type, listener);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public once(type: string | symbol, listener: (...args: any[]) => void): this {\n super.once(type, listener);\n\n const backlog = this.eventBacklogs.get(type);\n if (backlog) {\n // That was the first listener for this type, so let's send it the first\n // of the events that have piled up\n super.emit(type, ...backlog[0]);\n // Clear the event from the backlog\n if (backlog.length === 1) {\n this.eventBacklogs.delete(type);\n } else {\n backlog.shift();\n }\n }\n\n return this;\n }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nexport default pickBy;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","/*\nCopyright 2022-2024 New Vector Ltd.\nCopyright 2026 Element Creations Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\n/**\n * The MatrixRTC mode determines how Element Call interacts with the\n * MatrixRTC backend and other participants. Selectable via the Developer\n * Settings, or pinned for a deployment via `matrix_rtc_mode` in config.json.\n */\nexport enum MatrixRTCMode {\n /** Legacy single-SFU + user-keyed memberships + legacy JWT endpoint. */\n Legacy = \"legacy\",\n /** Multi-SFU transport, legacy JWT endpoint, no sticky events. */\n Compatibility = \"compatibility\",\n /**\n * Multi-SFU transport with:\n * - sticky events\n * - hashed RTC backend identity\n * - the new endpoint for the jwt token on the local membership (remote memberships will always try the new jwt endpoint first -> then the legacy one)\n * - use the hashed identity for the local membership\n */\n Matrix_2_0 = \"matrix_2_0\",\n}\n\nexport interface ConfigOptions {\n /**\n * The Posthog endpoint to which analytics data will be sent.\n * This is only used in the full package of Element Call.\n */\n posthog?: {\n api_key: string;\n api_host: string;\n };\n\n /**\n * The Sentry endpoint to which crash data will be sent.\n * This is only used in the full package of Element Call.\n */\n sentry?: {\n DSN: string;\n environment: string;\n };\n\n /**\n * The rageshake server to which feedback and debug logs will be sent.\n * This is only used in the full package of Element Call.\n */\n rageshake?: {\n submit_url: string;\n };\n\n /**\n * Sets the URL to send opentelemetry data to. If unset, opentelemetry will\n * be disabled. This is only used in the full package of Element Call.\n */\n opentelemetry?: {\n collector_url: string;\n };\n\n // Describes the default homeserver to use. The same format as Element Web\n // (without identity servers as we don't use them).\n default_server_config?: {\n [\"m.homeserver\"]: {\n base_url: string;\n server_name: string;\n };\n };\n\n // Describes the LiveKit configuration to be used.\n livekit?: {\n // The link to the service that returns a livekit url and token to use it.\n // This is a fallback link in case the homeserver in use does not advertise\n // a livekit service url in the client well-known.\n // The well known needs to be formatted like so:\n // {\"type\":\"livekit\", \"livekit_service_url\":\"https://livekit.example.com\"}\n // and stored under the key: \"org.matrix.msc4143.rtc_foci\"\n livekit_service_url: string;\n };\n\n /**\n * TEMPORARY experimental features.\n */\n features?: {\n /**\n * Allow to join group calls without audio and video.\n */\n feature_group_calls_without_video_and_audio?: boolean;\n\n /**\n * Send device-specific call session membership state events instead of\n * legacy user-specific call membership state events.\n * This setting has no effect when the user joins an active call with\n * legacy state events. For compatibility, Element Call will always join\n * active legacy calls with legacy state events.\n */\n feature_use_device_session_member_events?: boolean;\n };\n\n /**\n * A link to the software and services license agreement (SSLA)\n */\n ssla?: string;\n\n media_devices?: {\n /**\n * Defines whether participants should start with audio enabled by default.\n */\n enable_audio?: boolean;\n\n /**\n * Defines whether participants should start with video enabled by default.\n */\n enable_video?: boolean;\n };\n\n /**\n * Grace period in milliseconds to wait before reporting the sync loop as disconnected.\n * This allows brief sync interruptions without triggering a reconnection message.\n * Default is 10000ms (10 seconds). Set to 0 to disable the grace period.\n */\n sync_disconnect_grace_period_ms?: number;\n\n /**\n * Pins the {@link MatrixRTCMode} for all clients on this deployment,\n * overriding any per-user choice from the Developer Settings. If unset,\n * the user's Developer Settings choice (or its default of `Legacy`) wins.\n */\n matrix_rtc_mode?: MatrixRTCMode;\n\n /**\n * These are low level options that are used to configure the MatrixRTC session.\n * Take care when changing these options.\n */\n matrix_rtc_session?: {\n /**\n * How long (in milliseconds) to wait before rotating end-to-end media encryption keys\n * when someone leaves a call.\n */\n wait_for_key_rotation_ms?: number;\n\n /**\n * The duration (in milliseconds) after the most recent keep-alive (delayed leave event restart)\n * that the server waits before sending the leave MatrixRTC membership event.\n */\n delayed_leave_event_delay_ms?: number;\n\n /**\n * The time (in milliseconds) after which we consider a delayed event restart http request to have failed.\n * Setting this to a lower value will result in more frequent retries but also a higher chance of failiour.\n *\n * In the presence of network packet loss (hurting TCP connections), the custom delayedEventRestartLocalTimeoutMs\n * helps by keeping more delayed event reset candidates in flight,\n * improving the chances of a successful reset. (its is equivalent to the js-sdk `localTimeout` configuration,\n * but only applies to calls to the `_unstable_updateDelayedEvent` endpoint with a body of `{action:\"restart\"}`.)\n */\n delayed_leave_event_restart_local_timeout_ms?: number;\n\n /**\n * The time interval (in milliseconds) at which the client sends membership keep-alive\n * messages to the server by restarting the timer for the delayed leave event.\n */\n delayed_leave_event_restart_ms?: number;\n\n /**\n * How long we wait before retrying after a network error on any of the requests.\n */\n network_error_retry_ms?: number;\n\n /**\n * The timeout (in milliseconds) after we joined the call, that our membership should expire\n * unless we have explicitly updated it.\n *\n * This is what goes into the m.rtc.member event expiry field and is typically set to a number of hours.\n */\n membership_event_expiry_ms?: number;\n };\n}\n\n// Overrides members from ConfigOptions that are always provided by the\n// default config and are therefore non-optional.\nexport interface ResolvedConfigOptions extends ConfigOptions {\n default_server_config: {\n [\"m.homeserver\"]: {\n base_url: string;\n server_name: string;\n };\n };\n sync_disconnect_grace_period_ms: number;\n ssla: string;\n matrix_rtc_session: {\n wait_for_key_rotation_ms?: number;\n delayed_leave_event_delay_ms: number;\n delayed_leave_event_restart_local_timeout_ms?: number;\n delayed_leave_event_restart_ms?: number;\n network_error_retry_ms: number;\n membership_event_expiry_ms?: number;\n };\n}\n\nexport const DEFAULT_CONFIG: ResolvedConfigOptions = {\n default_server_config: {\n [\"m.homeserver\"]: {\n base_url: \"http://localhost:8008\",\n server_name: \"localhost\",\n },\n },\n features: {\n feature_use_device_session_member_events: true,\n },\n sync_disconnect_grace_period_ms: 10000,\n ssla: \"https://static.element.io/legal/element-software-and-services-license-agreement-uk-1.pdf\",\n matrix_rtc_session: {\n delayed_leave_event_delay_ms: 10000,\n network_error_retry_ms: 1000,\n },\n};\n","/*\nCopyright 2025 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\n/**\n * Check if a fetch response is a failure in a way that works with file:// URLs\n * @param response the response to check\n * @returns true if the response is a failure, false otherwise\n */\nexport function isFailure(response: Response): boolean {\n // if response says it's okay, then it's not a failure\n if (response.ok) {\n return false;\n }\n\n // fetch will return status === 0 for a success on a file:// URL, so we special case it\n if (response.url.startsWith(\"file:\") && response.status === 0) {\n return false;\n }\n\n return true;\n}\n","/*\nCopyright 2021-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { merge } from \"lodash-es\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nimport { getUrlParams } from \"../UrlParams\";\nimport {\n DEFAULT_CONFIG,\n type ConfigOptions,\n type ResolvedConfigOptions,\n} from \"./ConfigOptions\";\nimport { isFailure } from \"../utils/fetch\";\nimport { MatrixRTCMode } from \"./ConfigOptions\";\n\nconst VALID_MATRIX_RTC_MODES: ReadonlySet<string> = new Set(\n Object.values(MatrixRTCMode),\n);\n\nexport class Config {\n private static internalInstance: Config | undefined;\n\n public static get(): ResolvedConfigOptions {\n if (!this.internalInstance?.config)\n throw new Error(\"Config instance read before config got initialized\");\n return this.internalInstance.config;\n }\n\n public static async init(): Promise<void> {\n if (!Config.internalInstance?.initPromise) {\n const internalInstance = new Config();\n Config.internalInstance = internalInstance;\n\n let fetchTarget: string;\n\n if (\n window.location.pathname.endsWith(\"/room/\") ||\n window.location.pathname.endsWith(\"/room\")\n ) {\n // it looks like we are running in standalone mode so use the config at the root\n fetchTarget = new URL(\"/config.json\", window.location.href).href;\n } else {\n // otherwise we are probably running as a widget so use the config in the same directory\n fetchTarget = \"config.json\";\n }\n\n Config.internalInstance.initPromise = downloadConfig(fetchTarget).then(\n (config) => {\n internalInstance.config = merge(\n {},\n DEFAULT_CONFIG,\n validateConfig(config),\n );\n },\n );\n }\n return Config.internalInstance.initPromise;\n }\n\n /**\n * This is a alternative initializer that does not load anything\n * from a hosted config file but instead just initializes the config using the\n * default config.\n *\n * It is supposed to only be used in tests. (It is executed in `vite.setup.js`)\n */\n public static initDefault(): void {\n Config.internalInstance = new Config();\n Config.internalInstance.config = { ...DEFAULT_CONFIG };\n }\n\n // Convenience accessors\n public static defaultHomeserverUrl(): string | undefined {\n return (\n getUrlParams().homeserver ??\n Config.get().default_server_config?.[\"m.homeserver\"].base_url\n );\n }\n\n public static defaultServerName(): string | undefined {\n const homeserver = getUrlParams().homeserver;\n if (homeserver) {\n const url = new URL(homeserver);\n return url.hostname;\n }\n return Config.get().default_server_config?.[\"m.homeserver\"].server_name;\n }\n\n public config?: ResolvedConfigOptions;\n private initPromise?: Promise<void>;\n}\n\nexport function validateConfig(config: ConfigOptions): ConfigOptions {\n const mode = config.matrix_rtc_mode;\n if (mode !== undefined && !VALID_MATRIX_RTC_MODES.has(mode)) {\n logger.warn(\n `Ignoring invalid matrix_rtc_mode in config.json: ${String(mode)}`,\n );\n delete config.matrix_rtc_mode;\n }\n return config;\n}\n\nasync function downloadConfig(fetchTarget: string): Promise<ConfigOptions> {\n const response = await fetch(fetchTarget);\n\n if (isFailure(response)) {\n // Lack of a config isn't an error, we should just use the defaults.\n // Also treat a blank config as no config, assuming the status code is 0, because we don't get 404s from file:\n // URIs so this is the only way we can not fail if the file doesn't exist when loading from a file:// URI.\n return DEFAULT_CONFIG;\n }\n\n return response.json();\n}\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nexport enum E2eeType {\n NONE = 0,\n PER_PARTICIPANT = 1,\n SHARED_KEY = 2,\n}\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\n/**\n * The platform on which the application is running.\n */\n// The granularity of this value is kind of arbitrary: it distinguishes exactly\n// the platforms that the app needs to know about in order to correctly\n// implement the designs and work around platform-specific browser weirdness.\n// Feel free to increase or decrease that granularity in the future as project\n// requirements change.\nexport let platform: \"android\" | \"ios\" | \"desktop\";\n\nif (/android/i.test(navigator.userAgent)) {\n platform = \"android\";\n // We include 'Mac' here and double-check for touch support because iPads on\n // iOS 13 pretend to be a MacOS desktop\n} else if (\n /iPad|iPhone|iPod|Mac/.test(navigator.userAgent) &&\n \"ontouchend\" in document\n) {\n platform = \"ios\";\n} else {\n platform = \"desktop\";\n}\n\nexport const isFirefox = (): boolean => {\n const { userAgent } = navigator;\n return userAgent.includes(\"Firefox\");\n};\n","/*\nCopyright 2026 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\n/**\n * Redacts properties in the supplied object by replacing them with\n * a constant value.\n * @param obj Object in which to perform redaction\n * @param keys Keys to be redacted in the object\n * @returns A new object with the specified properties redacted\n */\nexport function redact<T extends object>(\n obj: T,\n ...keys: (keyof T)[]\n): Record<keyof T, unknown> {\n const result: Record<keyof T, unknown> = { ...obj };\n for (const key of keys)\n if (key in result && result[key] != null) {\n result[key] = \"<redacted>\";\n }\n return result;\n}\n","/*\nCopyright 2022-2024 New Vector Ltd.\nCopyright 2026 Element Creations Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport {\n type RTCCallIntent,\n type RTCNotificationType,\n} from \"matrix-js-sdk/lib/matrixrtc\";\nimport { pickBy } from \"lodash-es\";\n\nimport { Config } from \"./config/Config\";\nimport { type EncryptionSystem } from \"./e2ee/sharedKeyManagement\";\nimport { E2eeType } from \"./e2ee/e2eeType\";\nimport { platform } from \"./Platform\";\nimport { redact } from \"./utils/redact\";\n\ninterface RoomIdentifier {\n roomAlias: string | null;\n roomId: string | null;\n viaServers: string[];\n}\n\nexport enum UserIntent {\n StartNewCall = \"start_call\",\n JoinExistingCall = \"join_existing\",\n StartNewCallVoice = \"start_call_voice\",\n JoinExistingCallVoice = \"join_existing_voice\",\n StartNewCallDM = \"start_call_dm\",\n StartNewCallDMVoice = \"start_call_dm_voice\",\n JoinExistingCallDM = \"join_existing_dm\",\n JoinExistingCallDMVoice = \"join_existing_dm_voice\",\n Unknown = \"unknown\",\n}\n\nexport enum HeaderStyle {\n None = \"none\",\n Standard = \"standard\",\n AppBar = \"app_bar\",\n}\n\n/**\n * The UrlProperties are used to pass required data to the widget.\n * Those are different in different rooms, users, devices. They do not configure the behavior of the\n * widget but provide the required data to the widget.\n */\nexport interface UrlProperties {\n // Widget api related params\n widgetId: string | null;\n parentUrl: string | null;\n /**\n * Anything about what room we're pointed to should be from useRoomIdentifier which\n * parses the path and resolves alias with respect to the default server name, however\n * roomId is an exception as we need the room ID in embedded (matroyska) mode, and not\n * the room alias (or even the via params because we are not trying to join it). This\n * is also not validated, where it is in useRoomIdentifier().\n */\n roomId: string | null;\n /**\n * The user's ID (only used in matryoshka mode).\n */\n userId: string | null;\n\n /**\n * The display name to use for auto-registration.\n */\n displayName: string | null;\n /**\n * The device's ID (only used in matryoshka mode).\n */\n deviceId: string | null;\n /**\n * The base URL of the homeserver to use for media lookups in matryoshka mode.\n */\n baseUrl: string | null;\n /**\n * The BCP 47 code of the language the app should use.\n */\n lang: string | null;\n /**\n * The fonts which the interface should use, if not empty.\n */\n fonts: string[];\n /**\n * The factor by which to scale the interface's font size.\n */\n fontScale: number | null;\n /**\n * The Posthog analytics ID. It is only available if the user has given consent for sharing telemetry in element web.\n */\n posthogUserId: string | null;\n /**\n * The Posthog API host. This is only used in the embedded package of Element Call.\n */\n posthogApiHost: string | null;\n /**\n * The Posthog API key. This is only used in the embedded package of Element Call.\n */\n posthogApiKey: string | null;\n /**\n * Whether to use end-to-end encryption.\n */\n e2eEnabled: boolean;\n /**\n * E2EE password\n */\n password: string | null;\n /** This defines the homeserver that is going to be used when joining a room.\n * It has to be set to a non default value for links to rooms\n * that are not on the default homeserver,\n * that is in use for the current user.\n */\n viaServers: string | null;\n\n /**\n * This defines the homeserver that is going to be used when registering\n * a new (guest) user.\n * This can be user to configure a non default guest user server when\n * creating a spa link.\n */\n homeserver: string | null;\n\n /**\n * The rageshake submit URL. This is only used in the embedded package of Element Call.\n */\n rageshakeSubmitUrl: string | null;\n\n /**\n * The Sentry DSN. This is only used in the embedded package of Element Call.\n */\n sentryDsn: string | null;\n\n /**\n * The Sentry environment. This is only used in the embedded package of Element Call.\n */\n sentryEnvironment: string | null;\n /**\n * The theme to use for element call.\n * can be \"light\", \"dark\", \"light-high-contrast\" or \"dark-high-contrast\".\n */\n theme: string | null;\n}\n\n/**\n * The configuration for the app, which can be set via URL parameters.\n * Those property are different to the UrlProperties, since they are all optional\n * and configure the behavior of the app. Their value is the same if EC is used in\n * the same context but with different accounts/users.\n *\n * Their defaults can be controlled by the `intent` property.\n */\nexport interface UrlConfiguration {\n /**\n * Whether the app should keep the user confined to the current call/room.\n */\n confineToRoom: boolean;\n /**\n * Whether the app should pause before joining the call until it sees an\n * io.element.join widget action, allowing it to be preloaded.\n */\n preload: boolean;\n /**\n * The style of headers to show. \"standard\" is the default arrangement, \"none\"\n * hides the header entirely, and \"app_bar\" produces a header with a back\n * button like you might see in mobile apps. The callback for the back button\n * is window.controls.onBackButtonPressed.\n */\n header: HeaderStyle;\n /**\n * Whether the controls should be shown. For screen recording no controls can be desired.\n */\n showControls: boolean;\n /**\n * Whether to hide the screen-sharing button.\n */\n hideScreensharing: boolean;\n\n /**\n * Whether the app is allowed to use fallback STUN servers for ICE in case the\n * user's homeserver doesn't provide any.\n */\n allowIceFallback: boolean;\n\n /**\n * Whether the app should use per participant keys for E2EE.\n */\n perParticipantE2EE: boolean;\n /**\n * Whether the global JS controls for audio output devices should be enabled,\n * allowing the list of output devices to be controlled by the app hosting\n * Element Call.\n */\n controlledAudioDevices: boolean;\n /**\n * Setting this flag skips the lobby and brings you in the call directly.\n * In the widget this can be combined with preload to pass the device settings\n * with the join widget action.\n */\n skipLobby: boolean;\n /**\n * Setting this flag makes element call show the lobby after leaving a call.\n * This is useful for video rooms.\n */\n returnToLobby: boolean;\n /**\n * Whether and what type of notification EC should send, when the user joins the call.\n */\n sendNotificationType?: RTCNotificationType;\n /**\n * Whether the app should automatically leave the call when there\n * is no one left in the call.\n * This is one part to make the call matrixRTC session behave like a telephone call.\n */\n autoLeaveWhenOthersLeft: boolean;\n\n /**\n * If the client should behave like it is awaiting an answer if a notification was sent (wait for call pick up).\n * This is a no-op if not combined with sendNotificationType.\n *\n * This entails:\n * - show ui that it is awaiting an answer\n * - play a sound that indicates that it is awaiting an answer\n * - auto-dismiss the call widget once the notification lifetime expires on the receivers side.\n */\n waitForCallPickup: boolean;\n\n /**\n * Whether to enable echo cancellation for audio capture.\n * Defaults to true.\n */\n echoCancellation?: boolean;\n /**\n * Whether to enable noise suppression for audio capture.\n * Defaults to true.\n */\n noiseSuppression?: boolean;\n\n callIntent?: RTCCallIntent;\n}\n\n// If you need to add a new flag to this interface, prefer a name that describes\n// a specific behavior (such as 'confineToRoom'), rather than one that describes\n// the situations that call for this behavior ('isEmbedded'). This makes it\n// clearer what each flag means, and helps us avoid coupling Element Call's\n// behavior to the needs of specific consumers.\nexport interface UrlParams extends UrlProperties, UrlConfiguration {}\n\nclass ParamParser {\n private fragmentParams: URLSearchParams;\n private queryParams: URLSearchParams;\n\n public constructor(search: string, hash: string) {\n this.queryParams = new URLSearchParams(search);\n\n const fragmentQueryStart = hash.indexOf(\"?\");\n this.fragmentParams = new URLSearchParams(\n fragmentQueryStart === -1 ? \"\" : hash.substring(fragmentQueryStart),\n );\n }\n\n // Normally, URL params should be encoded in the fragment so as to avoid\n // leaking them to the server. However, we also check the normal query\n // string for backwards compatibility with versions that only used that.\n public getParam(name: string): string | null {\n return this.fragmentParams.get(name) ?? this.queryParams.get(name);\n }\n\n public getEnumParam<T extends string>(\n name: string,\n type: { [s: string]: T } | ArrayLike<T>,\n ): T | undefined {\n const value = this.getParam(name);\n if (value !== null && Object.values(type).includes(value as T)) {\n return value as T;\n }\n return undefined;\n }\n\n public getAllParams(name: string): string[] {\n return [\n ...this.fragmentParams.getAll(name),\n ...this.queryParams.getAll(name),\n ];\n }\n\n /**\n * Returns true if the flag exists and is not \"false\".\n */\n public getFlagParam(name: string, defaultValue = false): boolean {\n const param = this.getParam(name);\n return param === null ? defaultValue : param !== \"false\";\n }\n /**\n * Returns the value of the flag if it exists, or undefined if it does not.\n */\n public getFlag(name: string): boolean | undefined {\n const param = this.getParam(name);\n return param !== null ? param !== \"false\" : undefined;\n }\n}\n\nlet urlParamCache: {\n search?: string;\n hash?: string;\n params?: UrlParams;\n} = {};\n\n/**\n * Gets the url params and loads them from a cache if already computed.\n * @param search The URL search string\n * @param hash The URL hash\n * @returns The app parameters encoded in the URL\n */\nexport const getUrlParams = (\n search = window.location.search,\n hash = window.location.hash,\n): UrlParams => {\n if (\n urlParamCache.search === search &&\n urlParamCache.hash === hash &&\n urlParamCache.params\n ) {\n return urlParamCache.params;\n }\n const params = computeUrlParams(search, hash);\n urlParamCache = { search, hash, params };\n\n return params;\n};\n\n/**\n * Gets the app parameters for the current URL.\n * @param search The URL search string\n * @param hash The URL hash\n * @returns The app parameters encoded in the URL\n */\nexport const computeUrlParams = (search = \"\", hash = \"\"): UrlParams => {\n const parser = new ParamParser(search, hash);\n\n const fontScale = parseFloat(parser.getParam(\"fontScale\") ?? \"\");\n\n const widgetId = parser.getParam(\"widgetId\");\n const parentUrl = parser.getParam(\"parentUrl\");\n const isWidget = !!widgetId && !!parentUrl;\n\n /**\n * The user's intent with respect to the call.\n * e.g. if they clicked a Start Call button, this would be `start_call`.\n * If it was a Join Call button, it would be `join_existing`.\n * This is a platform specific default set of parameters, that allows to minize the configuration\n * needed to start a call. And empowers the EC codebase to control the platform/intent behavior in\n * a central place.\n *\n * In short: either provide url query parameters of UrlConfiguration or set the intent\n * (or the global defaults will be used).\n */\n const intent = !isWidget\n ? UserIntent.Unknown\n : (parser.getEnumParam(\"intent\", UserIntent) ?? UserIntent.Unknown);\n // Here we only use constants and `platform` to determine the intent preset.\n let intentPreset: UrlConfiguration = {\n confineToRoom: true,\n preload: false,\n header: platform === \"desktop\" ? HeaderStyle.None : HeaderStyle.AppBar,\n showControls: true,\n hideScreensharing: false,\n allowIceFallback: true,\n perParticipantE2EE: true,\n controlledAudioDevices: platform === \"desktop\" ? false : true,\n skipLobby: true,\n returnToLobby: false,\n sendNotificationType: \"notification\",\n autoLeaveWhenOthersLeft: false,\n waitForCallPickup: false,\n };\n switch (intent) {\n case UserIntent.StartNewCall:\n intentPreset.skipLobby = false;\n intentPreset.callIntent = \"video\";\n break;\n case UserIntent.JoinExistingCall:\n // On desktop this will be overridden based on which button was used to join the call\n intentPreset.skipLobby = false;\n intentPreset.callIntent = \"video\";\n break;\n case UserIntent.StartNewCallVoice:\n intentPreset.skipLobby = false;\n intentPreset.callIntent = \"audio\";\n break;\n case UserIntent.JoinExistingCallVoice:\n // On desktop this will be overridden based on which button was used to join the call\n intentPreset.skipLobby = false;\n intentPreset.callIntent = \"audio\";\n break;\n case UserIntent.StartNewCallDMVoice:\n intentPreset.callIntent = \"audio\";\n // Fall through\n case UserIntent.StartNewCallDM:\n intentPreset.skipLobby = true;\n intentPreset.sendNotificationType = \"ring\";\n intentPreset.autoLeaveWhenOthersLeft = true;\n intentPreset.waitForCallPickup = true;\n intentPreset.callIntent = intentPreset.callIntent ?? \"video\";\n break;\n case UserIntent.JoinExistingCallDMVoice:\n intentPreset.callIntent = \"audio\";\n // Fall through\n case UserIntent.JoinExistingCallDM:\n // On desktop this will be overridden based on which button was used to join the call\n intentPreset.skipLobby = true;\n intentPreset.autoLeaveWhenOthersLeft = true;\n intentPreset.callIntent = intentPreset.callIntent ?? \"video\";\n break;\n // Non widget usecase defaults\n default:\n intentPreset = {\n confineToRoom: false,\n preload: false,\n header: HeaderStyle.Standard,\n showControls: true,\n hideScreensharing: false,\n allowIceFallback: false,\n perParticipantE2EE: false,\n controlledAudioDevices: false,\n skipLobby: false,\n returnToLobby: false,\n sendNotificationType: undefined,\n autoLeaveWhenOthersLeft: false,\n waitForCallPickup: false,\n };\n }\n\n const properties: UrlProperties = {\n widgetId,\n parentUrl,\n // NB. we don't validate roomId here as we do in getRoomIdentifierFromUrl:\n // what would we do if it were invalid? If the widget API says that's what\n // the room ID is, then that's what it is.\n roomId: parser.getParam(\"roomId\"),\n password: parser.getParam(\"password\"),\n userId: isWidget ? parser.getParam(\"userId\") : null,\n displayName: parser.getParam(\"displayName\"),\n deviceId: isWidget ? parser.getParam(\"deviceId\") : null,\n baseUrl: isWidget ? parser.getParam(\"baseUrl\") : null,\n lang: parser.getParam(\"lang\"),\n fonts: parser.getAllParams(\"font\"),\n fontScale: Number.isNaN(fontScale) ? null : fontScale,\n theme: parser.getParam(\"theme\"),\n viaServers: !isWidget ? parser.getParam(\"viaServers\") : null,\n homeserver: !isWidget ? parser.getParam(\"homeserver\") : null,\n posthogApiHost: parser.getParam(\"posthogApiHost\"),\n posthogApiKey: parser.getParam(\"posthogApiKey\"),\n posthogUserId: parser.getParam(\"posthogUserId\"),\n rageshakeSubmitUrl: parser.getParam(\"rageshakeSubmitUrl\"),\n sentryDsn: parser.getParam(\"sentryDsn\"),\n sentryEnvironment: parser.getParam(\"sentryEnvironment\"),\n e2eEnabled: parser.getFlagParam(\"enableE2EE\", true),\n };\n\n const configuration: Partial<UrlConfiguration> = {\n confineToRoom: parser.getFlag(\"confineToRoom\"),\n preload: isWidget ? parser.getFlag(\"preload\") : undefined,\n // Check hideHeader for backwards compatibility. If header is set, hideHeader\n // is ignored.\n header: parser.getEnumParam(\"header\", HeaderStyle),\n showControls: parser.getFlag(\"showControls\"),\n hideScreensharing: parser.getFlag(\"hideScreensharing\"),\n allowIceFallback: parser.getFlag(\"allowIceFallback\"),\n perParticipantE2EE: parser.getFlag(\"perParticipantE2EE\"),\n controlledAudioDevices: parser.getFlag(\"controlledAudioDevices\"),\n skipLobby: isWidget ? parser.getFlag(\"skipLobby\") : false,\n // In SPA mode the user should always exit to the home screen when hanging\n // up, rather than being sent back to the lobby\n returnToLobby: isWidget ? parser.getFlag(\"returnToLobby\") : false,\n sendNotificationType: parser.getEnumParam(\"sendNotificationType\", [\n \"ring\",\n \"notification\",\n ]),\n waitForCallPickup: parser.getFlag(\"waitForCallPickup\"),\n autoLeaveWhenOthersLeft: parser.getFlag(\"autoLeave\"),\n noiseSuppression: parser.getFlagParam(\"noiseSuppression\", true),\n echoCancellation: parser.getFlagParam(\"echoCancellation\", true),\n };\n\n // Log the final configuration for debugging purposes.\n // This will only log when the cache is not yet set.\n logger.info(\n \"UrlParams: final set of url params\\n\",\n \"intent:\",\n intent,\n \"\\nproperties:\",\n redact(properties, \"password\"),\n \"configuration:\",\n configuration,\n );\n\n return {\n ...properties,\n ...intentPreset,\n ...pickBy(configuration, (v?: unknown) => v !== undefined),\n };\n};\n\n/**\n * Hook to simplify use of getUrlParams.\n * @returns The app parameters for the current URL\n */\nexport const useUrlParams = (): UrlParams => {\n const { search, hash } = useLocation();\n return useMemo(() => getUrlParams(search, hash), [search, hash]);\n};\n\nexport function getRoomIdentifierFromUrl(\n pathname: string,\n search: string,\n hash: string,\n): RoomIdentifier {\n let roomAlias: string | null = null;\n pathname = pathname.substring(1); // Strip the \"/\"\n const pathComponents = pathname.split(\"/\");\n const pathHasRoom = pathComponents[0] == \"room\";\n const hasRoomAlias = pathComponents.length > 1;\n\n // What type is our url: roomAlias in hash, room alias as the search path, roomAlias after /room/\n if (hash === \"\" || hash.startsWith(\"#?\")) {\n if (hasRoomAlias && pathHasRoom) {\n roomAlias = pathComponents[1];\n }\n if (!pathHasRoom) {\n roomAlias = pathComponents[0];\n }\n } else {\n roomAlias = hash;\n }\n\n // Delete \"?\" and what comes afterwards\n roomAlias = roomAlias?.split(\"?\")[0] ?? null;\n\n if (roomAlias) {\n // Make roomAlias is null, if it only is a \"#\"\n if (roomAlias.length <= 1) {\n roomAlias = null;\n } else {\n // Add \"#\", if not present\n if (!roomAlias.startsWith(\"#\")) {\n roomAlias = `#${roomAlias}`;\n }\n // Add server part, if not present\n if (!roomAlias.includes(\":\")) {\n roomAlias = `${roomAlias}:${Config.defaultServerName()}`;\n }\n }\n }\n\n const parser = new ParamParser(search, hash);\n\n // Make sure roomId is valid\n let roomId: string | null = parser.getParam(\"roomId\");\n if (roomId !== null) {\n // Replace any non-printable characters that another client may have inserted.\n // For instance on iOS, some copied links end up with zero width characters on the end which get encoded into the URL.\n // This isn't valid for a roomId, so we can freely strip the content.\n roomId = roomId.replaceAll(/^[^ -~]+|[^ -~]+$/g, \"\");\n if (!roomId.startsWith(\"!\")) {\n roomId = null;\n } else if (!roomId.includes(\"\")) {\n roomId = null;\n }\n }\n\n return {\n roomAlias,\n roomId,\n viaServers: parser.getAllParams(\"viaServers\"),\n };\n}\n\nexport const useRoomIdentifier = (): RoomIdentifier => {\n const { pathname, search, hash } = useLocation();\n return useMemo(\n () => getRoomIdentifierFromUrl(pathname, search, hash),\n [pathname, search, hash],\n );\n};\n\nexport function generateUrlSearchParams(\n roomId: string,\n encryptionSystem: EncryptionSystem,\n viaServers?: string[],\n): URLSearchParams {\n const params = new URLSearchParams();\n // The password shouldn't need URL encoding here (we generate URL-safe ones) but encode\n // it in case it came from another client that generated a non url-safe one\n switch (encryptionSystem?.kind) {\n case E2eeType.SHARED_KEY: {\n const encodedPassword = encodeURIComponent(encryptionSystem.secret);\n if (encodedPassword !== encryptionSystem.secret) {\n logger.info(\n \"Encoded call password used non URL-safe chars: buggy client?\",\n );\n }\n params.set(\"password\", encodedPassword);\n break;\n }\n case E2eeType.PER_PARTICIPANT:\n params.set(\"perParticipantE2EE\", \"true\");\n break;\n }\n params.set(\"roomId\", roomId);\n viaServers?.forEach((s) => params.set(\"viaServers\", s));\n\n return params;\n}\n","export default \"__VITE_ASSET__pADEGV0e5Qot5ZhzD_GrLg__\"","export default \"__VITE_ASSET__EsSyonNWXFChOyjfj2S3nw__\"","export default \"__VITE_ASSET__yW_eMvu1QqHghXJHMLbBbg__\"","export default \"__VITE_ASSET__2ZEzIIM_atdpHcr$6kvj$Q__\"","export default \"__VITE_ASSET__zOyQqdNGsn0lL_XEFrarVA__\"","export default \"__VITE_ASSET__K1daVVNYU_lXF$FdA5v55g__\"","export default \"__VITE_ASSET__7PUm3F_uVf$21BIFLSklvQ__\"","export default \"__VITE_ASSET__E8wuXQ_AmxPT2QBGX_$9Vw__\"","export default \"__VITE_ASSET__9kBTUqaINCHDANxrI10WCw__\"","export default \"__VITE_ASSET__C$4kQWR6NkPB83QJdL0WCQ__\"","export default \"__VITE_ASSET__q6tfGKm3Qmt5DJmATeHQdA__\"","export default \"__VITE_ASSET__LphhLScmzwPqWwTyAbd7ig__\"","export default \"__VITE_ASSET__TX5a1iViCylaCWPFSCQG2w__\"","export default \"__VITE_ASSET__kSHvwCjLFxLpY3FM1MyAsA__\"","export default \"__VITE_ASSET__0PgJxXqjw$KAl6PgZjQb5g__\"","export default \"__VITE_ASSET__OestAvA2SyLT4CG6L76dAw__\"","export default \"__VITE_ASSET__nJkgIVJgL11RgZiGUBj6wA__\"","export default \"__VITE_ASSET__i2ywl_YzKp2MjtOEr7ngzA__\"","export default \"__VITE_ASSET__tgFyw$X211zXSctfMU9_LA__\"","export default \"__VITE_ASSET__U6muqRGa8aHtq8t0c9wAzg__\"","export default \"__VITE_ASSET__y3WuTrdTs_Si7uYpRddj9w__\"","export default \"__VITE_ASSET__SH3JcDOvWNcn2WIvxBnLpg__\"","/*\nCopyright 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type RelationType } from \"matrix-js-sdk\";\n\nimport catSoundOgg from \"../sound/reactions/cat.ogg?url\";\nimport catSoundMp3 from \"../sound/reactions/cat.mp3?url\";\nimport clapSoundOgg from \"../sound/reactions/clap.ogg?url\";\nimport clapSoundMp3 from \"../sound/reactions/clap.mp3?url\";\nimport cricketsSoundOgg from \"../sound/reactions/crickets.ogg?url\";\nimport cricketsSoundMp3 from \"../sound/reactions/crickets.mp3?url\";\nimport dogSoundOgg from \"../sound/reactions/dog.ogg?url\";\nimport dogSoundMp3 from \"../sound/reactions/dog.mp3?url\";\nimport genericSoundOgg from \"../sound/reactions/generic.ogg?url\";\nimport genericSoundMp3 from \"../sound/reactions/generic.mp3?url\";\nimport lightbulbSoundOgg from \"../sound/reactions/lightbulb.ogg?url\";\nimport lightbulbSoundMp3 from \"../sound/reactions/lightbulb.mp3?url\";\nimport partySoundOgg from \"../sound/reactions/party.ogg?url\";\nimport partySoundMp3 from \"../sound/reactions/party.mp3?url\";\nimport deerSoundOgg from \"../sound/reactions/deer.ogg?url\";\nimport deerSoundMp3 from \"../sound/reactions/deer.mp3?url\";\nimport rockSoundOgg from \"../sound/reactions/rock.ogg?url\";\nimport rockSoundMp3 from \"../sound/reactions/rock.mp3?url\";\nimport waveSoundOgg from \"../sound/reactions/wave.ogg?url\";\nimport waveSoundMp3 from \"../sound/reactions/wave.mp3?url\";\nimport baduntssSoundOgg from \"../sound/reactions/baduntss.ogg?url\";\nimport baduntssSoundMp3 from \"../sound/reactions/baduntss.mp3?url\";\n\nexport const ElementCallReactionEventType = \"io.element.call.reaction\";\n\nexport interface ReactionOption {\n /**\n * The emoji to display. This is always displayed even if no emoji is matched\n * from `ReactionSet`.\n *\n * @note Any excess characters are trimmed from this string.\n */\n emoji: string;\n /**\n * The name of the emoji. This is the unique key used when looking for a local\n * effect in our `ReactionSet` array.\n */\n name: string;\n /**\n * Optional aliases to look for when searching for an emoji in the interface.\n */\n alias?: string[];\n /**\n * Optional sound to play. An ogg sound must always be provided.\n * If this sound isn't given, `GenericReaction` is used.\n */\n sound?: {\n mp3?: string;\n ogg: string;\n };\n}\n\nexport interface ECallReactionEventContent {\n \"m.relates_to\": {\n rel_type: RelationType.Reference;\n event_id: string;\n };\n emoji: string;\n name: string;\n}\n\nexport const GenericReaction: ReactionOption = {\n name: \"generic\",\n emoji: \"\", // Filled in by user\n sound: {\n mp3: genericSoundMp3,\n ogg: genericSoundOgg,\n },\n};\n\nexport const ReactionsRowSize = 5;\n\n// The first {ReactionsRowSize} reactions are always visible.\nexport const ReactionSet: ReactionOption[] = [\n {\n emoji: \"👍\",\n name: \"thumbsup\",\n // TODO: These need to be translated.\n alias: [\"+1\", \"yes\", \"thumbs up\"],\n },\n {\n emoji: \"🎉\",\n name: \"party\",\n alias: [\"hurray\", \"success\"],\n sound: {\n ogg: partySoundOgg,\n mp3: partySoundMp3,\n },\n },\n {\n emoji: \"👏\",\n name: \"clapping\",\n alias: [\"celebrate\", \"success\"],\n sound: {\n ogg: clapSoundOgg,\n mp3: clapSoundMp3,\n },\n },\n {\n emoji: \"🐶\",\n name: \"dog\",\n alias: [\"doggo\", \"pupper\", \"woofer\", \"bark\"],\n sound: {\n ogg: dogSoundOgg,\n mp3: dogSoundMp3,\n },\n },\n {\n emoji: \"🐱\",\n name: \"cat\",\n alias: [\"meow\", \"kitty\"],\n sound: {\n ogg: catSoundOgg,\n mp3: catSoundMp3,\n },\n },\n {\n emoji: \"💡\",\n name: \"lightbulb\",\n alias: [\"bulb\", \"light\", \"idea\", \"ping\"],\n sound: {\n ogg: lightbulbSoundOgg,\n mp3: lightbulbSoundMp3,\n },\n },\n {\n emoji: \"🦗\",\n name: \"crickets\",\n alias: [\"awkward\", \"silence\"],\n sound: {\n ogg: cricketsSoundOgg,\n mp3: cricketsSoundMp3,\n },\n },\n {\n emoji: \"👎\",\n name: \"thumbsdown\",\n alias: [\"-1\", \"no\", \"thumbs no\"],\n },\n {\n emoji: \"😵💫\",\n name: \"dizzy\",\n alias: [\"dazed\", \"confused\"],\n },\n {\n emoji: \"👌\",\n name: \"ok\",\n alias: [\"okay\", \"cool\"],\n },\n {\n emoji: \"🥰\",\n name: \"heart\",\n alias: [\"heart\", \"love\", \"smiling\"],\n },\n {\n emoji: \"😄\",\n name: \"laugh\",\n alias: [\"giggle\", \"joy\", \"smiling\"],\n },\n {\n emoji: \"🦌\",\n name: \"deer\",\n alias: [\"stag\", \"doe\", \"bleat\"],\n sound: {\n ogg: deerSoundOgg,\n mp3: deerSoundMp3,\n },\n },\n {\n emoji: \"🤘\",\n name: \"rock\",\n alias: [\"cool\", \"horns\", \"guitar\"],\n sound: {\n ogg: rockSoundOgg,\n mp3: rockSoundMp3,\n },\n },\n {\n emoji: \"👋\",\n name: \"wave\",\n alias: [\"hand\", \"waving\"],\n sound: {\n ogg: waveSoundOgg,\n mp3: waveSoundMp3,\n },\n },\n {\n emoji: \"🥁\",\n name: \"drum\",\n alias: [\"joke\"],\n sound: {\n ogg: baduntssSoundOgg,\n mp3: baduntssSoundMp3,\n },\n },\n];\n\nexport interface RaisedHandInfo {\n /**\n * Call membership event that was reacted to.\n */\n membershipEventId: string;\n /**\n * Event ID of the reaction itself.\n */\n reactionEventId: string;\n /**\n * The time when the reaction was raised.\n */\n time: Date;\n}\n\nexport interface ReactionInfo {\n expireAfter: Date;\n reactionOption: ReactionOption;\n}\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport {\n EventType,\n createRoomWidgetClient,\n type MatrixClient,\n} from \"matrix-js-sdk\";\nimport {\n WidgetApi,\n MatrixCapabilities,\n WidgetApiToWidgetAction,\n} from \"matrix-widget-api\";\n\nimport type { IWidgetApiRequest } from \"matrix-widget-api\";\nimport { LazyEventEmitter } from \"./LazyEventEmitter\";\nimport { getUrlParams } from \"./UrlParams\";\nimport { Config } from \"./config/Config\";\nimport { ElementCallReactionEventType } from \"./reactions\";\n\n// Subset of the actions in element-web\nexport enum ElementWidgetActions {\n JoinCall = \"io.element.join\",\n HangupCall = \"im.vector.hangup\",\n Close = \"io.element.close\",\n // This can be sent as from or to widget\n // fromWidget: updates the client about the current device mute state\n // toWidget: the client requests a specific device mute configuration\n // The reply will always be the resulting configuration\n // It is possible to sent an empty configuration to retrieve the current values or\n // just one of the fields to update that particular value\n // An undefined field means that EC will keep the mute state as is.\n // -> this will allow the client to only get the current state\n //\n // The data of the widget action request and the response are:\n // {\n // audio_enabled?: boolean,\n // video_enabled?: boolean\n // }\n DeviceMute = \"io.element.device_mute\",\n}\n\nexport interface JoinCallData {\n audioInput: string | null;\n videoInput: string | null;\n}\n\nexport interface WidgetHelpers {\n api: WidgetApi;\n lazyActions: LazyEventEmitter;\n client: Promise<MatrixClient>;\n}\n\n/**\n * A point of access to the widget API, if the app is running as a widget. This\n * is initialized with `initializeWidget`. This should happen at the top level because the widget messaging\n * needs to be set up ASAP on load to ensure it doesn't miss any requests.\n */\nexport let widget: WidgetHelpers | null = null;\n\n/**\n * Should be called as soon as possible on app start. (In the initilizer before react)\n */\n// this needs to be a seperate call and cannot be done on import to allow us to spy on methods in here before\n// execution.\nexport const initializeWidget = (\n rtcApplication: string = \"m.call\",\n sendRoomEvents = false,\n): void => {\n try {\n const {\n widgetId,\n parentUrl,\n roomId,\n userId,\n deviceId,\n baseUrl,\n e2eEnabled,\n allowIceFallback,\n } = getUrlParams();\n\n if (!roomId) throw new Error(\"Room ID must be supplied\");\n if (!userId) throw new Error(\"User ID must be supplied\");\n if (!deviceId) throw new Error(\"Device ID must be supplied\");\n if (!baseUrl) throw new Error(\"Base URL must be supplied\");\n if (widgetId && parentUrl) {\n const parentOrigin = new URL(parentUrl).origin;\n logger.info(\"Widget API is available\");\n const api = new WidgetApi(widgetId, parentOrigin);\n api.requestCapability(MatrixCapabilities.AlwaysOnScreen);\n api.requestCapability(MatrixCapabilities.MSC4039DownloadFile);\n\n // Set up the lazy action emitter, but only for select actions that we\n // intend for the app to handle\n const lazyActions = new LazyEventEmitter();\n [\n WidgetApiToWidgetAction.ThemeChange,\n ElementWidgetActions.JoinCall,\n ElementWidgetActions.HangupCall,\n ElementWidgetActions.DeviceMute,\n ].forEach((action) => {\n api.on(`action:${action}`, (ev: CustomEvent<IWidgetApiRequest>) => {\n ev.preventDefault();\n lazyActions.emit(action, ev);\n });\n });\n\n // Now, initialize the matryoshka MatrixClient (so named because it routes\n // all requests through the host client via the widget API)\n // We need to do this now rather than later because it has capabilities to\n // request, and is responsible for starting the transport (should it be?)\n\n // These are all the event types the app uses\n const sendEvent = [\n EventType.CallNotify, // Sent as a deprecated fallback\n EventType.RTCNotification,\n ];\n if (sendRoomEvents) {\n sendEvent.push(EventType.RoomMessage);\n }\n const sendRecvEvent = [\n \"org.matrix.rageshake_request\",\n EventType.CallEncryptionKeysPrefix,\n EventType.Reaction,\n EventType.RoomRedaction,\n ElementCallReactionEventType,\n EventType.RTCDecline,\n EventType.RTCMembership,\n ];\n\n const sendState = [\n userId, // Legacy call membership events\n `_${userId}_${deviceId}_${rtcApplication}`, // Session membership events\n `${userId}_${deviceId}_${rtcApplication}`, // The above with no leading underscore, for room versions whose auth rules allow it\n ].map((stateKey) => ({\n eventType: EventType.GroupCallMemberPrefix,\n stateKey,\n }));\n const receiveState = [\n { eventType: EventType.RoomCreate },\n { eventType: EventType.RoomName },\n { eventType: EventType.RoomMember },\n { eventType: EventType.RoomEncryption },\n { eventType: EventType.GroupCallMemberPrefix },\n ];\n\n const sendRecvToDevice = [\n EventType.CallInvite,\n EventType.CallCandidates,\n EventType.CallAnswer,\n EventType.CallHangup,\n EventType.CallReject,\n EventType.CallSelectAnswer,\n EventType.CallNegotiate,\n EventType.CallSDPStreamMetadataChanged,\n EventType.CallSDPStreamMetadataChangedPrefix,\n EventType.CallReplaces,\n EventType.CallEncryptionKeysPrefix,\n ];\n\n const client = createRoomWidgetClient(\n api,\n {\n sendEvent: [...sendEvent, ...sendRecvEvent],\n receiveEvent: sendRecvEvent,\n sendState,\n receiveState,\n sendToDevice: sendRecvToDevice,\n receiveToDevice: sendRecvToDevice,\n turnServers: false,\n sendDelayedEvents: true,\n updateDelayedEvents: true,\n sendSticky: true,\n receiveSticky: true,\n },\n roomId,\n {\n baseUrl,\n userId,\n deviceId,\n timelineSupport: true,\n useE2eForGroupCall: e2eEnabled,\n fallbackICEServerAllowed: allowIceFallback,\n },\n // ContentLoaded event will be sent as soon as the theme is set (see useTheme.ts)\n false,\n );\n\n const clientPromise = async (): Promise<MatrixClient> => {\n // Wait for the config file to be ready (we load very early on so it might not\n // be otherwise)\n await Config.init();\n await client.startClient({ clientWellKnownPollPeriod: 60 * 10 });\n return client;\n };\n\n widget = { api, lazyActions, client: clientPromise() };\n } else {\n if (import.meta.env.MODE !== \"test\")\n logger.info(\"No widget API available\");\n widget = null;\n }\n } catch (e) {\n logger.warn(\"Continuing without the widget API\", e);\n widget = null;\n }\n};\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n useMemo,\n type FC,\n type CSSProperties,\n useState,\n useEffect,\n} from \"react\";\nimport { Avatar as CompoundAvatar } from \"@vector-im/compound-web\";\nimport { type MatrixClient } from \"matrix-js-sdk\";\nimport { type WidgetApi } from \"matrix-widget-api\";\n\nimport { useClientState } from \"./ClientContext\";\nimport { widget } from \"./widget\";\n\nexport enum Size {\n XS = \"xs\",\n SM = \"sm\",\n MD = \"md\",\n LG = \"lg\",\n XL = \"xl\",\n}\n\nexport const sizes = new Map([\n [Size.XS, 22],\n [Size.SM, 32],\n [Size.MD, 36],\n [Size.LG, 42],\n [Size.XL, 90],\n]);\n\nexport interface Props {\n id: string;\n name: string;\n className?: string;\n src?: string;\n size?: Size | number;\n style?: CSSProperties;\n}\n\nexport function getAvatarUrl(\n client: MatrixClient,\n mxcUrl: string | null,\n avatarSize = 96,\n): string | null {\n const width = Math.floor(avatarSize * window.devicePixelRatio);\n const height = Math.floor(avatarSize * window.devicePixelRatio);\n // scale is more suitable for larger sizes\n const resizeMethod = avatarSize <= 96 ? \"crop\" : \"scale\";\n return mxcUrl\n ? client.mxcUrlToHttp(\n mxcUrl,\n width,\n height,\n resizeMethod,\n false,\n true,\n true,\n )\n : null;\n}\n\nexport const Avatar: FC<Props> = ({\n className,\n id,\n name,\n src,\n size = Size.MD,\n style,\n ...props\n}) => {\n const clientState = useClientState();\n\n const sizePx = useMemo(\n () =>\n Object.values(Size).includes(size as Size)\n ? sizes.get(size as Size)!\n : (size as number),\n [size],\n );\n\n const [avatarUrl, setAvatarUrl] = useState<string | undefined>(undefined);\n\n // In theory, a change in `clientState` or `sizePx` could run extra getAvatarFromWidgetAPI calls, but in practice they should be stable long before this code runs.\n useEffect(() => {\n if (!src) {\n setAvatarUrl(undefined);\n return;\n }\n\n let blob: Promise<Blob>;\n\n if (widget?.api) {\n blob = getAvatarFromWidgetAPI(widget.api, src);\n } else if (\n clientState?.state === \"valid\" &&\n clientState.authenticated?.client &&\n sizePx\n ) {\n blob = getAvatarFromServer(clientState.authenticated.client, src, sizePx);\n } else {\n setAvatarUrl(undefined);\n return;\n }\n\n let objectUrl: string | undefined;\n let stale = false;\n blob\n .then((blob) => {\n if (stale) {\n return;\n }\n objectUrl = URL.createObjectURL(blob);\n setAvatarUrl(objectUrl);\n })\n .catch((ex) => {\n if (stale) {\n return;\n }\n setAvatarUrl(undefined);\n });\n\n return (): void => {\n stale = true;\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n };\n }, [clientState, src, sizePx]);\n\n return (\n <CompoundAvatar\n className={className}\n id={id}\n name={name}\n size={`${sizePx}px`}\n src={avatarUrl}\n style={style}\n {...props}\n />\n );\n};\n\nasync function getAvatarFromServer(\n client: MatrixClient,\n src: string,\n sizePx: number,\n): Promise<Blob> {\n const httpSrc = getAvatarUrl(client, src, sizePx);\n if (!httpSrc) {\n throw new Error(\"Failed to get http avatar URL\");\n }\n\n const token = client.getAccessToken();\n if (!token) {\n throw new Error(\"Failed to get access token\");\n }\n\n const request = await fetch(httpSrc, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n const blob = await request.blob();\n\n return blob;\n}\n\n// export for testing\nexport async function getAvatarFromWidgetAPI(\n api: WidgetApi,\n src: string,\n): Promise<Blob> {\n const response = await api.downloadFile(src);\n const file = response.file;\n\n // element-web sends a Blob, and the MSC4039 is considering changing the spec to strictly Blob, so only handling that\n if (file instanceof Blob) {\n return file;\n } else if (typeof file === \"string\") {\n // it is a base64 string\n const bytes = Uint8Array.from(atob(file), (c) => c.charCodeAt(0));\n return new Blob([bytes]);\n }\n throw new Error(\n \"Downloaded file format is not supported: \" + typeof file + \"\",\n );\n}\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type FC } from \"react\";\nimport { Tooltip } from \"@vector-im/compound-web\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n LockSolidIcon,\n LockOffIcon,\n} from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport styles from \"./EncryptionLock.module.css\";\n\ninterface Props {\n encrypted: boolean;\n}\n\nexport const EncryptionLock: FC<Props> = ({ encrypted }) => {\n const { t } = useTranslation();\n const Icon = encrypted ? LockSolidIcon : LockOffIcon;\n const label = encrypted ? t(\"common.encrypted\") : t(\"common.unencrypted\");\n\n return (\n <Tooltip label={label} placement=\"right\" isTriggerInteractive={false}>\n <Icon\n width={16}\n height={16}\n className={styles.lock}\n data-encrypted={encrypted}\n />\n </Tooltip>\n );\n};\n","/*\nCopyright 2023-2025 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { useCallback, useMemo, useSyncExternalStore } from \"react\";\n\n/**\n * React hook that tracks whether the given media query matches.\n */\nexport function useMediaQuery(query: string): boolean {\n const mediaQuery = useMemo(() => window.matchMedia(query), [query]);\n\n const subscribe = useCallback(\n (onChange: () => void) => {\n mediaQuery.addEventListener(\"change\", onChange);\n return (): void => mediaQuery.removeEventListener(\"change\", onChange);\n },\n [mediaQuery],\n );\n const getState = useCallback(() => mediaQuery.matches, [mediaQuery]);\n return useSyncExternalStore(subscribe, getState);\n}\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport classNames from \"classnames\";\nimport { type FC, type HTMLAttributes, type ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport styles from \"./DisconnectedBanner.module.css\";\nimport { type ValidClientState, useClientState } from \"./ClientContext\";\n\ninterface Props extends HTMLAttributes<HTMLElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport const DisconnectedBanner: FC<Props> = ({\n children,\n className,\n ...rest\n}) => {\n const { t } = useTranslation();\n const clientState = useClientState();\n let shouldShowBanner = false;\n\n if (clientState?.state === \"valid\") {\n const validClientState = clientState as ValidClientState;\n shouldShowBanner = validClientState.disconnected;\n }\n\n return (\n <>\n {shouldShowBanner && (\n <div className={classNames(styles.banner, className)} {...rest}>\n {children}\n {t(\"disconnected_banner\")}\n </div>\n )}\n </>\n );\n};\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport classNames from \"classnames\";\nimport { type Ref, type FC, type HTMLAttributes, type ReactNode } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { Heading, Text } from \"@vector-im/compound-web\";\nimport { UserProfileIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport styles from \"./Header.module.css\";\nimport Logo from \"./icons/Logo.svg?react\";\nimport { Avatar, Size } from \"./Avatar\";\nimport { EncryptionLock } from \"./room/EncryptionLock\";\nimport { useMediaQuery } from \"./useMediaQuery\";\nimport { DisconnectedBanner } from \"./DisconnectedBanner\";\n\ninterface HeaderProps extends HTMLAttributes<HTMLElement> {\n ref?: Ref<HTMLElement>;\n children: ReactNode;\n className?: string;\n /**\n * Whether the header should display an informational banner whenever the\n * client is disconnected from the homeserver.\n * @default true\n */\n disconnectedBanner?: boolean;\n}\n\nexport const Header: FC<HeaderProps> = ({\n ref,\n children,\n className,\n disconnectedBanner = true,\n ...rest\n}) => {\n return (\n <>\n <header\n ref={ref}\n className={classNames(styles.header, className)}\n {...rest}\n >\n {children}\n </header>\n {disconnectedBanner && <DisconnectedBanner />}\n </>\n );\n};\n\nHeader.displayName = \"Header\";\n\ninterface LeftNavProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n className?: string;\n hideMobile?: boolean;\n}\n\nexport const LeftNav: FC<LeftNavProps> = ({\n children,\n className,\n hideMobile,\n ...rest\n}) => {\n return (\n <div\n className={classNames(\n styles.nav,\n styles.leftNav,\n { [styles.hideMobile]: hideMobile },\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\ninterface RightNavProps extends HTMLAttributes<HTMLElement> {\n children?: ReactNode;\n className?: string;\n hideMobile?: boolean;\n}\n\nexport const RightNav: FC<RightNavProps> = ({\n children,\n className,\n hideMobile,\n ...rest\n}) => {\n return (\n <div\n className={classNames(\n styles.nav,\n styles.rightNav,\n { [styles.hideMobile]: hideMobile },\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n};\n\ninterface HeaderLogoProps {\n className?: string;\n}\n\nexport const HeaderLogo: FC<HeaderLogoProps> = ({ className }) => {\n const { t } = useTranslation();\n\n return (\n <Link\n className={classNames(styles.headerLogo, className)}\n to=\"/\"\n aria-label={t(\"header_label\")}\n >\n <Logo />\n </Link>\n );\n};\n\ninterface RoomHeaderInfoProps {\n id: string;\n name: string;\n avatarUrl: string | null;\n encrypted: boolean;\n participantCount: number | null;\n}\n\nexport const RoomHeaderInfo: FC<RoomHeaderInfoProps> = ({\n id,\n name,\n avatarUrl,\n encrypted,\n participantCount,\n}) => {\n const { t } = useTranslation();\n const size = useMediaQuery(\"(max-width: 550px)\") ? \"sm\" : \"lg\";\n\n return (\n <div className={styles.roomHeaderInfo} data-size={size}>\n <Avatar\n className={styles.roomAvatar}\n id={id}\n name={name}\n size={size === \"sm\" ? Size.SM : 56}\n src={avatarUrl ?? undefined}\n />\n <div className={styles.nameLine}>\n <Heading\n type={size === \"sm\" ? \"body\" : \"heading\"}\n size={size === \"sm\" ? \"lg\" : \"md\"}\n weight=\"semibold\"\n data-testid=\"roomHeader_roomName\"\n >\n {name}\n </Heading>\n <EncryptionLock encrypted={encrypted} />\n </div>\n {(participantCount ?? 0) > 0 && (\n <div className={styles.participantsLine}>\n <UserProfileIcon\n width={20}\n height={20}\n aria-label={t(\"header_participants_label\")}\n />\n <Text\n as=\"span\"\n size=\"sm\"\n weight=\"medium\"\n data-testid=\"roomHeader_participants_count\"\n >\n {t(\"participant_count\", { count: participantCount ?? 0 })}\n </Text>\n </div>\n )}\n </div>\n );\n};\n","/*\nCopyright 2018-2024 New Vector Ltd.\nCopyright 2017 OpenMarket Ltd\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\n// This module contains all the code needed to log the console, persist it to\n// disk and submit bug reports. Rationale is as follows:\n// - Monkey-patching the console is preferable to having a log library because\n// we can catch logs by other libraries more easily, without having to all\n// depend on the same log framework / pass the logger around.\n// - We use IndexedDB to persists logs because it has generous disk space\n// limits compared to local storage. IndexedDB does not work in incognito\n// mode, in which case this module will not be able to write logs to disk.\n// However, the logs will still be stored in-memory, so can still be\n// submitted in a bug report should the user wish to: we can also store more\n// logs in-memory than in local storage, which does work in incognito mode.\n// We also need to handle the case where there are 2+ tabs. Each JS runtime\n// generates a random string which serves as the \"ID\" for that tab/session.\n// These IDs are stored along with the log lines.\n// - Bug reports are sent as a POST over HTTPS: it purposefully does not use\n// Matrix as bug reports may be made when Matrix is not responsive (which may\n// be the cause of the bug). We send the most recent N MB of UTF-8 log data,\n// starting with the most recent, which we know because the \"ID\"s are\n// actually timestamps. We then purge the remaining logs. We also do this\n// purge on startup to prevent logs from accumulating.\n\nimport EventEmitter from \"events\";\nimport { throttle } from \"lodash-es\";\nimport { type Logger, logger } from \"matrix-js-sdk/lib/logger\";\nimport { secureRandomString } from \"matrix-js-sdk/lib/randomstring\";\nimport { type LoggingMethod } from \"loglevel\";\n\nimport type loglevel from \"loglevel\";\n\n// the length of log data we keep in indexeddb (and include in the reports)\nconst MAX_LOG_SIZE = 1024 * 1024 * 5; // 5 MB\n\n// Shortest amount of time between flushes. We are just appending to an\n// IndexedDB table so we don't expect flushing to be that expensive, but\n// we can batch the writes a little.\nconst MAX_FLUSH_INTERVAL_MS = 2 * 1000;\n\n// only descend this far into nested object trees\nconst DEPTH_LIMIT = 3;\n\nenum ConsoleLoggerEvent {\n Log = \"log\",\n}\n\n// A class which monkey-patches the global console and stores log lines.\n\ninterface LogEntry {\n id: string;\n lines: string;\n index?: number;\n}\n\nclass ConsoleLogger extends EventEmitter {\n private logs = \"\";\n\n public log = (\n level: LogLevel,\n ...args: (Error | DOMException | object | string | undefined)[]\n ): void => {\n // We don't know what locale the user may be running so use ISO strings\n const ts = new Date().toISOString();\n\n // Convert objects and errors to helpful things\n args = args.map((arg) => {\n if (arg instanceof DOMException) {\n return arg.message + ` (${arg.name} | ${arg.code})`;\n } else if (arg instanceof Error) {\n return arg.message + (arg.stack ? `\\n${arg.stack}` : \"\");\n } else if (typeof arg === \"object\") {\n try {\n return JSON.stringify(arg, getCircularReplacer());\n } catch {\n // Stringify can fail if the object has circular references or if\n // there is a bigInt.\n // Did happen even with our `getCircularReplacer`. In this case, just log\n return \"<$ failed to serialize object $>\";\n }\n } else {\n return arg;\n }\n });\n\n // Some browsers support string formatting which we're not doing here\n // so the lines are a little more ugly but easy to implement / quick to\n // run.\n // Example line:\n // 2017-01-18T11:23:53.214Z W Failed to set badge count\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n let line = `${ts} ${level} ${args.join(\" \")}\\n`;\n // Do some cleanup\n line = line.replace(/token=[a-zA-Z0-9-]+/gm, \"token=xxxxx\");\n // Using + really is the quickest way in JS\n // http://jsperf.com/concat-vs-plus-vs-join\n this.logs += line;\n\n this.emit(ConsoleLoggerEvent.Log);\n };\n\n /**\n * Returns the log lines to flush to disk and empties the internal log buffer\n * @return \\n delimited log lines\n */\n public popLogs(): string {\n const logsToFlush = this.logs;\n this.logs = \"\";\n return logsToFlush;\n }\n\n /**\n * Returns lines currently in the log buffer without removing them\n * @return \\n delimited log lines\n */\n public peekLogs(): string {\n return this.logs;\n }\n}\n\n// A class which stores log lines in an IndexedDB instance.\nclass IndexedDBLogStore {\n private index = 0;\n private db?: IDBDatabase;\n private flushPromise?: Promise<void>;\n private flushAgainPromise?: Promise<void>;\n private id: string;\n\n public constructor(\n private indexedDB: IDBFactory,\n private loggerInstance: ConsoleLogger,\n ) {\n this.id = \"instance-\" + secureRandomString(16);\n\n loggerInstance.on(ConsoleLoggerEvent.Log, this.onLoggerLog);\n window.addEventListener(\"beforeunload\", () => {\n this.flush().catch((e) =>\n logger.error(\"Failed to flush logs before unload\", e),\n );\n });\n }\n\n /**\n * @return Resolves when the store is ready.\n */\n public async connect(): Promise<void> {\n const req = this.indexedDB.open(\"logs-element-call\");\n return new Promise((resolve, reject) => {\n req.onsuccess = (): void => {\n this.db = req.result;\n\n resolve();\n };\n\n req.onerror = (): void => {\n const err = \"Failed to open log database: \" + req?.error?.name;\n logger.error(err);\n reject(new Error(err));\n };\n\n // First time: Setup the object store\n req.onupgradeneeded = (): void => {\n const db = req.result;\n // This is the log entries themselves. Each entry is a chunk of\n // logs (ie multiple lines). 'id' is the instance ID (so logs with\n // the same instance ID are all from the same session) and 'index'\n // is a sequence number for the chunk. The log lines live in the\n // 'lines' key, which is a chunk of many newline-separated log lines.\n const logObjStore = db.createObjectStore(\"logs\", {\n keyPath: [\"id\", \"index\"],\n });\n // Keys in the database look like: [ \"instance-148938490\", 0 ]\n // (The instance ID plus the ID of each log chunk).\n // Later on we need to query everything based on an instance id.\n // In order to do this, we need to set up indexes \"id\".\n logObjStore.createIndex(\"id\", \"id\", { unique: false });\n\n logObjStore.add(\n this.generateLogEntry(new Date() + \" ::: Log database was created.\"),\n );\n\n // This records the last time each instance ID generated a log message, such\n // that the logs from each session can be collated in the order they last logged\n // something.\n const lastModifiedStore = db.createObjectStore(\"logslastmod\", {\n keyPath: \"id\",\n });\n lastModifiedStore.add(this.generateLastModifiedTime());\n };\n });\n }\n\n private onLoggerLog = (): void => {\n if (!this.db) return;\n\n this.throttledFlush();\n };\n\n // Throttled function to flush logs. We use throttle rather\n // than debounce as we want logs to be written regularly, otherwise\n // if there's a constant stream of logging, we'd never write anything.\n private throttledFlush = throttle(() => this.flush, MAX_FLUSH_INTERVAL_MS, {\n leading: false,\n trailing: true,\n });\n\n /**\n * Flush logs to disk.\n *\n * There are guards to protect against race conditions in order to ensure\n * that all previous flushes have completed before the most recent flush.\n * Consider without guards:\n * - A calls flush() periodically.\n * - B calls flush() and wants to send logs immediately afterwards.\n * - If B doesn't wait for A's flush to complete, B will be missing the\n * contents of A's flush.\n * To protect against this, we set 'flushPromise' when a flush is ongoing.\n * Subsequent calls to flush() during this period will chain another flush,\n * then keep returning that same chained flush.\n *\n * This guarantees that we will always eventually do a flush when flush() is\n * called.\n *\n * @return Resolved when the logs have been flushed.\n */\n public flush = async (): Promise<void> => {\n // check if a flush() operation is ongoing\n if (this.flushPromise) {\n if (this.flushAgainPromise) {\n // this is the 3rd+ time we've called flush() : return the same promise.\n return this.flushAgainPromise;\n }\n // queue up a flush to occur immediately after the pending one completes.\n this.flushAgainPromise = this.flushPromise.then(this.flush).then(() => {\n this.flushAgainPromise = undefined;\n });\n return this.flushAgainPromise;\n }\n // there is no flush promise or there was but it has finished, so do\n // a brand new one, destroying the chain which may have been built up.\n this.flushPromise = new Promise<void>((resolve, reject) => {\n if (!this.db) {\n // not connected yet or user rejected access for us to r/w to the db.\n reject(new Error(\"No connected database\"));\n return;\n }\n const lines = this.loggerInstance.popLogs();\n if (lines.length === 0) {\n resolve();\n return;\n }\n const txn = this.db.transaction([\"logs\", \"logslastmod\"], \"readwrite\");\n const objStore = txn.objectStore(\"logs\");\n txn.oncomplete = (): void => {\n resolve();\n };\n txn.onerror = (event): void => {\n logger.error(\"Failed to flush logs : \", event);\n reject(new Error(\"Failed to write logs: \" + txn?.error?.message));\n };\n objStore.add(this.generateLogEntry(lines));\n const lastModStore = txn.objectStore(\"logslastmod\");\n lastModStore.put(this.generateLastModifiedTime());\n }).then(() => {\n this.flushPromise = undefined;\n });\n return this.flushPromise;\n };\n\n /**\n * Consume the most recent logs and return them. Older logs which are not\n * returned are deleted at the same time, so this can be called at startup\n * to do house-keeping to keep the logs from growing too large.\n *\n * @return Resolves to an array of objects. The array is\n * sorted in time (oldest first) based on when the log file was created (the\n * log ID). The objects have said log ID in an \"id\" field and \"lines\" which\n * is a big string with all the new-line delimited logs.\n */\n public async consume(): Promise<LogEntry[]> {\n const db = this.db;\n if (!db) {\n return Promise.reject(new Error(\"No connected database\"));\n }\n\n // Returns: a string representing the concatenated logs for this ID.\n // Stops adding log fragments when the size exceeds maxSize\n async function fetchLogs(id: string, maxSize: number): Promise<string> {\n const objectStore = db!\n .transaction(\"logs\", \"readonly\")\n .objectStore(\"logs\");\n\n return new Promise((resolve, reject) => {\n const query = objectStore\n .index(\"id\")\n .openCursor(IDBKeyRange.only(id), \"prev\");\n let lines = \"\";\n query.onerror = (): void => {\n reject(new Error(\"Query failed: \" + query?.error?.message));\n };\n query.onsuccess = (): void => {\n const cursor = query.result;\n if (!cursor) {\n resolve(lines);\n return; // end of results\n }\n lines = cursor.value.lines + lines;\n if (lines.length >= maxSize) {\n resolve(lines);\n } else {\n cursor.continue();\n }\n };\n });\n }\n\n // Returns: A sorted array of log IDs. (newest first)\n async function fetchLogIds(): Promise<string[]> {\n // To gather all the log IDs, query for all records in logslastmod.\n const o = db!\n .transaction(\"logslastmod\", \"readonly\")\n .objectStore(\"logslastmod\");\n return selectQuery<{ ts: number; id: string }>(o, undefined, (cursor) => {\n return {\n id: cursor.value.id,\n ts: cursor.value.ts,\n };\n }).then((res) => {\n // Sort IDs by timestamp (newest first)\n return res\n .sort((a, b) => {\n return b.ts - a.ts;\n })\n .map((a) => a.id);\n });\n }\n\n async function deleteLogs(id: number): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const txn = db!.transaction([\"logs\", \"logslastmod\"], \"readwrite\");\n const o = txn.objectStore(\"logs\");\n // only load the key path, not the data which may be huge\n const query = o.index(\"id\").openKeyCursor(IDBKeyRange.only(id));\n query.onsuccess = (): void => {\n const cursor = query.result;\n if (!cursor) {\n return;\n }\n o.delete(cursor.primaryKey);\n cursor.continue();\n };\n txn.oncomplete = (): void => {\n resolve();\n };\n txn.onerror = (): void => {\n reject(\n new Error(\n \"Failed to delete logs for \" + `'${id}' : ${txn?.error?.message}`,\n ),\n );\n };\n // delete last modified entries\n const lastModStore = txn.objectStore(\"logslastmod\");\n lastModStore.delete(id);\n });\n }\n\n const allLogIds = await fetchLogIds();\n let removeLogIds: number[] = [];\n const logs: LogEntry[] = [];\n let size = 0;\n for (let i = 0; i < allLogIds.length; i++) {\n const lines = await fetchLogs(allLogIds[i], MAX_LOG_SIZE - size);\n\n // always add the log file: fetchLogs will truncate once the maxSize we give it is\n // exceeded, so we'll go over the max but only by one fragment's worth.\n logs.push({\n lines: lines,\n id: allLogIds[i],\n });\n size += lines.length;\n\n // If fetchLogs truncated we'll now be at or over the size limit,\n // in which case we should stop and remove the rest of the log files.\n if (size >= MAX_LOG_SIZE) {\n // the remaining log IDs should be removed. If we go out of\n // bounds this is just []\n removeLogIds = allLogIds.slice(i + 1).map((id) => parseInt(id, 10));\n break;\n }\n }\n if (removeLogIds.length > 0) {\n logger.log(\"Removing logs: \", removeLogIds);\n // Don't await this because it's non-fatal if we can't clean up\n // logs.\n Promise.all(removeLogIds.map(async (id) => deleteLogs(id))).then(\n () => {\n logger.log(`Removed ${removeLogIds.length} old logs.`);\n },\n (err) => {\n logger.error(err);\n },\n );\n }\n return logs;\n }\n\n private generateLogEntry(lines: string): LogEntry {\n return {\n id: this.id,\n lines: lines,\n index: this.index++,\n };\n }\n\n private generateLastModifiedTime(): { id: string; ts: number } {\n return {\n id: this.id,\n ts: Date.now(),\n };\n }\n}\n\n/**\n * Helper method to collect results from a Cursor and promiseify it.\n * @param store - The store to perform openCursor on.\n * @param keyRange - Optional key range to apply on the cursor.\n * @param resultMapper - A function which is repeatedly called with a\n * Cursor.\n * Return the data you want to keep.\n * @return Resolves to an array of whatever you returned from\n * resultMapper.\n */\nasync function selectQuery<T>(\n store: IDBObjectStore,\n keyRange: IDBKeyRange | undefined,\n resultMapper: (cursor: IDBCursorWithValue) => T,\n): Promise<T[]> {\n const query = store.openCursor(keyRange);\n return new Promise((resolve, reject) => {\n const results: T[] = [];\n query.onerror = (): void => {\n reject(new Error(\"Query failed: \" + query?.error?.message));\n };\n // collect results\n query.onsuccess = (): void => {\n const cursor = query.result;\n if (!cursor) {\n resolve(results);\n return; // end of results\n }\n results.push(resultMapper(cursor));\n cursor.continue();\n };\n });\n}\ndeclare global {\n // eslint-disable-next-line no-var, camelcase\n var mx_rage_store: IndexedDBLogStore;\n // eslint-disable-next-line no-var, camelcase\n var mx_rage_logger: ConsoleLogger;\n // eslint-disable-next-line no-var, camelcase\n var mx_rage_initStoragePromise: Promise<void> | undefined;\n}\n\n/**\n * Configure rage shaking support for sending bug reports.\n * Modifies globals.\n * @return Resolves when set up.\n */\nexport async function init(): Promise<void> {\n global.mx_rage_logger = new ConsoleLogger();\n\n // configure loglevel based loggers:\n setLogExtension(logger, global.mx_rage_logger.log);\n\n // intercept console logging so that we can get matrix_sdk logs:\n // this is nasty, but no logging hooks are provided\n [\n \"trace\" as const,\n \"debug\" as const,\n \"info\" as const,\n \"warn\" as const,\n \"error\" as const,\n ].forEach((level) => {\n const originalMethod = window.console[level];\n if (!originalMethod) return;\n const prefix = `${level.toUpperCase()} matrix_sdk`;\n window.console[level] = (...args): void => {\n originalMethod(...args);\n // args for calls from the matrix-sdk-crypto-wasm look like:\n // [\"DEBUG matrix_sdk_indexeddb::crypto_store: IndexedDbCryptoStore: opening main store matrix-js-sdk::matrix-sdk-crypto\\n at /home/runner/.cargo/git/checkouts/matrix-rust-sdk-1f4927f82a3d27bb/07aa6d7/crates/matrix-sdk-indexeddb/src/crypto_store/mod.rs:267\"]\n if (typeof args[0] === \"string\" && args[0].startsWith(prefix)) {\n // we pass all the args on to the logger in case there are more sent in future\n global.mx_rage_logger.log(LogLevel[level], \"matrix_sdk\", ...args);\n }\n };\n });\n\n window.addEventListener(\"unhandledrejection\", (event) => {\n global.mx_rage_logger.log(\n LogLevel.error,\n `Unhandled promise rejection: ${event.reason}`,\n );\n });\n\n return tryInitStorage();\n}\n\n/**\n * Try to start up the rageshake storage for logs. If not possible (client unsupported)\n * then this no-ops.\n * @return Resolves when complete.\n */\nasync function tryInitStorage(): Promise<void> {\n if (global.mx_rage_initStoragePromise) {\n return global.mx_rage_initStoragePromise;\n }\n\n logger.log(\"Configuring rageshake persistence...\");\n\n // just *accessing* indexedDB throws an exception in firefox with\n // indexeddb disabled.\n let indexedDB;\n try {\n indexedDB = window.indexedDB;\n } catch (e) {\n logger.warn(\"Could not get indexDB from window.\", e);\n }\n\n if (indexedDB) {\n global.mx_rage_store = new IndexedDBLogStore(\n indexedDB,\n global.mx_rage_logger,\n );\n global.mx_rage_initStoragePromise = global.mx_rage_store.connect();\n return global.mx_rage_initStoragePromise;\n }\n global.mx_rage_initStoragePromise = Promise.resolve();\n return global.mx_rage_initStoragePromise;\n}\n\n/**\n * Get a recent snapshot of the logs, ready for attaching to a bug report\n *\n * @return list of log data\n */\nexport async function getLogsForReport(): Promise<LogEntry[]> {\n if (!global.mx_rage_logger) {\n throw new Error(\"No console logger, did you forget to call init()?\");\n }\n // If in incognito mode, store is null, but we still want bug report\n // sending to work going off the in-memory console logs.\n if (global.mx_rage_store) {\n // flush most recent logs\n await global.mx_rage_store.flush();\n return global.mx_rage_store.consume();\n } else {\n return [\n {\n lines: global.mx_rage_logger.peekLogs(),\n id: \"-\",\n },\n ];\n }\n}\n\ntype StringifyReplacer = (\n this: unknown,\n key: string,\n value: unknown,\n) => unknown;\n\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#circular_references\n// Injects `<$ cycle-trimmed $>` wherever it cuts a cyclical object relationship\nconst getCircularReplacer = (): StringifyReplacer => {\n const seen = new WeakSet();\n const depthMap = new WeakMap<object, number>();\n return function (this: unknown, key: string, value: unknown): unknown {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) {\n return \"<$ cycle-trimmed $>\";\n }\n seen.add(value);\n\n let depth = 0;\n if (this) {\n depth = depthMap.get(this) ?? 0;\n }\n depthMap.set(value, depth + 1);\n\n if (depth > DEPTH_LIMIT) return \"<$ object-pruned $>\";\n }\n return value;\n };\n};\n\nenum LogLevel {\n trace = 0,\n debug = 1,\n info = 2,\n warn = 3,\n error = 4,\n silent = 5,\n}\n\ntype LogExtensionFunc = (\n level: LogLevel,\n ...rest: (Error | DOMException | object | string)[]\n) => void;\ntype LogLevelString = keyof typeof LogLevel;\n\n/**\n * This method borrowed from livekit (who also use loglevel and in turn essentially\n * took loglevel's example honouring log levels). Adds a loglevel logging extension\n * in the recommended way.\n */\nfunction setLogExtension(\n _loggerToExtend: Logger,\n extension: LogExtensionFunc,\n): void {\n const loggerToExtend = _loggerToExtend as unknown as loglevel.Logger;\n const originalFactory = loggerToExtend.methodFactory;\n\n loggerToExtend.methodFactory = function (\n methodName,\n configLevel,\n loggerName,\n ): LoggingMethod {\n const rawMethod = originalFactory(methodName, configLevel, loggerName);\n\n const logLevel = LogLevel[methodName as LogLevelString];\n const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;\n\n return (...args) => {\n // we don't send the logger name to the raw method as some of them are already outputting the prefix\n rawMethod.apply(this, args);\n if (needLog) {\n // we prefix the logger name to the extension\n // this makes sure that the rageshake contains the logger name\n extension(logLevel, loggerName?.toString(), ...args);\n }\n };\n };\n loggerToExtend.setLevel(loggerToExtend.getLevel()); // Be sure to call setLevel method in order to apply plugin\n}\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type ComponentProps, useCallback, useEffect, useState } from \"react\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport {\n ClientEvent,\n type MatrixClient,\n type MatrixEvent,\n} from \"matrix-js-sdk\";\nimport { type CryptoApi } from \"matrix-js-sdk/lib/crypto-api\";\n\nimport { getLogsForReport } from \"./rageshake\";\nimport { useClient } from \"../ClientContext\";\nimport { Config } from \"../config/Config\";\nimport { type RageshakeRequestModal } from \"../room/RageshakeRequestModal\";\nimport { getUrlParams } from \"../UrlParams\";\n\nconst gzip = async (text: string): Promise<Blob> => {\n // pako is relatively large (200KB), so we only import it when needed\n const { gzip: pakoGzip } = await import(\"pako\");\n\n // encode as UTF-8\n const buf = new TextEncoder().encode(text);\n // compress\n return new Blob([pakoGzip(buf)]);\n};\n\n/**\n * Collects crypto related information.\n */\nasync function collectCryptoInfo(\n cryptoApi: CryptoApi,\n body: FormData,\n): Promise<void> {\n body.append(\"crypto_version\", cryptoApi.getVersion());\n\n const ownDeviceKeys = await cryptoApi.getOwnDeviceKeys();\n const keys = [\n `curve25519:${ownDeviceKeys.curve25519}`,\n `ed25519:${ownDeviceKeys.ed25519}`,\n ];\n\n body.append(\"device_keys\", keys.join(\", \"));\n\n // add cross-signing status information\n const crossSigningStatus = await cryptoApi.getCrossSigningStatus();\n\n body.append(\n \"cross_signing_ready\",\n String(await cryptoApi.isCrossSigningReady()),\n );\n body.append(\n \"cross_signing_key\",\n (await cryptoApi.getCrossSigningKeyId()) ?? \"n/a\",\n );\n body.append(\n \"cross_signing_privkey_in_secret_storage\",\n String(crossSigningStatus.privateKeysInSecretStorage),\n );\n\n body.append(\n \"cross_signing_master_privkey_cached\",\n String(crossSigningStatus.privateKeysCachedLocally.masterKey),\n );\n body.append(\n \"cross_signing_self_signing_privkey_cached\",\n String(crossSigningStatus.privateKeysCachedLocally.selfSigningKey),\n );\n body.append(\n \"cross_signing_user_signing_privkey_cached\",\n String(crossSigningStatus.privateKeysCachedLocally.userSigningKey),\n );\n}\n\n/**\n * Collects information about secret storage and backup.\n */\nasync function collectRecoveryInfo(\n client: MatrixClient,\n cryptoApi: CryptoApi,\n body: FormData,\n): Promise<void> {\n const secretStorage = client.secretStorage;\n body.append(\n \"secret_storage_ready\",\n String(await cryptoApi.isSecretStorageReady()),\n );\n body.append(\n \"secret_storage_key_in_account\",\n String(await secretStorage.hasKey()),\n );\n\n body.append(\n \"session_backup_key_in_secret_storage\",\n String(!!(await client.isKeyBackupKeyStored())),\n );\n const sessionBackupKeyFromCache =\n await cryptoApi.getSessionBackupPrivateKey();\n body.append(\"session_backup_key_cached\", String(!!sessionBackupKeyFromCache));\n body.append(\n \"session_backup_key_well_formed\",\n String(sessionBackupKeyFromCache instanceof Uint8Array),\n );\n}\n\ninterface RageShakeSubmitOptions {\n sendLogs: boolean;\n rageshakeRequestId?: string;\n description?: string;\n roomId?: string;\n label?: string;\n}\n\nexport function getRageshakeSubmitUrl(): string | undefined {\n if (import.meta.env.VITE_PACKAGE === \"full\") {\n // in full package we always use the one configured on the server\n return Config.get().rageshake?.submit_url;\n }\n\n if (import.meta.env.VITE_PACKAGE === \"embedded\") {\n // in embedded package we always use the one provided by the widget host\n return getUrlParams().rageshakeSubmitUrl ?? undefined;\n }\n\n return undefined;\n}\n\nexport function useSubmitRageshake(\n injectedGetRageshakeSubmitUrl = getRageshakeSubmitUrl,\n): {\n submitRageshake: (opts: RageShakeSubmitOptions) => Promise<void>;\n sending: boolean;\n sent: boolean;\n error?: Error;\n available: boolean;\n} {\n const { client } = useClient();\n\n const [{ sending, sent, error }, setState] = useState<{\n sending: boolean;\n sent: boolean;\n error?: Error;\n }>({\n sending: false,\n sent: false,\n error: undefined,\n });\n\n const submitRageshake = useCallback(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n async (opts) => {\n const submitUrl = injectedGetRageshakeSubmitUrl();\n if (!submitUrl) {\n throw new Error(\"No rageshake URL is configured\");\n }\n\n if (sending) {\n return;\n }\n\n try {\n setState({ sending: true, sent: false, error: undefined });\n\n let userAgent = \"UNKNOWN\";\n if (window.navigator && window.navigator.userAgent) {\n userAgent = window.navigator.userAgent;\n }\n\n let touchInput = \"UNKNOWN\";\n try {\n // MDN claims broad support across browsers\n touchInput = String(window.matchMedia(\"(pointer: coarse)\").matches);\n } catch (e) {\n logger.warn(\"Could not get coarse pointer for rageshake submit.\", e);\n }\n\n let description = opts.rageshakeRequestId\n ? `Rageshake ${opts.rageshakeRequestId}`\n : \"\";\n if (opts.description) description += `: ${opts.description}`;\n\n const body = new FormData();\n body.append(\n \"text\",\n description ?? \"User did not supply any additional text.\",\n );\n body.append(\"app\", \"matrix-video-chat\");\n body.append(\n \"version\",\n (import.meta.env.VITE_APP_VERSION as string) || \"dev\",\n );\n body.append(\"user_agent\", userAgent);\n body.append(\"installed_pwa\", \"false\");\n body.append(\"touch_input\", touchInput);\n body.append(\"call_backend\", \"livekit\");\n body.append(\"hostname\", window.location.hostname);\n\n if (client) {\n const userId = client.getUserId()!;\n const user = client.getUser(userId);\n body.append(\"display_name\", user?.displayName ?? \"\");\n body.append(\"user_id\", client.credentials.userId ?? \"\");\n body.append(\"device_id\", client.deviceId ?? \"\");\n\n if (opts.roomId) {\n body.append(\"room_id\", opts.roomId);\n }\n\n const crypto = client.getCrypto();\n if (crypto) {\n await collectCryptoInfo(crypto, body);\n await collectRecoveryInfo(client, crypto, body);\n }\n }\n\n if (opts.label) {\n body.append(\"label\", opts.label);\n }\n\n // add storage persistence/quota information\n if (navigator.storage && navigator.storage.persisted) {\n try {\n body.append(\n \"storageManager_persisted\",\n String(await navigator.storage.persisted()),\n );\n } catch (e) {\n logger.warn(\"coulr not get navigator peristed storage\", e);\n }\n } else if (document.hasStorageAccess) {\n // Safari\n try {\n body.append(\n \"storageManager_persisted\",\n String(await document.hasStorageAccess()),\n );\n } catch (e) {\n logger.warn(\"could not get storage access\", e);\n }\n }\n\n if (navigator.storage && navigator.storage.estimate) {\n try {\n const estimate: {\n quota?: number;\n usage?: number;\n usageDetails?: { [x: string]: unknown };\n } = await navigator.storage.estimate();\n body.append(\"storageManager_quota\", String(estimate.quota));\n body.append(\"storageManager_usage\", String(estimate.usage));\n if (estimate.usageDetails) {\n Object.keys(estimate.usageDetails).forEach((k) => {\n body.append(\n `storageManager_usage_${k}`,\n String(estimate.usageDetails![k]),\n );\n });\n }\n } catch (e) {\n logger.warn(\"could not obatain storage estimate\", e);\n }\n }\n\n if (opts.sendLogs) {\n const logs = await getLogsForReport();\n\n for (const entry of logs) {\n body.append(\"compressed-log\", await gzip(entry.lines), entry.id);\n }\n }\n\n if (opts.rageshakeRequestId) {\n body.append(\n \"group_call_rageshake_request_id\",\n opts.rageshakeRequestId,\n );\n }\n\n const res = await fetch(submitUrl, {\n method: \"POST\",\n body,\n });\n\n if (res.status !== 200) {\n throw new Error(\n `Failed to submit feedback: receive HTTP ${res.status} ${res.statusText}`,\n );\n }\n\n setState({ sending: false, sent: true, error: undefined });\n } catch (error) {\n setState({ sending: false, sent: false, error: error as Error });\n logger.error(error);\n }\n },\n [client, sending, injectedGetRageshakeSubmitUrl],\n );\n\n return {\n submitRageshake,\n sending,\n sent,\n error,\n available: !!injectedGetRageshakeSubmitUrl(),\n };\n}\n\nexport function useRageshakeRequest(): (\n roomId: string,\n rageshakeRequestId: string,\n) => void {\n const { client } = useClient();\n\n const sendRageshakeRequest = useCallback(\n (roomId: string, rageshakeRequestId: string) => {\n client!\n // @ts-expect-error - org.matrix.rageshake_request is not part of `keyof TimelineEvents` but it is okay to sent a custom event.\n .sendEvent(roomId, \"org.matrix.rageshake_request\", {\n request_id: rageshakeRequestId,\n })\n .catch((e) => {\n logger.error(\"Failed to send org.matrix.rageshake_request event\", e);\n });\n },\n [client],\n );\n return sendRageshakeRequest;\n}\n\nexport function useRageshakeRequestModal(\n roomId: string,\n): ComponentProps<typeof RageshakeRequestModal> {\n const [open, setOpen] = useState(false);\n const onDismiss = useCallback(() => setOpen(false), [setOpen]);\n const { client } = useClient();\n const [rageshakeRequestId, setRageshakeRequestId] = useState<string>();\n\n useEffect(() => {\n if (!client) return;\n\n const onEvent = (event: MatrixEvent): void => {\n const type = event.getType();\n\n if (\n type === \"org.matrix.rageshake_request\" &&\n roomId === event.getRoomId() &&\n client.getUserId() !== event.getSender()\n ) {\n setRageshakeRequestId(event.getContent().request_id);\n setOpen(true);\n }\n };\n\n client.on(ClientEvent.Event, onEvent);\n\n return (): void => {\n client.removeListener(ClientEvent.Event, onEvent);\n };\n }, [setOpen, roomId, client]);\n\n return {\n rageshakeRequestId: rageshakeRequestId ?? \"\",\n roomId,\n open,\n onDismiss,\n };\n}\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { useTranslation } from \"react-i18next\";\nimport { type FC, useCallback, type JSX } from \"react\";\nimport { Button } from \"@vector-im/compound-web\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nimport { Config } from \"../config/Config\";\nimport styles from \"./RageshakeButton.module.css\";\nimport { useSubmitRageshake } from \"./submit-rageshake\";\n\ninterface Props {\n description: string;\n}\n\nexport const RageshakeButton: FC<Props> = ({ description }) => {\n const { submitRageshake, sending, sent, error } = useSubmitRageshake();\n const { t } = useTranslation();\n\n const sendDebugLogs = useCallback(() => {\n submitRageshake({\n description,\n sendLogs: true,\n }).catch((e) => {\n logger.error(\"Failed to send rageshake\", e);\n });\n }, [submitRageshake, description]);\n\n if (!Config.get().rageshake?.submit_url) return null;\n\n let logsComponent: JSX.Element | null = null;\n if (sending) {\n logsComponent = <span>{t(\"rageshake_sending\")}</span>;\n } else if (sent) {\n logsComponent = <div>{t(\"rageshake_sent\")}</div>;\n } else {\n let caption = t(\"rageshake_send_logs\");\n if (error) {\n caption = t(\"rageshake_button_error_caption\");\n }\n\n logsComponent = (\n <Button\n onClick={sendDebugLogs}\n className={styles.wideButton}\n disabled={sending}\n >\n {caption}\n </Button>\n );\n }\n\n return <div className={styles.rageshakeControl}>{logsComponent}</div>;\n};\n","/*\nCopyright 2022-2024 New Vector Ltd.\nCopyright 2026 Element Creations Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\nimport { type ComponentPropsWithoutRef, type FC } from \"react\";\nimport classNames from \"classnames\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n Button as CpdButton,\n IconButton,\n Tooltip,\n} from \"@vector-im/compound-web\";\nimport {\n MicOnSolidIcon,\n MicOffSolidIcon,\n SpinnerIcon,\n VideoCallSolidIcon,\n VideoCallOffSolidIcon,\n EndCallIcon,\n ShareScreenSolidIcon,\n OverflowHorizontalIcon,\n OverflowVerticalIcon,\n VolumeOnSolidIcon,\n VolumeOffSolidIcon,\n} from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport styles from \"./Button.module.css\";\nimport callFooterStyles from \"../components/CallFooter.module.css\";\nimport { platform } from \"../Platform\";\n\ninterface MicButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n enabled: boolean;\n busy?: boolean;\n size?: \"md\" | \"lg\";\n}\n\nexport const MicButton: FC<MicButtonProps> = ({ enabled, busy, ...props }) => {\n const { t } = useTranslation();\n const Icon = busy ? SpinnerIcon : enabled ? MicOnSolidIcon : MicOffSolidIcon;\n const label = enabled\n ? t(\"mute_microphone_button_label\")\n : t(\"unmute_microphone_button_label\");\n\n return (\n <Tooltip label={label}>\n <CpdButton\n iconOnly\n Icon={Icon}\n kind={enabled ? \"secondary\" : \"primary\"}\n role=\"switch\"\n aria-checked={enabled}\n {...props}\n aria-busy={busy}\n className={classNames(props.className, {\n [styles.rotate]: !!busy,\n })}\n disabled={props.disabled || busy}\n />\n </Tooltip>\n );\n};\n\ninterface VideoButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n enabled: boolean;\n busy?: boolean;\n size?: \"md\" | \"lg\";\n}\n\nexport const VideoButton: FC<VideoButtonProps> = ({\n enabled,\n busy,\n ...props\n}) => {\n const { t } = useTranslation();\n const Icon = busy\n ? SpinnerIcon\n : enabled\n ? VideoCallSolidIcon\n : VideoCallOffSolidIcon;\n const label = enabled\n ? t(\"stop_video_button_label\")\n : t(\"start_video_button_label\");\n\n return (\n <Tooltip label={label}>\n <CpdButton\n iconOnly\n Icon={Icon}\n kind={enabled ? \"secondary\" : \"primary\"}\n role=\"switch\"\n aria-checked={enabled}\n {...props}\n aria-busy={busy}\n className={classNames(props.className, {\n [styles.rotate]: !!busy,\n })}\n disabled={props.disabled || busy}\n />\n </Tooltip>\n );\n};\n\ninterface ShareScreenButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n enabled: boolean;\n size: \"md\" | \"lg\";\n}\n\nexport const ShareScreenButton: FC<ShareScreenButtonProps> = ({\n enabled,\n ...props\n}) => {\n const { t } = useTranslation();\n const label = enabled\n ? t(\"stop_screenshare_button_label\")\n : t(\"screenshare_button_label\");\n\n return (\n <Tooltip label={label}>\n <CpdButton\n iconOnly\n Icon={ShareScreenSolidIcon}\n kind={enabled ? \"primary\" : \"secondary\"}\n role=\"switch\"\n aria-checked={enabled}\n {...props}\n />\n </Tooltip>\n );\n};\n\ninterface EndCallButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n size?: \"md\" | \"lg\";\n}\n\nexport const EndCallButton: FC<EndCallButtonProps> = ({\n className,\n ...props\n}) => {\n const { t } = useTranslation();\n\n return (\n <Tooltip label={t(\"hangup_button_label\")}>\n <CpdButton\n className={classNames(className, styles.endCall)}\n iconOnly\n Icon={EndCallIcon}\n destructive\n {...props}\n />\n </Tooltip>\n );\n};\n\ninterface LoudspeakerButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n size?: \"md\" | \"lg\";\n loudspeakerModeEnabled: boolean;\n}\nexport const LoudspeakerButton: FC<LoudspeakerButtonProps> = ({\n loudspeakerModeEnabled,\n ...props\n}) => {\n const { t } = useTranslation();\n // if the target is the earpice, we are currently in loudspeaker mode.\n const label = loudspeakerModeEnabled\n ? t(\"settings.devices.loudspeaker\")\n : t(\"settings.devices.handset\");\n return (\n <Tooltip label={label}>\n <CpdButton\n iconOnly\n Icon={loudspeakerModeEnabled ? VolumeOnSolidIcon : VolumeOffSolidIcon}\n {...props}\n kind={loudspeakerModeEnabled ? \"secondary\" : \"primary\"}\n aria-checked={loudspeakerModeEnabled}\n />\n </Tooltip>\n );\n};\n\nfunction classNamesForScreenWidth(\n className?: string,\n forScreenWidth?: \"wide\" | \"narrow\",\n): string {\n return classNames(className, {\n [callFooterStyles.settingsOnlyShowWide]: forScreenWidth === \"wide\",\n [callFooterStyles.settingsOnlyShowNarrow]: forScreenWidth === \"narrow\",\n });\n}\n\ninterface SettingsIconButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n /** If this buttons should be setup to be used in the app bar */\n showForScreenWidth?: \"wide\" | \"narrow\";\n kind?: \"secondary\" | \"primary\";\n}\nexport const SettingsIconButton: FC<SettingsIconButtonProps> = ({\n showForScreenWidth,\n className,\n ...props\n}) => {\n const { t } = useTranslation();\n const Icon =\n platform === \"android\" ? OverflowVerticalIcon : OverflowHorizontalIcon;\n return (\n <Tooltip label={t(\"common.settings\")}>\n <IconButton\n className={classNamesForScreenWidth(className, showForScreenWidth)}\n {...props}\n >\n <Icon aria-hidden />\n </IconButton>\n </Tooltip>\n );\n};\n\ninterface SettingsButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n size?: \"md\" | \"lg\";\n /** If this buttons should be setup to be used in the app bar */\n showForScreenWidth?: \"wide\" | \"narrow\";\n}\nexport const SettingsButton: FC<SettingsButtonProps> = ({\n showForScreenWidth,\n className,\n ...props\n}) => {\n const { t } = useTranslation();\n return (\n <Tooltip label={t(\"common.settings\")}>\n <CpdButton\n className={classNamesForScreenWidth(className, showForScreenWidth)}\n iconOnly\n Icon={\n platform === \"android\" ? OverflowVerticalIcon : OverflowHorizontalIcon\n }\n kind={\"secondary\"}\n {...props}\n />\n </Tooltip>\n );\n};\n","/*\nCopyright 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type ComponentProps, type FC, type MouseEvent } from \"react\";\nimport { Link as CpdLink } from \"@vector-im/compound-web\";\nimport { type LinkProps, useHref, useLinkClickHandler } from \"react-router-dom\";\nimport classNames from \"classnames\";\n\nimport styles from \"./Link.module.css\";\n\nexport function useLink(\n to: LinkProps[\"to\"],\n state?: unknown,\n): [string, (e: MouseEvent<HTMLAnchorElement>) => void] {\n const href = useHref(to);\n const onClick = useLinkClickHandler(to, { state });\n\n return [href, onClick];\n}\n\ntype Props = Omit<ComponentProps<typeof CpdLink>, \"href\" | \"onClick\"> & {\n to: LinkProps[\"to\"];\n state?: unknown;\n};\n\n/**\n * A version of Compound's link component that integrates with our router setup.\n * This is only for app-internal links.\n */\nexport const Link: FC<Props> = ({ ref, to, state, ...props }) => {\n const [path, onClick] = useLink(to, state);\n return <CpdLink ref={ref} {...props} href={path} onClick={onClick} />;\n};\n\n/**\n * A link to an external web page, made to fit into blocks of text more subtly\n * than the normal Compound link component.\n */\nexport const ExternalLink: FC<ComponentProps<\"a\">> = ({\n ref,\n className,\n children,\n ...props\n}) => {\n return (\n <a\n ref={ref}\n className={classNames(className, styles.external)}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n {...props}\n >\n {children}\n </a>\n );\n};\n","/*\nCopyright 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type ComponentProps, type FC } from \"react\";\nimport { Button } from \"@vector-im/compound-web\";\n\nimport type { LinkProps } from \"react-router-dom\";\nimport { useLink } from \"./Link\";\n\ntype Props = Omit<ComponentProps<typeof Button<\"a\">>, \"as\" | \"href\"> & {\n to: LinkProps[\"to\"];\n state?: unknown;\n};\n\n/**\n * A version of Compound's button component that acts as a link and integrates\n * with our router setup.\n */\nexport const LinkButton: FC<Props> = ({ ref, to, state, ...props }) => {\n const [path, onClick] = useLink(to, state);\n return <Button as=\"a\" ref={ref} {...props} href={path} onClick={onClick} />;\n};\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { useCallback, useEffect, useSyncExternalStore } from \"react\";\n\nimport type {\n Listener,\n ListenerMap,\n TypedEventEmitter,\n} from \"matrix-js-sdk/lib/models/typed-event-emitter\";\n\n/**\n * Shortcut for registering a listener on an EventTarget.\n */\nexport function useEventTarget<T extends Event>(\n target: EventTarget | null | undefined,\n eventType: string,\n listener: (event: T) => void,\n options?: AddEventListenerOptions,\n): void {\n useEffect(() => {\n if (target) {\n target.addEventListener(eventType, listener as EventListener, options);\n return (): void =>\n target.removeEventListener(\n eventType,\n listener as EventListener,\n options,\n );\n }\n }, [target, eventType, listener, options]);\n}\n\n/**\n * Shortcut for registering a listener on a TypedEventEmitter.\n */\nexport function useTypedEventEmitter<\n Events extends string,\n Arguments extends ListenerMap<Events>,\n T extends Events,\n>(\n emitter: TypedEventEmitter<Events, Arguments>,\n eventType: T,\n listener: Listener<Events, Arguments, T>,\n): void {\n useEffect(() => {\n emitter.on(eventType, listener);\n return (): void => {\n emitter.off(eventType, listener);\n };\n }, [emitter, eventType, listener]);\n}\n\n/**\n * Reactively tracks a value which is recalculated whenever the provided event\n * emitter emits an event. This is useful for bridging state from matrix-js-sdk\n * into React.\n */\nexport function useTypedEventEmitterState<\n Events extends string,\n Arguments extends ListenerMap<Events>,\n T extends Events,\n State,\n>(\n emitter: TypedEventEmitter<Events, Arguments>,\n eventType: T,\n getState: () => State,\n): State {\n const subscribe = useCallback(\n (onChange: () => void) => {\n emitter.on(eventType, onChange as Listener<Events, Arguments, T>);\n return (): void => {\n emitter.off(eventType, onChange as Listener<Events, Arguments, T>);\n };\n },\n [emitter, eventType],\n );\n // See the React docs for useSyncExternalStore; given that we're trying to\n // bridge state from an external source into React, using this hook is exactly\n // what React recommends.\n return useSyncExternalStore(subscribe, getState);\n}\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n type CallMembership,\n type MatrixRTCSession,\n MatrixRTCSessionEvent,\n} from \"matrix-js-sdk/lib/matrixrtc\";\nimport { useCallback } from \"react\";\n\nimport { useTypedEventEmitterState } from \"./useEvents\";\n\nexport function useMatrixRTCSessionMemberships(\n rtcSession: MatrixRTCSession,\n): CallMembership[] {\n return useTypedEventEmitterState(\n rtcSession,\n MatrixRTCSessionEvent.MembershipsChanged,\n useCallback(() => rtcSession.memberships, [rtcSession]),\n );\n}\n","/*\nCopyright 2025 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { useCallback, useSyncExternalStore } from \"react\";\n\nimport { type Behavior } from \"./state/Behavior\";\n\n/**\n * React hook which reactively reads the value of a behavior.\n */\nexport function useBehavior<T>(behavior: Behavior<T>): T {\n const subscribe = useCallback(\n (onChange: () => void) => {\n const s = behavior.subscribe(onChange);\n return (): void => s.unsubscribe();\n },\n [behavior],\n );\n const getValue = useCallback(() => behavior.value, [behavior]);\n return useSyncExternalStore(subscribe, getValue);\n}\n","/*\nCopyright 2024 Milton Moura <miltonmoura@gmail.com>\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { EventType, RelationType } from \"matrix-js-sdk\";\nimport {\n createContext,\n use,\n type ReactNode,\n useCallback,\n useMemo,\n type JSX,\n} from \"react\";\nimport { type MatrixRTCSession } from \"matrix-js-sdk/lib/matrixrtc\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nimport { useMatrixRTCSessionMemberships } from \"../useMatrixRTCSessionMemberships\";\nimport { useClientState } from \"../ClientContext\";\nimport { ElementCallReactionEventType, type ReactionOption } from \".\";\nimport { type CallViewModel } from \"../state/CallViewModel/CallViewModel\";\nimport { useBehavior } from \"../useBehavior\";\n\ninterface ReactionsSenderContextType {\n supportsReactions: boolean;\n toggleRaisedHand: () => Promise<void>;\n sendReaction: (reaction: ReactionOption) => Promise<void>;\n}\n\nexport const ReactionsSenderContext = createContext<\n ReactionsSenderContextType | undefined\n>(undefined);\n\nexport const useReactionsSender = (): ReactionsSenderContextType => {\n const context = use(ReactionsSenderContext);\n if (!context) {\n throw new Error(\"useReactions must be used within a ReactionsProvider\");\n }\n return context;\n};\n\n/**\n * Provider that handles sending a reaction or hand raised event to a call.\n */\nexport const ReactionsSenderProvider = ({\n children,\n rtcSession,\n vm,\n}: {\n children: ReactNode;\n rtcSession: MatrixRTCSession;\n vm: CallViewModel;\n}): JSX.Element => {\n const memberships = useMatrixRTCSessionMemberships(rtcSession);\n const clientState = useClientState();\n const supportsReactions =\n clientState?.state === \"valid\" && clientState.supportedFeatures.reactions;\n const room = rtcSession.room;\n const myUserId = room.client.getUserId();\n const myDeviceId = room.client.getDeviceId();\n const myMembershipIdentifier = `${myUserId}:${myDeviceId}`;\n\n const myMembershipEvent = useMemo(\n () =>\n memberships.find(\n (m) => m.userId === myUserId && m.deviceId === myDeviceId,\n )?.eventId,\n [memberships, myUserId, myDeviceId],\n );\n\n const reactions = useBehavior(vm.reactions$);\n const myReaction = useMemo(\n () =>\n myMembershipIdentifier !== undefined\n ? reactions[myMembershipIdentifier]\n : undefined,\n [myMembershipIdentifier, reactions],\n );\n\n const handsRaised = useBehavior(vm.handsRaised$);\n const myRaisedHand = useMemo(\n () =>\n myMembershipIdentifier !== undefined\n ? handsRaised[myMembershipIdentifier]\n : undefined,\n [myMembershipIdentifier, handsRaised],\n );\n\n const toggleRaisedHand = useCallback(async () => {\n if (!myMembershipIdentifier) {\n return;\n }\n const myReactionId = myRaisedHand?.reactionEventId;\n\n if (!myReactionId) {\n try {\n if (!myMembershipEvent) {\n throw new Error(\"Cannot find own membership event\");\n }\n const reaction = await room.client.sendEvent(\n rtcSession.room.roomId,\n EventType.Reaction,\n {\n \"m.relates_to\": {\n rel_type: RelationType.Annotation,\n event_id: myMembershipEvent,\n key: \"🖐️\",\n },\n },\n );\n logger.debug(\"Sent raise hand event\", reaction.event_id);\n } catch (ex) {\n logger.error(\"Failed to send raised hand\", ex);\n }\n } else {\n try {\n await room.client.redactEvent(rtcSession.room.roomId, myReactionId);\n logger.debug(\"Redacted raise hand event\");\n } catch (ex) {\n logger.error(\"Failed to redact reaction event\", myReactionId, ex);\n throw ex;\n }\n }\n }, [\n myMembershipEvent,\n myMembershipIdentifier,\n myRaisedHand,\n rtcSession,\n room,\n ]);\n\n const sendReaction = useCallback(\n async (reaction: ReactionOption) => {\n if (!myMembershipIdentifier || myReaction) {\n // We're still reacting\n return;\n }\n if (!myMembershipEvent) {\n throw new Error(\"Cannot find own membership event\");\n }\n await room.client.sendEvent(\n rtcSession.room.roomId,\n ElementCallReactionEventType,\n {\n \"m.relates_to\": {\n rel_type: RelationType.Reference,\n event_id: myMembershipEvent,\n },\n emoji: reaction.emoji,\n name: reaction.name,\n },\n );\n },\n [myMembershipEvent, myReaction, room, myMembershipIdentifier, rtcSession],\n );\n\n return (\n <ReactionsSenderContext\n value={{\n supportsReactions,\n toggleRaisedHand,\n sendReaction,\n }}\n >\n {children}\n </ReactionsSenderContext>\n );\n};\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...props,\n ref: forwardedRef,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n }\n );\n }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n Root,\n VISUALLY_HIDDEN_STYLES,\n VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type FC, type ReactNode, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n Root as DialogRoot,\n Portal as DialogPortal,\n Overlay as DialogOverlay,\n Content as DialogContent,\n Title as DialogTitle,\n Close as DialogClose,\n} from \"@radix-ui/react-dialog\";\nimport { Drawer } from \"vaul\";\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { CloseIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\nimport classNames from \"classnames\";\nimport { Heading, Glass } from \"@vector-im/compound-web\";\n\nimport styles from \"./Modal.module.css\";\nimport overlayStyles from \"./Overlay.module.css\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport interface Props {\n title: string;\n /**\n * Hide the modal header. Used for smaller popups where the context is readily apparent.\n * A title should still be specified for users using assistive technology.\n */\n hideHeader?: boolean;\n children: ReactNode;\n className?: string;\n /**\n * Class name to be used when in drawer mode (touchscreen).\n */\n classNameDrawer?: string;\n /**\n * Class name to be used when in modal mode (desktop).\n */\n classNameModal?: string;\n /**\n * The controlled open state of the modal.\n */\n // An option to leave the open state uncontrolled is intentionally not\n // provided, since modals are always opened due to external triggers, and it\n // is the author's belief that controlled components lead to more obvious code.\n open: boolean;\n /**\n * Callback for when the user dismisses the modal. If undefined, the modal\n * will be non-dismissable.\n */\n onDismiss?: () => void;\n /**\n * Whether the modal content has tabs.\n */\n // TODO: Better tabs support\n tabbed?: boolean;\n}\n\n/**\n * A modal, taking the form of a drawer / bottom sheet on touchscreen devices,\n * and a dialog box on desktop.\n */\nexport const Modal: FC<Props> = ({\n title,\n hideHeader,\n children,\n className,\n classNameDrawer,\n classNameModal,\n open,\n onDismiss,\n tabbed,\n ...rest\n}) => {\n const { t } = useTranslation();\n // Empirically, Chrome on Android can end up not matching (hover: none), but\n // still matching (pointer: coarse) :/\n const touchscreen = useMediaQuery(\"(hover: none) or (pointer: coarse)\");\n const onOpenChange = useCallback(\n (open: boolean) => {\n if (!open) onDismiss?.();\n },\n [onDismiss],\n );\n\n if (touchscreen) {\n return (\n <Drawer.Root\n open={open}\n // This autofocus is a custom vault property and not the\n // standard HTML autofocus attribute.\n // It makes the Drawer.Root behave like the `DialogRoot`\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n onOpenChange={onOpenChange}\n dismissible={onDismiss !== undefined}\n >\n <Drawer.Portal>\n <Drawer.Overlay className={classNames(overlayStyles.bg)} />\n <Drawer.Content\n className={classNames(\n className,\n classNameDrawer,\n overlayStyles.overlay,\n styles.modal,\n styles.drawer,\n { [styles.tabbed]: tabbed },\n )}\n role=\"dialog\"\n // Suppress the warning about there being no description; the modal\n // has an accessible title\n aria-describedby={undefined}\n {...rest}\n >\n <div className={styles.content}>\n <div className={styles.header}>\n <div className={styles.handle} />\n <VisuallyHidden asChild>\n <Drawer.Title>{title}</Drawer.Title>\n </VisuallyHidden>\n </div>\n <div className={styles.body}>{children}</div>\n </div>\n </Drawer.Content>\n </Drawer.Portal>\n </Drawer.Root>\n );\n } else {\n const titleNode = (\n <DialogTitle asChild>\n <Heading as=\"h2\" weight=\"semibold\" size=\"md\">\n {title}\n </Heading>\n </DialogTitle>\n );\n const header = (\n <div className={styles.header}>\n {titleNode}\n {onDismiss !== undefined && (\n <DialogClose\n className={styles.close}\n data-testid=\"modal_close\"\n aria-label={t(\"action.close\")}\n >\n <CloseIcon width={20} height={20} />\n </DialogClose>\n )}\n </div>\n );\n\n return (\n <DialogRoot open={open} onOpenChange={onOpenChange}>\n <DialogPortal>\n <DialogOverlay\n className={classNames(overlayStyles.bg, overlayStyles.animate)}\n />\n <DialogContent\n asChild\n // Suppress the warning about there being no description; the modal\n // has an accessible title\n aria-describedby={undefined}\n role=\"dialog\"\n {...rest}\n >\n <Glass\n className={classNames(\n className,\n classNameModal,\n overlayStyles.overlay,\n overlayStyles.animate,\n styles.modal,\n styles.dialog,\n { [styles.tabbed]: tabbed },\n )}\n >\n <div className={styles.content}>\n {!hideHeader ? header : null}\n {hideHeader ? (\n <VisuallyHidden asChild>{titleNode}</VisuallyHidden>\n ) : null}\n <div className={styles.body}>{children}</div>\n </div>\n </Glass>\n </DialogContent>\n </DialogPortal>\n </DialogRoot>\n );\n }\n};\n","/*\nCopyright 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { Button as CpdButton, Tooltip, Alert } from \"@vector-im/compound-web\";\nimport {\n RaisedHandSolidIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n ReactionSolidIcon,\n} from \"@vector-im/compound-design-tokens/assets/web/icons\";\nimport {\n type ComponentPropsWithoutRef,\n type FC,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport classNames from \"classnames\";\n\nimport { useReactionsSender } from \"../reactions/useReactionsSender\";\nimport styles from \"./ReactionToggleButton.module.css\";\nimport {\n type RaisedHandInfo,\n type ReactionOption,\n ReactionSet,\n ReactionsRowSize,\n} from \"../reactions\";\nimport { Modal } from \"../Modal\";\nimport { useBehavior } from \"../useBehavior\";\nimport { type Behavior } from \"../state/Behavior\";\n\ninterface InnerButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n raised: boolean;\n open: boolean;\n}\n\nconst InnerButton: FC<InnerButtonProps> = ({ raised, open, ...props }) => {\n const { t } = useTranslation();\n\n return (\n <Tooltip label={t(\"common.reactions\")}>\n <CpdButton\n className={classNames(raised && styles.raisedButton)}\n aria-expanded={open}\n aria-haspopup\n kind={raised || open ? \"primary\" : \"secondary\"}\n iconOnly\n Icon={raised ? RaisedHandSolidIcon : ReactionSolidIcon}\n {...props}\n />\n </Tooltip>\n );\n};\n\nexport function ReactionPopupMenu({\n sendReaction,\n toggleRaisedHand,\n isHandRaised,\n canReact,\n errorText,\n}: {\n sendReaction: (reaction: ReactionOption) => void;\n toggleRaisedHand: () => void;\n errorText?: string;\n isHandRaised: boolean;\n canReact: boolean;\n}): ReactNode {\n const { t } = useTranslation();\n const [isFullyExpanded, setExpanded] = useState(false);\n\n const filteredReactionSet = useMemo(\n () => (isFullyExpanded ? ReactionSet : ReactionSet.slice(0, 5)),\n [isFullyExpanded],\n );\n const label = isHandRaised ? t(\"action.lower_hand\") : t(\"action.raise_hand\");\n return (\n <>\n {errorText && (\n <Alert\n className={styles.alert}\n type=\"critical\"\n title={t(\"error.generic\")}\n >\n {errorText}\n </Alert>\n )}\n <div className={styles.reactionPopupMenu}>\n <section className={styles.handRaiseSection}>\n <Tooltip label={label} caption=\"H\">\n <CpdButton\n kind={isHandRaised ? \"primary\" : \"secondary\"}\n aria-keyshortcuts=\"H\"\n aria-pressed={isHandRaised}\n aria-label={label}\n onClick={() => toggleRaisedHand()}\n iconOnly\n Icon={RaisedHandSolidIcon}\n />\n </Tooltip>\n </section>\n <div className={styles.verticalSeperator} />\n <section className={styles.reactionsMenuSection}>\n <menu\n className={classNames(\n isFullyExpanded && styles.reactionsMenuExpanded,\n styles.reactionsMenu,\n )}\n >\n {filteredReactionSet.map((reaction, index) => (\n <li key={reaction.name}>\n <Tooltip\n label={reaction.name}\n caption={\n index < ReactionsRowSize\n ? (index + 1).toString()\n : undefined\n }\n >\n <CpdButton\n kind=\"secondary\"\n className={styles.reactionButton}\n disabled={!canReact}\n onClick={() => sendReaction(reaction)}\n aria-keyshortcuts={\n index < ReactionsRowSize\n ? (index + 1).toString()\n : undefined\n }\n >\n {reaction.emoji}\n </CpdButton>\n </Tooltip>\n </li>\n ))}\n </menu>\n </section>\n <section style={{ marginLeft: \"var(--cpd-separator-spacing)\" }}>\n <Tooltip\n label={\n isFullyExpanded ? t(\"action.show_less\") : t(\"action.show_more\")\n }\n >\n <CpdButton\n iconOnly\n aria-label={\n isFullyExpanded ? t(\"action.show_less\") : t(\"action.show_more\")\n }\n Icon={isFullyExpanded ? ChevronUpIcon : ChevronDownIcon}\n kind=\"tertiary\"\n onClick={() => setExpanded(!isFullyExpanded)}\n />\n </Tooltip>\n </section>\n </div>\n </>\n );\n}\n\nexport interface ReactionData {\n handsRaised$: Behavior<Record<string, RaisedHandInfo>>;\n /** List of reactions. Keys are: membership.membershipId (currently predefined as: `${membershipEvent.userId}:${membershipEvent.deviceId}`)*/\n reactions$: Behavior<Record<string, ReactionOption>>;\n}\n\ninterface ReactionToggleButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n reactionData: ReactionData;\n identifier: string;\n size?: \"md\" | \"lg\";\n /** List of participants raising their hand */\n}\n\nexport function ReactionToggleButton({\n identifier,\n reactionData: { handsRaised$, reactions$ },\n ...props\n}: ReactionToggleButtonProps): ReactNode {\n const { t } = useTranslation();\n const { toggleRaisedHand, sendReaction } = useReactionsSender();\n const [busy, setBusy] = useState(false);\n const [showReactionsMenu, setShowReactionsMenu] = useState(false);\n const [errorText, setErrorText] = useState<string>();\n\n const isHandRaised = !!useBehavior(handsRaised$)[identifier];\n const canReact = !useBehavior(reactions$)[identifier];\n\n useEffect(() => {\n // Clear whenever the reactions menu state changes.\n setErrorText(undefined);\n }, [showReactionsMenu]);\n\n const sendRelation = useCallback(\n async (reaction: ReactionOption) => {\n try {\n setBusy(true);\n await sendReaction(reaction);\n setErrorText(undefined);\n setShowReactionsMenu(false);\n } catch (ex) {\n setErrorText(ex instanceof Error ? ex.message : \"Unknown error\");\n logger.error(\"Failed to send reaction\", ex);\n } finally {\n setBusy(false);\n }\n },\n [sendReaction],\n );\n\n const wrappedToggleRaisedHand = useCallback(() => {\n const toggleHand = async (): Promise<void> => {\n try {\n setBusy(true);\n await toggleRaisedHand();\n setShowReactionsMenu(false);\n } catch (ex) {\n setErrorText(ex instanceof Error ? ex.message : \"Unknown error\");\n logger.error(\"Failed to raise/lower hand\", ex);\n } finally {\n setBusy(false);\n }\n };\n\n void toggleHand();\n }, [toggleRaisedHand]);\n\n return (\n <>\n <InnerButton\n disabled={busy}\n onClick={() => setShowReactionsMenu((show) => !show)}\n raised={!!isHandRaised}\n open={showReactionsMenu}\n {...props}\n />\n <Modal\n open={showReactionsMenu}\n title={t(\"action.pick_reaction\")}\n hideHeader\n classNameModal={styles.reactionPopupMenuModal}\n className={styles.reactionPopupMenuRoot}\n onDismiss={() => setShowReactionsMenu(false)}\n >\n <ReactionPopupMenu\n errorText={errorText}\n isHandRaised={!!isHandRaised}\n canReact={!busy && !!canReact}\n sendReaction={(reaction) => void sendRelation(reaction)}\n toggleRaisedHand={wrappedToggleRaisedHand}\n />\n </Modal>\n </>\n );\n}\n","/*\nCopyright 2025 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { BigIcon, Button, Heading } from \"@vector-im/compound-web\";\nimport {\n useCallback,\n type ComponentType,\n type FC,\n type ReactNode,\n type SVGAttributes,\n type ReactElement,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nimport { RageshakeButton } from \"./settings/RageshakeButton\";\nimport styles from \"./ErrorView.module.css\";\nimport { useUrlParams } from \"./UrlParams\";\nimport { LinkButton } from \"./button\";\nimport { ElementWidgetActions, type WidgetHelpers } from \"./widget.ts\";\n\ninterface Props {\n Icon: ComponentType<SVGAttributes<SVGElement>>;\n title: string;\n /**\n * Show an option to submit a rageshake.\n * @default false\n */\n rageshake?: boolean;\n /**\n * Whether the error is considered fatal, i.e. non-recoverable. Causes the app\n * to fully reload when clicking 'return to home'.\n * @default false\n */\n fatal?: boolean;\n children: ReactNode;\n widget: WidgetHelpers | null;\n}\n\nexport const ErrorView: FC<Props> = ({\n Icon,\n title,\n rageshake,\n fatal,\n children,\n widget,\n}) => {\n const { t } = useTranslation();\n const { confineToRoom } = useUrlParams();\n\n const onReload = useCallback(() => {\n window.location.href = \"/\";\n }, []);\n\n const CloseWidgetButton: FC<{ widget: WidgetHelpers }> = ({\n widget,\n }): ReactElement => {\n // in widget mode we don't want to show the return home button but a close button\n const closeWidget = (): void => {\n widget.api.transport\n .send(ElementWidgetActions.Close, {})\n .catch((e) => {\n // What to do here?\n logger.error(\"Failed to send close action\", e);\n })\n .finally(() => {\n widget.api.transport.stop();\n });\n };\n return (\n <Button kind=\"primary\" onClick={closeWidget}>\n {t(\"action.close\")}\n </Button>\n );\n };\n\n // Whether the error is considered fatal or pathname is `/` then reload the all app.\n // If not then navigate to home page.\n const ReturnToHomeButton = (): ReactElement => {\n if (fatal || location.pathname === \"/\") {\n return (\n <Button kind=\"tertiary\" className={styles.homeLink} onClick={onReload}>\n {t(\"return_home_button\")}\n </Button>\n );\n } else {\n return (\n <LinkButton kind=\"tertiary\" className={styles.homeLink} to=\"/\">\n {t(\"return_home_button\")}\n </LinkButton>\n );\n }\n };\n\n return (\n <div className={styles.error}>\n <BigIcon className={styles.icon}>\n <Icon aria-hidden />\n </BigIcon>\n <Heading as=\"h1\" weight=\"semibold\" size=\"md\">\n {title}\n </Heading>\n {children}\n {rageshake && (\n <RageshakeButton description={`***Error View***: ${title}`} />\n )}\n {widget ? (\n <CloseWidgetButton widget={widget} />\n ) : (\n !confineToRoom && <ReturnToHomeButton />\n )}\n </div>\n );\n};\n","/*\nCopyright 2025 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { useTranslation } from \"react-i18next\";\nimport { PopOutIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport type { FC, ReactNode } from \"react\";\nimport { ErrorView } from \"./ErrorView\";\nimport { widget } from \"./widget.ts\";\n\n/**\n * An error consisting of a terse message to be logged to the console and a\n * richer message to be shown to the user, as a full-screen page.\n */\nexport class RichError extends Error {\n public constructor(\n message: string,\n /**\n * The pretty, more helpful message to be shown on the error screen.\n */\n public readonly richMessage: ReactNode,\n ) {\n super(message);\n }\n}\n\nconst OpenElsewhere: FC = () => {\n const { t } = useTranslation();\n\n return (\n <ErrorView\n widget={widget}\n Icon={PopOutIcon}\n title={t(\"error.open_elsewhere\")}\n >\n <p>\n {t(\"error.open_elsewhere_description\", {\n brand: import.meta.env.VITE_PRODUCT_NAME || \"Element Call\",\n })}\n </p>\n </ErrorView>\n );\n};\n\nexport class OpenElsewhereError extends RichError {\n public constructor() {\n super(\"App opened in another tab\", <OpenElsewhere />);\n }\n}\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type FC, type ReactElement, type ReactNode, useEffect } from \"react\";\nimport classNames from \"classnames\";\nimport { useTranslation } from \"react-i18next\";\nimport * as Sentry from \"@sentry/react\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport { ErrorSolidIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport { Header, HeaderLogo, LeftNav, RightNav } from \"./Header\";\nimport styles from \"./FullScreenView.module.css\";\nimport { useUrlParams } from \"./UrlParams\";\nimport { RichError } from \"./RichError\";\nimport { ErrorView } from \"./ErrorView\";\nimport { type WidgetHelpers } from \"./widget.ts\";\n\ninterface FullScreenViewProps {\n className?: string;\n children: ReactNode;\n}\n\nexport const FullScreenView: FC<FullScreenViewProps> = ({\n className,\n children,\n}) => {\n const { header } = useUrlParams();\n return (\n <div className={classNames(styles.page, className)}>\n {header === \"standard\" && (\n <Header>\n <LeftNav>\n <HeaderLogo />\n </LeftNav>\n <RightNav />\n </Header>\n )}\n <div className={styles.container}>\n <div className={styles.content}>{children}</div>\n </div>\n </div>\n );\n};\n\ninterface ErrorPageProps {\n error: unknown;\n widget: WidgetHelpers | null;\n}\n\n// Due to this component being used as the crash fallback for Sentry, which has\n// weird type requirements, we can't just give this a type of FC<ErrorPageProps>\nexport const ErrorPage = ({ error, widget }: ErrorPageProps): ReactElement => {\n const { t } = useTranslation();\n useEffect(() => {\n logger.error(error);\n Sentry.captureException(error);\n }, [error]);\n\n return (\n <FullScreenView>\n {error instanceof RichError ? (\n error.richMessage\n ) : (\n <ErrorView\n widget={widget}\n Icon={ErrorSolidIcon}\n title={t(\"error.generic\")}\n rageshake\n fatal\n >\n <p>{t(\"error.generic_description\")}</p>\n </ErrorView>\n )}\n </FullScreenView>\n );\n};\n\nexport const LoadingPage: FC = () => {\n const { t } = useTranslation();\n\n return (\n <FullScreenView>\n <h1>{t(\"common.loading\")}</h1>\n </FullScreenView>\n );\n};\n","var t=\"undefined\"!=typeof window?window:void 0,e=\"undefined\"!=typeof globalThis?globalThis:t;\"undefined\"==typeof self&&(e.self=e),\"undefined\"==typeof File&&(e.File=function(){});var i=null==e?void 0:e.navigator,r=null==e?void 0:e.document,s=null==e?void 0:e.location,n=null==e?void 0:e.fetch,o=null!=e&&e.XMLHttpRequest&&\"withCredentials\"in new e.XMLHttpRequest?e.XMLHttpRequest:void 0,a=null==e?void 0:e.AbortController,l=null==e?void 0:e.CompressionStream,u=null==i?void 0:i.userAgent,h=null!=t?t:{},d=\"1.374.0\",v={DEBUG:!1,LIB_VERSION:d,LIB_NAME:\"web\",JS_SDK_VERSION:d};function c(t,e,i,r,s,n,o){try{var a=t[n](o),l=a.value}catch(t){return void i(t)}a.done?e(l):Promise.resolve(l).then(r,s)}function p(t){return function(){var e=this,i=arguments;return new Promise((function(r,s){var n=t.apply(e,i);function o(t){c(n,r,s,o,a,\"next\",t)}function a(t){c(n,r,s,o,a,\"throw\",t)}o(void 0)}))}}function f(){return f=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var i=arguments[e];for(var r in i)({}).hasOwnProperty.call(i,r)&&(t[r]=i[r])}return t},f.apply(null,arguments)}function _(t,e){if(null==t)return{};var i={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==e.indexOf(r))continue;i[r]=t[r]}return i}var g,m=function(t){return t.GZipJS=\"gzip-js\",t.Base64=\"base64\",t}({}),b=[\"$snapshot\",\"$pageview\",\"$pageleave\",\"$set\",\"survey dismissed\",\"survey sent\",\"survey shown\",\"$identify\",\"$groupidentify\",\"$create_alias\",\"$$client_ingestion_warning\",\"$web_experiment_applied\",\"$feature_enrollment_update\",\"$feature_flag_called\"],y=\"NativeGzipValidationError\",w=t=>t.length>=2&&31===t[0]&&139===t[1],x=t=>!(!t||\"object\"!=typeof t)&&\"NotReadableError\"===(\"name\"in t?String(t.name):\"\"),E=t=>{var e=new Error(\"Native gzip produced invalid output: \"+t);throw e.name=y,e},S=function(){var t=p((function*(t,e){18>t.size&&E(\"too-short\");var i=new Uint8Array(yield t.slice(0,10).arrayBuffer());w(i)&&8===i[2]||E(\"invalid-header\");var r=new DataView(yield t.slice(t.size-8).arrayBuffer());r.getUint32(0,!0)!==(t=>{for(var e=(()=>{if(g)return g;g=[];for(var t=0;256>t;t++){for(var e=t,i=0;8>i;i++)e=1&e?3988292384^e>>>1:e>>>1;g[t]=e>>>0}return g})(),i=4294967295,r=0;t.length>r;r++)i=e[255&(i^t[r])]^i>>>8;return(4294967295^i)>>>0})(e)&&E(\"invalid-crc\");var s=e.length>>>0;r.getUint32(4,!0)!==s&&E(\"invalid-size\")}));return function(e,i){return t.apply(this,arguments)}}();function T(){return T=p((function*(t,e,i){void 0===e&&(e=!0);try{var r=(new TextEncoder).encode(t),s=new CompressionStream(\"gzip\"),n=s.writable.getWriter(),o=n.write(r).then((()=>n.close())).catch(function(){var t=p((function*(t){try{yield n.abort(t)}catch(t){}throw t}));return function(e){return t.apply(this,arguments)}}()),a=new Response(s.readable).blob(),[l]=yield Promise.all([a,o]);return yield S(l,r),l}catch(t){if(null!=i&&i.rethrow)throw t;return e&&console.error(\"Failed to gzip compress data\",t),null}})),T.apply(this,arguments)}var k=[\"amazonbot\",\"amazonproductbot\",\"app.hypefactors.com\",\"applebot\",\"archive.org_bot\",\"awariobot\",\"backlinksextendedbot\",\"baiduspider\",\"bingbot\",\"bingpreview\",\"chrome-lighthouse\",\"dataforseobot\",\"deepscan\",\"duckduckbot\",\"facebookexternal\",\"facebookcatalog\",\"http://yandex.com/bots\",\"hubspot\",\"ia_archiver\",\"leikibot\",\"linkedinbot\",\"meta-externalagent\",\"mj12bot\",\"msnbot\",\"nessus\",\"petalbot\",\"pinterest\",\"prerender\",\"rogerbot\",\"screaming frog\",\"sebot-wa\",\"sitebulb\",\"slackbot\",\"slurp\",\"trendictionbot\",\"turnitin\",\"twitterbot\",\"vercel-screenshot\",\"vercelbot\",\"yahoo! slurp\",\"yandexbot\",\"zoombot\",\"bot.htm\",\"bot.php\",\"(bot;\",\"bot/\",\"crawler\",\"ahrefsbot\",\"ahrefssiteaudit\",\"semrushbot\",\"siteauditbot\",\"splitsignalbot\",\"gptbot\",\"oai-searchbot\",\"chatgpt-user\",\"perplexitybot\",\"better uptime bot\",\"sentryuptimebot\",\"uptimerobot\",\"headlesschrome\",\"cypress\",\"google-hoteladsverifier\",\"adsbot-google\",\"apis-google\",\"duplexweb-google\",\"feedfetcher-google\",\"google favicon\",\"google web preview\",\"google-read-aloud\",\"googlebot\",\"googleother\",\"google-cloudvertexbot\",\"googleweblight\",\"mediapartners-google\",\"storebot-google\",\"google-inspectiontool\",\"bytespider\"],R=function(t,e){if(void 0===e&&(e=[]),!t)return!1;var i=t.toLowerCase();return k.concat(e).some((t=>{var e=t.toLowerCase();return-1!==i.indexOf(e)}))};function P(t,e){return-1!==t.indexOf(e)}var O=function(t){return t.trim()},I=function(t){return t.replace(/^\\$/,\"\")},C=Object.prototype,A=C.hasOwnProperty,F=C.toString,M=Array.isArray||function(t){return\"[object Array]\"===F.call(t)},D=t=>\"function\"==typeof t,U=t=>t===Object(t)&&!M(t),L=t=>{if(U(t)){for(var e in t)if(A.call(t,e))return!1;return!0}return!1},N=t=>void 0===t,j=t=>\"[object String]\"==F.call(t),z=t=>j(t)&&0===t.trim().length,B=t=>null===t,H=t=>N(t)||B(t),q=t=>\"[object Number]\"==F.call(t)&&t==t,V=t=>q(t)&&t>0,W=t=>\"[object Boolean]\"===F.call(t),G=t=>t instanceof FormData,Y=t=>P(b,t);function J(t){return null===t||\"object\"!=typeof t}function K(t,e){return{}.toString.call(t)===\"[object \"+e+\"]\"}function X(t){return\"undefined\"!=typeof Event&&function(t,e){try{return t instanceof e}catch(t){return!1}}(t,Event)}var Q=[!0,\"true\",1,\"1\",\"yes\"],Z=t=>P(Q,t),tt=[!1,\"false\",0,\"0\",\"no\"];function et(t,e,i,r,s){return e>i&&(r.warn(\"min cannot be greater than max.\"),e=i),q(t)?t>i?(r.warn(\" cannot be greater than max: \"+i+\". Using max value instead.\"),i):e>t?(r.warn(\" cannot be less than min: \"+e+\". Using min value instead.\"),e):t:(r.warn(\" must be a number. using max or fallback. max: \"+i+\", fallback: \"+s),et(s||i,e,i,r))}class it{constructor(t){this.$t={},this.zt=t.zt,this.Zt=et(t.bucketSize,0,100,t.Gt),this.Qt=et(t.refillRate,0,this.Zt,t.Gt),this.Jt=et(t.refillInterval,0,864e5,t.Gt)}Kt(t,e){var i=Math.floor((e-t.lastAccess)/this.Jt);i>0&&(t.tokens=Math.min(t.tokens+i*this.Qt,this.Zt),t.lastAccess=t.lastAccess+i*this.Jt)}consumeRateLimit(t){var e,i=Date.now(),r=String(t),s=this.$t[r];return s?this.Kt(s,i):this.$t[r]=s={tokens:this.Zt,lastAccess:i},0===s.tokens||(s.tokens--,0===s.tokens&&(null==(e=this.zt)||e.call(this,t)),0===s.tokens)}stop(){this.$t={}}}var rt,st,nt,ot=\"Mobile\",at=\"iOS\",lt=\"Android\",ut=\"Tablet\",ht=lt+\" \"+ut,dt=\"iPad\",vt=\"Apple\",ct=vt+\" Watch\",pt=\"Safari\",ft=\"BlackBerry\",_t=\"Samsung\",gt=_t+\"Browser\",mt=_t+\" Internet\",bt=\"Chrome\",yt=bt+\" OS\",wt=bt+\" \"+at,xt=\"Internet Explorer\",Et=xt+\" \"+ot,St=\"Opera\",$t=St+\" Mini\",Tt=\"Edge\",kt=\"Microsoft \"+Tt,Rt=\"Firefox\",Pt=Rt+\" \"+at,Ot=\"Nintendo\",It=\"PlayStation\",Ct=\"Xbox\",At=lt+\" \"+ot,Ft=ot+\" \"+pt,Mt=\"Windows\",Dt=Mt+\" Phone\",Ut=\"Nokia\",Lt=\"Ouya\",Nt=\"Generic\",jt=Nt+\" \"+ot.toLowerCase(),zt=Nt+\" \"+ut.toLowerCase(),Bt=\"Konqueror\",Ht=\"(\\\\d+(\\\\.\\\\d+)?)\",qt=new RegExp(\"Version/\"+Ht),Vt=new RegExp(Ct,\"i\"),Wt=new RegExp(It+\" \\\\w+\",\"i\"),Gt=new RegExp(Ot+\" \\\\w+\",\"i\"),Yt=new RegExp(ft+\"|PlayBook|BB10\",\"i\"),Jt={\"NT3.51\":\"NT 3.11\",\"NT4.0\":\"NT 4.0\",\"5.0\":\"2000\",5.1:\"XP\",5.2:\"XP\",\"6.0\":\"Vista\",6.1:\"7\",6.2:\"8\",6.3:\"8.1\",6.4:\"10\",\"10.0\":\"10\"},Kt=function(t,e){return e=e||\"\",P(t,\" OPR/\")&&P(t,\"Mini\")?$t:P(t,\" OPR/\")?St:Yt.test(t)?ft:P(t,\"IE\"+ot)||P(t,\"WPDesktop\")?Et:P(t,gt)?mt:P(t,Tt)||P(t,\"Edg/\")?kt:P(t,\"FBIOS\")?\"Facebook \"+ot:P(t,\"UCWEB\")||P(t,\"UCBrowser\")?\"UC Browser\":P(t,\"CriOS\")?wt:P(t,\"CrMo\")||P(t,bt)?bt:P(t,lt)&&P(t,pt)?At:P(t,\"FxiOS\")?Pt:P(t.toLowerCase(),Bt.toLowerCase())?Bt:((t,e)=>e&&P(e,vt)||function(t){return P(t,pt)&&!P(t,bt)&&!P(t,lt)}(t))(t,e)?P(t,ot)?Ft:pt:P(t,Rt)?Rt:P(t,\"MSIE\")||P(t,\"Trident/\")?xt:P(t,\"Gecko\")?Rt:\"\"},Xt={[Et]:[new RegExp(\"rv:\"+Ht)],[kt]:[new RegExp(Tt+\"?\\\\/\"+Ht)],[bt]:[new RegExp(\"(\"+bt+\"|CrMo)\\\\/\"+Ht)],[wt]:[new RegExp(\"CriOS\\\\/\"+Ht)],\"UC Browser\":[new RegExp(\"(UCBrowser|UCWEB)\\\\/\"+Ht)],[pt]:[qt],[Ft]:[qt],[St]:[new RegExp(\"(Opera|OPR)\\\\/\"+Ht)],[Rt]:[new RegExp(Rt+\"\\\\/\"+Ht)],[Pt]:[new RegExp(\"FxiOS\\\\/\"+Ht)],[Bt]:[new RegExp(\"Konqueror[:/]?\"+Ht,\"i\")],[ft]:[new RegExp(ft+\" \"+Ht),qt],[At]:[new RegExp(\"android\\\\s\"+Ht,\"i\")],[mt]:[new RegExp(gt+\"\\\\/\"+Ht)],[xt]:[new RegExp(\"(rv:|MSIE )\"+Ht)],Mozilla:[new RegExp(\"rv:\"+Ht)]},Qt=function(t,e){var i=Kt(t,e),r=Xt[i];if(N(r))return null;for(var s=0;r.length>s;s++){var n=t.match(r[s]);if(n)return parseFloat(n[n.length-2])}return null},Zt=[[new RegExp(Ct+\"; \"+Ct+\" (.*?)[);]\",\"i\"),t=>[Ct,t&&t[1]||\"\"]],[new RegExp(Ot,\"i\"),[Ot,\"\"]],[new RegExp(It,\"i\"),[It,\"\"]],[Yt,[ft,\"\"]],[new RegExp(Mt,\"i\"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Dt,\"\"];if(new RegExp(ot).test(e)&&!/IEMobile\\b/.test(e))return[Mt+\" \"+ot,\"\"];var i=/Windows NT ([0-9.]+)/i.exec(e);if(i&&i[1]){var r=Jt[i[1]]||\"\";return/arm/i.test(e)&&(r=\"RT\"),[Mt,r]}return[Mt,\"\"]}],[/((iPhone|iPad|iPod).*?OS (\\d+)_(\\d+)_?(\\d+)?|iPhone)/,t=>t&&t[3]?[at,[t[3],t[4],t[5]||\"0\"].join(\".\")]:[at,\"\"]],[/(watch.*\\/(\\d+\\.\\d+\\.\\d+)|watch os,(\\d+\\.\\d+),)/i,t=>{var e=\"\";return t&&t.length>=3&&(e=N(t[2])?t[3]:t[2]),[\"watchOS\",e]}],[new RegExp(\"(\"+lt+\" (\\\\d+)\\\\.(\\\\d+)\\\\.?(\\\\d+)?|\"+lt+\")\",\"i\"),t=>t&&t[2]?[lt,[t[2],t[3],t[4]||\"0\"].join(\".\")]:[lt,\"\"]],[/Mac OS X (\\d+)[_.](\\d+)[_.]?(\\d+)?/i,t=>{var e=[\"Mac OS X\",\"\"];return t&&t[1]&&(e[1]=[t[1],t[2],t[3]||\"0\"].join(\".\")),e}],[/Mac/i,[\"Mac OS X\",\"\"]],[/CrOS/,[yt,\"\"]],[/Linux|debian/i,[\"Linux\",\"\"]]],te=function(t){return Gt.test(t)?Ot:Wt.test(t)?It:Vt.test(t)?Ct:new RegExp(Lt,\"i\").test(t)?Lt:new RegExp(\"(\"+Dt+\"|WPDesktop)\",\"i\").test(t)?Dt:/iPad/.test(t)?dt:/iPod/.test(t)?\"iPod Touch\":/iPhone/.test(t)?\"iPhone\":/(watch)(?: ?os[,/]|\\d,\\d\\/)[\\d.]+/i.test(t)?ct:Yt.test(t)?ft:/(kobo)\\s(ereader|touch)/i.test(t)?\"Kobo\":new RegExp(Ut,\"i\").test(t)?Ut:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i.test(t)||/(kf[a-z]+)( bui|\\)).+silk\\//i.test(t)?\"Kindle Fire\":/(Android|ZTE)/i.test(t)?new RegExp(ot).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?lt:ht:new RegExp(\"(pda|\"+ot+\")\",\"i\").test(t)?jt:new RegExp(ut,\"i\").test(t)&&!new RegExp(ut+\" pc\",\"i\").test(t)?zt:\"\"},ee=t=>t instanceof Error,ie={trace:{text:\"TRACE\",number:1},debug:{text:\"DEBUG\",number:5},info:{text:\"INFO\",number:9},warn:{text:\"WARN\",number:13},error:{text:\"ERROR\",number:17},fatal:{text:\"FATAL\",number:21}},re=ie.info;function se(t){if(W(t))return{boolValue:t};if(\"number\"==typeof t)return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(\"string\"==typeof t)return{stringValue:t};if(M(t))return{arrayValue:{values:t.map((t=>se(t)))}};try{return{stringValue:JSON.stringify(t)}}catch(e){return{stringValue:String(t)}}}function ne(t){var e=[];for(var i in t){var r=t[i];B(r)||N(r)||e.push({key:i,value:se(r)})}return e}function oe(t){var e=globalThis._posthogChunkIds;if(e){var i=Object.keys(e);return nt&&i.length===st||(st=i.length,nt=i.reduce(((i,r)=>{rt||(rt={});var s=rt[r];if(s)i[s[0]]=s[1];else for(var n=t(r),o=n.length-1;o>=0;o--){var a=n[o],l=null==a?void 0:a.filename,u=e[r];if(l&&u){i[l]=u,rt[r]=[l,u];break}}return i}),{})),nt}}class ae{constructor(t,e,i){void 0===i&&(i=[]),this.coercers=t,this.stackParser=e,this.modifiers=i}buildFromUnknown(t,e){void 0===e&&(e={});var i=e&&e.mechanism||{handled:!0,type:\"generic\"},r=this.buildCoercingContext(i,e,0).apply(t),s=this.buildParsingContext(e),n=this.parseStacktrace(r,s);return{$exception_list:this.convertToExceptionList(n,i),$exception_level:\"error\"}}modifyFrames(t){var e=this;return p((function*(){for(var i of t)i.stacktrace&&i.stacktrace.frames&&M(i.stacktrace.frames)&&(i.stacktrace.frames=yield e.applyModifiers(i.stacktrace.frames));return t}))()}coerceFallback(t){var e;return{type:\"Error\",value:\"Unknown error\",stack:null==(e=t.syntheticException)?void 0:e.stack,synthetic:!0}}parseStacktrace(t,e){var i,r;return null!=t.cause&&(i=this.parseStacktrace(t.cause,e)),\"\"!=t.stack&&null!=t.stack&&(r=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?e.skipFirstLines:0),e.chunkIdMap)),f({},t,{cause:i,stack:r})}applyChunkIds(t,e){return t.map((t=>(t.filename&&e&&(t.chunk_id=e[t.filename]),t)))}applyCoercers(t,e){for(var i of this.coercers)if(i.match(t))return i.coerce(t,e);return this.coerceFallback(e)}applyModifiers(t){var e=this;return p((function*(){var i=t;for(var r of e.modifiers)i=yield r(i);return i}))()}convertToExceptionList(t,e){var i,r,s,n={type:t.type,value:t.value,mechanism:{type:null!==(i=e.type)&&void 0!==i?i:\"generic\",handled:null===(r=e.handled)||void 0===r||r,synthetic:null!==(s=t.synthetic)&&void 0!==s&&s}};t.stack&&(n.stacktrace={type:\"raw\",frames:t.stack});var o=[n];return null!=t.cause&&o.push(...this.convertToExceptionList(t.cause,f({},e,{handled:!0}))),o}buildParsingContext(t){var e;return{chunkIdMap:oe(this.stackParser),skipFirstLines:null!==(e=t.skipFirstLines)&&void 0!==e?e:1}}buildCoercingContext(t,e,i){void 0===i&&(i=0);var r=(i,r)=>{if(4>=r){var s=this.buildCoercingContext(t,e,r);return this.applyCoercers(i,s)}};return f({},e,{syntheticException:0==i?e.syntheticException:void 0,mechanism:t,apply:t=>r(t,i),next:t=>r(t,i+1)})}}var le=\"?\";function ue(t,e,i,r,s){var n={platform:t,filename:e,function:\"<anonymous>\"===i?le:i,in_app:!0};return N(r)||(n.lineno=r),N(s)||(n.colno=s),n}var he=(t,e)=>{var i=-1!==t.indexOf(\"safari-extension\"),r=-1!==t.indexOf(\"safari-web-extension\");return i||r?[-1!==t.indexOf(\"@\")?t.split(\"@\")[0]:le,i?\"safari-extension:\"+e:\"safari-web-extension:\"+e]:[t,e]},de=/^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i,ve=/^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,ce=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,pe=(t,e)=>{var i=de.exec(t);if(i){var[,r,s,n]=i;return ue(e,r,le,+s,+n)}var o=ve.exec(t);if(o){if(o[2]&&0===o[2].indexOf(\"eval\")){var a=ce.exec(o[2]);a&&(o[2]=a[1],o[3]=a[2],o[4]=a[3])}var[l,u]=he(o[1]||le,o[2]);return ue(e,u,l,o[3]?+o[3]:void 0,o[4]?+o[4]:void 0)}},fe=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i,_e=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,ge=(t,e)=>{var i=fe.exec(t);if(i){if(i[3]&&i[3].indexOf(\" > eval\")>-1){var r=_e.exec(i[3]);r&&(i[1]=i[1]||\"eval\",i[3]=r[1],i[4]=r[2],i[5]=\"\")}var s=i[3],n=i[1]||le;return[n,s]=he(n,s),ue(e,s,n,i[4]?+i[4]:void 0,i[5]?+i[5]:void 0)}},me=/\\(error: (.*)\\)/;class be{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,e){var i=j(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:i?t.stack:void 0,cause:t.cause?e.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?\"DOMError\":\"DOMException\"}getValue(t){var e=t.name||(this.isDOMError(t)?\"DOMError\":\"DOMException\");return t.message?e+\": \"+t.message:e}isDOMException(t){return K(t,\"DOMException\")}isDOMError(t){return K(t,\"DOMError\")}}class ye{match(t){return(t=>t instanceof Error)(t)}coerce(t,e){return{type:this.getType(t),value:this.getMessage(t,e),stack:this.getStack(t),cause:t.cause?e.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,e){var i=t.message;return String(i.error&&\"string\"==typeof i.error.message?i.error.message:i)}getStack(t){return t.stacktrace||t.stack||void 0}}class we{constructor(){}match(t){return K(t,\"ErrorEvent\")&&null!=t.error}coerce(t,e){var i;return e.apply(t.error)||{type:\"ErrorEvent\",value:t.message,stack:null==(i=e.syntheticException)?void 0:i.stack,synthetic:!0}}}var xe=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Ee{match(t){return\"string\"==typeof t}coerce(t,e){var i,[r,s]=this.getInfos(t);return{type:null!=r?r:\"Error\",value:null!=s?s:t,stack:null==(i=e.syntheticException)?void 0:i.stack,synthetic:!0}}getInfos(t){var e=\"Error\",i=t,r=t.match(xe);return r&&(e=r[1],i=r[2]),[e,i]}}var Se=[\"fatal\",\"error\",\"warning\",\"log\",\"info\",\"debug\"];function $e(t,e){void 0===e&&(e=40);var i=Object.keys(t);if(i.sort(),!i.length)return\"[object has no keys]\";for(var r=i.length;r>0;r--){var s=i.slice(0,r).join(\", \");if(e>=s.length)return r===i.length?s:s.length>e?s.slice(0,e)+\"...\":s}return\"\"}class Te{match(t){return\"object\"==typeof t&&null!==t}coerce(t,e){var i,r=this.getErrorPropertyFromObject(t);return r?e.apply(r):{type:this.getType(t),value:this.getValue(t),stack:null==(i=e.syntheticException)?void 0:i.stack,level:this.isSeverityLevel(t.level)?t.level:\"error\",synthetic:!0}}getType(t){return X(t)?t.constructor.name:\"Error\"}getValue(t){if(\"name\"in t&&\"string\"==typeof t.name){var e=\"'\"+t.name+\"' captured as exception\";return\"message\"in t&&\"string\"==typeof t.message&&(e+=\" with message: '\"+t.message+\"'\"),e}if(\"message\"in t&&\"string\"==typeof t.message)return t.message;var i=this.getObjectClassName(t);return(i&&\"Object\"!==i?\"'\"+i+\"'\":\"Object\")+\" captured as exception with keys: \"+$e(t)}isSeverityLevel(t){return j(t)&&!z(t)&&Se.indexOf(t)>=0}getErrorPropertyFromObject(t){for(var e in t)if({}.hasOwnProperty.call(t,e)){var i=t[e];if(ee(i))return i}}getObjectClassName(t){try{var e=Object.getPrototypeOf(t);return e?e.constructor.name:void 0}catch(t){return}}}class ke{match(t){return X(t)}coerce(t,e){var i,r=t.constructor.name;return{type:r,value:r+\" captured as exception with keys: \"+$e(t),stack:null==(i=e.syntheticException)?void 0:i.stack,synthetic:!0}}}class Re{match(t){return J(t)}coerce(t,e){var i;return{type:\"Error\",value:\"Primitive value captured as exception: \"+String(t),stack:null==(i=e.syntheticException)?void 0:i.stack,synthetic:!0}}}class Pe{match(t){return K(t,\"PromiseRejectionEvent\")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!X(t))return!1;try{var e=t.detail;return null!=e&&\"object\"==typeof e&&\"reason\"in e}catch(t){return!1}}coerce(t,e){var i,r=this.getUnhandledRejectionReason(t);return J(r)?{type:\"UnhandledRejection\",value:\"Non-Error promise rejection captured with value: \"+String(r),stack:null==(i=e.syntheticException)?void 0:i.stack,synthetic:!0}:e.apply(r)}getUnhandledRejectionReason(t){try{if(\"reason\"in t)return t.reason;if(\"detail\"in t&&null!=t.detail&&\"object\"==typeof t.detail&&\"reason\"in t.detail)return t.detail.reason}catch(t){}return t}}var Oe=\"$message\",Ie=\"$timestamp\",Ce=new Set([Oe,Ie]),Ae={enabled:!0,max_bytes:32768};function Fe(t){var e;return t?{enabled:null!==(e=t.enabled)&&void 0!==e?e:Ae.enabled,max_bytes:De(t.max_bytes,Ae.max_bytes)}:f({},Ae)}class Me{constructor(t){this.Yt=[],this.Xt=0,this.qt=Fe(t)}setConfig(t){this.qt=Fe(t),this.er()}add(t){var e=function(t){var e=function(t){var e=new WeakSet;try{return JSON.stringify(t,((t,i)=>{if(\"bigint\"==typeof i)return i.toString();if(\"function\"!=typeof i&&\"symbol\"!=typeof i){if(i instanceof Date)return i.toISOString();if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i&&\"object\"==typeof i){if(e.has(i))return\"[Circular]\";e.add(i)}return i}}))}catch(t){return}}(t);if(e)try{var i=JSON.parse(e);if(!U(i))return;var r=i,s=r[Oe],n=r[Ie];if(!j(s)||0===s.trim().length)return;if(!j(n)&&!q(n))return;return{step:r,json:e}}catch(t){return}}(t);if(e){var i=function(t){if(\"undefined\"!=typeof TextEncoder)return(new TextEncoder).encode(t).length;for(var e=encodeURIComponent(t),i=0,r=0;e.length>r;r++)\"%\"===e[r]?(i+=1,r+=2):i+=1;return i}(e.json);i>this.qt.max_bytes||(this.Yt.push({step:e.step,bytes:i}),this.Xt+=i,this.er())}}getAttachable(){return this.Yt.map((t=>t.step))}clear(){this.Yt=[],this.Xt=0}size(){return this.Yt.length}er(){for(;this.Xt>this.qt.max_bytes&&this.Yt.length>0;){var t=this.Yt.shift();t&&(this.Xt-=t.bytes)}}}function De(t,e){if(!q(t)||t===1/0||t===-1/0)return e;var i=Math.floor(t);return 0>i?e:i}var Ue=function(e,i){var{debugEnabled:r}=void 0===i?{}:i,s={k(i){if(t&&(v.DEBUG||h.POSTHOG_DEBUG||r)&&!N(t.console)&&t.console){for(var s=(\"__rrweb_original__\"in t.console[i]?t.console[i].__rrweb_original__:t.console[i]),n=arguments.length,o=new Array(n>1?n-1:0),a=1;n>a;a++)o[a-1]=arguments[a];s(e,...o)}},debug(){for(var t=arguments.length,e=new Array(t),i=0;t>i;i++)e[i]=arguments[i];s.k(\"debug\",...e)},info(){for(var t=arguments.length,e=new Array(t),i=0;t>i;i++)e[i]=arguments[i];s.k(\"log\",...e)},warn(){for(var t=arguments.length,e=new Array(t),i=0;t>i;i++)e[i]=arguments[i];s.k(\"warn\",...e)},error(){for(var t=arguments.length,e=new Array(t),i=0;t>i;i++)e[i]=arguments[i];s.k(\"error\",...e)},critical(){for(var t=arguments.length,i=new Array(t),r=0;t>r;r++)i[r]=arguments[r];console.error(e,...i)},uninitializedWarning(t){s.error(\"You must initialize PostHog before calling \"+t)},createLogger:(t,i)=>Ue(e+\" \"+t,i)};return s},Le=Ue(\"[PostHog.js]\"),Ne=Le.createLogger,je=Ne(\"[ExternalScriptsLoader]\"),ze=(t,e,i)=>{if(t.config.disable_external_dependency_loading)return je.warn(e+\" was requested but loading of external scripts is disabled.\"),i(\"Loading of external scripts is disabled\");var s=null==r?void 0:r.querySelectorAll(\"script\");if(s)for(var n,o=function(){if(s[a].src===e){var t=s[a];return t.__posthog_loading_callback_fired?{v:i()}:(t.addEventListener(\"load\",(e=>{t.__posthog_loading_callback_fired=!0,i(void 0,e)})),t.onerror=t=>i(t),{v:void 0})}},a=0;s.length>a;a++)if(n=o())return n.v;var l=()=>{if(!r)return i(\"document not found\");var s=r.createElement(\"script\");if(s.type=\"text/javascript\",s.crossOrigin=\"anonymous\",s.src=e,s.onload=t=>{s.__posthog_loading_callback_fired=!0,i(void 0,t)},s.onerror=t=>i(t),t.config.prepare_external_dependency_script&&(s=t.config.prepare_external_dependency_script(s)),!s)return i(\"prepare_external_dependency_script returned null\");if(\"head\"===t.config.external_scripts_inject_target)r.head.appendChild(s);else{var n,o=r.querySelectorAll(\"body > script\");o.length>0?null==(n=o[0].parentNode)||n.insertBefore(s,o[0]):r.body.appendChild(s)}};null!=r&&r.body?l():null==r||r.addEventListener(\"DOMContentLoaded\",l)};h.__PosthogExtensions__=h.__PosthogExtensions__||{},h.__PosthogExtensions__.loadExternalDependency=(t,e,i)=>{if(\"remote-config\"!==e){var r;if(t.config.__preview_external_dependency_versioned_paths)r=t.requestRouter.endpointFor(\"assets\",\"/static/\"+t.version+\"/\"+e+\".js\");else{var s=\"/static/\"+e+\".js?v=\"+t.version;if(\"toolbar\"===e){var n=3e5;s=s+\"&t=\"+Math.floor(Date.now()/n)*n}r=t.requestRouter.endpointFor(\"assets\",s)}ze(t,r,i)}else{var o=t.requestRouter.endpointFor(\"assets\",\"/array/\"+t.config.token+\"/config.js\");ze(t,o,i)}},h.__PosthogExtensions__.loadSiteApp=(t,e,i)=>{var r=t.requestRouter.endpointFor(\"api\",e);ze(t,r,i)};var Be=\"$people_distinct_id\",He=\"$device_id\",qe=\"__alias\",Ve=\"__timers\",We=\"$autocapture_disabled_server_side\",Ge=\"$heatmaps_enabled_server_side\",Ye=\"$exception_capture_enabled_server_side\",Je=\"$error_tracking_suppression_rules\",Ke=\"$error_tracking_capture_extension_exceptions\",Xe=\"$web_vitals_enabled_server_side\",Qe=\"$dead_clicks_enabled_server_side\",Ze=\"$product_tours_enabled_server_side\",ti=\"$web_vitals_allowed_metrics\",ei=\"$session_recording_remote_config\",ii=\"$replay_override_sampling\",ri=\"$replay_override_linked_flag\",si=\"$replay_override_url_trigger\",ni=\"$replay_override_event_trigger\",oi=\"$sesid\",ai=\"$session_is_sampled\",li=\"$enabled_feature_flags\",ui=\"$active_feature_flags\",hi=\"$early_access_features\",di=\"$feature_flag_details\",vi=\"$feature_flag_payloads\",ci=\"$feature_flag_request_id\",pi=\"$override_feature_flags\",fi=\"$override_feature_flag_payloads\",_i=\"$stored_person_properties\",gi=\"$stored_group_properties\",mi=\"$surveys\",bi=\"$surveys_activated\",yi=\"ph_product_tours\",wi=\"$flag_call_reported\",xi=\"$flag_call_reported_session_id\",Ei=\"$feature_flag_errors\",Si=\"$feature_flag_evaluated_at\",$i=\"$user_state\",Ti=\"$client_session_props\",ki=\"$capture_rate_limit\",Ri=\"$initial_campaign_params\",Pi=\"$initial_referrer_info\",Oi=\"$initial_person_info\",Ii=\"$epp\",Ci=\"__POSTHOG_TOOLBAR__\",Ai=\"$posthog_cookieless\",Fi=\"$sdk_debug_extensions_init_method\",Mi=\"$sdk_debug_extensions_init_time_ms\",Di=\"$sdk_debug_recording_script_not_loaded\",Ui=\"PostHog loadExternalDependency extension not found.\",Li=\"on_reject\",Ni=\"always\",ji=\"anonymous\",zi=\"identified\",Bi=\"identified_only\",Hi=\"visibilitychange\",qi=\"beforeunload\",Vi=\"$pageview\",Wi=\"$pageleave\",Gi=\"$identify\",Yi=\"$groupidentify\";function Ji(t,e){M(t)&&t.forEach(e)}function Ki(t,e){if(!H(t))if(M(t))t.forEach(e);else if(G(t))t.forEach(((t,i)=>e(t,i)));else for(var i in t)A.call(t,i)&&e(t[i],i)}var Xi=function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),r=1;e>r;r++)i[r-1]=arguments[r];for(var s of i)for(var n in s)void 0!==s[n]&&(t[n]=s[n]);return t};function Qi(t){for(var e=Object.keys(t),i=e.length,r=new Array(i);i--;)r[i]=[e[i],t[e[i]]];return r}var Zi=function(t){try{return t()}catch(t){return}},tr=function(t){return function(){try{for(var e=arguments.length,i=new Array(e),r=0;e>r;r++)i[r]=arguments[r];return t.apply(this,i)}catch(t){Le.critical(\"Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.\"),Le.critical(t)}}},er=function(t){var e={};return Ki(t,(function(t,i){(j(t)&&t.length>0||q(t))&&(e[i]=t)})),e};var ir=[\"herokuapp.com\",\"vercel.app\",\"netlify.app\"];function rr(t){var e=null==t?void 0:t.hostname;if(!j(e))return!1;var i=e.split(\".\").slice(-2).join(\".\");for(var r of ir)if(i===r)return!1;return!0}function sr(t,e,i,r){var{capture:s=!1,passive:n=!0}=null!=r?r:{};null==t||t.addEventListener(e,i,{capture:s,passive:n})}function nr(t){return\"ph_toolbar_internal\"===t.name}Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return q(t)&&isFinite(t)&&Math.floor(t)===t});class or{constructor(t){if(this.bytes=t,16!==t.length)throw new TypeError(\"not 128-bit length\")}static fromFieldsV7(t,e,i,r){if(!Number.isInteger(t)||!Number.isInteger(e)||!Number.isInteger(i)||!Number.isInteger(r)||0>t||0>e||0>i||0>r||t>0xffffffffffff||e>4095||i>1073741823||r>4294967295)throw new RangeError(\"invalid field value\");var s=new Uint8Array(16);return s[0]=t/Math.pow(2,40),s[1]=t/Math.pow(2,32),s[2]=t/Math.pow(2,24),s[3]=t/Math.pow(2,16),s[4]=t/Math.pow(2,8),s[5]=t,s[6]=112|e>>>8,s[7]=e,s[8]=128|i>>>24,s[9]=i>>>16,s[10]=i>>>8,s[11]=i,s[12]=r>>>24,s[13]=r>>>16,s[14]=r>>>8,s[15]=r,new or(s)}toString(){for(var t=\"\",e=0;this.bytes.length>e;e++)t=t+(this.bytes[e]>>>4).toString(16)+(15&this.bytes[e]).toString(16),3!==e&&5!==e&&7!==e&&9!==e||(t+=\"-\");if(36!==t.length)throw new Error(\"Invalid UUIDv7 was generated\");return t}clone(){return new or(this.bytes.slice(0))}equals(t){return 0===this.compareTo(t)}compareTo(t){for(var e=0;16>e;e++){var i=this.bytes[e]-t.bytes[e];if(0!==i)return Math.sign(i)}return 0}}class ar{constructor(){this.S=0,this.C=0,this.I=new hr}generate(){var t=this.generateOrAbort();if(N(t)){this.S=0;var e=this.generateOrAbort();if(N(e))throw new Error(\"Could not generate UUID after timestamp reset\");return e}return t}generateOrAbort(){var t=Date.now();if(t>this.S)this.S=t,this.T();else{if(this.S>=t+1e4)return;this.C++,this.C>4398046511103&&(this.S++,this.T())}return or.fromFieldsV7(this.S,Math.trunc(this.C/Math.pow(2,30)),this.C&Math.pow(2,30)-1,this.I.nextUint32())}T(){this.C=1024*this.I.nextUint32()+(1023&this.I.nextUint32())}}var lr,ur=t=>{if(\"undefined\"!=typeof UUIDV7_DENY_WEAK_RNG&&UUIDV7_DENY_WEAK_RNG)throw new Error(\"no cryptographically strong RNG available\");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};t&&!N(t.crypto)&&crypto.getRandomValues&&(ur=t=>crypto.getRandomValues(t));class hr{constructor(){this.M=new Uint32Array(8),this.O=1/0}nextUint32(){return this.M.length>this.O||(ur(this.M),this.O=0),this.M[this.O++]}}var dr=()=>vr().toString(),vr=()=>(lr||(lr=new ar)).generate(),cr=\"\",pr=/[a-z0-9][a-z0-9-]+\\.[a-z]{2,}$/i;var fr={R:()=>!!r,D(t){Le.error(\"cookieStore error: \"+t)},A(t){if(r){try{for(var e=t+\"=\",i=r.cookie.split(\";\").filter((t=>t.length)),s=0;i.length>s;s++){for(var n=i[s];\" \"==n.charAt(0);)n=n.substring(1,n.length);if(0===n.indexOf(e))return decodeURIComponent(n.substring(e.length,n.length))}}catch(t){}return null}},F(t){var e;try{e=JSON.parse(fr.A(t))||{}}catch(t){}return e},N(t,e,i,s,n){if(r)try{var o=\"\",a=\"\",l=function(t,e){if(e){var i=function(t,e){if(void 0===e&&(e=r),cr)return cr;if(!e)return\"\";if([\"localhost\",\"127.0.0.1\"].includes(t))return\"\";for(var i=t.split(\".\"),s=Math.min(i.length,8),n=\"dmn_chk_\"+dr();!cr&&s--;){var o=i.slice(s).join(\".\"),a=n+\"=1;domain=.\"+o+\";path=/\";e.cookie=a+\";max-age=3\",e.cookie.includes(n)&&(e.cookie=a+\";max-age=0\",cr=o)}return cr}(t);if(!i){var s=(t=>{var e=t.match(pr);return e?e[0]:\"\"})(t);s!==i&&Le.info(\"Warning: cookie subdomain discovery mismatch\",s,i),i=s}return i?\"; domain=.\"+i:\"\"}return\"\"}(r.location.hostname,s);if(i){var u=new Date;u.setTime(u.getTime()+864e5*i),o=\"; expires=\"+u.toUTCString()}n&&(a=\"; secure\");var h=t+\"=\"+encodeURIComponent(JSON.stringify(e))+o+\"; SameSite=Lax; path=/\"+l+a;return h.length>3686.4&&Le.warn(\"cookieStore warning: large cookie, len=\"+h.length),r.cookie=h,h}catch(t){return}},q(t,e){if(null!=r&&r.cookie)try{fr.N(t,\"\",-1,e)}catch(t){return}}},_r=null,gr={R(){if(!B(_r))return _r;var e=!0;if(N(t))e=!1;else try{var i=\"__mplssupport__\";gr.N(i,\"xyz\"),'\"xyz\"'!==gr.A(i)&&(e=!1),gr.q(i)}catch(t){e=!1}return e||Le.error(\"localStorage unsupported; falling back to cookie store\"),_r=e,e},D(t){Le.error(\"localStorage error: \"+t)},A(e){try{return null==t?void 0:t.localStorage.getItem(e)}catch(t){gr.D(t)}return null},F(t){try{return JSON.parse(gr.A(t))||{}}catch(t){}return null},N(e,i){try{null==t||t.localStorage.setItem(e,JSON.stringify(i))}catch(t){gr.D(t)}},q(e){try{null==t||t.localStorage.removeItem(e)}catch(t){gr.D(t)}}},mr=[He,\"distinct_id\",oi,ai,Ii,Oi,$i],br={},yr={R:()=>!0,D(t){Le.error(\"memoryStorage error: \"+t)},A:t=>br[t]||null,F:t=>br[t]||null,N(t,e){br[t]=e},q(t){delete br[t]}},wr=null,xr={R(){if(!B(wr))return wr;if(wr=!0,N(t))wr=!1;else try{var e=\"__support__\";xr.N(e,\"xyz\"),'\"xyz\"'!==xr.A(e)&&(wr=!1),xr.q(e)}catch(t){wr=!1}return wr},D(t){Le.error(\"sessionStorage error: \",t)},A(e){try{return null==t?void 0:t.sessionStorage.getItem(e)}catch(t){xr.D(t)}return null},F(t){try{return JSON.parse(xr.A(t))||null}catch(t){}return null},N(e,i){try{null==t||t.sessionStorage.setItem(e,JSON.stringify(i))}catch(t){xr.D(t)}},q(e){try{null==t||t.sessionStorage.removeItem(e)}catch(t){xr.D(t)}}};class Er{constructor(t){this._instance=t}get qt(){return this._instance.config}get consent(){return this.rr()?0:this.ir}isOptedOut(){return this.qt.cookieless_mode===Ni||this.isRejected()||-1===this.consent&&this.qt.cookieless_mode===Li}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return 0===this.consent}isRejected(){return 0===this.consent||-1===this.consent&&this.qt.opt_out_capturing_by_default}optInOut(t){this.nr.N(this.sr,t?1:0,this.qt.cookie_expiration,this.qt.cross_subdomain_cookie,this.qt.secure_cookie)}reset(){this.nr.q(this.sr,this.qt.cross_subdomain_cookie)}get sr(){var{token:t,opt_out_capturing_cookie_prefix:e,consent_persistence_name:i}=this._instance.config;return i||(e?e+t:\"__ph_opt_in_out_\"+t)}get ir(){var t=this.nr.A(this.sr);return Z(t)?1:P(tt,t)?0:-1}get nr(){var t=this.qt.opt_out_capturing_persistence_type,e=\"localStorage\"===t?gr:fr;if(!this.ar||this.ar!==e){this.ar=e;var i=\"localStorage\"===t?fr:gr;i.A(this.sr)&&(this.ar.A(this.sr)||this.optInOut(Z(i.A(this.sr))),i.q(this.sr,this.qt.cross_subdomain_cookie))}return this.ar}rr(){return!!this.qt.respect_dnt&&[null==i?void 0:i.doNotTrack,null==i?void 0:i.msDoNotTrack,h.doNotTrack].some((t=>Z(t)))}}var Sr=Ne(\"[Dead Clicks]\"),$r=()=>!0,Tr=t=>{var e,i=!(null==(e=t.instance.persistence)||!e.get_property(Qe)),r=t.instance.config.capture_dead_clicks;return W(r)?r:!!U(r)||i};class kr{get lazyLoadedDeadClicksAutocapture(){return this.ur}constructor(t,e,i){this.instance=t,this.isEnabled=e,this.onCapture=i,this.startIfEnabledOrStop()}onRemoteConfig(t){\"captureDeadClicks\"in t&&(this.instance.persistence&&this.instance.persistence.register({[Qe]:t.captureDeadClicks}),this.startIfEnabledOrStop())}startIfEnabledOrStop(){this.isEnabled(this)?this.lr((()=>{this.hr()})):this.stop()}lr(t){var e,i;null!=(e=h.__PosthogExtensions__)&&e.initDeadClicksAutocapture&&t(),null==(i=h.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this.instance,\"dead-clicks-autocapture\",(e=>{e?Sr.error(\"failed to load script\",e):t()}))}hr(){var t;if(r){if(!this.ur&&null!=(t=h.__PosthogExtensions__)&&t.initDeadClicksAutocapture){var e=U(this.instance.config.capture_dead_clicks)?this.instance.config.capture_dead_clicks:{};e.__onCapture=this.onCapture,this.ur=h.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,e),this.ur.start(r),Sr.info(\"starting...\")}}else Sr.error(\"`document` not found. Cannot start.\")}stop(){this.ur&&(this.ur.stop(),this.ur=void 0,Sr.info(\"stopping...\"))}}var Rr=Ne(\"[SegmentIntegration]\");var Pr=\"posthog-js\";function Or(t,e){var{organization:i,projectId:r,prefix:s,severityAllowList:n=[\"error\"],sendExceptionsToPostHog:o=!0}=void 0===e?{}:e;return e=>{var a,l,u,h,d;if(\"*\"!==n&&!n.includes(e.level)||!t.__loaded)return e;e.tags||(e.tags={});var v=t.requestRouter.endpointFor(\"ui\",\"/project/\"+t.config.token+\"/person/\"+t.get_distinct_id());e.tags[\"PostHog Person URL\"]=v,t.sessionRecordingStarted()&&(e.tags[\"PostHog Recording URL\"]=t.get_session_replay_url({withTimestamp:!0}));var c,p=(null==(a=e.exception)?void 0:a.values)||[],_=p.map((t=>f({},t,{stacktrace:t.stacktrace?f({},t.stacktrace,{type:\"raw\",frames:(t.stacktrace.frames||[]).map((t=>f({},t,{platform:\"web:javascript\"})))}):void 0}))),g={$exception_message:(null==(l=p[0])?void 0:l.value)||e.message,$exception_type:null==(u=p[0])?void 0:u.type,$exception_level:e.level,$exception_list:_,$sentry_event_id:e.event_id,$sentry_exception:e.exception,$sentry_exception_message:(null==(h=p[0])?void 0:h.value)||e.message,$sentry_exception_type:null==(d=p[0])?void 0:d.type,$sentry_tags:e.tags};return i&&r&&(g.$sentry_url=(s||\"https://sentry.io/organizations/\")+i+\"/issues/?project=\"+r+\"&query=\"+e.event_id),o&&(null==(c=t.exceptions)||c.sendExceptionEvent(g)),e}}class Ir{constructor(t,e,i,r,s,n){this.name=Pr,this.setupOnce=function(o){o(Or(t,{organization:e,projectId:i,prefix:r,severityAllowList:s,sendExceptionsToPostHog:null==n||n}))}}}class Cr{constructor(t){this.cr=(t,e,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength)&&(Le.info(\"[PageViewManager] Session rotated, clearing pageview state\",{sessionId:t,changeReason:i}),this.dr=void 0,this._instance.scrollManager.resetContext())},this._instance=t,this.vr()}vr(){var t;this.pr=null==(t=this._instance.sessionManager)?void 0:t.onSessionId(this.cr)}destroy(){var t;null==(t=this.pr)||t.call(this),this.pr=void 0}doPageView(e,i){var r,s=this.gr(e,i);return this.dr={pathname:null!==(r=null==t?void 0:t.location.pathname)&&void 0!==r?r:\"\",pageViewId:i,timestamp:e},this._instance.scrollManager.resetContext(),s}doPageLeave(t){var e;return this.gr(t,null==(e=this.dr)?void 0:e.pageViewId)}doEvent(){var t;return{$pageview_id:null==(t=this.dr)?void 0:t.pageViewId}}gr(t,e){var i=this.dr;if(!i)return{$pageview_id:e};var r={$pageview_id:e,$prev_pageview_id:i.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var{maxScrollHeight:n,lastScrollY:o,maxScrollY:a,maxContentHeight:l,lastContentY:u,maxContentY:h}=s;if(!(N(n)||N(o)||N(a)||N(l)||N(u)||N(h))){n=Math.ceil(n),o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),h=Math.ceil(h);var d=n>1?et(o/n,0,1,Le):1,v=n>1?et(a/n,0,1,Le):1,c=l>1?et(u/l,0,1,Le):1,p=l>1?et(h/l,0,1,Le):1;r=Xi(r,{$prev_pageview_last_scroll:o,$prev_pageview_last_scroll_percentage:d,$prev_pageview_max_scroll:a,$prev_pageview_max_scroll_percentage:v,$prev_pageview_last_content:u,$prev_pageview_last_content_percentage:c,$prev_pageview_max_content:h,$prev_pageview_max_content_percentage:p})}}return i.pathname&&(r.$prev_pageview_pathname=i.pathname),i.timestamp&&(r.$prev_pageview_duration=(t.getTime()-i.timestamp.getTime())/1e3),r}}var Ar={[Be]:{exposure:\"hidden\"},[qe]:{exposure:\"hidden\"},__cmpns:{exposure:\"hidden\"},[Ve]:{exposure:\"hidden\"},[We]:{exposure:\"event\"},[Ge]:{exposure:\"hidden\"},[Ye]:{exposure:\"event\"},[Je]:{exposure:\"hidden\"},[Ke]:{exposure:\"event\"},[Xe]:{exposure:\"event\"},[Qe]:{exposure:\"event\"},[Ze]:{exposure:\"hidden\"},[ti]:{exposure:\"event\"},[ei]:{exposure:\"hidden\"},$session_recording_enabled_server_side:{exposure:\"hidden\"},[oi]:{exposure:\"hidden\"},[ai]:{exposure:\"event\"},$session_past_minimum_duration:{exposure:\"event\"},$session_recording_url_trigger_activated_session:{exposure:\"event\"},$session_recording_event_trigger_activated_session:{exposure:\"event\"},$debug_first_full_snapshot_timestamp:{exposure:\"event\"},[li]:{exposure:\"derived\",shouldSkipFromEventProperties:(t,e)=>e(),transformToEventProperties(t){if(!U(t))return{};for(var e={},i=Object.keys(t),r=0;i.length>r;r++)e[\"$feature/\"+i[r]]=t[i[r]];return e}},[ui]:{exposure:\"event\"},[hi]:{exposure:\"hidden\"},[di]:{exposure:\"hidden\"},[vi]:{exposure:\"event\"},[ci]:{exposure:\"event\"},[pi]:{exposure:\"event\"},[fi]:{exposure:\"hidden\"},[_i]:{exposure:\"hidden\"},[gi]:{exposure:\"hidden\"},[mi]:{exposure:\"hidden\"},[bi]:{exposure:\"event\"},[yi]:{exposure:\"hidden\"},$product_tours_activated:{exposure:\"hidden\"},$conversations_widget_session_id:{exposure:\"event\"},$conversations_ticket_id:{exposure:\"event\"},$conversations_widget_state:{exposure:\"event\"},$conversations_user_traits:{exposure:\"event\"},[wi]:{exposure:\"hidden\"},[xi]:{exposure:\"hidden\"},[Ei]:{exposure:\"hidden\"},[Si]:{exposure:\"hidden\"},[$i]:{exposure:\"hidden\"},[Ti]:{exposure:\"hidden\"},[ki]:{exposure:\"hidden\"},[Ri]:{exposure:\"hidden\"},[Pi]:{exposure:\"hidden\"},[Oi]:{exposure:\"hidden\"},[Ii]:{exposure:\"hidden\"},[ii]:{exposure:\"event\"},[ri]:{exposure:\"event\"},[si]:{exposure:\"event\"},[ni]:{exposure:\"event\"},[Fi]:{exposure:\"event\"},[Mi]:{exposure:\"event\"},[Di]:{exposure:\"event\"},$sdk_debug_replay_event_trigger_status:{exposure:\"event\"},$sdk_debug_replay_linked_flag_trigger_status:{exposure:\"event\"},$sdk_debug_replay_matched_recording_trigger_groups:{exposure:\"event\"},$sdk_debug_replay_remote_trigger_matching_config:{exposure:\"event\"},$sdk_debug_replay_trigger_groups_count:{exposure:\"event\"},$sdk_debug_replay_url_trigger_status:{exposure:\"event\"},$session_recording_start_reason:{exposure:\"event\"}},Fr=[[\"$posthog_sr_group_event_trigger_\",{exposure:\"hidden\"}],[\"$posthog_sr_group_url_trigger_\",{exposure:\"hidden\"}],[\"$posthog_sr_group_sampling_\",{exposure:\"hidden\"}]],Mr=t=>{var e=null==r?void 0:r.createElement(\"a\");return N(e)?null:(e.href=t,e)},Dr=function(t,e){for(var i,r=((t.split(\"#\")[0]||\"\").split(/\\?(.*)/)[1]||\"\").replace(/^\\?+/g,\"\").split(\"&\"),s=0;r.length>s;s++){var n=r[s].split(\"=\");if(n[0]===e){i=n;break}}if(!M(i)||2>i.length)return\"\";var o=i[1];try{o=decodeURIComponent(o)}catch(t){Le.error(\"Skipping decoding for malformed query param: \"+o)}return o.replace(/\\+/g,\" \")},Ur=function(t,e,i){if(!t||!e||!e.length)return t;for(var r=t.split(\"#\"),s=r[1],n=(r[0]||\"\").split(\"?\"),o=n[1],a=n[0],l=(o||\"\").split(\"&\"),u=[],h=0;l.length>h;h++){var d=l[h].split(\"=\");M(d)&&(e.includes(d[0])?u.push(d[0]+\"=\"+i):u.push(l[h]))}var v=a;return null!=o&&(v+=\"?\"+u.join(\"&\")),null!=s&&(v+=\"#\"+s),v},Lr=function(t,e){var i=t.match(new RegExp(e+\"=([^&]*)\"));return i?i[1]:null},Nr=\"https?://(.*)\",jr=[\"gclid\",\"gclsrc\",\"dclid\",\"gbraid\",\"wbraid\",\"fbclid\",\"msclkid\",\"twclid\",\"li_fat_id\",\"igshid\",\"ttclid\",\"rdt_cid\",\"epik\",\"qclid\",\"sccid\",\"irclid\",\"_kx\"],zr=[\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_content\",\"utm_term\",\"gad_source\",\"mc_cid\",...jr],Br=\"<masked>\",Hr=[\"li_fat_id\"];function qr(t,e,i){if(!r)return{};var s,n=e?[...jr,...i||[]]:[],o=Vr(Ur(r.URL,n,Br),t),a=(s={},Ki(Hr,(function(t){var e=fr.A(t);s[t]=e||null})),s);return Xi(a,o)}function Vr(t,e){var i=zr.concat(e||[]),r={};return Ki(i,(function(e){var i=Dr(t,e);r[e]=i||null})),r}function Wr(t){var e=function(t){return t?0===t.search(Nr+\"google.([^/?]*)\")?\"google\":0===t.search(Nr+\"bing.com\")?\"bing\":0===t.search(Nr+\"yahoo.com\")?\"yahoo\":0===t.search(Nr+\"duckduckgo.com\")?\"duckduckgo\":null:null}(t),i=\"yahoo\"!=e?\"q\":\"p\",s={};if(!B(e)){s.$search_engine=e;var n=r?Dr(r.referrer,i):\"\";n.length&&(s.ph_keyword=n)}return s}function Gr(){return navigator.language||navigator.userLanguage}var Yr=\"$direct\";function Jr(){return(null==r?void 0:r.referrer)||Yr}function Kr(t,e){var i=t?[...jr,...e||[]]:[],r=null==s?void 0:s.href.substring(0,1e3);return{r:Jr().substring(0,1e3),u:r?Ur(r,i,Br):void 0}}function Xr(t){var e,{r:i,u:r}=t,s={$referrer:i,$referring_domain:null==i?void 0:i==Yr?Yr:null==(e=Mr(i))?void 0:e.host};if(r){s.$current_url=r;var n=Mr(r);s.$host=null==n?void 0:n.host,s.$pathname=null==n?void 0:n.pathname;var o=Vr(r);Xi(s,o)}if(i){var a=Wr(i);Xi(s,a)}return s}function Qr(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(t){return}}function Zr(){try{return(new Date).getTimezoneOffset()}catch(t){return}}var ts=[\"cookie\",\"localstorage\",\"localstorage+cookie\",\"sessionstorage\",\"memory\"];class es{constructor(t,e){this.qt=t,this.props={},this.mr=!1,this.yr=(t=>{var e=\"\";return t.token&&(e=t.token.replace(/\\+/g,\"PL\").replace(/\\//g,\"SL\").replace(/=/g,\"EQ\")),t.persistence_name?\"ph_\"+t.persistence_name:\"ph_\"+e+\"_posthog\"})(t),this.nr=this.br(t),this.load(),t.debug&&Le.info(\"Persistence loaded\",t.persistence,f({},this.props)),this.update_config(t,t,e),this.save()}isDisabled(){return!!this._r}br(e){-1===ts.indexOf(e.persistence.toLowerCase())&&(Le.critical(\"Unknown persistence type \"+e.persistence+\"; falling back to localStorage+cookie\"),e.persistence=\"localStorage+cookie\");var i=function(e){void 0===e&&(e=[]);var i=[...mr,...e];return f({},gr,{F(t){try{var e={};try{e=fr.F(t)||{}}catch(t){}var i=Xi(e,JSON.parse(gr.A(t)||\"{}\"));return gr.N(t,i),i}catch(t){}return null},N(t,e,r,s,n,o){try{gr.N(t,e,void 0,void 0,o);var a={};i.forEach((t=>{e[t]&&(a[t]=e[t])})),Object.keys(a).length&&fr.N(t,a,r,s,n,o)}catch(t){gr.D(t)}},q(e,i){try{null==t||t.localStorage.removeItem(e),fr.q(e,i)}catch(t){gr.D(t)}}})}(e.cookie_persisted_properties||[]),r=e.persistence.toLowerCase();return\"localstorage\"===r&&gr.R()?gr:\"localstorage+cookie\"===r&&i.R()?i:\"sessionstorage\"===r&&xr.R()?xr:\"memory\"===r?yr:\"cookie\"===r?fr:i.R()?i:fr}wr(t){var e=null!=t?t:this.qt.feature_flag_cache_ttl_ms;if(!e||0>=e)return!1;var i=this.props[Si];return!i||\"number\"!=typeof i||Date.now()-i>e}properties(){var t={};return Ki(this.props,((e,i)=>{var r=(t=>{var e=Ar[t];if(e)return e;for(var[i,r]of Fr)if(0===t.indexOf(i))return r})(i);if(\"derived\"===(null==r?void 0:r.exposure)){if(null!=r.shouldSkipFromEventProperties&&r.shouldSkipFromEventProperties(e,i===li?()=>this.wr():()=>!1))return;r.transformToEventProperties&&Xi(t,r.transformToEventProperties(e))}else r&&\"event\"!==r.exposure||(t[i]=e)})),t}load(){if(!this._r){var t=this.nr.F(this.yr);t&&(this.props=Xi({},t))}}save(){this._r||this.nr.N(this.yr,this.props,this.Sr,this.kr,this.Cr,this.qt.debug)}remove(){this.nr.q(this.yr,!1),this.nr.q(this.yr,!0)}clear(){this.remove(),this.props={}}register_once(t,e,i){if(U(t)){N(e)&&(e=\"None\"),this.Sr=N(i)?this.Ir:i;var r=!1;if(Ki(t,((t,i)=>{this.props.hasOwnProperty(i)&&this.props[i]!==e||(this.Tr(i,t),r=!0)})),r)return this.save(),!0}return!1}register(t,e){if(U(t)){this.Sr=N(e)?this.Ir:e;var i=!1;if(Ki(t,((e,r)=>{t.hasOwnProperty(r)&&this.props[r]!==e&&(this.Tr(r,e),i=!0)})),i)return this.save(),!0}return!1}unregister(t){t in this.props&&(this.Er(t),this.save())}update_campaign_params(){if(!this.mr){var t=qr(this.qt.custom_campaign_params,this.qt.mask_personal_data_properties,this.qt.custom_personal_data_properties);L(er(t))||this.register(t),this.mr=!0}}update_search_keyword(){var t;this.register((t=null==r?void 0:r.referrer)?Wr(t):{})}update_referrer_info(){var t;this.register_once({$referrer:Jr(),$referring_domain:null!=r&&r.referrer&&(null==(t=Mr(r.referrer))?void 0:t.host)||Yr},void 0)}set_initial_person_info(){this.props[Ri]||this.props[Pi]||this.register_once({[Oi]:Kr(this.qt.mask_personal_data_properties,this.qt.custom_personal_data_properties)},void 0)}get_initial_props(){var t={};Ki([Pi,Ri],(e=>{var i=this.props[e];i&&Ki(i,(function(e,i){t[\"$initial_\"+I(i)]=e}))}));var e,i,r=this.props[Oi];if(r){var s=(e=Xr(r),i={},Ki(e,(function(t,e){i[\"$initial_\"+I(e)]=t})),i);Xi(t,s)}return t}safe_merge(t){return Ki(this.props,(function(e,i){i in t||(t[i]=e)})),t}update_config(t,e,i){if(this.Ir=this.Sr=t.cookie_expiration,this.set_disabled(t.disable_persistence||!!i),this.set_cross_subdomain(t.cross_subdomain_cookie),this.set_secure(t.secure_cookie),t.persistence!==e.persistence||!((t,e)=>{if(t.length!==e.length)return!1;var i=[...t].sort(),r=[...e].sort();return i.every(((t,e)=>t===r[e]))})(t.cookie_persisted_properties||[],e.cookie_persisted_properties||[])){var r=this.br(t),s=this.props;this.clear(),this.nr=r,this.props=s,this.save()}}set_disabled(t){this._r=t,this._r?this.remove():this.save()}set_cross_subdomain(t){t!==this.kr&&(this.kr=t,this.remove(),this.save())}set_secure(t){t!==this.Cr&&(this.Cr=t,this.remove(),this.save())}set_event_timer(t,e){var i=this.props[Ve]||{};i[t]=e,this.Tr(Ve,i),this.save()}remove_event_timer(t){var e=this.props[Ve]||{},i=e[t];return N(i)||(delete e[t],this.Tr(Ve,e),this.save()),i}get_property(t){return this.props[t]}set_property(t,e){this.Tr(t,e),this.save()}Tr(t,e){this.props[t]=e}Er(t){delete this.props[t]}}var is={Activation:\"events\",Cancellation:\"cancelEvents\"},rs={Button:\"button\",Tab:\"tab\",Selector:\"selector\"},ss={TopLeft:\"top_left\",TopRight:\"top_right\",TopCenter:\"top_center\",MiddleLeft:\"middle_left\",MiddleRight:\"middle_right\",MiddleCenter:\"middle_center\",Left:\"left\",Center:\"center\",Right:\"right\",NextToTrigger:\"next_to_trigger\"},ns={Top:\"top\",Left:\"left\",Right:\"right\",Bottom:\"bottom\"},os={Popover:\"popover\",API:\"api\",Widget:\"widget\",ExternalSurvey:\"external_survey\"},as={Open:\"open\",MultipleChoice:\"multiple_choice\",SingleChoice:\"single_choice\",Rating:\"rating\",Link:\"link\"},ls={NextQuestion:\"next_question\",End:\"end\",ResponseBased:\"response_based\",SpecificQuestion:\"specific_question\"},us={Once:\"once\",Recurring:\"recurring\",Always:\"always\"},hs={SHOWN:\"survey shown\",DISMISSED:\"survey dismissed\",SENT:\"survey sent\",ABANDONED:\"survey abandoned\"},ds={SURVEY_ID:\"$survey_id\",SURVEY_NAME:\"$survey_name\",SURVEY_RESPONSE:\"$survey_response\",SURVEY_ITERATION:\"$survey_iteration\",SURVEY_ITERATION_START_DATE:\"$survey_iteration_start_date\",SURVEY_PARTIALLY_COMPLETED:\"$survey_partially_completed\",SURVEY_SUBMISSION_ID:\"$survey_submission_id\",SURVEY_QUESTIONS:\"$survey_questions\",SURVEY_COMPLETED:\"$survey_completed\",PRODUCT_TOUR_ID:\"$product_tour_id\",SURVEY_LAST_SEEN_DATE:\"$survey_last_seen_date\",SURVEY_LANGUAGE:\"$survey_language\"},vs={Popover:\"popover\",Inline:\"inline\"},cs={backgroundColor:\"#ffffff\",textColor:\"#1d1f27\",buttonColor:\"#1d1f27\",borderRadius:8,buttonBorderRadius:6,borderColor:\"#e5e7eb\",fontFamily:\"system-ui\",boxShadow:\"0 4px 12px rgba(0, 0, 0, 0.15)\",showOverlay:!0,whiteLabel:!1,dismissOnClickOutside:!0,zIndex:2147483646},ps={SHOWN:\"product tour shown\",DISMISSED:\"product tour dismissed\",COMPLETED:\"product tour completed\",STEP_SHOWN:\"product tour step shown\",STEP_COMPLETED:\"product tour step completed\",BUTTON_CLICKED:\"product tour button clicked\",STEP_SELECTOR_FAILED:\"product tour step selector failed\",BANNER_CONTAINER_SELECTOR_FAILED:\"product tour banner container selector failed\",BANNER_ACTION_CLICKED:\"product tour banner action clicked\"},fs={TOUR_ID:\"$product_tour_id\",TOUR_NAME:\"$product_tour_name\",TOUR_ITERATION:\"$product_tour_iteration\",TOUR_RENDER_REASON:\"$product_tour_render_reason\",TOUR_STEP_ID:\"$product_tour_step_id\",TOUR_STEP_ORDER:\"$product_tour_step_order\",TOUR_STEP_TYPE:\"$product_tour_step_type\",TOUR_DISMISS_REASON:\"$product_tour_dismiss_reason\",TOUR_BUTTON_TEXT:\"$product_tour_button_text\",TOUR_BUTTON_ACTION:\"$product_tour_button_action\",TOUR_BUTTON_LINK:\"$product_tour_button_link\",TOUR_BUTTON_TOUR_ID:\"$product_tour_button_tour_id\",TOUR_STEPS_COUNT:\"$product_tour_steps_count\",TOUR_STEP_SELECTOR:\"$product_tour_step_selector\",TOUR_STEP_SELECTOR_FOUND:\"$product_tour_step_selector_found\",TOUR_STEP_ELEMENT_TAG:\"$product_tour_step_element_tag\",TOUR_STEP_ELEMENT_ID:\"$product_tour_step_element_id\",TOUR_STEP_ELEMENT_CLASSES:\"$product_tour_step_element_classes\",TOUR_STEP_ELEMENT_TEXT:\"$product_tour_step_element_text\",TOUR_ERROR:\"$product_tour_error\",TOUR_MATCHES_COUNT:\"$product_tour_matches_count\",TOUR_FAILURE_PHASE:\"$product_tour_failure_phase\",TOUR_WAITED_FOR_ELEMENT:\"$product_tour_waited_for_element\",TOUR_WAIT_DURATION_MS:\"$product_tour_wait_duration_ms\",TOUR_BANNER_SELECTOR:\"$product_tour_banner_selector\",TOUR_LINKED_SURVEY_ID:\"$product_tour_linked_survey_id\",USE_MANUAL_SELECTOR:\"$use_manual_selector\",INFERENCE_DATA_PRESENT:\"$inference_data_present\",TOUR_LAST_SEEN_DATE:\"$product_tour_last_seen_date\",TOUR_TYPE:\"$product_tour_type\"},_s=Ne(\"[RateLimiter]\");class gs{constructor(t){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=t=>{var e=t.text;if(e&&e.length)try{(JSON.parse(e).quota_limited||[]).forEach((t=>{_s.info((t||\"events\")+\" is quota limited.\"),this.serverLimits[t]=(new Date).getTime()+6e4}))}catch(t){return void _s.warn('could not rate limit - continuing. Error: \"'+(null==t?void 0:t.message)+'\"',{text:e})}},this.instance=t,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var t;return(null==(t=this.instance.config.rate_limiting)?void 0:t.events_per_second)||10}get captureEventsBurstLimit(){var t;return Math.max((null==(t=this.instance.config.rate_limiting)?void 0:t.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(t){var e,i,r;void 0===t&&(t=!1);var{captureEventsBurstLimit:s,captureEventsPerSecond:n}=this,o=(new Date).getTime(),a=null!==(e=null==(i=this.instance.persistence)?void 0:i.get_property(ki))&&void 0!==e?e:{tokens:s,last:o};a.tokens+=(o-a.last)/1e3*n,a.last=o,a.tokens>s&&(a.tokens=s);var l=1>a.tokens;return l||t||(a.tokens=Math.max(0,a.tokens-1)),!l||this.lastEventRateLimited||t||this.instance.capture(\"$$client_ingestion_warning\",{$$client_ingestion_warning_message:\"posthog-js client rate limited. Config is set to \"+n+\" events per second and \"+s+\" events burst limit.\"},{skip_client_rate_limiting:!0}),this.lastEventRateLimited=l,null==(r=this.instance.persistence)||r.set_property(ki,a),{isRateLimited:l,remainingTokens:a.tokens}}isServerRateLimited(t){var e=this.serverLimits[t||\"events\"]||!1;return!1!==e&&(new Date).getTime()<e}}var ms=Ne(\"[RemoteConfig]\");class bs{constructor(t){this._instance=t}get remoteConfig(){var t;return null==(t=h._POSTHOG_REMOTE_CONFIG)||null==(t=t[this._instance.config.token])?void 0:t.config}Mr(t){var e,i;null!=(e=h.__PosthogExtensions__)&&e.loadExternalDependency?null==(i=h.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this._instance,\"remote-config\",(()=>t(this.remoteConfig))):t()}Pr(t){this._instance._send_request({method:\"GET\",url:this._instance.requestRouter.endpointFor(\"assets\",\"/array/\"+this._instance.config.token+\"/config\"),callback(e){t(e.json)}})}load(){try{if(this.remoteConfig)return ms.info(\"Using preloaded remote config\",this.remoteConfig),this.Rr(this.remoteConfig),void this.Or();if(this._instance.Lr())return void ms.warn(\"Remote config is disabled. Falling back to local config.\");this.Mr((t=>{if(!t)return ms.info(\"No config found after loading remote JS config. Falling back to JSON.\"),void this.Pr((t=>{this.Rr(t),this.Or()}));this.Rr(t),this.Or()}))}catch(t){ms.error(\"Error loading remote config\",t)}}stop(){this.Fr&&(clearInterval(this.Fr),this.Fr=void 0)}refresh(){!this._instance.Lr()&&r&&\"hidden\"!==r.visibilityState&&this._instance.reloadFeatureFlags()}Or(){var t;if(!this.Fr){var e=null!==(t=this._instance.config.remote_config_refresh_interval_ms)&&void 0!==t?t:3e5;0!==e&&(this.Fr=setInterval((()=>{this.refresh()}),e))}}Rr(t){var e;t||ms.error(\"Failed to fetch remote config from PostHog.\"),this._instance.Rr(null!=t?t:{}),!1!==(null==t?void 0:t.hasFeatureFlags)&&(this._instance.config.advanced_disable_feature_flags_on_first_load||null==(e=this._instance.featureFlags)||e.ensureFlagsLoaded())}}var ys=[\"fatal\",\"error\",\"warning\",\"log\",\"info\",\"debug\"],ws={GZipJS:\"gzip-js\",Base64:\"base64\"},xs=Uint8Array,Es=Uint16Array,Ss=Uint32Array,$s=new xs([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ts=new xs([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),ks=new xs([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Rs=function(t,e){for(var i=new Es(31),r=0;31>r;++r)i[r]=e+=1<<t[r-1];var s=new Ss(i[30]);for(r=1;30>r;++r)for(var n=i[r];i[r+1]>n;++n)s[n]=n-i[r]<<5|r;return[i,s]},Ps=Rs($s,2),Os=Ps[1];Ps[0][28]=258,Os[258]=28;for(var Is=Rs(Ts,0)[1],Cs=new Es(32768),As=0;32768>As;++As){var Fs=(43690&As)>>>1|(21845&As)<<1;Cs[As]=((65280&(Fs=(61680&(Fs=(52428&Fs)>>>2|(13107&Fs)<<2))>>>4|(3855&Fs)<<4))>>>8|(255&Fs)<<8)>>>1}var Ms=function(t,e,i){for(var r=t.length,s=0,n=new Es(e);r>s;++s)++n[t[s]-1];var o,a=new Es(e);for(s=0;e>s;++s)a[s]=a[s-1]+n[s-1]<<1;if(i){o=new Es(1<<e);var l=15-e;for(s=0;r>s;++s)if(t[s])for(var u=s<<4|t[s],h=e-t[s],d=a[t[s]-1]++<<h,v=d|(1<<h)-1;v>=d;++d)o[Cs[d]>>>l]=u}else for(o=new Es(r),s=0;r>s;++s)o[s]=Cs[a[t[s]-1]++]>>>15-t[s];return o},Ds=new xs(288);for(As=0;144>As;++As)Ds[As]=8;for(As=144;256>As;++As)Ds[As]=9;for(As=256;280>As;++As)Ds[As]=7;for(As=280;288>As;++As)Ds[As]=8;var Us=new xs(32);for(As=0;32>As;++As)Us[As]=5;var Ls=Ms(Ds,9,0),Ns=Ms(Us,5,0),js=function(t){return(t/8>>0)+(7&t&&1)},zs=function(t,e,i){(null==i||i>t.length)&&(i=t.length);var r=new(t instanceof Es?Es:t instanceof Ss?Ss:xs)(i-e);return r.set(t.subarray(e,i)),r},Bs=function(t,e,i){var r=e/8>>0;t[r]|=i<<=7&e,t[r+1]|=i>>>8},Hs=function(t,e,i){var r=e/8>>0;t[r]|=i<<=7&e,t[r+1]|=i>>>8,t[r+2]|=i>>>16},qs=function(t,e){for(var i=[],r=0;t.length>r;++r)t[r]&&i.push({s:r,f:t[r]});var s=i.length,n=i.slice();if(!s)return[new xs(0),0];if(1==s){var o=new xs(i[0].s+1);return o[i[0].s]=1,[o,1]}i.sort((function(t,e){return t.f-e.f})),i.push({s:-1,f:25001});var a=i[0],l=i[1],u=0,h=1,d=2;for(i[0]={s:-1,f:a.f+l.f,l:a,r:l};h!=s-1;)a=i[i[d].f>i[u].f?u++:d++],l=i[u!=h&&i[d].f>i[u].f?u++:d++],i[h++]={s:-1,f:a.f+l.f,l:a,r:l};var v=n[0].s;for(r=1;s>r;++r)n[r].s>v&&(v=n[r].s);var c=new Es(v+1),p=Vs(i[h-1],c,0);if(p>e){r=0;var f=0,_=p-e,g=1<<_;for(n.sort((function(t,e){return c[e.s]-c[t.s]||t.f-e.f}));s>r;++r){var m=n[r].s;if(e>=c[m])break;f+=g-(1<<p-c[m]),c[m]=e}for(f>>>=_;f>0;){var b=n[r].s;e>c[b]?f-=1<<e-c[b]++-1:++r}for(;r>=0&&f;--r){var y=n[r].s;c[y]==e&&(--c[y],++f)}p=e}return[new xs(c),p]},Vs=function(t,e,i){return-1==t.s?Math.max(Vs(t.l,e,i+1),Vs(t.r,e,i+1)):e[t.s]=i},Ws=function(t){for(var e=t.length;e&&!t[--e];);for(var i=new Es(++e),r=0,s=t[0],n=1,o=function(t){i[r++]=t},a=1;e>=a;++a)if(t[a]==s&&a!=e)++n;else{if(!s&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(s),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(s);n=1,s=t[a]}return[i.subarray(0,r),e]},Gs=function(t,e){for(var i=0,r=0;e.length>r;++r)i+=t[r]*e[r];return i},Ys=function(t,e,i){var r=i.length,s=js(e+2);t[s]=255&r,t[s+1]=r>>>8,t[s+2]=255^t[s],t[s+3]=255^t[s+1];for(var n=0;r>n;++n)t[s+n+4]=i[n];return 8*(s+4+r)},Js=function(t,e,i,r,s,n,o,a,l,u,h){Bs(e,h++,i),++s[256];for(var d=qs(s,15),v=d[0],c=d[1],p=qs(n,15),f=p[0],_=p[1],g=Ws(v),m=g[0],b=g[1],y=Ws(f),w=y[0],x=y[1],E=new Es(19),S=0;m.length>S;++S)E[31&m[S]]++;for(S=0;w.length>S;++S)E[31&w[S]]++;for(var T=qs(E,7),k=T[0],R=T[1],P=19;P>4&&!k[ks[P-1]];--P);var O,I,C,A,F=u+5<<3,M=Gs(s,Ds)+Gs(n,Us)+o,D=Gs(s,v)+Gs(n,f)+o+14+3*P+Gs(E,k)+(2*E[16]+3*E[17]+7*E[18]);if(M>=F&&D>=F)return Ys(e,h,t.subarray(l,l+u));if(Bs(e,h,1+(M>D)),h+=2,M>D){O=Ms(v,c,0),I=v,C=Ms(f,_,0),A=f;var U=Ms(k,R,0);for(Bs(e,h,b-257),Bs(e,h+5,x-1),Bs(e,h+10,P-4),h+=14,S=0;P>S;++S)Bs(e,h+3*S,k[ks[S]]);h+=3*P;for(var L=[m,w],N=0;2>N;++N){var j=L[N];for(S=0;j.length>S;++S)Bs(e,h,U[z=31&j[S]]),h+=k[z],z>15&&(Bs(e,h,j[S]>>>5&127),h+=j[S]>>>12)}}else O=Ls,I=Ds,C=Ns,A=Us;for(S=0;a>S;++S)if(r[S]>255){var z;Hs(e,h,O[257+(z=r[S]>>>18&31)]),h+=I[z+257],z>7&&(Bs(e,h,r[S]>>>23&31),h+=$s[z]);var B=31&r[S];Hs(e,h,C[B]),h+=A[B],B>3&&(Hs(e,h,r[S]>>>5&8191),h+=Ts[B])}else Hs(e,h,O[r[S]]),h+=I[r[S]];return Hs(e,h,O[256]),h+I[256]},Ks=new Ss([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Xs=function(){for(var t=new Ss(256),e=0;256>e;++e){for(var i=e,r=9;--r;)i=(1&i&&3988292384)^i>>>1;t[e]=i}return t}(),Qs=function(t,e,i){for(;i;++e)t[e]=i,i>>>=8};function Zs(t,e){void 0===e&&(e={});var i=function(){var t=4294967295;return{p(e){for(var i=t,r=0;e.length>r;++r)i=Xs[255&i^e[r]]^i>>>8;t=i},d(){return 4294967295^t}}}(),r=t.length;i.p(t);var s,n,o,a,l,u=(a=10+((s=e).filename&&s.filename.length+1||0),l=8,function(t,e,i,r,s,n){var o=t.length,a=new xs(r+o+5*(1+Math.floor(o/7e3))+s),l=a.subarray(r,a.length-s),u=0;if(!e||8>o)for(var h=0;o>=h;h+=65535){var d=h+65535;o>d?u=Ys(l,u,t.subarray(h,d)):(l[h]=!0,u=Ys(l,u,t.subarray(h,o)))}else{for(var v=Ks[e-1],c=v>>>13,p=8191&v,f=(1<<i)-1,_=new Es(32768),g=new Es(f+1),m=Math.ceil(i/3),b=2*m,y=function(e){return(t[e]^t[e+1]<<m^t[e+2]<<b)&f},w=new Ss(25e3),x=new Es(288),E=new Es(32),S=0,T=0,k=(h=0,0),R=0,P=0;o>h;++h){var O=y(h),I=32767&h,C=g[O];if(_[I]=C,g[O]=I,h>=R){var A=o-h;if((S>7e3||k>24576)&&A>423){u=Js(t,l,0,w,x,E,T,k,P,h-P,u),k=S=T=0,P=h;for(var F=0;286>F;++F)x[F]=0;for(F=0;30>F;++F)E[F]=0}var M=2,D=0,U=p,L=I-C&32767;if(A>2&&O==y(h-L))for(var N=Math.min(c,A)-1,j=Math.min(32767,h),z=Math.min(258,A);j>=L&&--U&&I!=C;){if(t[h+M]==t[h+M-L]){for(var B=0;z>B&&t[h+B]==t[h+B-L];++B);if(B>M){if(M=B,D=L,B>N)break;var H=Math.min(L,B-2),q=0;for(F=0;H>F;++F){var V=h-L+F+32768&32767,W=V-_[V]+32768&32767;W>q&&(q=W,C=V)}}}L+=(I=C)-(C=_[I])+32768&32767}if(D){w[k++]=268435456|Os[M]<<18|Is[D];var G=31&Os[M],Y=31&Is[D];T+=$s[G]+Ts[Y],++x[257+G],++E[Y],R=h+M,++S}else w[k++]=t[h],++x[t[h]]}}u=Js(t,l,!0,w,x,E,T,k,P,h-P,u)}return zs(a,0,r+js(u)+s)}(n=t,null==(o=e).level?6:o.level,null==o.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+o.mem,a,l)),h=u.length;return function(t,e){var i=e.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=2>e.level?4:9==e.level?2:0,t[9]=3,0!=e.mtime&&Qs(t,4,Math.floor(new Date(e.mtime||Date.now())/1e3)),i){t[3]=8;for(var r=0;i.length>=r;++r)t[r+10]=i.charCodeAt(r)}}(u,e),Qs(u,h-8,i.d()),Qs(u,h-4,r),u}var tn=!!o||!!n,en=\"text/plain\",rn=!1,sn=(t,e)=>{var[i,r]=t.split(\"#\"),[s,n]=i.split(\"?\");if(!n)return t;var o=n.split(\"&\").filter((t=>t.split(\"=\")[0]!==e)).join(\"&\");return s+(o?\"?\"+o:\"\")+(r?\"#\"+r:\"\")},nn=function(t,e,i){var r;void 0===i&&(i=!0);var[s,n]=t.split(\"?\"),o=f({},e),a=null!==(r=null==n?void 0:n.split(\"&\").map((t=>{var e,[r,s]=t.split(\"=\"),n=i&&null!==(e=o[r])&&void 0!==e?e:s;return delete o[r],r+\"=\"+n})))&&void 0!==r?r:[],l=function(t,e){var i,r;void 0===e&&(e=\"&\");var s=[];return Ki(t,(function(t,e){N(t)||N(e)||\"undefined\"===e||(i=encodeURIComponent((t=>t instanceof File)(t)?t.name:t.toString()),r=encodeURIComponent(e),s[s.length]=r+\"=\"+i)})),s.join(e)}(o);return l&&a.push(l),s+\"?\"+a.join(\"&\")},on=(t,e)=>JSON.stringify(t,((t,e)=>\"bigint\"==typeof e?e.toString():e),e),an=t=>{if(t.tr)return t.tr;var{data:e,compression:i}=t;if(e){if(i===ws.GZipJS){var r=Zs(function(t,e){var i=t.length;if(\"undefined\"!=typeof TextEncoder)return(new TextEncoder).encode(t);for(var r=new xs(t.length+(t.length>>>1)),s=0,n=function(t){r[s++]=t},o=0;i>o;++o){if(s+5>r.length){var a=new xs(s+8+(i-o<<1));a.set(r),r=a}var l=t.charCodeAt(o);128>l?n(l):2048>l?(n(192|l>>>6),n(128|63&l)):l>55295&&57344>l?(n(240|(l=65536+(1047552&l)|1023&t.charCodeAt(++o))>>>18),n(128|l>>>12&63),n(128|l>>>6&63),n(128|63&l)):(n(224|l>>>12),n(128|l>>>6&63),n(128|63&l))}return zs(r,0,s)}(on(e)),{mtime:0});return{contentType:en,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(i===ws.Base64){var s=function(t){return t?btoa(encodeURIComponent(t).replace(/%([0-9A-F]{2})/g,((t,e)=>String.fromCharCode(parseInt(e,16))))):t}(on(e)),n=(t=>\"data=\"+encodeURIComponent(\"string\"==typeof t?t:on(t)))(s);return{contentType:\"application/x-www-form-urlencoded\",body:n,estimatedSize:new Blob([n]).size}}var o=on(e);return{contentType:\"application/json\",body:o,estimatedSize:new Blob([o]).size}}},ln=t=>{var e,i,r,s=an(t);return!s||(i=t.compression,r=Dr(t.url,\"compression\"),i!==m.GZipJS&&r!==m.GZipJS&&\"gzip\"!==r)||((e=s.body)instanceof ArrayBuffer?w(new Uint8Array(e)):ArrayBuffer.isView(e)&&w(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)))?{url:t.url,encodedBody:s}:(rn=!0,{url:sn(t.url,\"compression\"),encodedBody:an(f({},t,{compression:void 0,tr:void 0}))})},un=function(){var t=p((function*(t){var e=on(t.data),i=yield function(t,e,i){return T.apply(this,arguments)}(e,v.DEBUG,{rethrow:!0});if(!i)return t;var r=yield i.arrayBuffer();return f({},t,{tr:{contentType:en,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}}(),hn=(t,e)=>nn(t,{_:(new Date).getTime().toString(),ver:v.JS_SDK_VERSION,compression:e}),dn=[];n&&dn.push({transport:\"fetch\",method(t){var e,{url:i,encodedBody:r}=ln(t),{contentType:s,body:o,estimatedSize:l}=null!=r?r:{},u=new Headers;Ki(t.headers,(function(t,e){u.append(e,t)})),s&&u.append(\"Content-Type\",s);var h=null;if(a){var d=new a;h={signal:d.signal,timeout:setTimeout((()=>d.abort()),t.timeout)}}n(i,f({method:(null==t?void 0:t.method)||\"GET\",headers:u,keepalive:\"POST\"===t.method&&52428.8>(l||0),body:o,signal:null==(e=h)?void 0:e.signal},t.fetchOptions)).then((e=>e.text().then((i=>{var r={statusCode:e.status,text:i};if(200===e.status)try{r.json=JSON.parse(i)}catch(t){Le.error(t)}null==t.callback||t.callback(r)})))).catch((e=>{Le.error(e),null==t.callback||t.callback({statusCode:0,error:e})})).finally((()=>h?clearTimeout(h.timeout):null))}}),o&&dn.push({transport:\"XHR\",method(t){var e=new o,{url:i,encodedBody:r}=ln(t);e.open(t.method||\"GET\",i,!0);var{contentType:s,body:n}=null!=r?r:{};Ki(t.headers,(function(t,i){e.setRequestHeader(i,t)})),s&&e.setRequestHeader(\"Content-Type\",s),t.timeout&&(e.timeout=t.timeout),t.disableXHRCredentials||(e.withCredentials=!0),e.onreadystatechange=()=>{if(4===e.readyState){var i={statusCode:e.status,text:e.responseText};if(200===e.status)try{i.json=JSON.parse(e.responseText)}catch(t){}null==t.callback||t.callback(i)}},e.send(n)}}),null!=i&&i.sendBeacon&&dn.push({transport:\"sendBeacon\",method(t){try{var{url:e,encodedBody:r}=ln(t),s=nn(e,{beacon:\"1\"}),{contentType:n,body:o}=null!=r?r:{};if(!o)return;var a=o instanceof Blob?o:new Blob([o],{type:n});i.sendBeacon(s,a)}catch(t){}}});var vn=3e3;class cn{constructor(t,e){this.Ar=!0,this.Nr=[],this.$r=et((null==e?void 0:e.flush_interval_ms)||vn,250,5e3,Le.createLogger(\"flush interval\"),vn),this.Dr=t}enqueue(t){this.Nr.push(t),this.qr||this.jr()}unload(){this.Hr();var t=this.Nr.length>0?this.Ur():{},e=Object.values(t);[...e.filter((t=>0===t.url.indexOf(\"/e\"))),...e.filter((t=>0!==t.url.indexOf(\"/e\")))].map((t=>{this.Dr(f({},t,{transport:\"sendBeacon\"}))}))}enable(){this.Ar=!1,this.jr()}jr(){var t=this;this.Ar||(this.qr=setTimeout((()=>{if(this.Hr(),this.Nr.length>0){var e=this.Ur(),i=function(){var i=e[r],s=(new Date).getTime();i.data&&M(i.data)&&Ki(i.data,(t=>{t.offset=Math.abs(t.timestamp-s),delete t.timestamp})),t.Dr(i)};for(var r in e)i()}}),this.$r))}Hr(){clearTimeout(this.qr),this.qr=void 0}Ur(){var t={};return Ki(this.Nr,(e=>{var i,r=e,s=(r?r.batchKey:null)||r.url;N(t[s])&&(t[s]=f({},r,{data:[]})),null==(i=t[s].data)||i.push(r.data)})),this.Nr=[],t}}var pn=[\"retriesPerformedSoFar\"];class fn{constructor(e){this.Br=!1,this.zr=3e3,this.Nr=[],this._instance=e,this.Nr=[],this.Vr=!0,!N(t)&&\"onLine\"in t.navigator&&(this.Vr=t.navigator.onLine,this.Wr=()=>{this.Vr=!0,this.Zr()},this.Gr=()=>{this.Vr=!1},sr(t,\"online\",this.Wr),sr(t,\"offline\",this.Gr))}get length(){return this.Nr.length}retriableRequest(t){var{retriesPerformedSoFar:e}=t,i=_(t,pn);V(e)&&(i.url=nn(i.url,{retry_count:e})),this._instance._send_request(f({},i,{callback:t=>{200===t.statusCode||t.statusCode>=400&&500>t.statusCode||(null!=e?e:0)>=10?null==i.callback||i.callback(t):this.Qr(f({retriesPerformedSoFar:e},i))}}))}Qr(t){var e=t.retriesPerformedSoFar||0;t.retriesPerformedSoFar=e+1;var i=function(t){var e=3e3*Math.pow(2,t),i=e/2,r=Math.min(18e5,e),s=Math.random()-.5;return Math.ceil(r+s*(r-i))}(e),r=Date.now()+i;this.Nr.push({retryAt:r,requestOptions:t});var s=\"Enqueued failed request for retry in \"+i;navigator.onLine||(s+=\" (Browser is offline)\"),Le.warn(s),this.Br||(this.Br=!0,this.Jr())}Jr(){if(this.Kr&&clearTimeout(this.Kr),0===this.Nr.length)return this.Br=!1,void(this.Kr=void 0);this.Kr=setTimeout((()=>{this.Vr&&this.Nr.length>0&&this.Zr(),this.Jr()}),this.zr)}Zr(){var t=Date.now(),e=[],i=this.Nr.filter((i=>t>i.retryAt||(e.push(i),!1)));if(this.Nr=e,i.length>0)for(var{requestOptions:r}of i)this.retriableRequest(r)}unload(){for(var{requestOptions:e}of(this.Kr&&(clearTimeout(this.Kr),this.Kr=void 0),this.Br=!1,N(t)||(this.Wr&&(t.removeEventListener(\"online\",this.Wr),this.Wr=void 0),this.Gr&&(t.removeEventListener(\"offline\",this.Gr),this.Gr=void 0)),this.Nr))try{this._instance._send_request(f({},e,{transport:\"sendBeacon\"}))}catch(t){Le.error(t)}this.Nr=[]}}class _n{constructor(t){this.Yr=()=>{var t,e,i,r;this.Xr||(this.Xr={});var s=this.scrollElement(),n=this.scrollY(),o=s?Math.max(0,s.scrollHeight-s.clientHeight):0,a=n+((null==s?void 0:s.clientHeight)||0),l=(null==s?void 0:s.scrollHeight)||0;this.Xr.lastScrollY=Math.ceil(n),this.Xr.maxScrollY=Math.max(n,null!==(t=this.Xr.maxScrollY)&&void 0!==t?t:0),this.Xr.maxScrollHeight=Math.max(o,null!==(e=this.Xr.maxScrollHeight)&&void 0!==e?e:0),this.Xr.lastContentY=a,this.Xr.maxContentY=Math.max(a,null!==(i=this.Xr.maxContentY)&&void 0!==i?i:0),this.Xr.maxContentHeight=Math.max(l,null!==(r=this.Xr.maxContentHeight)&&void 0!==r?r:0)},this._instance=t}get ei(){return this._instance.config.scroll_root_selector}getContext(){return this.Xr}resetContext(){var t=this.Xr;return setTimeout(this.Yr,0),t}startMeasuringScrollPosition(){sr(t,\"scroll\",this.Yr,{capture:!0}),sr(t,\"scrollend\",this.Yr,{capture:!0}),sr(t,\"resize\",this.Yr)}scrollElement(){if(!this.ei)return null==t?void 0:t.document.documentElement;var e=M(this.ei)?this.ei:[this.ei];for(var i of e){var r=null==t?void 0:t.document.querySelector(i);if(r)return r}}scrollY(){if(this.ei){var e=this.scrollElement();return e&&e.scrollTop||0}return t&&(t.scrollY||t.pageYOffset||t.document.documentElement.scrollTop)||0}scrollX(){if(this.ei){var e=this.scrollElement();return e&&e.scrollLeft||0}return t&&(t.scrollX||t.pageXOffset||t.document.documentElement.scrollLeft)||0}}var gn=t=>Kr(null==t?void 0:t.config.mask_personal_data_properties,null==t?void 0:t.config.custom_personal_data_properties);class mn{constructor(t,e,i,r){this.ti=t=>{var e=this.ri();if(!e||e.sessionId!==t){var i={sessionId:t,props:this.ii(this._instance)};this.ni.register({[Ti]:i})}},this._instance=t,this.si=e,this.ni=i,this.ii=r||gn,this.si.onSessionId(this.ti)}ri(){return this.ni.props[Ti]}getSetOnceProps(){var t,e=null==(t=this.ri())?void 0:t.props;return e?\"r\"in e?Xr(e):{$referring_domain:e.referringDomain,$pathname:e.initialPathName,utm_source:e.utm_source,utm_campaign:e.utm_campaign,utm_medium:e.utm_medium,utm_content:e.utm_content,utm_term:e.utm_term}:{}}getSessionProps(){var t={};return Ki(er(this.getSetOnceProps()),((e,i)=>{\"$current_url\"===i&&(i=\"url\"),t[\"$session_entry_\"+I(i)]=e})),t}}class bn{constructor(){this.oi={}}on(t,e){return this.oi[t]||(this.oi[t]=[]),this.oi[t].push(e),()=>{this.oi[t]=this.oi[t].filter((t=>t!==e))}}emit(t,e){for(var i of this.oi[t]||[])i(e);for(var r of this.oi[\"*\"]||[])r(t,e)}}var yn=Ne(\"[SessionId]\");class wn{on(t,e){return this.ai.on(t,e)}constructor(t,e,i){var r;if(this.ui=[],this.li=void 0,this.ai=new bn,this.hi=(t,e)=>!(!V(t)||!V(e))&&Math.abs(t-e)>this.sessionTimeoutMs,!t.persistence)throw new Error(\"SessionIdManager requires a PostHogPersistence instance\");if(t.config.cookieless_mode===Ni)throw new Error('SessionIdManager cannot be used with cookieless_mode=\"always\"');this.qt=t.config,this.ni=t.persistence,this.ci=void 0,this.di=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.vi=e||dr,this.fi=i||dr;var s=this.qt.persistence_name||this.qt.token;if(this._sessionTimeoutMs=1e3*et(this.qt.session_idle_timeout_seconds||1800,60,36e3,yn.createLogger(\"session_idle_timeout_seconds\"),1800),t.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.pi(),this.gi=\"ph_\"+s+\"_window_id\",this.mi=\"ph_\"+s+\"_primary_window_exists\",this.yi()){var n=xr.F(this.gi),o=xr.F(this.mi);n&&!o?this.ci=n:xr.q(this.gi),xr.N(this.mi,!0)}if(null!=(r=this.qt.bootstrap)&&r.sessionID)try{var a=(t=>{var e=this.qt.bootstrap.sessionID.replace(/-/g,\"\");if(32!==e.length)throw new Error(\"Not a valid UUID\");if(\"7\"!==e[12])throw new Error(\"Not a UUIDv7\");return parseInt(e.substring(0,12),16)})();this.bi(this.qt.bootstrap.sessionID,(new Date).getTime(),a)}catch(t){yn.error(\"Invalid sessionID in bootstrap\",t)}this.wi()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(t){return N(this.ui)&&(this.ui=[]),this.ui.push(t),this.di&&t(this.di,this.ci),()=>{this.ui=this.ui.filter((e=>e!==t))}}yi(){return\"memory\"!==this.qt.persistence&&!this.ni._r&&xr.R()}xi(t){t!==this.ci&&(this.ci=t,this.yi()&&xr.N(this.gi,t))}Si(){return this.ci?this.ci:this.yi()?xr.F(this.gi):null}bi(t,e,i){t===this.di&&e===this._sessionActivityTimestamp&&i===this._sessionStartTimestamp||(this._sessionStartTimestamp=i,this._sessionActivityTimestamp=e,this.di=t,this.ni.register({[oi]:[e,t,i]}))}ki(){var t=this.ni.props[oi];return M(t)&&2===t.length&&t.push(t[0]),t||[0,null,0]}resetSessionId(){this.bi(null,null,null)}destroy(){clearTimeout(this.Ci),this.Ci=void 0,this.li&&t&&(t.removeEventListener(qi,this.li,{capture:!1}),this.li=void 0),this.ui=[]}wi(){this.li=()=>{this.yi()&&xr.q(this.mi)},sr(t,qi,this.li,{capture:!1})}checkAndGetSessionAndWindowId(t,e){if(void 0===t&&(t=!1),void 0===e&&(e=null),this.qt.cookieless_mode===Ni)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode=\"always\"');var i=e||(new Date).getTime(),[r,s,n]=this.ki(),o=this.Si(),a=V(n)&&Math.abs(i-n)>864e5,l=!1,u=!s,h=!u&&!t&&this.hi(i,r);u||h||a?(s=this.vi(),o=this.fi(),yn.info(\"new session ID generated\",{sessionId:s,windowId:o,changeReason:{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}}),n=i,l=!0):o||(o=this.fi(),l=!0);var d=V(r)&&t&&!a?r:i,v=V(n)?n:(new Date).getTime();return this.xi(o),this.bi(s,d,v),t||this.pi(),l&&this.ui.forEach((t=>t(s,o,l?{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}:void 0))),{sessionId:s,windowId:o,sessionStartTimestamp:v,changeReason:l?{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}:void 0,lastActivityTimestamp:r}}pi(){clearTimeout(this.Ci),this.Ci=setTimeout((()=>{var[t]=this.ki();if(this.hi((new Date).getTime(),t)){var e=this.di;this.resetSessionId(),this.ai.emit(\"forcedIdleReset\",{idleSessionId:e})}}),1.1*this.sessionTimeoutMs)}}var xn=function(t,e){if(!t)return!1;var i=t.userAgent;if(i&&R(i,e))return!0;try{var r=null==t?void 0:t.userAgentData;if(null!=r&&r.brands&&r.brands.some((t=>R(null==t?void 0:t.brand,e))))return!0}catch(t){}return!!t.webdriver},En=function(t,e){if(!function(t){try{new RegExp(t)}catch(t){return!1}return!0}(e))return!1;try{return new RegExp(e).test(t)}catch(t){return!1}};function Sn(t,e,i){return on({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:i})}var $n={exact:(t,e)=>e.some((e=>t.some((t=>e===t)))),is_not:(t,e)=>e.every((e=>t.every((t=>e!==t)))),regex:(t,e)=>e.some((e=>t.some((t=>En(e,t))))),not_regex:(t,e)=>e.every((e=>t.every((t=>!En(e,t))))),icontains:(t,e)=>e.map(Tn).some((e=>t.map(Tn).some((t=>e.includes(t))))),not_icontains:(t,e)=>e.map(Tn).every((e=>t.map(Tn).every((t=>!e.includes(t))))),gt:(t,e)=>e.some((e=>{var i=parseFloat(e);return!isNaN(i)&&t.some((t=>i>parseFloat(t)))})),lt:(t,e)=>e.some((e=>{var i=parseFloat(e);return!isNaN(i)&&t.some((t=>i<parseFloat(t)))}))},Tn=t=>t.toLowerCase();function kn(t,e){return!t||Object.entries(t).every((t=>{var[i,r]=t,s=null==e?void 0:e[i];if(N(s)||B(s))return!1;var n=[String(s)],o=$n[r.operator];return!!o&&o(r.values,n)}))}var Rn=\"custom\",Pn=\"i.posthog.com\",On=/^\\/static\\//;class In{constructor(t){this.Ii={},this.instance=t}get apiHost(){var t=this.instance.config.api_host.trim().replace(/\\/$/,\"\");return\"https://app.posthog.com\"===t?\"https://us.i.posthog.com\":t}get flagsApiHost(){var t=this.instance.config.flags_api_host;return t?t.trim().replace(/\\/$/,\"\"):this.apiHost}get uiHost(){var t,e=null==(t=this.instance.config.ui_host)?void 0:t.replace(/\\/$/,\"\");return e||(e=this.apiHost.replace(\".\"+Pn,\".posthog.com\")),\"https://app.posthog.com\"===e?\"https://us.posthog.com\":e}get region(){return this.Ii[this.apiHost]||(this.Ii[this.apiHost]=/https:\\/\\/(app|us|us-assets)(\\.i)?\\.posthog\\.com/i.test(this.apiHost)?\"us\":/https:\\/\\/(eu|eu-assets)(\\.i)?\\.posthog\\.com/i.test(this.apiHost)?\"eu\":Rn),this.Ii[this.apiHost]}Ti(t){var e=this.instance.config.__preview_external_dependency_versioned_paths;if(\"string\"==typeof e&&On.test(t))return e.trim().replace(/\\/$/,\"\")||void 0}endpointFor(t,e){if(void 0===e&&(e=\"\"),e&&(e=\"/\"===e[0]?e:\"/\"+e),\"ui\"===t)return this.uiHost+e;if(\"flags\"===t)return this.flagsApiHost+e;if(\"assets\"===t){var i=this.Ti(e);if(i)return\"\"+i+e}if(this.region===Rn)return this.apiHost+e;var r=Pn+e;switch(t){case\"assets\":return\"https://\"+this.region+\"-assets.\"+r;case\"api\":return\"https://\"+this.region+\".\"+r}}}var Cn=Ne(\"[Surveys]\"),An=\"seenSurvey_\",Fn=[os.Popover,os.Widget,os.API],Mn={ignoreConditions:!1,ignoreDelay:!1,displayType:vs.Popover},Dn=Ne(\"[PostHog ExternalIntegrations]\"),Un={intercom:\"intercom-integration\",crispChat:\"crisp-chat-integration\"};class Ln{constructor(t){this._instance=t}lr(t,e){var i;null==(i=h.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this._instance,t,(t=>{if(t)return Dn.error(\"failed to load script\",t);e()}))}startIfEnabledOrStop(){var t=this,e=function(e){var i,s,n;!r||null!=(i=h.__PosthogExtensions__)&&null!=(i=i.integrations)&&i[e]||t.lr(Un[e],(()=>{var i;null==(i=h.__PosthogExtensions__)||null==(i=i.integrations)||null==(i=i[e])||i.start(t._instance)})),!r&&null!=(s=h.__PosthogExtensions__)&&null!=(s=s.integrations)&&s[e]&&(null==(n=h.__PosthogExtensions__)||null==(n=n.integrations)||null==(n=n[e])||n.stop())};for(var[i,r]of Object.entries(null!==(s=this._instance.config.integrations)&&void 0!==s?s:{})){var s;e(i)}}}var Nn,jn={},zn=0,Bn=()=>{},Hn='Consent opt in/out is not valid with cookieless_mode=\"always\" and will be ignored',qn=\"Surveys module not available\",Vn=\"sanitize_properties is deprecated. Use before_send instead\",Wn=\"Invalid value for property_denylist config: \",Gn=\"posthog\",Yn=!tn&&-1===(null==u?void 0:u.indexOf(\"MSIE\"))&&-1===(null==u?void 0:u.indexOf(\"Mozilla\")),Jn=e=>{var i;return f({api_host:\"https://us.i.posthog.com\",flags_api_host:null,ui_host:null,token:\"\",autocapture:!0,cross_subdomain_cookie:rr(null==r?void 0:r.location),persistence:\"localStorage+cookie\",persistence_name:\"\",cookie_persisted_properties:[],loaded:Bn,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:\"if_capture_pageview\",defaults:null!=e?e:\"unset\",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,debug:s&&j(null==s?void 0:s.search)&&-1!==s.search.indexOf(\"__posthog_debug=true\")||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disable_external_dependency_loading:!1,enable_recording_console_log:void 0,secure_cookie:\"https:\"===(null==t||null==(i=t.location)?void 0:i.protocol),ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:\"localStorage\",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(t){Le.error(\"Bad HTTP status: \"+t.statusCode+\" \"+t.text)},get_device_id:t=>t,capture_performance:void 0,name:\"posthog\",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:Bi,before_send:void 0,request_queue_config:{flush_interval_ms:vn},error_tracking:{},_onCapture:Bn,__preview_eager_load_replay:!1},(t=>({rageclick:!t||\"2025-11-30\">t||{content_ignorelist:!0},capture_pageview:!t||\"2025-05-24\">t||\"history_change\",session_recording:t&&t>=\"2025-11-30\"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:t&&t>=\"2026-01-30\"?\"head\":\"body\",internal_or_test_user_hostname:t&&t>=\"2026-01-30\"?/^(localhost|127\\.0\\.0\\.1)$/:void 0}))(e))},Kn=[[\"process_person\",\"person_profiles\"],[\"xhr_headers\",\"request_headers\"],[\"cookie_name\",\"persistence_name\"],[\"disable_cookie\",\"disable_persistence\"],[\"store_google\",\"save_campaign_params\"],[\"verbose\",\"debug\"]],Xn=t=>{var e={};for(var[i,r]of Kn)N(t[i])||(e[r]=t[i]);var s=Xi({},e,t);return M(t.property_blacklist)&&(N(t.property_denylist)?s.property_denylist=t.property_blacklist:M(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:Le.error(Wn+t.property_denylist)),s};class Qn{constructor(){this.__forceAllowLocalhost=!1}get Ei(){return this.__forceAllowLocalhost}set Ei(t){Le.error(\"WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`\"),this.__forceAllowLocalhost=t}}class Zn{Mi(t,e){if(t){var i=this.Pi.indexOf(t);-1!==i&&this.Pi.splice(i,1)}return this.Pi.push(e),null==e.initialize||e.initialize(),e}Ri(){return this.config.cookieless_mode===Ni||this.config.cookieless_mode===Li&&this.consent.isRejected()}get decideEndpointWasHit(){var t,e;return null!==(t=null==(e=this.featureFlags)?void 0:e.hasLoadedFlags)&&void 0!==t&&t}get flagsEndpointWasHit(){var t,e;return null!==(t=null==(e=this.featureFlags)?void 0:e.hasLoadedFlags)&&void 0!==t&&t}constructor(){var t;this.webPerformance=new Qn,this.Oi=!1,this.version=v.LIB_VERSION,this.Li=new bn,this.Pi=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Jn(),this.SentryIntegration=Ir,this.sentryIntegration=t=>function(t,e){var i=Or(t,e);return{name:Pr,processEvent:t=>i(t)}}(this,t),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint=\"/e/\",this.Fi=!1,this.Ai=null,this.Ni=null,this.$i=null,this.scrollManager=new _n(this),this.pageViewManager=new Cr(this),this.rateLimiter=new gs(this),this.requestRouter=new In(this),this.consent=new Er(this),this.externalIntegrations=new Ln(this);var e=null!==(t=Zn.__defaultExtensionClasses)&&void 0!==t?t:{};this.featureFlags=e.featureFlags&&new e.featureFlags(this),this.toolbar=e.toolbar&&new e.toolbar(this),this.surveys=e.surveys&&new e.surveys(this),this.conversations=e.conversations&&new e.conversations(this),this.logs=e.logs&&new e.logs(this),this.experiments=e.experiments&&new e.experiments(this),this.exceptions=e.exceptions&&new e.exceptions(this),this.people={set:(t,e,i)=>{var r=j(t)?{[t]:e}:t;this.setPersonProperties(r),null==i||i({})},set_once:(t,e,i)=>{var r=j(t)?{[t]:e}:t;this.setPersonProperties(void 0,r),null==i||i({})}},this.on(\"eventCaptured\",(t=>Le.info('send \"'+(null==t?void 0:t.event)+'\"',t)))}init(t,e,i){if(i&&i!==Gn){var r,s=null!==(r=jn[i])&&void 0!==r?r:new Zn;return s._init(t,e,i),jn[i]=s,jn[Gn][i]=s,s}return this._init(t,e,i)}_init(e,i,r){var s,n;if(void 0===i&&(i={}),N(e)||z(e))return Le.critical(\"PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()\"),this;if(this.__loaded)return console.warn(\"[PostHog.js]\",\"You have already initialized PostHog! Re-initializing is a no-op\"),this;this.__loaded=!0,this.config={},i.debug=this.Di(i.debug),this.qi=i,this.ji=[],i.person_profiles?this.Ni=i.person_profiles:i.process_person&&(this.Ni=i.process_person),this.set_config(Xi({},Jn(i.defaults),Xn(i),{name:r,token:e})),this.config.on_xhr_error&&Le.error(\"on_xhr_error is deprecated. Use on_request_error instead\"),this.compression=i.disable_compression?void 0:ws.GZipJS;var o=this.Hi();this.persistence=new es(this.config,o),this.sessionPersistence=\"sessionStorage\"===this.config.persistence||\"memory\"===this.config.persistence?this.persistence:new es(f({},this.config,{persistence:\"sessionStorage\"}),o);var a=f({},this.persistence.props),l=f({},this.sessionPersistence.props);this.register({$initialization_time:(new Date).toISOString()}),this.Ui=new cn((t=>this.Bi(t)),this.config.request_queue_config),this.zi=new fn(this),this.__request_queue=[];var u=this.Ri();if(u||(this.sessionManager=new wn(this),this.sessionPropsManager=new mn(this,this.sessionManager,this.persistence)),this.config.__preview_deferred_init_extensions?(Le.info(\"Deferring extension initialization to improve startup performance\"),setTimeout((()=>{this.Vi(u)}),0)):(Le.info(\"Initializing extensions synchronously\"),this.Vi(u)),v.DEBUG=v.DEBUG||this.config.debug,v.DEBUG&&Le.info(\"Starting in debug mode\",{this:this,config:i,thisC:f({},this.config),p:a,s:l}),!this.config.identity_distinct_id||null!=(s=i.bootstrap)&&s.distinctID||(i.bootstrap=f({},i.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),void 0!==(null==(n=i.bootstrap)?void 0:n.distinctID)){var h=i.bootstrap.distinctID,d=this.get_distinct_id(),c=this.persistence.get_property($i);if(i.bootstrap.isIdentifiedID&&null!=d&&d!==h&&c===ji)this.identify(h);else if(i.bootstrap.isIdentifiedID&&null!=d&&d!==h&&c===zi)Le.warn(\"Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.\");else{var p=this.config.get_device_id(dr()),_=i.bootstrap.isIdentifiedID?p:h;this.persistence.set_property($i,i.bootstrap.isIdentifiedID?zi:ji),this.register({distinct_id:h,$device_id:_})}}if(u)this.register_once({distinct_id:Ai,$device_id:null},\"\");else if(!this.get_distinct_id()){var g=this.config.get_device_id(dr());this.register_once({distinct_id:g,$device_id:g},\"\"),this.persistence.set_property($i,ji)}return sr(t,\"onpagehide\"in self?\"pagehide\":\"unload\",this._handle_unload.bind(this),{passive:!1}),i.segment?function(t,e){var i=t.config.segment;if(!i)return e();!function(t,e){var i=t.config.segment;if(!i)return e();var r=i=>{var r=()=>i.anonymousId()||dr();t.config.get_device_id=r,i.id()&&(t.register({distinct_id:i.id(),$device_id:r()}),t.persistence.set_property($i,zi)),e()},s=i.user();\"then\"in s&&D(s.then)?s.then(r):r(s)}(t,(()=>{i.register((t=>{Promise&&Promise.resolve||Rr.warn(\"This browser does not have Promise support, and can not use the segment integration\");var e=(e,i)=>{if(!i)return e;e.event.userId||e.event.anonymousId===t.get_distinct_id()||(Rr.info(\"No userId set, resetting PostHog\"),t.reset()),e.event.userId&&e.event.userId!==t.get_distinct_id()&&(Rr.info(\"UserId set, identifying with PostHog\"),t.identify(e.event.userId));var r=t.calculateEventProperties(i,e.event.properties);return e.event.properties=Object.assign({},r,e.event.properties),e};return{name:\"PostHog JS\",type:\"enrichment\",version:\"1.0.0\",isLoaded:()=>!0,load:()=>Promise.resolve(),track:t=>e(t,t.event.event),page:t=>e(t,Vi),identify:t=>e(t,Gi),screen:t=>e(t,\"$screen\")}})(t)).then((()=>{e()}))}))}(this,(()=>this.Wi())):this.Wi(),D(this.config._onCapture)&&this.config._onCapture!==Bn&&(Le.warn(\"onCapture is deprecated. Please use `before_send` instead\"),this.on(\"eventCaptured\",(t=>this.config._onCapture(t.event,t)))),this.config.ip&&Le.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or \"Discard IP data\" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this}Vi(t){var e,i,r,s,n,o,a,l=performance.now(),u=f({},Zn.__defaultExtensionClasses,this.config.__extensionClasses),h=[];u.featureFlags&&this.Pi.push(this.featureFlags=null!==(e=this.featureFlags)&&void 0!==e?e:new u.featureFlags(this)),u.exceptions&&this.Pi.push(this.exceptions=null!==(i=this.exceptions)&&void 0!==i?i:new u.exceptions(this)),u.historyAutocapture&&this.Pi.push(this.historyAutocapture=new u.historyAutocapture(this)),u.tracingHeaders&&this.Pi.push(new u.tracingHeaders(this)),u.siteApps&&this.Pi.push(this.siteApps=new u.siteApps(this)),u.sessionRecording&&!t&&this.Pi.push(this.sessionRecording=new u.sessionRecording(this)),this.config.disable_scroll_properties||h.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),u.autocapture&&this.Pi.push(this.autocapture=new u.autocapture(this)),u.surveys&&this.Pi.push(this.surveys=null!==(r=this.surveys)&&void 0!==r?r:new u.surveys(this)),u.logs&&this.Pi.push(this.logs=null!==(s=this.logs)&&void 0!==s?s:new u.logs(this)),u.conversations&&this.Pi.push(this.conversations=null!==(n=this.conversations)&&void 0!==n?n:new u.conversations(this)),u.productTours&&this.Pi.push(this.productTours=new u.productTours(this)),u.heatmaps&&this.Pi.push(this.heatmaps=new u.heatmaps(this)),u.webVitalsAutocapture&&this.Pi.push(this.webVitalsAutocapture=new u.webVitalsAutocapture(this)),u.exceptionObserver&&this.Pi.push(this.exceptionObserver=new u.exceptionObserver(this)),u.deadClicksAutocapture&&this.Pi.push(this.deadClicksAutocapture=new u.deadClicksAutocapture(this,Tr)),u.toolbar&&this.Pi.push(this.toolbar=null!==(o=this.toolbar)&&void 0!==o?o:new u.toolbar(this)),u.experiments&&this.Pi.push(this.experiments=null!==(a=this.experiments)&&void 0!==a?a:new u.experiments(this)),this.Pi.forEach((t=>{t.initialize&&h.push((()=>{null==t.initialize||t.initialize()}))})),h.push((()=>{if(this.Zi){var t=this.Zi;this.Zi=void 0,this.Rr(t)}})),this.Gi(h,l)}Gi(t,e){for(;t.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-e>=30&&t.length>0)return void setTimeout((()=>{this.Gi(t,e)}),0);var i=t.shift();if(i)try{i()}catch(t){Le.error(\"Error initializing extension:\",t)}}var r=Math.round(performance.now()-e);this.register_for_session({[Fi]:this.config.__preview_deferred_init_extensions?\"deferred\":\"synchronous\",[Mi]:r}),this.config.__preview_deferred_init_extensions&&Le.info(\"PostHog extensions initialized (\"+r+\"ms)\")}Rr(t){var e;if(!r||!r.body)return Le.info(\"document not ready yet, trying again in 500 milliseconds...\"),void setTimeout((()=>{this.Rr(t)}),500);this.config.__preview_deferred_init_extensions&&(this.Zi=t),this.Qi=t,this.compression=void 0,t.supportedCompression&&!this.config.disable_compression&&(this.compression=P(t.supportedCompression,ws.GZipJS)?ws.GZipJS:P(t.supportedCompression,ws.Base64)?ws.Base64:void 0),null!=(e=t.analytics)&&e.endpoint&&(this.analyticsDefaultEndpoint=t.analytics.endpoint),this.set_config({person_profiles:this.Ni?this.Ni:Bi}),this.Pi.forEach((e=>null==e.onRemoteConfig?void 0:e.onRemoteConfig(t)))}Wi(){try{this.config.loaded(this)}catch(t){Le.critical(\"`loaded` function failed\",t)}if(this.Ji(),this.config.internal_or_test_user_hostname&&null!=s&&s.hostname){var t=s.hostname,e=this.config.internal_or_test_user_hostname;(\"string\"==typeof e?t===e:e.test(t))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.Ri())&&this.Ki()}),1),this.Yi=new bs(this),this.Yi.load()}Ji(){var t;this.is_capturing()&&this.config.request_batching&&(null==(t=this.Ui)||t.enable())}_dom_loaded(){this.is_capturing()&&Ji(this.__request_queue,(t=>this.Bi(t))),this.__request_queue=[],this.Ji()}_handle_unload(){var t,e,i,r;null==(t=this.surveys)||t.handlePageUnload(),this.config.request_batching?(this.Xi()&&this.capture(Wi),null==(e=this.logs)||e.flushLogs(\"sendBeacon\"),null==(i=this.Ui)||i.unload(),null==(r=this.zi)||r.unload()):this.Xi()&&this.capture(Wi,null,{transport:\"sendBeacon\"})}_send_request(t){this.__loaded&&(Yn?this.__request_queue.push(t):this.rateLimiter.isServerRateLimited(t.batchKey)||(t.transport=t.transport||this.config.api_transport,t.url=nn(t.url,{ip:this.config.ip?1:0}),t.headers=f({},this.config.request_headers,t.headers),t.compression=\"best-available\"===t.compression?this.compression:t.compression,t.disableXHRCredentials=this.config.__preview_disable_xhr_credentials,this.config.__preview_disable_beacon&&(t.disableTransport=[\"sendBeacon\"]),t.fetchOptions=t.fetchOptions||this.config.fetch_options,(t=>{var e,i,r,s=f({},t);s.timeout=s.timeout||6e4,s.url=hn(s.url,s.compression);var n=null!==(e=s.transport)&&void 0!==e?e:\"fetch\",o=dn.filter((t=>!s.disableTransport||!t.transport||!s.disableTransport.includes(t.transport))),a=null!==(i=null==(r=function(t,e){for(var i=0;t.length>i;i++)if(t[i].transport===n)return t[i]}(o))?void 0:r.method)&&void 0!==i?i:o[0].method;if(!a)throw new Error(\"No available transport method\");\"sendBeacon\"!==n&&s.data&&s.compression===ws.GZipJS&&l&&!rn?un(s).then((t=>{a(t)})).catch((e=>{if(x(e))return rn=!0,void a(f({},s,{compression:void 0,url:hn(t.url,void 0)}));(t=>{if(!t||\"object\"!=typeof t)return!1;var e=\"name\"in t?String(t.name):\"\";return x(t)||e===y})(e)&&(rn=!0),a(s)})):a(s)})(f({},t,{callback:e=>{var i,r;this.rateLimiter.checkForLimiting(e),400>e.statusCode||null==(i=(r=this.config).on_request_error)||i.call(r,e),null==t.callback||t.callback(e)}}))))}Bi(t){this.zi?this.zi.retriableRequest(t):this._send_request(t)}_execute_array(t){zn++;try{var e,i=[],r=[],s=[];Ji(t,(t=>{if(t)if(M(e=t[0]))s.push(t);else if(D(t))try{t.call(this)}catch(e){Le.error(\"Error executing queued PostHog call\",t,e)}else M(t)&&\"alias\"===e?i.push(t):M(t)&&-1!==e.indexOf(\"capture\")&&D(this[e])?s.push(t):r.push(t)}));var n=function(t,e){Ji(t,(function(t){try{if(M(t[0])){var i=e;Ki(t,(function(t){i=i[t[0]].apply(i,t.slice(1))}))}else e[t[0]].apply(e,t.slice(1))}catch(e){Le.error(\"Error executing queued PostHog call\",t,e)}}))};n(i,this),n(r,this),n(s,this)}finally{zn--}}push(t){if(zn>0&&M(t)&&j(t[0])){var e=Zn.prototype[t[0]];D(e)&&e.apply(this,t.slice(1))}else this._execute_array([t])}capture(t,e,i){var r,s,n,o,a;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.Ui){if(this.is_capturing())if(!N(t)&&j(t)){var l=!this.config.opt_out_useragent_filter&&this._is_bot();if(!l||this.config.__preview_capture_bot_pageviews){var u=null!=i&&i.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(null==u||!u.isRateLimited){null!=e&&e.$current_url&&!j(null==e?void 0:e.$current_url)&&(Le.error(\"Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value.\"),null==e||delete e.$current_url),\"$exception\"!==t||null!=i&&i.en||Le.warn(\"Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically.\"),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var h=new Date,d=(null==i?void 0:i.timestamp)||h,v=(null==i?void 0:i.uuid)||dr(),c={uuid:v,event:t,properties:this.calculateEventProperties(t,e||{},d,v)};t===Vi&&this.config.__preview_capture_bot_pageviews&&l&&(c.event=\"$bot_pageview\",c.properties.$browser_type=\"bot\"),u&&(c.properties.$lib_rate_limit_remaining_tokens=u.remainingTokens),(null==i?void 0:i.$set)&&(c.$set=null==i?void 0:i.$set);var p,_,g,m=this.tn(null==i?void 0:i.$set_once,t!==Yi,t===Gi);if(m&&(c.$set_once=m),null!=i&&i._noTruncate||(s=this.config.properties_string_max_length,n=c,o=t=>j(t)?t.slice(0,s):t,a=new Set,c=function t(e,i){return e!==Object(e)?o?o(e):e:a.has(e)?void 0:(a.add(e),M(e)?(r=[],Ji(e,(e=>{r.push(t(e))}))):(r={},Ki(e,((e,i)=>{a.has(e)||(r[i]=t(e,i))}))),r);var r}(n)),c.timestamp=d,N(null==i?void 0:i.timestamp)||(c.properties.$event_time_override_provided=!0,c.properties.$event_time_override_system_time=h),t===hs.DISMISSED||t===hs.SENT){var b=null==e?void 0:e[ds.SURVEY_ID],y=null==e?void 0:e[ds.SURVEY_ITERATION];(t=>{try{var e=(t=>((t,e)=>{var i=\"\"+An+e.id;return e.current_iteration&&e.current_iteration>0&&(i=\"\"+An+e.id+\"_\"+e.current_iteration),i})(0,t))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,\"true\")}catch(t){Cn.error(\"Failed to persist survey seen state\",t)}})({id:b,current_iteration:y}),c.$set=f({},c.$set,{[(p={id:b,current_iteration:y},_=t===hs.SENT?\"responded\":\"dismissed\",g=\"$survey_\"+_+\"/\"+p.id,p.current_iteration&&p.current_iteration>0&&(g=\"$survey_\"+_+\"/\"+p.id+\"/\"+p.current_iteration),g)]:!0})}else t===hs.SHOWN&&(c.$set=f({},c.$set,{[ds.SURVEY_LAST_SEEN_DATE]:(new Date).toISOString()}));if(t===ps.SHOWN){var w=null==e?void 0:e[fs.TOUR_TYPE];w&&(c.$set=f({},c.$set,{[fs.TOUR_LAST_SEEN_DATE+\"/\"+w]:(new Date).toISOString()}))}var x=f({},c.properties.$set,c.$set);if(L(x)||this.setPersonPropertiesForFlags(x),!H(this.config.before_send)){var E=this.rn(c);if(!E)return;c=E}this.Li.emit(\"eventCaptured\",c);var S={method:\"POST\",url:null!==(r=null==i?void 0:i._url)&&void 0!==r?r:this.requestRouter.endpointFor(\"api\",this.analyticsDefaultEndpoint),data:c,compression:\"best-available\",batchKey:null==i?void 0:i._batchKey};return!this.config.request_batching||i&&(null==i||!i._batchKey)||null!=i&&i.send_instantly?this.Bi(S):this.Ui.enqueue(S),c}Le.critical(\"This capture call is ignored due to client rate limiting.\")}}else Le.error(\"No event name provided to posthog.capture\")}else Le.uninitializedWarning(\"posthog.capture\")}_addCaptureHook(t){return this.on(\"eventCaptured\",(e=>t(e.event,e)))}calculateEventProperties(e,i,n,o,a){if(n=n||new Date,!this.persistence||!this.sessionPersistence)return i;var l=a?void 0:this.persistence.remove_event_timer(e),h=f({},i);if(h.token=this.config.token,h.$config_defaults=this.config.defaults,this.Ri()&&(h.$cookieless_mode=!0),\"$snapshot\"===e){var d=f({},this.persistence.properties(),this.sessionPersistence.properties());return h.distinct_id=d.distinct_id,(!j(h.distinct_id)&&!q(h.distinct_id)||z(h.distinct_id))&&Le.error(\"Invalid distinct_id for replay event. This indicates a bug in your implementation\"),h}var c,p=function(e,i){var r,n,o,a;if(!u)return{};var l,h,d,c,p,f,_,g,m=e?[...jr,...i||[]]:[],[b,y]=function(t){for(var e=0;Zt.length>e;e++){var[i,r]=Zt[e],s=i.exec(t),n=s&&(D(r)?r(s,t):r);if(n)return n}return[\"\",\"\"]}(u);return Xi(er({$os:b,$os_version:y,$browser:Kt(u,navigator.vendor),$device:te(u),$device_type:(h=u,d={userAgentDataPlatform:null==(r=navigator)||null==(r=r.userAgentData)?void 0:r.platform,maxTouchPoints:null==(n=navigator)?void 0:n.maxTouchPoints,screenWidth:null==t||null==(o=t.screen)?void 0:o.width,screenHeight:null==t||null==(a=t.screen)?void 0:a.height,devicePixelRatio:null==t?void 0:t.devicePixelRatio},g=te(h),g===dt||g===ht||\"Kobo\"===g||\"Kindle Fire\"===g||g===zt?ut:g===Ot||g===Ct||g===It||g===Lt?\"Console\":g===ct?\"Wearable\":g?ot:\"Android\"===(null==d?void 0:d.userAgentDataPlatform)&&(null!==(c=null==d?void 0:d.maxTouchPoints)&&void 0!==c?c:0)>0?600>Math.min(null!==(p=null==d?void 0:d.screenWidth)&&void 0!==p?p:0,null!==(f=null==d?void 0:d.screenHeight)&&void 0!==f?f:0)/(null!==(_=null==d?void 0:d.devicePixelRatio)&&void 0!==_?_:1)?ot:ut:\"Desktop\"),$timezone:Qr(),$timezone_offset:Zr()}),{$current_url:Ur(null==s?void 0:s.href,m,Br),$host:null==s?void 0:s.host,$pathname:null==s?void 0:s.pathname,$raw_user_agent:u.length>1e3?u.substring(0,997)+\"...\":u,$browser_version:Qt(u,navigator.vendor),$browser_language:Gr(),$browser_language_prefix:(l=Gr(),\"string\"==typeof l?l.split(\"-\")[0]:void 0),$screen_height:null==t?void 0:t.screen.height,$screen_width:null==t?void 0:t.screen.width,$viewport_height:null==t?void 0:t.innerHeight,$viewport_width:null==t?void 0:t.innerWidth,$lib:v.LIB_NAME,$lib_version:v.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3})}(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties);if(this.sessionManager){var{sessionId:_,windowId:g}=this.sessionManager.checkAndGetSessionAndWindowId(a,n.getTime());h.$session_id=_,h.$window_id=g}this.sessionPropsManager&&Xi(h,this.sessionPropsManager.getSessionProps());try{var m;this.sessionRecording&&Xi(h,this.sessionRecording.sdkDebugProperties),h.$sdk_debug_retry_queue_size=null==(m=this.zi)?void 0:m.length}catch(t){h.$sdk_debug_error_capturing_properties=String(t)}if(this.requestRouter.region===Rn&&(h.$lib_custom_api_host=this.config.api_host),c=e!==Vi||a?e!==Wi||a?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(n):this.pageViewManager.doPageView(n,o),h=Xi(h,c),e===Vi&&r&&(h.title=r.title),!N(l)){var b=n.getTime()-l;h.$duration=parseFloat((b/1e3).toFixed(3))}u&&this.config.opt_out_useragent_filter&&(h.$browser_type=this._is_bot()?\"bot\":\"browser\"),(h=Xi({},p,this.persistence.properties(),this.sessionPersistence.properties(),h)).$is_identified=this._isIdentified(),M(this.config.property_denylist)?Ki(this.config.property_denylist,(function(t){delete h[t]})):Le.error(Wn+this.config.property_denylist+\" or property_blacklist config: \"+this.config.property_blacklist);var y=this.config.sanitize_properties;y&&(Le.error(Vn),h=y(h,e));var w=this.nn();return h.$process_person_profile=w,w&&!a&&this.sn(\"_calculate_event_properties\"),h}tn(t,e,i){var r;if(void 0===e&&(e=!0),void 0===i&&(i=!1),!this.persistence||!this.nn())return t;if(this.Oi&&!i)return t;var s=this.persistence.get_initial_props(),n=null==(r=this.sessionPropsManager)?void 0:r.getSetOnceProps(),o=Xi({},s,n||{},t||{}),a=this.config.sanitize_properties;return a&&(Le.error(Vn),o=a(o,\"$set_once\")),e&&(this.Oi=!0),L(o)?void 0:o}register(t,e){var i;null==(i=this.persistence)||i.register(t,e)}register_once(t,e,i){var r;null==(r=this.persistence)||r.register_once(t,e,i)}register_for_session(t){var e;null==(e=this.sessionPersistence)||e.register(t)}unregister(t){var e;null==(e=this.persistence)||e.unregister(t)}unregister_for_session(t){var e;null==(e=this.sessionPersistence)||e.unregister(t)}an(t,e){this.register({[t]:e})}getFeatureFlag(t,e){var i;return null==(i=this.featureFlags)?void 0:i.getFeatureFlag(t,e)}getFeatureFlagPayload(t){var e;return null==(e=this.featureFlags)?void 0:e.getFeatureFlagPayload(t)}getFeatureFlagResult(t,e){var i;return null==(i=this.featureFlags)?void 0:i.getFeatureFlagResult(t,e)}isFeatureEnabled(t,e){var i;return null==(i=this.featureFlags)?void 0:i.isFeatureEnabled(t,e)}reloadFeatureFlags(){var t;null==(t=this.featureFlags)||t.reloadFeatureFlags()}updateFlags(t,e,i){var r;null==(r=this.featureFlags)||r.updateFlags(t,e,i)}updateEarlyAccessFeatureEnrollment(t,e,i){var r;null==(r=this.featureFlags)||r.updateEarlyAccessFeatureEnrollment(t,e,i)}getEarlyAccessFeatures(t,e,i){var r;return void 0===e&&(e=!1),null==(r=this.featureFlags)?void 0:r.getEarlyAccessFeatures(t,e,i)}on(t,e){return this.Li.on(t,e)}onFeatureFlags(t){return this.featureFlags?this.featureFlags.onFeatureFlags(t):(t([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(t){return this.surveys?this.surveys.onSurveysLoaded(t):(t([],{isLoaded:!1,error:qn}),()=>{})}onSessionId(t){var e,i;return null!==(e=null==(i=this.sessionManager)?void 0:i.onSessionId(t))&&void 0!==e?e:()=>{}}getSurveys(t,e){void 0===e&&(e=!1),this.surveys?this.surveys.getSurveys(t,e):t([],{isLoaded:!1,error:qn})}getActiveMatchingSurveys(t,e){void 0===e&&(e=!1),this.surveys?this.surveys.getActiveMatchingSurveys(t,e):t([],{isLoaded:!1,error:qn})}renderSurvey(t,e){var i;null==(i=this.surveys)||i.renderSurvey(t,e)}displaySurvey(t,e){var i;void 0===e&&(e=Mn),null==(i=this.surveys)||i.displaySurvey(t,e)}cancelPendingSurvey(t){var e;null==(e=this.surveys)||e.cancelPendingSurvey(t)}canRenderSurvey(t){var e,i;return null!==(e=null==(i=this.surveys)?void 0:i.canRenderSurvey(t))&&void 0!==e?e:{visible:!1,disabledReason:qn}}canRenderSurveyAsync(t,e){var i,r;return void 0===e&&(e=!1),null!==(i=null==(r=this.surveys)?void 0:r.canRenderSurveyAsync(t,e))&&void 0!==i?i:Promise.resolve({visible:!1,disabledReason:qn})}un(t){return!t||z(t)?(Le.critical(\"Unique user id has not been set in posthog.identify\"),!1):t===Ai?(Le.critical('The string \"'+t+'\" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):![\"distinct_id\",\"distinctid\"].includes(t.toLowerCase())&&![\"undefined\",\"null\"].includes(t.toLowerCase())||(Le.critical('The string \"'+t+'\" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(t,e,i){if(!this.__loaded||!this.persistence)return Le.uninitializedWarning(\"posthog.identify\");if(q(t)&&(t=t.toString(),Le.warn(\"The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.\")),this.un(t)&&this.sn(\"posthog.identify\")){var r=this.get_distinct_id();this.register({$user_id:t}),this.get_property(He)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},\"\"),t!==r&&t!==this.get_property(qe)&&(this.unregister(qe),this.register({distinct_id:t}));var s,n=(this.persistence.get_property($i)||ji)===ji;t!==r&&n?(this.persistence.set_property($i,zi),this.setPersonPropertiesForFlags({$set:e||{},$set_once:i||{}},!1),this.capture(Gi,{distinct_id:t,$anon_distinct_id:r},{$set:e||{},$set_once:i||{}}),this.$i=Sn(t,e,i),null==(s=this.featureFlags)||s.setAnonymousDistinctId(r)):(e||i)&&this.setPersonProperties(e,i),t!==r&&(this.reloadFeatureFlags(),this.unregister(wi))}}setPersonProperties(t,e){if((t||e)&&this.sn(\"posthog.setPersonProperties\")){var i=Sn(this.get_distinct_id(),t,e);this.$i!==i?(this.setPersonPropertiesForFlags({$set:t||{},$set_once:e||{}},!0),this.capture(\"$set\",{$set:t||{},$set_once:e||{}}),this.$i=i):Le.info(\"A duplicate setPersonProperties call was made with the same properties. It has been ignored.\")}}group(t,e,i){if(t&&e){var r=this.getGroups(),s=r[t]!==e;if(s&&this.resetGroupPropertiesForFlags(t),this.register({$groups:f({},r,{[t]:e})}),s||i){var n={$group_type:t,$group_key:e};i&&(n.$group_set=i),this.capture(Yi,n)}i&&this.setGroupPropertiesForFlags({[t]:i}),s&&!i&&this.reloadFeatureFlags()}else Le.error(\"posthog.group requires a group type and group key\")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(t,e){var i;void 0===e&&(e=!0),null==(i=this.featureFlags)||i.setPersonPropertiesForFlags(t,e)}resetPersonPropertiesForFlags(){var t;null==(t=this.featureFlags)||t.resetPersonPropertiesForFlags()}setGroupPropertiesForFlags(t,e){var i;void 0===e&&(e=!0),this.sn(\"posthog.setGroupPropertiesForFlags\")&&(null==(i=this.featureFlags)||i.setGroupPropertiesForFlags(t,e))}resetGroupPropertiesForFlags(t){var e;null==(e=this.featureFlags)||e.resetGroupPropertiesForFlags(t)}reset(t){var e,i,r,s,n,o,a,l;if(Le.info(\"reset\"),!this.__loaded)return Le.uninitializedWarning(\"posthog.reset\");var u=this.get_property(He);if(this.consent.reset(),null==(e=this.persistence)||e.clear(),null==(i=this.sessionPersistence)||i.clear(),null==(r=this.surveys)||r.reset(),null==(s=this.Yi)||s.stop(),null==(n=this.featureFlags)||n.reset(),null==(o=this.conversations)||o.reset(),null==(a=this.persistence)||a.set_property($i,ji),null==(l=this.sessionManager)||l.resetSessionId(),this.$i=null,this.config.cookieless_mode===Ni)this.register_once({distinct_id:Ai,$device_id:null},\"\");else{var h=this.config.get_device_id(dr());this.register_once({distinct_id:h,$device_id:t?h:u},\"\")}this.register({$last_posthog_reset:(new Date).toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}setIdentity(t,e){var i;this.config.identity_distinct_id=t,this.config.identity_hash=e,this.alias(t),null==(i=this.conversations)||i.ln()}clearIdentity(){var t;delete this.config.identity_distinct_id,delete this.config.identity_hash,null==(t=this.conversations)||t.hn()}get_distinct_id(){return this.get_property(\"distinct_id\")}getGroups(){return this.get_property(\"$groups\")||{}}get_session_id(){var t,e;return null!==(t=null==(e=this.sessionManager)?void 0:e.checkAndGetSessionAndWindowId(!0).sessionId)&&void 0!==t?t:\"\"}get_session_replay_url(t){if(!this.sessionManager)return\"\";var{sessionId:e,sessionStartTimestamp:i}=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=this.requestRouter.endpointFor(\"ui\",\"/project/\"+this.config.token+\"/replay/\"+e);if(null!=t&&t.withTimestamp&&i){var s,n=null!==(s=t.timestampLookBack)&&void 0!==s?s:10;if(!i)return r;r+=\"?t=\"+Math.max(Math.floor(((new Date).getTime()-i)/1e3)-n,0)}return r}alias(t,e){return t===this.get_property(Be)?(Le.critical(\"Attempting to create alias for existing People user - aborting.\"),-2):this.sn(\"posthog.alias\")?(N(e)&&(e=this.get_distinct_id()),t!==e?(this.an(qe,t),this.capture(\"$create_alias\",{alias:t,distinct_id:e})):(Le.warn(\"alias matches current distinct_id - skipping api call.\"),this.identify(t),-1)):void 0}set_config(t){var e=f({},this.config);if(U(t)){var i,r,s,n,o,a,l,u,h,d;Xi(this.config,Xn(t));var c=this.Hi();null==(i=this.persistence)||i.update_config(this.config,e,c),this.sessionPersistence=\"sessionStorage\"===this.config.persistence||\"memory\"===this.config.persistence?this.persistence:new es(f({},this.config,{persistence:\"sessionStorage\"}),c);var p=this.Di(this.config.debug);W(p)&&(this.config.debug=p),W(this.config.debug)&&(this.config.debug?(v.DEBUG=!0,gr.R()&&gr.N(\"ph_debug\",!0),Le.info(\"set_config\",{config:t,oldConfig:e,newConfig:f({},this.config)})):(v.DEBUG=!1,gr.R()&&gr.q(\"ph_debug\"))),null==(r=this.exceptionObserver)||r.onConfigChange(),null==(s=this.exceptions)||s.onConfigChange(),null==(n=this.sessionRecording)||n.startIfEnabledOrStop(),null==(o=this.autocapture)||o.startIfEnabled(),null==(a=this.heatmaps)||a.startIfEnabled(),null==(l=this.exceptionObserver)||l.startIfEnabledOrStop(),null==(u=this.deadClicksAutocapture)||u.startIfEnabledOrStop(),null==(h=this.surveys)||h.loadIfEnabled(),this.cn(),null==(d=this.externalIntegrations)||d.startIfEnabledOrStop()}}_overrideSDKInfo(t,e){v.LIB_NAME=t,v.LIB_VERSION=e}startSessionRecording(t){var e,i,r,s,n,o=!0===t,a={sampling:o||!(null==t||!t.sampling),linked_flag:o||!(null==t||!t.linked_flag),url_trigger:o||!(null==t||!t.url_trigger),event_trigger:o||!(null==t||!t.event_trigger)};Object.values(a).some(Boolean)&&(null==(e=this.sessionManager)||e.checkAndGetSessionAndWindowId(),a.sampling&&(null==(i=this.sessionRecording)||i.overrideSampling()),a.linked_flag&&(null==(r=this.sessionRecording)||r.overrideLinkedFlag()),a.url_trigger&&(null==(s=this.sessionRecording)||s.overrideTrigger(\"url\")),a.event_trigger&&(null==(n=this.sessionRecording)||n.overrideTrigger(\"event\")));this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var t;return!(null==(t=this.sessionRecording)||!t.started)}captureException(t,e){if(this.exceptions){var i=new Error(\"PostHog syntheticException\"),r=this.exceptions.buildProperties(t,{handled:!0,syntheticException:i});return this.exceptions.sendExceptionEvent(f({},r,e))}}addExceptionStep(t,e){var i;null==(i=this.exceptions)||i.addExceptionStep(t,e)}captureLog(t){var e;null==(e=this.logs)||e.captureLog(t)}get logger(){var t,e;return null!==(t=null==(e=this.logs)?void 0:e.logger)&&void 0!==t?t:Zn.dn}startExceptionAutocapture(t){this.set_config({capture_exceptions:null==t||t})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(t){var e,i;return null!==(e=null==(i=this.toolbar)?void 0:i.loadToolbar(t))&&void 0!==e&&e}get_property(t){var e;return null==(e=this.persistence)?void 0:e.props[t]}getSessionProperty(t){var e;return null==(e=this.sessionPersistence)?void 0:e.props[t]}toString(){var t,e=null!==(t=this.config.name)&&void 0!==t?t:Gn;return e!==Gn&&(e=Gn+\".\"+e),e}_isIdentified(){var t,e;return(null==(t=this.persistence)?void 0:t.get_property($i))===zi||(null==(e=this.sessionPersistence)?void 0:e.get_property($i))===zi}nn(){var t,e;return!(\"never\"===this.config.person_profiles||this.config.person_profiles===Bi&&!this._isIdentified()&&L(this.getGroups())&&(null==(t=this.persistence)||null==(t=t.props)||!t[qe])&&(null==(e=this.persistence)||null==(e=e.props)||!e[Ii]))}Xi(){return!0===this.config.capture_pageleave||\"if_capture_pageview\"===this.config.capture_pageleave&&(!0===this.config.capture_pageview||\"history_change\"===this.config.capture_pageview)}createPersonProfile(){this.nn()||this.sn(\"posthog.createPersonProfile\")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.sn(\"posthog.setInternalOrTestUser\")&&this.setPersonProperties({$internal_or_test_user:!0})}sn(t){return\"never\"===this.config.person_profiles?(Le.error(t+' was called, but process_person is set to \"never\". This call will be ignored.'),!1):(this.an(Ii,!0),!0)}Hi(){if(\"always\"===this.config.cookieless_mode)return!0;var t=this.consent.isOptedOut();return this.config.disable_persistence||t&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Li)}cn(){var t,e,i,r,s=this.Hi();return(null==(t=this.persistence)?void 0:t._r)!==s&&(null==(i=this.persistence)||i.set_disabled(s)),(null==(e=this.sessionPersistence)?void 0:e._r)!==s&&(null==(r=this.sessionPersistence)||r.set_disabled(s)),s}opt_in_capturing(t){var e;if(this.config.cookieless_mode!==Ni){if(this.Ri()){var i,r,s,n,o;this.reset(!0),null==(i=this.sessionManager)||i.destroy(),null==(r=this.pageViewManager)||r.destroy(),this.sessionManager=new wn(this),this.pageViewManager=new Cr(this),this.persistence&&(this.sessionPropsManager=new mn(this,this.sessionManager,this.persistence));var a,l=null!==(s=null==(n=this.config.__extensionClasses)?void 0:n.sessionRecording)&&void 0!==s?s:null==(o=Zn.__defaultExtensionClasses)?void 0:o.sessionRecording;l&&(this.sessionRecording=this.Mi(this.sessionRecording,new l(this)),this.Qi&&(null==(a=this.sessionRecording)||null==a.onRemoteConfig||a.onRemoteConfig(this.Qi)))}var u,h;this.consent.optInOut(!0),this.cn(),this.Ji(),null==(e=this.sessionRecording)||e.startIfEnabledOrStop(),this.config.cookieless_mode==Li&&(null==(u=this.surveys)||u.loadIfEnabled()),(N(null==t?void 0:t.captureEventName)||null!=t&&t.captureEventName)&&this.capture(null!==(h=null==t?void 0:t.captureEventName)&&void 0!==h?h:\"$opt_in\",null==t?void 0:t.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Ki()}else Le.warn(Hn)}opt_out_capturing(){var t,e,i;this.config.cookieless_mode!==Ni?(this.config.cookieless_mode===Li&&this.consent.isOptedIn()&&this.reset(!0),this.consent.optInOut(!1),this.cn(),this.config.cookieless_mode===Li&&(this.register({distinct_id:Ai,$device_id:null}),null==(t=this.sessionRecording)||t.stopRecording(),this.sessionRecording=void 0,null==(e=this.sessionManager)||e.destroy(),null==(i=this.pageViewManager)||i.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.Ki())):Le.warn(Hn)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var t=this.consent.consent;return 1===t?\"granted\":0===t?\"denied\":\"pending\"}is_capturing(){return this.config.cookieless_mode===Ni||(this.config.cookieless_mode===Li?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.cn()}_is_bot(){return i?xn(i,this.config.custom_blocked_useragents):void 0}Ki(){r&&(\"visible\"===r.visibilityState?this.Fi||(this.Fi=!0,this.capture(Vi,{title:r.title},{send_instantly:!0}),this.Ai&&(r.removeEventListener(Hi,this.Ai),this.Ai=null)):this.Ai||(this.Ai=this.Ki.bind(this),sr(r,Hi,this.Ai)))}debug(e){!1===e?(null==t||t.console.log(\"You've disabled debug mode.\"),this.set_config({debug:!1})):(null==t||t.console.log(\"You're now in debug mode. All calls to PostHog will be logged in your console.\\nYou can disable this with `posthog.debug(false)`.\"),this.set_config({debug:!0}))}Lr(){var t,e,i,r,s,n,o=this.qi||{};return\"advanced_disable_flags\"in o?!!o.advanced_disable_flags:!1!==this.config.advanced_disable_flags?!!this.config.advanced_disable_flags:!0===this.config.advanced_disable_decide?(Le.warn(\"Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version.\"),!0):(i=\"advanced_disable_decide\",!1,r=Le,s=(e=\"advanced_disable_flags\")in(t=o)&&!H(t[e]),n=i in t&&!H(t[i]),s?t[e]:!!n&&(r&&r.warn(\"Config field '\"+i+\"' is deprecated. Please use '\"+e+\"' instead. The old field will be removed in a future major version.\"),t[i]))}rn(t){if(H(this.config.before_send))return t;var e=M(this.config.before_send)?this.config.before_send:[this.config.before_send],i=t;for(var r of e){if(i=r(i),H(i)){var s=\"Event '\"+t.event+\"' was rejected in beforeSend function\";return Y(t.event)?Le.warn(s+\". This can cause unexpected behavior.\"):Le.info(s),null}i.properties&&!L(i.properties)||Le.warn(\"Event '\"+t.event+\"' has no properties after beforeSend function, this is likely an error.\")}return i}getPageViewId(){var t;return null==(t=this.pageViewManager.dr)?void 0:t.pageViewId}captureTraceFeedback(t,e){this.capture(\"$ai_feedback\",{$ai_trace_id:String(t),$ai_feedback_text:e})}captureTraceMetric(t,e,i){this.capture(\"$ai_metric\",{$ai_trace_id:String(t),$ai_metric_name:e,$ai_metric_value:String(i)})}Di(t){var e=W(t)&&!t,i=gr.R()&&\"true\"===gr.A(\"ph_debug\");return!e&&(!!i||t)}}Zn.__defaultExtensionClasses={},Zn.dn={trace:Nn=()=>{},debug:Nn,info:Nn,warn:Nn,error:Nn,fatal:Nn},function(t,e){for(var i=0;e.length>i;i++)t.prototype[e[i]]=tr(t.prototype[e[i]])}(Zn,[\"identify\"]);var to=1,eo=3,io=11;function ro(t){return t instanceof Element&&(t.id===Ci||!(null==t.closest||!t.closest(\".toolbar-global-fade-container\")))}function so(t){return!!t&&t.nodeType===to}function no(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function oo(t){return!!t&&t.nodeType===eo}function ao(t){return!!t&&t.nodeType===io&&so(t.host)}function lo(t){return t?O(t).split(/\\s+/):[]}function uo(e){var i=null==t?void 0:t.location.href;return!!(i&&e&&e.some((t=>i.match(t))))}function ho(t){var e=\"\";switch(typeof t.className){case\"string\":e=t.className;break;case\"object\":e=(t.className&&\"baseVal\"in t.className?t.className.baseVal:null)||t.getAttribute(\"class\")||\"\";break;default:e=\"\"}return lo(e)}function vo(t){return H(t)?null:O(t).split(/(\\s+)/).filter((t=>Oo(t))).join(\"\").replace(/[\\r\\n]/g,\" \").replace(/[ ]+/g,\" \").substring(0,255)}function co(t){var e=\"\";return xo(t)&&!Eo(t)&&t.childNodes&&t.childNodes.length&&Ki(t.childNodes,(function(t){var i;oo(t)&&t.textContent&&(e+=null!==(i=vo(t.textContent))&&void 0!==i?i:\"\")})),O(e)}function po(t){return N(t.target)?t.srcElement||null:null!=(e=t.target)&&e.shadowRoot?t.composedPath()[0]||null:t.target||null;var e}var fo=[\"a\",\"button\",\"form\",\"input\",\"select\",\"textarea\",\"label\"];function _o(t,e){if(N(e))return!0;var i,r=function(t){if(e.some((e=>t.matches(e))))return{v:!0}};for(var s of t)if(i=r(s))return i.v;return!1}function go(t){var e=t.parentNode;return!(!e||!so(e))&&e}var mo=[\"next\",\"previous\",\"prev\",\">\",\"<\"],bo=[\".ph-no-rageclick\",\".ph-no-capture\"];var yo=t=>!t||no(t,\"html\")||!so(t),wo=(e,i)=>{if(!t||yo(e))return{parentIsUsefulElement:!1,targetElementList:[]};for(var r=!1,s=[e],n=e;n.parentNode&&!no(n,\"body\");)if(ao(n.parentNode))s.push(n.parentNode.host),n=n.parentNode.host;else{var o=go(n);if(!o)break;if(i||fo.indexOf(o.tagName.toLowerCase())>-1)r=!0;else{var a=t.getComputedStyle(o);a&&\"pointer\"===a.getPropertyValue(\"cursor\")&&(r=!0)}s.push(o),n=o}return{parentIsUsefulElement:r,targetElementList:s}};function xo(t){for(var e=t;e.parentNode&&!no(e,\"body\");e=e.parentNode){var i=ho(e);if(P(i,\"ph-sensitive\")||P(i,\"ph-no-capture\"))return!1}if(P(ho(t),\"ph-include\"))return!0;var r=t.type||\"\";if(j(r))switch(r.toLowerCase()){case\"hidden\":case\"password\":return!1}var s=t.name||t.id||\"\";return!j(s)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(s.replace(/[^a-zA-Z0-9]/g,\"\"))}function Eo(t){return!!(no(t,\"input\")&&![\"button\",\"checkbox\",\"submit\",\"reset\"].includes(t.type)||no(t,\"select\")||no(t,\"textarea\")||\"true\"===t.getAttribute(\"contenteditable\"))}var So=\"(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})\",$o=new RegExp(\"^(?:\"+So+\")$\"),To=new RegExp(So),ko=\"\\\\d{3}-?\\\\d{2}-?\\\\d{4}\",Ro=new RegExp(\"^(\"+ko+\")$\"),Po=new RegExp(\"(\"+ko+\")\");function Oo(t,e){if(void 0===e&&(e=!0),H(t))return!1;if(j(t)){if(t=O(t),(e?$o:To).test((t||\"\").replace(/[- ]/g,\"\")))return!1;if((e?Ro:Po).test(t))return!1}return!0}function Io(t){var e=co(t);return Oo(e=(e+\" \"+Co(t)).trim())?e:\"\"}function Co(t){var e=\"\";return t&&t.childNodes&&t.childNodes.length&&Ki(t.childNodes,(function(t){var i;if(t&&\"span\"===(null==(i=t.tagName)?void 0:i.toLowerCase()))try{var r=co(t);e=(e+\" \"+r).trim(),t.childNodes&&t.childNodes.length&&(e=(e+\" \"+Co(t)).trim())}catch(t){Le.error(\"[AutoCapture]\",t)}})),e}function Ao(t){return t.replace(/\"|\\\\\"/g,'\\\\\"')}function Fo(t){var e=t.attr__class;return e?M(e)?e:lo(e):void 0}class Mo{constructor(t){this.disabled=!1===t;var e=U(t)?t:{};this.thresholdPx=e.threshold_px||30,this.timeoutMs=e.timeout_ms||1e3,this.clickCount=e.click_count||3,this.clicks=[]}isRageClick(t,e,i){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(t-r.x)+Math.abs(e-r.y)<this.thresholdPx&&this.timeoutMs>i-r.timestamp){if(this.clicks.push({x:t,y:e,timestamp:i}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:t,y:e,timestamp:i}];return!1}}var Do=\"$copy_autocapture\",Uo=Ne(\"[AutoCapture]\");function Lo(t,e){return e.length>t?e.slice(0,t)+\"...\":e}function No(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do{e=e.previousSibling}while(e&&!so(e));return e}function jo(e,i){var r,s,{e:n,maskAllElementAttributes:o,maskAllText:a,elementAttributeIgnoreList:l,elementsChainAsString:u}=i;if(!so(e))return{props:{}};for(var h=[e],d=e;d.parentNode&&!no(d,\"body\");)if(ao(d.parentNode))h.push(d.parentNode.host),d=d.parentNode.host;else{if(!so(d.parentNode))break;h.push(d.parentNode),d=d.parentNode}var v,c,p=[],_={},g=!1,m=!1;if(Ki(h,(t=>{var e=xo(t);if(no(t,\"a\")){var i=t.getAttribute(\"href\");g=e&&!!i&&Oo(i)&&i}P(ho(t),\"ph-no-capture\")&&(m=!0),p.push(function(t,e,i,r){var s=t.tagName.toLowerCase(),n={tag_name:s};fo.indexOf(s)>-1&&!i&&(n.$el_text=\"a\"===s.toLowerCase()||\"button\"===s.toLowerCase()?Lo(1024,Io(t)):Lo(1024,co(t)));var o=ho(t);o.length>0&&(n.classes=o.filter((function(t){return\"\"!==t}))),Ki(t.attributes,(function(i){var s;if((!Eo(t)||-1!==[\"name\",\"id\",\"class\",\"aria-label\"].indexOf(i.name))&&(null==r||!r.includes(i.name))&&!e&&Oo(i.value)&&(!j(s=i.name)||\"_ngcontent\"!==s.substring(0,10)&&\"_nghost\"!==s.substring(0,7))){var o=i.value;\"class\"===i.name&&(o=lo(o).join(\" \")),n[\"attr__\"+i.name]=Lo(1024,o)}}));for(var a=1,l=1,u=t;u=No(u);)a++,u.tagName===t.tagName&&l++;return n.nth_child=a,n.nth_of_type=l,n}(t,o,a,l));var r=function(t){if(!xo(t))return{};var e={};return Ki(t.attributes,(function(t){if(t.name&&0===t.name.indexOf(\"data-ph-capture-attribute\")){var i=t.name.replace(\"data-ph-capture-attribute-\",\"\"),r=t.value;i&&r&&Oo(r)&&(e[i]=r)}})),e}(t);Xi(_,r)})),m)return{props:{},explicitNoCapture:m};if(a||(p[0].$el_text=no(e,\"a\")||no(e,\"button\")?Io(e):co(e)),g){var b,y;p[0].attr__href=g;var w=null==(b=Mr(g))?void 0:b.host,x=null==t||null==(y=t.location)?void 0:y.host;w&&x&&w!==x&&(v=g)}return{props:Xi({$event_type:n.type,$ce_version:1},u?{}:{$elements:p},{$elements_chain:(c=p,function(t){return t.map((t=>{var e,i,r=\"\";if(t.tag_name&&(r+=t.tag_name),t.attr_class)for(var s of(t.attr_class.sort(),t.attr_class))r+=\".\"+s.replace(/\"/g,\"\");var n=f({},t.text?{text:t.text}:{},{\"nth-child\":null!==(e=t.nth_child)&&void 0!==e?e:0,\"nth-of-type\":null!==(i=t.nth_of_type)&&void 0!==i?i:0},t.href?{href:t.href}:{},t.attr_id?{attr_id:t.attr_id}:{},t.attributes),o={};return Qi(n).sort(((t,e)=>{var[i]=t,[r]=e;return i.localeCompare(r)})).forEach((t=>{var[e,i]=t;return o[Ao(e.toString())]=Ao(i.toString())})),(r+=\":\")+Qi(o).map((t=>{var[e,i]=t;return e+'=\"'+i+'\"'})).join(\"\")})).join(\";\")}(function(t){return t.map((t=>{var e,i,r={text:null==(e=t.$el_text)?void 0:e.slice(0,400),tag_name:t.tag_name,href:null==(i=t.attr__href)?void 0:i.slice(0,2048),attr_class:Fo(t),attr_id:t.attr__id,nth_child:t.nth_child,nth_of_type:t.nth_of_type,attributes:{}};return Qi(t).filter((t=>{var[e]=t;return 0===e.indexOf(\"attr__\")})).forEach((t=>{var[e,i]=t;return r.attributes[e]=i})),r}))}(c)))},null!=(r=p[0])&&r.$el_text?{$el_text:null==(s=p[0])?void 0:s.$el_text}:{},v&&\"click\"===n.type?{$external_click_url:v}:{},_)}}var zo=Ne(\"[ExceptionAutocapture]\");function Bo(t,e,i){try{if(!(e in t))return()=>{};var r=t[e],s=i(r);return D(s)&&(s.prototype=s.prototype||{},Object.defineProperties(s,{__posthog_wrapped__:{enumerable:!1,value:!0}})),t[e]=s,()=>{t[e]=r}}catch(t){return()=>{}}}var Ho=Ne(\"[TracingHeaders]\"),qo=Ne(\"[Web Vitals]\"),Vo=9e5,Wo=\"disabled\",Go=\"lazy_loading\",Yo=\"awaiting_config\",Jo=\"missing_config\";Ne(\"[SessionRecording]\"),Ne(\"[SessionRecording]\");var Ko=\"[SessionRecording]\",Xo=Ne(Ko),Qo=Ne(\"[Heatmaps]\");function Zo(t){return U(t)&&\"clientX\"in t&&\"clientY\"in t&&q(t.clientX)&&q(t.clientY)}var ta=Ne(\"[Product Tours]\"),ea=[\"$set_once\",\"$set\"],ia=Ne(\"[SiteApps]\"),ra=\"Error while initializing PostHog app with config id \";function sa(t,e,i){if(H(t))return!1;switch(i){case\"exact\":return t===e;case\"contains\":var r=e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\").replace(/_/g,\".\").replace(/%/g,\".*\");return new RegExp(r,\"i\").test(t);case\"regex\":try{return new RegExp(e).test(t)}catch(t){return!1}default:return!1}}class na{constructor(t){this.vn=new bn,this.fn=(t,e)=>this.pn(t,e)&&this.gn(t,e)&&this.mn(t,e)&&this.yn(t,e),this.pn=(t,e)=>null==e||!e.event||(null==t?void 0:t.event)===(null==e?void 0:e.event),this._instance=t,this.bn=new Set,this._n=new Set}init(){var t,e;N(null==(t=this._instance)?void 0:t._addCaptureHook)||(null==(e=this._instance)||e._addCaptureHook(((t,e)=>{this.on(t,e)})))}register(t){var e,i;if(!N(null==(e=this._instance)?void 0:e._addCaptureHook)&&(t.forEach((t=>{var e,i;null==(e=this._n)||e.add(t),null==(i=t.steps)||i.forEach((t=>{var e;null==(e=this.bn)||e.add((null==t?void 0:t.event)||\"\")}))})),null!=(i=this._instance)&&i.autocapture)){var r,s=new Set;t.forEach((t=>{var e;null==(e=t.steps)||e.forEach((t=>{null!=t&&t.selector&&s.add(null==t?void 0:t.selector)}))})),null==(r=this._instance)||r.autocapture.setElementSelectors(s)}}on(t,e){var i;null!=e&&0!=t.length&&(this.bn.has(t)||this.bn.has(null==e?void 0:e.event))&&this._n&&(null==(i=this._n)?void 0:i.size)>0&&this._n.forEach((t=>{this.wn(e,t)&&this.vn.emit(\"actionCaptured\",t.name)}))}xn(t){this.onAction(\"actionCaptured\",(e=>t(e)))}wn(t,e){if(null==(null==e?void 0:e.steps))return!1;for(var i of e.steps)if(this.fn(t,i))return!0;return!1}onAction(t,e){return this.vn.on(t,e)}gn(t,e){if(null!=e&&e.url){var i,r=null==t||null==(i=t.properties)?void 0:i.$current_url;if(!r||\"string\"!=typeof r)return!1;if(!sa(r,e.url,e.url_matching||\"contains\"))return!1}return!0}mn(t,e){return!!this.Sn(t,e)&&!!this.kn(t,e)&&!!this.Cn(t,e)}Sn(t,e){var i;if(null==e||!e.href)return!0;var r=this.In(t);if(r.length>0)return r.some((t=>sa(t.href,e.href,e.href_matching||\"exact\")));var s,n=(null==t||null==(i=t.properties)?void 0:i.$elements_chain)||\"\";return!!n&&sa((s=n.match(/(?::|\")href=\"(.*?)\"/))?s[1]:\"\",e.href,e.href_matching||\"exact\")}kn(t,e){var i;if(null==e||!e.text)return!0;var r=this.In(t);if(r.length>0)return r.some((t=>sa(t.text,e.text,e.text_matching||\"exact\")||sa(t.$el_text,e.text,e.text_matching||\"exact\")));var s,n,o,a=(null==t||null==(i=t.properties)?void 0:i.$elements_chain)||\"\";return!!a&&(s=function(t){for(var e,i=[],r=/(?::|\")text=\"(.*?)\"/g;!H(e=r.exec(t));)i.includes(e[1])||i.push(e[1]);return i}(a),n=e.text,o=e.text_matching||\"exact\",s.some((t=>sa(t,n,o))))}Cn(t,e){var i,r;if(null==e||!e.selector)return!0;var s=null==t||null==(i=t.properties)?void 0:i.$element_selectors;if(null!=s&&s.includes(e.selector))return!0;var n=(null==t||null==(r=t.properties)?void 0:r.$elements_chain)||\"\";if(e.selector_regex&&n)try{return new RegExp(e.selector_regex).test(n)}catch(t){return!1}return!1}In(t){var e;return null==(null==t||null==(e=t.properties)?void 0:e.$elements)?[]:null==t?void 0:t.properties.$elements}yn(t,e){return null==e||!e.properties||0===e.properties.length||kn(e.properties.reduce(((t,e)=>{var i=M(e.value)?e.value.map(String):null!=e.value?[String(e.value)]:[];return t[e.key]={values:i,operator:e.operator||\"exact\"},t}),{}),null==t?void 0:t.properties)}}class oa{constructor(t){this._instance=t,this.Tn=new Map,this.En=new Map,this.Mn=new Map}Pn(t,e){return!!t&&kn(t.propertyFilters,null==e?void 0:e.properties)}Rn(t,e){var i=new Map;return t.forEach((t=>{var r;null==(r=t.conditions)||null==(r=r[e])||null==(r=r.values)||r.forEach((e=>{if(null!=e&&e.name){var r=i.get(e.name)||[];r.push(t.id),i.set(e.name,r)}}))})),i}On(t,e,i){var r=(i===is.Activation?this.Tn:this.En).get(t),s=[];return this.Ln((t=>{s=t.filter((t=>null==r?void 0:r.includes(t.id)))})),s.filter((r=>{var s,n=null==(s=r.conditions)||null==(s=s[i])||null==(s=s.values)?void 0:s.find((e=>e.name===t));return this.Pn(n,e)}))}register(t){var e;N(null==(e=this._instance)?void 0:e._addCaptureHook)||(this.Fn(t),this.An(t))}An(t){var e=t.filter((t=>{var e,i;return(null==(e=t.conditions)?void 0:e.actions)&&(null==(i=t.conditions)||null==(i=i.actions)||null==(i=i.values)?void 0:i.length)>0}));0!==e.length&&(null==this.Nn&&(this.Nn=new na(this._instance),this.Nn.init(),this.Nn.xn((t=>{this.onAction(t)}))),e.forEach((t=>{var e,i,r,s,n;t.conditions&&null!=(e=t.conditions)&&e.actions&&null!=(i=t.conditions)&&null!=(i=i.actions)&&i.values&&(null==(r=t.conditions)||null==(r=r.actions)||null==(r=r.values)?void 0:r.length)>0&&(null==(s=this.Nn)||s.register(t.conditions.actions.values),null==(n=t.conditions)||null==(n=n.actions)||null==(n=n.values)||n.forEach((e=>{if(e&&e.name){var i=this.Mn.get(e.name);i&&i.push(t.id),this.Mn.set(e.name,i||[t.id])}})))})))}Fn(t){var e,i=t.filter((t=>{var e,i;return(null==(e=t.conditions)?void 0:e.events)&&(null==(i=t.conditions)||null==(i=i.events)||null==(i=i.values)?void 0:i.length)>0})),r=t.filter((t=>{var e,i;return(null==(e=t.conditions)?void 0:e.cancelEvents)&&(null==(i=t.conditions)||null==(i=i.cancelEvents)||null==(i=i.values)?void 0:i.length)>0}));0===i.length&&0===r.length||(null==(e=this._instance)||e._addCaptureHook(((t,e)=>{this.onEvent(t,e)})),this.Tn=this.Rn(t,is.Activation),this.En=this.Rn(t,is.Cancellation))}onEvent(t,e){var i,r=this.le(),s=this.$n(),n=this.Dn(),o=(null==(i=this._instance)||null==(i=i.persistence)?void 0:i.props[s])||[];if(n===t&&e&&o.length>0){var a,l;r.info(\"event matched, removing item from activated items\",{event:t,eventPayload:e,existingActivatedItems:o});var u=(null==e||null==(a=e.properties)?void 0:a.$survey_id)||(null==e||null==(l=e.properties)?void 0:l.$product_tour_id);if(u){var h=o.indexOf(u);0>h||(o.splice(h,1),this.qn(o))}}else{if(this.En.has(t)){var d=this.On(t,e,is.Cancellation);d.length>0&&(r.info(\"cancel event matched, cancelling items\",{event:t,itemsToCancel:d.map((t=>t.id))}),d.forEach((t=>{var e=o.indexOf(t.id);0>e||o.splice(e,1),this.jn(t.id)})),this.qn(o))}if(this.Tn.has(t)){r.info(\"event name matched\",{event:t,eventPayload:e,items:this.Tn.get(t)});var v=this.On(t,e,is.Activation);this.qn(o.concat(v.map((t=>t.id))||[]))}}}onAction(t){var e,i=this.$n(),r=(null==(e=this._instance)||null==(e=e.persistence)?void 0:e.props[i])||[];this.Mn.has(t)&&this.qn(r.concat(this.Mn.get(t)||[]))}qn(t){var e=this.le(),i=[...new Set(t)].filter((t=>!this.Hn(t)));e.info(\"updating activated items\",{activatedItems:i}),this.Un(i)}getActivatedIds(){var t,e=this.$n();return(null==(t=this._instance)||null==(t=t.persistence)?void 0:t.props[e])||[]}getEventToItemsMap(){return this.Tn}Bn(){return this.Nn}}class aa extends oa{constructor(t){super(t)}$n(){return bi}Dn(){return hs.SHOWN}Ln(t){var e;null==(e=this._instance)||e.getSurveys(t)}jn(t){var e;null==(e=this._instance)||e.cancelPendingSurvey(t)}le(){return Cn}Un(t){var e;null==(e=this._instance)||null==(e=e.persistence)||e.register({[bi]:t})}Hn(){return!1}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var la=\"SDK is not enabled or survey functionality is not yet loaded\",ua=\"Disabled. Not loading surveys.\",ha=null!=t&&t.location?Lr(t.location.hash,\"__posthog\")||Lr(location.hash,\"state\"):null,da=\"_postHogToolbarParams\",va=Ne(\"[Toolbar]\"),ca=Ne(\"[FeatureFlags]\"),pa=Ne(\"[FeatureFlags]\",{debugEnabled:!0}),fa=\"\\\" failed. Feature flags didn't load in time.\",_a=t=>{for(var e={},i=0;t.length>i;i++)e[t[i]]=!0;return e},ga=t=>{var e={};for(var[i,r]of Qi(t||{}))r&&(e[i]=r);return e},ma=Ne(\"[Error tracking]\"),ba=\"Refusing to render web experiment since the viewer is a likely bot\",ya={icontains:(e,i)=>!!t&&i.href.toLowerCase().indexOf(e.toLowerCase())>-1,not_icontains:(e,i)=>!!t&&-1===i.href.toLowerCase().indexOf(e.toLowerCase()),regex:(e,i)=>!!t&&En(i.href,e),not_regex:(e,i)=>!!t&&!En(i.href,e),exact:(t,e)=>e.href===t,is_not:(t,e)=>e.href!==t};class wa{get qt(){return this._instance.config}constructor(t){var e=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(t){void 0===t&&(t=!1),e.getWebExperiments((t=>{wa.zn(\"retrieved web experiments from the server\"),e.Vn=new Map,t.forEach((t=>{if(t.feature_flag_key){var i;e.Vn&&(wa.zn(\"setting flag key \",t.feature_flag_key,\" to web experiment \",t),null==(i=e.Vn)||i.set(t.feature_flag_key,t));var r=e._instance.getFeatureFlag(t.feature_flag_key);j(r)&&t.variants[r]&&e.Wn(t.name,r,t.variants[r].transforms)}else if(t.variants)for(var s in t.variants){var n=t.variants[s];wa.Zn(n)&&e.Wn(t.name,s,n.transforms)}}))}),t)},this._instance=t,this._instance.onFeatureFlags((t=>{this.onFeatureFlags(t)}))}initialize(){}onFeatureFlags(t){if(this._is_bot())wa.zn(ba);else if(!this.qt.disable_web_experiments){if(H(this.Vn))return this.Vn=new Map,this.loadIfEnabled(),void this.previewWebExperiment();wa.zn(\"applying feature flags\",t),t.forEach((t=>{var e;if(this.Vn&&null!=(e=this.Vn)&&e.has(t)){var i,r=this._instance.getFeatureFlag(t),s=null==(i=this.Vn)?void 0:i.get(t);r&&null!=s&&s.variants[r]&&this.Wn(s.name,r,s.variants[r].transforms)}}))}}previewWebExperiment(){var t=wa.getWindowLocation();if(null!=t&&t.search){var e=Dr(null==t?void 0:t.search,\"__experiment_id\"),i=Dr(null==t?void 0:t.search,\"__experiment_variant\");e&&i&&(wa.zn(\"previewing web experiments \"+e+\" && \"+i),this.getWebExperiments((t=>{this.Gn(parseInt(e),i,t)}),!1,!0))}}loadIfEnabled(){this.qt.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(t,e,i){if(this.qt.disable_web_experiments&&!i)return t([]);var r=this._instance.get_property(\"$web_experiments\");if(r&&!e)return t(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor(\"api\",\"/api/web_experiments/?token=\"+this.qt.token),method:\"GET\",callback:e=>t(200===e.statusCode&&e.json&&e.json.experiments||[])})}Gn(t,e,i){var r=i.filter((e=>e.id===t));r&&r.length>0&&(wa.zn(\"Previewing web experiment [\"+r[0].name+\"] with variant [\"+e+\"]\"),this.Wn(r[0].name,e,r[0].variants[e].transforms))}static Zn(t){return!H(t.conditions)&&wa.Qn(t)&&wa.Jn(t)}static Qn(t){var e;if(H(t.conditions)||H(null==(e=t.conditions)?void 0:e.url))return!0;var i,r,s,n=wa.getWindowLocation();return!!n&&(null==(i=t.conditions)||!i.url||ya[null!==(r=null==(s=t.conditions)?void 0:s.urlMatchType)&&void 0!==r?r:\"icontains\"](t.conditions.url,n))}static getWindowLocation(){return null==t?void 0:t.location}static Jn(t){var e;if(H(t.conditions)||H(null==(e=t.conditions)?void 0:e.utm))return!0;var i=qr();if(i.utm_source){var r,s,n,o,a,l,u,h,d=null==(r=t.conditions)||null==(r=r.utm)||!r.utm_campaign||(null==(s=t.conditions)||null==(s=s.utm)?void 0:s.utm_campaign)==i.utm_campaign,v=null==(n=t.conditions)||null==(n=n.utm)||!n.utm_source||(null==(o=t.conditions)||null==(o=o.utm)?void 0:o.utm_source)==i.utm_source,c=null==(a=t.conditions)||null==(a=a.utm)||!a.utm_medium||(null==(l=t.conditions)||null==(l=l.utm)?void 0:l.utm_medium)==i.utm_medium,p=null==(u=t.conditions)||null==(u=u.utm)||!u.utm_term||(null==(h=t.conditions)||null==(h=h.utm)?void 0:h.utm_term)==i.utm_term;return d&&c&&p&&v}return!1}static zn(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),r=1;e>r;r++)i[r-1]=arguments[r];Le.info(\"[WebExperiments] \"+t,i)}Wn(t,e,i){this._is_bot()?wa.zn(ba):\"control\"!==e?i.forEach((i=>{if(i.selector){var r;wa.zn(\"applying transform of variant \"+e+\" for experiment \"+t+\" \",i);var s=null==(r=document)?void 0:r.querySelectorAll(i.selector);null==s||s.forEach((t=>{var e=t;i.html&&(e.innerHTML=i.html),i.css&&e.setAttribute(\"style\",i.css)}))}})):wa.zn(\"Control variants leave the page unmodified.\")}_is_bot(){return i&&this._instance?xn(i,this.qt.custom_blocked_useragents):void 0}}var xa=Ne(\"[Conversations]\"),Ea=\"Conversations not available yet.\",Sa={featureFlags:class{constructor(t){this.Kn=!1,this.Yn=!1,this.Xn=!1,this.es=!1,this.ts=!1,this.rs=!1,this.ns=!1,this.ss=!1,this._instance=t,this.featureFlagEventHandlers=[]}get qt(){return this._instance.config}get ni(){return this._instance.persistence}os(t){return this._instance.get_property(t)}us(){var t,e;return null!==(t=null==(e=this.ni)?void 0:e.wr(this.qt.feature_flag_cache_ttl_ms))&&void 0!==t&&t}ls(){return!!this.us()&&(this.ss||this.Xn||(this.ss=!0,ca.warn(\"Feature flag cache is stale, triggering refresh...\"),this.reloadFeatureFlags()),!0)}hs(){var t,e=null!==(t=this.qt.evaluation_contexts)&&void 0!==t?t:this.qt.evaluation_environments;return!this.qt.evaluation_environments||this.qt.evaluation_contexts||this.ns||(ca.warn(\"evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version.\"),this.ns=!0),null!=e&&e.length?e.filter((t=>{var e=t&&\"string\"==typeof t&&t.trim().length>0;return e||ca.error(\"Invalid evaluation context found:\",t,\"Expected non-empty string\"),e})):[]}cs(){return this.hs().length>0}initialize(){var t,e,{config:i}=this._instance,r=null!==(t=null==(e=i.bootstrap)?void 0:e.featureFlags)&&void 0!==t?t:{};if(Object.keys(r).length){var s,n,o=null!==(s=null==(n=i.bootstrap)?void 0:n.featureFlagPayloads)&&void 0!==s?s:{},a=Object.keys(r).filter((t=>!!r[t])).reduce(((t,e)=>(t[e]=r[e]||!1,t)),{}),l=Object.keys(o).filter((t=>a[t])).reduce(((t,e)=>(o[e]&&(t[e]=o[e]),t)),{});this.receivedFeatureFlags({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,i){var r=null!=i&&i.merge?this.getFlagVariants():{},s=null!=i&&i.merge?this.getFlagPayloads():{},n=f({},r,t),o=f({},s,e),a={};for(var[l,u]of Object.entries(n)){var h=\"string\"==typeof u;a[l]={key:l,enabled:!!h||Boolean(u),variant:h?u:void 0,reason:void 0,metadata:N(null==o?void 0:o[l])?void 0:{id:0,version:void 0,description:void 0,payload:o[l]}}}this.receivedFeatureFlags({flags:a})}get hasLoadedFlags(){return this.Yn}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.os(di),e=this.os(pi),i=this.os(fi);if(!i&&!e)return t||{};var r=Xi({},t||{}),s=[...new Set([...Object.keys(i||{}),...Object.keys(e||{})])];for(var n of s){var o,a,l=r[n],u=null==e?void 0:e[n],h=N(u)?null!==(o=null==l?void 0:l.enabled)&&void 0!==o&&o:!!u,d=N(u)?l.variant:\"string\"==typeof u?u:void 0,v=null==i?void 0:i[n],c=f({},l,{enabled:h,variant:h?null!=d?d:null==l?void 0:l.variant:void 0});h!==(null==l?void 0:l.enabled)&&(c.original_enabled=null==l?void 0:l.enabled),d!==(null==l?void 0:l.variant)&&(c.original_variant=null==l?void 0:l.variant),v&&(c.metadata=f({},null==l?void 0:l.metadata,{payload:v,original_payload:null==l||null==(a=l.metadata)?void 0:a.payload})),r[n]=c}return this.Kn||(ca.warn(\" Overriding feature flag details!\",{flagDetails:t,overriddenPayloads:i,finalDetails:r}),this.Kn=!0),r}getFlagVariants(){var t=this.os(li),e=this.os(pi);if(!e)return t||{};for(var i=Xi({},t),r=Object.keys(e),s=0;r.length>s;s++)i[r[s]]=e[r[s]];return this.Kn||(ca.warn(\" Overriding feature flags!\",{enabledFlags:t,overriddenFlags:e,finalFlags:i}),this.Kn=!0),i}getFlagPayloads(){var t=this.os(vi),e=this.os(fi);if(!e)return t||{};for(var i=Xi({},t||{}),r=Object.keys(e),s=0;r.length>s;s++)i[r[s]]=e[r[s]];return this.Kn||(ca.warn(\" Overriding feature flag payloads!\",{flagPayloads:t,overriddenPayloads:e,finalPayloads:i}),this.Kn=!0),i}reloadFeatureFlags(){this.es||this.qt.advanced_disable_feature_flags||this.ds||(this._instance.Li.emit(\"featureFlagsReloading\",!0),this.ds=setTimeout((()=>{this.vs()}),5))}fs(){clearTimeout(this.ds),this.ds=void 0}ensureFlagsLoaded(){this.Yn||this.Xn||this.ds||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this.es=t}vs(t){var e;if(this.fs(),!this._instance.Lr())if(this.Xn)this.ts=!0;else{var i=this.qt.token,r=this.os(He),s={token:i,distinct_id:this._instance.get_distinct_id(),groups:this._instance.getGroups(),$anon_distinct_id:this.$anon_distinct_id,person_properties:f({},(null==(e=this.ni)?void 0:e.get_initial_props())||{},this.os(_i)||{}),group_properties:this.os(gi),timezone:Qr()};B(r)||N(r)||(s.$device_id=r),(null!=t&&t.disableFlags||this.qt.advanced_disable_feature_flags)&&(s.disable_flags=!0),this.cs()&&(s.evaluation_contexts=this.hs());var n=this._instance.requestRouter.endpointFor(\"flags\",\"/flags/?v=2\"+(this.qt.advanced_only_evaluate_survey_feature_flags?\"&only_evaluate_survey_feature_flags=true\":\"\"));this.Xn=!0,this._instance._send_request({method:\"POST\",url:n,data:s,compression:this.qt.disable_compression?void 0:ws.Base64,timeout:this.qt.feature_flag_request_timeout_ms,callback:t=>{var e,i,r,n=!0;if(200===t.statusCode&&(this.ts||(this.$anon_distinct_id=void 0),n=!1),this.Xn=!1,!s.disable_flags||this.ts){this.rs=!n;var o=[];t.error?t.error instanceof Error?o.push(\"AbortError\"===t.error.name?\"timeout\":\"connection_error\"):o.push(\"unknown_error\"):200!==t.statusCode&&o.push(\"api_error_\"+t.statusCode),null!=(e=t.json)&&e.errorsWhileComputingFlags&&o.push(\"errors_while_computing_flags\");var a,l=!(null==(i=t.json)||null==(i=i.quotaLimited)||!i.includes(\"feature_flags\"));if(l&&o.push(\"quota_limited\"),null==(r=this.ni)||r.register({[Ei]:o}),l)ca.warn(\"You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more.\");else s.disable_flags||this.receivedFeatureFlags(null!==(a=t.json)&&void 0!==a?a:{},n,{partialResponse:!!this.qt.advanced_only_evaluate_survey_feature_flags}),this.ts&&(this.ts=!1,this.vs())}}})}}getFeatureFlag(t,e){var i;if(void 0===e&&(e={}),!e.fresh||this.rs)if(this.Yn||this.getFlags()&&this.getFlags().length>0){if(!this.ls()){var r=this.getFeatureFlagResult(t,e);return null!==(i=null==r?void 0:r.variant)&&void 0!==i?i:null==r?void 0:r.enabled}}else ca.warn('getFeatureFlag for key \"'+t+fa)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return null==e?void 0:e.payload}getFeatureFlagResult(t,e){if(void 0===e&&(e={}),!e.fresh||this.rs)if(this.Yn||this.getFlags()&&this.getFlags().length>0){if(!this.ls()){var i=this.getFlagVariants(),r=t in i,s=i[t],n=this.getFlagPayloads()[t],o=String(s),a=this.os(ci)||void 0,l=this.os(Si)||void 0,u=this.os(wi)||{};if(this.qt.advanced_feature_flags_dedup_per_session){var h,d=this._instance.get_session_id(),v=this.os(xi);d&&d!==v&&(u={},null==(h=this.ni)||h.register({[wi]:u,[xi]:d}))}if((e.send_event||!(\"send_event\"in e))&&(!(t in u)||!u[t].includes(o))){var c,p,f,_,g,m,b,y,w,x;M(u[t])?u[t].push(o):u[t]=[o],null==(c=this.ni)||c.register({[wi]:u});var E=this.getFeatureFlagDetails(t),S=[...null!==(p=this.os(Ei))&&void 0!==p?p:[]];N(s)&&S.push(\"flag_missing\");var T={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:n||null,$feature_flag_request_id:a,$feature_flag_evaluated_at:l,$feature_flag_bootstrapped_response:(null==(f=this.qt.bootstrap)||null==(f=f.featureFlags)?void 0:f[t])||null,$feature_flag_bootstrapped_payload:(null==(_=this.qt.bootstrap)||null==(_=_.featureFlagPayloads)?void 0:_[t])||null,$used_bootstrap_value:!this.rs};N(null==E||null==(g=E.metadata)?void 0:g.version)||(T.$feature_flag_version=E.metadata.version);var k,R=null!==(m=null==E||null==(b=E.reason)?void 0:b.description)&&void 0!==m?m:null==E||null==(y=E.reason)?void 0:y.code;R&&(T.$feature_flag_reason=R),null!=E&&null!=(w=E.metadata)&&w.id&&(T.$feature_flag_id=E.metadata.id),N(null==E?void 0:E.original_variant)&&N(null==E?void 0:E.original_enabled)||(T.$feature_flag_original_response=N(E.original_variant)?E.original_enabled:E.original_variant),null!=E&&null!=(x=E.metadata)&&x.original_payload&&(T.$feature_flag_original_payload=null==E||null==(k=E.metadata)?void 0:k.original_payload),S.length&&(T.$feature_flag_error=S.join(\",\")),this._instance.capture(\"$feature_flag_called\",T)}if(r){var P=n;if(!N(n))try{P=JSON.parse(n)}catch(t){}return{key:t,enabled:!!s,variant:\"string\"==typeof s?s:void 0,payload:P}}}}else ca.warn('getFeatureFlagResult for key \"'+t+fa)}getRemoteConfigPayload(t,e){var i=this.qt.token,r={distinct_id:this._instance.get_distinct_id(),token:i};this.cs()&&(r.evaluation_contexts=this.hs()),this._instance._send_request({method:\"POST\",url:this._instance.requestRouter.endpointFor(\"flags\",\"/flags/?v=2\"),data:r,compression:this.qt.disable_compression?void 0:ws.Base64,timeout:this.qt.feature_flag_request_timeout_ms,callback(i){var r,s=null==(r=i.json)?void 0:r.featureFlagPayloads;e((null==s?void 0:s[t])||void 0)}})}isFeatureEnabled(t,e){if(void 0===e&&(e={}),!e.fresh||this.rs){if(this.Yn||this.getFlags()&&this.getFlags().length>0){var i=this.getFeatureFlag(t,e);return N(i)?void 0:!!i}ca.warn('isFeatureEnabled for key \"'+t+fa)}}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,i){if(this.ni){this.Yn=!0;var r=this.getFlagVariants(),s=this.getFlagPayloads(),n=this.getFlagsWithDetails();!function(t,e,i,r,s,n){void 0===i&&(i={}),void 0===r&&(r={}),void 0===s&&(s={});var o=(t=>{var e=t.flags;return e?(t.featureFlags=Object.fromEntries(Object.keys(e).map((t=>{var i;return[t,null!==(i=e[t].variant)&&void 0!==i?i:e[t].enabled]}))),t.featureFlagPayloads=Object.fromEntries(Object.keys(e).filter((t=>e[t].enabled)).filter((t=>{var i;return null==(i=e[t].metadata)?void 0:i.payload})).map((t=>{var i;return[t,null==(i=e[t].metadata)?void 0:i.payload]})))):ca.warn(\"Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version\"),t})(t),a=o.flags,l=o.featureFlags,u=o.featureFlagPayloads;if(l){var h=t.requestId,d=t.evaluatedAt;if(M(l)){ca.warn(\"v1 of the feature flags endpoint is deprecated. Please use the latest version.\");var v={};if(l)for(var c=0;l.length>c;c++)v[l[c]]=!0;e&&e.register({[ui]:l,[li]:v})}else{var p=l,_=u,g=a;if(null!=n&&n.partialResponse)p=f({},i,p),_=f({},r,_),g=f({},s,g);else if(t.errorsWhileComputingFlags)if(a){var m=new Set(Object.keys(a).filter((t=>{var e;return!(null!=(e=a[t])&&e.failed)})));p=f({},i,Object.fromEntries(Object.entries(p).filter((t=>{var[e]=t;return m.has(e)})))),_=f({},r,Object.fromEntries(Object.entries(_||{}).filter((t=>{var[e]=t;return m.has(e)})))),g=f({},s,Object.fromEntries(Object.entries(g||{}).filter((t=>{var[e]=t;return m.has(e)}))))}else p=f({},i,p),_=f({},r,_),g=f({},s,g);e&&e.register(f({[ui]:Object.keys(ga(p)),[li]:p||{},[vi]:_||{},[di]:g||{}},h?{[ci]:h}:{},d?{[Si]:d}:{}))}}}(t,this.ni,r,s,n,i),e||(this.ss=!1),this.ps(e)}}override(t,e){void 0===e&&(e=!1),ca.warn(\"override is deprecated. Please use overrideFeatureFlags instead.\"),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){if(!this._instance.__loaded||!this.ni)return ca.uninitializedWarning(\"posthog.featureFlags.overrideFeatureFlags\");if(!1===t)return this.ni.unregister(pi),this.ni.unregister(fi),this.ps(),pa.info(\"All overrides cleared\");if(M(t)){var e=_a(t);return this.ni.register({[pi]:e}),this.ps(),pa.info(\"Flag overrides set\",{flags:t})}if(t&&\"object\"==typeof t&&(\"flags\"in t||\"payloads\"in t)){var i,r=t;if(this.Kn=Boolean(null!==(i=r.suppressWarning)&&void 0!==i&&i),\"flags\"in r)if(!1===r.flags)this.ni.unregister(pi),pa.info(\"Flag overrides cleared\");else if(r.flags){if(M(r.flags)){var s=_a(r.flags);this.ni.register({[pi]:s})}else this.ni.register({[pi]:r.flags});pa.info(\"Flag overrides set\",{flags:r.flags})}return\"payloads\"in r&&(!1===r.payloads?(this.ni.unregister(fi),pa.info(\"Payload overrides cleared\")):r.payloads&&(this.ni.register({[fi]:r.payloads}),pa.info(\"Payload overrides set\",{payloads:r.payloads}))),void this.ps()}if(t&&\"object\"==typeof t)return this.ni.register({[pi]:t}),this.ps(),pa.info(\"Flag overrides set\",{flags:t});ca.warn(\"Invalid overrideOptions provided to overrideFeatureFlags\",{overrideOptions:t})}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.Yn){var{flags:e,flagVariants:i}=this.gs();t(e,i)}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,i){var r,s=(this.os(hi)||[]).find((e=>e.flagKey===t)),n={[\"$feature_enrollment/\"+t]:e},o={$feature_flag:t,$feature_enrollment:e,$set:n};s&&(o.$early_access_feature_name=s.name),i&&(o.$feature_enrollment_stage=i),this._instance.capture(\"$feature_enrollment_update\",o),this.setPersonPropertiesForFlags(n,!1);var a=f({},this.getFlagVariants(),{[t]:e});null==(r=this.ni)||r.register({[ui]:Object.keys(ga(a)),[li]:a}),this.ps()}getEarlyAccessFeatures(t,e,i){void 0===e&&(e=!1);var r=this.os(hi),s=i?\"&\"+i.map((t=>\"stage=\"+t)).join(\"&\"):\"\";if(r&&!e)return t(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor(\"api\",\"/api/early_access_features/?token=\"+this.qt.token+s),method:\"GET\",callback:e=>{var i,r;if(e.json){var s=e.json.earlyAccessFeatures;return null==(i=this.ni)||i.unregister(hi),null==(r=this.ni)||r.register({[hi]:s}),t(s)}}})}gs(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((t=>e[t])),flagVariants:Object.keys(e).filter((t=>e[t])).reduce(((t,i)=>(t[i]=e[i],t)),{})}}ps(t){var{flags:e,flagVariants:i}=this.gs();this.featureFlagEventHandlers.forEach((r=>r(e,i,{errorsLoading:t})))}setPersonPropertiesForFlags(t,e){void 0===e&&(e=!0);var i=this.os(_i)||{},r=(null==t?void 0:t.$set)||(null!=t&&t.$set_once?{}:t),s=null==t?void 0:t.$set_once,n={};if(s)for(var o in s)({}).hasOwnProperty.call(s,o)&&(o in i||(n[o]=s[o]));this._instance.register({[_i]:f({},i,n,r)}),e&&this._instance.reloadFeatureFlags()}resetPersonPropertiesForFlags(){this._instance.unregister(_i)}setGroupPropertiesForFlags(t,e){void 0===e&&(e=!0);var i=this.os(gi)||{};0!==Object.keys(i).length&&Object.keys(i).forEach((e=>{i[e]=f({},i[e],t[e]),delete t[e]})),this._instance.register({[gi]:f({},i,t)}),e&&this._instance.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.os(gi)||{};this._instance.register({[gi]:f({},e,{[t]:{}})})}else this._instance.unregister(gi)}reset(){this.Yn=!1,this.Xn=!1,this.es=!1,this.ts=!1,this.rs=!1,this.$anon_distinct_id=void 0,this.fs(),this.Kn=!1}}},$a={sessionRecording:class{get qt(){return this._instance.config}get ni(){return this._instance.persistence}get started(){var t;return!(null==(t=this.ys)||!t.isStarted)}get status(){var t,e;return this.bs===Yo||this.bs===Jo?this.bs:null!==(t=null==(e=this.ys)?void 0:e.status)&&void 0!==t?t:this.bs}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.bs=Wo,this._s=void 0,this._instance=t,!this._instance.sessionManager)throw Xo.error(\"started without valid sessionManager\"),new Error(Ko+\" started without valid sessionManager. This is a bug.\");if(this.qt.cookieless_mode===Ni)throw new Error(Ko+' cannot be used with cookieless_mode=\"always\"')}initialize(){this.startIfEnabledOrStop()}get ws(){var e,i=!(null==(e=this._instance.get_property(ei))||!e.enabled),r=!this.qt.disable_session_recording,s=this.qt.disable_session_recording||this._instance.consent.isOptedOut();return t&&i&&r&&!s}startIfEnabledOrStop(t){var e;if(!this.ws||null==(e=this.ys)||!e.isStarted){var i=!N(Object.assign)&&!N(Array.from);this.ws&&i?(this.xs(t),Xo.info(\"starting\")):(this.bs=Wo,this.stopRecording())}}xs(t){var e,i,r;this.ws&&(this.bs!==Yo&&this.bs!==Jo&&(this.bs=Go),null!=h&&null!=(e=h.__PosthogExtensions__)&&null!=(e=e.rrweb)&&e.record&&null!=(i=h.__PosthogExtensions__)&&i.initSessionRecording?this.Ss(t):null==(r=h.__PosthogExtensions__)||null==r.loadExternalDependency||r.loadExternalDependency(this._instance,this.ks,(e=>{if(e)return Xo.error(\"could not load recorder\",e);this.Ss(t)})))}stopRecording(){var t,e;null==(t=this._s)||t.call(this),this._s=void 0,null==(e=this.ys)||e.stop()}Cs(){var t,e;null==(t=this._s)||t.call(this),this._s=void 0,null==(e=this.ys)||e.discard()}Is(){var t;null==(t=this.ni)||t.unregister(ai)}Ts(t,e){if(H(t))return null;var i,r=q(t)?t:parseFloat(t);return\"number\"!=typeof(i=r)||!Number.isFinite(i)||0>i||i>1?(Xo.warn(e+\" must be between 0 and 1. Ignoring invalid value:\",t),null):r}Es(t){if(this.ni){var e,i,r=this.ni,s=()=>{var e,i=!1===t.sessionRecording?void 0:t.sessionRecording,s=this.Ts(null==(e=this.qt.session_recording)?void 0:e.sampleRate,\"session_recording.sampleRate\"),n=this.Ts(null==i?void 0:i.sampleRate,\"remote config sampleRate\"),o=null!=s?s:n;H(o)&&this.Is();var a=null==i?void 0:i.minimumDurationMilliseconds;r.register({[ei]:f({cache_timestamp:Date.now(),enabled:!!i},i,{networkPayloadCapture:f({capturePerformance:t.capturePerformance},null==i?void 0:i.networkPayloadCapture),canvasRecording:{enabled:null==i?void 0:i.recordCanvas,fps:null==i?void 0:i.canvasFps,quality:null==i?void 0:i.canvasQuality},sampleRate:o,minimumDurationMilliseconds:N(a)?null:a,endpoint:null==i?void 0:i.endpoint,triggerMatchType:null==i?void 0:i.triggerMatchType,masking:null==i?void 0:i.masking,urlTriggers:null==i?void 0:i.urlTriggers,version:null==i?void 0:i.version,triggerGroups:null==i?void 0:i.triggerGroups})})};s(),null==(e=this._s)||e.call(this),this._s=null==(i=this._instance.sessionManager)?void 0:i.onSessionId(s)}}onRemoteConfig(t){return\"sessionRecording\"in t?!1===t.sessionRecording?(this.Es(t),void this.Cs()):(this.Es(t),void this.startIfEnabledOrStop()):(this.bs===Yo&&(this.bs=Jo,Xo.warn(\"config refresh failed, recording will not start until page reload\")),void this.startIfEnabledOrStop())}log(t,e){var i;void 0===e&&(e=\"log\"),null!=(i=this.ys)&&i.log?this.ys.log(t,e):Xo.warn(\"log called before recorder was ready\")}get ks(){var t,e,i=null==(t=this._instance)||null==(t=t.persistence)?void 0:t.get_property(ei);return(null==i||null==(e=i.scriptConfig)?void 0:e.script)||\"lazy-recorder\"}Ms(){var t,e,i=this._instance.get_property(ei);if(!i)return!1;try{e=\"object\"==typeof i?i:JSON.parse(i)}catch(t){return Xo.warn(\"persisted remote config for session recording is invalid and will be ignored\",t),!1}var r=null!==(t=e.cache_timestamp)&&void 0!==t?t:Date.now();return 36e5>=Date.now()-r}Ss(t){var e,i;if(null==(e=h.__PosthogExtensions__)||!e.initSessionRecording)return Xo.warn(\"Called on script loaded before session recording is available. This can be caused by adblockers.\"),void this._instance.register_for_session({[Di]:!0});if(this.ys||(this.ys=null==(i=h.__PosthogExtensions__)?void 0:i.initSessionRecording(this._instance),this.ys._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.Ms()){if(this.bs===Jo||this.bs===Yo)return;return this.bs=Yo,Xo.info(\"persisted remote config is stale, requesting fresh config before starting\"),void new bs(this._instance).load()}this.bs=Go,this.ys.start(t)}onRRwebEmit(t){var e;null==(e=this.ys)||null==e.onRRwebEmit||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.ys||null==(e=this.ni)||e.register({[ri]:!0}),null==(t=this.ys)||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.ys||null==(e=this.ni)||e.register({[ii]:!0}),null==(t=this.ys)||t.overrideSampling()}overrideTrigger(t){var e,i;this.ys||null==(i=this.ni)||i.register({[\"url\"===t?si:ni]:!0}),null==(e=this.ys)||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return(null==(t=this.ys)?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var i;return!(null==(i=this.ys)||!i.tryAddCustomEvent(t,e))}}},Ta={autocapture:class{constructor(t){this.Ps=!1,this.Rs=null,this.Os=!1,this.instance=t,this.rageclicks=new Mo(t.config.rageclick),this.Ls=null}initialize(){this.startIfEnabled()}get qt(){var t,e,i=U(this.instance.config.autocapture)?this.instance.config.autocapture:{};return i.url_allowlist=null==(t=i.url_allowlist)?void 0:t.map((t=>new RegExp(t))),i.url_ignorelist=null==(e=i.url_ignorelist)?void 0:e.map((t=>new RegExp(t))),i}Fs(){if(this.isBrowserSupported()){if(t&&r){var e=e=>{e=e||(null==t?void 0:t.event);try{this.As(e)}catch(t){Uo.error(\"Failed to capture event\",t)}};if(sr(r,\"submit\",e,{capture:!0}),sr(r,\"change\",e,{capture:!0}),sr(r,\"click\",e,{capture:!0}),this.qt.capture_copied_text){var i=e=>{e=e||(null==t?void 0:t.event);try{this.As(e,Do)}catch(t){Uo.error(\"Failed to capture copy/cut event\",t)}};sr(r,\"copy\",i,{capture:!0}),sr(r,\"cut\",i,{capture:!0})}}}else Uo.info(\"Disabling Automatic Event Collection because this browser is not supported\")}startIfEnabled(){this.isEnabled&&!this.Ps&&(this.Fs(),this.Ps=!0)}onRemoteConfig(t){t.elementsChainAsString&&(this.Os=t.elementsChainAsString),this.instance.persistence&&this.instance.persistence.register({[We]:!!t.autocapture_opt_out}),this.Rs=!!t.autocapture_opt_out,this.startIfEnabled()}setElementSelectors(t){this.Ls=t}getElementSelectors(t){var e,i=[];return null==(e=this.Ls)||e.forEach((e=>{var s=null==r?void 0:r.querySelectorAll(e);null==s||s.forEach((r=>{t===r&&i.push(e)}))})),i}get isEnabled(){var t,e,i=null==(t=this.instance.persistence)?void 0:t.props[We];if(B(this.Rs)&&!W(i)&&!this.instance.Lr())return!1;var r=null!==(e=this.Rs)&&void 0!==e?e:!!i;return!!this.instance.config.autocapture&&!r}As(e,i){if(void 0===i&&(i=\"$autocapture\"),this.isEnabled){var r,s=po(e);oo(s)&&(s=s.parentNode||null),\"$autocapture\"===i&&\"click\"===e.type&&e instanceof MouseEvent&&this.instance.config.rageclick&&null!=(r=this.rageclicks)&&r.isRageClick(e.clientX,e.clientY,e.timeStamp||(new Date).getTime())&&function(e,i){if(!t||yo(e))return!1;var r,s,n;if(W(i)?(r=!!i&&bo,s=void 0):(r=null!==(n=null==i?void 0:i.css_selector_ignorelist)&&void 0!==n?n:bo,s=null==i?void 0:i.content_ignorelist),!1===r)return!1;var{targetElementList:o}=wo(e,!1);return!function(t,e){if(!1===t||N(t))return!1;var i;if(!0===t)i=mo;else{if(!M(t))return!1;if(t.length>10)return Le.error(\"[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching.\"),!1;i=t.map((t=>t.toLowerCase()))}return e.some((t=>{var{safeText:e,ariaLabel:r}=t;return i.some((t=>e.includes(t)||r.includes(t)))}))}(s,o.map((t=>{var e;return{safeText:co(t).toLowerCase(),ariaLabel:(null==(e=t.getAttribute(\"aria-label\"))?void 0:e.toLowerCase().trim())||\"\"}})))&&!_o(o,r)}(s,this.instance.config.rageclick)&&this.As(e,\"$rageclick\");var n=i===Do;if(s&&function(e,i,r,s,n){var o,a,l,u;if(void 0===r&&(r=void 0),!t||yo(e))return!1;if(null!=(o=r)&&o.url_allowlist&&!uo(r.url_allowlist))return!1;if(null!=(a=r)&&a.url_ignorelist&&uo(r.url_ignorelist))return!1;if(null!=(l=r)&&l.dom_event_allowlist){var h=r.dom_event_allowlist;if(h&&!h.some((t=>i.type===t)))return!1}var{parentIsUsefulElement:d,targetElementList:v}=wo(e,s);if(!function(t,e){var i=null==e?void 0:e.element_allowlist;if(N(i))return!0;var r,s=function(t){if(i.some((e=>t.tagName.toLowerCase()===e)))return{v:!0}};for(var n of t)if(r=s(n))return r.v;return!1}(v,r))return!1;if(!_o(v,null==(u=r)?void 0:u.css_selector_allowlist))return!1;var c=t.getComputedStyle(e);if(c&&\"pointer\"===c.getPropertyValue(\"cursor\")&&\"click\"===i.type)return!0;var p=e.tagName.toLowerCase();switch(p){case\"html\":return!1;case\"form\":return(n||[\"submit\"]).indexOf(i.type)>=0;case\"input\":case\"select\":case\"textarea\":return(n||[\"change\",\"click\"]).indexOf(i.type)>=0;default:return d?(n||[\"click\"]).indexOf(i.type)>=0:(n||[\"click\"]).indexOf(i.type)>=0&&(fo.indexOf(p)>-1||\"true\"===e.getAttribute(\"contenteditable\"))}}(s,e,this.qt,n,n?[\"copy\",\"cut\"]:void 0)){var{props:o,explicitNoCapture:a}=jo(s,{e:e,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.qt.element_attribute_ignorelist,elementsChainAsString:this.Os});if(a)return!1;var l=this.getElementSelectors(s);if(l&&l.length>0&&(o.$element_selectors=l),i===Do){var u,h=vo(null==t||null==(u=t.getSelection())?void 0:u.toString()),d=e.type||\"clipboard\";if(!h)return!1;o.$selected_content=h,o.$copy_type=d}return this.instance.capture(i,o),!0}}}isBrowserSupported(){return D(null==r?void 0:r.querySelectorAll)}},historyAutocapture:class{constructor(e){var i;this._instance=e,this.Ns=(null==t||null==(i=t.location)?void 0:i.pathname)||\"\"}initialize(){this.startIfEnabled()}get isEnabled(){return\"history_change\"===this._instance.config.capture_pageview}startIfEnabled(){this.isEnabled&&(Le.info(\"History API monitoring enabled, starting...\"),this.monitorHistoryChanges())}stop(){this.$s&&this.$s(),this.$s=void 0,Le.info(\"History API monitoring stopped\")}monitorHistoryChanges(){var e,i;if(t&&t.history){var r=this;null!=(e=t.history.pushState)&&e.__posthog_wrapped__||Bo(t.history,\"pushState\",(t=>function(e,i,s){t.call(this,e,i,s),r.Ds(\"pushState\")})),null!=(i=t.history.replaceState)&&i.__posthog_wrapped__||Bo(t.history,\"replaceState\",(t=>function(e,i,s){t.call(this,e,i,s),r.Ds(\"replaceState\")})),this.qs()}}Ds(e){try{var i,r=null==t||null==(i=t.location)?void 0:i.pathname;if(!r)return;r!==this.Ns&&this.isEnabled&&this._instance.capture(Vi,{navigation_type:e}),this.Ns=r}catch(t){Le.error(\"Error capturing \"+e+\" pageview\",t)}}qs(){if(!this.$s){var e=()=>{this.Ds(\"popstate\")};sr(t,\"popstate\",e),this.$s=()=>{t&&t.removeEventListener(\"popstate\",e)}}}},heatmaps:class{get qt(){return this.instance.config}constructor(t){var e;this.js=!1,this.Ps=!1,this.Hs=null,this.instance=t,this.js=!(null==(e=this.instance.persistence)||!e.props[Ge]),this.rageclicks=new Mo(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return U(this.qt.capture_heatmaps)&&this.qt.capture_heatmaps.flush_interval_milliseconds&&(t=this.qt.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return H(this.qt.capture_heatmaps)?H(this.qt.enable_heatmaps)?this.js:this.qt.enable_heatmaps:!1!==this.qt.capture_heatmaps}startIfEnabled(){if(this.isEnabled){if(this.Ps)return;Qo.info(\"starting...\"),this.Us(),this.At()}else{var t;clearInterval(null!==(t=this.Hs)&&void 0!==t?t:void 0),this.Bs(),this.getAndClearBuffer()}}onRemoteConfig(t){if(\"heatmaps\"in t){var e=!!t.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Ge]:e}),this.js=e,this.startIfEnabled()}}getAndClearBuffer(){var t=this.M;return this.M=void 0,t}zs(t){this.Mt(t.originalEvent,\"deadclick\")}At(){this.Hs&&clearInterval(this.Hs),this.Hs=\"visible\"===(null==r?void 0:r.visibilityState)?setInterval(this.Zr.bind(this),this.flushIntervalMilliseconds):null}Us(){t&&r&&(this.Vs=this.Zr.bind(this),sr(t,qi,this.Vs),this.Ws=e=>this.Mt(e||(null==t?void 0:t.event)),sr(r,\"click\",this.Ws,{capture:!0}),this.Zs=e=>this.Gs(e||(null==t?void 0:t.event)),sr(r,\"mousemove\",this.Zs,{capture:!0}),this.Qs=new kr(this.instance,$r,this.zs.bind(this)),this.Qs.startIfEnabledOrStop(),this.Js=this.At.bind(this),sr(r,Hi,this.Js),this.Ps=!0)}Bs(){var e;t&&r&&(this.Vs&&t.removeEventListener(qi,this.Vs),this.Ws&&r.removeEventListener(\"click\",this.Ws,{capture:!0}),this.Zs&&r.removeEventListener(\"mousemove\",this.Zs,{capture:!0}),this.Js&&r.removeEventListener(Hi,this.Js),clearTimeout(this.Ks),null==(e=this.Qs)||e.stop(),this.Ps=!1)}Ys(e,i){var r=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),n=this.instance.scrollManager.scrollElement(),o=function(e,i,r){for(var s=e;s&&so(s)&&!no(s,\"body\");){if(s===r)return!1;if(P(i,null==t?void 0:t.getComputedStyle(s).position))return!0;s=go(s)}return!1}(po(e),[\"fixed\",\"sticky\"],n);return{x:e.clientX+(o?0:s),y:e.clientY+(o?0:r),target_fixed:o,type:i}}Mt(t,e){var i;if(void 0===e&&(e=\"click\"),!ro(t.target)&&Zo(t)){var r=this.Ys(t,e);null!=(i=this.rageclicks)&&i.isRageClick(t.clientX,t.clientY,(new Date).getTime())&&this.Xs(f({},r,{type:\"rageclick\"})),this.Xs(r)}}Gs(t){!ro(t.target)&&Zo(t)&&(clearTimeout(this.Ks),this.Ks=setTimeout((()=>{this.Xs(this.Ys(t,\"mousemove\"))}),500))}Xs(e){if(t){var i=t.location.href,r=this.qt.custom_personal_data_properties,s=this.qt.mask_personal_data_properties?[...jr,...r||[]]:[],n=Ur(i,s,Br);this.M=this.M||{},this.M[n]||(this.M[n]=[]),this.M[n].push(e)}}Zr(){this.M&&!L(this.M)&&this.instance.capture(\"$$heatmap\",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:kr,webVitalsAutocapture:class{constructor(t){var e;this.js=!1,this.Ps=!1,this.M={url:void 0,metrics:[],firstMetricTimestamp:void 0},this.eo=()=>{clearTimeout(this.ro),0!==this.M.metrics.length&&(this._instance.capture(\"$web_vitals\",this.M.metrics.reduce(((t,e)=>f({},t,{[\"$web_vitals_\"+e.name+\"_event\"]:f({},e),[\"$web_vitals_\"+e.name+\"_value\"]:e.value})),{})),this.M={url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.ht=t=>{var e,i=null==(e=this._instance.sessionManager)?void 0:e.checkAndGetSessionAndWindowId(!0);if(N(i))qo.error(\"Could not read session ID. Dropping metrics!\");else{this.M=this.M||{url:void 0,metrics:[],firstMetricTimestamp:void 0};var r=this.io();N(r)||(H(null==t?void 0:t.name)||H(null==t?void 0:t.value)?qo.error(\"Invalid metric received\",t):!this.no||this.no>t.value?(this.M.url!==r&&(this.eo(),this.ro=setTimeout(this.eo,this.flushToCaptureTimeoutMs)),N(this.M.url)&&(this.M.url=r),this.M.firstMetricTimestamp=N(this.M.firstMetricTimestamp)?Date.now():this.M.firstMetricTimestamp,t.attribution&&t.attribution.interactionTargetElement&&(t.attribution.interactionTargetElement=void 0),this.M.metrics.push(f({},t,{$current_url:r,$session_id:i.sessionId,$window_id:i.windowId,timestamp:Date.now()})),this.M.metrics.length===this.allowedMetrics.length&&this.eo()):qo.error(\"Ignoring metric with value >= \"+this.no,t))}},this.so=()=>{if(!this.Ps){var t,e,i,r,s=h.__PosthogExtensions__;N(s)||N(s.postHogWebVitalsCallbacks)||({onLCP:t,onCLS:e,onFCP:i,onINP:r}=s.postHogWebVitalsCallbacks),t&&e&&i&&r?(this.allowedMetrics.indexOf(\"LCP\")>-1&&t(this.ht.bind(this)),this.allowedMetrics.indexOf(\"CLS\")>-1&&e(this.ht.bind(this)),this.allowedMetrics.indexOf(\"FCP\")>-1&&i(this.ht.bind(this)),this.allowedMetrics.indexOf(\"INP\")>-1&&r(this.ht.bind(this)),this.Ps=!0):qo.error(\"web vitals callbacks not loaded - not starting\")}},this._instance=t,this.js=!(null==(e=this._instance.persistence)||!e.props[Xe]),this.startIfEnabled()}get oo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,i=U(this.oo)?null==(t=this.oo)?void 0:t.web_vitals_allowed_metrics:void 0;return H(i)?(null==(e=this._instance.persistence)?void 0:e.props[ti])||[\"CLS\",\"FCP\",\"INP\",\"LCP\"]:i}get flushToCaptureTimeoutMs(){return(U(this.oo)?this.oo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=U(this.oo)?this.oo.web_vitals_attribution:void 0;return null!=t&&t}get no(){var t=U(this.oo)&&q(this.oo.__web_vitals_max_value)?this.oo.__web_vitals_max_value:Vo;return t>0&&6e4>=t?Vo:t}get isEnabled(){var t=null==s?void 0:s.protocol;if(\"http:\"!==t&&\"https:\"!==t)return qo.info(\"Web Vitals are disabled on non-http/https protocols\"),!1;var e=U(this.oo)?this.oo.web_vitals:W(this.oo)?this.oo:void 0;return W(e)?e:this.js}startIfEnabled(){this.isEnabled&&!this.Ps&&(qo.info(\"enabled, starting...\"),this.lr(this.so))}onRemoteConfig(t){if(\"capturePerformance\"in t){var e=U(t.capturePerformance)&&!!t.capturePerformance.web_vitals,i=U(t.capturePerformance)?t.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Xe]:e}),this._instance.persistence.register({[ti]:i})),this.js=e,this.startIfEnabled()}}lr(t){var e,i;null!=(e=h.__PosthogExtensions__)&&e.postHogWebVitalsCallbacks?t():null==(i=h.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this._instance,this.useAttribution?\"web-vitals-with-attribution\":\"web-vitals\",(e=>{e?qo.error(\"failed to load script\",e):t()}))}io(){var e=t?t.location.href:void 0;if(e){var i=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[...jr,...i||[]]:[];return Ur(e,r,Br)}qo.error(\"Could not determine current URL\")}}},ka={exceptionObserver:class{constructor(e){var i,r,s;this.so=()=>{var e;if(t&&this.isEnabled&&null!=(e=h.__PosthogExtensions__)&&e.errorWrappingFunctions){var i=h.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=h.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=h.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.ao&&this.qt.capture_unhandled_errors&&(this.ao=i(this.captureException.bind(this))),!this.uo&&this.qt.capture_unhandled_rejections&&(this.uo=r(this.captureException.bind(this))),!this.lo&&this.qt.capture_console_errors&&(this.lo=s(this.captureException.bind(this)))}catch(t){zo.error(\"failed to start\",t),this.ho()}}},this._instance=e,this.co=!(null==(i=this._instance.persistence)||!i.props[Ye]),this.do=new it({refillRate:null!==(r=this._instance.config.error_tracking.__exceptionRateLimiterRefillRate)&&void 0!==r?r:1,bucketSize:null!==(s=this._instance.config.error_tracking.__exceptionRateLimiterBucketSize)&&void 0!==s?s:10,refillInterval:1e4,Gt:zo}),this.qt=this.vo(),this.startIfEnabledOrStop()}vo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return U(t)?e=f({},e,t):(N(t)?this.co:t)&&(e=f({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.qt.capture_console_errors||this.qt.capture_unhandled_errors||this.qt.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(zo.info(\"enabled\"),this.ho(),this.lr(this.so)):this.ho()}lr(t){var e,i;null!=(e=h.__PosthogExtensions__)&&e.errorWrappingFunctions&&t(),null==(i=h.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this._instance,\"exception-autocapture\",(e=>{if(e)return zo.error(\"failed to load script\",e);t()}))}ho(){var t,e,i;null==(t=this.ao)||t.call(this),this.ao=void 0,null==(e=this.uo)||e.call(this),this.uo=void 0,null==(i=this.lo)||i.call(this),this.lo=void 0}onRemoteConfig(t){\"autocaptureExceptions\"in t&&(this.co=!!t.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Ye]:this.co}),this.qt=this.vo(),this.startIfEnabledOrStop())}onConfigChange(){this.qt=this.vo()}captureException(t){var e,i,r,s=null!==(e=null==t||null==(i=t.$exception_list)||null==(i=i[0])?void 0:i.type)&&void 0!==e?e:\"Exception\";this.do.consumeRateLimit(s)?zo.info(\"Skipping exception capture because of client rate limiting.\",{exception:s}):null==(r=this._instance.exceptions)||r.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,i;this.fo=[],this.po=new ae([new be,new Pe,new we,new ye,new ke,new Te,new Ee,new Re],function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),r=1;e>r;r++)i[r-1]=arguments[r];return function(e,r){void 0===r&&(r=0);for(var s=[],n=e.split(\"\\n\"),o=r;n.length>o;o++){var a=n[o];if(1024>=a.length){var l=me.test(a)?a.replace(me,\"$1\"):a;if(!l.match(/\\S*Error: /)){for(var u of i){var h=u(l,t);if(h){s.push(h);break}}if(s.length>=50)break}}}return function(t){if(!t.length)return[];var e=Array.from(t);return e.reverse(),e.slice(0,50).map((t=>{return f({},t,{filename:t.filename||(i=e,i[i.length-1]||{}).filename,function:t.function||le});var i}))}(s)}}(\"web:javascript\",pe,ge)),this._instance=t,this.fo=null!==(e=null==(i=this._instance.persistence)?void 0:i.get_property(Je))&&void 0!==e?e:[],this.mo=Fe(this.yo()),this.bo=new Me(this.mo)}onConfigChange(){this.mo=Fe(this.yo()),this.bo.setConfig(this.mo)}onRemoteConfig(t){var e,i,r;if(\"errorTracking\"in t){var s=null!==(e=null==(i=t.errorTracking)?void 0:i.suppressionRules)&&void 0!==e?e:[],n=null==(r=t.errorTracking)?void 0:r.captureExtensionExceptions;this.fo=s,this._instance.persistence&&this._instance.persistence.register({[Je]:this.fo,[Ke]:n})}}get _o(){var t,e=!!this._instance.get_property(Ke),i=this._instance.config.error_tracking.captureExtensionExceptions;return null!==(t=null!=i?i:e)&&void 0!==t&&t}buildProperties(t,e){return this.po.buildFromUnknown(t,{syntheticException:null==e?void 0:e.syntheticException,mechanism:{handled:null==e?void 0:e.handled}})}addExceptionStep(t,e){if(this.mo.enabled)try{if(!j(t)||0===t.trim().length)return void ma.warn(\"Ignoring exception step because message must be a non-empty string\");var i=this.wo(e),{sanitizedProperties:r,droppedKeys:s}=function(t){if(!t)return{sanitizedProperties:{},droppedKeys:[]};var e=[];return{sanitizedProperties:Object.keys(t).reduce(((i,r)=>Ce.has(r)?(e.push(r),i):(i[r]=t[r],i)),{}),droppedKeys:e}}(i);s.length>0&&ma.warn(\"Ignoring reserved exception step fields\",{droppedKeys:s}),this.bo.add(f({[Oe]:t,[Ie]:(new Date).toISOString()},r))}catch(t){ma.error(\"Failed to add exception step. Ignoring breadcrumb.\",t)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.xo(e)){if(this.So(e))return this.ko(\"Exception dropped: matched a suppression rule\"),void ma.info(\"Skipping exception capture because a suppression rule matched\");if(!this._o&&this.Co(e))return this.ko(\"Exception dropped: thrown by a browser extension\"),void ma.info(\"Skipping exception capture because it was thrown by an extension\");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.Io(e))return this.ko(\"Exception dropped: thrown by the PostHog SDK\"),void ma.info(\"Skipping exception capture because it was thrown by the PostHog SDK\")}var i=this.mo.enabled&&H(t.$exception_steps)?this.To(t):t;try{var r=this._instance.capture(\"$exception\",i,{_noTruncate:!0,_batchKey:\"exceptionEvent\",en:!0});return r&&this.bo.clear(),r}catch(t){return ma.error(\"Failed to capture exception event. Dropping this exception.\",t),void this.bo.clear()}}catch(t){return void ma.error(\"Failed to process exception event. Ignoring this exception.\",t)}}To(t){try{var e=this.bo.getAttachable();return 0===e.length?t:f({},t,{$exception_steps:e})}catch(e){return ma.error(\"Failed to read buffered exception steps. Capturing exception without steps.\",e),t}}ko(t){this.mo.enabled&&this.bo.add({[Oe]:t,[Ie]:(new Date).toISOString()})}wo(t){return U(t)?f({},t):{}}yo(){var t,e;return null!==(t=null==(e=this._instance.config.error_tracking)?void 0:e.exception_steps)&&void 0!==t?t:{}}So(t){if(0===t.length)return!1;var e=t.reduce(((t,e)=>{var{type:i,value:r}=e;return j(i)&&i.length>0&&t.$exception_types.push(i),j(r)&&r.length>0&&t.$exception_values.push(r),t}),{$exception_types:[],$exception_values:[]});return this.fo.some((t=>{var i=t.values.map((t=>{var i,r=$n[t.operator],s=M(t.value)?t.value:[t.value],n=null!==(i=e[t.key])&&void 0!==i?i:[];return s.length>0&&r(s,n)}));return\"OR\"===t.type?i.some(Boolean):i.every(Boolean)}))}Co(t){return t.flatMap((t=>{var e,i;return null!==(e=null==(i=t.stacktrace)?void 0:i.frames)&&void 0!==e?e:[]})).some((t=>t.filename&&t.filename.startsWith(\"chrome-extension://\")))}Io(t){if(t.length>0){var e,i,r,s,n=null!==(e=null==(i=t[0].stacktrace)?void 0:i.frames)&&void 0!==e?e:[],o=n[n.length-1];return null!==(r=null==o||null==(s=o.filename)?void 0:s.includes(\"posthog.com/static\"))&&void 0!==r&&r}return!1}xo(t){return!H(t)&&M(t)}}},Ra=f({productTours:class{get ni(){return this._instance.persistence}constructor(t){this.Eo=null,this.Mo=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){\"productTours\"in t&&(this.ni&&this.ni.register({[Ze]:!!t.productTours}),this.loadIfEnabled())}loadIfEnabled(){var t,e;this.Eo||(t=this._instance).config.disable_product_tours||null==(e=t.persistence)||!e.get_property(Ze)||this.lr((()=>this.Po()))}lr(t){var e,i;null!=(e=h.__PosthogExtensions__)&&e.generateProductTours?t():null==(i=h.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this._instance,\"product-tours\",(e=>{e?ta.error(\"Could not load product tours script\",e):t()}))}Po(){var t;!this.Eo&&null!=(t=h.__PosthogExtensions__)&&t.generateProductTours&&(this.Eo=h.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(void 0===e&&(e=!1),!M(this.Mo)||e){var i=this.ni;if(i){var r=i.props[yi];if(M(r)&&!e)return this.Mo=r,void t(r,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor(\"api\",\"/api/product_tours/?token=\"+this._instance.config.token),method:\"GET\",callback:e=>{var r=e.statusCode;if(200!==r||!e.json){var s=\"Product Tours API could not be loaded, status: \"+r;return ta.error(s),void t([],{isLoaded:!1,error:s})}var n=M(e.json.product_tours)?e.json.product_tours:[];this.Mo=n,i&&i.register({[yi]:n}),t(n,{isLoaded:!0})}})}else t(this.Mo,{isLoaded:!0})}getActiveProductTours(t){H(this.Eo)?t([],{isLoaded:!1,error:\"Product tours not loaded\"}):this.Eo.getActiveProductTours(t)}showProductTour(t){var e;null==(e=this.Eo)||e.showTourById(t)}previewTour(t){this.Eo?this.Eo.previewTour(t):this.lr((()=>{var e;this.Po(),null==(e=this.Eo)||e.previewTour(t)}))}dismissProductTour(){var t;null==(t=this.Eo)||t.dismissTour(\"user_clicked_skip\")}nextStep(){var t;null==(t=this.Eo)||t.nextStep()}previousStep(){var t;null==(t=this.Eo)||t.previousStep()}clearCache(){var t;this.Mo=null,null==(t=this.ni)||t.unregister(yi)}resetTour(t){var e;null==(e=this.Eo)||e.resetTour(t)}resetAllTours(){var t;null==(t=this.Eo)||t.resetAllTours()}cancelPendingTour(t){var e;null==(e=this.Eo)||e.cancelPendingTour(t)}}},Sa),Pa={siteApps:class{constructor(t){this._instance=t,this.Ro=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}Oo(t,e){if(e){var i=this.globalsForEvent(e);this.Ro.push(i),this.Ro.length>1e3&&(this.Ro=this.Ro.slice(10))}}get siteAppLoaders(){var t;return null==(t=h._POSTHOG_REMOTE_CONFIG)||null==(t=t[this._instance.config.token])?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.Oo.bind(this));this.Lo=()=>{t(),this.Ro=[],this.Lo=void 0}}}globalsForEvent(t){var e,i,r,s,n,o,a;if(!t)throw new Error(\"Event payload is required\");var l={},u=this._instance.get_property(\"$groups\")||[],h=this._instance.get_property(\"$stored_group_properties\")||{};for(var[d,v]of Object.entries(h))l[d]={id:u[d],type:d,properties:v};var{$set_once:c,$set:p}=t;return{event:f({},_(t,ea),{properties:f({},t.properties,p?{$set:f({},null!==(e=null==(i=t.properties)?void 0:i.$set)&&void 0!==e?e:{},p)}:{},c?{$set_once:f({},null!==(r=null==(s=t.properties)?void 0:s.$set_once)&&void 0!==r?r:{},c)}:{}),elements_chain:null!==(n=null==(o=t.properties)?void 0:o.$elements_chain)&&void 0!==n?n:\"\",distinct_id:null==(a=t.properties)?void 0:a.distinct_id}),person:{properties:this._instance.get_property(\"$stored_person_properties\")},groups:l}}setupSiteApp(t){var e=this.apps[t.id],i=()=>{var i;!e.errored&&this.Ro.length&&(ia.info(\"Processing \"+this.Ro.length+\" events for site app with id \"+t.id),this.Ro.forEach((t=>null==e.processEvent?void 0:e.processEvent(t))),e.processedBuffer=!0),Object.values(this.apps).every((t=>t.processedBuffer||t.errored))&&(null==(i=this.Lo)||i.call(this))},r=!1,s=s=>{e.errored=!s,e.loaded=!0,ia.info(\"Site app with id \"+t.id+\" \"+(s?\"loaded\":\"errored\")),r&&i()};try{var{processEvent:n}=t.init({posthog:this._instance,callback(t){s(t)}});n&&(e.processEvent=n),r=!0}catch(e){ia.error(ra+t.id,e),s(!1)}if(r&&e.loaded)try{i()}catch(i){ia.error(\"Error while processing buffered events PostHog app with config id \"+t.id,i),e.errored=!0}}Fo(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var i of t)this.setupSiteApp(i)}Ao(t){if(0!==Object.keys(this.apps).length){var e=this.globalsForEvent(t);for(var i of Object.values(this.apps))try{null==i.processEvent||i.processEvent(e)}catch(e){ia.error(\"Error while processing event \"+t.event+\" for site app \"+i.id,e)}}}onRemoteConfig(t){var e,i,r,s=this;if(null!=(e=this.siteAppLoaders)&&e.length)return this.isEnabled?(this.Fo(),void this._instance.on(\"eventCaptured\",(t=>this.Ao(t)))):void ia.error('PostHog site apps are disabled. Enable the \"opt_in_site_apps\" config to proceed.');if(null==(i=this.Lo)||i.call(this),null!=(r=t.siteApps)&&r.length)if(this.isEnabled){var n=function(t){var e;h[\"__$$ph_site_app_\"+t]=s._instance,null==(e=h.__PosthogExtensions__)||null==e.loadSiteApp||e.loadSiteApp(s._instance,a,(e=>{if(e)return ia.error(ra+t,e)}))};for(var{id:o,url:a}of t.siteApps)n(o)}else ia.error('PostHog site apps are disabled. Enable the \"opt_in_site_apps\" config to proceed.')}}},Oa={tracingHeaders:class{constructor(t){this.No=void 0,this.$o=void 0,this.so=()=>{var t,e,i=this.Do()||[];N(this.No)&&(null==(t=h.__PosthogExtensions__)||null==(t=t.tracingHeadersPatchFns)||t._patchXHR(i,this._instance.get_distinct_id(),this._instance.sessionManager)),N(this.$o)&&(null==(e=h.__PosthogExtensions__)||null==(e=e.tracingHeadersPatchFns)||e._patchFetch(i,this._instance.get_distinct_id(),this._instance.sessionManager))},this._instance=t}initialize(){this.startIfEnabledOrStop()}lr(t){var e,i;null!=(e=h.__PosthogExtensions__)&&e.tracingHeadersPatchFns&&t(),null==(i=h.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this._instance,\"tracing-headers\",(e=>{if(e)return Ho.error(\"failed to load script\",e);t()}))}Do(){var t;return null!==(t=this._instance.config.addTracingHeaders)&&void 0!==t?t:this._instance.config.__add_tracing_headers}startIfEnabledOrStop(){var t,e;this.Do()?this.lr(this.so):(null==(t=this.No)||t.call(this),null==(e=this.$o)||e.call(this),this.No=void 0,this.$o=void 0)}}},Ia=f({surveys:class{get qt(){return this._instance.config}constructor(t){this.qo=void 0,this._surveyManager=null,this.jo=!1,this.Ho=[],this.Uo=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.qt.disable_surveys){var e=t.surveys;if(H(e))return Cn.warn(\"Flags not loaded yet. Not loading surveys.\");var i=M(e);this.qo=i?e.length>0:e,Cn.info(\"flags response received, isSurveysEnabled: \"+this.qo),this.loadIfEnabled()}}reset(){localStorage.removeItem(\"lastSeenSurveyDate\");for(var t=[],e=0;e<localStorage.length;e++){var i=localStorage.key(e);(null!=i&&i.startsWith(An)||null!=i&&i.startsWith(\"inProgressSurvey_\"))&&t.push(i)}t.forEach((t=>localStorage.removeItem(t)))}loadIfEnabled(){if(!this._surveyManager)if(this.jo)Cn.info(\"Already initializing surveys, skipping...\");else if(this.qt.disable_surveys)Cn.info(ua);else if(this.qt.cookieless_mode&&this._instance.consent.isOptedOut())Cn.info(\"Not loading surveys in cookieless mode without consent.\");else{var t=null==h?void 0:h.__PosthogExtensions__;if(t){if(!N(this.qo)||this.qt.advanced_enable_surveys){var e=this.qo||this.qt.advanced_enable_surveys;this.jo=!0;try{var i=t.generateSurveys;if(i)return void this.Bo(i,e);var r=t.loadExternalDependency;if(!r)return void this.zo(Ui);r(this._instance,\"surveys\",(i=>{i||!t.generateSurveys?this.zo(\"Could not load surveys script\",i):this.Bo(t.generateSurveys,e)}))}catch(t){throw this.zo(\"Error initializing surveys\",t),t}finally{this.jo=!1}}}else Cn.error(\"PostHog Extensions not found.\")}}Bo(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new aa(this._instance),Cn.info(\"Surveys loaded successfully\"),this.Vo({isLoaded:!0})}zo(t,e){Cn.error(t,e),this.Vo({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Ho.push(t),this._surveyManager&&this.Vo({isLoaded:!0}),()=>{this.Ho=this.Ho.filter((e=>e!==t))}}getSurveys(t,e){if(void 0===e&&(e=!1),this.qt.disable_surveys)return Cn.info(ua),t([]);var i,r=this._instance.get_property(mi);if(r&&!e)return t(r,{isLoaded:!0});\"undefined\"!=typeof Promise&&this.Uo?this.Uo.then((e=>{var{surveys:i,context:r}=e;return t(i,r)})):(\"undefined\"!=typeof Promise&&(this.Uo=new Promise((t=>{i=t}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor(\"api\",\"/api/surveys/?token=\"+this.qt.token),method:\"GET\",timeout:this.qt.surveys_request_timeout_ms,callback:e=>{var r;this.Uo=null;var s=e.statusCode;if(200!==s||!e.json){var n=\"Surveys API could not be loaded, status: \"+s;Cn.error(n);var o={isLoaded:!1,error:n};return t([],o),void(null==i||i({surveys:[],context:o}))}var a,l=e.json.surveys||[],u=l.filter((t=>function(t){return!(!t.start_date||t.end_date)}(t)&&(function(t){var e;return!(null==(e=t.conditions)||null==(e=e.events)||null==(e=e.values)||!e.length)}(t)||function(t){var e;return!(null==(e=t.conditions)||null==(e=e.actions)||null==(e=e.values)||!e.length)}(t))));u.length>0&&(null==(a=this._surveyEventReceiver)||a.register(u)),null==(r=this._instance.persistence)||r.register({[mi]:l});var h={isLoaded:!0};t(l,h),null==i||i({surveys:l,context:h})}}))}Vo(t){for(var e of this.Ho)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(t){Cn.error(\"Error in survey callback\",t)}}getActiveMatchingSurveys(t,e){if(void 0===e&&(e=!1),!H(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);Cn.warn(\"init was not called\")}Wo(t){var e=null;return this.getSurveys((i=>{var r;e=null!==(r=i.find((e=>e.id===t)))&&void 0!==r?r:null})),e}Zo(t){if(H(this._surveyManager))return{eligible:!1,reason:la};var e=\"string\"==typeof t?this.Wo(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:\"Survey not found\"}}canRenderSurvey(t){if(H(this._surveyManager))return Cn.warn(\"init was not called\"),{visible:!1,disabledReason:la};var e=this.Zo(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return H(this._surveyManager)?(Cn.warn(\"init was not called\"),Promise.resolve({visible:!1,disabledReason:la})):new Promise((i=>{this.getSurveys((e=>{var r,s=null!==(r=e.find((e=>e.id===t)))&&void 0!==r?r:null;if(s){var n=this.Zo(s);i({visible:n.eligible,disabledReason:n.reason})}else i({visible:!1,disabledReason:\"Survey not found\"})}),e)}))}renderSurvey(t,e,i){var s;if(H(this._surveyManager))Cn.warn(\"init was not called\");else{var n=\"string\"==typeof t?this.Wo(t):t;if(null!=n&&n.id)if(Fn.includes(n.type)){var o=null==r?void 0:r.querySelector(e);if(o)return null!=(s=n.appearance)&&s.surveyPopupDelaySeconds?(Cn.info(\"Rendering survey \"+n.id+\" with delay of \"+n.appearance.surveyPopupDelaySeconds+\" seconds\"),void setTimeout((()=>{var t,e;Cn.info(\"Rendering survey \"+n.id+\" with delay of \"+(null==(t=n.appearance)?void 0:t.surveyPopupDelaySeconds)+\" seconds\"),null==(e=this._surveyManager)||e.renderSurvey(n,o,i),Cn.info(\"Survey \"+n.id+\" rendered\")}),1e3*n.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(n,o,i);Cn.warn(\"Survey element not found\")}else Cn.warn(\"Surveys of type \"+n.type+\" cannot be rendered in the app\");else Cn.warn(\"Survey not found\")}}displaySurvey(t,e){var i;if(H(this._surveyManager))Cn.warn(\"init was not called\");else{var r=this.Wo(t);if(r){var s=r;if(null!=(i=r.appearance)&&i.surveyPopupDelaySeconds&&e.ignoreDelay&&(s=f({},r,{appearance:f({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==vs.Popover&&e.initialResponses&&Cn.warn(\"initialResponses is only supported for popover surveys. prefill will not be applied.\"),!1===e.ignoreConditions){var n=this.canRenderSurvey(r);if(!n.visible)return void Cn.warn(\"Survey is not eligible to be displayed: \",n.disabledReason)}e.displayType!==vs.Inline?this._surveyManager.handlePopoverSurvey(s,e):this.renderSurvey(s,e.selector,e.properties)}else Cn.warn(\"Survey not found\")}}cancelPendingSurvey(t){H(this._surveyManager)?Cn.warn(\"init was not called\"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;null==(t=this._surveyManager)||t.handlePageUnload()}}},Sa),Ca={toolbar:class{constructor(t){this.instance=t}Go(t){h.ph_toolbar_state=t}Qo(){var t;return null!==(t=h.ph_toolbar_state)&&void 0!==t?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(e,i,s){if(void 0===e&&(e=void 0),void 0===i&&(i=void 0),void 0===s&&(s=void 0),nr(this.instance.config))return!1;if(!t||!r)return!1;e=null!=e?e:t.location,s=null!=s?s:t.history;try{if(!i){try{t.localStorage.setItem(\"test\",\"test\"),t.localStorage.removeItem(\"test\")}catch(t){return!1}i=null==t?void 0:t.localStorage}var n,o=ha||Lr(e.hash,\"__posthog\")||Lr(e.hash,\"state\"),a=o?Zi((()=>JSON.parse(atob(decodeURIComponent(o)))))||Zi((()=>JSON.parse(decodeURIComponent(o)))):null;return a&&\"ph_authorize\"===a.action?((n=a).source=\"url\",n&&Object.keys(n).length>0&&(a.desiredHash?e.hash=a.desiredHash:s?s.replaceState(s.state,\"\",e.pathname+e.search):e.hash=\"\")):((n=JSON.parse(i.getItem(da)||\"{}\")).source=\"localstorage\",delete n.userIntent),!(!n.token||this.instance.config.token!==n.token||(this.loadToolbar(n),0))}catch(t){return!1}}Jo(t){var e=h.ph_load_toolbar||h.ph_load_editor;!H(e)&&D(e)?e(t,this.instance):va.warn(\"No toolbar load function found\")}loadToolbar(e){var i=!(null==r||!r.getElementById(Ci));if(!t||i)return!1;var s=\"custom\"===this.instance.requestRouter.region&&this.instance.config.advanced_disable_toolbar_metrics,n=f({token:this.instance.config.token},e,{apiURL:this.instance.requestRouter.endpointFor(\"ui\")},s?{instrument:!1}:{});if(t.localStorage.setItem(da,JSON.stringify(f({},n,{source:void 0}))),2===this.Qo())this.Jo(n);else if(0===this.Qo()){var o;this.Go(1),null==(o=h.__PosthogExtensions__)||null==o.loadExternalDependency||o.loadExternalDependency(this.instance,\"toolbar\",(t=>{if(t)return va.error(\"[Toolbar] Failed to load\",t),void this.Go(0);this.Go(2),this.Jo(n)})),sr(t,\"turbolinks:load\",(()=>{this.Go(0),this.loadToolbar(n)}))}return!0}Ko(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,i){return void 0===t&&(t=void 0),void 0===e&&(e=void 0),void 0===i&&(i=void 0),this.maybeLoadToolbar(t,e,i)}}},Aa=f({experiments:wa},Sa),Fa={conversations:class{constructor(t){this.Yo=void 0,this._conversationsManager=null,this.Xo=!1,this.ea=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations){var e=t.conversations;H(e)||(W(e)?this.Yo=e:(this.Yo=e.enabled,this.ea=e),this.loadIfEnabled())}}reset(){var t;null==(t=this._conversationsManager)||t.reset(),this._conversationsManager=null,this.Yo=void 0,this.ea=null}loadIfEnabled(){if(!(this._conversationsManager||this.Xo||this._instance.config.disable_conversations||nr(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=null==h?void 0:h.__PosthogExtensions__;if(t&&!N(this.Yo)&&this.Yo)if(this.ea&&this.ea.token){this.Xo=!0;try{var e=t.initConversations;if(e)return this.ta(e),void(this.Xo=!1);var i=t.loadExternalDependency;if(!i)return void this.ra(Ui);i(this._instance,\"conversations\",(e=>{e||!t.initConversations?this.ra(\"Could not load conversations script\",e):this.ta(t.initConversations),this.Xo=!1}))}catch(t){this.ra(\"Error initializing conversations\",t),this.Xo=!1}}else xa.error(\"Conversations enabled but missing token in remote config.\")}}ta(t){if(this.ea)try{this._conversationsManager=t(this.ea,this._instance),xa.info(\"Conversations loaded successfully\")}catch(t){this.ra(\"Error completing conversations initialization\",t)}else xa.error(\"Cannot complete initialization: remote config is null\")}ra(t,e){xa.error(t,e),this._conversationsManager=null,this.Xo=!1}show(){this._conversationsManager?this._conversationsManager.show():xa.warn(\"Conversations not loaded yet.\")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return!0===this.Yo&&!B(this._conversationsManager)}isVisible(){var t,e;return null!==(t=null==(e=this._conversationsManager)?void 0:e.isVisible())&&void 0!==t&&t}sendMessage(t,e,i){var r=this;return p((function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,e,i):(xa.warn(Ea),null)}))()}getMessages(t,e){var i=this;return p((function*(){return i._conversationsManager?i._conversationsManager.getMessages(t,e):(xa.warn(Ea),null)}))()}markAsRead(t){var e=this;return p((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(xa.warn(Ea),null)}))()}getTickets(t){var e=this;return p((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(xa.warn(Ea),null)}))()}requestRestoreLink(t){var e=this;return p((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(xa.warn(Ea),null)}))()}restoreFromToken(t){var e=this;return p((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(xa.warn(Ea),null)}))()}restoreFromUrlToken(){var t=this;return p((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(xa.warn(Ea),null)}))()}getCurrentTicketId(){var t,e;return null!==(t=null==(e=this._conversationsManager)?void 0:e.getCurrentTicketId())&&void 0!==t?t:null}getWidgetSessionId(){var t,e;return null!==(t=null==(e=this._conversationsManager)?void 0:e.getWidgetSessionId())&&void 0!==t?t:null}ln(){var t;null==(t=this._conversationsManager)||t.setIdentity()}hn(){var t;null==(t=this._conversationsManager)||t.clearIdentity()}}},Ma={logs:class{constructor(t){var e;this.ia=!1,this.na=!1,this.Gt=Ne(\"[logs]\"),this.sa=[],this.oa=0,this.aa=0,this.ua=!1,this._instance=t,this._instance&&null!=(e=this._instance.config.logs)&&e.captureConsoleLogs&&(this.ia=!0)}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e,i=null==(e=t.logs)?void 0:e.captureConsoleLogs;!H(i)&&i&&(this.ia=!0,this.loadIfEnabled())}reset(){this.sa=[],this.qr&&(clearTimeout(this.qr),this.qr=void 0),this.oa=0,this.aa=0,this.ua=!1}loadIfEnabled(){if(this.ia&&!this.na){var t=null==h?void 0:h.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,\"logs\",(e=>{var i;e||null==(i=t.logs)||!i.initializeLogs?this.Gt.error(\"Could not load logs script\",e):(t.logs.initializeLogs(this._instance),this.na=!0)})):this.Gt.error(Ui)}else this.Gt.error(\"PostHog Extensions not found.\")}}captureLog(t){var e,i,r,s,n,o;if(this._instance.is_capturing())if(t&&t.body){var a=null!==(e=null==(i=this._instance.config.logs)?void 0:i.flushIntervalMs)&&void 0!==e?e:3e3,l=null!==(r=null==(s=this._instance.config.logs)?void 0:s.maxLogsPerInterval)&&void 0!==r?r:1e3,u=Date.now();if(a>u-this.aa||(this.aa=u,this.oa=0,this.ua=!1),l>this.oa){this.oa++;var h=function(t,e){var i=t.level||\"info\",{text:r,number:s}=ie[i]||re,n=String(Date.now())+\"000000\",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.currentUrl&&(o[\"url.full\"]=e.currentUrl),e.screenName&&(o[\"screen.name\"]=e.screenName),e.appState&&(o[\"app.state\"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=f({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:s,severityText:r,body:{stringValue:t.body},attributes:ne(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),N(t.trace_flags)||(l.flags=t.trace_flags),l}(t,this.la());this.sa.push({record:h}),(null!==(n=null==(o=this._instance.config.logs)?void 0:o.maxBufferSize)&&void 0!==n?n:100)>this.sa.length?this.ha():this.flushLogs()}else this.ua||(this.Gt.warn(\"captureLog dropping logs: exceeded \"+l+\" logs per \"+a+\"ms\"),this.ua=!0)}else this.Gt.warn(\"captureLog requires a body\")}get logger(){return this.ca||(this.ca={trace:(t,e)=>this.captureLog({body:t,level:\"trace\",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:\"debug\",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:\"info\",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:\"warn\",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:\"error\",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:\"fatal\",attributes:e})}),this.ca}flushLogs(t){if(this.qr&&(clearTimeout(this.qr),this.qr=void 0),0!==this.sa.length){var e=this.sa;this.sa=[];var i=this._instance.config.logs,r=f({\"service.name\":(null==i?void 0:i.serviceName)||\"unknown_service\"},(null==i?void 0:i.environment)&&{\"deployment.environment\":i.environment},(null==i?void 0:i.serviceVersion)&&{\"service.version\":i.serviceVersion},null==i?void 0:i.resourceAttributes),s=function(t,e,i,r){return{resourceLogs:[{resource:{attributes:ne(e)},scopeLogs:[{scope:{name:i,version:r},logRecords:t}]}]}}(e.map((t=>t.record)),r,v.LIB_NAME,v.LIB_VERSION),n=this._instance.requestRouter.endpointFor(\"api\",\"/i/v1/logs\")+\"?token=\"+encodeURIComponent(this._instance.config.token);this._instance.Bi({method:\"POST\",url:n,data:s,compression:\"best-available\",batchKey:\"logs\",transport:t})}}ha(){var t,e;this.qr||(this.qr=setTimeout((()=>{this.qr=void 0,this.flushLogs()}),null!==(t=null==(e=this._instance.config.logs)?void 0:e.flushIntervalMs)&&void 0!==t?t:3e3))}la(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var{sessionId:i}=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0);e.sessionId=i}if(null!=h&&null!=(t=h.location)&&t.href&&(e.currentUrl=h.location.href),this._instance.featureFlags){var r=this._instance.featureFlags.getFlags();r&&r.length>0&&(e.activeFeatureFlags=r)}return e}}},Da=f({},Sa,$a,Ta,ka,Ra,Pa,Ia,Oa,Ca,Aa,Fa,Ma);Zn.__defaultExtensionClasses=f({},Da);var Ua,La=(Ua=jn[Gn]=new Zn,function(){function e(){e.done||(e.done=!0,Yn=!1,Ki(jn,(function(t){t._dom_loaded()})))}null!=r&&r.addEventListener?\"complete\"===r.readyState?e():sr(r,\"DOMContentLoaded\",e,{capture:!1}):t&&Le.error(\"Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized\")}(),Ua);export{ws as Compression,cs as DEFAULT_PRODUCT_TOUR_APPEARANCE,vs as DisplaySurveyType,Zn as PostHog,ps as ProductTourEventName,fs as ProductTourEventProperties,hs as SurveyEventName,ds as SurveyEventProperties,is as SurveyEventType,ss as SurveyPosition,ls as SurveyQuestionBranchingType,as as SurveyQuestionType,us as SurveySchedule,ns as SurveyTabPosition,os as SurveyType,rs as SurveyWidgetType,La as default,La as posthog,ys as severityLevels};\n//# sourceMappingURL=module.js.map\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type DisconnectReason } from \"livekit-client\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport { type MatrixRTCSession } from \"matrix-js-sdk/lib/matrixrtc\";\n\nimport {\n type IPosthogEvent,\n PosthogAnalytics,\n RegistrationType,\n} from \"./PosthogAnalytics\";\n\ninterface CallEnded extends IPosthogEvent {\n eventName: \"CallEnded\";\n // the callId posthog key is essentially a Matrix roomId\n callId: string;\n callParticipantsOnLeave: number;\n callParticipantsMax: number;\n callDuration: number;\n roomEventEncryptionKeysSent: number;\n roomEventEncryptionKeysReceived: number;\n roomEventEncryptionKeysReceivedAverageAge: number;\n callReconnectingCount: number;\n callReconnectingCountSync: number;\n callReconnectingCountMembership: number;\n callReconnectingCountProbablyLeft: number;\n callReconnectingCountLivekit: number;\n}\n\nexport class CallEndedTracker {\n private cache: {\n startTime?: Date;\n maxParticipantsCount: number;\n reconnectingCount: number;\n reconnectingCountByReason: Record<CallReconnectingReason, number>;\n } = {\n startTime: undefined,\n maxParticipantsCount: 0,\n reconnectingCount: 0,\n reconnectingCountByReason: {\n sync: 0,\n membership: 0,\n probablyLeft: 0,\n livekit: 0,\n },\n };\n\n public cacheStartCall(time: Date): void {\n this.cache = {\n startTime: time,\n maxParticipantsCount: 0,\n reconnectingCount: 0,\n reconnectingCountByReason: {\n sync: 0,\n membership: 0,\n probablyLeft: 0,\n livekit: 0,\n },\n };\n }\n\n public cacheParticipantCountChanged(count: number): void {\n this.cache.maxParticipantsCount = Math.max(\n count,\n this.cache.maxParticipantsCount,\n );\n }\n\n public cacheReconnecting(reason: CallReconnectingReason): void {\n this.cache.reconnectingCount++;\n this.cache.reconnectingCountByReason[reason]++;\n }\n\n public track(\n callId: string,\n callParticipantsNow: number,\n sendInstantly: boolean,\n rtcSession: MatrixRTCSession,\n ): void {\n if (this.cache.startTime) {\n PosthogAnalytics.instance.trackEvent<CallEnded>(\n {\n eventName: \"CallEnded\",\n callId: callId,\n callParticipantsMax: this.cache.maxParticipantsCount,\n callParticipantsOnLeave: callParticipantsNow,\n callDuration: (Date.now() - this.cache.startTime.getTime()) / 1000,\n roomEventEncryptionKeysSent:\n rtcSession.statistics.counters.roomEventEncryptionKeysSent,\n roomEventEncryptionKeysReceived:\n rtcSession.statistics.counters.roomEventEncryptionKeysReceived,\n roomEventEncryptionKeysReceivedAverageAge:\n rtcSession.statistics.counters.roomEventEncryptionKeysReceived > 0\n ? rtcSession.statistics.totals\n .roomEventEncryptionKeysReceivedTotalAge /\n rtcSession.statistics.counters.roomEventEncryptionKeysReceived\n : 0,\n callReconnectingCount: this.cache.reconnectingCount,\n callReconnectingCountSync: this.cache.reconnectingCountByReason.sync,\n callReconnectingCountMembership:\n this.cache.reconnectingCountByReason.membership,\n callReconnectingCountProbablyLeft:\n this.cache.reconnectingCountByReason.probablyLeft,\n callReconnectingCountLivekit:\n this.cache.reconnectingCountByReason.livekit,\n },\n { send_instantly: sendInstantly },\n );\n } else {\n logger.warn(\n \"[PosthogEvents] Failed to send posthog callEnded event due to missing startTime\",\n );\n }\n }\n}\n\ninterface CallStarted extends IPosthogEvent {\n eventName: \"CallStarted\";\n // the callId posthog key is essentially a Matrix roomId\n callId: string;\n}\n\nexport class CallStartedTracker {\n public track(callId: string): void {\n PosthogAnalytics.instance.trackEvent<CallStarted>({\n eventName: \"CallStarted\",\n callId: callId,\n });\n }\n}\n\ninterface Signup extends IPosthogEvent {\n eventName: \"Signup\";\n signupDuration: number;\n}\n\nexport class SignupTracker {\n private cache: { signupStart: Date; signupEnd: Date } = {\n signupStart: new Date(0),\n signupEnd: new Date(0),\n };\n\n public cacheSignupStart(time: Date): void {\n this.cache.signupStart = time;\n }\n\n public getSignupEndTime(): Date {\n return this.cache.signupEnd;\n }\n\n public cacheSignupEnd(time: Date): void {\n this.cache.signupEnd = time;\n }\n\n public track(): void {\n PosthogAnalytics.instance.trackEvent<Signup>({\n eventName: \"Signup\",\n signupDuration: Date.now() - this.cache.signupStart.getTime(),\n });\n PosthogAnalytics.instance.setRegistrationType(RegistrationType.Registered);\n }\n}\n\ninterface Login extends IPosthogEvent {\n eventName: \"Login\";\n}\n\nexport class LoginTracker {\n public track(): void {\n PosthogAnalytics.instance.trackEvent<Login>({\n eventName: \"Login\",\n });\n PosthogAnalytics.instance.setRegistrationType(RegistrationType.Registered);\n }\n}\n\ninterface MuteMicrophone {\n eventName: \"MuteMicrophone\";\n targetMuteState: \"mute\" | \"unmute\";\n // the callId posthog key is essentially a Matrix roomId\n callId: string;\n}\n\nexport class MuteMicrophoneTracker {\n public track(targetIsMute: boolean, callId: string): void {\n PosthogAnalytics.instance.trackEvent<MuteMicrophone>({\n eventName: \"MuteMicrophone\",\n targetMuteState: targetIsMute ? \"mute\" : \"unmute\",\n callId,\n });\n }\n}\n\ninterface MuteCamera {\n eventName: \"MuteCamera\";\n targetMuteState: \"mute\" | \"unmute\";\n // the callId posthog key is essentially a Matrix roomId\n callId: string;\n}\n\nexport class MuteCameraTracker {\n public track(targetIsMute: boolean, callId: string): void {\n PosthogAnalytics.instance.trackEvent<MuteCamera>({\n eventName: \"MuteCamera\",\n targetMuteState: targetIsMute ? \"mute\" : \"unmute\",\n callId,\n });\n }\n}\n\ninterface UndecryptableToDeviceEvent {\n eventName: \"UndecryptableToDeviceEvent\";\n // the callId posthog key is essentially a Matrix roomId\n callId: string;\n}\n\nexport class UndecryptableToDeviceEventTracker {\n public track(callId: string): void {\n PosthogAnalytics.instance.trackEvent<UndecryptableToDeviceEvent>({\n eventName: \"UndecryptableToDeviceEvent\",\n callId,\n });\n }\n}\n\ninterface QualitySurveyEvent {\n eventName: \"QualitySurvey\";\n // the callId posthog key is essentially a Matrix roomId\n callId: string;\n feedbackText: string;\n stars: number;\n}\n\nexport class QualitySurveyEventTracker {\n public track(callId: string, feedbackText: string, stars: number): void {\n PosthogAnalytics.instance.trackEvent<QualitySurveyEvent>({\n eventName: \"QualitySurvey\",\n callId,\n feedbackText,\n stars,\n });\n }\n}\n\ninterface CallDisconnectedEvent {\n eventName: \"CallDisconnected\";\n reason?: DisconnectReason;\n}\n\nexport class CallDisconnectedEventTracker {\n public track(reason?: DisconnectReason): void {\n PosthogAnalytics.instance.trackEvent<CallDisconnectedEvent>({\n eventName: \"CallDisconnected\",\n reason,\n });\n }\n}\n\ninterface CallConnectDuration extends IPosthogEvent {\n eventName: \"CallConnectDuration\";\n totalDuration: number;\n websocketDuration: number;\n peerConnectionDuration: number;\n}\n\nexport class CallConnectDurationTracker {\n private connectStart = 0;\n private websocketConnected = 0;\n public cacheConnectStart(): void {\n this.connectStart = Date.now();\n }\n public cacheWsConnect(): void {\n this.websocketConnected = Date.now();\n }\n\n public track(options = { log: false }): void {\n const now = Date.now();\n const totalDuration = now - this.connectStart;\n const websocketDuration = this.websocketConnected - this.connectStart;\n const peerConnectionDuration = now - this.websocketConnected;\n PosthogAnalytics.instance.trackEvent<CallConnectDuration>({\n eventName: \"CallConnectDuration\",\n totalDuration,\n websocketDuration,\n peerConnectionDuration,\n });\n if (options.log)\n logger.log(\n `Time to connect:\\ntotal: ${totalDuration}ms\\npeerConnection: ${websocketDuration}ms\\nwebsocket: ${peerConnectionDuration}ms`,\n );\n }\n}\n\nexport type CallReconnectingReason =\n | \"sync\"\n | \"membership\"\n | \"probablyLeft\"\n | \"livekit\";\n\ninterface CallReconnecting extends IPosthogEvent {\n eventName: \"CallReconnecting\";\n // the callId posthog key is essentially a Matrix roomId\n callId: string;\n reason: CallReconnectingReason;\n reconnectDuration: number;\n}\n\nexport class CallReconnectingTracker {\n public track(\n callId: string,\n reason: CallReconnectingReason,\n reconnectDuration: number,\n ): void {\n PosthogAnalytics.instance.trackEvent<CallReconnecting>({\n eventName: \"CallReconnecting\",\n callId,\n reason,\n reconnectDuration,\n });\n }\n}\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","export var COMPLETE_NOTIFICATION = (function () { return createNotification('C', undefined, undefined); })();\nexport function errorNotification(error) {\n return createNotification('E', undefined, error);\n}\nexport function nextNotification(value) {\n return createNotification('N', value, undefined);\n}\nexport function createNotification(kind, value, error) {\n return {\n kind: kind,\n value: value,\n error: error,\n };\n}\n//# sourceMappingURL=NotificationFactories.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n __extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: false,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, (this._value = value));\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n __extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) { delay = 0; }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n setInterval: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function (handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n __extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n var _a;\n if (delay === void 0) { delay = 0; }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n if (delay === void 0) { delay = 0; }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n if (delay === void 0) { delay = 0; }\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype.unsubscribe = function () {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) { now = Scheduler.now; }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) { delay = 0; }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider.now;\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n __extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) { now = Scheduler.now; }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()));\n this._active = false;\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n return from(args, scheduler);\n}\n//# sourceMappingURL=of.js.map","import { createErrorClass } from './createErrorClass';\nexport var EmptyError = createErrorClass(function (_super) {\n return function EmptyErrorImpl() {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n };\n});\n//# sourceMappingURL=EmptyError.js.map","import { EmptyError } from './util/EmptyError';\nimport { SafeSubscriber } from './Subscriber';\nexport function firstValueFrom(source, config) {\n var hasConfig = typeof config === 'object';\n return new Promise(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n resolve(value);\n subscriber.unsubscribe();\n },\n error: reject,\n complete: function () {\n if (hasConfig) {\n resolve(config.defaultValue);\n }\n else {\n reject(new EmptyError());\n }\n },\n });\n source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=firstValueFrom.js.map","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","var isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys;\nexport function argsArgArrayOrObject(args) {\n if (args.length === 1) {\n var first_1 = args[0];\n if (isArray(first_1)) {\n return { args: first_1, keys: null };\n }\n if (isPOJO(first_1)) {\n var keys = getKeys(first_1);\n return {\n args: keys.map(function (key) { return first_1[key]; }),\n keys: keys,\n };\n }\n }\n return { args: args, keys: null };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n//# sourceMappingURL=argsArgArrayOrObject.js.map","export function createObject(keys, values) {\n return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {});\n}\n//# sourceMappingURL=createObject.js.map","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;\n if (observables.length === 0) {\n return from([], scheduler);\n }\n var result = new Observable(combineLatestInit(observables, scheduler, keys\n ?\n function (values) { return createObject(keys, values); }\n :\n identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform) {\n if (valueTransform === void 0) { valueTransform = identity; }\n return function (subscriber) {\n maybeSchedule(scheduler, function () {\n var length = observables.length;\n var values = new Array(length);\n var active = length;\n var remainingFirstValues = length;\n var _loop_1 = function (i) {\n maybeSchedule(scheduler, function () {\n var source = from(observables[i], scheduler);\n var hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n values[i] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, function () {\n if (!--active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n };\n for (var i = 0; i < length; i++) {\n _loop_1(i);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n }\n else {\n execute();\n }\n}\n//# sourceMappingURL=combineLatest.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map","import { mergeAll } from './mergeAll';\nexport function concatAll() {\n return mergeAll(1);\n}\n//# sourceMappingURL=concatAll.js.map","import { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function concat() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return concatAll()(from(args, popScheduler(args)));\n}\n//# sourceMappingURL=concat.js.map","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nexport function defer(observableFactory) {\n return new Observable(function (subscriber) {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=defer.js.map","import { __read } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nvar nodeEventEmitterMethods = ['addListener', 'removeListener'];\nvar eventTargetMethods = ['addEventListener', 'removeEventListener'];\nvar jqueryMethods = ['on', 'off'];\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));\n }\n var _a = __read(isEventTarget(target)\n ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; })\n :\n isNodeStyleEventEmitter(target)\n ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))\n : isJQueryStyleEventEmitter(target)\n ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))\n : [], 2), add = _a[0], remove = _a[1];\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom(target));\n }\n }\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n return new Observable(function (subscriber) {\n var handler = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return subscriber.next(1 < args.length ? args : args[0]);\n };\n add(handler);\n return function () { return remove(handler); };\n });\n}\nfunction toCommonHandlerRegistry(target, eventName) {\n return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; };\n}\nfunction isNodeStyleEventEmitter(target) {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n return isFunction(target.on) && isFunction(target.off);\n}\nfunction isEventTarget(target) {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n//# sourceMappingURL=fromEvent.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) { dueTime = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function (subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n//# sourceMappingURL=timer.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { timer } from './timer';\nexport function interval(period, scheduler) {\n if (period === void 0) { period = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n if (period < 0) {\n period = 0;\n }\n return timer(period, period, scheduler);\n}\n//# sourceMappingURL=interval.js.map","import { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\nexport function merge() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var concurrent = popNumber(args, Infinity);\n var sources = args;\n return !sources.length\n ?\n EMPTY\n : sources.length === 1\n ?\n innerFrom(sources[0])\n :\n mergeAll(concurrent)(from(sources, scheduler));\n}\n//# sourceMappingURL=merge.js.map","import { Observable } from '../Observable';\nimport { noop } from '../util/noop';\nexport var NEVER = new Observable(noop);\nexport function never() {\n return NEVER;\n}\n//# sourceMappingURL=never.js.map","var isArray = Array.isArray;\nexport function argsOrArgArray(args) {\n return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n//# sourceMappingURL=argsOrArgArray.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=filter.js.map","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nexport function race() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n sources = argsOrArgArray(sources);\n return sources.length === 1 ? innerFrom(sources[0]) : new Observable(raceInit(sources));\n}\nexport function raceInit(sources) {\n return function (subscriber) {\n var subscriptions = [];\n var _loop_1 = function (i) {\n subscriptions.push(innerFrom(sources[i]).subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (subscriptions) {\n for (var s = 0; s < subscriptions.length; s++) {\n s !== i && subscriptions[s].unsubscribe();\n }\n subscriptions = null;\n }\n subscriber.next(value);\n })));\n };\n for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n _loop_1(i);\n }\n };\n}\n//# sourceMappingURL=race.js.map","import { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function audit(durationSelector) {\n return operate(function (source, subscriber) {\n var hasValue = false;\n var lastValue = null;\n var durationSubscriber = null;\n var isComplete = false;\n var endDuration = function () {\n durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n isComplete && subscriber.complete();\n };\n var cleanupDuration = function () {\n durationSubscriber = null;\n isComplete && subscriber.complete();\n };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n hasValue = true;\n lastValue = value;\n if (!durationSubscriber) {\n innerFrom(durationSelector(value)).subscribe((durationSubscriber = createOperatorSubscriber(subscriber, endDuration, cleanupDuration)));\n }\n }, function () {\n isComplete = true;\n (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=audit.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\nexport function catchError(selector) {\n return operate(function (source, subscriber) {\n var innerSub = null;\n var syncUnsub = false;\n var handledResult;\n innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, function (err) {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n else {\n syncUnsub = true;\n }\n }));\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n }\n });\n}\n//# sourceMappingURL=catchError.js.map","import { createOperatorSubscriber } from './OperatorSubscriber';\nexport function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) {\n return function (source, subscriber) {\n var hasState = hasSeed;\n var state = seed;\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var i = index++;\n state = hasState\n ?\n accumulator(state, value, i)\n :\n ((hasState = true), value);\n emitOnNext && subscriber.next(state);\n }, emitBeforeComplete &&\n (function () {\n hasState && subscriber.next(state);\n subscriber.complete();\n })));\n };\n}\n//# sourceMappingURL=scanInternals.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function defaultIfEmpty(defaultValue) {\n return operate(function (source, subscriber) {\n var hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n hasValue = true;\n subscriber.next(value);\n }, function () {\n if (!hasValue) {\n subscriber.next(defaultValue);\n }\n subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=defaultIfEmpty.js.map","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n function () { return EMPTY; }\n : operate(function (source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n//# sourceMappingURL=take.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nexport function ignoreElements() {\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, noop));\n });\n}\n//# sourceMappingURL=ignoreElements.js.map","import { map } from './map';\nexport function mapTo(value) {\n return map(function () { return value; });\n}\n//# sourceMappingURL=mapTo.js.map","import { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function (source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function (value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); });\n}\n//# sourceMappingURL=delayWhen.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\nexport function delay(due, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration = timer(due, scheduler);\n return delayWhen(function () { return duration; });\n}\n//# sourceMappingURL=delay.js.map","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector) {\n if (keySelector === void 0) { keySelector = identity; }\n comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n return operate(function (source, subscriber) {\n var previousKey;\n var first = true;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var currentKey = keySelector(value);\n if (first || !comparator(previousKey, currentKey)) {\n first = false;\n previousKey = currentKey;\n subscriber.next(value);\n }\n }));\n });\n}\nfunction defaultCompare(a, b) {\n return a === b;\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { EmptyError } from '../util/EmptyError';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function throwIfEmpty(errorFactory) {\n if (errorFactory === void 0) { errorFactory = defaultErrorFactory; }\n return operate(function (source, subscriber) {\n var hasValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n hasValue = true;\n subscriber.next(value);\n }, function () { return (hasValue ? subscriber.complete() : subscriber.error(errorFactory())); }));\n });\n}\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n//# sourceMappingURL=throwIfEmpty.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { concat } from '../observable/concat';\nimport { of } from '../observable/of';\nexport function endWith() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n return function (source) { return concat(source, of.apply(void 0, __spreadArray([], __read(values)))); };\n}\n//# sourceMappingURL=endWith.js.map","import { operate } from '../util/lift';\nexport function finalize(callback) {\n return operate(function (source, subscriber) {\n try {\n source.subscribe(subscriber);\n }\n finally {\n subscriber.add(callback);\n }\n });\n}\n//# sourceMappingURL=finalize.js.map","import { EmptyError } from '../util/EmptyError';\nimport { filter } from './filter';\nimport { take } from './take';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { identity } from '../util/identity';\nexport function first(predicate, defaultValue) {\n var hasDefaultValue = arguments.length >= 2;\n return function (source) {\n return source.pipe(predicate ? filter(function (v, i) { return predicate(v, i, source); }) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function () { return new EmptyError(); }));\n };\n}\n//# sourceMappingURL=first.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function pairwise() {\n return operate(function (source, subscriber) {\n var prev;\n var hasPrev = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var p = prev;\n prev = value;\n hasPrev && subscriber.next([p, value]);\n hasPrev = true;\n }));\n });\n}\n//# sourceMappingURL=pairwise.js.map","import { operate } from '../util/lift';\nimport { scanInternals } from './scanInternals';\nexport function scan(accumulator, seed) {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, true));\n}\n//# sourceMappingURL=scan.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { operate } from '../util/lift';\nexport function share(options) {\n if (options === void 0) { options = {}; }\n var _a = options.connector, connector = _a === void 0 ? function () { return new Subject(); } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d;\n return function (wrapperSource) {\n var connection;\n var resetConnection;\n var subject;\n var refCount = 0;\n var hasCompleted = false;\n var hasErrored = false;\n var cancelReset = function () {\n resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n resetConnection = undefined;\n };\n var reset = function () {\n cancelReset();\n connection = subject = undefined;\n hasCompleted = hasErrored = false;\n };\n var resetAndUnsubscribe = function () {\n var conn = connection;\n reset();\n conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n };\n return operate(function (source, subscriber) {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n var dest = (subject = subject !== null && subject !== void 0 ? subject : connector());\n subscriber.add(function () {\n refCount--;\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n dest.subscribe(subscriber);\n if (!connection &&\n refCount > 0) {\n connection = new SafeSubscriber({\n next: function (value) { return dest.next(value); },\n error: function (err) {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: function () {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n },\n });\n innerFrom(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\nfunction handleReset(reset, on) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (on === true) {\n reset();\n return;\n }\n if (on === false) {\n return;\n }\n var onSubscriber = new SafeSubscriber({\n next: function () {\n onSubscriber.unsubscribe();\n reset();\n },\n });\n return innerFrom(on.apply(void 0, __spreadArray([], __read(args)))).subscribe(onSubscriber);\n}\n//# sourceMappingURL=share.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function skipWhile(predicate) {\n return operate(function (source, subscriber) {\n var taking = false;\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return (taking || (taking = !predicate(value, index++))) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=skipWhile.js.map","import { concat } from '../observable/concat';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\nexport function startWith() {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var scheduler = popScheduler(values);\n return operate(function (source, subscriber) {\n (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=startWith.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate(function (source, subscriber) {\n var innerSubscriber = null;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n var innerIndex = 0;\n var outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {\n innerSubscriber = null;\n checkComplete();\n })));\n }, function () {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n//# sourceMappingURL=switchMap.js.map","import { switchMap } from './switchMap';\nimport { identity } from '../util/identity';\nexport function switchAll() {\n return switchMap(identity);\n}\n//# sourceMappingURL=switchAll.js.map","import { switchMap } from './switchMap';\nimport { operate } from '../util/lift';\nexport function switchScan(accumulator, seed) {\n return operate(function (source, subscriber) {\n var state = seed;\n switchMap(function (value, index) { return accumulator(state, value, index); }, function (_, innerValue) { return ((state = innerValue), innerValue); })(source).subscribe(subscriber);\n return function () {\n state = null;\n };\n });\n}\n//# sourceMappingURL=switchScan.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n return operate(function (source, subscriber) {\n innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=takeUntil.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function takeWhile(predicate, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=takeWhile.js.map","import { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nexport function tap(observerOrNext, error, complete) {\n var tapObserver = isFunction(observerOrNext) || error || complete\n ?\n { next: observerOrNext, error: error, complete: complete }\n : observerOrNext;\n return tapObserver\n ? operate(function (source, subscriber) {\n var _a;\n (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n var isUnsub = true;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var _a;\n (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);\n subscriber.next(value);\n }, function () {\n var _a;\n isUnsub = false;\n (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n subscriber.complete();\n }, function (err) {\n var _a;\n isUnsub = false;\n (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);\n subscriber.error(err);\n }, function () {\n var _a, _b;\n if (isUnsub) {\n (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n }\n (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n }));\n })\n :\n identity;\n}\n//# sourceMappingURL=tap.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport function throttle(durationSelector, config) {\n return operate(function (source, subscriber) {\n var _a = config !== null && config !== void 0 ? config : {}, _b = _a.leading, leading = _b === void 0 ? true : _b, _c = _a.trailing, trailing = _c === void 0 ? false : _c;\n var hasValue = false;\n var sendValue = null;\n var throttled = null;\n var isComplete = false;\n var endThrottling = function () {\n throttled === null || throttled === void 0 ? void 0 : throttled.unsubscribe();\n throttled = null;\n if (trailing) {\n send();\n isComplete && subscriber.complete();\n }\n };\n var cleanupThrottling = function () {\n throttled = null;\n isComplete && subscriber.complete();\n };\n var startThrottle = function (value) {\n return (throttled = innerFrom(durationSelector(value)).subscribe(createOperatorSubscriber(subscriber, endThrottling, cleanupThrottling)));\n };\n var send = function () {\n if (hasValue) {\n hasValue = false;\n var value = sendValue;\n sendValue = null;\n subscriber.next(value);\n !isComplete && startThrottle(value);\n }\n };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n hasValue = true;\n sendValue = value;\n !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value));\n }, function () {\n isComplete = true;\n !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete();\n }));\n });\n}\n//# sourceMappingURL=throttle.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { throttle } from './throttle';\nimport { timer } from '../observable/timer';\nexport function throttleTime(duration, scheduler, config) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration$ = timer(duration, scheduler);\n return throttle(function () { return duration$; }, config);\n}\n//# sourceMappingURL=throttleTime.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { identity } from '../util/identity';\nimport { noop } from '../util/noop';\nimport { popResultSelector } from '../util/args';\nexport function withLatestFrom() {\n var inputs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n inputs[_i] = arguments[_i];\n }\n var project = popResultSelector(inputs);\n return operate(function (source, subscriber) {\n var len = inputs.length;\n var otherValues = new Array(len);\n var hasValue = inputs.map(function () { return false; });\n var ready = false;\n var _loop_1 = function (i) {\n innerFrom(inputs[i]).subscribe(createOperatorSubscriber(subscriber, function (value) {\n otherValues[i] = value;\n if (!ready && !hasValue[i]) {\n hasValue[i] = true;\n (ready = hasValue.every(identity)) && (hasValue = null);\n }\n }, noop));\n };\n for (var i = 0; i < len; i++) {\n _loop_1(i);\n }\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (ready) {\n var values = __spreadArray([value], __read(otherValues));\n subscriber.next(project ? project.apply(void 0, __spreadArray([], __read(values))) : values);\n }\n }));\n });\n}\n//# sourceMappingURL=withLatestFrom.js.map","/*\nCopyright 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport { BehaviorSubject } from \"rxjs\";\n\nimport { PosthogAnalytics } from \"../analytics/PosthogAnalytics\";\nimport { type Behavior } from \"../state/Behavior\";\nimport { useBehavior } from \"../useBehavior\";\nimport { MatrixRTCMode } from \"../config/ConfigOptions\";\n\nexport class Setting<T> {\n public constructor(\n key: string,\n public readonly defaultValue: T,\n ) {\n this.key = `matrix-setting-${key}`;\n\n const storedValue = localStorage.getItem(this.key);\n let initialValue = defaultValue;\n if (storedValue !== null) {\n try {\n initialValue = JSON.parse(storedValue);\n } catch (e) {\n logger.warn(\n `Invalid value stored for setting ${key}: ${storedValue}.`,\n e,\n );\n }\n }\n\n this._value$ = new BehaviorSubject(initialValue);\n this.value$ = this._value$;\n this._lastUpdateReason$ = new BehaviorSubject<string | null>(null);\n this.lastUpdateReason$ = this._lastUpdateReason$;\n }\n\n private readonly key: string;\n\n private readonly _value$: BehaviorSubject<T>;\n private readonly _lastUpdateReason$: BehaviorSubject<string | null>;\n public readonly value$: Behavior<T>;\n public readonly lastUpdateReason$: Behavior<string | null>;\n\n public readonly setValue = (value: T, reason?: string): void => {\n this._value$.next(value);\n this._lastUpdateReason$.next(reason ?? null);\n localStorage.setItem(this.key, JSON.stringify(value));\n };\n public readonly getValue = (): T => {\n return this._value$.getValue();\n };\n}\n\n/**\n * React hook that returns a settings's current value and a setter.\n */\nexport function useSetting<T>(setting: Setting<T>): [T, (value: T) => void] {\n return [useBehavior(setting.value$), setting.setValue];\n}\n\n// null = undecided\nexport const optInAnalytics = new Setting<boolean | null>(\n \"opt-in-analytics\",\n null,\n);\n// TODO: This setting can be disabled. Work out an approach to disableable\n// settings thats works for Observables in addition to React.\nexport const useOptInAnalytics = (): [\n boolean | null,\n ((value: boolean | null) => void) | null,\n] => {\n const setting = useSetting(optInAnalytics);\n return PosthogAnalytics.instance.isEnabled() ? setting : [false, null];\n};\n\nexport const developerMode = new Setting(\"developer-settings-tab\", false);\n\nexport const duplicateTiles = new Setting(\"duplicate-tiles\", 0);\n\nexport const debugTileLayout = new Setting(\"debug-tile-layout\", false);\n\nexport const showConnectionStats = new Setting<boolean>(\n \"show-connection-stats\",\n false,\n);\n\nexport const audioInput = new Setting<string | undefined>(\n \"audio-input\",\n undefined,\n);\nexport const audioOutput = new Setting<string | undefined>(\n \"audio-output\",\n undefined,\n);\nexport const videoInput = new Setting<string | undefined>(\n \"video-input\",\n undefined,\n);\n\nexport const backgroundBlur = new Setting<boolean>(\"background-blur\", false);\n\nexport const showHandRaisedTimer = new Setting<boolean>(\n \"hand-raised-show-timer\",\n false,\n);\n\nexport const showReactions = new Setting<boolean>(\"reactions-show\", true);\n\nexport const playReactionsSound = new Setting<boolean>(\n \"reactions-play-sound\",\n true,\n);\n\nexport const soundEffectVolume = new Setting<number>(\n \"sound-effect-volume\",\n 0.5,\n);\n\nexport const muteAllAudio = new Setting<boolean>(\"mute-all-audio\", false);\n\nexport const alwaysShowSelf = new Setting<boolean>(\"always-show-self\", true);\n\nexport const alwaysShowIphoneEarpiece = new Setting<boolean>(\n \"always-show-iphone-earpiece\",\n false,\n);\n\nexport const enableExtendedLivekitLogs = new Setting<boolean>(\n \"extended-livekit-logs\",\n false,\n);\n\nexport const matrixRTCMode = new Setting<MatrixRTCMode>(\n \"matrix-rtc-mode\",\n MatrixRTCMode.Compatibility,\n);\n\nexport const customLivekitUrl = new Setting<string | null>(\n \"custom-livekit-url\",\n null,\n);\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport posthog, {\n type CaptureOptions,\n type CaptureResult,\n type PostHog,\n type Properties,\n} from \"posthog-js\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport { type MatrixClient } from \"matrix-js-sdk\";\nimport { type Subscription } from \"rxjs\";\n\nimport { widget } from \"../widget\";\nimport {\n CallEndedTracker,\n CallStartedTracker,\n LoginTracker,\n SignupTracker,\n MuteCameraTracker,\n MuteMicrophoneTracker,\n UndecryptableToDeviceEventTracker,\n QualitySurveyEventTracker,\n CallDisconnectedEventTracker,\n CallConnectDurationTracker,\n CallReconnectingTracker,\n} from \"./PosthogEvents\";\nimport { Config } from \"../config/Config\";\nimport { getUrlParams } from \"../UrlParams\";\nimport { optInAnalytics } from \"../settings/settings\";\n\n/* Posthog analytics tracking.\n *\n * Anonymity behaviour is as follows:\n *\n * - If Posthog isn't configured in `config.json`, events are not sent.\n * - If [Do Not Track](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/doNotTrack) is\n * enabled, events are not sent (this detection is built into posthog and turned on via the\n * `respect_dnt` flag being passed to `posthog.init`).\n * - If the posthog analytics are explicitly activated by the user in the element call settings,\n * a randomised analytics ID is created and stored in account_data for that user (shared between devices)\n * so that the user can be identified in posthog.\n */\n\nexport interface IPosthogEvent {\n // The event name that will be used by PostHog. Event names should use camelCase.\n eventName: string;\n\n // do not allow these to be sent manually, we enqueue them all for caching purposes\n $set?: void;\n $set_once?: void;\n}\n\nexport enum Anonymity {\n Disabled,\n Anonymous,\n Pseudonymous,\n}\n\nexport enum RegistrationType {\n Guest,\n Registered,\n}\n\n// Sanitize URL / referrer / device fields on a single posthog properties bag.\n// Applied to event.properties and to the person-profile bags ($set / $set_once),\n// since posthog mirrors the same URL fields into those.\nfunction stripSensitiveFields(\n obj: Properties | undefined,\n anonymity: Anonymity,\n): void {\n if (!obj) return;\n\n if (anonymity === Anonymity.Anonymous) {\n // drop referrer information for anonymous users\n delete obj[\"$referrer\"];\n delete obj[\"$referring_domain\"];\n delete obj[\"$initial_referrer\"];\n delete obj[\"$initial_referring_domain\"];\n\n // drop device ID, which is a UUID persisted in local storage\n delete obj[\"$device_id\"];\n }\n\n // the url leaks a lot of private data like the call name or the user\n // (room password / room ID can land in the hash/query). Strip down to\n // scheme + host so we still get host-level insights (develop / main / sfu).\n for (const key of [\"$current_url\", \"$initial_current_url\"]) {\n if (typeof obj[key] === \"string\") {\n try {\n const url = new URL(obj[key]);\n obj[key] = url.protocol + \"//\" + url.hostname + url.pathname;\n } catch {\n obj[key] = null;\n }\n }\n }\n\n // $session_entry_url carries the full untrimmed URL; $initial_person_info\n // bundles initial referrer + URL into a nested object that bypasses the\n // per-key strips above. Drop both.\n delete obj[\"$session_entry_url\"];\n delete obj[\"$initial_person_info\"];\n}\n\n/**\n * Strip PII from posthog's built-in properties (URL, referrer fields,\n * device ID, $initial_person_info, $session_entry_url) before events leave\n * the client. Also applied to the person-profile bags ($set / $set_once),\n * which mirror the same URL fields.\n * See src/utils/event-utils.ts in posthog-js (getEventProperties, getPersonInfo)\n * for the list of properties posthog sets automatically.\n */\nexport function santizeSensitiveData(\n event: CaptureResult | null,\n anonymity: Anonymity,\n): CaptureResult | null {\n if (event === null) return null;\n\n stripSensitiveFields(event.properties, anonymity);\n // posthog can stash person-profile updates either at the top level\n // of CaptureResult or nested inside properties depending on the pipeline\n // stage; clean both spots so nothing slips through.\n stripSensitiveFields(event.$set, anonymity);\n stripSensitiveFields(event.$set_once, anonymity);\n stripSensitiveFields(event.properties[\"$set\"], anonymity);\n stripSensitiveFields(event.properties[\"$set_once\"], anonymity);\n\n return event;\n}\n\ninterface PlatformProperties {\n appVersion: string;\n matrixBackend: \"embedded\" | \"jssdk\";\n callBackend: \"livekit\" | \"full-mesh\";\n cryptoVersion?: string;\n}\n\nexport class PosthogAnalytics {\n /* Wrapper for Posthog analytics.\n * 3 modes of anonymity are supported, governed by this.anonymity\n * - Anonymity.Disabled means *no data* is passed to posthog\n * - Anonymity.Anonymous means no identifier is passed to posthog\n * - Anonymity.Pseudonymous means an analytics ID stored in account_data and shared between devices\n * is passed to posthog.\n *\n * To update anonymity, call updateAnonymityFromSettings() or you can set it directly via setAnonymity().\n *\n * To pass an event to Posthog:\n *\n * 1. Declare a type for the event, extending IPosthogEvent.\n */\n\n private static ANALYTICS_EVENT_TYPE = \"im.vector.analytics\" as const;\n\n // set true during the constructor if posthog config is present, otherwise false\n private static internalInstance: PosthogAnalytics | null = null;\n\n private identificationPromise?: Promise<void>;\n private readonly enabled: boolean = false;\n private anonymity = Anonymity.Disabled;\n private platformSuperProperties = {};\n private registrationType: RegistrationType = RegistrationType.Guest;\n private optInListener: Subscription | null = null;\n\n public static hasInstance(): boolean {\n return Boolean(this.internalInstance);\n }\n\n public static get instance(): PosthogAnalytics {\n if (!this.internalInstance) {\n this.internalInstance = new PosthogAnalytics(posthog);\n }\n return this.internalInstance;\n }\n\n public static resetInstance(): void {\n // Reset the singleton instance\n this.internalInstance = null;\n }\n\n private constructor(private readonly posthog: PostHog) {\n let apiKey: string | undefined;\n let apiHost: string | undefined;\n if (import.meta.env.VITE_PACKAGE === \"embedded\") {\n // for the embedded package we always use the values from the URL as the widget host is responsible for analytics configuration\n apiKey = getUrlParams().posthogApiKey ?? undefined;\n apiHost = getUrlParams().posthogApiHost ?? undefined;\n } else if (import.meta.env.VITE_PACKAGE === \"full\") {\n // in full package it is the server responsible for the analytics\n apiKey = Config.get().posthog?.api_key;\n apiHost = Config.get().posthog?.api_host;\n }\n\n if (apiKey && apiHost) {\n const beforeSend = (event: CaptureResult | null): CaptureResult | null =>\n santizeSensitiveData(event, this.anonymity);\n this.posthog.init(apiKey, {\n api_host: apiHost,\n autocapture: false,\n mask_all_text: true,\n mask_all_element_attributes: true,\n mask_personal_data_properties: true,\n capture_pageview: false,\n before_send: beforeSend,\n respect_dnt: true,\n advanced_disable_decide: true,\n });\n this.enabled = true;\n } else if (import.meta.env.MODE !== \"test\") {\n logger.info(\n \"Posthog is not enabled because there is no api key or no host given in the config\",\n );\n this.enabled = false;\n }\n }\n\n private registerSuperProperties(properties: Properties): void {\n if (this.enabled) {\n this.posthog.register(properties);\n }\n }\n\n private static getPlatformProperties(): PlatformProperties {\n const appVersion = import.meta.env.VITE_APP_VERSION || \"dev\";\n return {\n appVersion,\n matrixBackend: widget ? \"embedded\" : \"jssdk\",\n callBackend: \"livekit\",\n cryptoVersion: widget\n ? undefined\n : window.matrixclient?.getCrypto()?.getVersion(),\n };\n }\n\n private capture(\n eventName: string,\n properties: Properties,\n options?: CaptureOptions,\n ): void {\n if (!this.enabled) {\n return;\n }\n this.posthog.capture(eventName, { ...properties }, options);\n }\n\n public isEnabled(): boolean {\n return this.enabled;\n }\n\n private setAnonymity(anonymity: Anonymity): void {\n // Update this.anonymity.\n // To update the anonymity typically you want to call updateAnonymityFromSettings\n // to ensure this value is in step with the user's settings.\n if (\n this.enabled &&\n (anonymity == Anonymity.Disabled || anonymity == Anonymity.Anonymous)\n ) {\n // when transitioning to Disabled or Anonymous ensure we clear out any prior state\n // set in posthog e.g. distinct ID\n this.posthog.reset();\n // Restore any previously set platform super properties\n this.updateSuperProperties();\n }\n this.anonymity = anonymity;\n }\n\n private static getRandomAnalyticsId(): string {\n return [...crypto.getRandomValues(new Uint8Array(16))]\n .map((c) => c.toString(16))\n .join(\"\");\n }\n\n private async identifyUser(\n analyticsIdGenerator: () => string,\n ): Promise<void> {\n if (this.anonymity == Anonymity.Pseudonymous && this.enabled) {\n // Check the user's account_data for an analytics ID to use. Storing the ID in account_data allows\n // different devices to send the same ID.\n let analyticsID = await this.getAnalyticsId();\n try {\n if (!analyticsID && !widget) {\n // only try setting up a new analytics ID in the standalone app.\n\n // Couldn't retrieve an analytics ID from user settings, so create one and set it on the server.\n // Note there's a race condition here - if two devices do these steps at the same time, last write\n // wins, and the first writer will send tracking with an ID that doesn't match the one on the server\n // until the next time account data is refreshed and this function is called (most likely on next\n // page load). This will happen pretty infrequently, so we can tolerate the possibility.\n analyticsID = analyticsIdGenerator();\n await this.setAccountAnalyticsId(analyticsID);\n }\n } catch (e) {\n // The above could fail due to network requests, but not essential to starting the application,\n // so swallow it.\n logger.log(\n \"Unable to identify user for tracking\" + (e as Error)?.toString(),\n );\n }\n if (analyticsID) {\n this.posthog.identify(analyticsID);\n } else {\n logger.info(\n \"No analyticsID is available. Should not try to setup posthog\",\n );\n }\n }\n }\n\n private async getAnalyticsId(): Promise<string | null> {\n const client: MatrixClient = window.matrixclient;\n if (widget) {\n return getUrlParams().posthogUserId;\n } else {\n const accountData = await client.getAccountDataFromServer(\n PosthogAnalytics.ANALYTICS_EVENT_TYPE,\n );\n return accountData?.id ?? null;\n }\n }\n\n private async setAccountAnalyticsId(analyticsID: string): Promise<void> {\n if (!widget) {\n const client = window.matrixclient;\n\n // the analytics ID only needs to be set in the standalone version.\n const accountData = await client.getAccountDataFromServer(\n PosthogAnalytics.ANALYTICS_EVENT_TYPE,\n );\n await client.setAccountData(\n PosthogAnalytics.ANALYTICS_EVENT_TYPE,\n Object.assign({ id: analyticsID }, accountData),\n );\n }\n }\n\n public getAnonymity(): Anonymity {\n return this.anonymity;\n }\n\n public logout(): void {\n if (this.enabled) {\n this.posthog.reset();\n }\n this.optInListener?.unsubscribe();\n this.optInListener = null;\n this.setAnonymity(Anonymity.Disabled);\n }\n\n public onLoginStatusChanged(): void {\n this.maybeIdentifyUser().catch(() =>\n logger.log(\"Could not identify user on login status change\"),\n );\n }\n\n private updateSuperProperties(): void {\n // Update super properties in posthog with our platform (app version, platform).\n // These properties will be subsequently passed in every event.\n //\n // This only needs to be done once per page lifetime. Note that getPlatformProperties\n this.platformSuperProperties = PosthogAnalytics.getPlatformProperties();\n this.registerSuperProperties({\n ...this.platformSuperProperties,\n registrationType:\n this.registrationType == RegistrationType.Guest\n ? \"Guest\"\n : \"Registered\",\n });\n }\n\n private userRegisteredInThisSession(): boolean {\n // only if the signup end got tracked the end time is set. Otherwise its default value is Date(0).\n return this.eventSignup.getSignupEndTime() > new Date(0);\n }\n\n private async maybeIdentifyUser(): Promise<void> {\n // We may not yet have a Matrix client at this point, if not, bail. This should get\n // triggered again by onLoginStatusChanged once we do have a client.\n if (!window.matrixclient) return;\n\n if (this.anonymity === Anonymity.Pseudonymous) {\n this.setRegistrationType(\n window.matrixclient.isGuest() || window.passwordlessUser\n ? RegistrationType.Guest\n : RegistrationType.Registered,\n );\n // store the promise to await posthog-tracking-events until the identification is done.\n this.identificationPromise = this.identifyUser(\n PosthogAnalytics.getRandomAnalyticsId,\n );\n await this.identificationPromise;\n if (this.userRegisteredInThisSession()) {\n this.eventSignup.track();\n }\n }\n\n if (this.anonymity !== Anonymity.Disabled) {\n this.updateSuperProperties();\n }\n }\n\n public trackEvent<E extends IPosthogEvent>(\n { eventName, ...properties }: E,\n options?: CaptureOptions,\n ): void {\n const doCapture = (): void => {\n if (\n this.anonymity == Anonymity.Disabled ||\n this.anonymity == Anonymity.Anonymous\n )\n return;\n this.capture(eventName, properties, options);\n };\n\n if (this.identificationPromise) {\n // only make calls to posthog after the identification is done\n this.identificationPromise.then(doCapture, (e) => {\n logger.error(\"Failed to identify user for tracking\", e);\n });\n } else {\n doCapture();\n }\n }\n\n public startListeningToSettingsChanges(): void {\n // Listen to account data changes from sync so we can observe changes to relevant flags and update.\n // This is called -\n // * On page load, when the account data is first received by sync\n // * On login\n // * When another device changes account data\n // * When the user changes their preferences on this device\n // Note that for new accounts, pseudonymousAnalyticsOptIn won't be set, so updateAnonymityFromSettings\n // won't be called (i.e. this.anonymity will be left as the default, until the setting changes)\n this.optInListener ??= optInAnalytics.value$.subscribe((optIn) => {\n this.setAnonymity(optIn ? Anonymity.Pseudonymous : Anonymity.Disabled);\n this.maybeIdentifyUser().catch(() =>\n logger.log(\"Could not identify user\"),\n );\n });\n }\n\n public setRegistrationType(registrationType: RegistrationType): void {\n this.registrationType = registrationType;\n if (\n this.anonymity == Anonymity.Disabled ||\n this.anonymity == Anonymity.Anonymous\n )\n return;\n this.updateSuperProperties();\n }\n\n // ----- Events\n\n public eventCallEnded = new CallEndedTracker();\n public eventSignup = new SignupTracker();\n public eventCallStarted = new CallStartedTracker();\n public eventLogin = new LoginTracker();\n public eventMuteMicrophone = new MuteMicrophoneTracker();\n public eventMuteCamera = new MuteCameraTracker();\n public eventUndecryptableToDevice = new UndecryptableToDeviceEventTracker();\n public eventQualitySurvey = new QualitySurveyEventTracker();\n public eventCallDisconnected = new CallDisconnectedEventTracker();\n public eventCallConnectDuration = new CallConnectDurationTracker();\n public eventCallReconnecting = new CallReconnectingTracker();\n}\n","/*\nCopyright 2021-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n type FC,\n useCallback,\n useEffect,\n useState,\n createContext,\n use,\n useRef,\n useMemo,\n type JSX,\n} from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\nimport { type ISyncStateData, type SyncState } from \"matrix-js-sdk/lib/sync\";\nimport { ClientEvent, type MatrixClient } from \"matrix-js-sdk\";\n\nimport type { WidgetApi } from \"matrix-widget-api\";\nimport { ErrorPage } from \"./FullScreenView\";\nimport { widget } from \"./widget\";\nimport {\n PosthogAnalytics,\n RegistrationType,\n} from \"./analytics/PosthogAnalytics\";\nimport { useEventTarget } from \"./useEvents\";\nimport { OpenElsewhereError } from \"./RichError\";\n\ndeclare global {\n interface Window {\n matrixclient: MatrixClient;\n passwordlessUser: boolean;\n }\n}\n\nexport type ClientState = ValidClientState | ErrorState;\n\nexport type ValidClientState = {\n state: \"valid\";\n authenticated?: AuthenticatedClient;\n // 'Disconnected' rather than 'connected' because it tracks specifically\n // whether the client is supposed to be connected but is not\n disconnected: boolean;\n supportedFeatures: {\n reactions: boolean;\n };\n setClient: (client: MatrixClient, session: Session) => void;\n};\n\nexport type AuthenticatedClient = {\n client: MatrixClient;\n isPasswordlessUser: boolean;\n changePassword: (password: string) => Promise<void>;\n logout: () => void;\n};\n\nexport type ErrorState = {\n state: \"error\";\n error: Error;\n};\n\nconst ClientContext = createContext<ClientState | undefined>(undefined);\n\nexport const ClientContextProvider = ClientContext.Provider;\n\nexport const useClientState = (): ClientState | undefined => use(ClientContext);\n\nexport function useClient(): {\n client?: MatrixClient;\n setClient?: (client: MatrixClient, session: Session) => void;\n} {\n let client;\n let setClient;\n\n const clientState = useClientState();\n if (clientState?.state === \"valid\") {\n client = clientState.authenticated?.client;\n setClient = clientState.setClient;\n }\n\n return { client, setClient };\n}\n\n// Plain representation of the `ClientContext` as a helper for old components that expected an object with multiple fields.\nexport function useClientLegacy(): {\n client?: MatrixClient;\n setClient?: (client: MatrixClient, session: Session) => void;\n passwordlessUser: boolean;\n loading: boolean;\n authenticated: boolean;\n logout?: () => void;\n error?: Error;\n} {\n const clientState = useClientState();\n\n let client;\n let setClient;\n let passwordlessUser = false;\n let loading = true;\n let error;\n let authenticated = false;\n let logout;\n\n if (clientState?.state === \"valid\") {\n client = clientState.authenticated?.client;\n setClient = clientState.setClient;\n passwordlessUser = clientState.authenticated?.isPasswordlessUser ?? false;\n loading = false;\n authenticated = client !== undefined;\n logout = clientState.authenticated?.logout;\n } else if (clientState?.state === \"error\") {\n error = clientState.error;\n loading = false;\n }\n\n return {\n client,\n setClient,\n passwordlessUser,\n loading,\n authenticated,\n logout,\n error,\n };\n}\n\nconst loadChannel =\n \"BroadcastChannel\" in window ? new BroadcastChannel(\"load\") : null;\n\ninterface Props {\n children: JSX.Element;\n}\n\nexport const ClientProvider: FC<Props> = ({ children }) => {\n const navigate = useNavigate();\n\n // null = signed out, undefined = loading\n const [initClientState, setInitClientState] = useState<\n InitResult | null | undefined\n >(undefined);\n\n const initializing = useRef(false);\n useEffect(() => {\n // In case the component is mounted, unmounted, and remounted quickly (as\n // React does in strict mode), we need to make sure not to doubly initialize\n // the client.\n if (initializing.current) return;\n initializing.current = true;\n\n loadClient()\n .then((initResult) => {\n setInitClientState(initResult);\n if (PosthogAnalytics.instance.isEnabled())\n PosthogAnalytics.instance.startListeningToSettingsChanges();\n })\n .catch((err) => logger.error(err))\n .finally(() => (initializing.current = false));\n }, []);\n\n const changePassword = useCallback(\n async (password: string) => {\n const session = loadSession();\n if (!initClientState?.client || !session) {\n return;\n }\n\n await initClientState.client.setPassword(\n {\n type: \"m.login.password\",\n identifier: {\n type: \"m.id.user\",\n user: session.user_id,\n },\n user: session.user_id,\n password: session.tempPassword,\n },\n password,\n );\n\n saveSession({ ...session, passwordlessUser: false });\n\n setInitClientState({\n ...initClientState,\n passwordlessUser: false,\n });\n },\n [initClientState],\n );\n\n const setClient = useCallback(\n (client: MatrixClient, session: Session) => {\n const oldClient = initClientState?.client;\n if (oldClient && oldClient !== client) {\n oldClient.stopClient();\n }\n\n saveSession(session);\n setInitClientState({\n widgetApi: null,\n client,\n passwordlessUser: session.passwordlessUser,\n });\n if (PosthogAnalytics.instance.isEnabled())\n PosthogAnalytics.instance.startListeningToSettingsChanges();\n },\n [initClientState?.client],\n );\n\n const logout = useCallback(async () => {\n const client = initClientState?.client;\n if (!client) {\n return;\n }\n\n await client.logout(true);\n await client.clearStores();\n clearSession();\n setInitClientState(null);\n await navigate(\"/\");\n PosthogAnalytics.instance.logout();\n PosthogAnalytics.instance.setRegistrationType(RegistrationType.Guest);\n }, [navigate, initClientState?.client]);\n\n // To protect against multiple sessions writing to the same storage\n // simultaneously, we send a broadcast message that shuts down all other\n // running instances of the app. This isn't necessary if the app is running in\n // a widget though, since then it'll be mostly stateless.\n useEffect(() => {\n if (!widget) loadChannel?.postMessage({});\n }, []);\n\n const [alreadyOpenedErr, setAlreadyOpenedErr] = useState<Error | undefined>(\n undefined,\n );\n useEventTarget(\n loadChannel,\n \"message\",\n useCallback(() => {\n initClientState?.client.stopClient();\n setAlreadyOpenedErr(new OpenElsewhereError());\n }, [initClientState?.client, setAlreadyOpenedErr]),\n );\n\n const [isDisconnected, setIsDisconnected] = useState(false);\n const [supportsReactions, setSupportsReactions] = useState(false);\n\n const state: ClientState | undefined = useMemo(() => {\n if (alreadyOpenedErr) {\n return { state: \"error\", error: alreadyOpenedErr };\n }\n\n if (initClientState === undefined) return undefined;\n\n const authenticated =\n initClientState === null\n ? undefined\n : {\n client: initClientState.client,\n isPasswordlessUser: initClientState.passwordlessUser,\n changePassword,\n logout,\n };\n\n return {\n state: \"valid\",\n authenticated,\n setClient,\n disconnected: isDisconnected,\n supportedFeatures: {\n reactions: supportsReactions,\n },\n };\n }, [\n alreadyOpenedErr,\n changePassword,\n initClientState,\n logout,\n setClient,\n isDisconnected,\n supportsReactions,\n ]);\n\n const onSync = useCallback(\n (state: SyncState, _old: SyncState | null, data?: ISyncStateData) => {\n setIsDisconnected(clientIsDisconnected(state, data));\n },\n [],\n );\n\n useEffect(() => {\n if (!initClientState) {\n return;\n }\n\n window.matrixclient = initClientState.client;\n window.passwordlessUser = initClientState.passwordlessUser;\n\n if (PosthogAnalytics.hasInstance())\n PosthogAnalytics.instance.onLoginStatusChanged();\n\n if (initClientState.client) {\n initClientState.client.on(ClientEvent.Sync, onSync);\n }\n\n if (initClientState.widgetApi) {\n const reactSend = initClientState.widgetApi.hasCapability(\n \"org.matrix.msc2762.send.event:m.reaction\",\n );\n const redactSend = initClientState.widgetApi.hasCapability(\n \"org.matrix.msc2762.send.event:m.room.redaction\",\n );\n const reactRcv = initClientState.widgetApi.hasCapability(\n \"org.matrix.msc2762.receive.event:m.reaction\",\n );\n const redactRcv = initClientState.widgetApi.hasCapability(\n \"org.matrix.msc2762.receive.event:m.room.redaction\",\n );\n\n if (!reactSend || !reactRcv || !redactSend || !redactRcv) {\n logger.warn(\"Widget does not support reactions\");\n setSupportsReactions(false);\n } else {\n setSupportsReactions(true);\n }\n } else {\n setSupportsReactions(true);\n }\n\n return (): void => {\n if (initClientState.client) {\n initClientState.client.removeListener(ClientEvent.Sync, onSync);\n }\n };\n }, [initClientState, onSync]);\n\n if (alreadyOpenedErr) {\n return <ErrorPage widget={widget} error={alreadyOpenedErr} />;\n }\n\n return <ClientContext value={state}>{children}</ClientContext>;\n};\n\nexport type InitResult = {\n widgetApi: WidgetApi | null;\n client: MatrixClient;\n passwordlessUser: boolean;\n};\n\nasync function loadClient(): Promise<InitResult | null> {\n if (widget) {\n // We're inside a widget, so let's engage *matryoshka mode*\n logger.log(\"Using a matryoshka client\");\n const client = await widget.client;\n return {\n widgetApi: widget.api,\n client,\n passwordlessUser: false,\n };\n } else {\n const { initSPA } = await import(\"./utils/spa\");\n return initSPA(loadSession, clearSession);\n }\n}\n\nexport interface Session {\n user_id: string;\n device_id: string;\n access_token: string;\n passwordlessUser: boolean;\n tempPassword?: string;\n}\n\nconst clearSession = (): void => localStorage.removeItem(\"matrix-auth-store\");\nconst saveSession = (s: Session): void =>\n localStorage.setItem(\"matrix-auth-store\", JSON.stringify(s));\nconst loadSession = (): Session | undefined => {\n const data = localStorage.getItem(\"matrix-auth-store\");\n if (!data) {\n return undefined;\n }\n\n return JSON.parse(data);\n};\n\nconst clientIsDisconnected = (\n syncState: SyncState,\n syncData?: ISyncStateData,\n): boolean =>\n syncState === \"ERROR\" && syncData?.error?.name === \"ConnectionError\";\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n type MatrixEvent,\n type User,\n type MatrixClient,\n UserEvent,\n type FileType,\n} from \"matrix-js-sdk\";\nimport { useState, useCallback, useEffect } from \"react\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\ninterface ProfileLoadState {\n success: boolean;\n loading: boolean;\n displayName?: string;\n avatarUrl?: string;\n error?: Error;\n}\n\ntype ProfileSaveCallback = ({\n displayName,\n avatar,\n removeAvatar,\n}: {\n displayName: string;\n avatar: FileType;\n removeAvatar: boolean;\n}) => Promise<void>;\n\ninterface UseProfile extends ProfileLoadState {\n saveProfile: ProfileSaveCallback;\n}\n\nexport function useProfile(client: MatrixClient | undefined): UseProfile {\n const [{ success, loading, displayName, avatarUrl, error }, setState] =\n useState<ProfileLoadState>(() => {\n let user: User | undefined = undefined;\n if (client) {\n user = client.getUser(client.getUserId()!) ?? undefined;\n }\n\n return {\n success: false,\n loading: false,\n displayName: user?.rawDisplayName,\n avatarUrl: user?.avatarUrl,\n error: undefined,\n };\n });\n\n useEffect(() => {\n const onChangeUser = (\n _event: MatrixEvent | undefined,\n { displayName, avatarUrl }: User,\n ): void => {\n setState({\n success: false,\n loading: false,\n displayName,\n avatarUrl,\n error: undefined,\n });\n };\n\n let user: User | null;\n if (client) {\n const userId = client.getUserId()!;\n user = client.getUser(userId);\n user?.on(UserEvent.DisplayName, onChangeUser);\n user?.on(UserEvent.AvatarUrl, onChangeUser);\n }\n\n return (): void => {\n if (user) {\n user.removeListener(UserEvent.DisplayName, onChangeUser);\n user.removeListener(UserEvent.AvatarUrl, onChangeUser);\n }\n };\n }, [client]);\n\n const saveProfile = useCallback<ProfileSaveCallback>(\n async ({ displayName, avatar, removeAvatar }) => {\n if (client) {\n setState((prev) => ({\n ...prev,\n loading: true,\n error: undefined,\n success: false,\n }));\n\n try {\n await client.setDisplayName(displayName);\n\n let mxcAvatarUrl: string;\n\n if (removeAvatar) {\n await client.setAvatarUrl(\"\");\n } else if (avatar) {\n ({ content_uri: mxcAvatarUrl } =\n await client.uploadContent(avatar));\n await client.setAvatarUrl(mxcAvatarUrl);\n }\n\n setState((prev) => ({\n ...prev,\n displayName,\n avatarUrl: removeAvatar\n ? undefined\n : (mxcAvatarUrl ?? prev.avatarUrl),\n loading: false,\n success: true,\n }));\n } catch (error: unknown) {\n setState((prev) => ({\n ...prev,\n loading: false,\n error: error instanceof Error ? error : Error(error as string),\n success: false,\n }));\n }\n } else {\n logger.error(\"Client not initialized before calling saveProfile\");\n }\n },\n [client],\n );\n\n return {\n loading,\n error,\n displayName,\n avatarUrl,\n saveProfile,\n success,\n };\n}\n","/*\nCopyright 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type Key, type ReactNode, useId } from \"react\";\nimport { NavBar, NavItem } from \"@vector-im/compound-web\";\n\nimport styles from \"./Tabs.module.css\";\n\nexport interface Tab<K extends Key> {\n key: K;\n name: string;\n content: ReactNode;\n}\n\ninterface Props<K extends Key> {\n label: string;\n tab: K;\n onTabChange: (key: K) => void;\n tabs: Tab<K>[];\n}\n\nexport function TabContainer<K extends Key>({\n label,\n tab,\n onTabChange,\n tabs,\n}: Props<K>): ReactNode {\n const idPrefix = useId();\n\n return (\n <div className={styles.tabContainer}>\n <NavBar role=\"tablist\" aria-label={label} className={styles.tabList}>\n {tabs.map(({ key, name }) => (\n <NavItem\n key={key}\n aria-controls={`${idPrefix}[${key}]`}\n onClick={() => onTabChange(key)}\n active={key === tab}\n >\n {name}\n </NavItem>\n ))}\n </NavBar>\n {tabs.map(({ key, content }) => (\n <div\n key={key}\n id={`${idPrefix}[${key}]`}\n style={{ display: key === tab ? undefined : \"none\" }}\n >\n {content}\n </div>\n ))}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst SvgCheck = (props, ref) => /* @__PURE__ */ _jsx(\"svg\", {\n\tfill: \"none\",\n\theight: 24,\n\tstroke: \"#000\",\n\tstrokeLinecap: \"round\",\n\tstrokeLinejoin: \"round\",\n\tstrokeWidth: 2,\n\tviewBox: \"0 0 24 24\",\n\twidth: 24,\n\txmlns: \"http://www.w3.org/2000/svg\",\n\tref,\n\t...props,\n\tchildren: /* @__PURE__ */ _jsx(\"path\", { d: \"m20 6-11 11-5-5\" })\n});\nconst ForwardRef = forwardRef(SvgCheck);\nexport default ForwardRef;\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport type { DefaultNamespace, ParseKeys, TFunction, TOptions } from \"i18next\";\n\n/**\n * An error with messages in both English and the user's preferred language.\n * Use this for errors that need to be displayed inline within another\n * component. For errors that could be given their own screen, prefer\n * {@link RichError}.\n */\n// Abstract to force consumers to use the function below rather than calling the\n// constructor directly\nexport abstract class TranslatedError extends Error {\n /**\n * The error message in the user's preferred language.\n */\n public readonly translatedMessage: string;\n\n public constructor(\n messageKey: ParseKeys<DefaultNamespace, TOptions>,\n translationFn: TFunction<DefaultNamespace>,\n ) {\n super(translationFn(messageKey, { lng: \"en\" }));\n this.translatedMessage = translationFn(messageKey);\n }\n}\n\nclass TranslatedErrorImpl extends TranslatedError {}\n\n// i18next-parser can't detect calls to a constructor, so we expose a bare\n// function instead\nexport const translatedError = (\n messageKey: ParseKeys<DefaultNamespace, TOptions>,\n t: TFunction<\"app\", undefined>,\n): TranslatedError => new TranslatedErrorImpl(messageKey, t);\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n type ChangeEvent,\n type FC,\n type ForwardedRef,\n type ReactNode,\n useId,\n type JSX,\n type Ref,\n} from \"react\";\nimport classNames from \"classnames\";\n\nimport styles from \"./Input.module.css\";\nimport CheckIcon from \"../icons/Check.svg?react\";\nimport { TranslatedError } from \"../TranslatedError\";\n\ninterface FieldRowProps {\n children: ReactNode;\n rightAlign?: boolean;\n className?: string;\n}\n\nexport function FieldRow({\n children,\n rightAlign,\n className,\n}: FieldRowProps): JSX.Element {\n return (\n <div\n className={classNames(\n styles.fieldRow,\n { [styles.rightAlign]: rightAlign },\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\ninterface FieldProps {\n children: ReactNode;\n className?: string;\n}\n\nfunction Field({ children, className }: FieldProps): JSX.Element {\n return <div className={classNames(styles.field, className)}>{children}</div>;\n}\n\ninterface InputFieldProps {\n ref?: Ref<HTMLInputElement | HTMLTextAreaElement>;\n label?: string;\n type: string;\n prefix?: string;\n suffix?: string;\n id?: string;\n checked?: boolean;\n className?: string;\n description?: string | ReactNode;\n disabled?: boolean;\n required?: boolean;\n // this is a hack. Those variables should be part of `HTMLAttributes<HTMLInputElement> | HTMLAttributes<HTMLTextAreaElement>`\n // but extending from this union type does not work\n name?: string;\n autoComplete?: string;\n autoCorrect?: string;\n autoCapitalize?: string;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n defaultChecked?: boolean;\n min?: number;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const InputField: FC<InputFieldProps> = ({\n ref,\n id,\n label,\n className,\n type,\n checked,\n prefix,\n suffix,\n description,\n disabled,\n min,\n ...rest\n}) => {\n const descriptionId = useId();\n\n return (\n <Field\n className={classNames(\n type === \"checkbox\" ? styles.checkboxField : styles.inputField,\n {\n [styles.prefix]: !!prefix,\n [styles.disabled]: disabled,\n },\n className,\n )}\n >\n {prefix && <span>{prefix}</span>}\n {type === \"textarea\" ? (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n <textarea\n id={id}\n ref={ref as ForwardedRef<HTMLTextAreaElement>}\n disabled={disabled}\n aria-describedby={descriptionId}\n {...rest}\n />\n ) : (\n <input\n id={id}\n ref={ref as ForwardedRef<HTMLInputElement>}\n type={type}\n checked={checked}\n disabled={disabled}\n aria-describedby={descriptionId}\n min={min}\n {...rest}\n />\n )}\n\n <label htmlFor={id}>\n {type === \"checkbox\" && (\n <div className={styles.checkbox}>\n <CheckIcon />\n </div>\n )}\n {label}\n </label>\n {suffix && <span>{suffix}</span>}\n {description && (\n <p\n id={descriptionId}\n className={\n label\n ? styles.description\n : classNames(styles.description, styles.noLabel)\n }\n >\n {description}\n </p>\n )}\n </Field>\n );\n};\n\nInputField.displayName = \"InputField\";\n\ninterface ErrorMessageProps {\n error: Error;\n}\n\nexport const ErrorMessage: FC<ErrorMessageProps> = ({ error }) => (\n <p className={styles.errorMessage}>\n {error instanceof TranslatedError ? error.translatedMessage : error.message}\n </p>\n);\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n type AllHTMLAttributes,\n useEffect,\n useCallback,\n useState,\n type ChangeEvent,\n useRef,\n type FC,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { useTranslation } from \"react-i18next\";\nimport { Button, Menu, MenuItem } from \"@vector-im/compound-web\";\nimport {\n DeleteIcon,\n EditIcon,\n ShareIcon,\n} from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport { Avatar, Size } from \"../Avatar\";\nimport styles from \"./AvatarInputField.module.css\";\n\ninterface Props extends AllHTMLAttributes<HTMLInputElement> {\n id: string;\n label: string;\n avatarUrl: string | undefined;\n userId: string;\n displayName: string;\n onRemoveAvatar: () => void;\n}\n\nexport const AvatarInputField: FC<Props> = ({\n id,\n label,\n className,\n avatarUrl,\n userId,\n displayName,\n onRemoveAvatar,\n ...rest\n}) => {\n const { t } = useTranslation();\n\n const [removed, setRemoved] = useState(false);\n const [objUrl, setObjUrl] = useState<string | undefined>(undefined);\n const [menuOpen, setMenuOpen] = useState(false);\n\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n const currentInput = fileInputRef.current!;\n\n const onChange = (e: Event): void => {\n const inputEvent = e as unknown as ChangeEvent<HTMLInputElement>;\n if (inputEvent.target.files && inputEvent.target.files.length > 0) {\n setObjUrl(URL.createObjectURL(inputEvent.target.files[0]));\n setRemoved(false);\n } else {\n setObjUrl(undefined);\n }\n };\n\n currentInput.addEventListener(\"change\", onChange);\n\n return (): void => {\n currentInput?.removeEventListener(\"change\", onChange);\n };\n });\n\n const onSelectUpload = useCallback(() => {\n fileInputRef.current!.click();\n }, [fileInputRef]);\n\n const onSelectRemove = useCallback(() => {\n setRemoved(true);\n onRemoveAvatar();\n }, [onRemoveAvatar]);\n\n return (\n <div className={classNames(styles.avatarInputField, className)}>\n <Avatar\n id={userId}\n className={styles.avatar}\n name={displayName}\n size={Size.XL}\n src={removed ? undefined : objUrl || avatarUrl}\n />\n <input\n id={id}\n accept=\"image/*\"\n ref={fileInputRef}\n type=\"file\"\n className={styles.fileInput}\n role=\"button\"\n aria-label={label}\n {...rest}\n />\n <div className={styles.edit}>\n {(avatarUrl || objUrl) && !removed ? (\n <Menu\n title={t(\"action.edit\")}\n showTitle={false}\n open={menuOpen}\n onOpenChange={setMenuOpen}\n trigger={\n <Button\n iconOnly\n Icon={EditIcon}\n kind=\"tertiary\"\n size=\"md\"\n aria-label={t(\"action.edit\")}\n />\n }\n >\n <MenuItem\n Icon={ShareIcon}\n label={t(\"action.upload_file\")}\n onSelect={onSelectUpload}\n />\n <MenuItem\n Icon={DeleteIcon}\n label={t(\"action.remove\")}\n kind=\"critical\"\n onSelect={onSelectRemove}\n />\n </Menu>\n ) : (\n <Button\n type=\"button\"\n iconOnly\n Icon={EditIcon}\n kind=\"tertiary\"\n size=\"md\"\n aria-label={t(\"action.edit\")}\n onClick={onSelectUpload}\n />\n )}\n </div>\n </div>\n );\n};\n\nAvatarInputField.displayName = \"AvatarInputField\";\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type FC, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { type MatrixClient } from \"matrix-js-sdk\";\nimport { useTranslation } from \"react-i18next\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nimport { useProfile } from \"../profile/useProfile\";\nimport { FieldRow, InputField, ErrorMessage } from \"../input/Input\";\nimport { AvatarInputField } from \"../input/AvatarInputField\";\nimport styles from \"./ProfileSettingsTab.module.css\";\n\ninterface Props {\n client: MatrixClient;\n}\nexport const ProfileSettingsTab: FC<Props> = ({ client }) => {\n const { t } = useTranslation();\n const { error, displayName, avatarUrl, saveProfile } = useProfile(client);\n const userId = useMemo(() => client.getUserId(), [client]);\n\n const formRef = useRef<HTMLFormElement | null>(null);\n\n const formChanged = useRef(false);\n const onFormChange = useCallback(() => {\n formChanged.current = true;\n }, []);\n\n const removeAvatar = useRef(false);\n const onRemoveAvatar = useCallback(() => {\n removeAvatar.current = true;\n formChanged.current = true;\n }, []);\n\n useEffect(() => {\n const form = formRef.current!;\n // Auto-save when the user dismisses this component\n return (): void => {\n if (formChanged.current) {\n const data = new FormData(form);\n const displayNameDataEntry = data.get(\"displayName\");\n const avatar = data.get(\"avatar\");\n\n const avatarSize =\n typeof avatar == \"string\" ? avatar.length : (avatar?.size ?? 0);\n const displayName =\n typeof displayNameDataEntry == \"string\"\n ? displayNameDataEntry\n : (displayNameDataEntry?.name ?? null);\n\n if (!displayName) {\n return;\n }\n\n saveProfile({\n displayName,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n avatar: avatar && avatarSize > 0 ? avatar : undefined,\n removeAvatar: removeAvatar.current && (!avatar || avatarSize === 0),\n }).catch((e) => {\n logger.error(\"Failed to save profile\", e);\n });\n }\n };\n }, [saveProfile]);\n\n return (\n <form onChange={onFormChange} ref={formRef} className={styles.content}>\n <FieldRow className={styles.avatarFieldRow}>\n {userId && displayName && (\n <AvatarInputField\n id=\"avatar\"\n name=\"avatar\"\n label={t(\"common.avatar\")}\n avatarUrl={avatarUrl}\n userId={userId}\n displayName={displayName}\n onRemoveAvatar={onRemoveAvatar}\n />\n )}\n </FieldRow>\n <FieldRow>\n <InputField\n id=\"userId\"\n name=\"userId\"\n label={t(\"common.username\")}\n type=\"text\"\n disabled\n value={client.getUserId()!}\n />\n </FieldRow>\n <FieldRow>\n <InputField\n id=\"displayName\"\n name=\"displayName\"\n label={t(\"common.display_name\")}\n type=\"text\"\n required\n autoComplete=\"off\"\n placeholder={t(\"common.display_name\")}\n defaultValue={displayName}\n data-testid=\"profile_displayname\"\n />\n </FieldRow>\n {error && (\n <FieldRow>\n <ErrorMessage error={error} />\n </FieldRow>\n )}\n </form>\n );\n};\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type FC } from \"react\";\nimport { Trans } from \"react-i18next\";\n\nimport { ExternalLink } from \"../button/Link\";\n\nexport const AnalyticsNotice: FC = () => (\n <Trans i18nKey=\"analytics_notice\">\n By participating in this beta, you consent to the collection of anonymous\n data, which we use to improve the product. You can find more information\n about which data we track in our{\" \"}\n <ExternalLink href=\"https://element.io/privacy\">\n Privacy Policy\n </ExternalLink>{\" \"}\n and our{\" \"}\n <ExternalLink href=\"https://element.io/cookie-policy\">\n Cookie Policy\n </ExternalLink>\n .\n </Trans>\n);\n","/*\nCopyright 2022-2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { type ChangeEvent, type FC, useCallback } from \"react\";\nimport { secureRandomString } from \"matrix-js-sdk/lib/randomstring\";\nimport { Trans, useTranslation } from \"react-i18next\";\nimport { Button, Text } from \"@vector-im/compound-web\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nimport { FieldRow, InputField, ErrorMessage } from \"../input/Input\";\nimport { useSubmitRageshake, useRageshakeRequest } from \"./submit-rageshake\";\nimport feedbackStyles from \"../input/FeedbackInput.module.css\";\nimport { AnalyticsNotice } from \"../analytics/AnalyticsNotice\";\nimport { useOptInAnalytics } from \"./settings\";\n\ninterface Props {\n roomId?: string;\n}\n\nexport const FeedbackSettingsTab: FC<Props> = ({ roomId }) => {\n const { t } = useTranslation();\n const { submitRageshake, sending, sent, error, available } =\n useSubmitRageshake();\n const sendRageshakeRequest = useRageshakeRequest();\n\n const onSubmitFeedback = useCallback(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (e) => {\n e.preventDefault();\n const data = new FormData(e.target);\n const descriptionData = data.get(\"description\");\n const description =\n typeof descriptionData === \"string\" ? descriptionData : \"\";\n const sendLogs = Boolean(data.get(\"sendLogs\"));\n const rageshakeRequestId = secureRandomString(16);\n\n submitRageshake({\n description,\n sendLogs,\n rageshakeRequestId,\n roomId,\n }).catch((e) => {\n logger.error(\"Failed to send feedback rageshake\", e);\n });\n\n if (roomId && sendLogs) {\n sendRageshakeRequest(roomId, rageshakeRequestId);\n }\n },\n [submitRageshake, roomId, sendRageshakeRequest],\n );\n\n const [optInAnalytics, setOptInAnalytics] = useOptInAnalytics();\n const optInDescription = (\n <Text size=\"sm\" as=\"span\">\n <Trans i18nKey=\"settings.opt_in_description\">\n <AnalyticsNotice />\n <br />\n You may withdraw consent by unchecking this box. If you are currently in\n a call, this setting will take effect at the end of the call.\n </Trans>\n </Text>\n );\n\n // in the embedded package the widget host is responsible for analytics consent\n const analyticsConsentBlock =\n import.meta.env.VITE_PACKAGE === \"embedded\" ? null : (\n <>\n <h4>{t(\"common.analytics\")}</h4>\n <FieldRow>\n <InputField\n id=\"optInAnalytics\"\n type=\"checkbox\"\n checked={optInAnalytics ?? undefined}\n description={optInDescription}\n onChange={(event: ChangeEvent<HTMLInputElement>): void => {\n setOptInAnalytics?.(event.target.checked);\n }}\n />\n </FieldRow>\n </>\n );\n\n const feedbackBlock = available ? (\n <>\n <h4>{t(\"settings.feedback_tab_h4\")}</h4>\n <Text>{t(\"settings.feedback_tab_body\")}</Text>\n <form onSubmit={onSubmitFeedback}>\n <FieldRow>\n <InputField\n className={feedbackStyles.feedback}\n id=\"description\"\n name=\"description\"\n label={t(\"settings.feedback_tab_description_label\")}\n placeholder={t(\"settings.feedback_tab_description_label\")}\n type=\"textarea\"\n disabled={sending || sent}\n />\n </FieldRow>\n {!sent && (\n <FieldRow>\n <InputField\n id=\"sendLogs\"\n name=\"sendLogs\"\n label={t(\"settings.feedback_tab_send_logs_label\")}\n type=\"checkbox\"\n defaultChecked\n />\n <Button type=\"submit\" disabled={sending}>\n {sending ? t(\"submitting\") : t(\"action.submit\")}\n </Button>\n </FieldRow>\n )}\n <FieldRow>\n {error && <ErrorMessage error={error} />}\n {sent && <Text>{t(\"settings.feedback_tab_thank_you\")}</Text>}\n </FieldRow>\n </form>\n </>\n ) : null;\n\n return (\n <div>\n {analyticsConsentBlock}\n {feedbackBlock}\n </div>\n );\n};\n","function _mergeNamespaces(n, m){m.forEach(function(e){e&&typeof e!=='string'&&!Array.isArray(e)&&Object.keys(e).forEach(function(k){if(k!=='default'&&!(k in n)){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})});return Object.freeze(n);}var e = Object.defineProperty;\nvar h = (i, s, t) => s in i ? e(i, s, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: t\n}) : i[s] = t;\nvar o = (i, s, t) => h(i, typeof s != \"symbol\" ? s + \"\" : s, t);\nclass _ {\n constructor() {\n o(this, \"_locking\");\n o(this, \"_locks\");\n this._locking = Promise.resolve(), this._locks = 0;\n }\n isLocked() {\n return this._locks > 0;\n }\n lock() {\n this._locks += 1;\n let s;\n const t = new Promise(l => s = () => {\n this._locks -= 1, l();\n }),\n c = this._locking.then(() => s);\n return this._locking = this._locking.then(() => t), c;\n }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Assert that condition is truthy or throw error (with message)\n */\nfunction assert(condition, msg) {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions -- we want the implicit conversion to boolean\n if (!condition) {\n throw new Error(msg);\n }\n}\nconst FLOAT32_MAX = 3.4028234663852886e38,\n FLOAT32_MIN = -34028234663852886e22,\n UINT32_MAX = 0xffffffff,\n INT32_MAX = 0x7fffffff,\n INT32_MIN = -2147483648;\n/**\n * Assert a valid signed protobuf 32-bit integer.\n */\nfunction assertInt32(arg) {\n if (typeof arg !== \"number\") throw new Error(\"invalid int 32: \" + typeof arg);\n if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN) throw new Error(\"invalid int 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}\n/**\n * Assert a valid unsigned protobuf 32-bit integer.\n */\nfunction assertUInt32(arg) {\n if (typeof arg !== \"number\") throw new Error(\"invalid uint 32: \" + typeof arg);\n if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0) throw new Error(\"invalid uint 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}\n/**\n * Assert a valid protobuf float value.\n */\nfunction assertFloat32(arg) {\n if (typeof arg !== \"number\") throw new Error(\"invalid float 32: \" + typeof arg);\n if (!Number.isFinite(arg)) return;\n if (arg > FLOAT32_MAX || arg < FLOAT32_MIN) throw new Error(\"invalid float 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nconst enumTypeSymbol = Symbol(\"@bufbuild/protobuf/enum-type\");\n/**\n * Get reflection information from a generated enum.\n * If this function is called on something other than a generated\n * enum, it raises an error.\n */\nfunction getEnumType(enumObject) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-explicit-any\n const t = enumObject[enumTypeSymbol];\n assert(t, \"missing enum type on enum object\");\n return t; // eslint-disable-line @typescript-eslint/no-unsafe-return\n}\n/**\n * Sets reflection information on a generated enum.\n */\nfunction setEnumType(enumObject, typeName, values, opt) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n enumObject[enumTypeSymbol] = makeEnumType(typeName, values.map(v => ({\n no: v.no,\n name: v.name,\n localName: enumObject[v.no]\n })));\n}\n/**\n * Create a new EnumType with the given values.\n */\nfunction makeEnumType(typeName, values,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_opt) {\n const names = Object.create(null);\n const numbers = Object.create(null);\n const normalValues = [];\n for (const value of values) {\n // We do not surface options at this time\n // const value: EnumValueInfo = {...v, options: v.options ?? emptyReadonlyObject};\n const n = normalizeEnumValue(value);\n normalValues.push(n);\n names[value.name] = n;\n numbers[value.no] = n;\n }\n return {\n typeName,\n values: normalValues,\n // We do not surface options at this time\n // options: opt?.options ?? Object.create(null),\n findName(name) {\n return names[name];\n },\n findNumber(no) {\n return numbers[no];\n }\n };\n}\n/**\n * Create a new enum object with the given values.\n * Sets reflection information.\n */\nfunction makeEnum(typeName, values, opt) {\n const enumObject = {};\n for (const value of values) {\n const n = normalizeEnumValue(value);\n enumObject[n.localName] = n.no;\n enumObject[n.no] = n.localName;\n }\n setEnumType(enumObject, typeName, values);\n return enumObject;\n}\nfunction normalizeEnumValue(value) {\n if (\"localName\" in value) {\n return value;\n }\n return Object.assign(Object.assign({}, value), {\n localName: value.name\n });\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Message is the base class of every message, generated, or created at\n * runtime.\n *\n * It is _not_ safe to extend this class. If you want to create a message at\n * run time, use proto3.makeMessageType().\n */\nclass Message {\n /**\n * Compare with a message of the same type.\n * Note that this function disregards extensions and unknown fields.\n */\n equals(other) {\n return this.getType().runtime.util.equals(this.getType(), this, other);\n }\n /**\n * Create a deep copy.\n */\n clone() {\n return this.getType().runtime.util.clone(this);\n }\n /**\n * Parse from binary data, merging fields.\n *\n * Repeated fields are appended. Map entries are added, overwriting\n * existing keys.\n *\n * If a message field is already present, it will be merged with the\n * new data.\n */\n fromBinary(bytes, options) {\n const type = this.getType(),\n format = type.runtime.bin,\n opt = format.makeReadOptions(options);\n format.readMessage(this, opt.readerFactory(bytes), bytes.byteLength, opt);\n return this;\n }\n /**\n * Parse a message from a JSON value.\n */\n fromJson(jsonValue, options) {\n const type = this.getType(),\n format = type.runtime.json,\n opt = format.makeReadOptions(options);\n format.readMessage(type, jsonValue, opt, this);\n return this;\n }\n /**\n * Parse a message from a JSON string.\n */\n fromJsonString(jsonString, options) {\n let json;\n try {\n json = JSON.parse(jsonString);\n } catch (e) {\n throw new Error(\"cannot decode \".concat(this.getType().typeName, \" from JSON: \").concat(e instanceof Error ? e.message : String(e)));\n }\n return this.fromJson(json, options);\n }\n /**\n * Serialize the message to binary data.\n */\n toBinary(options) {\n const type = this.getType(),\n bin = type.runtime.bin,\n opt = bin.makeWriteOptions(options),\n writer = opt.writerFactory();\n bin.writeMessage(this, writer, opt);\n return writer.finish();\n }\n /**\n * Serialize the message to a JSON value, a JavaScript value that can be\n * passed to JSON.stringify().\n */\n toJson(options) {\n const type = this.getType(),\n json = type.runtime.json,\n opt = json.makeWriteOptions(options);\n return json.writeMessage(this, opt);\n }\n /**\n * Serialize the message to a JSON string.\n */\n toJsonString(options) {\n var _a;\n const value = this.toJson(options);\n return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);\n }\n /**\n * Override for serialization behavior. This will be invoked when calling\n * JSON.stringify on this message (i.e. JSON.stringify(msg)).\n *\n * Note that this will not serialize google.protobuf.Any with a packed\n * message because the protobuf JSON format specifies that it needs to be\n * unpacked, and this is only possible with a type registry to look up the\n * message type. As a result, attempting to serialize a message with this\n * type will throw an Error.\n *\n * This method is protected because you should not need to invoke it\n * directly -- instead use JSON.stringify or toJsonString for\n * stringified JSON. Alternatively, if actual JSON is desired, you should\n * use toJson.\n */\n toJSON() {\n return this.toJson({\n emitDefaultValues: true\n });\n }\n /**\n * Retrieve the MessageType of this message - a singleton that represents\n * the protobuf message declaration and provides metadata for reflection-\n * based operations.\n */\n getType() {\n // Any class that extends Message _must_ provide a complete static\n // implementation of MessageType.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return\n return Object.getPrototypeOf(this).constructor;\n }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Create a new message type using the given runtime.\n */\nfunction makeMessageType(runtime, typeName, fields, opt) {\n var _a;\n const localName = (_a = opt === null || opt === void 0 ? void 0 : opt.localName) !== null && _a !== void 0 ? _a : typeName.substring(typeName.lastIndexOf(\".\") + 1);\n const type = {\n [localName]: function (data) {\n runtime.util.initFields(this);\n runtime.util.initPartial(data, this);\n }\n }[localName];\n Object.setPrototypeOf(type.prototype, new Message());\n Object.assign(type, {\n runtime,\n typeName,\n fields: runtime.util.newFieldList(fields),\n fromBinary(bytes, options) {\n return new type().fromBinary(bytes, options);\n },\n fromJson(jsonValue, options) {\n return new type().fromJson(jsonValue, options);\n },\n fromJsonString(jsonString, options) {\n return new type().fromJsonString(jsonString, options);\n },\n equals(a, b) {\n return runtime.util.equals(type, a, b);\n }\n });\n return type;\n}// Copyright 2008 Google Inc. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it. This code is not\n// standalone and requires a support library to be linked with it. This\n// support library is itself covered by the above license.\n/* eslint-disable prefer-const,@typescript-eslint/restrict-plus-operands */\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [1]: high bits\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nfunction varint64read() {\n let lowBits = 0;\n let highBits = 0;\n for (let shift = 0; shift < 28; shift += 7) {\n let b = this.buf[this.pos++];\n lowBits |= (b & 0x7f) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n let middleByte = this.buf[this.pos++];\n // last four bits of the first 32 bit number\n lowBits |= (middleByte & 0x0f) << 28;\n // 3 upper bits are part of the next 32 bit number\n highBits = (middleByte & 0x70) >> 4;\n if ((middleByte & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n for (let shift = 3; shift <= 31; shift += 7) {\n let b = this.buf[this.pos++];\n highBits |= (b & 0x7f) << shift;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n throw new Error(\"invalid varint\");\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nfunction varint64write(lo, hi, bytes) {\n for (let i = 0; i < 28; i = i + 7) {\n const shift = lo >>> i;\n const hasNext = !(shift >>> 7 == 0 && hi == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n const splitBits = lo >>> 28 & 0x0f | (hi & 0x07) << 4;\n const hasMoreBits = !(hi >> 3 == 0);\n bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xff);\n if (!hasMoreBits) {\n return;\n }\n for (let i = 3; i < 31; i = i + 7) {\n const shift = hi >>> i;\n const hasNext = !(shift >>> 7 == 0);\n const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n bytes.push(hi >>> 31 & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction int64FromString(dec) {\n // Check for minus sign.\n const minus = dec[0] === \"-\";\n if (minus) {\n dec = dec.slice(1);\n }\n // Work 6 decimal digits at a time, acting like we're converting base 1e6\n // digits to binary. This is safe to do with floating point math because\n // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n const base = 1e6;\n let lowBits = 0;\n let highBits = 0;\n function add1e6digit(begin, end) {\n // Note: Number('') is 0.\n const digit1e6 = Number(dec.slice(begin, end));\n highBits *= base;\n lowBits = lowBits * base + digit1e6;\n // Carry bits from lowBits to\n if (lowBits >= TWO_PWR_32_DBL) {\n highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);\n lowBits = lowBits % TWO_PWR_32_DBL;\n }\n }\n add1e6digit(-24, -18);\n add1e6digit(-18, -12);\n add1e6digit(-12, -6);\n add1e6digit(-6);\n return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\n/**\n * Losslessly converts a 64-bit signed integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction int64ToString(lo, hi) {\n let bits = newBits(lo, hi);\n // If we're treating the input as a signed value and the high bit is set, do\n // a manual two's complement conversion before the decimal conversion.\n const negative = bits.hi & 0x80000000;\n if (negative) {\n bits = negate(bits.lo, bits.hi);\n }\n const result = uInt64ToString(bits.lo, bits.hi);\n return negative ? \"-\" + result : result;\n}\n/**\n * Losslessly converts a 64-bit unsigned integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction uInt64ToString(lo, hi) {\n // Skip the expensive conversion if the number is small enough to use the\n // built-in conversions.\n // Number.MAX_SAFE_INTEGER = 0x001FFFFF FFFFFFFF, thus any number with\n // highBits <= 0x1FFFFF can be safely expressed with a double and retain\n // integer precision.\n // Proven by: Number.isSafeInteger(0x1FFFFF * 2**32 + 0xFFFFFFFF) == true.\n var _toUnsigned = toUnsigned(lo, hi);\n lo = _toUnsigned.lo;\n hi = _toUnsigned.hi;\n if (hi <= 0x1FFFFF) {\n return String(TWO_PWR_32_DBL * hi + lo);\n }\n // What this code is doing is essentially converting the input number from\n // base-2 to base-1e7, which allows us to represent the 64-bit range with\n // only 3 (very large) digits. Those digits are then trivial to convert to\n // a base-10 string.\n // The magic numbers used here are -\n // 2^24 = 16777216 = (1,6777216) in base-1e7.\n // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n // Split 32:32 representation into 16:24:24 representation so our\n // intermediate digits don't overflow.\n const low = lo & 0xFFFFFF;\n const mid = (lo >>> 24 | hi << 8) & 0xFFFFFF;\n const high = hi >> 16 & 0xFFFF;\n // Assemble our three base-1e7 digits, ignoring carries. The maximum\n // value in a digit at this step is representable as a 48-bit integer, which\n // can be stored in a 64-bit floating point number.\n let digitA = low + mid * 6777216 + high * 6710656;\n let digitB = mid + high * 8147497;\n let digitC = high * 2;\n // Apply carries from A to B and from B to C.\n const base = 10000000;\n if (digitA >= base) {\n digitB += Math.floor(digitA / base);\n digitA %= base;\n }\n if (digitB >= base) {\n digitC += Math.floor(digitB / base);\n digitB %= base;\n }\n // If digitC is 0, then we should have returned in the trivial code path\n // at the top for non-safe integers. Given this, we can assume both digitB\n // and digitA need leading zeros.\n return digitC.toString() + decimalFrom1e7WithLeadingZeros(digitB) + decimalFrom1e7WithLeadingZeros(digitA);\n}\nfunction toUnsigned(lo, hi) {\n return {\n lo: lo >>> 0,\n hi: hi >>> 0\n };\n}\nfunction newBits(lo, hi) {\n return {\n lo: lo | 0,\n hi: hi | 0\n };\n}\n/**\n * Returns two's compliment negation of input.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers\n */\nfunction negate(lowBits, highBits) {\n highBits = ~highBits;\n if (lowBits) {\n lowBits = ~lowBits + 1;\n } else {\n // If lowBits is 0, then bitwise-not is 0xFFFFFFFF,\n // adding 1 to that, results in 0x100000000, which leaves\n // the low bits 0x0 and simply adds one to the high bits.\n highBits += 1;\n }\n return newBits(lowBits, highBits);\n}\n/**\n * Returns decimal representation of digit1e7 with leading zeros.\n */\nconst decimalFrom1e7WithLeadingZeros = digit1e7 => {\n const partial = String(digit1e7);\n return \"0000000\".slice(partial.length) + partial;\n};\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc. All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nfunction varint32write(value, bytes) {\n if (value >= 0) {\n // write value as varint 32\n while (value > 0x7f) {\n bytes.push(value & 0x7f | 0x80);\n value = value >>> 7;\n }\n bytes.push(value);\n } else {\n for (let i = 0; i < 9; i++) {\n bytes.push(value & 127 | 128);\n value = value >> 7;\n }\n bytes.push(1);\n }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nfunction varint32read() {\n let b = this.buf[this.pos++];\n let result = b & 0x7f;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 7;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 14;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 0x7f) << 21;\n if ((b & 0x80) == 0) {\n this.assertBounds();\n return result;\n }\n // Extract only last 4 bits\n b = this.buf[this.pos++];\n result |= (b & 0x0f) << 28;\n for (let readBytes = 5; (b & 0x80) !== 0 && readBytes < 10; readBytes++) b = this.buf[this.pos++];\n if ((b & 0x80) != 0) throw new Error(\"invalid varint\");\n this.assertBounds();\n // Result can have 32 bits, convert it to unsigned\n return result >>> 0;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nfunction makeInt64Support() {\n const dv = new DataView(new ArrayBuffer(8));\n // note that Safari 14 implements BigInt, but not the DataView methods\n const ok = typeof BigInt === \"function\" && typeof dv.getBigInt64 === \"function\" && typeof dv.getBigUint64 === \"function\" && typeof dv.setBigInt64 === \"function\" && typeof dv.setBigUint64 === \"function\" && (typeof process != \"object\" || typeof process.env != \"object\" || process.env.BUF_BIGINT_DISABLE !== \"1\");\n if (ok) {\n const MIN = BigInt(\"-9223372036854775808\"),\n MAX = BigInt(\"9223372036854775807\"),\n UMIN = BigInt(\"0\"),\n UMAX = BigInt(\"18446744073709551615\");\n return {\n zero: BigInt(0),\n supported: true,\n parse(value) {\n const bi = typeof value == \"bigint\" ? value : BigInt(value);\n if (bi > MAX || bi < MIN) {\n throw new Error(\"int64 invalid: \".concat(value));\n }\n return bi;\n },\n uParse(value) {\n const bi = typeof value == \"bigint\" ? value : BigInt(value);\n if (bi > UMAX || bi < UMIN) {\n throw new Error(\"uint64 invalid: \".concat(value));\n }\n return bi;\n },\n enc(value) {\n dv.setBigInt64(0, this.parse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true)\n };\n },\n uEnc(value) {\n dv.setBigInt64(0, this.uParse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true)\n };\n },\n dec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigInt64(0, true);\n },\n uDec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigUint64(0, true);\n }\n };\n }\n const assertInt64String = value => assert(/^-?[0-9]+$/.test(value), \"int64 invalid: \".concat(value));\n const assertUInt64String = value => assert(/^[0-9]+$/.test(value), \"uint64 invalid: \".concat(value));\n return {\n zero: \"0\",\n supported: false,\n parse(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertInt64String(value);\n return value;\n },\n uParse(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertUInt64String(value);\n return value;\n },\n enc(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertInt64String(value);\n return int64FromString(value);\n },\n uEnc(value) {\n if (typeof value != \"string\") {\n value = value.toString();\n }\n assertUInt64String(value);\n return int64FromString(value);\n },\n dec(lo, hi) {\n return int64ToString(lo, hi);\n },\n uDec(lo, hi) {\n return uInt64ToString(lo, hi);\n }\n };\n}\nconst protoInt64 = makeInt64Support();// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Scalar value types. This is a subset of field types declared by protobuf\n * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE\n * are omitted, but the numerical values are identical.\n */\nvar ScalarType;\n(function (ScalarType) {\n // 0 is reserved for errors.\n // Order is weird for historical reasons.\n ScalarType[ScalarType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n ScalarType[ScalarType[\"FLOAT\"] = 2] = \"FLOAT\";\n // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if\n // negative values are likely.\n ScalarType[ScalarType[\"INT64\"] = 3] = \"INT64\";\n ScalarType[ScalarType[\"UINT64\"] = 4] = \"UINT64\";\n // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if\n // negative values are likely.\n ScalarType[ScalarType[\"INT32\"] = 5] = \"INT32\";\n ScalarType[ScalarType[\"FIXED64\"] = 6] = \"FIXED64\";\n ScalarType[ScalarType[\"FIXED32\"] = 7] = \"FIXED32\";\n ScalarType[ScalarType[\"BOOL\"] = 8] = \"BOOL\";\n ScalarType[ScalarType[\"STRING\"] = 9] = \"STRING\";\n // Tag-delimited aggregate.\n // Group type is deprecated and not supported in proto3. However, Proto3\n // implementations should still be able to parse the group wire format and\n // treat group fields as unknown fields.\n // TYPE_GROUP = 10,\n // TYPE_MESSAGE = 11, // Length-delimited aggregate.\n // New in version 2.\n ScalarType[ScalarType[\"BYTES\"] = 12] = \"BYTES\";\n ScalarType[ScalarType[\"UINT32\"] = 13] = \"UINT32\";\n // TYPE_ENUM = 14,\n ScalarType[ScalarType[\"SFIXED32\"] = 15] = \"SFIXED32\";\n ScalarType[ScalarType[\"SFIXED64\"] = 16] = \"SFIXED64\";\n ScalarType[ScalarType[\"SINT32\"] = 17] = \"SINT32\";\n ScalarType[ScalarType[\"SINT64\"] = 18] = \"SINT64\";\n})(ScalarType || (ScalarType = {}));\n/**\n * JavaScript representation of fields with 64 bit integral types (int64, uint64,\n * sint64, fixed64, sfixed64).\n *\n * This is a subset of google.protobuf.FieldOptions.JSType, which defines JS_NORMAL,\n * JS_STRING, and JS_NUMBER. Protobuf-ES uses BigInt by default, but will use\n * String if `[jstype = JS_STRING]` is specified.\n *\n * ```protobuf\n * uint64 field_a = 1; // BigInt\n * uint64 field_b = 2 [jstype = JS_NORMAL]; // BigInt\n * uint64 field_b = 2 [jstype = JS_NUMBER]; // BigInt\n * uint64 field_b = 2 [jstype = JS_STRING]; // String\n * ```\n */\nvar LongType;\n(function (LongType) {\n /**\n * Use JavaScript BigInt.\n */\n LongType[LongType[\"BIGINT\"] = 0] = \"BIGINT\";\n /**\n * Use JavaScript String.\n *\n * Field option `[jstype = JS_STRING]`.\n */\n LongType[LongType[\"STRING\"] = 1] = \"STRING\";\n})(LongType || (LongType = {}));// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns true if both scalar values are equal.\n */\nfunction scalarEquals(type, a, b) {\n if (a === b) {\n // This correctly matches equal values except BYTES and (possibly) 64-bit integers.\n return true;\n }\n // Special case BYTES - we need to compare each byte individually\n if (type == ScalarType.BYTES) {\n if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n // Special case 64-bit integers - we support number, string and bigint representation.\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (type) {\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n // Loose comparison will match between 0n, 0 and \"0\".\n return a == b;\n }\n // Anything that hasn't been caught by strict comparison or special cased\n // BYTES and 64-bit integers is not equal.\n return false;\n}\n/**\n * Returns the zero value for the given scalar type.\n */\nfunction scalarZeroValue(type, longType) {\n switch (type) {\n case ScalarType.BOOL:\n return false;\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- acceptable since it's covered by tests\n return longType == 0 ? protoInt64.zero : \"0\";\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return 0.0;\n case ScalarType.BYTES:\n return new Uint8Array(0);\n case ScalarType.STRING:\n return \"\";\n default:\n // Handles INT32, UINT32, SINT32, FIXED32, SFIXED32.\n // We do not use individual cases to save a few bytes code size.\n return 0;\n }\n}\n/**\n * Returns true for a zero-value. For example, an integer has the zero-value `0`,\n * a boolean is `false`, a string is `\"\"`, and bytes is an empty Uint8Array.\n *\n * In proto3, zero-values are not written to the wire, unless the field is\n * optional or repeated.\n */\nfunction isScalarZeroValue(type, value) {\n switch (type) {\n case ScalarType.BOOL:\n return value === false;\n case ScalarType.STRING:\n return value === \"\";\n case ScalarType.BYTES:\n return value instanceof Uint8Array && !value.byteLength;\n default:\n return value == 0;\n // Loose comparison matches 0n, 0 and \"0\"\n }\n}function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: true,\n configurable: true,\n writable: true\n }) : e[r] = t, e;\n}\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = true,\n o = false;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = true, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r);\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n }\n}/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/restrict-plus-operands */\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nvar WireType;\n(function (WireType) {\n /**\n * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n */\n WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n /**\n * Used for fixed64, sfixed64, double.\n * Always 8 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n /**\n * Used for string, bytes, embedded messages, packed repeated fields\n *\n * Only repeated numeric types (types which use the varint, 32-bit,\n * or 64-bit wire types) can be packed. In proto3, such fields are\n * packed by default.\n */\n WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n /**\n * Start of a tag-delimited aggregate, such as a proto2 group, or a message\n * in editions with message_encoding = DELIMITED.\n */\n WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n /**\n * End of a tag-delimited aggregate.\n */\n WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n /**\n * Used for fixed32, sfixed32, float.\n * Always 4 bytes with little-endian byte order.\n */\n WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\nclass BinaryWriter {\n constructor(textEncoder) {\n /**\n * Previous fork states.\n */\n this.stack = [];\n this.textEncoder = textEncoder !== null && textEncoder !== void 0 ? textEncoder : new TextEncoder();\n this.chunks = [];\n this.buf = [];\n }\n /**\n * Return all bytes written and reset this writer.\n */\n finish() {\n this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n let len = 0;\n for (let i = 0; i < this.chunks.length; i++) len += this.chunks[i].length;\n let bytes = new Uint8Array(len);\n let offset = 0;\n for (let i = 0; i < this.chunks.length; i++) {\n bytes.set(this.chunks[i], offset);\n offset += this.chunks[i].length;\n }\n this.chunks = [];\n return bytes;\n }\n /**\n * Start a new fork for length-delimited data like a message\n * or a packed repeated field.\n *\n * Must be joined later with `join()`.\n */\n fork() {\n this.stack.push({\n chunks: this.chunks,\n buf: this.buf\n });\n this.chunks = [];\n this.buf = [];\n return this;\n }\n /**\n * Join the last fork. Write its length and bytes, then\n * return to the previous state.\n */\n join() {\n // get chunk of fork\n let chunk = this.finish();\n // restore previous state\n let prev = this.stack.pop();\n if (!prev) throw new Error(\"invalid state, fork stack empty\");\n this.chunks = prev.chunks;\n this.buf = prev.buf;\n // write length of chunk as varint\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Writes a tag (field number and wire type).\n *\n * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n *\n * Generated code should compute the tag ahead of time and call `uint32()`.\n */\n tag(fieldNo, type) {\n return this.uint32((fieldNo << 3 | type) >>> 0);\n }\n /**\n * Write a chunk of raw bytes.\n */\n raw(chunk) {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n this.chunks.push(chunk);\n return this;\n }\n /**\n * Write a `uint32` value, an unsigned 32 bit varint.\n */\n uint32(value) {\n assertUInt32(value);\n // write value as varint 32, inlined for speed\n while (value > 0x7f) {\n this.buf.push(value & 0x7f | 0x80);\n value = value >>> 7;\n }\n this.buf.push(value);\n return this;\n }\n /**\n * Write a `int32` value, a signed 32 bit varint.\n */\n int32(value) {\n assertInt32(value);\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `bool` value, a variant.\n */\n bool(value) {\n this.buf.push(value ? 1 : 0);\n return this;\n }\n /**\n * Write a `bytes` value, length-delimited arbitrary data.\n */\n bytes(value) {\n this.uint32(value.byteLength); // write length of chunk as varint\n return this.raw(value);\n }\n /**\n * Write a `string` value, length-delimited data converted to UTF-8 text.\n */\n string(value) {\n let chunk = this.textEncoder.encode(value);\n this.uint32(chunk.byteLength); // write length of chunk as varint\n return this.raw(chunk);\n }\n /**\n * Write a `float` value, 32-bit floating point number.\n */\n float(value) {\n assertFloat32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setFloat32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `double` value, a 64-bit floating point number.\n */\n double(value) {\n let chunk = new Uint8Array(8);\n new DataView(chunk.buffer).setFloat64(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n */\n fixed32(value) {\n assertUInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setUint32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n */\n sfixed32(value) {\n assertInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setInt32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n */\n sint32(value) {\n assertInt32(value);\n // zigzag encode\n value = (value << 1 ^ value >> 31) >>> 0;\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n */\n sfixed64(value) {\n let chunk = new Uint8Array(8),\n view = new DataView(chunk.buffer),\n tc = protoInt64.enc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n */\n fixed64(value) {\n let chunk = new Uint8Array(8),\n view = new DataView(chunk.buffer),\n tc = protoInt64.uEnc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `int64` value, a signed 64-bit varint.\n */\n int64(value) {\n let tc = protoInt64.enc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n /**\n * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64(value) {\n let tc = protoInt64.enc(value),\n // zigzag encode\n sign = tc.hi >> 31,\n lo = tc.lo << 1 ^ sign,\n hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;\n varint64write(lo, hi, this.buf);\n return this;\n }\n /**\n * Write a `uint64` value, an unsigned 64-bit varint.\n */\n uint64(value) {\n let tc = protoInt64.uEnc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n}\nclass BinaryReader {\n constructor(buf, textDecoder) {\n this.varint64 = varint64read; // dirty cast for `this`\n /**\n * Read a `uint32` field, an unsigned 32 bit varint.\n */\n this.uint32 = varint32read; // dirty cast for `this` and access to protected `buf`\n this.buf = buf;\n this.len = buf.length;\n this.pos = 0;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n this.textDecoder = textDecoder !== null && textDecoder !== void 0 ? textDecoder : new TextDecoder();\n }\n /**\n * Reads a tag - field number and wire type.\n */\n tag() {\n let tag = this.uint32(),\n fieldNo = tag >>> 3,\n wireType = tag & 7;\n if (fieldNo <= 0 || wireType < 0 || wireType > 5) throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n return [fieldNo, wireType];\n }\n /**\n * Skip one element and return the skipped data.\n *\n * When skipping StartGroup, provide the tags field number to check for\n * matching field number in the EndGroup tag.\n */\n skip(wireType, fieldNo) {\n let start = this.pos;\n switch (wireType) {\n case WireType.Varint:\n while (this.buf[this.pos++] & 0x80) {\n // ignore\n }\n break;\n // eslint-disable-next-line\n // @ts-ignore TS7029: Fallthrough case in switch\n case WireType.Bit64:\n this.pos += 4;\n // eslint-disable-next-line\n // @ts-ignore TS7029: Fallthrough case in switch\n case WireType.Bit32:\n this.pos += 4;\n break;\n case WireType.LengthDelimited:\n let len = this.uint32();\n this.pos += len;\n break;\n case WireType.StartGroup:\n for (;;) {\n const _this$tag = this.tag(),\n _this$tag2 = _slicedToArray(_this$tag, 2),\n fn = _this$tag2[0],\n wt = _this$tag2[1];\n if (wt === WireType.EndGroup) {\n if (fieldNo !== undefined && fn !== fieldNo) {\n throw new Error(\"invalid end group tag\");\n }\n break;\n }\n this.skip(wt, fn);\n }\n break;\n default:\n throw new Error(\"cant skip wire type \" + wireType);\n }\n this.assertBounds();\n return this.buf.subarray(start, this.pos);\n }\n /**\n * Throws error if position in byte array is out of range.\n */\n assertBounds() {\n if (this.pos > this.len) throw new RangeError(\"premature EOF\");\n }\n /**\n * Read a `int32` field, a signed 32 bit varint.\n */\n int32() {\n return this.uint32() | 0;\n }\n /**\n * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n */\n sint32() {\n let zze = this.uint32();\n // decode zigzag\n return zze >>> 1 ^ -(zze & 1);\n }\n /**\n * Read a `int64` field, a signed 64-bit varint.\n */\n int64() {\n return protoInt64.dec(...this.varint64());\n }\n /**\n * Read a `uint64` field, an unsigned 64-bit varint.\n */\n uint64() {\n return protoInt64.uDec(...this.varint64());\n }\n /**\n * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64() {\n let _this$varint = this.varint64(),\n _this$varint2 = _slicedToArray(_this$varint, 2),\n lo = _this$varint2[0],\n hi = _this$varint2[1];\n // decode zig zag\n let s = -(lo & 1);\n lo = (lo >>> 1 | (hi & 1) << 31) ^ s;\n hi = hi >>> 1 ^ s;\n return protoInt64.dec(lo, hi);\n }\n /**\n * Read a `bool` field, a variant.\n */\n bool() {\n let _this$varint3 = this.varint64(),\n _this$varint4 = _slicedToArray(_this$varint3, 2),\n lo = _this$varint4[0],\n hi = _this$varint4[1];\n return lo !== 0 || hi !== 0;\n }\n /**\n * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n */\n fixed32() {\n return this.view.getUint32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n */\n sfixed32() {\n return this.view.getInt32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n */\n fixed64() {\n return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n */\n sfixed64() {\n return protoInt64.dec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `float` field, 32-bit floating point number.\n */\n float() {\n return this.view.getFloat32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `double` field, a 64-bit floating point number.\n */\n double() {\n return this.view.getFloat64((this.pos += 8) - 8, true);\n }\n /**\n * Read a `bytes` field, length-delimited arbitrary data.\n */\n bytes() {\n let len = this.uint32(),\n start = this.pos;\n this.pos += len;\n this.assertBounds();\n return this.buf.subarray(start, start + len);\n }\n /**\n * Read a `string` field, length-delimited data converted to UTF-8 text.\n */\n string() {\n return this.textDecoder.decode(this.bytes());\n }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Create a new extension using the given runtime.\n */\nfunction makeExtension(runtime, typeName, extendee, field) {\n let fi;\n return {\n typeName,\n extendee,\n get field() {\n if (!fi) {\n const i = typeof field == \"function\" ? field() : field;\n i.name = typeName.split(\".\").pop();\n i.jsonName = \"[\".concat(typeName, \"]\");\n fi = runtime.util.newFieldList([i]).list()[0];\n }\n return fi;\n },\n runtime\n };\n}\n/**\n * Create a container that allows us to read extension fields into it with the\n * same logic as regular fields.\n */\nfunction createExtensionContainer(extension) {\n const localName = extension.field.localName;\n const container = Object.create(null);\n container[localName] = initExtensionField(extension);\n return [container, () => container[localName]];\n}\nfunction initExtensionField(ext) {\n const field = ext.field;\n if (field.repeated) {\n return [];\n }\n if (field.default !== undefined) {\n return field.default;\n }\n switch (field.kind) {\n case \"enum\":\n return field.T.values[0].no;\n case \"scalar\":\n return scalarZeroValue(field.T, field.L);\n case \"message\":\n // eslint-disable-next-line no-case-declarations\n const T = field.T,\n value = new T();\n return T.fieldWrapper ? T.fieldWrapper.unwrapField(value) : value;\n case \"map\":\n throw \"map fields are not allowed to be extensions\";\n }\n}\n/**\n * Helper to filter unknown fields, optimized based on field type.\n */\nfunction filterUnknownFields(unknownFields, field) {\n if (!field.repeated && (field.kind == \"enum\" || field.kind == \"scalar\")) {\n // singular scalar fields do not merge, we pick the last\n for (let i = unknownFields.length - 1; i >= 0; --i) {\n if (unknownFields[i].no == field.no) {\n return [unknownFields[i]];\n }\n }\n return [];\n }\n return unknownFields.filter(uf => uf.no === field.no);\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/* eslint-disable @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unnecessary-condition, prefer-const */\n// lookup table from base64 character to byte\nlet encTable = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\");\n// lookup table from base64 character *code* to byte because lookup by number is fast\nlet decTable = [];\nfor (let i = 0; i < encTable.length; i++) decTable[encTable[i].charCodeAt(0)] = i;\n// support base64url variants\ndecTable[\"-\".charCodeAt(0)] = encTable.indexOf(\"+\");\ndecTable[\"_\".charCodeAt(0)] = encTable.indexOf(\"/\");\nconst protoBase64 = {\n /**\n * Decodes a base64 string to a byte array.\n *\n * - ignores white-space, including line breaks and tabs\n * - allows inner padding (can decode concatenated base64 strings)\n * - does not require padding\n * - understands base64url encoding:\n * \"-\" instead of \"+\",\n * \"_\" instead of \"/\",\n * no padding\n */\n dec(base64Str) {\n // estimate byte size, not accounting for inner padding and whitespace\n let es = base64Str.length * 3 / 4;\n if (base64Str[base64Str.length - 2] == \"=\") es -= 2;else if (base64Str[base64Str.length - 1] == \"=\") es -= 1;\n let bytes = new Uint8Array(es),\n bytePos = 0,\n // position in byte array\n groupPos = 0,\n // position in base64 group\n b,\n // current byte\n p = 0; // previous byte\n for (let i = 0; i < base64Str.length; i++) {\n b = decTable[base64Str.charCodeAt(i)];\n if (b === undefined) {\n switch (base64Str[i]) {\n // @ts-ignore TS7029: Fallthrough case in switch\n case \"=\":\n groupPos = 0;\n // reset state when padding found\n // @ts-ignore TS7029: Fallthrough case in switch\n case \"\\n\":\n case \"\\r\":\n case \"\\t\":\n case \" \":\n continue;\n // skip white-space, and padding\n default:\n throw Error(\"invalid base64 string.\");\n }\n }\n switch (groupPos) {\n case 0:\n p = b;\n groupPos = 1;\n break;\n case 1:\n bytes[bytePos++] = p << 2 | (b & 48) >> 4;\n p = b;\n groupPos = 2;\n break;\n case 2:\n bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;\n p = b;\n groupPos = 3;\n break;\n case 3:\n bytes[bytePos++] = (p & 3) << 6 | b;\n groupPos = 0;\n break;\n }\n }\n if (groupPos == 1) throw Error(\"invalid base64 string.\");\n return bytes.subarray(0, bytePos);\n },\n /**\n * Encode a byte array to a base64 string.\n */\n enc(bytes) {\n let base64 = \"\",\n groupPos = 0,\n // position in base64 group\n b,\n // current byte\n p = 0; // carry over from previous byte\n for (let i = 0; i < bytes.length; i++) {\n b = bytes[i];\n switch (groupPos) {\n case 0:\n base64 += encTable[b >> 2];\n p = (b & 3) << 4;\n groupPos = 1;\n break;\n case 1:\n base64 += encTable[p | b >> 4];\n p = (b & 15) << 2;\n groupPos = 2;\n break;\n case 2:\n base64 += encTable[p | b >> 6];\n base64 += encTable[b & 63];\n groupPos = 0;\n break;\n }\n }\n // add output padding\n if (groupPos) {\n base64 += encTable[p];\n base64 += \"=\";\n if (groupPos == 1) base64 += \"=\";\n }\n return base64;\n }\n};/**\n * Retrieve an extension value from a message.\n *\n * The function never returns undefined. Use hasExtension() to check whether an\n * extension is set. If the extension is not set, this function returns the\n * default value (if one was specified in the protobuf source), or the zero value\n * (for example `0` for numeric types, `[]` for repeated extension fields, and\n * an empty message instance for message fields).\n *\n * Extensions are stored as unknown fields on a message. To mutate an extension\n * value, make sure to store the new value with setExtension() after mutating.\n *\n * If the extension does not extend the given message, an error is raised.\n */\nfunction getExtension(message, extension, options) {\n assertExtendee(extension, message);\n const opt = extension.runtime.bin.makeReadOptions(options);\n const ufs = filterUnknownFields(message.getType().runtime.bin.listUnknownFields(message), extension.field);\n const _createExtensionConta = createExtensionContainer(extension),\n _createExtensionConta2 = _slicedToArray(_createExtensionConta, 2),\n container = _createExtensionConta2[0],\n get = _createExtensionConta2[1];\n for (const uf of ufs) {\n extension.runtime.bin.readField(container, opt.readerFactory(uf.data), extension.field, uf.wireType, opt);\n }\n return get();\n}\n/**\n * Set an extension value on a message. If the message already has a value for\n * this extension, the value is replaced.\n *\n * If the extension does not extend the given message, an error is raised.\n */\nfunction setExtension(message, extension, value, options) {\n assertExtendee(extension, message);\n const readOpt = extension.runtime.bin.makeReadOptions(options);\n const writeOpt = extension.runtime.bin.makeWriteOptions(options);\n if (hasExtension(message, extension)) {\n const ufs = message.getType().runtime.bin.listUnknownFields(message).filter(uf => uf.no != extension.field.no);\n message.getType().runtime.bin.discardUnknownFields(message);\n for (const uf of ufs) {\n message.getType().runtime.bin.onUnknownField(message, uf.no, uf.wireType, uf.data);\n }\n }\n const writer = writeOpt.writerFactory();\n let f = extension.field;\n // Implicit presence does not apply to extensions, see https://github.com/protocolbuffers/protobuf/issues/8234\n // We patch the field info to use explicit presence:\n if (!f.opt && !f.repeated && (f.kind == \"enum\" || f.kind == \"scalar\")) {\n f = Object.assign(Object.assign({}, extension.field), {\n opt: true\n });\n }\n extension.runtime.bin.writeField(f, value, writer, writeOpt);\n const reader = readOpt.readerFactory(writer.finish());\n while (reader.pos < reader.len) {\n const _reader$tag = reader.tag(),\n _reader$tag2 = _slicedToArray(_reader$tag, 2),\n no = _reader$tag2[0],\n wireType = _reader$tag2[1];\n const data = reader.skip(wireType, no);\n message.getType().runtime.bin.onUnknownField(message, no, wireType, data);\n }\n}\n/**\n * Check whether an extension is set on a message.\n */\nfunction hasExtension(message, extension) {\n const messageType = message.getType();\n return extension.extendee.typeName === messageType.typeName && !!messageType.runtime.bin.listUnknownFields(message).find(uf => uf.no == extension.field.no);\n}\nfunction assertExtendee(extension, message) {\n assert(extension.extendee.typeName == message.getType().typeName, \"extension \".concat(extension.typeName, \" can only be applied to message \").concat(extension.extendee.typeName));\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns true if the field is set.\n */\nfunction isFieldSet(field, target) {\n const localName = field.localName;\n if (field.repeated) {\n return target[localName].length > 0;\n }\n if (field.oneof) {\n return target[field.oneof.localName].case === localName; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n }\n switch (field.kind) {\n case \"enum\":\n case \"scalar\":\n if (field.opt || field.req) {\n // explicit presence\n return target[localName] !== undefined;\n }\n // implicit presence\n if (field.kind == \"enum\") {\n return target[localName] !== field.T.values[0].no;\n }\n return !isScalarZeroValue(field.T, target[localName]);\n case \"message\":\n return target[localName] !== undefined;\n case \"map\":\n return Object.keys(target[localName]).length > 0;\n // eslint-disable-line @typescript-eslint/no-unsafe-argument\n }\n}\n/**\n * Resets the field, so that isFieldSet() will return false.\n */\nfunction clearField(field, target) {\n const localName = field.localName;\n const implicitPresence = !field.opt && !field.req;\n if (field.repeated) {\n target[localName] = [];\n } else if (field.oneof) {\n target[field.oneof.localName] = {\n case: undefined\n };\n } else {\n switch (field.kind) {\n case \"map\":\n target[localName] = {};\n break;\n case \"enum\":\n target[localName] = implicitPresence ? field.T.values[0].no : undefined;\n break;\n case \"scalar\":\n target[localName] = implicitPresence ? scalarZeroValue(field.T, field.L) : undefined;\n break;\n case \"message\":\n target[localName] = undefined;\n break;\n }\n }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Check whether the given object is any subtype of Message or is a specific\n * Message by passing the type.\n *\n * Just like `instanceof`, `isMessage` narrows the type. The advantage of\n * `isMessage` is that it compares identity by the message type name, not by\n * class identity. This makes it robust against the dual package hazard and\n * similar situations, where the same message is duplicated.\n *\n * This function is _mostly_ equivalent to the `instanceof` operator. For\n * example, `isMessage(foo, MyMessage)` is the same as `foo instanceof MyMessage`,\n * and `isMessage(foo)` is the same as `foo instanceof Message`. In most cases,\n * `isMessage` should be preferred over `instanceof`.\n *\n * However, due to the fact that `isMessage` does not use class identity, there\n * are subtle differences between this function and `instanceof`. Notably,\n * calling `isMessage` on an explicit type of Message will return false.\n */\nfunction isMessage(arg, type) {\n if (arg === null || typeof arg != \"object\") {\n return false;\n }\n if (!Object.getOwnPropertyNames(Message.prototype).every(m => m in arg && typeof arg[m] == \"function\")) {\n return false;\n }\n const actualType = arg.getType();\n if (actualType === null || typeof actualType != \"function\" || !(\"typeName\" in actualType) || typeof actualType.typeName != \"string\") {\n return false;\n }\n return type === undefined ? true : actualType.typeName == type.typeName;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Wrap a primitive message field value in its corresponding wrapper\n * message. This function is idempotent.\n */\nfunction wrapField(type, value) {\n if (isMessage(value) || !type.fieldWrapper) {\n return value;\n }\n return type.fieldWrapper.wrapField(value);\n}\n({\n \"google.protobuf.DoubleValue\": ScalarType.DOUBLE,\n \"google.protobuf.FloatValue\": ScalarType.FLOAT,\n \"google.protobuf.Int64Value\": ScalarType.INT64,\n \"google.protobuf.UInt64Value\": ScalarType.UINT64,\n \"google.protobuf.Int32Value\": ScalarType.INT32,\n \"google.protobuf.UInt32Value\": ScalarType.UINT32,\n \"google.protobuf.BoolValue\": ScalarType.BOOL,\n \"google.protobuf.StringValue\": ScalarType.STRING,\n \"google.protobuf.BytesValue\": ScalarType.BYTES\n});/* eslint-disable no-case-declarations,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call */\n// Default options for parsing JSON.\nconst jsonReadDefaults = {\n ignoreUnknownFields: false\n};\n// Default options for serializing to JSON.\nconst jsonWriteDefaults = {\n emitDefaultValues: false,\n enumAsInteger: false,\n useProtoFieldName: false,\n prettySpaces: 0\n};\nfunction makeReadOptions$1(options) {\n return options ? Object.assign(Object.assign({}, jsonReadDefaults), options) : jsonReadDefaults;\n}\nfunction makeWriteOptions$1(options) {\n return options ? Object.assign(Object.assign({}, jsonWriteDefaults), options) : jsonWriteDefaults;\n}\nconst tokenNull = Symbol();\nconst tokenIgnoredUnknownEnum = Symbol();\nfunction makeJsonFormat() {\n return {\n makeReadOptions: makeReadOptions$1,\n makeWriteOptions: makeWriteOptions$1,\n readMessage(type, json, options, message) {\n if (json == null || Array.isArray(json) || typeof json != \"object\") {\n throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: \").concat(debugJsonValue(json)));\n }\n message = message !== null && message !== void 0 ? message : new type();\n const oneofSeen = new Map();\n const registry = options.typeRegistry;\n for (const _ref of Object.entries(json)) {\n var _ref2 = _slicedToArray(_ref, 2);\n const jsonKey = _ref2[0];\n const jsonValue = _ref2[1];\n const field = type.fields.findJsonName(jsonKey);\n if (field) {\n if (field.oneof) {\n if (jsonValue === null && field.kind == \"scalar\") {\n // see conformance test Required.Proto3.JsonInput.OneofFieldNull{First,Second}\n continue;\n }\n const seen = oneofSeen.get(field.oneof);\n if (seen !== undefined) {\n throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: multiple keys for oneof \\\"\").concat(field.oneof.name, \"\\\" present: \\\"\").concat(seen, \"\\\", \\\"\").concat(jsonKey, \"\\\"\"));\n }\n oneofSeen.set(field.oneof, jsonKey);\n }\n readField$1(message, jsonValue, field, options, type);\n } else {\n let found = false;\n if ((registry === null || registry === void 0 ? void 0 : registry.findExtension) && jsonKey.startsWith(\"[\") && jsonKey.endsWith(\"]\")) {\n const ext = registry.findExtension(jsonKey.substring(1, jsonKey.length - 1));\n if (ext && ext.extendee.typeName == type.typeName) {\n found = true;\n const _createExtensionConta = createExtensionContainer(ext),\n _createExtensionConta2 = _slicedToArray(_createExtensionConta, 2),\n container = _createExtensionConta2[0],\n get = _createExtensionConta2[1];\n readField$1(container, jsonValue, ext.field, options, ext);\n // We pass on the options as BinaryReadOptions/BinaryWriteOptions,\n // so that users can bring their own binary reader and writer factories\n // if necessary.\n setExtension(message, ext, get(), options);\n }\n }\n if (!found && !options.ignoreUnknownFields) {\n throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: key \\\"\").concat(jsonKey, \"\\\" is unknown\"));\n }\n }\n }\n return message;\n },\n writeMessage(message, options) {\n const type = message.getType();\n const json = {};\n let field;\n try {\n for (field of type.fields.byNumber()) {\n if (!isFieldSet(field, message)) {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (field.req) {\n throw \"required field not set\";\n }\n if (!options.emitDefaultValues) {\n continue;\n }\n if (!canEmitFieldDefaultValue(field)) {\n continue;\n }\n }\n const value = field.oneof ? message[field.oneof.localName].value : message[field.localName];\n const jsonValue = writeField$1(field, value, options);\n if (jsonValue !== undefined) {\n json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;\n }\n }\n const registry = options.typeRegistry;\n if (registry === null || registry === void 0 ? void 0 : registry.findExtensionFor) {\n for (const uf of type.runtime.bin.listUnknownFields(message)) {\n const ext = registry.findExtensionFor(type.typeName, uf.no);\n if (ext && hasExtension(message, ext)) {\n // We pass on the options as BinaryReadOptions, so that users can bring their own\n // binary reader factory if necessary.\n const value = getExtension(message, ext, options);\n const jsonValue = writeField$1(ext.field, value, options);\n if (jsonValue !== undefined) {\n json[ext.field.jsonName] = jsonValue;\n }\n }\n }\n }\n } catch (e) {\n const m = field ? \"cannot encode field \".concat(type.typeName, \".\").concat(field.name, \" to JSON\") : \"cannot encode message \".concat(type.typeName, \" to JSON\");\n const r = e instanceof Error ? e.message : String(e);\n throw new Error(m + (r.length > 0 ? \": \".concat(r) : \"\"));\n }\n return json;\n },\n readScalar(type, json, longType) {\n // The signature of our internal function has changed. For backwards-\n // compatibility, we support the old form that is part of the public API\n // through the interface JsonFormat.\n return readScalar$1(type, json, longType !== null && longType !== void 0 ? longType : LongType.BIGINT, true);\n },\n writeScalar(type, value, emitDefaultValues) {\n // The signature of our internal function has changed. For backwards-\n // compatibility, we support the old form that is part of the public API\n // through the interface JsonFormat.\n if (value === undefined) {\n return undefined;\n }\n if (emitDefaultValues || isScalarZeroValue(type, value)) {\n return writeScalar$1(type, value);\n }\n return undefined;\n },\n debug: debugJsonValue\n };\n}\nfunction debugJsonValue(json) {\n if (json === null) {\n return \"null\";\n }\n switch (typeof json) {\n case \"object\":\n return Array.isArray(json) ? \"array\" : \"object\";\n case \"string\":\n return json.length > 100 ? \"string\" : \"\\\"\".concat(json.split('\"').join('\\\\\"'), \"\\\"\");\n default:\n return String(json);\n }\n}\n// Read a JSON value for a field.\n// The \"parentType\" argument is only used to provide context in errors.\nfunction readField$1(target, jsonValue, field, options, parentType) {\n let localName = field.localName;\n if (field.repeated) {\n assert(field.kind != \"map\");\n if (jsonValue === null) {\n return;\n }\n if (!Array.isArray(jsonValue)) {\n throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue)));\n }\n const targetArray = target[localName];\n for (const jsonItem of jsonValue) {\n if (jsonItem === null) {\n throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonItem)));\n }\n switch (field.kind) {\n case \"message\":\n targetArray.push(field.T.fromJson(jsonItem, options));\n break;\n case \"enum\":\n const enumValue = readEnum(field.T, jsonItem, options.ignoreUnknownFields, true);\n if (enumValue !== tokenIgnoredUnknownEnum) {\n targetArray.push(enumValue);\n }\n break;\n case \"scalar\":\n try {\n targetArray.push(readScalar$1(field.T, jsonItem, field.L, true));\n } catch (e) {\n let m = \"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonItem));\n if (e instanceof Error && e.message.length > 0) {\n m += \": \".concat(e.message);\n }\n throw new Error(m);\n }\n break;\n }\n }\n } else if (field.kind == \"map\") {\n if (jsonValue === null) {\n return;\n }\n if (typeof jsonValue != \"object\" || Array.isArray(jsonValue)) {\n throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue)));\n }\n const targetMap = target[localName];\n for (const _ref3 of Object.entries(jsonValue)) {\n var _ref4 = _slicedToArray(_ref3, 2);\n const jsonMapKey = _ref4[0];\n const jsonMapValue = _ref4[1];\n if (jsonMapValue === null) {\n throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: map value null\"));\n }\n let key;\n try {\n key = readMapKey(field.K, jsonMapKey);\n } catch (e) {\n let m = \"cannot decode map key for field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n if (e instanceof Error && e.message.length > 0) {\n m += \": \".concat(e.message);\n }\n throw new Error(m);\n }\n switch (field.V.kind) {\n case \"message\":\n targetMap[key] = field.V.T.fromJson(jsonMapValue, options);\n break;\n case \"enum\":\n const enumValue = readEnum(field.V.T, jsonMapValue, options.ignoreUnknownFields, true);\n if (enumValue !== tokenIgnoredUnknownEnum) {\n targetMap[key] = enumValue;\n }\n break;\n case \"scalar\":\n try {\n targetMap[key] = readScalar$1(field.V.T, jsonMapValue, LongType.BIGINT, true);\n } catch (e) {\n let m = \"cannot decode map value for field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n if (e instanceof Error && e.message.length > 0) {\n m += \": \".concat(e.message);\n }\n throw new Error(m);\n }\n break;\n }\n }\n } else {\n if (field.oneof) {\n target = target[field.oneof.localName] = {\n case: localName\n };\n localName = \"value\";\n }\n switch (field.kind) {\n case \"message\":\n const messageType = field.T;\n if (jsonValue === null && messageType.typeName != \"google.protobuf.Value\") {\n return;\n }\n let currentValue = target[localName];\n if (isMessage(currentValue)) {\n currentValue.fromJson(jsonValue, options);\n } else {\n target[localName] = currentValue = messageType.fromJson(jsonValue, options);\n if (messageType.fieldWrapper && !field.oneof) {\n target[localName] = messageType.fieldWrapper.unwrapField(currentValue);\n }\n }\n break;\n case \"enum\":\n const enumValue = readEnum(field.T, jsonValue, options.ignoreUnknownFields, false);\n switch (enumValue) {\n case tokenNull:\n clearField(field, target);\n break;\n case tokenIgnoredUnknownEnum:\n break;\n default:\n target[localName] = enumValue;\n break;\n }\n break;\n case \"scalar\":\n try {\n const scalarValue = readScalar$1(field.T, jsonValue, field.L, false);\n switch (scalarValue) {\n case tokenNull:\n clearField(field, target);\n break;\n default:\n target[localName] = scalarValue;\n break;\n }\n } catch (e) {\n let m = \"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n if (e instanceof Error && e.message.length > 0) {\n m += \": \".concat(e.message);\n }\n throw new Error(m);\n }\n break;\n }\n }\n}\nfunction readMapKey(type, json) {\n if (type === ScalarType.BOOL) {\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (json) {\n case \"true\":\n json = true;\n break;\n case \"false\":\n json = false;\n break;\n }\n }\n return readScalar$1(type, json, LongType.BIGINT, true).toString();\n}\nfunction readScalar$1(type, json, longType, nullAsZeroValue) {\n if (json === null) {\n if (nullAsZeroValue) {\n return scalarZeroValue(type, longType);\n }\n return tokenNull;\n }\n // every valid case in the switch below returns, and every fall\n // through is regarded as a failure.\n switch (type) {\n // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n // Either numbers or strings are accepted. Exponent notation is also accepted.\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n if (json === \"NaN\") return Number.NaN;\n if (json === \"Infinity\") return Number.POSITIVE_INFINITY;\n if (json === \"-Infinity\") return Number.NEGATIVE_INFINITY;\n if (json === \"\") {\n // empty string is not a number\n break;\n }\n if (typeof json == \"string\" && json.trim().length !== json.length) {\n // extra whitespace\n break;\n }\n if (typeof json != \"string\" && typeof json != \"number\") {\n break;\n }\n const float = Number(json);\n if (Number.isNaN(float)) {\n // not a number\n break;\n }\n if (!Number.isFinite(float)) {\n // infinity and -infinity are handled by string representation above, so this is an error\n break;\n }\n if (type == ScalarType.FLOAT) assertFloat32(float);\n return float;\n // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n case ScalarType.UINT32:\n let int32;\n if (typeof json == \"number\") int32 = json;else if (typeof json == \"string\" && json.length > 0) {\n if (json.trim().length === json.length) int32 = Number(json);\n }\n if (int32 === undefined) break;\n if (type == ScalarType.UINT32 || type == ScalarType.FIXED32) assertUInt32(int32);else assertInt32(int32);\n return int32;\n // int64, fixed64, uint64: JSON value will be a decimal string. Either numbers or strings are accepted.\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if (typeof json != \"number\" && typeof json != \"string\") break;\n const long = protoInt64.parse(json);\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n return longType ? long.toString() : long;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if (typeof json != \"number\" && typeof json != \"string\") break;\n const uLong = protoInt64.uParse(json);\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n return longType ? uLong.toString() : uLong;\n // bool:\n case ScalarType.BOOL:\n if (typeof json !== \"boolean\") break;\n return json;\n // string:\n case ScalarType.STRING:\n if (typeof json !== \"string\") {\n break;\n }\n // A string must always contain UTF-8 encoded or 7-bit ASCII.\n // We validate with encodeURIComponent, which appears to be the fastest widely available option.\n try {\n encodeURIComponent(json);\n } catch (e) {\n throw new Error(\"invalid UTF8\");\n }\n return json;\n // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n case ScalarType.BYTES:\n if (json === \"\") return new Uint8Array(0);\n if (typeof json !== \"string\") break;\n return protoBase64.dec(json);\n }\n throw new Error();\n}\nfunction readEnum(type, json, ignoreUnknownFields, nullAsZeroValue) {\n if (json === null) {\n if (type.typeName == \"google.protobuf.NullValue\") {\n return 0; // google.protobuf.NullValue.NULL_VALUE = 0\n }\n return nullAsZeroValue ? type.values[0].no : tokenNull;\n }\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n switch (typeof json) {\n case \"number\":\n if (Number.isInteger(json)) {\n return json;\n }\n break;\n case \"string\":\n const value = type.findName(json);\n if (value !== undefined) {\n return value.no;\n }\n if (ignoreUnknownFields) {\n return tokenIgnoredUnknownEnum;\n }\n break;\n }\n throw new Error(\"cannot decode enum \".concat(type.typeName, \" from JSON: \").concat(debugJsonValue(json)));\n}\n// Decide whether an unset field should be emitted with JSON write option `emitDefaultValues`\nfunction canEmitFieldDefaultValue(field) {\n if (field.repeated || field.kind == \"map\") {\n // maps are {}, repeated fields are []\n return true;\n }\n if (field.oneof) {\n // oneof fields are never emitted\n return false;\n }\n if (field.kind == \"message\") {\n // singular message field are allowed to emit JSON null, but we do not\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (field.opt || field.req) {\n // the field uses explicit presence, so we cannot emit a zero value\n return false;\n }\n return true;\n}\nfunction writeField$1(field, value, options) {\n if (field.kind == \"map\") {\n assert(typeof value == \"object\" && value != null);\n const jsonObj = {};\n const entries = Object.entries(value);\n switch (field.V.kind) {\n case \"scalar\":\n for (const _ref5 of entries) {\n var _ref6 = _slicedToArray(_ref5, 2);\n const entryKey = _ref6[0];\n const entryValue = _ref6[1];\n jsonObj[entryKey.toString()] = writeScalar$1(field.V.T, entryValue); // JSON standard allows only (double quoted) string as property key\n }\n break;\n case \"message\":\n for (const _ref7 of entries) {\n var _ref8 = _slicedToArray(_ref7, 2);\n const entryKey = _ref8[0];\n const entryValue = _ref8[1];\n // JSON standard allows only (double quoted) string as property key\n jsonObj[entryKey.toString()] = entryValue.toJson(options);\n }\n break;\n case \"enum\":\n const enumType = field.V.T;\n for (const _ref9 of entries) {\n var _ref0 = _slicedToArray(_ref9, 2);\n const entryKey = _ref0[0];\n const entryValue = _ref0[1];\n // JSON standard allows only (double quoted) string as property key\n jsonObj[entryKey.toString()] = writeEnum(enumType, entryValue, options.enumAsInteger);\n }\n break;\n }\n return options.emitDefaultValues || entries.length > 0 ? jsonObj : undefined;\n }\n if (field.repeated) {\n assert(Array.isArray(value));\n const jsonArr = [];\n switch (field.kind) {\n case \"scalar\":\n for (let i = 0; i < value.length; i++) {\n jsonArr.push(writeScalar$1(field.T, value[i]));\n }\n break;\n case \"enum\":\n for (let i = 0; i < value.length; i++) {\n jsonArr.push(writeEnum(field.T, value[i], options.enumAsInteger));\n }\n break;\n case \"message\":\n for (let i = 0; i < value.length; i++) {\n jsonArr.push(value[i].toJson(options));\n }\n break;\n }\n return options.emitDefaultValues || jsonArr.length > 0 ? jsonArr : undefined;\n }\n switch (field.kind) {\n case \"scalar\":\n return writeScalar$1(field.T, value);\n case \"enum\":\n return writeEnum(field.T, value, options.enumAsInteger);\n case \"message\":\n return wrapField(field.T, value).toJson(options);\n }\n}\nfunction writeEnum(type, value, enumAsInteger) {\n var _a;\n assert(typeof value == \"number\");\n if (type.typeName == \"google.protobuf.NullValue\") {\n return null;\n }\n if (enumAsInteger) {\n return value;\n }\n const val = type.findNumber(value);\n return (_a = val === null || val === void 0 ? void 0 : val.name) !== null && _a !== void 0 ? _a : value; // if we don't know the enum value, just return the number\n}\nfunction writeScalar$1(type, value) {\n switch (type) {\n // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n assert(typeof value == \"number\");\n return value;\n // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n // Either numbers or strings are accepted. Exponent notation is also accepted.\n case ScalarType.FLOAT:\n // assertFloat32(value);\n case ScalarType.DOUBLE:\n // eslint-disable-line no-fallthrough\n assert(typeof value == \"number\");\n if (Number.isNaN(value)) return \"NaN\";\n if (value === Number.POSITIVE_INFINITY) return \"Infinity\";\n if (value === Number.NEGATIVE_INFINITY) return \"-Infinity\";\n return value;\n // string:\n case ScalarType.STRING:\n assert(typeof value == \"string\");\n return value;\n // bool:\n case ScalarType.BOOL:\n assert(typeof value == \"boolean\");\n return value;\n // JSON value will be a decimal string. Either numbers or strings are accepted.\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n assert(typeof value == \"bigint\" || typeof value == \"string\" || typeof value == \"number\");\n return value.toString();\n // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n case ScalarType.BYTES:\n assert(value instanceof Uint8Array);\n return protoBase64.enc(value);\n }\n}/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return */\nconst unknownFieldsSymbol = Symbol(\"@bufbuild/protobuf/unknown-fields\");\n// Default options for parsing binary data.\nconst readDefaults = {\n readUnknownFields: true,\n readerFactory: bytes => new BinaryReader(bytes)\n};\n// Default options for serializing binary data.\nconst writeDefaults = {\n writeUnknownFields: true,\n writerFactory: () => new BinaryWriter()\n};\nfunction makeReadOptions(options) {\n return options ? Object.assign(Object.assign({}, readDefaults), options) : readDefaults;\n}\nfunction makeWriteOptions(options) {\n return options ? Object.assign(Object.assign({}, writeDefaults), options) : writeDefaults;\n}\nfunction makeBinaryFormat() {\n return {\n makeReadOptions,\n makeWriteOptions,\n listUnknownFields(message) {\n var _a;\n return (_a = message[unknownFieldsSymbol]) !== null && _a !== void 0 ? _a : [];\n },\n discardUnknownFields(message) {\n delete message[unknownFieldsSymbol];\n },\n writeUnknownFields(message, writer) {\n const m = message;\n const c = m[unknownFieldsSymbol];\n if (c) {\n for (const f of c) {\n writer.tag(f.no, f.wireType).raw(f.data);\n }\n }\n },\n onUnknownField(message, no, wireType, data) {\n const m = message;\n if (!Array.isArray(m[unknownFieldsSymbol])) {\n m[unknownFieldsSymbol] = [];\n }\n m[unknownFieldsSymbol].push({\n no,\n wireType,\n data\n });\n },\n readMessage(message, reader, lengthOrEndTagFieldNo, options, delimitedMessageEncoding) {\n const type = message.getType();\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n const end = delimitedMessageEncoding ? reader.len : reader.pos + lengthOrEndTagFieldNo;\n let fieldNo, wireType;\n while (reader.pos < end) {\n var _reader$tag = reader.tag();\n var _reader$tag2 = _slicedToArray(_reader$tag, 2);\n fieldNo = _reader$tag2[0];\n wireType = _reader$tag2[1];\n if (delimitedMessageEncoding === true && wireType == WireType.EndGroup) {\n break;\n }\n const field = type.fields.find(fieldNo);\n if (!field) {\n const data = reader.skip(wireType, fieldNo);\n if (options.readUnknownFields) {\n this.onUnknownField(message, fieldNo, wireType, data);\n }\n continue;\n }\n readField(message, reader, field, wireType, options);\n }\n if (delimitedMessageEncoding && (\n // eslint-disable-line @typescript-eslint/strict-boolean-expressions\n wireType != WireType.EndGroup || fieldNo !== lengthOrEndTagFieldNo)) {\n throw new Error(\"invalid end group tag\");\n }\n },\n readField,\n writeMessage(message, writer, options) {\n const type = message.getType();\n for (const field of type.fields.byNumber()) {\n if (!isFieldSet(field, message)) {\n if (field.req) {\n throw new Error(\"cannot encode field \".concat(type.typeName, \".\").concat(field.name, \" to binary: required field not set\"));\n }\n continue;\n }\n const value = field.oneof ? message[field.oneof.localName].value : message[field.localName];\n writeField(field, value, writer, options);\n }\n if (options.writeUnknownFields) {\n this.writeUnknownFields(message, writer);\n }\n return writer;\n },\n writeField(field, value, writer, options) {\n // The behavior of our internal function has changed, it does no longer\n // accept `undefined` values for singular scalar and map.\n // For backwards-compatibility, we support the old form that is part of\n // the public API through the interface BinaryFormat.\n if (value === undefined) {\n return undefined;\n }\n writeField(field, value, writer, options);\n }\n };\n}\nfunction readField(target,\n// eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access\nreader, field, wireType, options) {\n let repeated = field.repeated,\n localName = field.localName;\n if (field.oneof) {\n target = target[field.oneof.localName];\n if (target.case != localName) {\n delete target.value;\n }\n target.case = localName;\n localName = \"value\";\n }\n switch (field.kind) {\n case \"scalar\":\n case \"enum\":\n const scalarType = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n let read = readScalar;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- acceptable since it's covered by tests\n if (field.kind == \"scalar\" && field.L > 0) {\n read = readScalarLTString;\n }\n if (repeated) {\n let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values\n const isPacked = wireType == WireType.LengthDelimited && scalarType != ScalarType.STRING && scalarType != ScalarType.BYTES;\n if (isPacked) {\n let e = reader.uint32() + reader.pos;\n while (reader.pos < e) {\n arr.push(read(reader, scalarType));\n }\n } else {\n arr.push(read(reader, scalarType));\n }\n } else {\n target[localName] = read(reader, scalarType);\n }\n break;\n case \"message\":\n const messageType = field.T;\n if (repeated) {\n // safe to assume presence of array, oneof cannot contain repeated values\n target[localName].push(readMessageField(reader, new messageType(), options, field));\n } else {\n if (isMessage(target[localName])) {\n readMessageField(reader, target[localName], options, field);\n } else {\n target[localName] = readMessageField(reader, new messageType(), options, field);\n if (messageType.fieldWrapper && !field.oneof && !field.repeated) {\n target[localName] = messageType.fieldWrapper.unwrapField(target[localName]);\n }\n }\n }\n break;\n case \"map\":\n let _readMapEntry = readMapEntry(field, reader, options),\n _readMapEntry2 = _slicedToArray(_readMapEntry, 2),\n mapKey = _readMapEntry2[0],\n mapVal = _readMapEntry2[1];\n // safe to assume presence of map object, oneof cannot contain repeated values\n target[localName][mapKey] = mapVal;\n break;\n }\n}\n// Read a message, avoiding MessageType.fromBinary() to re-use the\n// BinaryReadOptions and the IBinaryReader.\nfunction readMessageField(reader, message, options, field) {\n const format = message.getType().runtime.bin;\n const delimited = field === null || field === void 0 ? void 0 : field.delimited;\n format.readMessage(message, reader, delimited ? field.no : reader.uint32(),\n // eslint-disable-line @typescript-eslint/strict-boolean-expressions\n options, delimited);\n return message;\n}\n// Read a map field, expecting key field = 1, value field = 2\nfunction readMapEntry(field, reader, options) {\n const length = reader.uint32(),\n end = reader.pos + length;\n let key, val;\n while (reader.pos < end) {\n const _reader$tag3 = reader.tag(),\n _reader$tag4 = _slicedToArray(_reader$tag3, 1),\n fieldNo = _reader$tag4[0];\n switch (fieldNo) {\n case 1:\n key = readScalar(reader, field.K);\n break;\n case 2:\n switch (field.V.kind) {\n case \"scalar\":\n val = readScalar(reader, field.V.T);\n break;\n case \"enum\":\n val = reader.int32();\n break;\n case \"message\":\n val = readMessageField(reader, new field.V.T(), options, undefined);\n break;\n }\n break;\n }\n }\n if (key === undefined) {\n key = scalarZeroValue(field.K, LongType.BIGINT);\n }\n if (typeof key != \"string\" && typeof key != \"number\") {\n key = key.toString();\n }\n if (val === undefined) {\n switch (field.V.kind) {\n case \"scalar\":\n val = scalarZeroValue(field.V.T, LongType.BIGINT);\n break;\n case \"enum\":\n val = field.V.T.values[0].no;\n break;\n case \"message\":\n val = new field.V.T();\n break;\n }\n }\n return [key, val];\n}\n// Read a scalar value, but return 64 bit integral types (int64, uint64,\n// sint64, fixed64, sfixed64) as string instead of bigint.\nfunction readScalarLTString(reader, type) {\n const v = readScalar(reader, type);\n return typeof v == \"bigint\" ? v.toString() : v;\n}\n// Does not use scalarTypeInfo() for better performance.\nfunction readScalar(reader, type) {\n switch (type) {\n case ScalarType.STRING:\n return reader.string();\n case ScalarType.BOOL:\n return reader.bool();\n case ScalarType.DOUBLE:\n return reader.double();\n case ScalarType.FLOAT:\n return reader.float();\n case ScalarType.INT32:\n return reader.int32();\n case ScalarType.INT64:\n return reader.int64();\n case ScalarType.UINT64:\n return reader.uint64();\n case ScalarType.FIXED64:\n return reader.fixed64();\n case ScalarType.BYTES:\n return reader.bytes();\n case ScalarType.FIXED32:\n return reader.fixed32();\n case ScalarType.SFIXED32:\n return reader.sfixed32();\n case ScalarType.SFIXED64:\n return reader.sfixed64();\n case ScalarType.SINT64:\n return reader.sint64();\n case ScalarType.UINT32:\n return reader.uint32();\n case ScalarType.SINT32:\n return reader.sint32();\n }\n}\nfunction writeField(field, value, writer, options) {\n assert(value !== undefined);\n const repeated = field.repeated;\n switch (field.kind) {\n case \"scalar\":\n case \"enum\":\n let scalarType = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n if (repeated) {\n assert(Array.isArray(value));\n if (field.packed) {\n writePacked(writer, scalarType, field.no, value);\n } else {\n for (const item of value) {\n writeScalar(writer, scalarType, field.no, item);\n }\n }\n } else {\n writeScalar(writer, scalarType, field.no, value);\n }\n break;\n case \"message\":\n if (repeated) {\n assert(Array.isArray(value));\n for (const item of value) {\n writeMessageField(writer, options, field, item);\n }\n } else {\n writeMessageField(writer, options, field, value);\n }\n break;\n case \"map\":\n assert(typeof value == \"object\" && value != null);\n for (const _ref of Object.entries(value)) {\n var _ref2 = _slicedToArray(_ref, 2);\n const key = _ref2[0];\n const val = _ref2[1];\n writeMapEntry(writer, options, field, key, val);\n }\n break;\n }\n}\nfunction writeMapEntry(writer, options, field, key, value) {\n writer.tag(field.no, WireType.LengthDelimited);\n writer.fork();\n // javascript only allows number or string for object properties\n // we convert from our representation to the protobuf type\n let keyValue = key;\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- we deliberately handle just the special cases for map keys\n switch (field.K) {\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n keyValue = Number.parseInt(key);\n break;\n case ScalarType.BOOL:\n assert(key == \"true\" || key == \"false\");\n keyValue = key == \"true\";\n break;\n }\n // write key, expecting key field number = 1\n writeScalar(writer, field.K, 1, keyValue);\n // write value, expecting value field number = 2\n switch (field.V.kind) {\n case \"scalar\":\n writeScalar(writer, field.V.T, 2, value);\n break;\n case \"enum\":\n writeScalar(writer, ScalarType.INT32, 2, value);\n break;\n case \"message\":\n assert(value !== undefined);\n writer.tag(2, WireType.LengthDelimited).bytes(value.toBinary(options));\n break;\n }\n writer.join();\n}\n// Value must not be undefined\nfunction writeMessageField(writer, options, field, value) {\n const message = wrapField(field.T, value);\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (field.delimited) writer.tag(field.no, WireType.StartGroup).raw(message.toBinary(options)).tag(field.no, WireType.EndGroup);else writer.tag(field.no, WireType.LengthDelimited).bytes(message.toBinary(options));\n}\nfunction writeScalar(writer, type, fieldNo, value) {\n assert(value !== undefined);\n let _scalarTypeInfo = scalarTypeInfo(type),\n _scalarTypeInfo2 = _slicedToArray(_scalarTypeInfo, 2),\n wireType = _scalarTypeInfo2[0],\n method = _scalarTypeInfo2[1];\n writer.tag(fieldNo, wireType)[method](value);\n}\nfunction writePacked(writer, type, fieldNo, value) {\n if (!value.length) {\n return;\n }\n writer.tag(fieldNo, WireType.LengthDelimited).fork();\n let _scalarTypeInfo3 = scalarTypeInfo(type),\n _scalarTypeInfo4 = _slicedToArray(_scalarTypeInfo3, 2),\n method = _scalarTypeInfo4[1];\n for (let i = 0; i < value.length; i++) {\n writer[method](value[i]);\n }\n writer.join();\n}\n/**\n * Get information for writing a scalar value.\n *\n * Returns tuple:\n * [0]: appropriate WireType\n * [1]: name of the appropriate method of IBinaryWriter\n * [2]: whether the given value is a default value for proto3 semantics\n *\n * If argument `value` is omitted, [2] is always false.\n */\n// TODO replace call-sites writeScalar() and writePacked(), then remove\nfunction scalarTypeInfo(type) {\n let wireType = WireType.Varint;\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- INT32, UINT32, SINT32 are covered by the defaults\n switch (type) {\n case ScalarType.BYTES:\n case ScalarType.STRING:\n wireType = WireType.LengthDelimited;\n break;\n case ScalarType.DOUBLE:\n case ScalarType.FIXED64:\n case ScalarType.SFIXED64:\n wireType = WireType.Bit64;\n break;\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n case ScalarType.FLOAT:\n wireType = WireType.Bit32;\n break;\n }\n const method = ScalarType[type].toLowerCase();\n return [wireType, method];\n}/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-argument,no-case-declarations */\nfunction makeUtilCommon() {\n return {\n setEnumType,\n initPartial(source, target) {\n if (source === undefined) {\n return;\n }\n const type = target.getType();\n for (const member of type.fields.byMember()) {\n const localName = member.localName,\n t = target,\n s = source;\n if (s[localName] == null) {\n // TODO if source is a Message instance, we should use isFieldSet() here to support future field presence\n continue;\n }\n switch (member.kind) {\n case \"oneof\":\n const sk = s[localName].case;\n if (sk === undefined) {\n continue;\n }\n const sourceField = member.findField(sk);\n let val = s[localName].value;\n if (sourceField && sourceField.kind == \"message\" && !isMessage(val, sourceField.T)) {\n val = new sourceField.T(val);\n } else if (sourceField && sourceField.kind === \"scalar\" && sourceField.T === ScalarType.BYTES) {\n val = toU8Arr(val);\n }\n t[localName] = {\n case: sk,\n value: val\n };\n break;\n case \"scalar\":\n case \"enum\":\n let copy = s[localName];\n if (member.T === ScalarType.BYTES) {\n copy = member.repeated ? copy.map(toU8Arr) : toU8Arr(copy);\n }\n t[localName] = copy;\n break;\n case \"map\":\n switch (member.V.kind) {\n case \"scalar\":\n case \"enum\":\n if (member.V.T === ScalarType.BYTES) {\n for (const _ref of Object.entries(s[localName])) {\n var _ref2 = _slicedToArray(_ref, 2);\n const k = _ref2[0];\n const v = _ref2[1];\n t[localName][k] = toU8Arr(v);\n }\n } else {\n Object.assign(t[localName], s[localName]);\n }\n break;\n case \"message\":\n const messageType = member.V.T;\n for (const k of Object.keys(s[localName])) {\n let val = s[localName][k];\n if (!messageType.fieldWrapper) {\n // We only take partial input for messages that are not a wrapper type.\n // For those messages, we recursively normalize the partial input.\n val = new messageType(val);\n }\n t[localName][k] = val;\n }\n break;\n }\n break;\n case \"message\":\n const mt = member.T;\n if (member.repeated) {\n t[localName] = s[localName].map(val => isMessage(val, mt) ? val : new mt(val));\n } else {\n const val = s[localName];\n if (mt.fieldWrapper) {\n if (\n // We can't use BytesValue.typeName as that will create a circular import\n mt.typeName === \"google.protobuf.BytesValue\") {\n t[localName] = toU8Arr(val);\n } else {\n t[localName] = val;\n }\n } else {\n t[localName] = isMessage(val, mt) ? val : new mt(val);\n }\n }\n break;\n }\n }\n },\n // TODO use isFieldSet() here to support future field presence\n equals(type, a, b) {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return type.fields.byMember().every(m => {\n const va = a[m.localName];\n const vb = b[m.localName];\n if (m.repeated) {\n if (va.length !== vb.length) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- repeated fields are never \"map\"\n switch (m.kind) {\n case \"message\":\n return va.every((a, i) => m.T.equals(a, vb[i]));\n case \"scalar\":\n return va.every((a, i) => scalarEquals(m.T, a, vb[i]));\n case \"enum\":\n return va.every((a, i) => scalarEquals(ScalarType.INT32, a, vb[i]));\n }\n throw new Error(\"repeated cannot contain \".concat(m.kind));\n }\n switch (m.kind) {\n case \"message\":\n let a = va;\n let b = vb;\n if (m.T.fieldWrapper) {\n if (a !== undefined && !isMessage(a)) {\n a = m.T.fieldWrapper.wrapField(a);\n }\n if (b !== undefined && !isMessage(b)) {\n b = m.T.fieldWrapper.wrapField(b);\n }\n }\n return m.T.equals(a, b);\n case \"enum\":\n return scalarEquals(ScalarType.INT32, va, vb);\n case \"scalar\":\n return scalarEquals(m.T, va, vb);\n case \"oneof\":\n if (va.case !== vb.case) {\n return false;\n }\n const s = m.findField(va.case);\n if (s === undefined) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- oneof fields are never \"map\"\n switch (s.kind) {\n case \"message\":\n return s.T.equals(va.value, vb.value);\n case \"enum\":\n return scalarEquals(ScalarType.INT32, va.value, vb.value);\n case \"scalar\":\n return scalarEquals(s.T, va.value, vb.value);\n }\n throw new Error(\"oneof cannot contain \".concat(s.kind));\n case \"map\":\n const keys = Object.keys(va).concat(Object.keys(vb));\n switch (m.V.kind) {\n case \"message\":\n const messageType = m.V.T;\n return keys.every(k => messageType.equals(va[k], vb[k]));\n case \"enum\":\n return keys.every(k => scalarEquals(ScalarType.INT32, va[k], vb[k]));\n case \"scalar\":\n const scalarType = m.V.T;\n return keys.every(k => scalarEquals(scalarType, va[k], vb[k]));\n }\n break;\n }\n });\n },\n // TODO use isFieldSet() here to support future field presence\n clone(message) {\n const type = message.getType(),\n target = new type(),\n any = target;\n for (const member of type.fields.byMember()) {\n const source = message[member.localName];\n let copy;\n if (member.repeated) {\n copy = source.map(cloneSingularField);\n } else if (member.kind == \"map\") {\n copy = any[member.localName];\n for (const _ref3 of Object.entries(source)) {\n var _ref4 = _slicedToArray(_ref3, 2);\n const key = _ref4[0];\n const v = _ref4[1];\n copy[key] = cloneSingularField(v);\n }\n } else if (member.kind == \"oneof\") {\n const f = member.findField(source.case);\n copy = f ? {\n case: source.case,\n value: cloneSingularField(source.value)\n } : {\n case: undefined\n };\n } else {\n copy = cloneSingularField(source);\n }\n any[member.localName] = copy;\n }\n for (const uf of type.runtime.bin.listUnknownFields(message)) {\n type.runtime.bin.onUnknownField(any, uf.no, uf.wireType, uf.data);\n }\n return target;\n }\n };\n}\n// clone a single field value - i.e. the element type of repeated fields, the value type of maps\nfunction cloneSingularField(value) {\n if (value === undefined) {\n return value;\n }\n if (isMessage(value)) {\n return value.clone();\n }\n if (value instanceof Uint8Array) {\n const c = new Uint8Array(value.byteLength);\n c.set(value);\n return c;\n }\n return value;\n}\n// converts any ArrayLike<number> to Uint8Array if necessary.\nfunction toU8Arr(input) {\n return input instanceof Uint8Array ? input : new Uint8Array(input);\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nfunction makeProtoRuntime(syntax, newFieldList, initFields) {\n return {\n syntax,\n json: makeJsonFormat(),\n bin: makeBinaryFormat(),\n util: Object.assign(Object.assign({}, makeUtilCommon()), {\n newFieldList,\n initFields\n }),\n makeMessageType(typeName, fields, opt) {\n return makeMessageType(this, typeName, fields, opt);\n },\n makeEnum,\n makeEnumType,\n getEnumType,\n makeExtension(typeName, extendee, field) {\n return makeExtension(this, typeName, extendee, field);\n }\n };\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass InternalFieldList {\n constructor(fields, normalizer) {\n this._fields = fields;\n this._normalizer = normalizer;\n }\n findJsonName(jsonName) {\n if (!this.jsonNames) {\n const t = {};\n for (const f of this.list()) {\n t[f.jsonName] = t[f.name] = f;\n }\n this.jsonNames = t;\n }\n return this.jsonNames[jsonName];\n }\n find(fieldNo) {\n if (!this.numbers) {\n const t = {};\n for (const f of this.list()) {\n t[f.no] = f;\n }\n this.numbers = t;\n }\n return this.numbers[fieldNo];\n }\n list() {\n if (!this.all) {\n this.all = this._normalizer(this._fields);\n }\n return this.all;\n }\n byNumber() {\n if (!this.numbersAsc) {\n this.numbersAsc = this.list().concat().sort((a, b) => a.no - b.no);\n }\n return this.numbersAsc;\n }\n byMember() {\n if (!this.members) {\n this.members = [];\n const a = this.members;\n let o;\n for (const f of this.list()) {\n if (f.oneof) {\n if (f.oneof !== o) {\n o = f.oneof;\n a.push(o);\n }\n } else {\n a.push(f);\n }\n }\n }\n return this.members;\n }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns the name of a protobuf element in generated code.\n *\n * Field names - including oneofs - are converted to lowerCamelCase. For\n * messages, enumerations and services, the package name is stripped from\n * the type name. For nested messages and enumerations, the names are joined\n * with an underscore. For methods, the first character is made lowercase.\n */\n/**\n * Returns the name of a field in generated code.\n */\nfunction localFieldName(protoName, inOneof) {\n const name = protoCamelCase(protoName);\n if (inOneof) {\n // oneof member names are not properties, but values of the `case` property.\n return name;\n }\n return safeObjectProperty(safeMessageProperty(name));\n}\n/**\n * Returns the name of a oneof group in generated code.\n */\nfunction localOneofName(protoName) {\n return localFieldName(protoName, false);\n}\n/**\n * Returns the JSON name for a protobuf field, exactly like protoc does.\n */\nconst fieldJsonName = protoCamelCase;\n/**\n * Converts snake_case to protoCamelCase according to the convention\n * used by protoc to convert a field name to a JSON name.\n */\nfunction protoCamelCase(snakeCase) {\n let capNext = false;\n const b = [];\n for (let i = 0; i < snakeCase.length; i++) {\n let c = snakeCase.charAt(i);\n switch (c) {\n case \"_\":\n capNext = true;\n break;\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n b.push(c);\n capNext = false;\n break;\n default:\n if (capNext) {\n capNext = false;\n c = c.toUpperCase();\n }\n b.push(c);\n break;\n }\n }\n return b.join(\"\");\n}\n/**\n * Names that cannot be used for object properties because they are reserved\n * by built-in JavaScript properties.\n */\nconst reservedObjectProperties = new Set([\n// names reserved by JavaScript\n\"constructor\", \"toString\", \"toJSON\", \"valueOf\"]);\n/**\n * Names that cannot be used for object properties because they are reserved\n * by the runtime.\n */\nconst reservedMessageProperties = new Set([\n// names reserved by the runtime\n\"getType\", \"clone\", \"equals\", \"fromBinary\", \"fromJson\", \"fromJsonString\", \"toBinary\", \"toJson\", \"toJsonString\",\n// names reserved by the runtime for the future\n\"toObject\"]);\nconst fallback = name => \"\".concat(name, \"$\");\n/**\n * Will wrap names that are Object prototype properties or names reserved\n * for `Message`s.\n */\nconst safeMessageProperty = name => {\n if (reservedMessageProperties.has(name)) {\n return fallback(name);\n }\n return name;\n};\n/**\n * Names that cannot be used for object properties because they are reserved\n * by built-in JavaScript properties.\n */\nconst safeObjectProperty = name => {\n if (reservedObjectProperties.has(name)) {\n return fallback(name);\n }\n return name;\n};// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass InternalOneofInfo {\n constructor(name) {\n this.kind = \"oneof\";\n this.repeated = false;\n this.packed = false;\n this.opt = false;\n this.req = false;\n this.default = undefined;\n this.fields = [];\n this.name = name;\n this.localName = localOneofName(name);\n }\n addField(field) {\n assert(field.oneof === this, \"field \".concat(field.name, \" not one of \").concat(this.name));\n this.fields.push(field);\n }\n findField(localName) {\n if (!this._lookup) {\n this._lookup = Object.create(null);\n for (let i = 0; i < this.fields.length; i++) {\n this._lookup[this.fields[i].localName] = this.fields[i];\n }\n }\n return this._lookup[localName];\n }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Convert a collection of field info to an array of normalized FieldInfo.\n *\n * The argument `packedByDefault` specifies whether fields that do not specify\n * `packed` should be packed (proto3) or unpacked (proto2).\n */\nfunction normalizeFieldInfos(fieldInfos, packedByDefault) {\n var _a, _b, _c, _d, _e, _f;\n const r = [];\n let o;\n for (const field of typeof fieldInfos == \"function\" ? fieldInfos() : fieldInfos) {\n const f = field;\n f.localName = localFieldName(field.name, field.oneof !== undefined);\n f.jsonName = (_a = field.jsonName) !== null && _a !== void 0 ? _a : fieldJsonName(field.name);\n f.repeated = (_b = field.repeated) !== null && _b !== void 0 ? _b : false;\n if (field.kind == \"scalar\") {\n f.L = (_c = field.L) !== null && _c !== void 0 ? _c : LongType.BIGINT;\n }\n f.delimited = (_d = field.delimited) !== null && _d !== void 0 ? _d : false;\n f.req = (_e = field.req) !== null && _e !== void 0 ? _e : false;\n f.opt = (_f = field.opt) !== null && _f !== void 0 ? _f : false;\n if (field.packed === undefined) {\n {\n f.packed = field.kind == \"enum\" || field.kind == \"scalar\" && field.T != ScalarType.BYTES && field.T != ScalarType.STRING;\n }\n }\n // We do not surface options at this time\n // f.options = field.options ?? emptyReadonlyObject;\n if (field.oneof !== undefined) {\n const ooname = typeof field.oneof == \"string\" ? field.oneof : field.oneof.name;\n if (!o || o.name != ooname) {\n o = new InternalOneofInfo(ooname);\n }\n f.oneof = o;\n o.addField(f);\n }\n r.push(f);\n }\n return r;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Provides functionality for messages defined with the proto3 syntax.\n */\nconst proto3 = makeProtoRuntime(\"proto3\", fields => {\n return new InternalFieldList(fields, source => normalizeFieldInfos(source));\n},\n// TODO merge with proto2 and initExtensionField, also see initPartial, equals, clone\ntarget => {\n for (const member of target.getType().fields.byMember()) {\n if (member.opt) {\n continue;\n }\n const name = member.localName,\n t = target;\n if (member.repeated) {\n t[name] = [];\n continue;\n }\n switch (member.kind) {\n case \"oneof\":\n t[name] = {\n case: undefined\n };\n break;\n case \"enum\":\n t[name] = 0;\n break;\n case \"map\":\n t[name] = {};\n break;\n case \"scalar\":\n t[name] = scalarZeroValue(member.T, member.L);\n break;\n }\n }\n});// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(time(NULL));\n * timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n * struct timeval tv;\n * gettimeofday(&tv, NULL);\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(tv.tv_sec);\n * timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n * FILETIME ft;\n * GetSystemTimeAsFileTime(&ft);\n * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n * Timestamp timestamp;\n * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n * long millis = System.currentTimeMillis();\n *\n * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n * .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n * Instant now = Instant.now();\n *\n * Timestamp timestamp =\n * Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n * .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n * timestamp = Timestamp()\n * timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n *\n * @generated from message google.protobuf.Timestamp\n */\nclass Timestamp extends Message {\n constructor(data) {\n super();\n /**\n * Represents seconds of UTC time since Unix epoch\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n * 9999-12-31T23:59:59Z inclusive.\n *\n * @generated from field: int64 seconds = 1;\n */\n this.seconds = protoInt64.zero;\n /**\n * Non-negative fractions of a second at nanosecond resolution. Negative\n * second values with fractions must still have non-negative nanos values\n * that count forward in time. Must be from 0 to 999,999,999\n * inclusive.\n *\n * @generated from field: int32 nanos = 2;\n */\n this.nanos = 0;\n proto3.util.initPartial(data, this);\n }\n fromJson(json, options) {\n if (typeof json !== \"string\") {\n throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: \".concat(proto3.json.debug(json)));\n }\n const matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n if (!matches) {\n throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string\");\n }\n const ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n if (Number.isNaN(ms)) {\n throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string\");\n }\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\")) {\n throw new Error(\"cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive\");\n }\n this.seconds = protoInt64.parse(ms / 1000);\n this.nanos = 0;\n if (matches[7]) {\n this.nanos = parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000;\n }\n return this;\n }\n toJson(options) {\n const ms = Number(this.seconds) * 1000;\n if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\")) {\n throw new Error(\"cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive\");\n }\n if (this.nanos < 0) {\n throw new Error(\"cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative\");\n }\n let z = \"Z\";\n if (this.nanos > 0) {\n const nanosStr = (this.nanos + 1000000000).toString().substring(1);\n if (nanosStr.substring(3) === \"000000\") {\n z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n } else if (nanosStr.substring(6) === \"000\") {\n z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n } else {\n z = \".\" + nanosStr + \"Z\";\n }\n }\n return new Date(ms).toISOString().replace(\".000Z\", z);\n }\n toDate() {\n return new Date(Number(this.seconds) * 1000 + Math.ceil(this.nanos / 1000000));\n }\n static now() {\n return Timestamp.fromDate(new Date());\n }\n static fromDate(date) {\n const ms = date.getTime();\n return new Timestamp({\n seconds: protoInt64.parse(Math.floor(ms / 1000)),\n nanos: ms % 1000 * 1000000\n });\n }\n static fromBinary(bytes, options) {\n return new Timestamp().fromBinary(bytes, options);\n }\n static fromJson(jsonValue, options) {\n return new Timestamp().fromJson(jsonValue, options);\n }\n static fromJsonString(jsonString, options) {\n return new Timestamp().fromJsonString(jsonString, options);\n }\n static equals(a, b) {\n return proto3.util.equals(Timestamp, a, b);\n }\n}\nTimestamp.runtime = proto3;\nTimestamp.typeName = \"google.protobuf.Timestamp\";\nTimestamp.fields = proto3.util.newFieldList(() => [{\n no: 1,\n name: \"seconds\",\n kind: \"scalar\",\n T: 3 /* ScalarType.INT64 */\n}, {\n no: 2,\n name: \"nanos\",\n kind: \"scalar\",\n T: 5 /* ScalarType.INT32 */\n}]);const MetricsBatch = /* @__PURE__ */proto3.makeMessageType(\"livekit.MetricsBatch\", () => [{\n no: 1,\n name: \"timestamp_ms\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 2,\n name: \"normalized_timestamp\",\n kind: \"message\",\n T: Timestamp\n}, {\n no: 3,\n name: \"str_data\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 4,\n name: \"time_series\",\n kind: \"message\",\n T: TimeSeriesMetric,\n repeated: true\n}, {\n no: 5,\n name: \"events\",\n kind: \"message\",\n T: EventMetric,\n repeated: true\n}]);\nconst TimeSeriesMetric = /* @__PURE__ */proto3.makeMessageType(\"livekit.TimeSeriesMetric\", () => [{\n no: 1,\n name: \"label\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"participant_identity\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 3,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"samples\",\n kind: \"message\",\n T: MetricSample,\n repeated: true\n}, {\n no: 5,\n name: \"rid\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst MetricSample = /* @__PURE__ */proto3.makeMessageType(\"livekit.MetricSample\", () => [{\n no: 1,\n name: \"timestamp_ms\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 2,\n name: \"normalized_timestamp\",\n kind: \"message\",\n T: Timestamp\n}, {\n no: 3,\n name: \"value\",\n kind: \"scalar\",\n T: 2\n /* ScalarType.FLOAT */\n}]);\nconst EventMetric = /* @__PURE__ */proto3.makeMessageType(\"livekit.EventMetric\", () => [{\n no: 1,\n name: \"label\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"participant_identity\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 3,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"start_timestamp_ms\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 5,\n name: \"end_timestamp_ms\",\n kind: \"scalar\",\n T: 3,\n opt: true\n}, {\n no: 6,\n name: \"normalized_start_timestamp\",\n kind: \"message\",\n T: Timestamp\n}, {\n no: 7,\n name: \"normalized_end_timestamp\",\n kind: \"message\",\n T: Timestamp,\n opt: true\n}, {\n no: 8,\n name: \"metadata\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 9,\n name: \"rid\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst AudioCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioCodec\", [{\n no: 0,\n name: \"DEFAULT_AC\"\n}, {\n no: 1,\n name: \"OPUS\"\n}, {\n no: 2,\n name: \"AAC\"\n}, {\n no: 3,\n name: \"AC_MP3\"\n}]);\nconst VideoCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoCodec\", [{\n no: 0,\n name: \"DEFAULT_VC\"\n}, {\n no: 1,\n name: \"H264_BASELINE\"\n}, {\n no: 2,\n name: \"H264_MAIN\"\n}, {\n no: 3,\n name: \"H264_HIGH\"\n}, {\n no: 4,\n name: \"VP8\"\n}]);\nconst ImageCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.ImageCodec\", [{\n no: 0,\n name: \"IC_DEFAULT\"\n}, {\n no: 1,\n name: \"IC_JPEG\"\n}]);\nconst BackupCodecPolicy$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.BackupCodecPolicy\", [{\n no: 0,\n name: \"PREFER_REGRESSION\"\n}, {\n no: 1,\n name: \"SIMULCAST\"\n}, {\n no: 2,\n name: \"REGRESSION\"\n}]);\nconst TrackType = /* @__PURE__ */proto3.makeEnum(\"livekit.TrackType\", [{\n no: 0,\n name: \"AUDIO\"\n}, {\n no: 1,\n name: \"VIDEO\"\n}, {\n no: 2,\n name: \"DATA\"\n}]);\nconst TrackSource = /* @__PURE__ */proto3.makeEnum(\"livekit.TrackSource\", [{\n no: 0,\n name: \"UNKNOWN\"\n}, {\n no: 1,\n name: \"CAMERA\"\n}, {\n no: 2,\n name: \"MICROPHONE\"\n}, {\n no: 3,\n name: \"SCREEN_SHARE\"\n}, {\n no: 4,\n name: \"SCREEN_SHARE_AUDIO\"\n}]);\nconst VideoQuality$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoQuality\", [{\n no: 0,\n name: \"LOW\"\n}, {\n no: 1,\n name: \"MEDIUM\"\n}, {\n no: 2,\n name: \"HIGH\"\n}, {\n no: 3,\n name: \"OFF\"\n}]);\nconst ConnectionQuality$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.ConnectionQuality\", [{\n no: 0,\n name: \"POOR\"\n}, {\n no: 1,\n name: \"GOOD\"\n}, {\n no: 2,\n name: \"EXCELLENT\"\n}, {\n no: 3,\n name: \"LOST\"\n}]);\nconst ClientConfigSetting = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientConfigSetting\", [{\n no: 0,\n name: \"UNSET\"\n}, {\n no: 1,\n name: \"DISABLED\"\n}, {\n no: 2,\n name: \"ENABLED\"\n}]);\nconst DisconnectReason = /* @__PURE__ */proto3.makeEnum(\"livekit.DisconnectReason\", [{\n no: 0,\n name: \"UNKNOWN_REASON\"\n}, {\n no: 1,\n name: \"CLIENT_INITIATED\"\n}, {\n no: 2,\n name: \"DUPLICATE_IDENTITY\"\n}, {\n no: 3,\n name: \"SERVER_SHUTDOWN\"\n}, {\n no: 4,\n name: \"PARTICIPANT_REMOVED\"\n}, {\n no: 5,\n name: \"ROOM_DELETED\"\n}, {\n no: 6,\n name: \"STATE_MISMATCH\"\n}, {\n no: 7,\n name: \"JOIN_FAILURE\"\n}, {\n no: 8,\n name: \"MIGRATION\"\n}, {\n no: 9,\n name: \"SIGNAL_CLOSE\"\n}, {\n no: 10,\n name: \"ROOM_CLOSED\"\n}, {\n no: 11,\n name: \"USER_UNAVAILABLE\"\n}, {\n no: 12,\n name: \"USER_REJECTED\"\n}, {\n no: 13,\n name: \"SIP_TRUNK_FAILURE\"\n}, {\n no: 14,\n name: \"CONNECTION_TIMEOUT\"\n}, {\n no: 15,\n name: \"MEDIA_FAILURE\"\n}, {\n no: 16,\n name: \"AGENT_ERROR\"\n}]);\nconst ReconnectReason = /* @__PURE__ */proto3.makeEnum(\"livekit.ReconnectReason\", [{\n no: 0,\n name: \"RR_UNKNOWN\"\n}, {\n no: 1,\n name: \"RR_SIGNAL_DISCONNECTED\"\n}, {\n no: 2,\n name: \"RR_PUBLISHER_FAILED\"\n}, {\n no: 3,\n name: \"RR_SUBSCRIBER_FAILED\"\n}, {\n no: 4,\n name: \"RR_SWITCH_CANDIDATE\"\n}]);\nconst SubscriptionError = /* @__PURE__ */proto3.makeEnum(\"livekit.SubscriptionError\", [{\n no: 0,\n name: \"SE_UNKNOWN\"\n}, {\n no: 1,\n name: \"SE_CODEC_UNSUPPORTED\"\n}, {\n no: 2,\n name: \"SE_TRACK_NOTFOUND\"\n}]);\nconst AudioTrackFeature = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioTrackFeature\", [{\n no: 0,\n name: \"TF_STEREO\"\n}, {\n no: 1,\n name: \"TF_NO_DTX\"\n}, {\n no: 2,\n name: \"TF_AUTO_GAIN_CONTROL\"\n}, {\n no: 3,\n name: \"TF_ECHO_CANCELLATION\"\n}, {\n no: 4,\n name: \"TF_NOISE_SUPPRESSION\"\n}, {\n no: 5,\n name: \"TF_ENHANCED_NOISE_CANCELLATION\"\n}, {\n no: 6,\n name: \"TF_PRECONNECT_BUFFER\"\n}]);\nconst PacketTrailerFeature = /* @__PURE__ */proto3.makeEnum(\"livekit.PacketTrailerFeature\", [{\n no: 0,\n name: \"PTF_USER_TIMESTAMP\"\n}, {\n no: 1,\n name: \"PTF_FRAME_ID\"\n}]);\nconst Room$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.Room\", () => [{\n no: 1,\n name: \"sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"empty_timeout\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 14,\n name: \"departure_timeout\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"max_participants\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 5,\n name: \"creation_time\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 15,\n name: \"creation_time_ms\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 6,\n name: \"turn_password\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 7,\n name: \"enabled_codecs\",\n kind: \"message\",\n T: Codec,\n repeated: true\n}, {\n no: 8,\n name: \"metadata\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 9,\n name: \"num_participants\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 11,\n name: \"num_publishers\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 10,\n name: \"active_recording\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 13,\n name: \"version\",\n kind: \"message\",\n T: TimedVersion\n}]);\nconst Codec = /* @__PURE__ */proto3.makeMessageType(\"livekit.Codec\", () => [{\n no: 1,\n name: \"mime\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"fmtp_line\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst ParticipantPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantPermission\", () => [{\n no: 1,\n name: \"can_subscribe\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 2,\n name: \"can_publish\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 3,\n name: \"can_publish_data\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 9,\n name: \"can_publish_sources\",\n kind: \"enum\",\n T: proto3.getEnumType(TrackSource),\n repeated: true\n}, {\n no: 7,\n name: \"hidden\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 8,\n name: \"recorder\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 10,\n name: \"can_update_metadata\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 11,\n name: \"agent\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 12,\n name: \"can_subscribe_metrics\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 13,\n name: \"can_manage_agent_session\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst ParticipantInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantInfo\", () => [{\n no: 1,\n name: \"sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"identity\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"state\",\n kind: \"enum\",\n T: proto3.getEnumType(ParticipantInfo_State)\n}, {\n no: 4,\n name: \"tracks\",\n kind: \"message\",\n T: TrackInfo,\n repeated: true\n}, {\n no: 5,\n name: \"metadata\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 6,\n name: \"joined_at\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 17,\n name: \"joined_at_ms\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 9,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 10,\n name: \"version\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 11,\n name: \"permission\",\n kind: \"message\",\n T: ParticipantPermission\n}, {\n no: 12,\n name: \"region\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 13,\n name: \"is_publisher\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 14,\n name: \"kind\",\n kind: \"enum\",\n T: proto3.getEnumType(ParticipantInfo_Kind)\n}, {\n no: 15,\n name: \"attributes\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}, {\n no: 16,\n name: \"disconnect_reason\",\n kind: \"enum\",\n T: proto3.getEnumType(DisconnectReason)\n}, {\n no: 18,\n name: \"kind_details\",\n kind: \"enum\",\n T: proto3.getEnumType(ParticipantInfo_KindDetail),\n repeated: true\n}, {\n no: 19,\n name: \"data_tracks\",\n kind: \"message\",\n T: DataTrackInfo$1,\n repeated: true\n}, {\n no: 20,\n name: \"client_protocol\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}]);\nconst ParticipantInfo_State = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.State\", [{\n no: 0,\n name: \"JOINING\"\n}, {\n no: 1,\n name: \"JOINED\"\n}, {\n no: 2,\n name: \"ACTIVE\"\n}, {\n no: 3,\n name: \"DISCONNECTED\"\n}]);\nconst ParticipantInfo_Kind = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.Kind\", [{\n no: 0,\n name: \"STANDARD\"\n}, {\n no: 1,\n name: \"INGRESS\"\n}, {\n no: 2,\n name: \"EGRESS\"\n}, {\n no: 3,\n name: \"SIP\"\n}, {\n no: 4,\n name: \"AGENT\"\n}, {\n no: 7,\n name: \"CONNECTOR\"\n}, {\n no: 8,\n name: \"BRIDGE\"\n}]);\nconst ParticipantInfo_KindDetail = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.KindDetail\", [{\n no: 0,\n name: \"CLOUD_AGENT\"\n}, {\n no: 1,\n name: \"FORWARDED\"\n}, {\n no: 2,\n name: \"CONNECTOR_WHATSAPP\"\n}, {\n no: 3,\n name: \"CONNECTOR_TWILIO\"\n}, {\n no: 4,\n name: \"BRIDGE_RTSP\"\n}]);\nconst Encryption_Type = /* @__PURE__ */proto3.makeEnum(\"livekit.Encryption.Type\", [{\n no: 0,\n name: \"NONE\"\n}, {\n no: 1,\n name: \"GCM\"\n}, {\n no: 2,\n name: \"CUSTOM\"\n}]);\nconst SimulcastCodecInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulcastCodecInfo\", () => [{\n no: 1,\n name: \"mime_type\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"mid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"cid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"layers\",\n kind: \"message\",\n T: VideoLayer,\n repeated: true\n}, {\n no: 5,\n name: \"video_layer_mode\",\n kind: \"enum\",\n T: proto3.getEnumType(VideoLayer_Mode)\n}, {\n no: 6,\n name: \"sdp_cid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst TrackInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackInfo\", () => [{\n no: 1,\n name: \"sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"type\",\n kind: \"enum\",\n T: proto3.getEnumType(TrackType)\n}, {\n no: 3,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"muted\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 5,\n name: \"width\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 6,\n name: \"height\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 7,\n name: \"simulcast\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 8,\n name: \"disable_dtx\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 9,\n name: \"source\",\n kind: \"enum\",\n T: proto3.getEnumType(TrackSource)\n}, {\n no: 10,\n name: \"layers\",\n kind: \"message\",\n T: VideoLayer,\n repeated: true\n}, {\n no: 11,\n name: \"mime_type\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 12,\n name: \"mid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 13,\n name: \"codecs\",\n kind: \"message\",\n T: SimulcastCodecInfo,\n repeated: true\n}, {\n no: 14,\n name: \"stereo\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 15,\n name: \"disable_red\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 16,\n name: \"encryption\",\n kind: \"enum\",\n T: proto3.getEnumType(Encryption_Type)\n}, {\n no: 17,\n name: \"stream\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 18,\n name: \"version\",\n kind: \"message\",\n T: TimedVersion\n}, {\n no: 19,\n name: \"audio_features\",\n kind: \"enum\",\n T: proto3.getEnumType(AudioTrackFeature),\n repeated: true\n}, {\n no: 20,\n name: \"backup_codec_policy\",\n kind: \"enum\",\n T: proto3.getEnumType(BackupCodecPolicy$1)\n}, {\n no: 21,\n name: \"packet_trailer_features\",\n kind: \"enum\",\n T: proto3.getEnumType(PacketTrailerFeature),\n repeated: true\n}]);\nconst DataTrackInfo$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackInfo\", () => [{\n no: 1,\n name: \"pub_handle\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"encryption\",\n kind: \"enum\",\n T: proto3.getEnumType(Encryption_Type)\n}]);\nconst DataTrackSubscriptionOptions = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackSubscriptionOptions\", () => [{\n no: 1,\n name: \"target_fps\",\n kind: \"scalar\",\n T: 13,\n opt: true\n}]);\nconst VideoLayer = /* @__PURE__ */proto3.makeMessageType(\"livekit.VideoLayer\", () => [{\n no: 1,\n name: \"quality\",\n kind: \"enum\",\n T: proto3.getEnumType(VideoQuality$1)\n}, {\n no: 2,\n name: \"width\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 3,\n name: \"height\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"bitrate\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 5,\n name: \"ssrc\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 6,\n name: \"spatial_layer\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 7,\n name: \"rid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 8,\n name: \"repair_ssrc\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst VideoLayer_Mode = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoLayer.Mode\", [{\n no: 0,\n name: \"MODE_UNUSED\"\n}, {\n no: 1,\n name: \"ONE_SPATIAL_LAYER_PER_STREAM\"\n}, {\n no: 2,\n name: \"MULTIPLE_SPATIAL_LAYERS_PER_STREAM\"\n}, {\n no: 3,\n name: \"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR\"\n}]);\nconst DataPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataPacket\", () => [{\n no: 1,\n name: \"kind\",\n kind: \"enum\",\n T: proto3.getEnumType(DataPacket_Kind)\n}, {\n no: 4,\n name: \"participant_identity\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"destination_identities\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 2,\n name: \"user\",\n kind: \"message\",\n T: UserPacket,\n oneof: \"value\"\n}, {\n no: 3,\n name: \"speaker\",\n kind: \"message\",\n T: ActiveSpeakerUpdate,\n oneof: \"value\"\n}, {\n no: 6,\n name: \"sip_dtmf\",\n kind: \"message\",\n T: SipDTMF,\n oneof: \"value\"\n}, {\n no: 7,\n name: \"transcription\",\n kind: \"message\",\n T: Transcription,\n oneof: \"value\"\n}, {\n no: 8,\n name: \"metrics\",\n kind: \"message\",\n T: MetricsBatch,\n oneof: \"value\"\n}, {\n no: 9,\n name: \"chat_message\",\n kind: \"message\",\n T: ChatMessage,\n oneof: \"value\"\n}, {\n no: 10,\n name: \"rpc_request\",\n kind: \"message\",\n T: RpcRequest,\n oneof: \"value\"\n}, {\n no: 11,\n name: \"rpc_ack\",\n kind: \"message\",\n T: RpcAck,\n oneof: \"value\"\n}, {\n no: 12,\n name: \"rpc_response\",\n kind: \"message\",\n T: RpcResponse,\n oneof: \"value\"\n}, {\n no: 13,\n name: \"stream_header\",\n kind: \"message\",\n T: DataStream_Header,\n oneof: \"value\"\n}, {\n no: 14,\n name: \"stream_chunk\",\n kind: \"message\",\n T: DataStream_Chunk,\n oneof: \"value\"\n}, {\n no: 15,\n name: \"stream_trailer\",\n kind: \"message\",\n T: DataStream_Trailer,\n oneof: \"value\"\n}, {\n no: 18,\n name: \"encrypted_packet\",\n kind: \"message\",\n T: EncryptedPacket,\n oneof: \"value\"\n}, {\n no: 16,\n name: \"sequence\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 17,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst DataPacket_Kind = /* @__PURE__ */proto3.makeEnum(\"livekit.DataPacket.Kind\", [{\n no: 0,\n name: \"RELIABLE\"\n}, {\n no: 1,\n name: \"LOSSY\"\n}]);\nconst EncryptedPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncryptedPacket\", () => [{\n no: 1,\n name: \"encryption_type\",\n kind: \"enum\",\n T: proto3.getEnumType(Encryption_Type)\n}, {\n no: 2,\n name: \"iv\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}, {\n no: 3,\n name: \"key_index\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"encrypted_value\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}]);\nconst EncryptedPacketPayload = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncryptedPacketPayload\", () => [{\n no: 1,\n name: \"user\",\n kind: \"message\",\n T: UserPacket,\n oneof: \"value\"\n}, {\n no: 3,\n name: \"chat_message\",\n kind: \"message\",\n T: ChatMessage,\n oneof: \"value\"\n}, {\n no: 4,\n name: \"rpc_request\",\n kind: \"message\",\n T: RpcRequest,\n oneof: \"value\"\n}, {\n no: 5,\n name: \"rpc_ack\",\n kind: \"message\",\n T: RpcAck,\n oneof: \"value\"\n}, {\n no: 6,\n name: \"rpc_response\",\n kind: \"message\",\n T: RpcResponse,\n oneof: \"value\"\n}, {\n no: 7,\n name: \"stream_header\",\n kind: \"message\",\n T: DataStream_Header,\n oneof: \"value\"\n}, {\n no: 8,\n name: \"stream_chunk\",\n kind: \"message\",\n T: DataStream_Chunk,\n oneof: \"value\"\n}, {\n no: 9,\n name: \"stream_trailer\",\n kind: \"message\",\n T: DataStream_Trailer,\n oneof: \"value\"\n}]);\nconst ActiveSpeakerUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ActiveSpeakerUpdate\", () => [{\n no: 1,\n name: \"speakers\",\n kind: \"message\",\n T: SpeakerInfo,\n repeated: true\n}]);\nconst SpeakerInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.SpeakerInfo\", () => [{\n no: 1,\n name: \"sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"level\",\n kind: \"scalar\",\n T: 2\n /* ScalarType.FLOAT */\n}, {\n no: 3,\n name: \"active\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst UserPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.UserPacket\", () => [{\n no: 1,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"participant_identity\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"payload\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}, {\n no: 3,\n name: \"destination_sids\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 6,\n name: \"destination_identities\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 4,\n name: \"topic\",\n kind: \"scalar\",\n T: 9,\n opt: true\n}, {\n no: 8,\n name: \"id\",\n kind: \"scalar\",\n T: 9,\n opt: true\n}, {\n no: 9,\n name: \"start_time\",\n kind: \"scalar\",\n T: 4,\n opt: true\n}, {\n no: 10,\n name: \"end_time\",\n kind: \"scalar\",\n T: 4,\n opt: true\n}, {\n no: 11,\n name: \"nonce\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}]);\nconst SipDTMF = /* @__PURE__ */proto3.makeMessageType(\"livekit.SipDTMF\", () => [{\n no: 3,\n name: \"code\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"digit\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst Transcription = /* @__PURE__ */proto3.makeMessageType(\"livekit.Transcription\", () => [{\n no: 2,\n name: \"transcribed_participant_identity\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"track_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"segments\",\n kind: \"message\",\n T: TranscriptionSegment,\n repeated: true\n}]);\nconst TranscriptionSegment = /* @__PURE__ */proto3.makeMessageType(\"livekit.TranscriptionSegment\", () => [{\n no: 1,\n name: \"id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"text\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"start_time\",\n kind: \"scalar\",\n T: 4\n /* ScalarType.UINT64 */\n}, {\n no: 4,\n name: \"end_time\",\n kind: \"scalar\",\n T: 4\n /* ScalarType.UINT64 */\n}, {\n no: 5,\n name: \"final\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 6,\n name: \"language\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst ChatMessage = /* @__PURE__ */proto3.makeMessageType(\"livekit.ChatMessage\", () => [{\n no: 1,\n name: \"id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"timestamp\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 3,\n name: \"edit_timestamp\",\n kind: \"scalar\",\n T: 3,\n opt: true\n}, {\n no: 4,\n name: \"message\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"deleted\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 6,\n name: \"generated\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst RpcRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcRequest\", () => [{\n no: 1,\n name: \"id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"method\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"payload\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"response_timeout_ms\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 5,\n name: \"version\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 6,\n name: \"compressed_payload\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}]);\nconst RpcAck = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcAck\", () => [{\n no: 1,\n name: \"request_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst RpcResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcResponse\", () => [{\n no: 1,\n name: \"request_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"payload\",\n kind: \"scalar\",\n T: 9,\n oneof: \"value\"\n}, {\n no: 3,\n name: \"error\",\n kind: \"message\",\n T: RpcError$1,\n oneof: \"value\"\n}, {\n no: 4,\n name: \"compressed_payload\",\n kind: \"scalar\",\n T: 12,\n oneof: \"value\"\n}]);\nconst RpcError$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcError\", () => [{\n no: 1,\n name: \"code\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"message\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"data\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst ParticipantTracks = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantTracks\", () => [{\n no: 1,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"track_sids\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}]);\nconst ServerInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ServerInfo\", () => [{\n no: 1,\n name: \"edition\",\n kind: \"enum\",\n T: proto3.getEnumType(ServerInfo_Edition)\n}, {\n no: 2,\n name: \"version\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"protocol\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 4,\n name: \"region\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"node_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 6,\n name: \"debug_info\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 7,\n name: \"agent_protocol\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}]);\nconst ServerInfo_Edition = /* @__PURE__ */proto3.makeEnum(\"livekit.ServerInfo.Edition\", [{\n no: 0,\n name: \"Standard\"\n}, {\n no: 1,\n name: \"Cloud\"\n}]);\nconst ClientInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ClientInfo\", () => [{\n no: 1,\n name: \"sdk\",\n kind: \"enum\",\n T: proto3.getEnumType(ClientInfo_SDK)\n}, {\n no: 2,\n name: \"version\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"protocol\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 4,\n name: \"os\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"os_version\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 6,\n name: \"device_model\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 7,\n name: \"browser\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 8,\n name: \"browser_version\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 9,\n name: \"address\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 10,\n name: \"network\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 11,\n name: \"other_sdks\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 12,\n name: \"client_protocol\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 13,\n name: \"capabilities\",\n kind: \"enum\",\n T: proto3.getEnumType(ClientInfo_Capability),\n repeated: true\n}]);\nconst ClientInfo_SDK = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientInfo.SDK\", [{\n no: 0,\n name: \"UNKNOWN\"\n}, {\n no: 1,\n name: \"JS\"\n}, {\n no: 2,\n name: \"SWIFT\"\n}, {\n no: 3,\n name: \"ANDROID\"\n}, {\n no: 4,\n name: \"FLUTTER\"\n}, {\n no: 5,\n name: \"GO\"\n}, {\n no: 6,\n name: \"UNITY\"\n}, {\n no: 7,\n name: \"REACT_NATIVE\"\n}, {\n no: 8,\n name: \"RUST\"\n}, {\n no: 9,\n name: \"PYTHON\"\n}, {\n no: 10,\n name: \"CPP\"\n}, {\n no: 11,\n name: \"UNITY_WEB\"\n}, {\n no: 12,\n name: \"NODE\"\n}, {\n no: 13,\n name: \"UNREAL\"\n}, {\n no: 14,\n name: \"ESP32\"\n}]);\nconst ClientInfo_Capability = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientInfo.Capability\", [{\n no: 0,\n name: \"CAP_UNUSED\"\n}, {\n no: 1,\n name: \"CAP_PACKET_TRAILER\"\n}]);\nconst ClientConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.ClientConfiguration\", () => [{\n no: 1,\n name: \"video\",\n kind: \"message\",\n T: VideoConfiguration\n}, {\n no: 2,\n name: \"screen\",\n kind: \"message\",\n T: VideoConfiguration\n}, {\n no: 3,\n name: \"resume_connection\",\n kind: \"enum\",\n T: proto3.getEnumType(ClientConfigSetting)\n}, {\n no: 4,\n name: \"disabled_codecs\",\n kind: \"message\",\n T: DisabledCodecs\n}, {\n no: 5,\n name: \"force_relay\",\n kind: \"enum\",\n T: proto3.getEnumType(ClientConfigSetting)\n}]);\nconst VideoConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.VideoConfiguration\", () => [{\n no: 1,\n name: \"hardware_encoder\",\n kind: \"enum\",\n T: proto3.getEnumType(ClientConfigSetting)\n}]);\nconst DisabledCodecs = /* @__PURE__ */proto3.makeMessageType(\"livekit.DisabledCodecs\", () => [{\n no: 1,\n name: \"codecs\",\n kind: \"message\",\n T: Codec,\n repeated: true\n}, {\n no: 2,\n name: \"publish\",\n kind: \"message\",\n T: Codec,\n repeated: true\n}]);\nconst TimedVersion = /* @__PURE__ */proto3.makeMessageType(\"livekit.TimedVersion\", () => [{\n no: 1,\n name: \"unix_micro\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 2,\n name: \"ticks\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}]);\nconst DataStream_OperationType = /* @__PURE__ */proto3.makeEnum(\"livekit.DataStream.OperationType\", [{\n no: 0,\n name: \"CREATE\"\n}, {\n no: 1,\n name: \"UPDATE\"\n}, {\n no: 2,\n name: \"DELETE\"\n}, {\n no: 3,\n name: \"REACTION\"\n}]);\nconst DataStream_TextHeader = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.TextHeader\", () => [{\n no: 1,\n name: \"operation_type\",\n kind: \"enum\",\n T: proto3.getEnumType(DataStream_OperationType)\n}, {\n no: 2,\n name: \"version\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 3,\n name: \"reply_to_stream_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"attached_stream_ids\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 5,\n name: \"generated\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}], {\n localName: \"DataStream_TextHeader\"\n});\nconst DataStream_ByteHeader = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.ByteHeader\", () => [{\n no: 1,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}], {\n localName: \"DataStream_ByteHeader\"\n});\nconst DataStream_Header = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Header\", () => [{\n no: 1,\n name: \"stream_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"timestamp\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 3,\n name: \"topic\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"mime_type\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"total_length\",\n kind: \"scalar\",\n T: 4,\n opt: true\n}, {\n no: 7,\n name: \"encryption_type\",\n kind: \"enum\",\n T: proto3.getEnumType(Encryption_Type)\n}, {\n no: 8,\n name: \"attributes\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}, {\n no: 9,\n name: \"text_header\",\n kind: \"message\",\n T: DataStream_TextHeader,\n oneof: \"content_header\"\n}, {\n no: 10,\n name: \"byte_header\",\n kind: \"message\",\n T: DataStream_ByteHeader,\n oneof: \"content_header\"\n}], {\n localName: \"DataStream_Header\"\n});\nconst DataStream_Chunk = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Chunk\", () => [{\n no: 1,\n name: \"stream_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"chunk_index\",\n kind: \"scalar\",\n T: 4\n /* ScalarType.UINT64 */\n}, {\n no: 3,\n name: \"content\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}, {\n no: 4,\n name: \"version\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 5,\n name: \"iv\",\n kind: \"scalar\",\n T: 12,\n opt: true\n}], {\n localName: \"DataStream_Chunk\"\n});\nconst DataStream_Trailer = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Trailer\", () => [{\n no: 1,\n name: \"stream_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"reason\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"attributes\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}], {\n localName: \"DataStream_Trailer\"\n});\nconst FilterParams = /* @__PURE__ */proto3.makeMessageType(\"livekit.FilterParams\", () => [{\n no: 1,\n name: \"include_events\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 2,\n name: \"exclude_events\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}]);\nconst WebhookConfig = /* @__PURE__ */proto3.makeMessageType(\"livekit.WebhookConfig\", () => [{\n no: 1,\n name: \"url\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"signing_key\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"filter_params\",\n kind: \"message\",\n T: FilterParams\n}]);\nconst SubscribedAudioCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedAudioCodec\", () => [{\n no: 1,\n name: \"codec\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"enabled\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst JobRestartPolicy = /* @__PURE__ */proto3.makeEnum(\"livekit.JobRestartPolicy\", [{\n no: 0,\n name: \"JRP_ON_FAILURE\"\n}, {\n no: 1,\n name: \"JRP_NEVER\"\n}]);\nconst RoomAgentDispatch = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomAgentDispatch\", () => [{\n no: 1,\n name: \"agent_name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"metadata\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"restart_policy\",\n kind: \"enum\",\n T: proto3.getEnumType(JobRestartPolicy)\n}, {\n no: 4,\n name: \"deployment\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst EncodingOptionsPreset = /* @__PURE__ */proto3.makeEnum(\"livekit.EncodingOptionsPreset\", [{\n no: 0,\n name: \"H264_720P_30\"\n}, {\n no: 1,\n name: \"H264_720P_60\"\n}, {\n no: 2,\n name: \"H264_1080P_30\"\n}, {\n no: 3,\n name: \"H264_1080P_60\"\n}, {\n no: 4,\n name: \"PORTRAIT_H264_720P_30\"\n}, {\n no: 5,\n name: \"PORTRAIT_H264_720P_60\"\n}, {\n no: 6,\n name: \"PORTRAIT_H264_1080P_30\"\n}, {\n no: 7,\n name: \"PORTRAIT_H264_1080P_60\"\n}]);\nconst EncodedFileType = /* @__PURE__ */proto3.makeEnum(\"livekit.EncodedFileType\", [{\n no: 0,\n name: \"DEFAULT_FILETYPE\"\n}, {\n no: 1,\n name: \"MP4\"\n}, {\n no: 2,\n name: \"OGG\"\n}, {\n no: 3,\n name: \"MP3\"\n}]);\nconst StreamProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.StreamProtocol\", [{\n no: 0,\n name: \"DEFAULT_PROTOCOL\"\n}, {\n no: 1,\n name: \"RTMP\"\n}, {\n no: 2,\n name: \"SRT\"\n}, {\n no: 3,\n name: \"WEBSOCKET\"\n}]);\nconst SegmentedFileProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.SegmentedFileProtocol\", [{\n no: 0,\n name: \"DEFAULT_SEGMENTED_FILE_PROTOCOL\"\n}, {\n no: 1,\n name: \"HLS_PROTOCOL\"\n}]);\nconst SegmentedFileSuffix = /* @__PURE__ */proto3.makeEnum(\"livekit.SegmentedFileSuffix\", [{\n no: 0,\n name: \"INDEX\"\n}, {\n no: 1,\n name: \"TIMESTAMP\"\n}]);\nconst ImageFileSuffix = /* @__PURE__ */proto3.makeEnum(\"livekit.ImageFileSuffix\", [{\n no: 0,\n name: \"IMAGE_SUFFIX_INDEX\"\n}, {\n no: 1,\n name: \"IMAGE_SUFFIX_TIMESTAMP\"\n}, {\n no: 2,\n name: \"IMAGE_SUFFIX_NONE_OVERWRITE\"\n}]);\nconst AudioMixing = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioMixing\", [{\n no: 0,\n name: \"DEFAULT_MIXING\"\n}, {\n no: 1,\n name: \"DUAL_CHANNEL_AGENT\"\n}, {\n no: 2,\n name: \"DUAL_CHANNEL_ALTERNATE\"\n}]);\nconst EncodingOptions = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncodingOptions\", () => [{\n no: 1,\n name: \"width\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 2,\n name: \"height\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 3,\n name: \"depth\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 4,\n name: \"framerate\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 5,\n name: \"audio_codec\",\n kind: \"enum\",\n T: proto3.getEnumType(AudioCodec)\n}, {\n no: 6,\n name: \"audio_bitrate\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 7,\n name: \"audio_frequency\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 8,\n name: \"video_codec\",\n kind: \"enum\",\n T: proto3.getEnumType(VideoCodec)\n}, {\n no: 9,\n name: \"video_bitrate\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 10,\n name: \"key_frame_interval\",\n kind: \"scalar\",\n T: 1\n /* ScalarType.DOUBLE */\n}, {\n no: 11,\n name: \"audio_quality\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 12,\n name: \"video_quality\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}]);\nconst StreamOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamOutput\", () => [{\n no: 1,\n name: \"protocol\",\n kind: \"enum\",\n T: proto3.getEnumType(StreamProtocol)\n}, {\n no: 2,\n name: \"urls\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}]);\nconst SegmentedFileOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.SegmentedFileOutput\", () => [{\n no: 1,\n name: \"protocol\",\n kind: \"enum\",\n T: proto3.getEnumType(SegmentedFileProtocol)\n}, {\n no: 2,\n name: \"filename_prefix\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"playlist_name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 11,\n name: \"live_playlist_name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"segment_duration\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 10,\n name: \"filename_suffix\",\n kind: \"enum\",\n T: proto3.getEnumType(SegmentedFileSuffix)\n}, {\n no: 8,\n name: \"disable_manifest\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 5,\n name: \"s3\",\n kind: \"message\",\n T: S3Upload,\n oneof: \"output\"\n}, {\n no: 6,\n name: \"gcp\",\n kind: \"message\",\n T: GCPUpload,\n oneof: \"output\"\n}, {\n no: 7,\n name: \"azure\",\n kind: \"message\",\n T: AzureBlobUpload,\n oneof: \"output\"\n}, {\n no: 9,\n name: \"aliOSS\",\n kind: \"message\",\n T: AliOSSUpload,\n oneof: \"output\"\n}]);\nconst ImageOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.ImageOutput\", () => [{\n no: 1,\n name: \"capture_interval\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"width\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 3,\n name: \"height\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 4,\n name: \"filename_prefix\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"filename_suffix\",\n kind: \"enum\",\n T: proto3.getEnumType(ImageFileSuffix)\n}, {\n no: 6,\n name: \"image_codec\",\n kind: \"enum\",\n T: proto3.getEnumType(ImageCodec)\n}, {\n no: 7,\n name: \"disable_manifest\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 8,\n name: \"s3\",\n kind: \"message\",\n T: S3Upload,\n oneof: \"output\"\n}, {\n no: 9,\n name: \"gcp\",\n kind: \"message\",\n T: GCPUpload,\n oneof: \"output\"\n}, {\n no: 10,\n name: \"azure\",\n kind: \"message\",\n T: AzureBlobUpload,\n oneof: \"output\"\n}, {\n no: 11,\n name: \"aliOSS\",\n kind: \"message\",\n T: AliOSSUpload,\n oneof: \"output\"\n}]);\nconst S3Upload = /* @__PURE__ */proto3.makeMessageType(\"livekit.S3Upload\", () => [{\n no: 1,\n name: \"access_key\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"secret\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 11,\n name: \"session_token\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 12,\n name: \"assume_role_arn\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 13,\n name: \"assume_role_external_id\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"region\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"endpoint\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"bucket\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 6,\n name: \"force_path_style\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 7,\n name: \"metadata\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}, {\n no: 8,\n name: \"tagging\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 9,\n name: \"content_disposition\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 10,\n name: \"proxy\",\n kind: \"message\",\n T: ProxyConfig\n}]);\nconst GCPUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.GCPUpload\", () => [{\n no: 1,\n name: \"credentials\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"bucket\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"proxy\",\n kind: \"message\",\n T: ProxyConfig\n}]);\nconst AzureBlobUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.AzureBlobUpload\", () => [{\n no: 1,\n name: \"account_name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"account_key\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"container_name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst AliOSSUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.AliOSSUpload\", () => [{\n no: 1,\n name: \"access_key\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"secret\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"region\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"endpoint\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"bucket\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst ProxyConfig = /* @__PURE__ */proto3.makeMessageType(\"livekit.ProxyConfig\", () => [{\n no: 1,\n name: \"url\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"username\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"password\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst AutoParticipantEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.AutoParticipantEgress\", () => [{\n no: 1,\n name: \"preset\",\n kind: \"enum\",\n T: proto3.getEnumType(EncodingOptionsPreset),\n oneof: \"options\"\n}, {\n no: 2,\n name: \"advanced\",\n kind: \"message\",\n T: EncodingOptions,\n oneof: \"options\"\n}, {\n no: 3,\n name: \"file_outputs\",\n kind: \"message\",\n T: EncodedFileOutput,\n repeated: true\n}, {\n no: 4,\n name: \"segment_outputs\",\n kind: \"message\",\n T: SegmentedFileOutput,\n repeated: true\n}]);\nconst AutoTrackEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.AutoTrackEgress\", () => [{\n no: 1,\n name: \"filepath\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"disable_manifest\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 2,\n name: \"s3\",\n kind: \"message\",\n T: S3Upload,\n oneof: \"output\"\n}, {\n no: 3,\n name: \"gcp\",\n kind: \"message\",\n T: GCPUpload,\n oneof: \"output\"\n}, {\n no: 4,\n name: \"azure\",\n kind: \"message\",\n T: AzureBlobUpload,\n oneof: \"output\"\n}, {\n no: 6,\n name: \"aliOSS\",\n kind: \"message\",\n T: AliOSSUpload,\n oneof: \"output\"\n}]);\nconst RoomCompositeEgressRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomCompositeEgressRequest\", () => [{\n no: 1,\n name: \"room_name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"layout\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"audio_only\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 15,\n name: \"audio_mixing\",\n kind: \"enum\",\n T: proto3.getEnumType(AudioMixing)\n}, {\n no: 4,\n name: \"video_only\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 5,\n name: \"custom_base_url\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 6,\n name: \"file\",\n kind: \"message\",\n T: EncodedFileOutput,\n oneof: \"output\"\n}, {\n no: 7,\n name: \"stream\",\n kind: \"message\",\n T: StreamOutput,\n oneof: \"output\"\n}, {\n no: 10,\n name: \"segments\",\n kind: \"message\",\n T: SegmentedFileOutput,\n oneof: \"output\"\n}, {\n no: 8,\n name: \"preset\",\n kind: \"enum\",\n T: proto3.getEnumType(EncodingOptionsPreset),\n oneof: \"options\"\n}, {\n no: 9,\n name: \"advanced\",\n kind: \"message\",\n T: EncodingOptions,\n oneof: \"options\"\n}, {\n no: 11,\n name: \"file_outputs\",\n kind: \"message\",\n T: EncodedFileOutput,\n repeated: true\n}, {\n no: 12,\n name: \"stream_outputs\",\n kind: \"message\",\n T: StreamOutput,\n repeated: true\n}, {\n no: 13,\n name: \"segment_outputs\",\n kind: \"message\",\n T: SegmentedFileOutput,\n repeated: true\n}, {\n no: 14,\n name: \"image_outputs\",\n kind: \"message\",\n T: ImageOutput,\n repeated: true\n}, {\n no: 16,\n name: \"webhooks\",\n kind: \"message\",\n T: WebhookConfig,\n repeated: true\n}]);\nconst EncodedFileOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncodedFileOutput\", () => [{\n no: 1,\n name: \"file_type\",\n kind: \"enum\",\n T: proto3.getEnumType(EncodedFileType)\n}, {\n no: 2,\n name: \"filepath\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 6,\n name: \"disable_manifest\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 3,\n name: \"s3\",\n kind: \"message\",\n T: S3Upload,\n oneof: \"output\"\n}, {\n no: 4,\n name: \"gcp\",\n kind: \"message\",\n T: GCPUpload,\n oneof: \"output\"\n}, {\n no: 5,\n name: \"azure\",\n kind: \"message\",\n T: AzureBlobUpload,\n oneof: \"output\"\n}, {\n no: 7,\n name: \"aliOSS\",\n kind: \"message\",\n T: AliOSSUpload,\n oneof: \"output\"\n}]);\nconst RoomEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomEgress\", () => [{\n no: 1,\n name: \"room\",\n kind: \"message\",\n T: RoomCompositeEgressRequest\n}, {\n no: 3,\n name: \"participant\",\n kind: \"message\",\n T: AutoParticipantEgress\n}, {\n no: 2,\n name: \"tracks\",\n kind: \"message\",\n T: AutoTrackEgress\n}]);\nconst RoomConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomConfiguration\", () => [{\n no: 1,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"empty_timeout\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 3,\n name: \"departure_timeout\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"max_participants\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 11,\n name: \"metadata\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"egress\",\n kind: \"message\",\n T: RoomEgress\n}, {\n no: 7,\n name: \"min_playout_delay\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 8,\n name: \"max_playout_delay\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 9,\n name: \"sync_streams\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 10,\n name: \"agents\",\n kind: \"message\",\n T: RoomAgentDispatch,\n repeated: true\n}, {\n no: 12,\n name: \"tags\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}]);\nconst SignalTarget = /* @__PURE__ */proto3.makeEnum(\"livekit.SignalTarget\", [{\n no: 0,\n name: \"PUBLISHER\"\n}, {\n no: 1,\n name: \"SUBSCRIBER\"\n}]);\nconst StreamState = /* @__PURE__ */proto3.makeEnum(\"livekit.StreamState\", [{\n no: 0,\n name: \"ACTIVE\"\n}, {\n no: 1,\n name: \"PAUSED\"\n}]);\nconst CandidateProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.CandidateProtocol\", [{\n no: 0,\n name: \"UDP\"\n}, {\n no: 1,\n name: \"TCP\"\n}, {\n no: 2,\n name: \"TLS\"\n}]);\nconst SignalRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.SignalRequest\", () => [{\n no: 1,\n name: \"offer\",\n kind: \"message\",\n T: SessionDescription,\n oneof: \"message\"\n}, {\n no: 2,\n name: \"answer\",\n kind: \"message\",\n T: SessionDescription,\n oneof: \"message\"\n}, {\n no: 3,\n name: \"trickle\",\n kind: \"message\",\n T: TrickleRequest,\n oneof: \"message\"\n}, {\n no: 4,\n name: \"add_track\",\n kind: \"message\",\n T: AddTrackRequest,\n oneof: \"message\"\n}, {\n no: 5,\n name: \"mute\",\n kind: \"message\",\n T: MuteTrackRequest,\n oneof: \"message\"\n}, {\n no: 6,\n name: \"subscription\",\n kind: \"message\",\n T: UpdateSubscription,\n oneof: \"message\"\n}, {\n no: 7,\n name: \"track_setting\",\n kind: \"message\",\n T: UpdateTrackSettings,\n oneof: \"message\"\n}, {\n no: 8,\n name: \"leave\",\n kind: \"message\",\n T: LeaveRequest,\n oneof: \"message\"\n}, {\n no: 10,\n name: \"update_layers\",\n kind: \"message\",\n T: UpdateVideoLayers,\n oneof: \"message\"\n}, {\n no: 11,\n name: \"subscription_permission\",\n kind: \"message\",\n T: SubscriptionPermission,\n oneof: \"message\"\n}, {\n no: 12,\n name: \"sync_state\",\n kind: \"message\",\n T: SyncState,\n oneof: \"message\"\n}, {\n no: 13,\n name: \"simulate\",\n kind: \"message\",\n T: SimulateScenario,\n oneof: \"message\"\n}, {\n no: 14,\n name: \"ping\",\n kind: \"scalar\",\n T: 3,\n oneof: \"message\"\n}, {\n no: 15,\n name: \"update_metadata\",\n kind: \"message\",\n T: UpdateParticipantMetadata,\n oneof: \"message\"\n}, {\n no: 16,\n name: \"ping_req\",\n kind: \"message\",\n T: Ping,\n oneof: \"message\"\n}, {\n no: 17,\n name: \"update_audio_track\",\n kind: \"message\",\n T: UpdateLocalAudioTrack,\n oneof: \"message\"\n}, {\n no: 18,\n name: \"update_video_track\",\n kind: \"message\",\n T: UpdateLocalVideoTrack,\n oneof: \"message\"\n}, {\n no: 19,\n name: \"publish_data_track_request\",\n kind: \"message\",\n T: PublishDataTrackRequest,\n oneof: \"message\"\n}, {\n no: 20,\n name: \"unpublish_data_track_request\",\n kind: \"message\",\n T: UnpublishDataTrackRequest,\n oneof: \"message\"\n}, {\n no: 21,\n name: \"update_data_subscription\",\n kind: \"message\",\n T: UpdateDataSubscription,\n oneof: \"message\"\n}]);\nconst SignalResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.SignalResponse\", () => [{\n no: 1,\n name: \"join\",\n kind: \"message\",\n T: JoinResponse,\n oneof: \"message\"\n}, {\n no: 2,\n name: \"answer\",\n kind: \"message\",\n T: SessionDescription,\n oneof: \"message\"\n}, {\n no: 3,\n name: \"offer\",\n kind: \"message\",\n T: SessionDescription,\n oneof: \"message\"\n}, {\n no: 4,\n name: \"trickle\",\n kind: \"message\",\n T: TrickleRequest,\n oneof: \"message\"\n}, {\n no: 5,\n name: \"update\",\n kind: \"message\",\n T: ParticipantUpdate,\n oneof: \"message\"\n}, {\n no: 6,\n name: \"track_published\",\n kind: \"message\",\n T: TrackPublishedResponse,\n oneof: \"message\"\n}, {\n no: 8,\n name: \"leave\",\n kind: \"message\",\n T: LeaveRequest,\n oneof: \"message\"\n}, {\n no: 9,\n name: \"mute\",\n kind: \"message\",\n T: MuteTrackRequest,\n oneof: \"message\"\n}, {\n no: 10,\n name: \"speakers_changed\",\n kind: \"message\",\n T: SpeakersChanged,\n oneof: \"message\"\n}, {\n no: 11,\n name: \"room_update\",\n kind: \"message\",\n T: RoomUpdate,\n oneof: \"message\"\n}, {\n no: 12,\n name: \"connection_quality\",\n kind: \"message\",\n T: ConnectionQualityUpdate,\n oneof: \"message\"\n}, {\n no: 13,\n name: \"stream_state_update\",\n kind: \"message\",\n T: StreamStateUpdate,\n oneof: \"message\"\n}, {\n no: 14,\n name: \"subscribed_quality_update\",\n kind: \"message\",\n T: SubscribedQualityUpdate,\n oneof: \"message\"\n}, {\n no: 15,\n name: \"subscription_permission_update\",\n kind: \"message\",\n T: SubscriptionPermissionUpdate,\n oneof: \"message\"\n}, {\n no: 16,\n name: \"refresh_token\",\n kind: \"scalar\",\n T: 9,\n oneof: \"message\"\n}, {\n no: 17,\n name: \"track_unpublished\",\n kind: \"message\",\n T: TrackUnpublishedResponse,\n oneof: \"message\"\n}, {\n no: 18,\n name: \"pong\",\n kind: \"scalar\",\n T: 3,\n oneof: \"message\"\n}, {\n no: 19,\n name: \"reconnect\",\n kind: \"message\",\n T: ReconnectResponse,\n oneof: \"message\"\n}, {\n no: 20,\n name: \"pong_resp\",\n kind: \"message\",\n T: Pong,\n oneof: \"message\"\n}, {\n no: 21,\n name: \"subscription_response\",\n kind: \"message\",\n T: SubscriptionResponse,\n oneof: \"message\"\n}, {\n no: 22,\n name: \"request_response\",\n kind: \"message\",\n T: RequestResponse,\n oneof: \"message\"\n}, {\n no: 23,\n name: \"track_subscribed\",\n kind: \"message\",\n T: TrackSubscribed,\n oneof: \"message\"\n}, {\n no: 24,\n name: \"room_moved\",\n kind: \"message\",\n T: RoomMovedResponse,\n oneof: \"message\"\n}, {\n no: 25,\n name: \"media_sections_requirement\",\n kind: \"message\",\n T: MediaSectionsRequirement,\n oneof: \"message\"\n}, {\n no: 26,\n name: \"subscribed_audio_codec_update\",\n kind: \"message\",\n T: SubscribedAudioCodecUpdate,\n oneof: \"message\"\n}, {\n no: 27,\n name: \"publish_data_track_response\",\n kind: \"message\",\n T: PublishDataTrackResponse,\n oneof: \"message\"\n}, {\n no: 28,\n name: \"unpublish_data_track_response\",\n kind: \"message\",\n T: UnpublishDataTrackResponse,\n oneof: \"message\"\n}, {\n no: 29,\n name: \"data_track_subscriber_handles\",\n kind: \"message\",\n T: DataTrackSubscriberHandles,\n oneof: \"message\"\n}]);\nconst SimulcastCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulcastCodec\", () => [{\n no: 1,\n name: \"codec\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"cid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"layers\",\n kind: \"message\",\n T: VideoLayer,\n repeated: true\n}, {\n no: 5,\n name: \"video_layer_mode\",\n kind: \"enum\",\n T: proto3.getEnumType(VideoLayer_Mode)\n}]);\nconst AddTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.AddTrackRequest\", () => [{\n no: 1,\n name: \"cid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"type\",\n kind: \"enum\",\n T: proto3.getEnumType(TrackType)\n}, {\n no: 4,\n name: \"width\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 5,\n name: \"height\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 6,\n name: \"muted\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 7,\n name: \"disable_dtx\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 8,\n name: \"source\",\n kind: \"enum\",\n T: proto3.getEnumType(TrackSource)\n}, {\n no: 9,\n name: \"layers\",\n kind: \"message\",\n T: VideoLayer,\n repeated: true\n}, {\n no: 10,\n name: \"simulcast_codecs\",\n kind: \"message\",\n T: SimulcastCodec,\n repeated: true\n}, {\n no: 11,\n name: \"sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 12,\n name: \"stereo\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 13,\n name: \"disable_red\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 14,\n name: \"encryption\",\n kind: \"enum\",\n T: proto3.getEnumType(Encryption_Type)\n}, {\n no: 15,\n name: \"stream\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 16,\n name: \"backup_codec_policy\",\n kind: \"enum\",\n T: proto3.getEnumType(BackupCodecPolicy$1)\n}, {\n no: 17,\n name: \"audio_features\",\n kind: \"enum\",\n T: proto3.getEnumType(AudioTrackFeature),\n repeated: true\n}, {\n no: 18,\n name: \"packet_trailer_features\",\n kind: \"enum\",\n T: proto3.getEnumType(PacketTrailerFeature),\n repeated: true\n}]);\nconst PublishDataTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.PublishDataTrackRequest\", () => [{\n no: 1,\n name: \"pub_handle\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"encryption\",\n kind: \"enum\",\n T: proto3.getEnumType(Encryption_Type)\n}]);\nconst PublishDataTrackResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.PublishDataTrackResponse\", () => [{\n no: 1,\n name: \"info\",\n kind: \"message\",\n T: DataTrackInfo$1\n}]);\nconst UnpublishDataTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.UnpublishDataTrackRequest\", () => [{\n no: 1,\n name: \"pub_handle\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst UnpublishDataTrackResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.UnpublishDataTrackResponse\", () => [{\n no: 1,\n name: \"info\",\n kind: \"message\",\n T: DataTrackInfo$1\n}]);\nconst DataTrackSubscriberHandles = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackSubscriberHandles\", () => [{\n no: 1,\n name: \"sub_handles\",\n kind: \"map\",\n K: 13,\n V: {\n kind: \"message\",\n T: DataTrackSubscriberHandles_PublishedDataTrack\n }\n}]);\nconst DataTrackSubscriberHandles_PublishedDataTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataTrackSubscriberHandles.PublishedDataTrack\", () => [{\n no: 1,\n name: \"publisher_identity\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"publisher_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}], {\n localName: \"DataTrackSubscriberHandles_PublishedDataTrack\"\n});\nconst TrickleRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrickleRequest\", () => [{\n no: 1,\n name: \"candidateInit\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"target\",\n kind: \"enum\",\n T: proto3.getEnumType(SignalTarget)\n}, {\n no: 3,\n name: \"final\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst MuteTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.MuteTrackRequest\", () => [{\n no: 1,\n name: \"sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"muted\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst JoinResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.JoinResponse\", () => [{\n no: 1,\n name: \"room\",\n kind: \"message\",\n T: Room$1\n}, {\n no: 2,\n name: \"participant\",\n kind: \"message\",\n T: ParticipantInfo\n}, {\n no: 3,\n name: \"other_participants\",\n kind: \"message\",\n T: ParticipantInfo,\n repeated: true\n}, {\n no: 4,\n name: \"server_version\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 5,\n name: \"ice_servers\",\n kind: \"message\",\n T: ICEServer,\n repeated: true\n}, {\n no: 6,\n name: \"subscriber_primary\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 7,\n name: \"alternative_url\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 8,\n name: \"client_configuration\",\n kind: \"message\",\n T: ClientConfiguration\n}, {\n no: 9,\n name: \"server_region\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 10,\n name: \"ping_timeout\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 11,\n name: \"ping_interval\",\n kind: \"scalar\",\n T: 5\n /* ScalarType.INT32 */\n}, {\n no: 12,\n name: \"server_info\",\n kind: \"message\",\n T: ServerInfo\n}, {\n no: 13,\n name: \"sif_trailer\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}, {\n no: 14,\n name: \"enabled_publish_codecs\",\n kind: \"message\",\n T: Codec,\n repeated: true\n}, {\n no: 15,\n name: \"fast_publish\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst ReconnectResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.ReconnectResponse\", () => [{\n no: 1,\n name: \"ice_servers\",\n kind: \"message\",\n T: ICEServer,\n repeated: true\n}, {\n no: 2,\n name: \"client_configuration\",\n kind: \"message\",\n T: ClientConfiguration\n}, {\n no: 3,\n name: \"server_info\",\n kind: \"message\",\n T: ServerInfo\n}, {\n no: 4,\n name: \"last_message_seq\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst TrackPublishedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackPublishedResponse\", () => [{\n no: 1,\n name: \"cid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"track\",\n kind: \"message\",\n T: TrackInfo\n}]);\nconst TrackUnpublishedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackUnpublishedResponse\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst SessionDescription = /* @__PURE__ */proto3.makeMessageType(\"livekit.SessionDescription\", () => [{\n no: 1,\n name: \"type\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"sdp\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"id\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 4,\n name: \"mid_to_track_id\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}]);\nconst ParticipantUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantUpdate\", () => [{\n no: 1,\n name: \"participants\",\n kind: \"message\",\n T: ParticipantInfo,\n repeated: true\n}]);\nconst UpdateSubscription = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateSubscription\", () => [{\n no: 1,\n name: \"track_sids\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 2,\n name: \"subscribe\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 3,\n name: \"participant_tracks\",\n kind: \"message\",\n T: ParticipantTracks,\n repeated: true\n}]);\nconst UpdateDataSubscription = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateDataSubscription\", () => [{\n no: 1,\n name: \"updates\",\n kind: \"message\",\n T: UpdateDataSubscription_Update,\n repeated: true\n}]);\nconst UpdateDataSubscription_Update = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateDataSubscription.Update\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"subscribe\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 3,\n name: \"options\",\n kind: \"message\",\n T: DataTrackSubscriptionOptions\n}], {\n localName: \"UpdateDataSubscription_Update\"\n});\nconst UpdateTrackSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateTrackSettings\", () => [{\n no: 1,\n name: \"track_sids\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 3,\n name: \"disabled\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 4,\n name: \"quality\",\n kind: \"enum\",\n T: proto3.getEnumType(VideoQuality$1)\n}, {\n no: 5,\n name: \"width\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 6,\n name: \"height\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 7,\n name: \"fps\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 8,\n name: \"priority\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst UpdateLocalAudioTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateLocalAudioTrack\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"features\",\n kind: \"enum\",\n T: proto3.getEnumType(AudioTrackFeature),\n repeated: true\n}]);\nconst UpdateLocalVideoTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateLocalVideoTrack\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"width\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 3,\n name: \"height\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst LeaveRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.LeaveRequest\", () => [{\n no: 1,\n name: \"can_reconnect\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 2,\n name: \"reason\",\n kind: \"enum\",\n T: proto3.getEnumType(DisconnectReason)\n}, {\n no: 3,\n name: \"action\",\n kind: \"enum\",\n T: proto3.getEnumType(LeaveRequest_Action)\n}, {\n no: 4,\n name: \"regions\",\n kind: \"message\",\n T: RegionSettings\n}]);\nconst LeaveRequest_Action = /* @__PURE__ */proto3.makeEnum(\"livekit.LeaveRequest.Action\", [{\n no: 0,\n name: \"DISCONNECT\"\n}, {\n no: 1,\n name: \"RESUME\"\n}, {\n no: 2,\n name: \"RECONNECT\"\n}]);\nconst UpdateVideoLayers = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateVideoLayers\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"layers\",\n kind: \"message\",\n T: VideoLayer,\n repeated: true\n}]);\nconst UpdateParticipantMetadata = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateParticipantMetadata\", () => [{\n no: 1,\n name: \"metadata\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"name\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"attributes\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}, {\n no: 4,\n name: \"request_id\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst ICEServer = /* @__PURE__ */proto3.makeMessageType(\"livekit.ICEServer\", () => [{\n no: 1,\n name: \"urls\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 2,\n name: \"username\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"credential\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst SpeakersChanged = /* @__PURE__ */proto3.makeMessageType(\"livekit.SpeakersChanged\", () => [{\n no: 1,\n name: \"speakers\",\n kind: \"message\",\n T: SpeakerInfo,\n repeated: true\n}]);\nconst RoomUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomUpdate\", () => [{\n no: 1,\n name: \"room\",\n kind: \"message\",\n T: Room$1\n}]);\nconst ConnectionQualityInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionQualityInfo\", () => [{\n no: 1,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"quality\",\n kind: \"enum\",\n T: proto3.getEnumType(ConnectionQuality$1)\n}, {\n no: 3,\n name: \"score\",\n kind: \"scalar\",\n T: 2\n /* ScalarType.FLOAT */\n}]);\nconst ConnectionQualityUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionQualityUpdate\", () => [{\n no: 1,\n name: \"updates\",\n kind: \"message\",\n T: ConnectionQualityInfo,\n repeated: true\n}]);\nconst StreamStateInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamStateInfo\", () => [{\n no: 1,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"state\",\n kind: \"enum\",\n T: proto3.getEnumType(StreamState)\n}]);\nconst StreamStateUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamStateUpdate\", () => [{\n no: 1,\n name: \"stream_states\",\n kind: \"message\",\n T: StreamStateInfo,\n repeated: true\n}]);\nconst SubscribedQuality = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedQuality\", () => [{\n no: 1,\n name: \"quality\",\n kind: \"enum\",\n T: proto3.getEnumType(VideoQuality$1)\n}, {\n no: 2,\n name: \"enabled\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst SubscribedCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedCodec\", () => [{\n no: 1,\n name: \"codec\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"qualities\",\n kind: \"message\",\n T: SubscribedQuality,\n repeated: true\n}]);\nconst SubscribedQualityUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedQualityUpdate\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"subscribed_qualities\",\n kind: \"message\",\n T: SubscribedQuality,\n repeated: true\n}, {\n no: 3,\n name: \"subscribed_codecs\",\n kind: \"message\",\n T: SubscribedCodec,\n repeated: true\n}]);\nconst SubscribedAudioCodecUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedAudioCodecUpdate\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"subscribed_audio_codecs\",\n kind: \"message\",\n T: SubscribedAudioCodec,\n repeated: true\n}]);\nconst TrackPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackPermission\", () => [{\n no: 1,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"all_tracks\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 3,\n name: \"track_sids\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 4,\n name: \"participant_identity\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst SubscriptionPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionPermission\", () => [{\n no: 1,\n name: \"all_participants\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 2,\n name: \"track_permissions\",\n kind: \"message\",\n T: TrackPermission,\n repeated: true\n}]);\nconst SubscriptionPermissionUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionPermissionUpdate\", () => [{\n no: 1,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"allowed\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}]);\nconst RoomMovedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomMovedResponse\", () => [{\n no: 1,\n name: \"room\",\n kind: \"message\",\n T: Room$1\n}, {\n no: 2,\n name: \"token\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"participant\",\n kind: \"message\",\n T: ParticipantInfo\n}, {\n no: 4,\n name: \"other_participants\",\n kind: \"message\",\n T: ParticipantInfo,\n repeated: true\n}]);\nconst SyncState = /* @__PURE__ */proto3.makeMessageType(\"livekit.SyncState\", () => [{\n no: 1,\n name: \"answer\",\n kind: \"message\",\n T: SessionDescription\n}, {\n no: 2,\n name: \"subscription\",\n kind: \"message\",\n T: UpdateSubscription\n}, {\n no: 3,\n name: \"publish_tracks\",\n kind: \"message\",\n T: TrackPublishedResponse,\n repeated: true\n}, {\n no: 4,\n name: \"data_channels\",\n kind: \"message\",\n T: DataChannelInfo,\n repeated: true\n}, {\n no: 5,\n name: \"offer\",\n kind: \"message\",\n T: SessionDescription\n}, {\n no: 6,\n name: \"track_sids_disabled\",\n kind: \"scalar\",\n T: 9,\n repeated: true\n}, {\n no: 7,\n name: \"datachannel_receive_states\",\n kind: \"message\",\n T: DataChannelReceiveState,\n repeated: true\n}, {\n no: 8,\n name: \"publish_data_tracks\",\n kind: \"message\",\n T: PublishDataTrackResponse,\n repeated: true\n}]);\nconst DataChannelReceiveState = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataChannelReceiveState\", () => [{\n no: 1,\n name: \"publisher_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"last_seq\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst DataChannelInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataChannelInfo\", () => [{\n no: 1,\n name: \"label\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"id\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 3,\n name: \"target\",\n kind: \"enum\",\n T: proto3.getEnumType(SignalTarget)\n}]);\nconst SimulateScenario = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulateScenario\", () => [{\n no: 1,\n name: \"speaker_update\",\n kind: \"scalar\",\n T: 5,\n oneof: \"scenario\"\n}, {\n no: 2,\n name: \"node_failure\",\n kind: \"scalar\",\n T: 8,\n oneof: \"scenario\"\n}, {\n no: 3,\n name: \"migration\",\n kind: \"scalar\",\n T: 8,\n oneof: \"scenario\"\n}, {\n no: 4,\n name: \"server_leave\",\n kind: \"scalar\",\n T: 8,\n oneof: \"scenario\"\n}, {\n no: 5,\n name: \"switch_candidate_protocol\",\n kind: \"enum\",\n T: proto3.getEnumType(CandidateProtocol),\n oneof: \"scenario\"\n}, {\n no: 6,\n name: \"subscriber_bandwidth\",\n kind: \"scalar\",\n T: 3,\n oneof: \"scenario\"\n}, {\n no: 7,\n name: \"disconnect_signal_on_resume\",\n kind: \"scalar\",\n T: 8,\n oneof: \"scenario\"\n}, {\n no: 8,\n name: \"disconnect_signal_on_resume_no_messages\",\n kind: \"scalar\",\n T: 8,\n oneof: \"scenario\"\n}, {\n no: 9,\n name: \"leave_request_full_reconnect\",\n kind: \"scalar\",\n T: 8,\n oneof: \"scenario\"\n}]);\nconst Ping = /* @__PURE__ */proto3.makeMessageType(\"livekit.Ping\", () => [{\n no: 1,\n name: \"timestamp\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 2,\n name: \"rtt\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}]);\nconst Pong = /* @__PURE__ */proto3.makeMessageType(\"livekit.Pong\", () => [{\n no: 1,\n name: \"last_ping_timestamp\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}, {\n no: 2,\n name: \"timestamp\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}]);\nconst RegionSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.RegionSettings\", () => [{\n no: 1,\n name: \"regions\",\n kind: \"message\",\n T: RegionInfo,\n repeated: true\n}]);\nconst RegionInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.RegionInfo\", () => [{\n no: 1,\n name: \"region\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"url\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 3,\n name: \"distance\",\n kind: \"scalar\",\n T: 3\n /* ScalarType.INT64 */\n}]);\nconst SubscriptionResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionResponse\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"err\",\n kind: \"enum\",\n T: proto3.getEnumType(SubscriptionError)\n}]);\nconst RequestResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RequestResponse\", () => [{\n no: 1,\n name: \"request_id\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"reason\",\n kind: \"enum\",\n T: proto3.getEnumType(RequestResponse_Reason)\n}, {\n no: 3,\n name: \"message\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"trickle\",\n kind: \"message\",\n T: TrickleRequest,\n oneof: \"request\"\n}, {\n no: 5,\n name: \"add_track\",\n kind: \"message\",\n T: AddTrackRequest,\n oneof: \"request\"\n}, {\n no: 6,\n name: \"mute\",\n kind: \"message\",\n T: MuteTrackRequest,\n oneof: \"request\"\n}, {\n no: 7,\n name: \"update_metadata\",\n kind: \"message\",\n T: UpdateParticipantMetadata,\n oneof: \"request\"\n}, {\n no: 8,\n name: \"update_audio_track\",\n kind: \"message\",\n T: UpdateLocalAudioTrack,\n oneof: \"request\"\n}, {\n no: 9,\n name: \"update_video_track\",\n kind: \"message\",\n T: UpdateLocalVideoTrack,\n oneof: \"request\"\n}, {\n no: 10,\n name: \"publish_data_track\",\n kind: \"message\",\n T: PublishDataTrackRequest,\n oneof: \"request\"\n}, {\n no: 11,\n name: \"unpublish_data_track\",\n kind: \"message\",\n T: UnpublishDataTrackRequest,\n oneof: \"request\"\n}]);\nconst RequestResponse_Reason = /* @__PURE__ */proto3.makeEnum(\"livekit.RequestResponse.Reason\", [{\n no: 0,\n name: \"OK\"\n}, {\n no: 1,\n name: \"NOT_FOUND\"\n}, {\n no: 2,\n name: \"NOT_ALLOWED\"\n}, {\n no: 3,\n name: \"LIMIT_EXCEEDED\"\n}, {\n no: 4,\n name: \"QUEUED\"\n}, {\n no: 5,\n name: \"UNSUPPORTED_TYPE\"\n}, {\n no: 6,\n name: \"UNCLASSIFIED_ERROR\"\n}, {\n no: 7,\n name: \"INVALID_HANDLE\"\n}, {\n no: 8,\n name: \"INVALID_NAME\"\n}, {\n no: 9,\n name: \"DUPLICATE_HANDLE\"\n}, {\n no: 10,\n name: \"DUPLICATE_NAME\"\n}]);\nconst TrackSubscribed = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackSubscribed\", () => [{\n no: 1,\n name: \"track_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);\nconst ConnectionSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionSettings\", () => [{\n no: 1,\n name: \"auto_subscribe\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 2,\n name: \"adaptive_stream\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 3,\n name: \"subscriber_allow_pause\",\n kind: \"scalar\",\n T: 8,\n opt: true\n}, {\n no: 4,\n name: \"disable_ice_lite\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 5,\n name: \"auto_subscribe_data_track\",\n kind: \"scalar\",\n T: 8,\n opt: true\n}]);\nconst JoinRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.JoinRequest\", () => [{\n no: 1,\n name: \"client_info\",\n kind: \"message\",\n T: ClientInfo\n}, {\n no: 2,\n name: \"connection_settings\",\n kind: \"message\",\n T: ConnectionSettings\n}, {\n no: 3,\n name: \"metadata\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 4,\n name: \"participant_attributes\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}, {\n no: 5,\n name: \"add_track_requests\",\n kind: \"message\",\n T: AddTrackRequest,\n repeated: true\n}, {\n no: 6,\n name: \"publisher_offer\",\n kind: \"message\",\n T: SessionDescription\n}, {\n no: 7,\n name: \"reconnect\",\n kind: \"scalar\",\n T: 8\n /* ScalarType.BOOL */\n}, {\n no: 8,\n name: \"reconnect_reason\",\n kind: \"enum\",\n T: proto3.getEnumType(ReconnectReason)\n}, {\n no: 9,\n name: \"participant_sid\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 10,\n name: \"sync_state\",\n kind: \"message\",\n T: SyncState\n}]);\nconst WrappedJoinRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.WrappedJoinRequest\", () => [{\n no: 1,\n name: \"compression\",\n kind: \"enum\",\n T: proto3.getEnumType(WrappedJoinRequest_Compression)\n}, {\n no: 2,\n name: \"join_request\",\n kind: \"scalar\",\n T: 12\n /* ScalarType.BYTES */\n}]);\nconst WrappedJoinRequest_Compression = /* @__PURE__ */proto3.makeEnum(\"livekit.WrappedJoinRequest.Compression\", [{\n no: 0,\n name: \"NONE\"\n}, {\n no: 1,\n name: \"GZIP\"\n}]);\nconst MediaSectionsRequirement = /* @__PURE__ */proto3.makeMessageType(\"livekit.MediaSectionsRequirement\", () => [{\n no: 1,\n name: \"num_audios\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}, {\n no: 2,\n name: \"num_videos\",\n kind: \"scalar\",\n T: 13\n /* ScalarType.UINT32 */\n}]);\nconst TokenSourceRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.TokenSourceRequest\", () => [{\n no: 1,\n name: \"room_name\",\n kind: \"scalar\",\n T: 9,\n opt: true\n}, {\n no: 2,\n name: \"participant_name\",\n kind: \"scalar\",\n T: 9,\n opt: true\n}, {\n no: 3,\n name: \"participant_identity\",\n kind: \"scalar\",\n T: 9,\n opt: true\n}, {\n no: 4,\n name: \"participant_metadata\",\n kind: \"scalar\",\n T: 9,\n opt: true\n}, {\n no: 5,\n name: \"participant_attributes\",\n kind: \"map\",\n K: 9,\n V: {\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n }\n}, {\n no: 6,\n name: \"room_config\",\n kind: \"message\",\n T: RoomConfiguration,\n opt: true\n}]);\nconst TokenSourceResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TokenSourceResponse\", () => [{\n no: 1,\n name: \"server_url\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}, {\n no: 2,\n name: \"participant_token\",\n kind: \"scalar\",\n T: 9\n /* ScalarType.STRING */\n}]);function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}var loglevel$1 = {exports: {}};/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\nvar loglevel = loglevel$1.exports;\nvar hasRequiredLoglevel;\nfunction requireLoglevel() {\n if (hasRequiredLoglevel) return loglevel$1.exports;\n hasRequiredLoglevel = 1;\n (function (module) {\n (function (root, definition) {\n\n if (module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n })(loglevel, function () {\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function () {};\n var undefinedType = \"undefined\";\n var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\\/|MSIE /.test(window.navigator.userAgent);\n var logMethods = [\"trace\", \"debug\", \"info\", \"warn\", \"error\"];\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function () {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = i < level ? noop : this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie = encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n function getPersistedLevel() {\n var storedLevel;\n if (typeof window === undefinedType || !storageKey) return;\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location + cookieName.length + 1))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n return storedLevel;\n }\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie = encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n self.levels = {\n \"TRACE\": 0,\n \"DEBUG\": 1,\n \"INFO\": 2,\n \"WARN\": 3,\n \"ERROR\": 4,\n \"SILENT\": 5\n };\n self.methodFactory = factory || defaultMethodFactory;\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) {\n // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n self.enableAll = function (persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n self.disableAll = function (persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(defaultLogger ? defaultLogger.getLevel() : \"WARN\");\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n defaultLogger.getLogger = function getLogger(name) {\n if (typeof name !== \"symbol\" && typeof name !== \"string\" || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(name, defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = typeof window !== undefinedType ? window.log : undefined;\n defaultLogger.noConflict = function () {\n if (typeof window !== undefinedType && window.log === defaultLogger) {\n window.log = _log;\n }\n return defaultLogger;\n };\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n return defaultLogger;\n });\n })(loglevel$1);\n return loglevel$1.exports;\n}var loglevelExports = requireLoglevel();var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"trace\"] = 0] = \"trace\";\n LogLevel[LogLevel[\"debug\"] = 1] = \"debug\";\n LogLevel[LogLevel[\"info\"] = 2] = \"info\";\n LogLevel[LogLevel[\"warn\"] = 3] = \"warn\";\n LogLevel[LogLevel[\"error\"] = 4] = \"error\";\n LogLevel[LogLevel[\"silent\"] = 5] = \"silent\";\n})(LogLevel || (LogLevel = {}));\nvar LoggerNames;\n(function (LoggerNames) {\n LoggerNames[\"Default\"] = \"livekit\";\n LoggerNames[\"Room\"] = \"livekit-room\";\n LoggerNames[\"TokenSource\"] = \"livekit-token-source\";\n LoggerNames[\"Participant\"] = \"livekit-participant\";\n LoggerNames[\"Track\"] = \"livekit-track\";\n LoggerNames[\"Publication\"] = \"livekit-track-publication\";\n LoggerNames[\"Engine\"] = \"livekit-engine\";\n LoggerNames[\"Signal\"] = \"livekit-signal\";\n LoggerNames[\"PCManager\"] = \"livekit-pc-manager\";\n LoggerNames[\"PCTransport\"] = \"livekit-pc-transport\";\n LoggerNames[\"E2EE\"] = \"lk-e2ee\";\n LoggerNames[\"DataTracks\"] = \"livekit-data-tracks\";\n})(LoggerNames || (LoggerNames = {}));\nlet livekitLogger = loglevelExports.getLogger(LoggerNames.Default);\nconst livekitLoggers = Object.values(LoggerNames).map(name => loglevelExports.getLogger(name));\nlivekitLogger.setDefaultLevel(LogLevel.info);\n/**\n * @internal\n *\n * Get a named logger. When `ctxFn` is supplied, every log call\n * automatically:\n * 1. prepends a `[key=value ...]` prefix derived from `ctxFn()` to the\n * message string, so identifiers are visible in browser devtools\n * without expanding the structured context object, and\n * 2. merges `ctxFn()` into the structured context passed to any\n * `setLogExtension` consumer, so ingestion pipelines continue to\n * receive the full metadata unchanged.\n */\nfunction getLogger(name, ctxFn) {\n const logger = loglevelExports.getLogger(name);\n logger.setDefaultLevel(livekitLogger.getLevel());\n if (!ctxFn) {\n return logger;\n }\n return wrapWithContext(logger, ctxFn);\n}\nfunction wrapWithContext(base, ctxFn) {\n // Resolve the underlying method on every call so that later\n // setLogExtension installations (which replace the base logger's\n // methods via loglevel's methodFactory) are picked up.\n const wrap = method => (msg, extra) => {\n const ctx = ctxFn();\n const merged = ctx || extra ? Object.assign(Object.assign({}, ctx), extra) : undefined;\n base[method](msg, merged);\n };\n const proxy = Object.create(base);\n proxy.trace = wrap('trace');\n proxy.debug = wrap('debug');\n proxy.info = wrap('info');\n proxy.warn = wrap('warn');\n proxy.error = wrap('error');\n return proxy;\n}\nfunction setLogLevel(level, loggerName) {\n if (loggerName) {\n loglevelExports.getLogger(loggerName).setLevel(level);\n } else {\n for (const logger of livekitLoggers) {\n logger.setLevel(level);\n }\n }\n}\n/**\n * use this to hook into the logging function to allow sending internal livekit logs to third party services\n * if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins)\n */\nfunction setLogExtension(extension, logger) {\n const loggers = logger ? [logger] : livekitLoggers;\n loggers.forEach(logR => {\n const originalFactory = logR.methodFactory;\n logR.methodFactory = (methodName, configLevel, loggerName) => {\n const rawMethod = originalFactory(methodName, configLevel, loggerName);\n const logLevel = LogLevel[methodName];\n const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;\n return (msg, context) => {\n if (context) rawMethod(msg, context);else rawMethod(msg);\n if (needLog) {\n extension(logLevel, msg, context);\n }\n };\n };\n logR.setLevel(logR.getLevel());\n });\n}\nconst workerLogger = loglevelExports.getLogger(LoggerNames.E2EE);const maxRetryDelay = 7000;\nconst DEFAULT_RETRY_DELAYS_IN_MS = [0, 300, 2 * 2 * 300, 3 * 3 * 300, 4 * 4 * 300, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay];\nclass DefaultReconnectPolicy {\n constructor(retryDelays) {\n this._retryDelays = retryDelays !== undefined ? [...retryDelays] : DEFAULT_RETRY_DELAYS_IN_MS;\n }\n nextRetryDelayInMs(context) {\n if (context.retryCount >= this._retryDelays.length) return null;\n const retryDelay = this._retryDelays[context.retryCount];\n if (context.retryCount <= 1) return retryDelay;\n return retryDelay + Math.random() * 1000;\n }\n}/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};var events = {exports: {}};var hasRequiredEvents;\nfunction requireEvents() {\n if (hasRequiredEvents) return events.exports;\n hasRequiredEvents = 1;\n var R = typeof Reflect === 'object' ? Reflect : null;\n var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n var ReflectOwnKeys;\n if (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n } else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n };\n } else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n }\n function ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n }\n var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n };\n function EventEmitter() {\n EventEmitter.init.call(this);\n }\n events.exports = EventEmitter;\n events.exports.once = once;\n\n // Backwards-compat with node 0.10.x\n EventEmitter.EventEmitter = EventEmitter;\n EventEmitter.prototype._events = undefined;\n EventEmitter.prototype._eventsCount = 0;\n EventEmitter.prototype._maxListeners = undefined;\n\n // By default EventEmitters will print a warning if more than 10 listeners are\n // added to it. This is a useful default which helps finding memory leaks.\n var defaultMaxListeners = 10;\n function checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n }\n Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function () {\n return defaultMaxListeners;\n },\n set: function (arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n });\n EventEmitter.init = function () {\n if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n this._maxListeners = this._maxListeners || undefined;\n };\n\n // Obviously not all Emitters should be limited to 10. This function allows\n // that to be increased. Set to zero for unlimited.\n EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n };\n function _getMaxListeners(that) {\n if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n }\n EventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n };\n EventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = type === 'error';\n var events = this._events;\n if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0) er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n var handler = events[type];\n if (handler === undefined) return false;\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);\n }\n return true;\n };\n function _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n checkListener(listener);\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type, listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n return target;\n }\n EventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n };\n EventEmitter.prototype.on = EventEmitter.prototype.addListener;\n EventEmitter.prototype.prependListener = function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n function onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0) return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n }\n function _onceWrap(target, type, listener) {\n var state = {\n fired: false,\n wrapFn: undefined,\n target: target,\n type: type,\n listener: listener\n };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n }\n EventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n };\n EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n // Emits a 'removeListener' event if and only if the listener was removed.\n EventEmitter.prototype.removeListener = function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n checkListener(listener);\n events = this._events;\n if (events === undefined) return this;\n list = events[type];\n if (list === undefined) return this;\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else {\n delete events[type];\n if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n if (position < 0) return this;\n if (position === 0) list.shift();else {\n spliceOne(list, position);\n }\n if (list.length === 1) events[type] = list[0];\n if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n }\n return this;\n };\n EventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n var listeners, events, i;\n events = this._events;\n if (events === undefined) return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n listeners = events[type];\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n return this;\n };\n function _listeners(target, type, unwrap) {\n var events = target._events;\n if (events === undefined) return [];\n var evlistener = events[type];\n if (evlistener === undefined) return [];\n if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n }\n EventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n };\n EventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n };\n EventEmitter.listenerCount = function (emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n };\n EventEmitter.prototype.listenerCount = listenerCount;\n function listenerCount(type) {\n var events = this._events;\n if (events !== undefined) {\n var evlistener = events[type];\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n return 0;\n }\n EventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n };\n function arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i) copy[i] = arr[i];\n return copy;\n }\n function spliceOne(list, index) {\n for (; index + 1 < list.length; index++) list[index] = list[index + 1];\n list.pop();\n }\n function unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n }\n function once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n eventTargetAgnosticAddListener(emitter, name, resolver, {\n once: true\n });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, {\n once: true\n });\n }\n });\n }\n function addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n }\n function eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n }\n return events.exports;\n}var eventsExports = requireEvents();\nvar EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventsExports);/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseFloat(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const addEventListener = Object.getOwnPropertyDescriptor(EventTarget.prototype, 'addEventListener');\n if (!addEventListener.writable) {\n log$4('Unable to polyfill events');\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = e => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n };\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n };\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\nfunction log$4() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n const result = {\n browser: null,\n version: null\n };\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent) {\n result.browser = 'Not a browser.';\n return result;\n }\n const navigator = window.navigator;\n\n // Prefer navigator.userAgentData.\n if (navigator.userAgentData && navigator.userAgentData.brands) {\n const chromium = navigator.userAgentData.brands.find(brand => {\n return brand.brand === 'Chromium';\n });\n if (chromium) {\n return {\n browser: 'chrome',\n version: parseInt(chromium.version, 10)\n };\n }\n }\n if (navigator.mozGetUserMedia) {\n // Firefox.\n result.browser = 'firefox';\n result.version = parseInt(extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1));\n } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = parseInt(extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2)) || null;\n } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n // Safari.\n result.browser = 'safari';\n result.version = parseInt(extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1));\n result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n // Only for internal usage.\n result._safariVersion = extractVersion(navigator.userAgent, /Version\\/(\\d+(\\.?\\d+))/, 1);\n } else {\n // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject$1(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject$1(data)) {\n return data;\n }\n return Object.keys(data).reduce(function (accumulator, key) {\n const isObj = isObject$1(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {\n [key]: value\n });\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' && value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\nconst logging = log$4;\nfunction shimGetUserMedia$2(window, browserDetails) {\n const navigator = window && window.navigator;\n if (!navigator.mediaDevices) {\n return;\n }\n const constraintsToChrome_ = function (c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = typeof c[key] === 'object' ? c[key] : {\n ideal: c[key]\n };\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function (prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return name === 'deviceId' ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n const shimConstraints_ = function (constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function (obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && (typeof face === 'object' ? face : {\n ideal: face\n });\n const getSupportedFacingModeLies = browserDetails.version < 66;\n if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match => d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {\n exact: dev.deviceId\n } : {\n ideal: dev.deviceId\n };\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n const shimError_ = function (e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n const getUserMedia_ = function (constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction shimOnTrack$1(window, browserDetails) {\n if (browserDetails.version > 102) {\n // Unified plan is supported so no need to do anything.\n return;\n }\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = e => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers().find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {\n track: te.track\n };\n }\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {\n receiver\n };\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers().find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {\n track\n };\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {\n receiver\n };\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver', {\n value: {\n receiver: e.receiver\n }\n });\n }\n return e;\n });\n }\n}\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function (pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) {\n // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\nfunction shimSenderReceiverGetStats(window, browserDetails) {\n if (browserDetails.version >= 67) {\n return;\n }\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result => filterStats(result, receiver.track, false));\n };\n }\n if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || sender && receiver) {\n return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders().filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n }\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function (method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method]() {\n const args = arguments;\n const isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [description => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n }, err => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]]);\n }\n return nativeMethod.apply(this, arguments).then(description => replaceInternalStreamId(this, description));\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n const origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks().find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\nfunction shimPeerConnection$1(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method]() {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n if (browserDetails.version > 102) {\n // Plan-B is no longer supported.\n return;\n }\n wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}var chromeShim=/*#__PURE__*/Object.freeze({__proto__:null,fixNegotiationNeeded:fixNegotiationNeeded,shimAddTrackRemoveTrack:shimAddTrackRemoveTrack,shimAddTrackRemoveTrackWithNative:shimAddTrackRemoveTrackWithNative,shimGetSendersWithDtmf:shimGetSendersWithDtmf,shimGetUserMedia:shimGetUserMedia$2,shimMediaStream:shimMediaStream,shimOnTrack:shimOnTrack$1,shimPeerConnection:shimPeerConnection$1,shimSenderReceiverGetStats:shimSenderReceiverGetStats});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\nfunction shimGetUserMedia$1(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n navigator.getUserMedia = function (constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function (obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function () {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function (c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {\n mediaSource: preferredMediaSource\n };\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\nfunction shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {\n [method]() {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\nfunction shimGetStats(window, browserDetails) {\n if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (browserDetails.version >= 151) {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1056433\n return;\n }\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const _arguments = Array.prototype.slice.call(arguments),\n selector = _arguments[0],\n onSucc = _arguments[1],\n onErr = _arguments[2];\n if (this.signalingState === 'closed') {\n // No longer required in FF151+\n return Promise.resolve(new Map());\n }\n return nativeGetStats.apply(this, [selector || null]).then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\nfunction shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\nfunction shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach(encodingParam => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const sender = transceiver.sender;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n }\n}\nfunction shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters = function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(() => {\n return origCreateOffer.apply(this, arguments);\n }).finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(() => {\n return origCreateAnswer.apply(this, arguments);\n }).finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}var firefoxShim=/*#__PURE__*/Object.freeze({__proto__:null,shimAddTransceiver:shimAddTransceiver,shimCreateAnswer:shimCreateAnswer,shimCreateOffer:shimCreateOffer,shimGetDisplayMedia:shimGetDisplayMedia,shimGetParameters:shimGetParameters,shimGetStats:shimGetStats,shimGetUserMedia:shimGetUserMedia$1,shimOnTrack:shimOnTrack,shimPeerConnection:shimPeerConnection,shimRTCDataChannel:shimRTCDataChannel,shimReceiverGetStats:shimReceiverGetStats,shimRemoveStream:shimRemoveStream,shimSenderGetStats:shimSenderGetStats});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track, stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track, stream));\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n streams[_key - 1] = arguments[_key];\n }\n if (streams) {\n streams.forEach(stream => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\nfunction shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = e => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\nfunction shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n let withCallback = function (description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n withCallback = function (description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n withCallback = function (candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\nfunction shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = constraints => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }.bind(navigator);\n }\n}\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({}, constraints, {\n video: compactObject(constraints.video)\n });\n }\n return constraints;\n}\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n this.addTransceiver('audio', {\n direction: 'recvonly'\n });\n }\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n this.addTransceiver('video', {\n direction: 'recvonly'\n });\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}var safariShim=/*#__PURE__*/Object.freeze({__proto__:null,shimAudioContext:shimAudioContext,shimCallbacksAPI:shimCallbacksAPI,shimConstraints:shimConstraints,shimCreateOfferLegacy:shimCreateOfferLegacy,shimGetUserMedia:shimGetUserMedia,shimLocalStreamsAPI:shimLocalStreamsAPI,shimRTCIceServerUrls:shimRTCIceServerUrls,shimRemoteStreamsAPI:shimRemoteStreamsAPI,shimTrackEventTransceiver:shimTrackEventTransceiver});var sdp$1 = {exports: {}};/* eslint-env node */\nvar hasRequiredSdp;\nfunction requireSdp() {\n if (hasRequiredSdp) return sdp$1.exports;\n hasRequiredSdp = 1;\n (function (module) {\n\n // SDP helpers.\n const SDPUtils = {};\n\n // Generate an alphanumeric identifier for cname or mids.\n // TODO: use UUIDs instead? https://gist.github.com/jed/982883\n SDPUtils.generateIdentifier = function () {\n return Math.random().toString(36).substring(2, 12);\n };\n\n // The RTCP CNAME used by all peerconnections from the same JS.\n SDPUtils.localCName = SDPUtils.generateIdentifier();\n\n // Splits SDP into lines, dealing with both CRLF and LF.\n SDPUtils.splitLines = function (blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n };\n // Splits SDP into sessionpart and mediasections. Ensures CRLF.\n SDPUtils.splitSections = function (blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\\r\\n');\n };\n\n // Returns the session description.\n SDPUtils.getDescription = function (blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n };\n\n // Returns the individual media sections.\n SDPUtils.getMediaSections = function (blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n };\n\n // Returns lines that start with a certain prefix.\n SDPUtils.matchPrefix = function (blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n };\n\n // Parses an ICE candidate line. Sample input:\n // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n // rport 55996\"\n // Input can be prefixed with a=.\n SDPUtils.parseCandidate = function (line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n const candidate = {\n foundation: parts[0],\n component: {\n 1: 'rtp',\n 2: 'rtcp'\n }[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4],\n // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n };\n\n // Translates a candidate object into SDP candidate attribute.\n // This does not include the a= prefix!\n SDPUtils.writeCandidate = function (candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort !== undefined) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n };\n\n // Parses an ice-options line, returns an array of option tags.\n // Sample input:\n // a=ice-options:foo bar\n SDPUtils.parseIceOptions = function (line) {\n return line.substring(14).split(' ');\n };\n\n // Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n // a=rtpmap:111 opus/48000/2\n SDPUtils.parseRtpMap = function (line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n parts = parts[0].split('/');\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n };\n\n // Generates a rtpmap line from RTCRtpCodecCapability or\n // RTCRtpCodecParameters.\n SDPUtils.writeRtpMap = function (codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n };\n\n // Parses a extmap line (headerextension from RFC 5285). Sample input:\n // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n SDPUtils.parseExtmap = function (line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' ')\n };\n };\n\n // Generates an extmap line from RTCRtpHeaderExtensionParameters or\n // RTCRtpHeaderExtension.\n SDPUtils.writeExtmap = function (headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\\r\\n';\n };\n\n // Parses a fmtp line, returns dictionary. Sample input:\n // a=fmtp:96 vbr=on;cng=on\n // Also deals with vbr=on; cng=on\n // Non-key-value such as telephone-events `0-15` get parsed as\n // {`0-15`:undefined}\n SDPUtils.parseFmtp = function (line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n };\n\n // Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n SDPUtils.writeFmtp = function (codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n };\n\n // Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n // a=rtcp-fb:98 nack rpsi\n SDPUtils.parseRtcpFb = function (line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n };\n\n // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n SDPUtils.writeRtcpFb = function (codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n });\n }\n return lines;\n };\n\n // Parses a RFC 5576 ssrc media attribute. Sample input:\n // a=ssrc:3735928559 cname:something\n SDPUtils.parseSsrcMedia = function (line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10)\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n };\n\n // Parse a ssrc-group line (see RFC 5576). Sample input:\n // a=ssrc-group:semantics 12 34\n SDPUtils.parseSsrcGroup = function (line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10))\n };\n };\n\n // Extracts the MID (RFC 5888) from a media section.\n // Returns the MID or undefined if no mid line was found.\n SDPUtils.getMid = function (mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n };\n\n // Parses a fingerprint line for DTLS-SRTP.\n SDPUtils.parseFingerprint = function (line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(),\n // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.\n };\n };\n\n // Extracts DTLS parameters from SDP media section or sessionpart.\n // FIXME: for consistency with other functions this should only\n // get the fingerprint line as input. See also getIceParameters.\n SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n };\n\n // Serializes DTLS parameters to SDP.\n SDPUtils.writeDtlsParameters = function (params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n };\n\n // Parses a=crypto lines into\n // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\n SDPUtils.parseCryptoLine = function (line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n };\n SDPUtils.writeCryptoLine = function (parameters) {\n return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n };\n\n // Parses the crypto key parameters into\n // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\n SDPUtils.parseCryptoKeyParams = function (keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n };\n };\n SDPUtils.writeCryptoKeyParams = function (keyParams) {\n return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n };\n\n // Extracts all SDES parameters.\n SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n };\n\n // Parses ICE information from SDP media section or sessionpart.\n // FIXME: for consistency with other functions this should only\n // get the ice-ufrag and ice-pwd lines as input.\n SDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10)\n };\n };\n\n // Serializes ICE parameters to SDP.\n SDPUtils.writeIceParameters = function (params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n };\n\n // Parses the SDP media section and returns RTCRtpParameters.\n SDPUtils.parseRtpParameters = function (mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n description.profile = mline[2];\n for (let i = 3; i < mline.length; i++) {\n // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb => {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n };\n\n // Generates parts of the SDP media section describing the capabilities /\n // parameters.\n SDPUtils.writeRtpDescription = function (kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n };\n\n // Parses the SDP media section and returns an array of\n // RTCRtpEncodingParameters.\n SDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {\n ssrc: secondarySsrc\n };\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n };\n\n // parses http://draft.ortc.org/#rtcrtcpparameters*\n SDPUtils.parseRtcpParameters = function (mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n return rtcpParameters;\n };\n SDPUtils.writeRtcpParameters = function (rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n };\n\n // parses either a=msid: or a=ssrc:... msid lines and returns\n // the id of the MediaStream and MediaStreamTrack.\n SDPUtils.parseMsid = function (mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n };\n\n // SCTP\n // parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n // to draft-ietf-mmusic-sctp-sdp-05\n SDPUtils.parseSctpDescription = function (mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0].substring(10).split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize\n };\n }\n };\n\n // SCTP\n // outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n // support by now receiving in this format, unless we originally parsed\n // as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n // protocol of DTLS/SCTP -- without UDP/ or TCP/)\n SDPUtils.writeSctpDescription = function (media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n } else {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n };\n\n // Generate a session ID for SDP.\n // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n // recommends using a cryptographically random +ve 64-bit value\n // but right now this should be acceptable and within the right range\n SDPUtils.generateSessionId = function () {\n return Math.random().toString().substr(2, 22);\n };\n\n // Write boiler plate for start of SDP\n // sessId argument is optional - if not supplied it will\n // be generated randomly\n // sessVersion is optional and defaults to 2\n // sessUser is optional and defaults to 'thisisadapterortc'\n SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n };\n\n // Gets the direction from the mediaSection or the sessionpart.\n SDPUtils.getDirection = function (mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n };\n SDPUtils.getKind = function (mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n };\n SDPUtils.isRejected = function (mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n };\n SDPUtils.parseMLine = function (mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n };\n SDPUtils.parseOLine = function (mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n };\n\n // a very naive interpretation of a valid SDP.\n SDPUtils.isValidSDP = function (blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n };\n\n // Expose public methods.\n {\n module.exports = SDPUtils;\n }\n })(sdp$1);\n return sdp$1.exports;\n}var sdpExports = requireSdp();\nvar SDPUtils = /*@__PURE__*/getDefaultExportFromCjs(sdpExports);var sdp=/*#__PURE__*/_mergeNamespaces({__proto__:null,default:SDPUtils},[sdpExports]);/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n return;\n }\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n for (const key in parsedCandidate) {\n if (!(key in nativeCandidate)) {\n Object.defineProperty(nativeCandidate, key, {\n value: parsedCandidate[key]\n });\n }\n }\n\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\nfunction shimRTCIceCandidateRelayProtocol(window) {\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) {\n return;\n }\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === 'relay') {\n // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = {\n 0: 'tls',\n 1: 'tcp',\n 2: 'udp'\n }[parsedCandidate.priority >> 24];\n }\n }\n return e;\n });\n}\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n const sctpInDescription = function (description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n const getRemoteFirefoxVersion = function (description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n const getCanSendMaxMessageSize = function (remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n const getMaxMessageSize = function (description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n const match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substring(19), 10);\n } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const _this$getConfiguratio = this.getConfiguration(),\n sdpSemantics = _this$getConfiguratio.sdpSemantics;\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true\n });\n }\n }\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\nfunction shimSendThrowTypeError(window, browserDetails) {\n if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version > 149) {\n // Fixed by https://issues.chromium.org/issues/490588131\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n if (browserDetails.browser === 'firefox' && browserDetails.version > 60) {\n return;\n }\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n ['setLocalDescription', 'setRemoteDescription'].forEach(method => {\n const origMethod = proto[method];\n proto[method] = function () {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails._safariVersion >= 13.1) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter(line => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || desc.type && desc.sdp) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {\n type: desc.type,\n sdp: desc.sdp\n };\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this).then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}var commonShim=/*#__PURE__*/Object.freeze({__proto__:null,removeExtmapAllowMixed:removeExtmapAllowMixed,shimAddIceCandidateNullOrEmpty:shimAddIceCandidateNullOrEmpty,shimConnectionState:shimConnectionState,shimMaxMessageSize:shimMaxMessageSize,shimParameterlessSetLocalDescription:shimParameterlessSetLocalDescription,shimRTCIceCandidate:shimRTCIceCandidate,shimRTCIceCandidateRelayProtocol:shimRTCIceCandidateRelayProtocol,shimSendThrowTypeError:shimSendThrowTypeError});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n// Shimming starts here.\nfunction adapterFactory() {\n let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n window = _ref.window;\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n };\n // Utils.\n const logging = log$4;\n const browserDetails = detectBrowser(window);\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: extractVersion,\n disableLog: disableLog,\n disableWarnings: disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !shimPeerConnection$1 || !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimGetUserMedia$2(window, browserDetails);\n shimMediaStream(window);\n shimPeerConnection$1(window, browserDetails);\n shimOnTrack$1(window, browserDetails);\n shimAddTrackRemoveTrack(window, browserDetails);\n shimGetSendersWithDtmf(window);\n shimSenderReceiverGetStats(window, browserDetails);\n fixNegotiationNeeded(window, browserDetails);\n shimRTCIceCandidate(window);\n shimRTCIceCandidateRelayProtocol(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window, browserDetails);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !shimPeerConnection || !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimGetUserMedia$1(window, browserDetails);\n shimPeerConnection(window, browserDetails);\n shimGetStats(window, browserDetails);\n shimOnTrack(window);\n shimRemoveStream(window);\n shimSenderGetStats(window);\n shimReceiverGetStats(window);\n shimRTCDataChannel(window);\n shimAddTransceiver(window);\n shimGetParameters(window);\n shimCreateOffer(window);\n shimCreateAnswer(window);\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimRTCIceServerUrls(window);\n shimCreateOfferLegacy(window);\n shimCallbacksAPI(window);\n shimLocalStreamsAPI(window);\n shimRemoteStreamsAPI(window);\n shimTrackEventTransceiver(window);\n shimGetUserMedia(window);\n shimAudioContext(window);\n shimRTCIceCandidate(window);\n shimRTCIceCandidateRelayProtocol(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window, browserDetails);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n return adapter;\n}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\nadapterFactory({\n window: typeof window === 'undefined' ? undefined : window\n});var _a, _b;\nclass TypedPromise extends (_b = Promise) {\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(executor) {\n super(executor);\n }\n catch(onrejected) {\n return super.catch(onrejected);\n }\n static reject(reason) {\n return super.reject(reason);\n }\n static all(values) {\n return super.all(values);\n }\n static race(values) {\n return super.race(values);\n }\n}\n_a = TypedPromise;\nTypedPromise.resolve = value => {\n return Reflect.get(_b, \"resolve\", _a).call(_a, value);\n};// tiny, simplified version of https://github.com/lancedikson/bowser/blob/master/src/parser-browsers.js\n// reduced to only differentiate Chrome(ium) based browsers / Firefox / Safari\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\nlet browserDetails;\n/**\n * @internal\n */\nfunction getBrowser(userAgent) {\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (typeof userAgent === 'undefined' && typeof navigator === 'undefined') {\n return;\n }\n const ua = (userAgent !== null && userAgent !== void 0 ? userAgent : navigator.userAgent).toLowerCase();\n if (browserDetails === undefined || force) {\n const browser = browsersList.find(_ref => {\n let test = _ref.test;\n return test.test(ua);\n });\n browserDetails = browser === null || browser === void 0 ? void 0 : browser.describe(ua);\n }\n return browserDetails;\n}\nconst browsersList = [{\n test: /firefox|iceweasel|fxios/i,\n describe(ua) {\n const browser = {\n name: 'Firefox',\n version: getMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua),\n os: ua.toLowerCase().includes('fxios') ? 'iOS' : undefined,\n osVersion: getOSVersion(ua)\n };\n return browser;\n }\n}, {\n test: /chrom|crios|crmo/i,\n describe(ua) {\n const browser = {\n name: 'Chrome',\n version: getMatch(/(?:chrome|chromium|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua),\n os: ua.toLowerCase().includes('crios') ? 'iOS' : undefined,\n osVersion: getOSVersion(ua)\n };\n return browser;\n }\n}, /* Safari */\n{\n test: /safari|applewebkit/i,\n describe(ua) {\n const browser = {\n name: 'Safari',\n version: getMatch(commonVersionIdentifier, ua),\n os: ua.includes('mobile/') ? 'iOS' : 'macOS',\n osVersion: getOSVersion(ua)\n };\n return browser;\n }\n}];\nfunction getMatch(exp, ua) {\n let id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n const match = ua.match(exp);\n return match && match.length >= id && match[id] || '';\n}\nfunction getOSVersion(ua) {\n return ua.includes('mac os') ? getMatch(/\\(.+?(\\d+_\\d+(:?_\\d+)?)/, ua, 1).replace(/_/g, '.') : undefined;\n}var version$1 = \"2.19.2\";const version = version$1;\nconst protocolVersion = 17;\n/** Initial client protocol. */\nconst CLIENT_PROTOCOL_DEFAULT = 0;\n/** Replaces RPC v1 protocol with a v2 data streams based one to support unlimited request /\n * response payload length. */\nconst CLIENT_PROTOCOL_DATA_STREAM_RPC = 1;\n/** The client protocol version indicates what level of support that the client has for\n * client <-> client api interactions. */\nconst clientProtocol = CLIENT_PROTOCOL_DATA_STREAM_RPC;/** Base error that all LiveKit specific custom errors inherit from. */\nclass LivekitError extends Error {\n constructor(code, message, options) {\n super(message || 'an error has occurred');\n this.name = 'LiveKitError';\n this.code = code;\n if (typeof (options === null || options === void 0 ? void 0 : options.cause) !== 'undefined') {\n this.cause = options === null || options === void 0 ? void 0 : options.cause;\n }\n }\n}\n/**\n * LiveKit specific error type representing an error with an associated set of reasons.\n * Use this to represent an error with multiple different but contextually related variants.\n * */\nclass LivekitReasonedError extends LivekitError {}\nclass SimulatedError extends LivekitError {\n constructor() {\n let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Simulated failure';\n super(-1, message);\n this.name = 'simulated';\n }\n}\nvar ConnectionErrorReason;\n(function (ConnectionErrorReason) {\n ConnectionErrorReason[ConnectionErrorReason[\"NotAllowed\"] = 0] = \"NotAllowed\";\n ConnectionErrorReason[ConnectionErrorReason[\"ServerUnreachable\"] = 1] = \"ServerUnreachable\";\n ConnectionErrorReason[ConnectionErrorReason[\"InternalError\"] = 2] = \"InternalError\";\n ConnectionErrorReason[ConnectionErrorReason[\"Cancelled\"] = 3] = \"Cancelled\";\n ConnectionErrorReason[ConnectionErrorReason[\"LeaveRequest\"] = 4] = \"LeaveRequest\";\n ConnectionErrorReason[ConnectionErrorReason[\"Timeout\"] = 5] = \"Timeout\";\n ConnectionErrorReason[ConnectionErrorReason[\"WebSocket\"] = 6] = \"WebSocket\";\n ConnectionErrorReason[ConnectionErrorReason[\"ServiceNotFound\"] = 7] = \"ServiceNotFound\";\n})(ConnectionErrorReason || (ConnectionErrorReason = {}));\nclass ConnectionError extends LivekitReasonedError {\n constructor(message, reason, status, context) {\n super(1, message);\n this.name = 'ConnectionError';\n this.status = status;\n this.reason = reason;\n this.context = context;\n this.reasonName = ConnectionErrorReason[reason];\n }\n static notAllowed(message, status, context) {\n return new ConnectionError(message, ConnectionErrorReason.NotAllowed, status, context);\n }\n static timeout(message) {\n return new ConnectionError(message, ConnectionErrorReason.Timeout);\n }\n static leaveRequest(message, context) {\n return new ConnectionError(message, ConnectionErrorReason.LeaveRequest, undefined, context);\n }\n static internal(message, context) {\n return new ConnectionError(message, ConnectionErrorReason.InternalError, undefined, context);\n }\n static cancelled(message) {\n return new ConnectionError(message, ConnectionErrorReason.Cancelled);\n }\n static serverUnreachable(message, status) {\n return new ConnectionError(message, ConnectionErrorReason.ServerUnreachable, status);\n }\n static websocket(message, status, reason) {\n return new ConnectionError(message, ConnectionErrorReason.WebSocket, status, reason);\n }\n static serviceNotFound(message, serviceName) {\n return new ConnectionError(message, ConnectionErrorReason.ServiceNotFound, undefined, serviceName);\n }\n}\nclass DeviceUnsupportedError extends LivekitError {\n constructor(message) {\n super(21, message !== null && message !== void 0 ? message : 'device is unsupported');\n this.name = 'DeviceUnsupportedError';\n }\n}\nclass TrackInvalidError extends LivekitError {\n constructor(message) {\n super(20, message !== null && message !== void 0 ? message : 'track is invalid');\n this.name = 'TrackInvalidError';\n }\n}\nclass UnsupportedServer extends LivekitError {\n constructor(message) {\n super(10, message !== null && message !== void 0 ? message : 'unsupported server');\n this.name = 'UnsupportedServer';\n }\n}\nclass UnexpectedConnectionState extends LivekitError {\n constructor(message) {\n super(12, message !== null && message !== void 0 ? message : 'unexpected connection state');\n this.name = 'UnexpectedConnectionState';\n }\n}\nclass NegotiationError extends LivekitError {\n constructor(message) {\n super(13, message !== null && message !== void 0 ? message : 'unable to negotiate');\n this.name = 'NegotiationError';\n }\n}\nclass PublishDataError extends LivekitError {\n constructor(message) {\n super(14, message !== null && message !== void 0 ? message : 'unable to publish data');\n this.name = 'PublishDataError';\n }\n}\nclass PublishTrackError extends LivekitError {\n constructor(message, status) {\n super(15, message);\n this.name = 'PublishTrackError';\n this.status = status;\n }\n}\nclass SignalRequestError extends LivekitReasonedError {\n constructor(message, reason) {\n super(15, message);\n this.name = 'SignalRequestError';\n this.reason = reason;\n this.reasonName = typeof reason === 'string' ? reason : RequestResponse_Reason[reason];\n }\n}\n// NOTE: matches with https://github.com/livekit/client-sdk-swift/blob/f37bbd260d61e165084962db822c79f995f1a113/Sources/LiveKit/DataStream/StreamError.swift#L17\nvar DataStreamErrorReason;\n(function (DataStreamErrorReason) {\n // Unable to open a stream with the same ID more than once.\n DataStreamErrorReason[DataStreamErrorReason[\"AlreadyOpened\"] = 0] = \"AlreadyOpened\";\n // Stream closed abnormally by remote participant.\n DataStreamErrorReason[DataStreamErrorReason[\"AbnormalEnd\"] = 1] = \"AbnormalEnd\";\n // Incoming chunk data could not be decoded.\n DataStreamErrorReason[DataStreamErrorReason[\"DecodeFailed\"] = 2] = \"DecodeFailed\";\n // Read length exceeded total length specified in stream header.\n DataStreamErrorReason[DataStreamErrorReason[\"LengthExceeded\"] = 3] = \"LengthExceeded\";\n // Read length less than total length specified in stream header.\n DataStreamErrorReason[DataStreamErrorReason[\"Incomplete\"] = 4] = \"Incomplete\";\n // Unable to register a stream handler more than once.\n DataStreamErrorReason[DataStreamErrorReason[\"HandlerAlreadyRegistered\"] = 7] = \"HandlerAlreadyRegistered\";\n // Encryption type mismatch.\n DataStreamErrorReason[DataStreamErrorReason[\"EncryptionTypeMismatch\"] = 8] = \"EncryptionTypeMismatch\";\n})(DataStreamErrorReason || (DataStreamErrorReason = {}));\nclass DataStreamError extends LivekitReasonedError {\n constructor(message, reason) {\n super(16, message);\n this.name = 'DataStreamError';\n this.reason = reason;\n this.reasonName = DataStreamErrorReason[reason];\n }\n}\nclass SignalReconnectError extends LivekitError {\n constructor(message) {\n super(18, message);\n this.name = 'SignalReconnectError';\n }\n}\nvar MediaDeviceFailure;\n(function (MediaDeviceFailure) {\n // user rejected permissions\n MediaDeviceFailure[\"PermissionDenied\"] = \"PermissionDenied\";\n // device is not available\n MediaDeviceFailure[\"NotFound\"] = \"NotFound\";\n // device is in use. On Windows, only a single tab may get access to a device at a time.\n MediaDeviceFailure[\"DeviceInUse\"] = \"DeviceInUse\";\n MediaDeviceFailure[\"Other\"] = \"Other\";\n})(MediaDeviceFailure || (MediaDeviceFailure = {}));\n(function (MediaDeviceFailure) {\n function getFailure(error) {\n if (error && 'name' in error) {\n if (error.name === 'NotFoundError' || error.name === 'DevicesNotFoundError') {\n return MediaDeviceFailure.NotFound;\n }\n if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {\n return MediaDeviceFailure.PermissionDenied;\n }\n if (error.name === 'NotReadableError' || error.name === 'TrackStartError') {\n return MediaDeviceFailure.DeviceInUse;\n }\n return MediaDeviceFailure.Other;\n }\n }\n MediaDeviceFailure.getFailure = getFailure;\n})(MediaDeviceFailure || (MediaDeviceFailure = {}));/**\n * Timers that can be overridden with platform specific implementations\n * that ensure that they are fired. These should be used when it is critical\n * that the timer fires on time.\n */\nclass CriticalTimers {}\nCriticalTimers.setTimeout = function () {\n return setTimeout(...arguments);\n};\nCriticalTimers.setInterval =\n// eslint-disable-next-line @typescript-eslint/no-implied-eval\nfunction () {\n return setInterval(...arguments);\n};\nCriticalTimers.clearTimeout = function () {\n return clearTimeout(...arguments);\n};\nCriticalTimers.clearInterval = function () {\n return clearInterval(...arguments);\n};/**\n * Events are the primary way LiveKit notifies your application of changes.\n *\n * The following are events emitted by [[Room]], listen to room events like\n *\n * ```typescript\n * room.on(RoomEvent.TrackPublished, (track, publication, participant) => {})\n * ```\n */\nvar RoomEvent;\n(function (RoomEvent) {\n /**\n * When the connection to the server has been established\n */\n RoomEvent[\"Connected\"] = \"connected\";\n /**\n * When the connection to the server has been interrupted and it's attempting\n * to reconnect.\n */\n RoomEvent[\"Reconnecting\"] = \"reconnecting\";\n /**\n * When the signal connection to the server has been interrupted. This isn't noticeable to users most of the time.\n * It will resolve with a `RoomEvent.Reconnected` once the signal connection has been re-established.\n * If media fails additionally it an additional `RoomEvent.Reconnecting` will be emitted.\n */\n RoomEvent[\"SignalReconnecting\"] = \"signalReconnecting\";\n /**\n * Fires when a reconnection has been successful.\n */\n RoomEvent[\"Reconnected\"] = \"reconnected\";\n /**\n * When disconnected from room. This fires when room.disconnect() is called or\n * when an unrecoverable connection issue had occurred.\n *\n * DisconnectReason can be used to determine why the participant was disconnected. Notable reasons are\n * - DUPLICATE_IDENTITY: another client with the same identity has joined the room\n * - PARTICIPANT_REMOVED: participant was removed by RemoveParticipant API\n * - ROOM_DELETED: the room has ended via DeleteRoom API\n *\n * args: ([[DisconnectReason]])\n */\n RoomEvent[\"Disconnected\"] = \"disconnected\";\n /**\n * Whenever the connection state of the room changes\n *\n * args: ([[ConnectionState]])\n */\n RoomEvent[\"ConnectionStateChanged\"] = \"connectionStateChanged\";\n /**\n * When participant has been moved to a different room by the service request.\n * The behavior looks like the participant has been disconnected and reconnected to a different room\n * seamlessly without connection state transition.\n * A new token will be provided for reconnecting to the new room if needed.\n *\n * args: ([[room: string, token: string]])\n */\n RoomEvent[\"Moved\"] = \"moved\";\n /**\n * When input or output devices on the machine have changed.\n */\n RoomEvent[\"MediaDevicesChanged\"] = \"mediaDevicesChanged\";\n /**\n * When a [[RemoteParticipant]] joins *after* the local\n * participant. It will not emit events for participants that are already\n * in the room\n *\n * args: ([[RemoteParticipant]])\n */\n RoomEvent[\"ParticipantConnected\"] = \"participantConnected\";\n /**\n * When a [[RemoteParticipant]] leaves *after* the local\n * participant has joined.\n *\n * args: ([[RemoteParticipant]])\n */\n RoomEvent[\"ParticipantDisconnected\"] = \"participantDisconnected\";\n /**\n * When a new track is published to room *after* the local\n * participant has joined. It will not fire for tracks that are already published.\n *\n * A track published doesn't mean the participant has subscribed to it. It's\n * simply reflecting the state of the room.\n *\n * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n RoomEvent[\"TrackPublished\"] = \"trackPublished\";\n /**\n * The [[LocalParticipant]] has subscribed to a new track. This event will **always**\n * fire as long as new tracks are ready for use.\n *\n * args: ([[RemoteTrack]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n RoomEvent[\"TrackSubscribed\"] = \"trackSubscribed\";\n /**\n * Could not subscribe to a track\n *\n * args: (track sid, [[RemoteParticipant]])\n */\n RoomEvent[\"TrackSubscriptionFailed\"] = \"trackSubscriptionFailed\";\n /**\n * A [[RemoteParticipant]] has unpublished a track\n *\n * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n RoomEvent[\"TrackUnpublished\"] = \"trackUnpublished\";\n /**\n * A subscribed track is no longer available. Clients should listen to this\n * event and ensure they detach tracks.\n *\n * args: ([[Track]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n RoomEvent[\"TrackUnsubscribed\"] = \"trackUnsubscribed\";\n /**\n * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]], [[Participant]])\n */\n RoomEvent[\"TrackMuted\"] = \"trackMuted\";\n /**\n * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]], [[Participant]])\n */\n RoomEvent[\"TrackUnmuted\"] = \"trackUnmuted\";\n /**\n * A local track was published successfully. This event is helpful to know\n * when to update your local UI with the newly published track.\n *\n * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n */\n RoomEvent[\"LocalTrackPublished\"] = \"localTrackPublished\";\n /**\n * A local track was unpublished. This event is helpful to know when to remove\n * the local track from your UI.\n *\n * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n * this event will also fire.\n *\n * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n */\n RoomEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n /**\n * When a local audio track is published the SDK checks whether there is complete silence\n * on that track and emits the LocalAudioSilenceDetected event in that case.\n * This allows for applications to show UI informing users that they might have to\n * reset their audio hardware or check for proper device connectivity.\n */\n RoomEvent[\"LocalAudioSilenceDetected\"] = \"localAudioSilenceDetected\";\n /**\n * Active speakers changed. List of speakers are ordered by their audio level.\n * loudest speakers first. This will include the LocalParticipant too.\n *\n * Speaker updates are sent only to the publishing participant and their subscribers.\n *\n * args: (Array<[[Participant]]>)\n */\n RoomEvent[\"ActiveSpeakersChanged\"] = \"activeSpeakersChanged\";\n /**\n * Participant metadata is a simple way for app-specific state to be pushed to\n * all users.\n * When RoomService.UpdateParticipantMetadata is called to change a participant's\n * state, *all* participants in the room will fire this event.\n *\n * args: (prevMetadata: string, [[Participant]])\n *\n */\n RoomEvent[\"ParticipantMetadataChanged\"] = \"participantMetadataChanged\";\n /**\n * Participant's display name changed\n *\n * args: (name: string, [[Participant]])\n *\n */\n RoomEvent[\"ParticipantNameChanged\"] = \"participantNameChanged\";\n /**\n * Participant attributes is an app-specific key value state to be pushed to\n * all users.\n * When a participant's attributes changed, this event will be emitted with the changed attributes and the participant\n * args: (changedAttributes: [[Record<string, string]], participant: [[Participant]])\n */\n RoomEvent[\"ParticipantAttributesChanged\"] = \"participantAttributesChanged\";\n /**\n * Emitted when the participant's state changes to ACTIVE and is ready to send/receive data messages\n *\n * args: (participant: [[Participant]])\n */\n RoomEvent[\"ParticipantActive\"] = \"participantActive\";\n /**\n * Room metadata is a simple way for app-specific state to be pushed to\n * all users.\n * When RoomService.UpdateRoomMetadata is called to change a room's state,\n * *all* participants in the room will fire this event.\n *\n * args: (string)\n */\n RoomEvent[\"RoomMetadataChanged\"] = \"roomMetadataChanged\";\n /**\n * Data received from another participant.\n * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n * All participants in the room will receive the messages sent to the room.\n *\n * args: (payload: NonSharedUint8Array, participant: [[Participant]], kind: [[DataPacket_Kind]], topic?: string)\n */\n RoomEvent[\"DataReceived\"] = \"dataReceived\";\n /**\n * SIP DTMF tones received from another participant.\n *\n * args: (participant: [[Participant]], dtmf: [[DataPacket_Kind]])\n */\n RoomEvent[\"SipDTMFReceived\"] = \"sipDTMFReceived\";\n /**\n * Transcription received from a participant's track.\n * @beta\n */\n RoomEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n /**\n * Connection quality was changed for a Participant. It'll receive updates\n * from the local participant, as well as any [[RemoteParticipant]]s that we are\n * subscribed to.\n *\n * args: (connectionQuality: [[ConnectionQuality]], participant: [[Participant]])\n */\n RoomEvent[\"ConnectionQualityChanged\"] = \"connectionQualityChanged\";\n /**\n * StreamState indicates if a subscribed (remote) track has been paused by the SFU\n * (typically this happens because of subscriber's bandwidth constraints)\n *\n * When bandwidth conditions allow, the track will be resumed automatically.\n * TrackStreamStateChanged will also be emitted when that happens.\n *\n * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]],\n * participant: [[RemoteParticipant]])\n */\n RoomEvent[\"TrackStreamStateChanged\"] = \"trackStreamStateChanged\";\n /**\n * One of subscribed tracks have changed its permissions for the current\n * participant. If permission was revoked, then the track will no longer\n * be subscribed. If permission was granted, a TrackSubscribed event will\n * be emitted.\n *\n * args: (pub: [[RemoteTrackPublication]],\n * status: [[TrackPublication.PermissionStatus]],\n * participant: [[RemoteParticipant]])\n */\n RoomEvent[\"TrackSubscriptionPermissionChanged\"] = \"trackSubscriptionPermissionChanged\";\n /**\n * One of subscribed tracks have changed its status for the current\n * participant.\n *\n * args: (pub: [[RemoteTrackPublication]],\n * status: [[TrackPublication.SubscriptionStatus]],\n * participant: [[RemoteParticipant]])\n */\n RoomEvent[\"TrackSubscriptionStatusChanged\"] = \"trackSubscriptionStatusChanged\";\n /**\n * LiveKit will attempt to autoplay all audio tracks when you attach them to\n * audio elements. However, if that fails, we'll notify you via AudioPlaybackStatusChanged.\n * `Room.canPlaybackAudio` will indicate if audio playback is permitted.\n */\n RoomEvent[\"AudioPlaybackStatusChanged\"] = \"audioPlaybackChanged\";\n /**\n * LiveKit will attempt to autoplay all video tracks when you attach them to\n * a video element. However, if that fails, we'll notify you via VideoPlaybackStatusChanged.\n * Calling `room.startVideo()` in a user gesture event handler will resume the video playback.\n */\n RoomEvent[\"VideoPlaybackStatusChanged\"] = \"videoPlaybackChanged\";\n /**\n * When we have encountered an error while attempting to create a track.\n * The errors take place in getUserMedia().\n * Use MediaDeviceFailure.getFailure(error) to get the reason of failure.\n * [[LocalParticipant.lastCameraError]] and [[LocalParticipant.lastMicrophoneError]]\n * will indicate if it had an error while creating the audio or video track respectively.\n *\n * args: (error: Error)\n */\n RoomEvent[\"MediaDevicesError\"] = \"mediaDevicesError\";\n /**\n * A participant's permission has changed.\n * args: (prevPermissions: [[ParticipantPermission]], participant: [[Participant]])\n */\n RoomEvent[\"ParticipantPermissionsChanged\"] = \"participantPermissionsChanged\";\n /**\n * Signal connected, can publish tracks.\n */\n RoomEvent[\"SignalConnected\"] = \"signalConnected\";\n /**\n * Recording of a room has started/stopped. Room.isRecording will be updated too.\n * args: (isRecording: boolean)\n */\n RoomEvent[\"RecordingStatusChanged\"] = \"recordingStatusChanged\";\n RoomEvent[\"ParticipantEncryptionStatusChanged\"] = \"participantEncryptionStatusChanged\";\n RoomEvent[\"EncryptionError\"] = \"encryptionError\";\n /**\n * Emits whenever the current buffer status of a data channel changes\n * args: (isLow: boolean, kind: [[DataChannelKind]])\n */\n RoomEvent[\"DCBufferStatusChanged\"] = \"dcBufferStatusChanged\";\n /**\n * Triggered by a call to room.switchActiveDevice\n * args: (kind: MediaDeviceKind, deviceId: string)\n */\n RoomEvent[\"ActiveDeviceChanged\"] = \"activeDeviceChanged\";\n RoomEvent[\"ChatMessage\"] = \"chatMessage\";\n /**\n * fired when the first remote participant has subscribed to the localParticipant's track\n */\n RoomEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n /**\n * fired when the client receives connection metrics from other participants\n */\n RoomEvent[\"MetricsReceived\"] = \"metricsReceived\";\n /**\n * Emits when a new data track has been published by a downstream participant.\n */\n RoomEvent[\"DataTrackPublished\"] = \"dataTrackPublished\";\n /**\n * Emits when a new data track has been unpublished by a downstream participant.\n */\n RoomEvent[\"DataTrackUnpublished\"] = \"dataTrackUnpublished\";\n /**\n * Emits when a new data track has been published locally.\n */\n RoomEvent[\"LocalDataTrackPublished\"] = \"localDataTrackPublished\";\n /**\n * Emits when a new data track has been unpublished locally.\n */\n RoomEvent[\"LocalDataTrackUnpublished\"] = \"localDataTrackUnpublished\";\n})(RoomEvent || (RoomEvent = {}));\nvar ParticipantEvent;\n(function (ParticipantEvent) {\n /**\n * When a new track is published to room *after* the local\n * participant has joined. It will not fire for tracks that are already published.\n *\n * A track published doesn't mean the participant has subscribed to it. It's\n * simply reflecting the state of the room.\n *\n * args: ([[RemoteTrackPublication]])\n */\n ParticipantEvent[\"TrackPublished\"] = \"trackPublished\";\n /**\n * Successfully subscribed to the [[RemoteParticipant]]'s track.\n * This event will **always** fire as long as new tracks are ready for use.\n *\n * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n */\n ParticipantEvent[\"TrackSubscribed\"] = \"trackSubscribed\";\n /**\n * Could not subscribe to a track\n *\n * args: (track sid)\n */\n ParticipantEvent[\"TrackSubscriptionFailed\"] = \"trackSubscriptionFailed\";\n /**\n * A [[RemoteParticipant]] has unpublished a track\n *\n * args: ([[RemoteTrackPublication]])\n */\n ParticipantEvent[\"TrackUnpublished\"] = \"trackUnpublished\";\n /**\n * A subscribed track is no longer available. Clients should listen to this\n * event and ensure they detach tracks.\n *\n * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n */\n ParticipantEvent[\"TrackUnsubscribed\"] = \"trackUnsubscribed\";\n /**\n * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]])\n */\n ParticipantEvent[\"TrackMuted\"] = \"trackMuted\";\n /**\n * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]])\n */\n ParticipantEvent[\"TrackUnmuted\"] = \"trackUnmuted\";\n /**\n * A local track was published successfully. This event is helpful to know\n * when to update your local UI with the newly published track.\n *\n * args: ([[LocalTrackPublication]])\n */\n ParticipantEvent[\"LocalTrackPublished\"] = \"localTrackPublished\";\n /**\n * A local track was unpublished. This event is helpful to know when to remove\n * the local track from your UI.\n *\n * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n * this event will also fire.\n *\n * args: ([[LocalTrackPublication]])\n */\n ParticipantEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n /**\n * A local track has been constrained by cpu.\n * This event is useful to know when to reduce the capture resolution of the track.\n *\n * This event is emitted on the local participant.\n *\n * args: ([[LocalVideoTrack]], [[LocalTrackPublication]])\n */\n ParticipantEvent[\"LocalTrackCpuConstrained\"] = \"localTrackCpuConstrained\";\n /**\n * @internal\n */\n ParticipantEvent[\"LocalSenderCreated\"] = \"localSenderCreated\";\n /**\n * Participant metadata is a simple way for app-specific state to be pushed to\n * all users.\n * When RoomService.UpdateParticipantMetadata is called to change a participant's\n * state, *all* participants in the room will fire this event.\n * To access the current metadata, see [[Participant.metadata]].\n *\n * args: (prevMetadata: string)\n *\n */\n ParticipantEvent[\"ParticipantMetadataChanged\"] = \"participantMetadataChanged\";\n /**\n * Participant's display name changed\n *\n * args: (name: string, [[Participant]])\n *\n */\n ParticipantEvent[\"ParticipantNameChanged\"] = \"participantNameChanged\";\n /**\n * Data received from this participant as sender.\n * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n * All participants in the room will receive the messages sent to the room.\n *\n * args: (payload: NonSharedUint8Array, kind: [[DataPacket_Kind]])\n */\n ParticipantEvent[\"DataReceived\"] = \"dataReceived\";\n /**\n * SIP DTMF tones received from this participant as sender.\n *\n * args: (dtmf: [[DataPacket_Kind]])\n */\n ParticipantEvent[\"SipDTMFReceived\"] = \"sipDTMFReceived\";\n /**\n * Transcription received from this participant as data source.\n * @beta\n */\n ParticipantEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n /**\n * Has speaking status changed for the current participant\n *\n * args: (speaking: boolean)\n */\n ParticipantEvent[\"IsSpeakingChanged\"] = \"isSpeakingChanged\";\n /**\n * Connection quality was changed for a Participant. It'll receive updates\n * from the local participant, as well as any [[RemoteParticipant]]s that we are\n * subscribed to.\n *\n * args: (connectionQuality: [[ConnectionQuality]])\n */\n ParticipantEvent[\"ConnectionQualityChanged\"] = \"connectionQualityChanged\";\n /**\n * StreamState indicates if a subscribed track has been paused by the SFU\n * (typically this happens because of subscriber's bandwidth constraints)\n *\n * When bandwidth conditions allow, the track will be resumed automatically.\n * TrackStreamStateChanged will also be emitted when that happens.\n *\n * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]])\n */\n ParticipantEvent[\"TrackStreamStateChanged\"] = \"trackStreamStateChanged\";\n /**\n * One of subscribed tracks have changed its permissions for the current\n * participant. If permission was revoked, then the track will no longer\n * be subscribed. If permission was granted, a TrackSubscribed event will\n * be emitted.\n *\n * args: (pub: [[RemoteTrackPublication]],\n * status: [[TrackPublication.SubscriptionStatus]])\n */\n ParticipantEvent[\"TrackSubscriptionPermissionChanged\"] = \"trackSubscriptionPermissionChanged\";\n /**\n * One of the remote participants publications has changed its subscription status.\n *\n */\n ParticipantEvent[\"TrackSubscriptionStatusChanged\"] = \"trackSubscriptionStatusChanged\";\n /**\n * a local track has been constrained by cpu\n */\n ParticipantEvent[\"TrackCpuConstrained\"] = \"trackCpuConstrained\";\n // fired only on LocalParticipant\n /** @internal */\n ParticipantEvent[\"MediaDevicesError\"] = \"mediaDevicesError\";\n // fired only on LocalParticipant\n /** @internal */\n ParticipantEvent[\"AudioStreamAcquired\"] = \"audioStreamAcquired\";\n /**\n * A participant's permission has changed.\n * args: (prevPermissions: [[ParticipantPermission]])\n */\n ParticipantEvent[\"ParticipantPermissionsChanged\"] = \"participantPermissionsChanged\";\n /** @internal */\n ParticipantEvent[\"PCTrackAdded\"] = \"pcTrackAdded\";\n /**\n * Participant attributes is an app-specific key value state to be pushed to\n * all users.\n * When a participant's attributes changed, this event will be emitted with the changed attributes\n * args: (changedAttributes: [[Record<string, string]])\n */\n ParticipantEvent[\"AttributesChanged\"] = \"attributesChanged\";\n /**\n * fired on local participant only, when the first remote participant has subscribed to the track specified in the payload\n */\n ParticipantEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n /** only emitted on local participant */\n ParticipantEvent[\"ChatMessage\"] = \"chatMessage\";\n /**\n * Emitted when the participant's state changes to ACTIVE and is ready to send/receive data messages\n */\n ParticipantEvent[\"Active\"] = \"active\";\n})(ParticipantEvent || (ParticipantEvent = {}));\n/** @internal */\nvar EngineEvent;\n(function (EngineEvent) {\n EngineEvent[\"TransportsCreated\"] = \"transportsCreated\";\n EngineEvent[\"Connected\"] = \"connected\";\n EngineEvent[\"Disconnected\"] = \"disconnected\";\n EngineEvent[\"Resuming\"] = \"resuming\";\n EngineEvent[\"Resumed\"] = \"resumed\";\n EngineEvent[\"Restarting\"] = \"restarting\";\n EngineEvent[\"Restarted\"] = \"restarted\";\n EngineEvent[\"SignalResumed\"] = \"signalResumed\";\n EngineEvent[\"SignalRestarted\"] = \"signalRestarted\";\n EngineEvent[\"Closing\"] = \"closing\";\n EngineEvent[\"MediaTrackAdded\"] = \"mediaTrackAdded\";\n EngineEvent[\"ActiveSpeakersUpdate\"] = \"activeSpeakersUpdate\";\n EngineEvent[\"DataPacketReceived\"] = \"dataPacketReceived\";\n EngineEvent[\"RTPVideoMapUpdate\"] = \"rtpVideoMapUpdate\";\n EngineEvent[\"DCBufferStatusChanged\"] = \"dcBufferStatusChanged\";\n EngineEvent[\"ParticipantUpdate\"] = \"participantUpdate\";\n EngineEvent[\"RoomUpdate\"] = \"roomUpdate\";\n EngineEvent[\"SpeakersChanged\"] = \"speakersChanged\";\n EngineEvent[\"StreamStateChanged\"] = \"streamStateChanged\";\n EngineEvent[\"ConnectionQualityUpdate\"] = \"connectionQualityUpdate\";\n EngineEvent[\"SubscriptionError\"] = \"subscriptionError\";\n EngineEvent[\"SubscriptionPermissionUpdate\"] = \"subscriptionPermissionUpdate\";\n EngineEvent[\"RemoteMute\"] = \"remoteMute\";\n EngineEvent[\"SubscribedQualityUpdate\"] = \"subscribedQualityUpdate\";\n EngineEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n EngineEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n EngineEvent[\"Offline\"] = \"offline\";\n EngineEvent[\"SignalRequestResponse\"] = \"signalRequestResponse\";\n EngineEvent[\"SignalConnected\"] = \"signalConnected\";\n EngineEvent[\"RoomMoved\"] = \"roomMoved\";\n EngineEvent[\"PublishDataTrackResponse\"] = \"publishDataTrackResponse\";\n EngineEvent[\"UnPublishDataTrackResponse\"] = \"unPublishDataTrackResponse\";\n EngineEvent[\"DataTrackSubscriberHandles\"] = \"dataTrackSubscriberHandles\";\n EngineEvent[\"DataTrackPacketReceived\"] = \"dataTrackPacketReceived\";\n EngineEvent[\"Joined\"] = \"joined\";\n EngineEvent[\"TokenRefreshed\"] = \"tokenRefreshed\";\n EngineEvent[\"ServerRegionsReported\"] = \"serverRegionsReported\";\n})(EngineEvent || (EngineEvent = {}));\nvar TrackEvent;\n(function (TrackEvent) {\n TrackEvent[\"Message\"] = \"message\";\n TrackEvent[\"Muted\"] = \"muted\";\n TrackEvent[\"Unmuted\"] = \"unmuted\";\n /**\n * Only fires on LocalTracks\n */\n TrackEvent[\"Restarted\"] = \"restarted\";\n TrackEvent[\"Ended\"] = \"ended\";\n TrackEvent[\"Subscribed\"] = \"subscribed\";\n TrackEvent[\"Unsubscribed\"] = \"unsubscribed\";\n TrackEvent[\"CpuConstrained\"] = \"cpuConstrained\";\n /** @internal */\n TrackEvent[\"UpdateSettings\"] = \"updateSettings\";\n /** @internal */\n TrackEvent[\"UpdateSubscription\"] = \"updateSubscription\";\n /** @internal */\n TrackEvent[\"AudioPlaybackStarted\"] = \"audioPlaybackStarted\";\n /** @internal */\n TrackEvent[\"AudioPlaybackFailed\"] = \"audioPlaybackFailed\";\n /**\n * @internal\n * Only fires on LocalAudioTrack instances\n */\n TrackEvent[\"AudioSilenceDetected\"] = \"audioSilenceDetected\";\n /** @internal */\n TrackEvent[\"VisibilityChanged\"] = \"visibilityChanged\";\n /** @internal */\n TrackEvent[\"VideoDimensionsChanged\"] = \"videoDimensionsChanged\";\n /** @internal */\n TrackEvent[\"VideoPlaybackStarted\"] = \"videoPlaybackStarted\";\n /** @internal */\n TrackEvent[\"VideoPlaybackFailed\"] = \"videoPlaybackFailed\";\n /** @internal */\n TrackEvent[\"ElementAttached\"] = \"elementAttached\";\n /** @internal */\n TrackEvent[\"ElementDetached\"] = \"elementDetached\";\n /**\n * @internal\n * Only fires on LocalTracks\n */\n TrackEvent[\"UpstreamPaused\"] = \"upstreamPaused\";\n /**\n * @internal\n * Only fires on LocalTracks\n */\n TrackEvent[\"UpstreamResumed\"] = \"upstreamResumed\";\n /**\n * @internal\n * Fires on RemoteTrackPublication\n */\n TrackEvent[\"SubscriptionPermissionChanged\"] = \"subscriptionPermissionChanged\";\n /**\n * Fires on RemoteTrackPublication\n */\n TrackEvent[\"SubscriptionStatusChanged\"] = \"subscriptionStatusChanged\";\n /**\n * Fires on RemoteTrackPublication\n */\n TrackEvent[\"SubscriptionFailed\"] = \"subscriptionFailed\";\n /**\n * @internal\n */\n TrackEvent[\"TrackProcessorUpdate\"] = \"trackProcessorUpdate\";\n /**\n * @internal\n */\n TrackEvent[\"AudioTrackFeatureUpdate\"] = \"audioTrackFeatureUpdate\";\n /**\n * @beta\n */\n TrackEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n /**\n * @experimental\n */\n TrackEvent[\"TimeSyncUpdate\"] = \"timeSyncUpdate\";\n /**\n * @internal\n */\n TrackEvent[\"PreConnectBufferFlushed\"] = \"preConnectBufferFlushed\";\n})(TrackEvent || (TrackEvent = {}));function cloneDeep(value) {\n if (typeof value === 'undefined') {\n return value;\n }\n if (typeof structuredClone === 'function') {\n if (typeof value === 'object' && value !== null) {\n // ensure that the value is not a proxy by spreading it\n return structuredClone(Object.assign({}, value));\n }\n return structuredClone(value);\n } else {\n return JSON.parse(JSON.stringify(value));\n }\n}class VideoPreset {\n constructor(widthOrOptions, height, maxBitrate, maxFramerate, priority) {\n if (typeof widthOrOptions === 'object') {\n this.width = widthOrOptions.width;\n this.height = widthOrOptions.height;\n this.aspectRatio = widthOrOptions.aspectRatio;\n this.encoding = {\n maxBitrate: widthOrOptions.maxBitrate,\n maxFramerate: widthOrOptions.maxFramerate,\n priority: widthOrOptions.priority\n };\n } else if (height !== undefined && maxBitrate !== undefined) {\n this.width = widthOrOptions;\n this.height = height;\n this.aspectRatio = widthOrOptions / height;\n this.encoding = {\n maxBitrate,\n maxFramerate,\n priority\n };\n } else {\n throw new TypeError('Unsupported options: provide at least width, height and maxBitrate');\n }\n }\n get resolution() {\n return {\n width: this.width,\n height: this.height,\n frameRate: this.encoding.maxFramerate,\n aspectRatio: this.aspectRatio\n };\n }\n}\n// `red` is not technically a codec, but treated as one in signalling protocol\nconst audioCodecs = ['opus', 'red'];\nconst backupVideoCodecs = ['vp8', 'h264'];\nconst videoCodecs = ['vp8', 'h264', 'vp9', 'av1', 'h265'];\nfunction isBackupVideoCodec(codec) {\n return !!backupVideoCodecs.find(backup => backup === codec);\n}\n/** @deprecated Use {@link isBackupVideoCodec} instead */\nconst isBackupCodec = isBackupVideoCodec;\nvar BackupCodecPolicy;\n(function (BackupCodecPolicy) {\n // codec regression is preferred, the sfu will try to regress codec if possible but not guaranteed\n BackupCodecPolicy[BackupCodecPolicy[\"PREFER_REGRESSION\"] = 0] = \"PREFER_REGRESSION\";\n // multi-codec simulcast, publish both primary and backup codec at the same time\n BackupCodecPolicy[BackupCodecPolicy[\"SIMULCAST\"] = 1] = \"SIMULCAST\";\n // always use backup codec only\n BackupCodecPolicy[BackupCodecPolicy[\"REGRESSION\"] = 2] = \"REGRESSION\";\n})(BackupCodecPolicy || (BackupCodecPolicy = {}));\nvar AudioPresets;\n(function (AudioPresets) {\n AudioPresets.telephone = {\n maxBitrate: 12000\n };\n AudioPresets.speech = {\n maxBitrate: 24000\n };\n AudioPresets.music = {\n maxBitrate: 48000\n };\n AudioPresets.musicStereo = {\n maxBitrate: 64000\n };\n AudioPresets.musicHighQuality = {\n maxBitrate: 96000\n };\n AudioPresets.musicHighQualityStereo = {\n maxBitrate: 128000\n };\n})(AudioPresets || (AudioPresets = {}));\n/**\n * Sane presets for video resolution/encoding\n */\nconst VideoPresets = {\n h90: new VideoPreset(160, 90, 90000, 20),\n h180: new VideoPreset(320, 180, 160000, 20),\n h216: new VideoPreset(384, 216, 180000, 20),\n h360: new VideoPreset(640, 360, 450000, 20),\n h540: new VideoPreset(960, 540, 800000, 25),\n h720: new VideoPreset(1280, 720, 1700000, 30),\n h1080: new VideoPreset(1920, 1080, 3000000, 30),\n h1440: new VideoPreset(2560, 1440, 5000000, 30),\n h2160: new VideoPreset(3840, 2160, 8000000, 30)\n};\n/**\n * Four by three presets\n */\nconst VideoPresets43 = {\n h120: new VideoPreset(160, 120, 70000, 20),\n h180: new VideoPreset(240, 180, 125000, 20),\n h240: new VideoPreset(320, 240, 140000, 20),\n h360: new VideoPreset(480, 360, 330000, 20),\n h480: new VideoPreset(640, 480, 500000, 20),\n h540: new VideoPreset(720, 540, 600000, 25),\n h720: new VideoPreset(960, 720, 1300000, 30),\n h1080: new VideoPreset(1440, 1080, 2300000, 30),\n h1440: new VideoPreset(1920, 1440, 3800000, 30)\n};\nconst ScreenSharePresets = {\n h360fps3: new VideoPreset(640, 360, 200000, 3, 'medium'),\n h360fps15: new VideoPreset(640, 360, 400000, 15, 'medium'),\n h720fps5: new VideoPreset(1280, 720, 800000, 5, 'medium'),\n h720fps15: new VideoPreset(1280, 720, 1500000, 15, 'medium'),\n h720fps30: new VideoPreset(1280, 720, 2000000, 30, 'medium'),\n h1080fps15: new VideoPreset(1920, 1080, 2500000, 15, 'medium'),\n h1080fps30: new VideoPreset(1920, 1080, 5000000, 30, 'medium'),\n // original resolution, without resizing\n original: new VideoPreset(0, 0, 7000000, 30, 'medium')\n};function mergeDefaultOptions(options, audioDefaults, videoDefaults) {\n var _a, _b;\n var _c, _d;\n const _extractProcessorsFro = extractProcessorsFromOptions(options !== null && options !== void 0 ? options : {}),\n optionsWithoutProcessor = _extractProcessorsFro.optionsWithoutProcessor,\n audioProcessor = _extractProcessorsFro.audioProcessor,\n videoProcessor = _extractProcessorsFro.videoProcessor;\n const defaultAudioProcessor = audioDefaults === null || audioDefaults === void 0 ? void 0 : audioDefaults.processor;\n const defaultVideoProcessor = videoDefaults === null || videoDefaults === void 0 ? void 0 : videoDefaults.processor;\n const clonedOptions = optionsWithoutProcessor !== null && optionsWithoutProcessor !== void 0 ? optionsWithoutProcessor : {};\n if (clonedOptions.audio === true) clonedOptions.audio = {};\n if (clonedOptions.video === true) clonedOptions.video = {};\n // use defaults\n if (clonedOptions.audio) {\n mergeObjectWithoutOverwriting(clonedOptions.audio, audioDefaults);\n (_a = (_c = clonedOptions.audio).deviceId) !== null && _a !== void 0 ? _a : _c.deviceId = {\n ideal: 'default'\n };\n if (audioProcessor || defaultAudioProcessor) {\n clonedOptions.audio.processor = audioProcessor !== null && audioProcessor !== void 0 ? audioProcessor : defaultAudioProcessor;\n }\n }\n if (clonedOptions.video) {\n mergeObjectWithoutOverwriting(clonedOptions.video, videoDefaults);\n (_b = (_d = clonedOptions.video).deviceId) !== null && _b !== void 0 ? _b : _d.deviceId = {\n ideal: 'default'\n };\n if (videoProcessor || defaultVideoProcessor) {\n clonedOptions.video.processor = videoProcessor !== null && videoProcessor !== void 0 ? videoProcessor : defaultVideoProcessor;\n }\n }\n return clonedOptions;\n}\nfunction mergeObjectWithoutOverwriting(mainObject, objectToMerge) {\n Object.keys(objectToMerge).forEach(key => {\n if (mainObject[key] === undefined) mainObject[key] = objectToMerge[key];\n });\n return mainObject;\n}\nfunction constraintsForOptions(options) {\n var _a, _b;\n var _c, _d;\n const constraints = {};\n if (options.video) {\n // default video options\n if (typeof options.video === 'object') {\n const videoOptions = {};\n const target = videoOptions;\n const source = options.video;\n Object.keys(source).forEach(key => {\n switch (key) {\n case 'resolution':\n // flatten VideoResolution fields\n mergeObjectWithoutOverwriting(target, source.resolution);\n break;\n default:\n target[key] = source[key];\n }\n });\n constraints.video = videoOptions;\n (_a = (_c = constraints.video).deviceId) !== null && _a !== void 0 ? _a : _c.deviceId = {\n ideal: 'default'\n };\n } else {\n constraints.video = options.video ? {\n deviceId: {\n ideal: 'default'\n }\n } : false;\n }\n } else {\n constraints.video = false;\n }\n if (options.audio) {\n if (typeof options.audio === 'object') {\n constraints.audio = options.audio;\n (_b = (_d = constraints.audio).deviceId) !== null && _b !== void 0 ? _b : _d.deviceId = {\n ideal: 'default'\n };\n } else {\n constraints.audio = {\n deviceId: {\n ideal: 'default'\n }\n };\n }\n } else {\n constraints.audio = false;\n }\n return constraints;\n}\n/**\n * This function detects silence on a given [[Track]] instance.\n * Returns true if the track seems to be entirely silent.\n */\nfunction detectSilence(track_1) {\n return __awaiter(this, arguments, void 0, function (track) {\n let timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n return function* () {\n const ctx = getNewAudioContext();\n if (ctx) {\n const analyser = ctx.createAnalyser();\n analyser.fftSize = 2048;\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n const source = ctx.createMediaStreamSource(new MediaStream([track.mediaStreamTrack]));\n source.connect(analyser);\n yield sleep(timeOffset);\n analyser.getByteTimeDomainData(dataArray);\n const someNoise = dataArray.some(sample => sample !== 128 && sample !== 0);\n ctx.close();\n return !someNoise;\n }\n return false;\n }();\n });\n}\n/**\n * @internal\n */\nfunction getNewAudioContext() {\n var _a;\n const AudioContext =\n // @ts-ignore\n typeof window !== 'undefined' && (window.AudioContext || window.webkitAudioContext);\n if (AudioContext) {\n const audioContext = new AudioContext({\n latencyHint: 'interactive'\n });\n // If the audio context is suspended, we need to resume it when the user clicks on the page\n if (audioContext.state === 'suspended' && typeof window !== 'undefined' && ((_a = window.document) === null || _a === void 0 ? void 0 : _a.body)) {\n const handleResume = () => __awaiter(this, void 0, void 0, function* () {\n var _a;\n try {\n if (audioContext.state === 'suspended') {\n yield audioContext.resume();\n }\n } catch (e) {\n console.warn('Error trying to auto-resume audio context', e);\n } finally {\n (_a = window.document.body) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', handleResume);\n }\n });\n // https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/statechange_event\n audioContext.addEventListener('statechange', () => {\n var _a;\n if (audioContext.state === 'closed') {\n (_a = window.document.body) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', handleResume);\n }\n });\n window.document.body.addEventListener('click', handleResume);\n }\n return audioContext;\n }\n}\n/**\n * @internal\n */\nfunction kindToSource(kind) {\n if (kind === 'audioinput') {\n return Track.Source.Microphone;\n } else if (kind === 'videoinput') {\n return Track.Source.Camera;\n } else {\n return Track.Source.Unknown;\n }\n}\n/**\n * @internal\n */\nfunction sourceToKind(source) {\n if (source === Track.Source.Microphone) {\n return 'audioinput';\n } else if (source === Track.Source.Camera) {\n return 'videoinput';\n } else {\n return undefined;\n }\n}\n/**\n * @internal\n */\nfunction screenCaptureToDisplayMediaStreamOptions(options) {\n var _a, _b;\n let videoConstraints = (_a = options.video) !== null && _a !== void 0 ? _a : true;\n // treat 0 as uncapped\n if (options.resolution && options.resolution.width > 0 && options.resolution.height > 0) {\n videoConstraints = typeof videoConstraints === 'boolean' ? {} : videoConstraints;\n if (isSafari()) {\n videoConstraints = Object.assign(Object.assign({}, videoConstraints), {\n width: {\n max: options.resolution.width\n },\n height: {\n max: options.resolution.height\n },\n frameRate: options.resolution.frameRate\n });\n } else {\n videoConstraints = Object.assign(Object.assign({}, videoConstraints), {\n width: {\n ideal: options.resolution.width\n },\n height: {\n ideal: options.resolution.height\n },\n frameRate: options.resolution.frameRate\n });\n }\n }\n return {\n audio: (_b = options.audio) !== null && _b !== void 0 ? _b : false,\n video: videoConstraints,\n // @ts-expect-error support for experimental display media features\n controller: options.controller,\n selfBrowserSurface: options.selfBrowserSurface,\n surfaceSwitching: options.surfaceSwitching,\n systemAudio: options.systemAudio,\n preferCurrentTab: options.preferCurrentTab\n };\n}\nfunction mimeTypeToVideoCodecString(mimeType) {\n return mimeType.split('/')[1].toLowerCase();\n}\nfunction getTrackPublicationInfo(tracks) {\n const infos = [];\n tracks.forEach(track => {\n if (track.track !== undefined) {\n infos.push(new TrackPublishedResponse({\n cid: track.track.mediaStreamID,\n track: track.trackInfo\n }));\n }\n });\n return infos;\n}\nfunction getLogContextFromTrack(track) {\n if ('mediaStreamTrack' in track) {\n return {\n trackID: track.sid,\n source: track.source,\n muted: track.isMuted,\n enabled: track.mediaStreamTrack.enabled,\n kind: track.kind,\n streamID: track.mediaStreamID,\n streamTrackID: track.mediaStreamTrack.id\n };\n } else {\n return {\n trackID: track.trackSid,\n enabled: track.isEnabled,\n muted: track.isMuted,\n trackInfo: Object.assign({\n mimeType: track.mimeType,\n name: track.trackName,\n encrypted: track.isEncrypted,\n kind: track.kind,\n source: track.source\n }, track.track ? getLogContextFromTrack(track.track) : {})\n };\n }\n}\nfunction supportsSynchronizationSources() {\n return typeof RTCRtpReceiver !== 'undefined' && typeof RTCRtpReceiver.prototype.getSynchronizationSources === 'function';\n}\nfunction diffAttributes(oldValues, newValues) {\n var _a;\n if (oldValues === undefined) {\n oldValues = {};\n }\n if (newValues === undefined) {\n newValues = {};\n }\n const allKeys = [...Object.keys(newValues), ...Object.keys(oldValues)];\n const diff = {};\n for (const key of allKeys) {\n if (oldValues[key] !== newValues[key]) {\n diff[key] = (_a = newValues[key]) !== null && _a !== void 0 ? _a : '';\n }\n }\n return diff;\n}\n/** @internal */\nfunction extractProcessorsFromOptions(options) {\n const newOptions = Object.assign({}, options);\n let audioProcessor;\n let videoProcessor;\n if (typeof newOptions.audio === 'object' && newOptions.audio.processor) {\n audioProcessor = newOptions.audio.processor;\n newOptions.audio = Object.assign(Object.assign({}, newOptions.audio), {\n processor: undefined\n });\n }\n if (typeof newOptions.video === 'object' && newOptions.video.processor) {\n videoProcessor = newOptions.video.processor;\n newOptions.video = Object.assign(Object.assign({}, newOptions.video), {\n processor: undefined\n });\n }\n return {\n audioProcessor,\n videoProcessor,\n optionsWithoutProcessor: cloneDeep(newOptions)\n };\n}\nfunction getTrackSourceFromProto(source) {\n switch (source) {\n case TrackSource.CAMERA:\n return Track.Source.Camera;\n case TrackSource.MICROPHONE:\n return Track.Source.Microphone;\n case TrackSource.SCREEN_SHARE:\n return Track.Source.ScreenShare;\n case TrackSource.SCREEN_SHARE_AUDIO:\n return Track.Source.ScreenShareAudio;\n default:\n return Track.Source.Unknown;\n }\n}\nfunction areDimensionsSmaller(a, b) {\n return a.width * a.height < b.width * b.height;\n}\nfunction layerDimensionsFor(trackInfo, quality) {\n var _a;\n return (_a = trackInfo.layers) === null || _a === void 0 ? void 0 : _a.find(l => l.quality === quality);\n}const BACKGROUND_REACTION_DELAY = 5000;\n// keep old audio elements when detached, we would re-use them since on iOS\n// Safari tracks which audio elements have been \"blessed\" by the user.\nconst recycledElements = [];\nvar VideoQuality;\n(function (VideoQuality) {\n VideoQuality[VideoQuality[\"LOW\"] = 0] = \"LOW\";\n VideoQuality[VideoQuality[\"MEDIUM\"] = 1] = \"MEDIUM\";\n VideoQuality[VideoQuality[\"HIGH\"] = 2] = \"HIGH\";\n})(VideoQuality || (VideoQuality = {}));\nclass Track extends eventsExports.EventEmitter {\n /**\n * indicates current state of stream, it'll indicate `paused` if the track\n * has been paused by congestion controller\n */\n get streamState() {\n return this._streamState;\n }\n /** @internal */\n setStreamState(value) {\n this._streamState = value;\n }\n constructor(mediaTrack, kind) {\n let loggerOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _a;\n super();\n this.attachedElements = [];\n this.isMuted = false;\n this._streamState = Track.StreamState.Active;\n this.isInBackground = false;\n this._currentBitrate = 0;\n this.log = livekitLogger;\n this.appVisibilityChangedListener = () => {\n if (this.backgroundTimeout) {\n clearTimeout(this.backgroundTimeout);\n }\n // delay app visibility update if it goes to hidden\n // update immediately if it comes back to focus\n if (document.visibilityState === 'hidden') {\n this.backgroundTimeout = setTimeout(() => this.handleAppVisibilityChanged(), BACKGROUND_REACTION_DELAY);\n } else {\n this.handleAppVisibilityChanged();\n }\n };\n this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Track);\n this.loggerContextCb = loggerOptions.loggerContextCb;\n this.setMaxListeners(100);\n this.kind = kind;\n this._mediaStreamTrack = mediaTrack;\n this._mediaStreamID = mediaTrack.id;\n this.source = Track.Source.Unknown;\n }\n get logContext() {\n var _a;\n return Object.assign(Object.assign({}, (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)), getLogContextFromTrack(this));\n }\n /** current receive bits per second */\n get currentBitrate() {\n return this._currentBitrate;\n }\n get mediaStreamTrack() {\n return this._mediaStreamTrack;\n }\n /**\n * @internal\n * used for keep mediaStream's first id, since it's id might change\n * if we disable/enable a track\n */\n get mediaStreamID() {\n return this._mediaStreamID;\n }\n attach(element) {\n let elementType = 'audio';\n if (this.kind === Track.Kind.Video) {\n elementType = 'video';\n }\n if (this.attachedElements.length === 0 && this.kind === Track.Kind.Video) {\n this.addAppVisibilityListener();\n }\n if (!element) {\n if (elementType === 'audio') {\n recycledElements.forEach(e => {\n if (e.parentElement === null && !element) {\n element = e;\n }\n });\n if (element) {\n // remove it from pool\n recycledElements.splice(recycledElements.indexOf(element), 1);\n }\n }\n if (!element) {\n element = document.createElement(elementType);\n }\n }\n if (!this.attachedElements.includes(element)) {\n this.attachedElements.push(element);\n }\n // even if we believe it's already attached to the element, it's possible\n // the element's srcObject was set to something else out of band.\n // we'll want to re-attach it in that case\n attachToElement(this.mediaStreamTrack, element);\n // handle auto playback failures\n const allMediaStreamTracks = element.srcObject.getTracks();\n const hasAudio = allMediaStreamTracks.some(tr => tr.kind === 'audio');\n // manually play media to detect auto playback status\n element.play().then(() => {\n this.emit(hasAudio ? TrackEvent.AudioPlaybackStarted : TrackEvent.VideoPlaybackStarted);\n }).catch(e => {\n if (e.name === 'NotAllowedError') {\n this.emit(hasAudio ? TrackEvent.AudioPlaybackFailed : TrackEvent.VideoPlaybackFailed, e);\n } else if (e.name === 'AbortError') {\n // commonly triggered by another `play` request, only log for debugging purposes\n livekitLogger.debug(\"\".concat(hasAudio ? 'audio' : 'video', \" playback aborted, likely due to new play request\"));\n } else {\n livekitLogger.warn(\"could not playback \".concat(hasAudio ? 'audio' : 'video'), e);\n }\n // If audio playback isn't allowed make sure we still play back the video\n if (hasAudio && element && allMediaStreamTracks.some(tr => tr.kind === 'video') && e.name === 'NotAllowedError') {\n element.muted = true;\n element.play().catch(() => {\n // catch for Safari, exceeded options at this point to automatically play the media element\n });\n }\n });\n this.emit(TrackEvent.ElementAttached, element);\n return element;\n }\n detach(element) {\n try {\n // detach from a single element\n if (element) {\n detachTrack(this.mediaStreamTrack, element);\n const idx = this.attachedElements.indexOf(element);\n if (idx >= 0) {\n this.attachedElements.splice(idx, 1);\n this.recycleElement(element);\n this.emit(TrackEvent.ElementDetached, element);\n }\n return element;\n }\n const detached = [];\n this.attachedElements.forEach(elm => {\n detachTrack(this.mediaStreamTrack, elm);\n detached.push(elm);\n this.recycleElement(elm);\n this.emit(TrackEvent.ElementDetached, elm);\n });\n // remove all tracks\n this.attachedElements = [];\n return detached;\n } finally {\n if (this.attachedElements.length === 0) {\n this.removeAppVisibilityListener();\n }\n }\n }\n stop() {\n this.stopMonitor();\n this._mediaStreamTrack.stop();\n }\n enable() {\n this._mediaStreamTrack.enabled = true;\n }\n disable() {\n this._mediaStreamTrack.enabled = false;\n }\n /* @internal */\n stopMonitor() {\n if (this.monitorInterval) {\n clearInterval(this.monitorInterval);\n }\n if (this.timeSyncHandle) {\n cancelAnimationFrame(this.timeSyncHandle);\n }\n }\n /** @internal */\n updateLoggerOptions(loggerOptions) {\n if (loggerOptions.loggerName) {\n this.log = getLogger(loggerOptions.loggerName);\n }\n if (loggerOptions.loggerContextCb) {\n this.loggerContextCb = loggerOptions.loggerContextCb;\n }\n }\n recycleElement(element) {\n if (element instanceof HTMLAudioElement) {\n // we only need to re-use a single element\n let shouldCache = true;\n element.pause();\n recycledElements.forEach(e => {\n if (!e.parentElement) {\n shouldCache = false;\n }\n });\n if (shouldCache) {\n recycledElements.push(element);\n }\n }\n }\n handleAppVisibilityChanged() {\n return __awaiter(this, void 0, void 0, function* () {\n this.isInBackground = document.visibilityState === 'hidden';\n if (!this.isInBackground && this.kind === Track.Kind.Video) {\n setTimeout(() => this.attachedElements.forEach(el => el.play().catch(() => {\n /** catch clause necessary for Safari */\n })), 0);\n }\n });\n }\n addAppVisibilityListener() {\n if (isWeb()) {\n this.isInBackground = document.visibilityState === 'hidden';\n document.addEventListener('visibilitychange', this.appVisibilityChangedListener);\n } else {\n this.isInBackground = false;\n }\n }\n removeAppVisibilityListener() {\n if (isWeb()) {\n document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);\n }\n }\n}\nfunction attachToElement(track, element) {\n let mediaStream;\n if (element.srcObject instanceof MediaStream) {\n mediaStream = element.srcObject;\n } else {\n mediaStream = new MediaStream();\n }\n // check if track matches existing track\n let existingTracks;\n if (track.kind === 'audio') {\n existingTracks = mediaStream.getAudioTracks();\n } else {\n existingTracks = mediaStream.getVideoTracks();\n }\n if (!existingTracks.includes(track)) {\n existingTracks.forEach(et => {\n mediaStream.removeTrack(et);\n });\n mediaStream.addTrack(track);\n }\n if (!isSafari() || !(element instanceof HTMLVideoElement)) {\n // when in low power mode (applies to both macOS and iOS), Safari will show a play/pause overlay\n // when a video starts that has the `autoplay` attribute is set.\n // we work around this by _not_ setting the autoplay attribute on safari and instead call `setTimeout(() => el.play(),0)` further down\n element.autoplay = true;\n }\n // In case there are no audio tracks present on the mediastream, we set the element as muted to ensure autoplay works\n element.muted = mediaStream.getAudioTracks().length === 0;\n if (element instanceof HTMLVideoElement) {\n element.playsInline = true;\n }\n // avoid flicker\n if (element.srcObject !== mediaStream) {\n element.srcObject = mediaStream;\n if ((isSafari() || isFireFox()) && element instanceof HTMLVideoElement) {\n // Firefox also has a timing issue where video doesn't actually get attached unless\n // performed out-of-band\n // Safari 15 has a bug where in certain layouts, video element renders\n // black until the page is resized or other changes take place.\n // Resetting the src triggers it to render.\n // https://developer.apple.com/forums/thread/690523\n setTimeout(() => {\n element.srcObject = mediaStream;\n // Safari 15 sometimes fails to start a video\n // when the window is backgrounded before the first frame is drawn\n // manually calling play here seems to fix that\n element.play().catch(() => {\n /** do nothing */\n });\n }, 0);\n }\n }\n}\n/** @internal */\nfunction detachTrack(track, element) {\n if (element.srcObject instanceof MediaStream) {\n const mediaStream = element.srcObject;\n mediaStream.removeTrack(track);\n if (mediaStream.getTracks().length > 0) {\n element.srcObject = mediaStream;\n } else {\n element.srcObject = null;\n }\n }\n}\n(function (Track) {\n let Kind;\n (function (Kind) {\n Kind[\"Audio\"] = \"audio\";\n Kind[\"Video\"] = \"video\";\n Kind[\"Unknown\"] = \"unknown\";\n })(Kind = Track.Kind || (Track.Kind = {}));\n let Source;\n (function (Source) {\n Source[\"Camera\"] = \"camera\";\n Source[\"Microphone\"] = \"microphone\";\n Source[\"ScreenShare\"] = \"screen_share\";\n Source[\"ScreenShareAudio\"] = \"screen_share_audio\";\n Source[\"Unknown\"] = \"unknown\";\n })(Source = Track.Source || (Track.Source = {}));\n let StreamState$1;\n (function (StreamState) {\n StreamState[\"Active\"] = \"active\";\n StreamState[\"Paused\"] = \"paused\";\n StreamState[\"Unknown\"] = \"unknown\";\n })(StreamState$1 = Track.StreamState || (Track.StreamState = {}));\n /** @internal */\n function kindToProto(k) {\n switch (k) {\n case Kind.Audio:\n return TrackType.AUDIO;\n case Kind.Video:\n return TrackType.VIDEO;\n default:\n // FIXME this was UNRECOGNIZED before\n return TrackType.DATA;\n }\n }\n Track.kindToProto = kindToProto;\n /** @internal */\n function kindFromProto(t) {\n switch (t) {\n case TrackType.AUDIO:\n return Kind.Audio;\n case TrackType.VIDEO:\n return Kind.Video;\n default:\n return Kind.Unknown;\n }\n }\n Track.kindFromProto = kindFromProto;\n /** @internal */\n function sourceToProto(s) {\n switch (s) {\n case Source.Camera:\n return TrackSource.CAMERA;\n case Source.Microphone:\n return TrackSource.MICROPHONE;\n case Source.ScreenShare:\n return TrackSource.SCREEN_SHARE;\n case Source.ScreenShareAudio:\n return TrackSource.SCREEN_SHARE_AUDIO;\n default:\n return TrackSource.UNKNOWN;\n }\n }\n Track.sourceToProto = sourceToProto;\n /** @internal */\n function sourceFromProto(s) {\n switch (s) {\n case TrackSource.CAMERA:\n return Source.Camera;\n case TrackSource.MICROPHONE:\n return Source.Microphone;\n case TrackSource.SCREEN_SHARE:\n return Source.ScreenShare;\n case TrackSource.SCREEN_SHARE_AUDIO:\n return Source.ScreenShareAudio;\n default:\n return Source.Unknown;\n }\n }\n Track.sourceFromProto = sourceFromProto;\n /** @internal */\n function streamStateFromProto(s) {\n switch (s) {\n case StreamState.ACTIVE:\n return StreamState$1.Active;\n case StreamState.PAUSED:\n return StreamState$1.Paused;\n default:\n return StreamState$1.Unknown;\n }\n }\n Track.streamStateFromProto = streamStateFromProto;\n})(Track || (Track = {}));const separator = '|';\nconst ddExtensionURI = 'https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension';\nfunction unpackStreamId(packed) {\n const parts = packed.split(separator);\n if (parts.length > 1) {\n return [parts[0], packed.substr(parts[0].length + 1)];\n }\n return [packed, ''];\n}\nfunction sleep(duration) {\n return new TypedPromise(resolve => CriticalTimers.setTimeout(resolve, duration));\n}\n/** @internal */\nfunction supportsTransceiver() {\n return 'addTransceiver' in RTCPeerConnection.prototype;\n}\n/** @internal */\nfunction supportsAddTrack() {\n return 'addTrack' in RTCPeerConnection.prototype;\n}\nfunction supportsAdaptiveStream() {\n return typeof ResizeObserver !== undefined && typeof IntersectionObserver !== undefined;\n}\nfunction supportsDynacast() {\n return supportsTransceiver();\n}\nfunction supportsAV1() {\n if (!('getCapabilities' in RTCRtpSender)) {\n return false;\n }\n if (isSafari() || isFireFox()) {\n // Safari 17 on iPhone14 reports AV1 capability, but does not actually support it\n // Firefox does support AV1, but SVC publishing is not supported\n return false;\n }\n const capabilities = RTCRtpSender.getCapabilities('video');\n let hasAV1 = false;\n if (capabilities) {\n for (const codec of capabilities.codecs) {\n if (codec.mimeType.toLowerCase() === 'video/av1') {\n hasAV1 = true;\n break;\n }\n }\n }\n return hasAV1;\n}\nfunction supportsVP9() {\n if (!('getCapabilities' in RTCRtpSender)) {\n return false;\n }\n if (isFireFox()) {\n // technically speaking FireFox supports VP9, but SVC publishing is broken\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1633876\n return false;\n }\n if (isSafari()) {\n const browser = getBrowser();\n if ((browser === null || browser === void 0 ? void 0 : browser.version) && compareVersions(browser.version, '16') < 0) {\n // Safari 16 and below does not support VP9\n return false;\n }\n if ((browser === null || browser === void 0 ? void 0 : browser.os) === 'iOS' && (browser === null || browser === void 0 ? void 0 : browser.osVersion) && compareVersions(browser.osVersion, '16') < 0) {\n // Safari 16 and below on iOS does not support VP9 we need the iOS check to account for other browsers running webkit under the hood\n return false;\n }\n }\n const capabilities = RTCRtpSender.getCapabilities('video');\n let hasVP9 = false;\n if (capabilities) {\n for (const codec of capabilities.codecs) {\n if (codec.mimeType.toLowerCase() === 'video/vp9') {\n hasVP9 = true;\n break;\n }\n }\n }\n return hasVP9;\n}\nfunction isSVCCodec(codec) {\n return codec === 'av1' || codec === 'vp9';\n}\nfunction supportsSetSinkId(elm) {\n if (!document || isSafariBased()) {\n return false;\n }\n if (!elm) {\n elm = document.createElement('audio');\n }\n return 'setSinkId' in elm;\n}\n/**\n * Checks whether or not setting an audio output via {@link Room#setActiveDevice}\n * is supported for the current browser.\n */\nfunction supportsAudioOutputSelection() {\n // Note: this is method publicly exported under a user friendly name and currently only proxying `supportsSetSinkId`\n return supportsSetSinkId();\n}\nfunction isBrowserSupported() {\n if (typeof RTCPeerConnection === 'undefined') {\n return false;\n }\n return supportsTransceiver() || supportsAddTrack();\n}\nfunction isFireFox() {\n var _a;\n return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Firefox';\n}\nfunction isChromiumBased() {\n const browser = getBrowser();\n return !!browser && browser.name === 'Chrome' && browser.os !== 'iOS';\n}\nfunction isScriptTransformSupportedForWorker() {\n // Chrome occasionally throws an `InvalidState` error when using script transforms directly after introducing this API in 141.\n // Disabling it for Chrome based browsers until the API has stabilized.\n // @ts-ignore\n return typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.RTCRtpScriptTransform !== 'undefined' && !isChromiumBased();\n}\nfunction isSafari() {\n var _a;\n return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Safari';\n}\nfunction isSafariBased() {\n const b = getBrowser();\n return (b === null || b === void 0 ? void 0 : b.name) === 'Safari' || (b === null || b === void 0 ? void 0 : b.os) === 'iOS';\n}\nfunction isSafari17Based() {\n const b = getBrowser();\n return (b === null || b === void 0 ? void 0 : b.name) === 'Safari' && b.version.startsWith('17.') || (b === null || b === void 0 ? void 0 : b.os) === 'iOS' && !!(b === null || b === void 0 ? void 0 : b.osVersion) && compareVersions(b.osVersion, '17') >= 0;\n}\nfunction isSafariSvcApi(browser) {\n if (!browser) {\n browser = getBrowser();\n }\n // Safari 18.4 requires legacy svc api and scaleResolutionDown to be set\n return (browser === null || browser === void 0 ? void 0 : browser.name) === 'Safari' && compareVersions(browser.version, '18.3') > 0 || (browser === null || browser === void 0 ? void 0 : browser.os) === 'iOS' && !!(browser === null || browser === void 0 ? void 0 : browser.osVersion) && compareVersions(browser.osVersion, '18.3') > 0;\n}\nfunction isMobile() {\n var _a, _b;\n if (!isWeb()) return false;\n return (\n // @ts-expect-error `userAgentData` is not yet part of typescript\n (_b = (_a = navigator.userAgentData) === null || _a === void 0 ? void 0 : _a.mobile) !== null && _b !== void 0 ? _b : /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent)\n );\n}\nfunction isE2EESimulcastSupported() {\n const browser = getBrowser();\n const supportedSafariVersion = '17.2'; // see https://bugs.webkit.org/show_bug.cgi?id=257803\n if (browser) {\n if (browser.name !== 'Safari' && browser.os !== 'iOS') {\n return true;\n } else if (browser.os === 'iOS' && browser.osVersion && compareVersions(browser.osVersion, supportedSafariVersion) >= 0) {\n return true;\n } else if (browser.name === 'Safari' && compareVersions(browser.version, supportedSafariVersion) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n}\nfunction isWeb() {\n return typeof document !== 'undefined';\n}\nfunction isReactNative() {\n // navigator.product is deprecated on browsers, but will be set appropriately for react-native.\n return navigator.product == 'ReactNative';\n}\nfunction isCloud(serverUrl) {\n return serverUrl.hostname.endsWith('.livekit.cloud') || serverUrl.hostname.endsWith('.livekit.run');\n}\nfunction extractProjectFromUrl(serverUrl) {\n if (!isCloud(serverUrl)) {\n return null;\n }\n return serverUrl.hostname.split('.')[0];\n}\nfunction getLKReactNativeInfo() {\n // global defined only for ReactNative.\n // @ts-ignore\n if (global && global.LiveKitReactNativeGlobal) {\n // @ts-ignore\n return global.LiveKitReactNativeGlobal;\n }\n return undefined;\n}\nfunction getReactNativeOs() {\n if (!isReactNative()) {\n return undefined;\n }\n let info = getLKReactNativeInfo();\n if (info) {\n return info.platform;\n }\n return undefined;\n}\nfunction getDevicePixelRatio() {\n if (isWeb()) {\n return window.devicePixelRatio;\n }\n if (isReactNative()) {\n let info = getLKReactNativeInfo();\n if (info) {\n return info.devicePixelRatio;\n }\n }\n return 1;\n}\n/**\n * @param v1 - The first version string to compare.\n * @param v2 - The second version string to compare.\n * @returns A number indicating the order of the versions:\n * - 1 if v1 is greater than v2\n * - -1 if v1 is less than v2\n * - 0 if v1 and v2 are equal\n */\nfunction compareVersions(v1, v2) {\n const parts1 = v1.split('.');\n const parts2 = v2.split('.');\n const k = Math.min(parts1.length, parts2.length);\n for (let i = 0; i < k; ++i) {\n const p1 = parseInt(parts1[i], 10);\n const p2 = parseInt(parts2[i], 10);\n if (p1 > p2) return 1;\n if (p1 < p2) return -1;\n if (i === k - 1 && p1 === p2) return 0;\n }\n if (v1 === '' && v2 !== '') {\n return -1;\n } else if (v2 === '') {\n return 1;\n }\n return parts1.length == parts2.length ? 0 : parts1.length < parts2.length ? -1 : 1;\n}\nfunction roDispatchCallback(entries) {\n for (const entry of entries) {\n entry.target.handleResize(entry);\n }\n}\nfunction ioDispatchCallback(entries) {\n for (const entry of entries) {\n entry.target.handleVisibilityChanged(entry);\n }\n}\nlet resizeObserver = null;\nconst getResizeObserver = () => {\n if (!resizeObserver) resizeObserver = new ResizeObserver(roDispatchCallback);\n return resizeObserver;\n};\nlet intersectionObserver = null;\nconst getIntersectionObserver = () => {\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver(ioDispatchCallback, {\n root: null,\n rootMargin: '0px'\n });\n }\n return intersectionObserver;\n};\nfunction getClientInfo(capabilities) {\n var _a;\n const info = new ClientInfo({\n capabilities,\n sdk: ClientInfo_SDK.JS,\n protocol: protocolVersion,\n clientProtocol,\n version\n });\n if (isReactNative()) {\n info.os = (_a = getReactNativeOs()) !== null && _a !== void 0 ? _a : '';\n }\n return info;\n}\nlet emptyVideoStreamTrack;\nfunction getEmptyVideoStreamTrack() {\n if (!emptyVideoStreamTrack) {\n emptyVideoStreamTrack = createDummyVideoStreamTrack();\n }\n return emptyVideoStreamTrack.clone();\n}\nfunction createDummyVideoStreamTrack() {\n let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;\n let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n let enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n let paintContent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n const canvas = document.createElement('canvas');\n // the canvas size is set to 16 by default, because electron apps seem to fail with smaller values\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n ctx === null || ctx === void 0 ? void 0 : ctx.fillRect(0, 0, canvas.width, canvas.height);\n if (paintContent && ctx) {\n ctx.beginPath();\n ctx.arc(width / 2, height / 2, 50, 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fillStyle = 'grey';\n ctx.fill();\n }\n // @ts-ignore\n const dummyStream = canvas.captureStream();\n const _dummyStream$getTrack = dummyStream.getTracks(),\n _dummyStream$getTrack2 = _slicedToArray(_dummyStream$getTrack, 1),\n dummyTrack = _dummyStream$getTrack2[0];\n if (!dummyTrack) {\n throw Error('Could not get empty media stream video track');\n }\n dummyTrack.enabled = enabled;\n return dummyTrack;\n}\nlet emptyAudioStreamTrack;\nfunction getEmptyAudioStreamTrack() {\n if (!emptyAudioStreamTrack) {\n // implementation adapted from https://blog.mozilla.org/webrtc/warm-up-with-replacetrack/\n const ctx = new AudioContext();\n const oscillator = ctx.createOscillator();\n const gain = ctx.createGain();\n gain.gain.setValueAtTime(0, 0);\n const dst = ctx.createMediaStreamDestination();\n oscillator.connect(gain);\n gain.connect(dst);\n oscillator.start();\n var _dst$stream$getAudioT = dst.stream.getAudioTracks();\n var _dst$stream$getAudioT2 = _slicedToArray(_dst$stream$getAudioT, 1);\n emptyAudioStreamTrack = _dst$stream$getAudioT2[0];\n if (!emptyAudioStreamTrack) {\n throw Error('Could not get empty media stream audio track');\n }\n emptyAudioStreamTrack.enabled = false;\n }\n return emptyAudioStreamTrack.clone();\n}\n/** An object that represents a serialized version of a `new Promise((resolve, reject) => {})`\n * constructor. Wait for a promise resolution with `await future.promise` and explicitly resolve or\n * reject the inner promise with `future.resolve(...)` or `future.reject(...)`.\n */\nclass Future {\n get isResolved() {\n return this._isResolved;\n }\n constructor(futureBase, onFinally) {\n this._isResolved = false;\n this.onFinally = onFinally;\n this.promise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n this.resolve = resolve;\n this.reject = reject;\n if (futureBase) {\n yield futureBase(resolve, reject);\n }\n })).finally(() => {\n var _a;\n this._isResolved = true;\n (_a = this.onFinally) === null || _a === void 0 ? void 0 : _a.call(this);\n });\n }\n}\n/**\n * Creates and returns an analyser web audio node that is attached to the provided track.\n * Additionally returns a convenience method `calculateVolume` to perform instant volume readings on that track.\n * Call the returned `cleanup` function to close the audioContext that has been created for the instance of this helper\n */\nfunction createAudioAnalyser(track, options) {\n const opts = Object.assign({\n cloneTrack: false,\n fftSize: 2048,\n smoothingTimeConstant: 0.8,\n minDecibels: -100,\n maxDecibels: -80\n }, options);\n const audioContext = getNewAudioContext();\n if (!audioContext) {\n throw new Error('Audio Context not supported on this browser');\n }\n const streamTrack = opts.cloneTrack ? track.mediaStreamTrack.clone() : track.mediaStreamTrack;\n const mediaStreamSource = audioContext.createMediaStreamSource(new MediaStream([streamTrack]));\n const analyser = audioContext.createAnalyser();\n analyser.minDecibels = opts.minDecibels;\n analyser.maxDecibels = opts.maxDecibels;\n analyser.fftSize = opts.fftSize;\n analyser.smoothingTimeConstant = opts.smoothingTimeConstant;\n mediaStreamSource.connect(analyser);\n const dataArray = new Uint8Array(analyser.frequencyBinCount);\n /**\n * Calculates the current volume of the track in the range from 0 to 1\n */\n const calculateVolume = () => {\n analyser.getByteFrequencyData(dataArray);\n let sum = 0;\n for (const amplitude of dataArray) {\n sum += Math.pow(amplitude / 255, 2);\n }\n const volume = Math.sqrt(sum / dataArray.length);\n return volume;\n };\n const cleanup = () => __awaiter(this, void 0, void 0, function* () {\n yield audioContext.close();\n if (opts.cloneTrack) {\n streamTrack.stop();\n }\n });\n return {\n calculateVolume,\n analyser,\n cleanup\n };\n}\nfunction isAudioCodec(maybeCodec) {\n return audioCodecs.includes(maybeCodec);\n}\nfunction isVideoCodec(maybeCodec) {\n return videoCodecs.includes(maybeCodec);\n}\nfunction unwrapConstraint(constraint) {\n if (typeof constraint === 'string' || typeof constraint === 'number') {\n return constraint;\n }\n if (Array.isArray(constraint)) {\n return constraint[0];\n }\n if (constraint.exact !== undefined) {\n if (Array.isArray(constraint.exact)) {\n return constraint.exact[0];\n }\n return constraint.exact;\n }\n if (constraint.ideal !== undefined) {\n if (Array.isArray(constraint.ideal)) {\n return constraint.ideal[0];\n }\n return constraint.ideal;\n }\n throw Error('could not unwrap constraint');\n}\nfunction toWebsocketUrl(url) {\n if (url.startsWith('http')) {\n return url.replace(/^(http)/, 'ws');\n }\n return url;\n}\nfunction toHttpUrl(url) {\n if (url.startsWith('ws')) {\n return url.replace(/^(ws)/, 'http');\n }\n return url;\n}\nfunction extractTranscriptionSegments(transcription, firstReceivedTimesMap) {\n return transcription.segments.map(_ref => {\n let id = _ref.id,\n text = _ref.text,\n language = _ref.language,\n startTime = _ref.startTime,\n endTime = _ref.endTime,\n final = _ref.final;\n var _a;\n const firstReceivedTime = (_a = firstReceivedTimesMap.get(id)) !== null && _a !== void 0 ? _a : Date.now();\n const lastReceivedTime = Date.now();\n if (final) {\n firstReceivedTimesMap.delete(id);\n } else {\n firstReceivedTimesMap.set(id, firstReceivedTime);\n }\n return {\n id,\n text,\n startTime: Number.parseInt(startTime.toString()),\n endTime: Number.parseInt(endTime.toString()),\n final,\n language,\n firstReceivedTime,\n lastReceivedTime\n };\n });\n}\nfunction extractChatMessage(msg) {\n const id = msg.id,\n timestamp = msg.timestamp,\n message = msg.message,\n editTimestamp = msg.editTimestamp;\n return {\n id,\n timestamp: Number.parseInt(timestamp.toString()),\n editTimestamp: editTimestamp ? Number.parseInt(editTimestamp.toString()) : undefined,\n message\n };\n}\nfunction getDisconnectReasonFromConnectionError(e) {\n switch (e.reason) {\n case ConnectionErrorReason.LeaveRequest:\n return e.context;\n case ConnectionErrorReason.Cancelled:\n return DisconnectReason.CLIENT_INITIATED;\n case ConnectionErrorReason.NotAllowed:\n return DisconnectReason.USER_REJECTED;\n case ConnectionErrorReason.ServerUnreachable:\n return DisconnectReason.JOIN_FAILURE;\n default:\n return DisconnectReason.UNKNOWN_REASON;\n }\n}\n/** convert bigints to numbers preserving undefined values */\nfunction bigIntToNumber(value) {\n return value !== undefined ? Number(value) : undefined;\n}\n/** convert numbers to bigints preserving undefined values */\nfunction numberToBigInt(value) {\n return value !== undefined ? BigInt(value) : undefined;\n}\nfunction isLocalTrack(track) {\n return !!track && !(track instanceof MediaStreamTrack) && track.isLocal;\n}\nfunction isAudioTrack(track) {\n return !!track && track.kind == Track.Kind.Audio;\n}\nfunction isVideoTrack(track) {\n return !!track && track.kind == Track.Kind.Video;\n}\nfunction isLocalVideoTrack(track) {\n return isLocalTrack(track) && isVideoTrack(track);\n}\nfunction isLocalAudioTrack(track) {\n return isLocalTrack(track) && isAudioTrack(track);\n}\nfunction isRemoteTrack(track) {\n return !!track && !track.isLocal;\n}\nfunction isRemotePub(pub) {\n return !!pub && !pub.isLocal;\n}\nfunction isRemoteVideoTrack(track) {\n return isRemoteTrack(track) && isVideoTrack(track);\n}\nfunction isLocalParticipant(p) {\n return p.isLocal;\n}\nfunction isRemoteParticipant(p) {\n return !p.isLocal;\n}\nfunction splitUtf8(s, n) {\n // adapted from https://stackoverflow.com/a/6043797\n const result = [];\n let encoded = new TextEncoder().encode(s);\n while (encoded.length > n) {\n let k = n;\n while (k > 0) {\n const byte = encoded[k];\n if (byte !== undefined && (byte & 0xc0) !== 0x80) {\n break;\n }\n k--;\n }\n result.push(encoded.slice(0, k));\n encoded = encoded.slice(k);\n }\n if (encoded.length > 0) {\n result.push(encoded);\n }\n return result;\n}\nfunction extractMaxAgeFromRequestHeaders(headers) {\n var _a;\n const cacheControl = headers.get('Cache-Control');\n if (cacheControl) {\n const maxAge = (_a = cacheControl.match(/(?:^|[,\\s])max-age=(\\d+)/)) === null || _a === void 0 ? void 0 : _a[1];\n if (maxAge) {\n return parseInt(maxAge, 10);\n }\n }\n return undefined;\n}\nfunction isCompressionStreamSupported() {\n return typeof CompressionStream !== 'undefined';\n}\nfunction isPublisherOfferWithJoinSupported() {\n // we have connectivity issue about publisher offer with join on firefox #1919\n return isCompressionStreamSupported() && !isFireFox();\n}function createRtcUrl(url, searchParams) {\n let useV0Path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n const v0Url = createV0RtcUrl(url, searchParams);\n if (useV0Path) {\n return v0Url;\n } else {\n return appendUrlPath(v0Url, 'v1');\n }\n}\nfunction createV0RtcUrl(url, searchParams) {\n const urlObj = new URL(toWebsocketUrl(url));\n searchParams.forEach((value, key) => {\n urlObj.searchParams.set(key, value);\n });\n return appendUrlPath(urlObj, 'rtc');\n}\nfunction createValidateUrl(rtcWsUrl) {\n const urlObj = new URL(toHttpUrl(rtcWsUrl));\n return appendUrlPath(urlObj, 'validate');\n}\nfunction ensureTrailingSlash(path) {\n return path.endsWith('/') ? path : \"\".concat(path, \"/\");\n}\nfunction appendUrlPath(urlObj, path) {\n urlObj.pathname = \"\".concat(ensureTrailingSlash(urlObj.pathname)).concat(path);\n return urlObj;\n}\nfunction parseSignalResponse(value) {\n if (typeof value === 'string') {\n return SignalResponse.fromJson(JSON.parse(value), {\n ignoreUnknownFields: true\n });\n } else if (value instanceof ArrayBuffer) {\n return SignalResponse.fromBinary(new Uint8Array(value));\n }\n throw new Error(\"could not decode websocket message: \".concat(typeof value));\n}\nfunction getAbortReasonAsString(signal) {\n let defaultMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Unknown reason';\n if (!(signal instanceof AbortSignal)) {\n return defaultMessage;\n }\n const reason = signal.reason;\n switch (typeof reason) {\n case 'string':\n return reason;\n case 'object':\n return reason instanceof Error ? reason.message : defaultMessage;\n default:\n return 'toString' in reason ? reason.toString() : defaultMessage;\n }\n}const ENCRYPTION_ALGORITHM = 'AES-GCM';\n// How many consecutive frames can fail decrypting before a particular key gets marked as invalid\nconst DECRYPTION_FAILURE_TOLERANCE = 10;\n// flag set to indicate that e2ee has been setup for sender/receiver;\nconst E2EE_FLAG = 'lk_e2ee';\nconst SALT = 'LKFrameEncryptionKey';\nconst KEY_PROVIDER_DEFAULTS = {\n sharedKey: false,\n ratchetSalt: SALT,\n ratchetWindowSize: 8,\n failureTolerance: DECRYPTION_FAILURE_TOLERANCE,\n keyringSize: 16,\n keySize: 128\n};var KeyProviderEvent;\n(function (KeyProviderEvent) {\n KeyProviderEvent[\"SetKey\"] = \"setKey\";\n /** Event for requesting to ratchet the key used to encrypt the stream */\n KeyProviderEvent[\"RatchetRequest\"] = \"ratchetRequest\";\n /** Emitted when a key is ratcheted. Could be after auto-ratcheting on decryption failure or\n * following a `RatchetRequest`, will contain the ratcheted key material */\n KeyProviderEvent[\"KeyRatcheted\"] = \"keyRatcheted\";\n})(KeyProviderEvent || (KeyProviderEvent = {}));\nvar KeyHandlerEvent;\n(function (KeyHandlerEvent) {\n /** Emitted when a key has been ratcheted. Is emitted when any key has been ratcheted\n * i.e. when the FrameCryptor tried to ratchet when decryption is failing */\n KeyHandlerEvent[\"KeyRatcheted\"] = \"keyRatcheted\";\n})(KeyHandlerEvent || (KeyHandlerEvent = {}));\nvar EncryptionEvent;\n(function (EncryptionEvent) {\n EncryptionEvent[\"ParticipantEncryptionStatusChanged\"] = \"participantEncryptionStatusChanged\";\n EncryptionEvent[\"EncryptionError\"] = \"encryptionError\";\n})(EncryptionEvent || (EncryptionEvent = {}));\nvar CryptorEvent;\n(function (CryptorEvent) {\n CryptorEvent[\"Error\"] = \"cryptorError\";\n})(CryptorEvent || (CryptorEvent = {}));function isE2EESupported() {\n return isInsertableStreamSupported() || isScriptTransformSupported();\n}\nfunction isScriptTransformSupported() {\n // @ts-ignore\n return typeof window !== 'undefined' && typeof window.RTCRtpScriptTransform !== 'undefined';\n}\nfunction isInsertableStreamSupported() {\n return typeof window !== 'undefined' && typeof window.RTCRtpSender !== 'undefined' &&\n // @ts-ignore\n typeof window.RTCRtpSender.prototype.createEncodedStreams !== 'undefined';\n}\nfunction isVideoFrame(frame) {\n return 'type' in frame;\n}\nfunction importKey(keyBytes_1) {\n return __awaiter(this, arguments, void 0, function (keyBytes) {\n let algorithm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n name: ENCRYPTION_ALGORITHM\n };\n let usage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'encrypt';\n return function* () {\n // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey\n return crypto.subtle.importKey('raw', keyBytes, algorithm, false, usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt']);\n }();\n });\n}\nfunction createKeyMaterialFromString(password) {\n return __awaiter(this, void 0, void 0, function* () {\n let enc = new TextEncoder();\n const keyMaterial = yield crypto.subtle.importKey('raw', enc.encode(password), {\n name: 'PBKDF2'\n }, false, ['deriveBits', 'deriveKey']);\n return keyMaterial;\n });\n}\nfunction createKeyMaterialFromBuffer(cryptoBuffer) {\n return __awaiter(this, void 0, void 0, function* () {\n const keyMaterial = yield crypto.subtle.importKey('raw', cryptoBuffer, 'HKDF', false, ['deriveBits', 'deriveKey']);\n return keyMaterial;\n });\n}\nfunction getAlgoOptions(algorithmName, salt) {\n const textEncoder = new TextEncoder();\n const encodedSalt = textEncoder.encode(salt);\n switch (algorithmName) {\n case 'HKDF':\n return {\n name: 'HKDF',\n salt: encodedSalt,\n hash: 'SHA-256',\n info: new ArrayBuffer(128)\n };\n case 'PBKDF2':\n {\n return {\n name: 'PBKDF2',\n salt: encodedSalt,\n hash: 'SHA-256',\n iterations: 100000\n };\n }\n default:\n throw new Error(\"algorithm \".concat(algorithmName, \" is currently unsupported\"));\n }\n}\n/**\n * Derives a set of keys from the master key.\n * See https://tools.ietf.org/html/draft-omara-sframe-00#section-4.3.1\n */\nfunction deriveKeys(material, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const algorithmOptions = getAlgoOptions(material.algorithm.name, options.ratchetSalt);\n // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#HKDF\n // https://developer.mozilla.org/en-US/docs/Web/API/HkdfParams\n const encryptionKey = yield crypto.subtle.deriveKey(algorithmOptions, material, {\n name: ENCRYPTION_ALGORITHM,\n length: options.keySize\n }, false, ['encrypt', 'decrypt']);\n return {\n material,\n encryptionKey\n };\n });\n}\nfunction createE2EEKey() {\n return window.crypto.getRandomValues(new Uint8Array(32));\n}\n/**\n * Ratchets a key. See\n * https://tools.ietf.org/html/draft-omara-sframe-00#section-4.3.5.1\n */\nfunction ratchet(material, salt) {\n return __awaiter(this, void 0, void 0, function* () {\n const algorithmOptions = getAlgoOptions(material.algorithm.name, salt);\n // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveBits\n return crypto.subtle.deriveBits(algorithmOptions, material, 256);\n });\n}\nfunction needsRbspUnescaping(frameData) {\n for (var i = 0; i < frameData.length - 3; i++) {\n if (frameData[i] == 0 && frameData[i + 1] == 0 && frameData[i + 2] == 3) return true;\n }\n return false;\n}\nfunction parseRbsp(stream) {\n const dataOut = [];\n var length = stream.length;\n for (var i = 0; i < stream.length;) {\n // Be careful about over/underflow here. byte_length_ - 3 can underflow, and\n // i + 3 can overflow, but byte_length_ - i can't, because i < byte_length_\n // above, and that expression will produce the number of bytes left in\n // the stream including the byte at i.\n if (length - i >= 3 && !stream[i] && !stream[i + 1] && stream[i + 2] == 3) {\n // Two rbsp bytes.\n dataOut.push(stream[i++]);\n dataOut.push(stream[i++]);\n // Skip the emulation byte.\n i++;\n } else {\n // Single rbsp byte.\n dataOut.push(stream[i++]);\n }\n }\n return new Uint8Array(dataOut);\n}\nconst kZerosInStartSequence = 2;\nconst kEmulationByte = 3;\nfunction writeRbsp(data_in) {\n const dataOut = [];\n var numConsecutiveZeros = 0;\n for (var i = 0; i < data_in.length; ++i) {\n var byte = data_in[i];\n if (byte <= kEmulationByte && numConsecutiveZeros >= kZerosInStartSequence) {\n // Need to escape.\n dataOut.push(kEmulationByte);\n numConsecutiveZeros = 0;\n }\n dataOut.push(byte);\n if (byte == 0) {\n ++numConsecutiveZeros;\n } else {\n numConsecutiveZeros = 0;\n }\n }\n return new Uint8Array(dataOut);\n}\nfunction asEncryptablePacket(packet) {\n var _a, _b, _c, _d, _e;\n if (((_a = packet.value) === null || _a === void 0 ? void 0 : _a.case) !== 'sipDtmf' && ((_b = packet.value) === null || _b === void 0 ? void 0 : _b.case) !== 'metrics' && ((_c = packet.value) === null || _c === void 0 ? void 0 : _c.case) !== 'speaker' && ((_d = packet.value) === null || _d === void 0 ? void 0 : _d.case) !== 'transcription' && ((_e = packet.value) === null || _e === void 0 ? void 0 : _e.case) !== 'encryptedPacket') {\n return new EncryptedPacketPayload({\n value: packet.value\n });\n }\n return undefined;\n}/**\n * @experimental\n */\nclass BaseKeyProvider extends eventsExports.EventEmitter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n super();\n this.latestManuallySetKeyIndex = 0;\n /**\n * Callback being invoked after a key has been ratcheted.\n * Can happen when:\n * - A decryption failure occurs and the key is auto-ratcheted\n * - A ratchet request is sent (see {@link ratchetKey()})\n * @param ratchetResult Contains the ratcheted chain key (exportable to other participants) and the derived new key material.\n * @param participantId\n * @param keyIndex\n */\n this.onKeyRatcheted = (ratchetResult, participantId, keyIndex) => {\n livekitLogger.debug('key ratcheted event received', {\n ratchetResult,\n participantId,\n keyIndex\n });\n };\n this.keyInfoMap = new Map();\n this.options = Object.assign(Object.assign({}, KEY_PROVIDER_DEFAULTS), options);\n this.on(KeyProviderEvent.KeyRatcheted, this.onKeyRatcheted);\n }\n /**\n * callback to invoke once a key has been set for a participant\n * @param key\n * @param participantIdentity\n * @param keyIndex\n */\n onSetEncryptionKey(key, participantIdentity, keyIndex) {\n const keyInfo = {\n key,\n participantIdentity,\n keyIndex\n };\n if (!this.options.sharedKey && !participantIdentity) {\n throw new Error('participant identity needs to be passed for encryption key if sharedKey option is false');\n }\n this.keyInfoMap.set(\"\".concat(participantIdentity !== null && participantIdentity !== void 0 ? participantIdentity : 'shared', \"-\").concat(keyIndex !== null && keyIndex !== void 0 ? keyIndex : 0), keyInfo);\n if (keyIndex !== undefined) {\n this.latestManuallySetKeyIndex = keyIndex;\n }\n this.emit(KeyProviderEvent.SetKey, keyInfo, keyIndex !== undefined);\n }\n getKeys() {\n return Array.from(this.keyInfoMap.values());\n }\n getLatestManuallySetKeyIndex() {\n return this.latestManuallySetKeyIndex;\n }\n getOptions() {\n return this.options;\n }\n ratchetKey(participantIdentity, keyIndex) {\n this.emit(KeyProviderEvent.RatchetRequest, participantIdentity, keyIndex);\n }\n}\n/**\n * A basic KeyProvider implementation intended for a single shared\n * passphrase between all participants\n * @experimental\n */\nclass ExternalE2EEKeyProvider extends BaseKeyProvider {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const opts = Object.assign(Object.assign({}, options), {\n sharedKey: true,\n // for a shared key provider failing to decrypt for a specific participant\n // should not mark the key as invalid, so we accept wrong keys forever\n // and won't try to auto-ratchet\n ratchetWindowSize: 0,\n failureTolerance: -1\n });\n super(opts);\n }\n /**\n * Accepts a passphrase that's used to create the crypto keys.\n * When passing in a string, PBKDF2 is used. (recommended for maximum compatibility across SDKs)\n * When passing in an ArrayBuffer of cryptographically random numbers, HKDF is used.\n *\n * Note: Not all client SDKS support HKDF.\n * @param key\n */\n setKey(key) {\n return __awaiter(this, void 0, void 0, function* () {\n const derivedKey = typeof key === 'string' ? yield createKeyMaterialFromString(key) : yield createKeyMaterialFromBuffer(key);\n this.onSetEncryptionKey(derivedKey);\n });\n }\n}var CryptorErrorReason;\n(function (CryptorErrorReason) {\n CryptorErrorReason[CryptorErrorReason[\"InvalidKey\"] = 0] = \"InvalidKey\";\n CryptorErrorReason[CryptorErrorReason[\"MissingKey\"] = 1] = \"MissingKey\";\n CryptorErrorReason[CryptorErrorReason[\"InternalError\"] = 2] = \"InternalError\";\n})(CryptorErrorReason || (CryptorErrorReason = {}));\nclass CryptorError extends LivekitError {\n constructor(message) {\n let reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CryptorErrorReason.InternalError;\n let participantIdentity = arguments.length > 2 ? arguments[2] : undefined;\n super(40, message);\n this.reason = reason;\n this.participantIdentity = participantIdentity;\n }\n}function shouldUsePacketTrailerScriptTransform() {\n return isScriptTransformSupportedForWorker();\n}\nfunction isPacketTrailerSupported(options) {\n return !!(options === null || options === void 0 ? void 0 : options.worker) && (isInsertableStreamSupported() || shouldUsePacketTrailerScriptTransform());\n}\nfunction hasPacketTrailerPublishOptions(options) {\n return !!((options === null || options === void 0 ? void 0 : options.timestamp) || (options === null || options === void 0 ? void 0 : options.frameId));\n}\nfunction getPacketTrailerFeatures(options) {\n const features = [];\n if (options === null || options === void 0 ? void 0 : options.timestamp) {\n features.push(PacketTrailerFeature.PTF_USER_TIMESTAMP);\n }\n if (options === null || options === void 0 ? void 0 : options.frameId) {\n features.push(PacketTrailerFeature.PTF_FRAME_ID);\n }\n return features;\n}\nfunction getPacketTrailerPublishOptions(features) {\n if (!features || features.length === 0) {\n return undefined;\n }\n const options = {};\n if (features.includes(PacketTrailerFeature.PTF_USER_TIMESTAMP)) {\n options.timestamp = true;\n }\n if (features.includes(PacketTrailerFeature.PTF_FRAME_ID)) {\n options.frameId = true;\n }\n return options.timestamp || options.frameId ? options : undefined;\n}/**\n * Originally from ts-debounce (https://github.com/chodorowicz/ts-debounce)\n * with the following license:\n *\n * MIT License\n *\n * Copyright (c) 2017 Jakub Chodorowicz\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * Modified to use CriticalTimers for reliable timer execution.\n */\n/* eslint-disable @typescript-eslint/no-this-alias, @typescript-eslint/no-unused-expressions, @typescript-eslint/no-shadow */\nfunction debounce(func) {\n let waitMilliseconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _a, _b;\n let timeoutId;\n const isImmediate = (_a = options.isImmediate) !== null && _a !== void 0 ? _a : false;\n const callback = (_b = options.callback) !== null && _b !== void 0 ? _b : false;\n const maxWait = options.maxWait;\n let lastInvokeTime = Date.now();\n let promises = [];\n function nextInvokeTimeout() {\n if (maxWait !== undefined) {\n const timeSinceLastInvocation = Date.now() - lastInvokeTime;\n if (timeSinceLastInvocation + waitMilliseconds >= maxWait) {\n return maxWait - timeSinceLastInvocation;\n }\n }\n return waitMilliseconds;\n }\n const debouncedFunction = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n const context = this;\n return new Promise((resolve, reject) => {\n const invokeFunction = function () {\n timeoutId = undefined;\n lastInvokeTime = Date.now();\n if (!isImmediate) {\n const result = func.apply(context, args);\n callback && callback(result);\n // biome-ignore lint/suspicious/useIterableCallbackReturn: vendored code\n promises.forEach(_ref => {\n let resolve = _ref.resolve;\n return resolve(result);\n });\n promises = [];\n }\n };\n const shouldCallNow = isImmediate && timeoutId === undefined;\n if (timeoutId !== undefined) {\n CriticalTimers.clearTimeout(timeoutId);\n }\n timeoutId = CriticalTimers.setTimeout(invokeFunction, nextInvokeTimeout());\n if (shouldCallNow) {\n const result = func.apply(context, args);\n callback && callback(result);\n return resolve(result);\n }\n promises.push({\n resolve,\n reject\n });\n });\n };\n debouncedFunction.cancel = function (reason) {\n if (timeoutId !== undefined) {\n CriticalTimers.clearTimeout(timeoutId);\n }\n // biome-ignore lint/suspicious/useIterableCallbackReturn: vendored code\n promises.forEach(_ref2 => {\n let reject = _ref2.reject;\n return reject(reason);\n });\n promises = [];\n };\n return debouncedFunction;\n}const monitorFrequency = 2000;\nfunction computeBitrate(currentStats, prevStats) {\n if (!prevStats) {\n return 0;\n }\n let bytesNow;\n let bytesPrev;\n if ('bytesReceived' in currentStats) {\n bytesNow = currentStats.bytesReceived;\n bytesPrev = prevStats.bytesReceived;\n } else if ('bytesSent' in currentStats) {\n bytesNow = currentStats.bytesSent;\n bytesPrev = prevStats.bytesSent;\n }\n if (bytesNow === undefined || bytesPrev === undefined || currentStats.timestamp === undefined || prevStats.timestamp === undefined) {\n return 0;\n }\n return (bytesNow - bytesPrev) * 8 * 1000 / (currentStats.timestamp - prevStats.timestamp);\n}class RemoteTrack extends Track {\n constructor(mediaTrack, sid, kind, receiver, loggerOptions) {\n super(mediaTrack, kind, loggerOptions);\n this.sid = sid;\n this.receiver = receiver;\n }\n get isLocal() {\n return false;\n }\n /** @internal */\n setMuted(muted) {\n if (this.isMuted !== muted) {\n this.isMuted = muted;\n this._mediaStreamTrack.enabled = !muted;\n this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n }\n }\n /** @internal */\n setMediaStream(stream) {\n // this is needed to determine when the track is finished\n this.mediaStream = stream;\n const onRemoveTrack = event => {\n if (event.track === this._mediaStreamTrack) {\n stream.removeEventListener('removetrack', onRemoveTrack);\n if (this.receiver && 'playoutDelayHint' in this.receiver) {\n this.receiver.playoutDelayHint = undefined;\n }\n this.receiver = undefined;\n this._currentBitrate = 0;\n this.emit(TrackEvent.Ended, this);\n }\n };\n stream.addEventListener('removetrack', onRemoveTrack);\n }\n start() {\n this.startMonitor();\n // use `enabled` of track to enable re-use of transceiver\n super.enable();\n }\n stop() {\n this.stopMonitor();\n // use `enabled` of track to enable re-use of transceiver\n super.disable();\n }\n /**\n * Gets the RTCStatsReport for the RemoteTrack's underlying RTCRtpReceiver\n * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport\n *\n * @returns Promise<RTCStatsReport> | undefined\n */\n getRTCStatsReport() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!((_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getStats)) {\n return;\n }\n const statsReport = yield this.receiver.getStats();\n return statsReport;\n });\n }\n /**\n * Allows to set a playout delay (in seconds) for this track.\n * A higher value allows for more buffering of the track in the browser\n * and will result in a delay of media being played back of `delayInSeconds`\n */\n setPlayoutDelay(delayInSeconds) {\n if (this.receiver) {\n if ('playoutDelayHint' in this.receiver) {\n this.receiver.playoutDelayHint = delayInSeconds;\n } else {\n this.log.warn('Playout delay not supported in this browser');\n }\n } else {\n this.log.warn('Cannot set playout delay, track already ended');\n }\n }\n /**\n * Returns the current playout delay (in seconds) of this track.\n */\n getPlayoutDelay() {\n if (this.receiver) {\n if ('playoutDelayHint' in this.receiver) {\n return this.receiver.playoutDelayHint;\n } else {\n this.log.warn('Playout delay not supported in this browser');\n }\n } else {\n this.log.warn('Cannot get playout delay, track already ended');\n }\n return 0;\n }\n /* @internal */\n startMonitor() {\n if (!this.monitorInterval) {\n this.monitorInterval = setInterval(() => this.monitorReceiver(), monitorFrequency);\n }\n if (supportsSynchronizationSources()) {\n this.registerTimeSyncUpdate();\n }\n }\n registerTimeSyncUpdate() {\n const loop = () => {\n var _a;\n this.timeSyncHandle = requestAnimationFrame(() => loop());\n const sources = (_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getSynchronizationSources()[0];\n if (sources) {\n const timestamp = sources.timestamp,\n rtpTimestamp = sources.rtpTimestamp;\n if (rtpTimestamp && this.rtpTimestamp !== rtpTimestamp) {\n this.emit(TrackEvent.TimeSyncUpdate, {\n timestamp,\n rtpTimestamp\n });\n this.rtpTimestamp = rtpTimestamp;\n }\n }\n };\n loop();\n }\n}const REACTION_DELAY = 100;\nclass RemoteVideoTrack extends RemoteTrack {\n constructor(mediaTrack, sid, receiver, adaptiveStreamSettings, loggerOptions) {\n super(mediaTrack, sid, Track.Kind.Video, receiver, loggerOptions);\n this.elementInfos = [];\n this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {\n if (!this.receiver) {\n this._currentBitrate = 0;\n return;\n }\n const stats = yield this.getReceiverStats();\n if (stats && this.prevStats && this.receiver) {\n this._currentBitrate = computeBitrate(stats, this.prevStats);\n }\n this.prevStats = stats;\n });\n this.debouncedHandleResize = debounce(() => {\n this.updateDimensions();\n }, REACTION_DELAY);\n this.adaptiveStreamSettings = adaptiveStreamSettings;\n }\n get isAdaptiveStream() {\n return this.adaptiveStreamSettings !== undefined;\n }\n /**\n * Look up frame-level metadata for a given RTP timestamp.\n * Use with the `TrackEvent.TimeSyncUpdate` event to correlate displayed frames\n * with their capture-time metadata.\n *\n * Requires the room to be configured with the `packetTrailer` worker option\n * and the publishing track to have packet trailer features enabled.\n *\n */\n lookupFrameMetadata(_ref) {\n let rtpTimestamp = _ref.rtpTimestamp;\n var _a;\n return (_a = this.packetTrailerExtractor) === null || _a === void 0 ? void 0 : _a.lookupMetadata(rtpTimestamp);\n }\n setStreamState(value) {\n super.setStreamState(value);\n this.log.debug('setStreamState', value);\n if (this.isAdaptiveStream && value === Track.StreamState.Active) {\n // update visibility for adaptive stream tracks when stream state received from server is active\n // this is needed to ensure the track is stopped when there's no element attached to it at all\n this.updateVisibility();\n }\n }\n /**\n * Note: When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start\n */\n get mediaStreamTrack() {\n return this._mediaStreamTrack;\n }\n /** @internal */\n setMuted(muted) {\n super.setMuted(muted);\n this.attachedElements.forEach(element => {\n // detach or attach\n if (muted) {\n detachTrack(this._mediaStreamTrack, element);\n } else {\n attachToElement(this._mediaStreamTrack, element);\n }\n });\n }\n attach(element) {\n if (!element) {\n element = super.attach();\n } else {\n super.attach(element);\n }\n // It's possible attach is called multiple times on an element. When that's\n // the case, we'd want to avoid adding duplicate elementInfos\n if (this.adaptiveStreamSettings && this.elementInfos.find(info => info.element === element) === undefined) {\n const elementInfo = new HTMLElementInfo(element);\n this.observeElementInfo(elementInfo);\n }\n return element;\n }\n /**\n * Observe an ElementInfo for changes when adaptive streaming.\n * @param elementInfo\n * @internal\n */\n observeElementInfo(elementInfo) {\n if (this.adaptiveStreamSettings && this.elementInfos.find(info => info === elementInfo) === undefined) {\n elementInfo.handleResize = () => {\n this.debouncedHandleResize();\n };\n elementInfo.handleVisibilityChanged = () => {\n this.updateVisibility();\n };\n this.elementInfos.push(elementInfo);\n elementInfo.observe();\n // trigger the first resize update cycle\n // if the tab is backgrounded, the initial resize event does not fire until\n // the tab comes into focus for the first time.\n this.debouncedHandleResize();\n this.updateVisibility();\n } else {\n this.log.warn('visibility resize observer not triggered', this.logContext);\n }\n }\n /**\n * Stop observing an ElementInfo for changes.\n * @param elementInfo\n * @internal\n */\n stopObservingElementInfo(elementInfo) {\n if (!this.isAdaptiveStream) {\n this.log.warn('stopObservingElementInfo ignored', this.logContext);\n return;\n }\n const stopElementInfos = this.elementInfos.filter(info => info === elementInfo);\n for (const info of stopElementInfos) {\n info.stopObserving();\n }\n this.elementInfos = this.elementInfos.filter(info => info !== elementInfo);\n this.updateVisibility();\n this.debouncedHandleResize();\n }\n detach(element) {\n if (element) {\n this.stopObservingElement(element);\n return super.detach(element);\n }\n const detachedElements = super.detach();\n for (const e of detachedElements) {\n this.stopObservingElement(e);\n }\n return detachedElements;\n }\n /** @internal */\n getDecoderImplementation() {\n var _a;\n return (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.decoderImplementation;\n }\n getReceiverStats() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.receiver || !this.receiver.getStats) {\n return;\n }\n const stats = yield this.receiver.getStats();\n let receiverStats;\n let codecID = '';\n let codecs = new Map();\n stats.forEach(v => {\n if (v.type === 'inbound-rtp') {\n codecID = v.codecId;\n receiverStats = {\n type: 'video',\n streamId: v.id,\n framesDecoded: v.framesDecoded,\n framesDropped: v.framesDropped,\n framesReceived: v.framesReceived,\n packetsReceived: v.packetsReceived,\n packetsLost: v.packetsLost,\n frameWidth: v.frameWidth,\n frameHeight: v.frameHeight,\n pliCount: v.pliCount,\n firCount: v.firCount,\n nackCount: v.nackCount,\n jitter: v.jitter,\n timestamp: v.timestamp,\n bytesReceived: v.bytesReceived,\n decoderImplementation: v.decoderImplementation\n };\n } else if (v.type === 'codec') {\n codecs.set(v.id, v);\n }\n });\n if (receiverStats && codecID !== '' && codecs.get(codecID)) {\n receiverStats.mimeType = codecs.get(codecID).mimeType;\n }\n return receiverStats;\n });\n }\n stopObservingElement(element) {\n const stopElementInfos = this.elementInfos.filter(info => info.element === element);\n for (const info of stopElementInfos) {\n this.stopObservingElementInfo(info);\n }\n }\n handleAppVisibilityChanged() {\n const _super = Object.create(null, {\n handleAppVisibilityChanged: {\n get: () => super.handleAppVisibilityChanged\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.handleAppVisibilityChanged.call(this);\n if (!this.isAdaptiveStream) return;\n this.updateVisibility();\n });\n }\n updateVisibility(forceEmit) {\n var _a, _b;\n const lastVisibilityChange = this.elementInfos.reduce((prev, info) => Math.max(prev, info.visibilityChangedAt || 0), 0);\n const backgroundPause = ((_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pauseVideoInBackground) !== null && _b !== void 0 ? _b : true // default to true\n ) ? this.isInBackground : false;\n const isPiPMode = this.elementInfos.some(info => info.pictureInPicture);\n const isVisible = this.elementInfos.some(info => info.visible) && !backgroundPause || isPiPMode;\n if (this.lastVisible === isVisible && !forceEmit) {\n return;\n }\n if (!isVisible && Date.now() - lastVisibilityChange < REACTION_DELAY) {\n // delay hidden events\n CriticalTimers.setTimeout(() => {\n this.updateVisibility();\n }, REACTION_DELAY);\n return;\n }\n this.lastVisible = isVisible;\n this.emit(TrackEvent.VisibilityChanged, isVisible, this);\n }\n updateDimensions() {\n var _a, _b;\n let maxWidth = 0;\n let maxHeight = 0;\n const pixelDensity = this.getPixelDensity();\n for (const info of this.elementInfos) {\n const currentElementWidth = info.width() * pixelDensity;\n const currentElementHeight = info.height() * pixelDensity;\n if (currentElementWidth + currentElementHeight > maxWidth + maxHeight) {\n maxWidth = currentElementWidth;\n maxHeight = currentElementHeight;\n }\n }\n if (((_a = this.lastDimensions) === null || _a === void 0 ? void 0 : _a.width) === maxWidth && ((_b = this.lastDimensions) === null || _b === void 0 ? void 0 : _b.height) === maxHeight) {\n return;\n }\n this.lastDimensions = {\n width: maxWidth,\n height: maxHeight\n };\n this.emit(TrackEvent.VideoDimensionsChanged, this.lastDimensions, this);\n }\n getPixelDensity() {\n var _a;\n const pixelDensity = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pixelDensity;\n if (pixelDensity === 'screen') {\n return getDevicePixelRatio();\n } else if (!pixelDensity) {\n // when unset, we'll pick a sane default here.\n // for higher pixel density devices (mobile phones, etc), we'll use 2\n // otherwise it defaults to 1\n const devicePixelRatio = getDevicePixelRatio();\n if (devicePixelRatio > 2) {\n return 2;\n } else {\n return 1;\n }\n }\n return pixelDensity;\n }\n}\nclass HTMLElementInfo {\n get visible() {\n return this.isPiP || this.isIntersecting;\n }\n get pictureInPicture() {\n return this.isPiP;\n }\n constructor(element, visible) {\n this.onVisibilityChanged = entry => {\n var _a;\n const target = entry.target,\n isIntersecting = entry.isIntersecting;\n if (target === this.element) {\n this.isIntersecting = isIntersecting;\n this.isPiP = isElementInPiP(this.element);\n this.visibilityChangedAt = Date.now();\n (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n };\n this.onEnterPiP = () => {\n var _a, _b;\n (_b = (_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.addEventListener('pagehide', this.onLeavePiP);\n // Document PiP: the browser may fire 'enter' before the app has appended its subtree into\n // documentPictureInPicture.window. Defer so pipWin.document.contains(video) is reliable.\n queueMicrotask(() => {\n requestAnimationFrame(() => {\n var _a;\n this.isPiP = isElementInPiP(this.element);\n (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n });\n });\n };\n this.onLeavePiP = () => {\n var _a;\n this.isPiP = isElementInPiP(this.element);\n (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n };\n this.element = element;\n this.isIntersecting = visible !== null && visible !== void 0 ? visible : isElementInViewport(element);\n this.isPiP = isWeb() && isElementInPiP(element);\n this.visibilityChangedAt = 0;\n }\n width() {\n return this.element.clientWidth;\n }\n height() {\n return this.element.clientHeight;\n }\n observe() {\n var _a, _b, _c;\n // make sure we update the current visible state once we start to observe\n this.isIntersecting = isElementInViewport(this.element);\n this.isPiP = isElementInPiP(this.element);\n this.element.handleResize = () => {\n var _a;\n (_a = this.handleResize) === null || _a === void 0 ? void 0 : _a.call(this);\n };\n this.element.handleVisibilityChanged = this.onVisibilityChanged;\n getIntersectionObserver().observe(this.element);\n getResizeObserver().observe(this.element);\n this.element.addEventListener('enterpictureinpicture', this.onEnterPiP);\n this.element.addEventListener('leavepictureinpicture', this.onLeavePiP);\n (_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.addEventListener('enter', this.onEnterPiP);\n (_c = (_b = window.documentPictureInPicture) === null || _b === void 0 ? void 0 : _b.window) === null || _c === void 0 ? void 0 : _c.addEventListener('pagehide', this.onLeavePiP);\n }\n stopObserving() {\n var _a, _b, _c, _d, _e;\n (_a = getIntersectionObserver()) === null || _a === void 0 ? void 0 : _a.unobserve(this.element);\n (_b = getResizeObserver()) === null || _b === void 0 ? void 0 : _b.unobserve(this.element);\n this.element.removeEventListener('enterpictureinpicture', this.onEnterPiP);\n this.element.removeEventListener('leavepictureinpicture', this.onLeavePiP);\n (_c = window.documentPictureInPicture) === null || _c === void 0 ? void 0 : _c.removeEventListener('enter', this.onEnterPiP);\n (_e = (_d = window.documentPictureInPicture) === null || _d === void 0 ? void 0 : _d.window) === null || _e === void 0 ? void 0 : _e.removeEventListener('pagehide', this.onLeavePiP);\n }\n}\nfunction isElementInPiP(el) {\n var _a, _b;\n // Simple video PiP\n if (document.pictureInPictureElement === el) return true;\n // Document PiP\n if ((_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.window) return isElementInViewport(el, (_b = window.documentPictureInPicture) === null || _b === void 0 ? void 0 : _b.window);\n return false;\n}\n// does not account for occlusion by other elements or opacity property\nfunction isElementInViewport(el, win) {\n const viewportWindow = win || window;\n let top = el.offsetTop;\n let left = el.offsetLeft;\n const width = el.offsetWidth;\n const height = el.offsetHeight;\n const _el = el,\n hidden = _el.hidden;\n const _getComputedStyle = getComputedStyle(el),\n display = _getComputedStyle.display;\n while (el.offsetParent) {\n el = el.offsetParent;\n top += el.offsetTop;\n left += el.offsetLeft;\n }\n return top < viewportWindow.pageYOffset + viewportWindow.innerHeight && left < viewportWindow.pageXOffset + viewportWindow.innerWidth && top + height > viewportWindow.pageYOffset && left + width > viewportWindow.pageXOffset && !hidden && display !== 'none';\n}/**\n * @experimental\n */\nclass E2EEManager extends eventsExports.EventEmitter {\n constructor(options, dcEncryptionEnabled) {\n super();\n this.decryptDataRequests = new Map();\n this.encryptDataRequests = new Map();\n this.onWorkerMessage = ev => {\n var _a, _b;\n const _ev$data = ev.data,\n kind = _ev$data.kind,\n data = _ev$data.data;\n switch (kind) {\n case 'error':\n livekitLogger.error(data.error.message);\n // If error has uuid, it's from an async operation (encrypt/decrypt)\n // Reject the corresponding future\n if (data.uuid) {\n const decryptFuture = this.decryptDataRequests.get(data.uuid);\n if (decryptFuture === null || decryptFuture === void 0 ? void 0 : decryptFuture.reject) {\n decryptFuture.reject(data.error);\n break; // Don't emit general error if it's handled by future\n }\n const encryptFuture = this.encryptDataRequests.get(data.uuid);\n if (encryptFuture === null || encryptFuture === void 0 ? void 0 : encryptFuture.reject) {\n encryptFuture.reject(data.error);\n break; // Don't emit general error if it's handled by future\n }\n }\n // Emit general error event for unhandled errors\n this.emit(EncryptionEvent.EncryptionError, data.error, data.participantIdentity);\n break;\n case 'initAck':\n if (data.enabled) {\n this.keyProvider.getKeys().forEach(keyInfo => {\n this.postKey(keyInfo, false);\n });\n }\n break;\n case 'enable':\n if (data.enabled) {\n this.keyProvider.getKeys().forEach(keyInfo => {\n this.postKey(keyInfo, false);\n });\n }\n if (this.encryptionEnabled !== data.enabled && data.participantIdentity === ((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity)) {\n this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, data.enabled, this.room.localParticipant);\n this.encryptionEnabled = data.enabled;\n } else if (data.participantIdentity) {\n const participant = (_b = this.room) === null || _b === void 0 ? void 0 : _b.getParticipantByIdentity(data.participantIdentity);\n if (!participant) {\n throw TypeError(\"couldn't set encryption status, participant not found\".concat(data.participantIdentity));\n }\n this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, data.enabled, participant);\n }\n break;\n case 'ratchetKey':\n this.keyProvider.emit(KeyProviderEvent.KeyRatcheted, data.ratchetResult, data.participantIdentity, data.keyIndex);\n break;\n case 'decryptDataResponse':\n const decryptFuture = this.decryptDataRequests.get(data.uuid);\n if (decryptFuture === null || decryptFuture === void 0 ? void 0 : decryptFuture.resolve) {\n decryptFuture.resolve(data);\n }\n break;\n case 'encryptDataResponse':\n const encryptFuture = this.encryptDataRequests.get(data.uuid);\n if (encryptFuture === null || encryptFuture === void 0 ? void 0 : encryptFuture.resolve) {\n encryptFuture.resolve(data);\n }\n break;\n case 'packetTrailerMetadata':\n this.handlePacketTrailerMetadata(data.trackId, data.rtpTimestamp, data.ssrc, data.metadata);\n break;\n }\n };\n this.onWorkerError = ev => {\n livekitLogger.error('e2ee worker encountered an error:', {\n error: ev.error\n });\n this.emit(EncryptionEvent.EncryptionError, ev.error, undefined);\n };\n this.keyProvider = options.keyProvider;\n this.worker = options.worker;\n this.encryptionEnabled = false;\n this.dataChannelEncryptionEnabled = dcEncryptionEnabled;\n }\n get isEnabled() {\n return this.encryptionEnabled;\n }\n get isDataChannelEncryptionEnabled() {\n return this.isEnabled && this.dataChannelEncryptionEnabled;\n }\n /**\n * @internal\n */\n setup(room) {\n if (!isE2EESupported()) {\n throw new DeviceUnsupportedError('tried to setup end-to-end encryption on an unsupported browser');\n }\n livekitLogger.info('setting up e2ee');\n if (room !== this.room) {\n this.room = room;\n this.setupEventListeners(room, this.keyProvider);\n // this.worker = new Worker('');\n const msg = {\n kind: 'init',\n data: {\n keyProviderOptions: this.keyProvider.getOptions(),\n loglevel: workerLogger.getLevel()\n }\n };\n if (this.worker) {\n livekitLogger.info(\"initializing worker\", {\n worker: this.worker\n });\n this.worker.onmessage = this.onWorkerMessage;\n this.worker.onerror = this.onWorkerError;\n this.worker.postMessage(msg);\n }\n }\n }\n /**\n * @internal\n */\n setParticipantCryptorEnabled(enabled, participantIdentity) {\n livekitLogger.debug(\"set e2ee to \".concat(enabled, \" for participant \").concat(participantIdentity));\n this.postEnable(enabled, participantIdentity);\n }\n /**\n * @internal\n */\n setSifTrailer(trailer) {\n if (!trailer || trailer.length === 0) {\n livekitLogger.warn(\"ignoring server sent trailer as it's empty\");\n } else {\n this.postSifTrailer(trailer);\n }\n }\n handlePacketTrailerMetadata(trackId, rtpTimestamp, ssrc, metadata) {\n if (!this.room) {\n return;\n }\n for (const participant of [this.room.localParticipant, ...this.room.remoteParticipants.values()]) {\n for (const pub of participant.trackPublications.values()) {\n if (pub.track && pub.track.mediaStreamID === trackId && pub.track instanceof RemoteVideoTrack && pub.track.packetTrailerExtractor) {\n pub.track.packetTrailerExtractor.storeMetadata(rtpTimestamp, ssrc, metadata);\n return;\n }\n }\n }\n }\n setupEngine(engine) {\n engine.on(EngineEvent.RTPVideoMapUpdate, rtpMap => {\n this.postRTPMap(rtpMap);\n });\n }\n setupEventListeners(room, keyProvider) {\n room.on(RoomEvent.TrackPublished, (pub, participant) => this.setParticipantCryptorEnabled(pub.trackInfo.encryption !== Encryption_Type.NONE, participant.identity));\n room.on(RoomEvent.ConnectionStateChanged, state => {\n if (state === ConnectionState.Connected) {\n room.remoteParticipants.forEach(participant => {\n participant.trackPublications.forEach(pub => {\n this.setParticipantCryptorEnabled(pub.trackInfo.encryption !== Encryption_Type.NONE, participant.identity);\n });\n });\n }\n }).on(RoomEvent.TrackUnsubscribed, (track, _, participant) => {\n var _a;\n const msg = {\n kind: 'removeTransform',\n data: {\n participantIdentity: participant.identity,\n trackId: track.mediaStreamID\n }\n };\n (_a = this.worker) === null || _a === void 0 ? void 0 : _a.postMessage(msg);\n }).on(RoomEvent.TrackSubscribed, (track, pub, participant) => {\n this.setupE2EEReceiver(track, participant.identity, pub.trackInfo);\n }).on(RoomEvent.SignalConnected, () => {\n if (!this.room) {\n throw new TypeError(\"expected room to be present on signal connect\");\n }\n const latestKeyIndex = keyProvider.getLatestManuallySetKeyIndex();\n keyProvider.getKeys().forEach(keyInfo => {\n var _a;\n this.postKey(keyInfo, latestKeyIndex === ((_a = keyInfo.keyIndex) !== null && _a !== void 0 ? _a : 0));\n });\n this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled, this.room.localParticipant.identity);\n });\n room.localParticipant.on(ParticipantEvent.LocalSenderCreated, (sender, track) => __awaiter(this, void 0, void 0, function* () {\n this.setupE2EESender(track, sender);\n }));\n room.localParticipant.on(ParticipantEvent.LocalTrackPublished, publication => {\n // Safari doesn't support retrieving payload information on RTCEncodedVideoFrame, so we need to update the codec manually once we have the trackInfo from the server\n if (!isVideoTrack(publication.track) || !isSafariBased()) {\n return;\n }\n const msg = {\n kind: 'updateCodec',\n data: {\n trackId: publication.track.mediaStreamID,\n codec: mimeTypeToVideoCodecString(publication.trackInfo.codecs[0].mimeType),\n participantIdentity: this.room.localParticipant.identity,\n hasPacketTrailer: false\n }\n };\n this.worker.postMessage(msg);\n });\n keyProvider.on(KeyProviderEvent.SetKey, (keyInfo, updateCurrentKeyIndex) => this.postKey(keyInfo, updateCurrentKeyIndex !== null && updateCurrentKeyIndex !== void 0 ? updateCurrentKeyIndex : true)).on(KeyProviderEvent.RatchetRequest, (participantId, keyIndex) => this.postRatchetRequest(participantId, keyIndex));\n }\n encryptData(data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.worker) {\n throw Error('could not encrypt data, worker is missing');\n }\n const uuid = crypto.randomUUID();\n const msg = {\n kind: 'encryptDataRequest',\n data: {\n uuid,\n payload: data,\n participantIdentity: this.room.localParticipant.identity\n }\n };\n const future = new Future();\n future.onFinally = () => {\n this.encryptDataRequests.delete(uuid);\n };\n this.encryptDataRequests.set(uuid, future);\n this.worker.postMessage(msg);\n return future.promise;\n });\n }\n handleEncryptedData(payload, iv, participantIdentity, keyIndex) {\n if (!this.worker) {\n throw Error('could not handle encrypted data, worker is missing');\n }\n const uuid = crypto.randomUUID();\n const msg = {\n kind: 'decryptDataRequest',\n data: {\n uuid,\n payload,\n iv,\n participantIdentity,\n keyIndex\n }\n };\n const future = new Future();\n future.onFinally = () => {\n this.decryptDataRequests.delete(uuid);\n };\n this.decryptDataRequests.set(uuid, future);\n this.worker.postMessage(msg);\n return future.promise;\n }\n postRatchetRequest(participantIdentity, keyIndex) {\n if (!this.worker) {\n throw Error('could not ratchet key, worker is missing');\n }\n const msg = {\n kind: 'ratchetRequest',\n data: {\n participantIdentity: participantIdentity,\n keyIndex\n }\n };\n this.worker.postMessage(msg);\n }\n postKey(_ref, updateCurrentKeyIndex) {\n let key = _ref.key,\n participantIdentity = _ref.participantIdentity,\n keyIndex = _ref.keyIndex;\n var _a;\n if (!this.worker) {\n throw Error('could not set key, worker is missing');\n }\n const msg = {\n kind: 'setKey',\n data: {\n participantIdentity: participantIdentity,\n isPublisher: participantIdentity === ((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity),\n key,\n keyIndex,\n updateCurrentKeyIndex\n }\n };\n this.worker.postMessage(msg);\n }\n postEnable(enabled, participantIdentity) {\n if (this.worker) {\n const enableMsg = {\n kind: 'enable',\n data: {\n enabled,\n participantIdentity\n }\n };\n this.worker.postMessage(enableMsg);\n } else {\n throw new ReferenceError('failed to enable e2ee, worker is not ready');\n }\n }\n postRTPMap(map) {\n var _a;\n if (!this.worker) {\n throw TypeError('could not post rtp map, worker is missing');\n }\n if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity)) {\n throw TypeError('could not post rtp map, local participant identity is missing');\n }\n const msg = {\n kind: 'setRTPMap',\n data: {\n map,\n participantIdentity: this.room.localParticipant.identity\n }\n };\n this.worker.postMessage(msg);\n }\n postSifTrailer(trailer) {\n if (!this.worker) {\n throw Error('could not post SIF trailer, worker is missing');\n }\n const msg = {\n kind: 'setSifTrailer',\n data: {\n trailer\n }\n };\n this.worker.postMessage(msg);\n }\n setupE2EEReceiver(track, remoteId, trackInfo) {\n if (!track.receiver) {\n return;\n }\n if (!(trackInfo === null || trackInfo === void 0 ? void 0 : trackInfo.mimeType) || trackInfo.mimeType === '') {\n throw new TypeError('MimeType missing from trackInfo, cannot set up E2EE cryptor');\n }\n const hasPacketTrailer = track.kind === 'video' && !!trackInfo.packetTrailerFeatures && trackInfo.packetTrailerFeatures.length > 0;\n this.handleReceiver(track.receiver, track.mediaStreamID, remoteId, track.kind === 'video' ? mimeTypeToVideoCodecString(trackInfo.mimeType) : undefined, hasPacketTrailer);\n }\n setupE2EESender(track, sender) {\n var _a;\n if (!isLocalTrack(track) || !sender) {\n if (!sender) livekitLogger.warn('early return because sender is not ready');\n return;\n }\n this.handleSender(sender, track.mediaStreamID, undefined, isVideoTrack(track) ? (_a = track.publishOptions) === null || _a === void 0 ? void 0 : _a.packetTrailer : undefined);\n }\n /**\n * Handles the given {@code RTCRtpReceiver} by creating a {@code TransformStream} which will inject\n * a frame decoder.\n *\n */\n handleReceiver(receiver, trackId, participantIdentity, codec, hasPacketTrailer) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.worker) {\n return;\n }\n if (isScriptTransformSupportedForWorker()) {\n const options = {\n kind: 'decode',\n participantIdentity,\n trackId,\n codec,\n hasPacketTrailer\n };\n // @ts-ignore\n receiver.transform = new RTCRtpScriptTransform(this.worker, options);\n } else {\n if (E2EE_FLAG in receiver && codec) {\n // update track-specific state when the transceiver is reused\n const msg = {\n kind: 'updateCodec',\n data: {\n trackId,\n codec,\n participantIdentity,\n hasPacketTrailer\n }\n };\n this.worker.postMessage(msg);\n return;\n }\n // @ts-ignore\n let writable = receiver.writableStream;\n // @ts-ignore\n let readable = receiver.readableStream;\n if (!writable || !readable) {\n // @ts-ignore\n const receiverStreams = receiver.createEncodedStreams();\n // @ts-ignore\n receiver.writableStream = receiverStreams.writable;\n writable = receiverStreams.writable;\n // @ts-ignore\n receiver.readableStream = receiverStreams.readable;\n readable = receiverStreams.readable;\n }\n const msg = {\n kind: 'decode',\n data: {\n readableStream: readable,\n writableStream: writable,\n trackId: trackId,\n codec,\n participantIdentity: participantIdentity,\n isReuse: E2EE_FLAG in receiver,\n hasPacketTrailer\n }\n };\n this.worker.postMessage(msg, [readable, writable]);\n }\n // @ts-ignore\n receiver[E2EE_FLAG] = true;\n });\n }\n /**\n * Handles the given {@code RTCRtpSender} by creating a {@code TransformStream} which will inject\n * a frame encoder.\n *\n */\n handleSender(sender, trackId, codec, packetTrailer) {\n var _a;\n if (E2EE_FLAG in sender || !this.worker) {\n return;\n }\n if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity) || this.room.localParticipant.identity === '') {\n throw TypeError('local identity needs to be known in order to set up encrypted sender');\n }\n if (isScriptTransformSupportedForWorker()) {\n livekitLogger.info('initialize script transform');\n const options = {\n kind: 'encode',\n participantIdentity: this.room.localParticipant.identity,\n trackId,\n codec,\n hasPacketTrailer: hasPacketTrailerPublishOptions(packetTrailer),\n packetTrailer\n };\n // @ts-ignore\n sender.transform = new RTCRtpScriptTransform(this.worker, options);\n } else {\n livekitLogger.info('initialize encoded streams');\n // @ts-ignore\n const senderStreams = sender.createEncodedStreams();\n const msg = {\n kind: 'encode',\n data: {\n readableStream: senderStreams.readable,\n writableStream: senderStreams.writable,\n codec,\n trackId,\n participantIdentity: this.room.localParticipant.identity,\n isReuse: false,\n hasPacketTrailer: hasPacketTrailerPublishOptions(packetTrailer),\n packetTrailer\n }\n };\n this.worker.postMessage(msg, [senderStreams.readable, senderStreams.writable]);\n }\n // @ts-ignore\n sender[E2EE_FLAG] = true;\n }\n}const MAX_ENTRIES = 300;\n/**\n * Caches packet trailer metadata extracted from received video frames,\n * keyed by RTP timestamp so it can be looked up when the frame is displayed.\n *\n * Metadata is populated either by the packet trailer worker managed by\n * `PacketTrailerManager` (non-E2EE) or by the E2EE FrameCryptor worker\n * after decryption (E2EE).\n *\n * @experimental\n */\nclass PacketTrailerExtractor {\n constructor() {\n this.metadataMap = new Map();\n this.activeSsrc = 0;\n }\n storeMetadata(rtpTimestamp, ssrc, metadata) {\n // Simulcast layer switch: SSRC changed, flush stale entries from old layer.\n if (this.activeSsrc !== 0 && this.activeSsrc !== ssrc) {\n this.metadataMap.clear();\n }\n this.activeSsrc = ssrc;\n while (this.metadataMap.size >= MAX_ENTRIES) {\n const evicted = this.metadataMap.keys().next().value;\n this.metadataMap.delete(evicted);\n }\n this.metadataMap.set(rtpTimestamp, metadata);\n }\n lookupMetadata(rtpTimestamp) {\n return this.metadataMap.get(rtpTimestamp);\n }\n dispose() {\n this.metadataMap.clear();\n this.activeSsrc = 0;\n }\n}/**\n * Manages packet trailer extraction for received video tracks.\n *\n * When a track's TrackInfo indicates packet trailer features, the manager\n * wires up an encoded frame transform to strip the trailer from encoded frames\n * and cache the metadata for lookup.\n *\n * Packet trailer extraction is worker-only. If no worker is configured, the\n * SDK does not advertise packet trailer support and skips extraction.\n *\n * When E2EE is active, the E2EE FrameCryptor worker handles trailer\n * extraction directly (before decryption), so this manager only creates\n * the extractor/metadata cache — no separate pipeline is installed.\n *\n * @experimental\n */\nclass PacketTrailerManager {\n constructor(options) {\n this.extractors = new Map();\n /**\n * Tracks the trackId associated with each receiver that has had its\n * encoded streams handed off to the worker. Used to detect receiver\n * reuse (transceiver recycling) so we can remap trackIds instead of\n * re-transferring already-consumed streams.\n */\n this.workerPipelines = new Map();\n this.onWorkerMessage = ev => {\n const msg = ev.data;\n if (msg.kind === 'metadata') {\n const extractor = this.extractors.get(msg.data.trackId);\n if (extractor) {\n extractor.storeMetadata(msg.data.rtpTimestamp, msg.data.ssrc, msg.data.metadata);\n }\n }\n };\n this.onWorkerError = ev => {\n livekitLogger.error('packet trailer worker encountered an error:', {\n error: ev.error\n });\n };\n this.worker = options === null || options === void 0 ? void 0 : options.worker;\n }\n /** @internal */\n setup(room) {\n if (room === this.room) {\n return;\n }\n this.room = room;\n if (this.worker) {\n this.worker.onmessage = this.onWorkerMessage;\n this.worker.onerror = this.onWorkerError;\n this.worker.postMessage({\n kind: 'init'\n });\n }\n room.on(RoomEvent.TrackSubscribed, (track, pub, _participant) => {\n if (track.kind !== 'video') {\n return;\n }\n this.setupReceiver(track, pub.trackInfo);\n }).on(RoomEvent.TrackUnsubscribed, track => {\n this.teardownTrack(track);\n }).on(RoomEvent.Disconnected, () => {\n this.cleanup();\n });\n }\n setupReceiver(track, trackInfo) {\n var _a, _b, _c;\n const receiver = track.receiver;\n if (!receiver) {\n return;\n }\n // Only install a pipeline for tracks that actually advertise packet\n // trailer features. This keeps us out of the way for tracks published by\n // clients on older protocols or that don't opt into the feature.\n const hasFeatures = !!(trackInfo === null || trackInfo === void 0 ? void 0 : trackInfo.packetTrailerFeatures) && trackInfo.packetTrailerFeatures.length > 0;\n if (!hasFeatures) {\n if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.hasE2EESetup)) {\n this.setupPassthroughReceiver(receiver, track.mediaStreamID);\n }\n return;\n }\n if (!isPacketTrailerSupported(this.worker ? {\n worker: this.worker\n } : undefined) && !((_b = this.room) === null || _b === void 0 ? void 0 : _b.hasE2EESetup)) {\n livekitLogger.warn('packet trailer transform not supported; skipping extraction');\n return;\n }\n const extractor = new PacketTrailerExtractor();\n const trackId = track.mediaStreamID;\n this.extractors.set(trackId, extractor);\n track.packetTrailerExtractor = extractor;\n if ((_c = this.room) === null || _c === void 0 ? void 0 : _c.hasE2EESetup) {\n // E2EE worker strips the trailer and injects metadata directly into\n // the extractor via E2eeManager; no pipeline is needed here.\n return;\n }\n this.setupWorkerReceiver(receiver, trackId, true);\n }\n setupPassthroughReceiver(receiver, trackId) {\n if (shouldUsePacketTrailerScriptTransform()) {\n if ('transform' in receiver) {\n // @ts-ignore\n receiver.transform = null;\n }\n return;\n }\n if (this.worker && isPacketTrailerSupported({\n worker: this.worker\n }) && !this.workerPipelines.has(receiver)) {\n this.setupWorkerReceiver(receiver, trackId, false);\n return;\n }\n if (this.worker && this.workerPipelines.has(receiver)) {\n this.setupWorkerReceiver(receiver, trackId, false);\n }\n }\n setupWorkerReceiver(receiver, newTrackId) {\n let hasPacketTrailer = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n const worker = this.worker;\n if (!worker) {\n return;\n }\n if (shouldUsePacketTrailerScriptTransform()) {\n // @ts-ignore\n receiver.transform = new RTCRtpScriptTransform(worker, {\n kind: 'decode',\n trackId: newTrackId\n });\n return;\n }\n const existingTrackId = this.workerPipelines.get(receiver);\n if (existingTrackId) {\n // Receiver is reused (transceiver recycled). The worker already owns\n // the encoded streams — just remap the trackId so metadata is keyed\n // correctly and re-activate processing.\n const msg = {\n kind: 'updateTrackId',\n data: {\n oldTrackId: existingTrackId,\n newTrackId,\n hasPacketTrailer\n }\n };\n worker.postMessage(msg);\n this.workerPipelines.set(receiver, newTrackId);\n return;\n }\n if (!('createEncodedStreams' in receiver)) {\n livekitLogger.warn('createEncodedStreams not supported');\n return;\n }\n let streams;\n try {\n // @ts-ignore — createEncodedStreams is not in standard typings\n streams = receiver.createEncodedStreams();\n } catch (err) {\n livekitLogger.warn('failed to create encoded streams', {\n error: err\n });\n return;\n }\n const msg = {\n kind: 'decode',\n data: {\n readableStream: streams.readable,\n writableStream: streams.writable,\n trackId: newTrackId,\n hasPacketTrailer\n }\n };\n worker.postMessage(msg, [streams.readable, streams.writable]);\n this.workerPipelines.set(receiver, newTrackId);\n }\n teardownTrack(track) {\n const trackId = track.mediaStreamID;\n const extractor = this.extractors.get(trackId);\n if (extractor) {\n extractor.dispose();\n this.extractors.delete(trackId);\n }\n if (track instanceof RemoteVideoTrack) {\n track.packetTrailerExtractor = undefined;\n }\n // The receiver pipeline is intentionally left running. If the receiver is\n // reused for a new track, `setupReceiver` will remap it. If the room\n // disconnects, `cleanup` drops all state. Any metadata produced in the\n // meantime is harmless — the extractor above has already been disposed and\n // is no longer reachable from any track.\n }\n cleanup() {\n var _a;\n for (const extractor of this.extractors.values()) {\n extractor.dispose();\n }\n this.extractors.clear();\n this.workerPipelines.clear();\n (_a = this.worker) === null || _a === void 0 ? void 0 : _a.terminate();\n }\n}const CONNECTION_BACKOFF_MIN_MS = 500;\nconst CONNECTION_BACKOFF_MAX_MS = 15000;\n/**\n * BackOffStrategy implements exponential backoff for connection failures.\n *\n * When severe connection failures occur (e.g., network issues, server unavailability),\n * this strategy introduces increasing delays between reconnection attempts to avoid\n * overwhelming the server and to give transient issues time to resolve.\n *\n * This strategy is only applied to LiveKit Cloud projects. It identifies\n * projects by extracting the project name from the connection URL and tracks failures\n * per project. Self-hosted deployments (URLs without a project identifier) are not\n * subject to backoff delays.\n *\n * The class is implemented as a singleton to maintain consistent backoff state across\n * the entire application lifecycle instead of room instance lifecycle.\n */\nclass BackOffStrategy {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n constructor() {\n this.failedConnectionAttempts = new Map();\n this.backOffPromises = new Map();\n }\n static getInstance() {\n if (!this._instance) {\n this._instance = new BackOffStrategy();\n }\n return this._instance;\n }\n addFailedConnectionAttempt(urlString) {\n var _a;\n const url = new URL(urlString);\n const projectName = extractProjectFromUrl(url);\n if (!projectName) {\n return;\n }\n let failureCount = (_a = this.failedConnectionAttempts.get(projectName)) !== null && _a !== void 0 ? _a : 0;\n this.failedConnectionAttempts.set(projectName, failureCount + 1);\n this.backOffPromises.set(projectName, sleep(Math.min(CONNECTION_BACKOFF_MIN_MS * Math.pow(2, failureCount), CONNECTION_BACKOFF_MAX_MS)));\n }\n getBackOffPromise(urlString) {\n const url = new URL(urlString);\n const projectName = url && extractProjectFromUrl(url);\n const backoffPromise = projectName && this.backOffPromises.get(projectName);\n return backoffPromise || Promise.resolve();\n }\n resetFailedConnectionAttempts(urlString) {\n const url = new URL(urlString);\n const projectName = url && extractProjectFromUrl(url);\n if (projectName) {\n this.failedConnectionAttempts.set(projectName, 0);\n this.backOffPromises.set(projectName, Promise.resolve());\n }\n }\n resetAll() {\n this.backOffPromises.clear();\n this.failedConnectionAttempts.clear();\n }\n}\nBackOffStrategy._instance = null;const defaultId = 'default';\nclass DeviceManager {\n constructor() {\n this._previousDevices = [];\n }\n static getInstance() {\n if (this.instance === undefined) {\n this.instance = new DeviceManager();\n }\n return this.instance;\n }\n get previousDevices() {\n return this._previousDevices;\n }\n getDevices(kind_1) {\n return __awaiter(this, arguments, void 0, function (kind) {\n var _this = this;\n let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return function* () {\n var _a;\n if (((_a = DeviceManager.userMediaPromiseMap) === null || _a === void 0 ? void 0 : _a.size) > 0) {\n livekitLogger.debug('awaiting getUserMedia promise');\n try {\n if (kind) {\n yield DeviceManager.userMediaPromiseMap.get(kind);\n } else {\n yield Promise.all(DeviceManager.userMediaPromiseMap.values());\n }\n } catch (e) {\n livekitLogger.warn('error waiting for media permissons');\n }\n }\n let devices = yield navigator.mediaDevices.enumerateDevices();\n if (requestPermissions &&\n // for safari we need to skip this check, as otherwise it will re-acquire user media and fail on iOS https://bugs.webkit.org/show_bug.cgi?id=179363\n !(isSafari() && _this.hasDeviceInUse(kind))) {\n const isDummyDeviceOrEmpty = devices.filter(d => d.kind === kind).length === 0 || devices.some(device => {\n const noLabel = device.label === '';\n const isRelevant = kind ? device.kind === kind : true;\n return noLabel && isRelevant;\n });\n if (isDummyDeviceOrEmpty) {\n const permissionsToAcquire = {\n video: kind !== 'audioinput' && kind !== 'audiooutput',\n audio: kind !== 'videoinput' && {\n deviceId: {\n ideal: 'default'\n }\n }\n };\n const stream = yield navigator.mediaDevices.getUserMedia(permissionsToAcquire);\n devices = yield navigator.mediaDevices.enumerateDevices();\n stream.getTracks().forEach(track => {\n track.stop();\n });\n }\n }\n _this._previousDevices = devices;\n if (kind) {\n devices = devices.filter(device => device.kind === kind);\n }\n return devices;\n }();\n });\n }\n normalizeDeviceId(kind, deviceId, groupId) {\n return __awaiter(this, void 0, void 0, function* () {\n if (deviceId !== defaultId) {\n return deviceId;\n }\n // resolve actual device id if it's 'default': Chrome returns it when no\n // device has been chosen\n const devices = yield this.getDevices(kind);\n const defaultDevice = devices.find(d => d.deviceId === defaultId);\n if (!defaultDevice) {\n livekitLogger.warn('could not reliably determine default device');\n return undefined;\n }\n const device = devices.find(d => d.deviceId !== defaultId && d.groupId === (groupId !== null && groupId !== void 0 ? groupId : defaultDevice.groupId));\n if (!device) {\n livekitLogger.warn('could not reliably determine default device');\n return undefined;\n }\n return device === null || device === void 0 ? void 0 : device.deviceId;\n });\n }\n hasDeviceInUse(kind) {\n return kind ? DeviceManager.userMediaPromiseMap.has(kind) : DeviceManager.userMediaPromiseMap.size > 0;\n }\n}\nDeviceManager.mediaDeviceKinds = ['audioinput', 'audiooutput', 'videoinput'];\nDeviceManager.userMediaPromiseMap = new Map();const U16_MAX_SIZE = 0xffff;\nconst U32_MAX_SIZE = 0xffffffff;\n/**\n * A number of fields withing the data tracks packet specification assume wrap around behavior when\n * an unsigned type is incremented beyond its max size (ie, the packet `sequence` field). This\n * wrapper type manually reimplements this wrap around behavior given javascript's lack of fixed\n * size integer types.\n */\nclass WrapAroundUnsignedInt {\n static u16(raw) {\n return new WrapAroundUnsignedInt(raw, U16_MAX_SIZE);\n }\n static u32(raw) {\n return new WrapAroundUnsignedInt(raw, U32_MAX_SIZE);\n }\n constructor(raw, maxSize) {\n this.value = raw;\n if (raw < 0) {\n throw new Error('WrapAroundUnsignedInt: cannot faithfully represent an integer smaller than 0');\n }\n if (maxSize > Number.MAX_SAFE_INTEGER) {\n throw new Error('WrapAroundUnsignedInt: cannot faithfully represent an integer bigger than MAX_SAFE_INTEGER.');\n }\n this.maxSize = maxSize;\n this.clamp();\n }\n /** Manually clamp the given containing value according to the wrap around max size bounds. Use\n * this after out of bounds modification to the contained value by external code. */\n clamp() {\n while (this.value > this.maxSize) {\n this.value -= this.maxSize + 1;\n }\n while (this.value < 0) {\n this.value += this.maxSize + 1;\n }\n }\n clone() {\n return new WrapAroundUnsignedInt(this.value, this.maxSize);\n }\n /** When called, maps the containing value to a new containing value. After mapping, the wrap\n * around external max size bounds are applied. Note that this is a mutative operation. */\n update(updateFn) {\n this.value = updateFn(this.value);\n this.clamp();\n }\n /** Increments the given `n` to the inner value. Note that this is a mutative operation. */\n increment() {\n let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n this.update(value => value + n);\n }\n /** Decrements the given `n` from the inner value. Note that this is a mutative operation. */\n decrement() {\n let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n this.update(value => value - n);\n }\n getThenIncrement() {\n const previousValue = this.value;\n this.increment();\n return new WrapAroundUnsignedInt(previousValue, this.maxSize);\n }\n /** Returns true if {@link this} is before the passed other {@link WrapAroundUnsignedInt}. */\n isBefore(other) {\n const a = this.value >>> 0;\n const b = other.value >>> 0;\n const diff = b - a >>> 0;\n return diff !== 0 && diff < this.maxSize + 1;\n }\n}\nclass DataTrackTimestamp {\n static fromRtpTicks(rtpTicks) {\n return new DataTrackTimestamp(rtpTicks, 90000);\n }\n /** Generates a timestamp initialized to a non cryptographically secure random value, so that\n * different streams are more difficult to correlate in packet capture. */\n static rtpRandom() {\n const randomValue = Math.round(Math.random() * U32_MAX_SIZE);\n return DataTrackTimestamp.fromRtpTicks(randomValue);\n }\n constructor(raw, rateInHz) {\n this.timestamp = WrapAroundUnsignedInt.u32(raw);\n this.rateInHz = rateInHz;\n }\n asTicks() {\n return this.timestamp.value;\n }\n clone() {\n return new DataTrackTimestamp(this.timestamp.value, this.rateInHz);\n }\n wrappingAdd(n) {\n this.timestamp.increment(n);\n }\n /** Returns true if {@link this} is before the passed other {@link DataTrackTimestamp}. */\n isBefore(other) {\n return this.timestamp.isBefore(other.timestamp);\n }\n}\nclass DataTrackClock {\n constructor(rateInHz, epoch, base) {\n this.epoch = epoch;\n this.base = base;\n this.previous = base.clone();\n this.rateInHz = rateInHz;\n }\n static startingNow(base, rateInHz) {\n return new DataTrackClock(rateInHz, new Date(), base);\n }\n static startingAtTime(epoch, base, rateInHz) {\n return new DataTrackClock(rateInHz, epoch, base);\n }\n static rtpStartingNow(base) {\n return DataTrackClock.startingNow(base, 90000);\n }\n static rtpStartingAtTime(epoch, base) {\n return DataTrackClock.startingAtTime(epoch, base, 90000);\n }\n now() {\n return this.at(new Date());\n }\n at(timestamp) {\n let elapsedMs = timestamp.getTime() - this.epoch.getTime();\n let durationTicks = DataTrackClock.durationInMsToTicks(elapsedMs, this.rateInHz);\n let result = this.base.clone();\n result.wrappingAdd(durationTicks);\n // Enforce monotonicity in RTP wraparound space\n if (result.isBefore(this.previous)) {\n result = this.previous;\n }\n this.previous = result.clone();\n return result.clone();\n }\n /** Convert a duration since the epoch into clock ticks. */\n static durationInMsToTicks(durationMilliseconds, rateInHz) {\n // round(nanos * rate_hz / 1e9)\n let durationNanoseconds = durationMilliseconds * 1e6;\n let ticks = (durationNanoseconds * rateInHz + 500000000) / 1000000000;\n return Math.round(ticks);\n }\n}\nfunction coerceToDataView(input) {\n if (input instanceof DataView) {\n return input;\n } else if (input instanceof ArrayBuffer) {\n return new DataView(input);\n } else if (input instanceof Uint8Array) {\n return new DataView(input.buffer, input.byteOffset, input.byteLength);\n } else {\n throw new Error(\"Error coercing \".concat(input, \" to DataView - input was not DataView, ArrayBuffer, or Uint8Array.\"));\n }\n}var DataTrackHandleErrorReason;\n(function (DataTrackHandleErrorReason) {\n DataTrackHandleErrorReason[DataTrackHandleErrorReason[\"Reserved\"] = 0] = \"Reserved\";\n DataTrackHandleErrorReason[DataTrackHandleErrorReason[\"TooLarge\"] = 1] = \"TooLarge\";\n})(DataTrackHandleErrorReason || (DataTrackHandleErrorReason = {}));\nclass DataTrackHandleError extends LivekitReasonedError {\n constructor(message, reason) {\n super(19, message);\n this.name = 'DataTrackHandleError';\n this.reason = reason;\n this.reasonName = DataTrackHandleErrorReason[reason];\n }\n isReason(reason) {\n return this.reason === reason;\n }\n static tooLarge() {\n return new DataTrackHandleError('Value too large to be a valid track handle', DataTrackHandleErrorReason.TooLarge);\n }\n static reserved(value) {\n return new DataTrackHandleError(\"0x\".concat(value.toString(16), \" is a reserved value.\"), DataTrackHandleErrorReason.Reserved);\n }\n}\nconst DataTrackHandle = {\n fromNumber(raw) {\n if (raw === 0) {\n throw DataTrackHandleError.reserved(raw);\n }\n if (raw > U16_MAX_SIZE) {\n throw DataTrackHandleError.tooLarge();\n }\n return raw;\n }\n};\n/** Manage allocating new handles which don't conflict over the lifetime of the client. */\nclass DataTrackHandleAllocator {\n constructor() {\n this.value = 0;\n }\n /** Returns a unique track handle for the next publication, if one can be obtained. */\n get() {\n this.value += 1;\n if (this.value > U16_MAX_SIZE) {\n return null;\n }\n return this.value;\n }\n reset() {\n this.value = 0;\n }\n}const DataTrackInfo = {\n from(protocolInfo) {\n return {\n sid: protocolInfo.sid,\n pubHandle: protocolInfo.pubHandle,\n name: protocolInfo.name,\n usesE2ee: protocolInfo.encryption !== Encryption_Type.NONE\n };\n },\n toProtobuf(info) {\n return new DataTrackInfo$1({\n sid: info.sid,\n pubHandle: info.pubHandle,\n name: info.name,\n encryption: info.usesE2ee ? Encryption_Type.GCM : Encryption_Type.NONE\n });\n }\n};var QueueTaskStatus;\n(function (QueueTaskStatus) {\n QueueTaskStatus[QueueTaskStatus[\"WAITING\"] = 0] = \"WAITING\";\n QueueTaskStatus[QueueTaskStatus[\"RUNNING\"] = 1] = \"RUNNING\";\n QueueTaskStatus[QueueTaskStatus[\"COMPLETED\"] = 2] = \"COMPLETED\";\n})(QueueTaskStatus || (QueueTaskStatus = {}));\nclass AsyncQueue {\n constructor() {\n this.pendingTasks = new Map();\n this.taskMutex = new _();\n this.nextTaskIndex = 0;\n }\n run(task) {\n return __awaiter(this, void 0, void 0, function* () {\n const taskInfo = {\n id: this.nextTaskIndex++,\n enqueuedAt: Date.now(),\n status: QueueTaskStatus.WAITING\n };\n this.pendingTasks.set(taskInfo.id, taskInfo);\n const unlock = yield this.taskMutex.lock();\n try {\n taskInfo.executedAt = Date.now();\n taskInfo.status = QueueTaskStatus.RUNNING;\n return yield task();\n } finally {\n taskInfo.status = QueueTaskStatus.COMPLETED;\n this.pendingTasks.delete(taskInfo.id);\n unlock();\n }\n });\n }\n flush() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.run(() => __awaiter(this, void 0, void 0, function* () {}));\n });\n }\n snapshot() {\n return Array.from(this.pendingTasks.values());\n }\n}/**\n * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)\n *\n * @see https://web.dev/websocketstream/\n */\nclass WebSocketStream {\n get readyState() {\n return this.ws.readyState;\n }\n constructor(url) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _a, _b;\n if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n throw new DOMException('This operation was aborted', 'AbortError');\n }\n this.url = url;\n const ws = new WebSocket(url, (_b = options.protocols) !== null && _b !== void 0 ? _b : []);\n ws.binaryType = 'arraybuffer';\n this.ws = ws;\n const closeWithInfo = function () {\n let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n code = _ref.closeCode,\n reason = _ref.reason;\n return ws.close(code, reason);\n };\n this.opened = new TypedPromise((resolve, reject) => {\n const rejectHandler = () => {\n reject(ConnectionError.websocket('Encountered websocket error during connection establishment'));\n };\n ws.onopen = () => {\n resolve({\n readable: new ReadableStream({\n start(controller) {\n ws.onmessage = _ref2 => {\n let data = _ref2.data;\n return controller.enqueue(data);\n };\n ws.onerror = e => controller.error(e);\n },\n cancel: closeWithInfo\n }),\n writable: new WritableStream({\n write(chunk) {\n ws.send(chunk);\n },\n abort() {\n ws.close();\n },\n close: closeWithInfo\n }),\n protocol: ws.protocol,\n extensions: ws.extensions\n });\n ws.removeEventListener('error', rejectHandler);\n };\n ws.addEventListener('error', rejectHandler);\n });\n this.closed = new TypedPromise((resolve, reject) => {\n const rejectHandler = () => __awaiter(this, void 0, void 0, function* () {\n const closePromise = new TypedPromise(res => {\n if (ws.readyState === WebSocket.CLOSED) return;else {\n ws.addEventListener('close', closeEv => {\n res(closeEv);\n }, {\n once: true\n });\n }\n });\n const reason = yield TypedPromise.race([sleep(250), closePromise]);\n if (!reason) {\n reject(ConnectionError.websocket('Encountered unspecified websocket error without a timely close event'));\n } else {\n // if we can infer the close reason from the close event then resolve the promise, we don't need to throw\n resolve(reason);\n }\n });\n ws.onclose = _ref3 => {\n let code = _ref3.code,\n reason = _ref3.reason;\n resolve({\n closeCode: code,\n reason\n });\n ws.removeEventListener('error', rejectHandler);\n };\n ws.addEventListener('error', rejectHandler);\n });\n if (options.signal) {\n options.signal.onabort = () => ws.close();\n }\n this.close = closeWithInfo;\n }\n}const passThroughQueueSignals = ['syncState', 'trickle', 'offer', 'answer', 'simulate', 'leave'];\nfunction canPassThroughQueue(req) {\n const canPass = passThroughQueueSignals.indexOf(req.case) >= 0;\n livekitLogger.trace('request allowed to bypass queue:', {\n canPass,\n req\n });\n return canPass;\n}\nvar SignalConnectionState;\n(function (SignalConnectionState) {\n SignalConnectionState[SignalConnectionState[\"CONNECTING\"] = 0] = \"CONNECTING\";\n SignalConnectionState[SignalConnectionState[\"CONNECTED\"] = 1] = \"CONNECTED\";\n SignalConnectionState[SignalConnectionState[\"RECONNECTING\"] = 2] = \"RECONNECTING\";\n SignalConnectionState[SignalConnectionState[\"DISCONNECTING\"] = 3] = \"DISCONNECTING\";\n SignalConnectionState[SignalConnectionState[\"DISCONNECTED\"] = 4] = \"DISCONNECTED\";\n})(SignalConnectionState || (SignalConnectionState = {}));\n/** specifies how much time (in ms) we allow for the ws to close its connection gracefully before continuing */\nconst MAX_WS_CLOSE_TIME = 250;\n/** @internal */\nclass SignalClient {\n get currentState() {\n return this.state;\n }\n get isDisconnected() {\n return this.state === SignalConnectionState.DISCONNECTING || this.state === SignalConnectionState.DISCONNECTED;\n }\n get isEstablishingConnection() {\n return this.state === SignalConnectionState.CONNECTING || this.state === SignalConnectionState.RECONNECTING;\n }\n getNextRequestId() {\n this._requestId += 1;\n return this._requestId;\n }\n constructor() {\n let useJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n let loggerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _a;\n /** signal rtt in milliseconds */\n this.rtt = 0;\n this.state = SignalConnectionState.DISCONNECTED;\n this.log = livekitLogger;\n this._requestId = 0;\n this.useV0SignalPath = false;\n /** @internal */\n this.resetCallbacks = () => {\n this.onAnswer = undefined;\n this.onLeave = undefined;\n this.onLocalTrackPublished = undefined;\n this.onLocalTrackUnpublished = undefined;\n this.onNegotiateRequested = undefined;\n this.onOffer = undefined;\n this.onRemoteMuteChanged = undefined;\n this.onSubscribedQualityUpdate = undefined;\n this.onTokenRefresh = undefined;\n this.onTrickle = undefined;\n this.onClose = undefined;\n this.onMediaSectionsRequirement = undefined;\n };\n this.loggerContextCb = loggerOptions.loggerContextCb;\n this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Signal, () => this.logContext);\n this.useJSON = useJSON;\n this.requestQueue = new AsyncQueue();\n this.queuedRequests = [];\n this.closingLock = new _();\n this.connectionLock = new _();\n this.state = SignalConnectionState.DISCONNECTED;\n }\n get logContext() {\n var _a, _b;\n return (_b = (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)) !== null && _b !== void 0 ? _b : {};\n }\n join(url_1, token_1, opts_1, abortSignal_1) {\n return __awaiter(this, arguments, void 0, function (url, token, opts, abortSignal) {\n var _this = this;\n let useV0Path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n let publisherOffer = arguments.length > 5 ? arguments[5] : undefined;\n return function* () {\n // during a full reconnect, we'd want to start the sequence even if currently\n // connected\n _this.state = SignalConnectionState.CONNECTING;\n _this.options = opts;\n const res = yield _this.connect(url, token, opts, abortSignal, useV0Path, publisherOffer);\n return res;\n }();\n });\n }\n reconnect(url, token, sid, reason) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.options) {\n this.log.warn('attempted to reconnect without signal options being set, ignoring');\n return;\n }\n this.state = SignalConnectionState.RECONNECTING;\n // clear ping interval and restart it once reconnected\n this.clearPingInterval();\n const res = yield this.connect(url, token, Object.assign(Object.assign({}, this.options), {\n reconnect: true,\n sid,\n reconnectReason: reason\n }), undefined, this.useV0SignalPath);\n return res;\n });\n }\n connect(url_1, token_1, opts_1, abortSignal_1) {\n return __awaiter(this, arguments, void 0, function (url, token, opts, abortSignal) {\n var _this2 = this;\n let useV0Path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n let publisherOffer = arguments.length > 5 ? arguments[5] : undefined;\n return function* () {\n const unlock = yield _this2.connectionLock.lock();\n _this2.connectOptions = opts;\n _this2.useV0SignalPath = useV0Path;\n const clientInfo = getClientInfo(opts.clientInfoCapabilities);\n const params = useV0Path ? createConnectionParams(token, clientInfo, opts) : yield createJoinRequestConnectionParams(token, clientInfo, opts, publisherOffer);\n const rtcUrl = createRtcUrl(url, params, useV0Path).toString();\n const validateUrl = createValidateUrl(rtcUrl).toString();\n return new Promise((resolve, reject) => __awaiter(_this2, void 0, void 0, function* () {\n var _a, _b;\n try {\n let alreadyAborted = false;\n const abortHandler = eventOrError => __awaiter(this, void 0, void 0, function* () {\n if (alreadyAborted) {\n return;\n }\n alreadyAborted = true;\n const target = eventOrError instanceof Event ? eventOrError.currentTarget : eventOrError;\n const reason = getAbortReasonAsString(target, 'Abort handler called');\n // send leave if we have an active stream writer (connection is open)\n if (this.streamWriter && !this.isDisconnected) {\n this.sendLeave().then(() => this.close(reason)).catch(e => {\n this.log.error(e);\n this.close();\n });\n } else {\n this.close();\n }\n cleanupAbortHandlers();\n reject(ConnectionError.cancelled(reason));\n });\n abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', abortHandler);\n const cleanupAbortHandlers = () => {\n clearTimeout(wsTimeout);\n abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);\n };\n const wsTimeout = setTimeout(() => {\n abortHandler(ConnectionError.timeout('room connection has timed out (signal)'));\n }, opts.websocketTimeout);\n const handleSignalConnected = (connection, firstMessage) => {\n this.handleSignalConnected(connection, wsTimeout, firstMessage);\n };\n const redactedUrl = new URL(rtcUrl);\n if (redactedUrl.searchParams.has('access_token')) {\n redactedUrl.searchParams.set('access_token', '<redacted>');\n }\n this.log.info(\"signal connecting to \".concat(redactedUrl), {\n reconnect: opts.reconnect,\n reconnectReason: opts.reconnectReason\n });\n if (this.ws) {\n yield this.close(false);\n }\n this.ws = new WebSocketStream(rtcUrl);\n try {\n this.ws.closed.then(closeInfo => {\n var _a;\n if (this.isEstablishingConnection) {\n reject(ConnectionError.internal(\"Websocket got closed during a (re)connection attempt: \".concat(closeInfo.reason)));\n }\n if (closeInfo.closeCode !== 1000) {\n this.log.warn(\"websocket closed\", {\n reason: closeInfo.reason,\n code: closeInfo.closeCode,\n wasClean: closeInfo.closeCode === 1000,\n state: this.state\n });\n if (this.state === SignalConnectionState.CONNECTED) {\n this.handleOnClose((_a = closeInfo.reason) !== null && _a !== void 0 ? _a : 'Unexpected WS error');\n }\n }\n return;\n }).catch(reason => {\n if (this.isEstablishingConnection) {\n reject(ConnectionError.internal(\"Websocket error during a (re)connection attempt: \".concat(reason)));\n }\n });\n const connection = yield this.ws.opened.catch(reason => __awaiter(this, void 0, void 0, function* () {\n if (this.state !== SignalConnectionState.CONNECTED) {\n this.state = SignalConnectionState.DISCONNECTED;\n clearTimeout(wsTimeout);\n const error = yield this.handleConnectionError(reason, validateUrl);\n reject(error);\n return;\n }\n // other errors, handle\n this.handleWSError(reason);\n reject(reason);\n return;\n }));\n clearTimeout(wsTimeout);\n if (!connection) {\n return;\n }\n const signalReader = connection.readable.getReader();\n this.streamWriter = connection.writable.getWriter();\n const firstMessage = yield signalReader.read();\n signalReader.releaseLock();\n if (!firstMessage.value) {\n throw ConnectionError.internal('no message received as first message');\n }\n const firstSignalResponse = parseSignalResponse(firstMessage.value);\n // Validate the first message\n const validation = this.validateFirstMessage(firstSignalResponse, (_a = opts.reconnect) !== null && _a !== void 0 ? _a : false);\n if (!validation.isValid) {\n reject(validation.error);\n return;\n }\n // Handle join response\n if (((_b = firstSignalResponse.message) === null || _b === void 0 ? void 0 : _b.case) === 'join') {\n // Set up ping configuration\n this.pingTimeoutDuration = firstSignalResponse.message.value.pingTimeout;\n this.pingIntervalDuration = firstSignalResponse.message.value.pingInterval;\n if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) {\n this.log.debug('ping config', {\n timeout: this.pingTimeoutDuration,\n interval: this.pingIntervalDuration\n });\n }\n if (this.onJoined) {\n this.onJoined(firstSignalResponse.message.value);\n }\n }\n // Handle successful connection\n const firstMessageToProcess = validation.shouldProcessFirstMessage ? firstSignalResponse : undefined;\n handleSignalConnected(connection, firstMessageToProcess);\n resolve(validation.response);\n } catch (e) {\n reject(e);\n } finally {\n cleanupAbortHandlers();\n }\n } finally {\n unlock();\n }\n }));\n }();\n });\n }\n startReadingLoop(signalReader, firstMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n if (firstMessage) {\n this.handleSignalResponse(firstMessage);\n }\n while (true) {\n if (this.signalLatency) {\n yield sleep(this.signalLatency);\n }\n const _yield$signalReader$r = yield signalReader.read(),\n done = _yield$signalReader$r.done,\n value = _yield$signalReader$r.value;\n if (done) {\n break;\n }\n const resp = parseSignalResponse(value);\n this.handleSignalResponse(resp);\n }\n });\n }\n close() {\n return __awaiter(this, arguments, void 0, function () {\n var _this3 = this;\n let updateState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n let reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Close method called on signal client';\n return function* () {\n if ([SignalConnectionState.DISCONNECTING || SignalConnectionState.DISCONNECTED].includes(_this3.state)) {\n _this3.log.debug(\"ignoring signal close as it's already in disconnecting state\");\n return;\n }\n const unlock = yield _this3.closingLock.lock();\n try {\n _this3.clearPingInterval();\n if (updateState) {\n _this3.state = SignalConnectionState.DISCONNECTING;\n }\n if (_this3.ws) {\n _this3.ws.close({\n closeCode: 1000,\n reason\n });\n // calling `ws.close()` only starts the closing handshake (CLOSING state), prefer to wait until state is actually CLOSED\n const closePromise = _this3.ws.closed;\n _this3.ws = undefined;\n _this3.streamWriter = undefined;\n yield Promise.race([closePromise, sleep(MAX_WS_CLOSE_TIME)]);\n }\n } catch (e) {\n _this3.log.debug('websocket error while closing', {\n error: e\n });\n } finally {\n if (updateState) {\n _this3.state = SignalConnectionState.DISCONNECTED;\n }\n unlock();\n }\n }();\n });\n }\n // initial offer after joining\n sendOffer(offer, offerId) {\n this.log.debug('sending offer', {\n offerSdp: offer.sdp\n });\n this.sendRequest({\n case: 'offer',\n value: toProtoSessionDescription(offer, offerId)\n });\n }\n // answer a server-initiated offer\n sendAnswer(answer, offerId) {\n this.log.debug('sending answer', {\n answerSdp: answer.sdp\n });\n return this.sendRequest({\n case: 'answer',\n value: toProtoSessionDescription(answer, offerId)\n });\n }\n sendIceCandidate(candidate, target) {\n this.log.debug('sending ice candidate', {\n candidate\n });\n return this.sendRequest({\n case: 'trickle',\n value: new TrickleRequest({\n candidateInit: JSON.stringify(candidate),\n target\n })\n });\n }\n sendMuteTrack(trackSid, muted) {\n return this.sendRequest({\n case: 'mute',\n value: new MuteTrackRequest({\n sid: trackSid,\n muted\n })\n });\n }\n sendAddTrack(req) {\n return this.sendRequest({\n case: 'addTrack',\n value: req\n });\n }\n sendUpdateLocalMetadata(metadata_1, name_1) {\n return __awaiter(this, arguments, void 0, function (metadata, name) {\n var _this4 = this;\n let attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return function* () {\n const requestId = _this4.getNextRequestId();\n yield _this4.sendRequest({\n case: 'updateMetadata',\n value: new UpdateParticipantMetadata({\n requestId,\n metadata,\n name,\n attributes\n })\n });\n return requestId;\n }();\n });\n }\n sendUpdateTrackSettings(settings) {\n this.sendRequest({\n case: 'trackSetting',\n value: settings\n });\n }\n sendUpdateSubscription(sub) {\n return this.sendRequest({\n case: 'subscription',\n value: sub\n });\n }\n sendSyncState(sync) {\n return this.sendRequest({\n case: 'syncState',\n value: sync\n });\n }\n sendUpdateVideoLayers(trackSid, layers) {\n return this.sendRequest({\n case: 'updateLayers',\n value: new UpdateVideoLayers({\n trackSid,\n layers\n })\n });\n }\n sendUpdateSubscriptionPermissions(allParticipants, trackPermissions) {\n return this.sendRequest({\n case: 'subscriptionPermission',\n value: new SubscriptionPermission({\n allParticipants,\n trackPermissions\n })\n });\n }\n sendSimulateScenario(scenario) {\n return this.sendRequest({\n case: 'simulate',\n value: scenario\n });\n }\n sendPing() {\n /** send both of ping and pingReq for compatibility to old and new server */\n return Promise.all([this.sendRequest({\n case: 'ping',\n value: protoInt64.parse(Date.now())\n }), this.sendRequest({\n case: 'pingReq',\n value: new Ping({\n timestamp: protoInt64.parse(Date.now()),\n rtt: protoInt64.parse(this.rtt)\n })\n })]);\n }\n sendUpdateLocalAudioTrack(trackSid, features) {\n return this.sendRequest({\n case: 'updateAudioTrack',\n value: new UpdateLocalAudioTrack({\n trackSid,\n features\n })\n });\n }\n sendLeave() {\n return this.sendRequest({\n case: 'leave',\n value: new LeaveRequest({\n reason: DisconnectReason.CLIENT_INITIATED,\n // server doesn't process this field, keeping it here to indicate the intent of a full disconnect\n action: LeaveRequest_Action.DISCONNECT\n })\n });\n }\n sendPublishDataTrackRequest(handle, name, usesE2ee) {\n return this.sendRequest({\n case: 'publishDataTrackRequest',\n value: new PublishDataTrackRequest({\n pubHandle: handle,\n name: name,\n encryption: usesE2ee ? Encryption_Type.GCM : Encryption_Type.NONE\n })\n });\n }\n sendUnPublishDataTrackRequest(handle) {\n return this.sendRequest({\n case: 'unpublishDataTrackRequest',\n value: new UnpublishDataTrackRequest({\n pubHandle: handle\n })\n });\n }\n sendUpdateDataSubscription(sid, subscribe) {\n return this.sendRequest({\n case: 'updateDataSubscription',\n value: new UpdateDataSubscription({\n // FIXME: consider refactoring to allow caller to pass an array of events through\n updates: [new UpdateDataSubscription_Update({\n trackSid: sid,\n subscribe\n })]\n })\n });\n }\n sendRequest(message_1) {\n return __awaiter(this, arguments, void 0, function (message) {\n var _this5 = this;\n let fromQueue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return function* () {\n // capture all requests while reconnecting and put them in a queue\n // unless the request originates from the queue, then don't enqueue again\n const canQueue = !fromQueue && !canPassThroughQueue(message);\n if (canQueue && _this5.state === SignalConnectionState.RECONNECTING) {\n _this5.queuedRequests.push(() => __awaiter(_this5, void 0, void 0, function* () {\n yield this.sendRequest(message, true);\n }));\n return;\n }\n // make sure previously queued requests are being sent first\n if (!fromQueue) {\n yield _this5.requestQueue.flush();\n }\n if (_this5.signalLatency) {\n yield sleep(_this5.signalLatency);\n }\n if (_this5.isDisconnected) {\n // Skip requests if the signal layer is disconnected\n // This can happen if an event is sent in the mist of room.connect() initializing\n _this5.log.debug(\"skipping signal request (type: \".concat(message.case, \") - SignalClient disconnected\"));\n return;\n }\n if (!_this5.streamWriter) {\n _this5.log.error(\"cannot send signal request before connected, type: \".concat(message === null || message === void 0 ? void 0 : message.case));\n return;\n }\n const req = new SignalRequest({\n message\n });\n try {\n if (_this5.useJSON) {\n yield _this5.streamWriter.write(req.toJsonString());\n } else {\n yield _this5.streamWriter.write(req.toBinary().buffer);\n }\n } catch (e) {\n _this5.log.error('error sending signal message', {\n error: e\n });\n }\n }();\n });\n }\n handleSignalResponse(res) {\n var _a, _b;\n const msg = res.message;\n if (msg == undefined) {\n this.log.debug('received unsupported message');\n return;\n }\n let pingHandled = false;\n if (msg.case === 'answer') {\n const sd = fromProtoSessionDescription(msg.value);\n if (this.onAnswer) {\n this.onAnswer(sd, msg.value.id, msg.value.midToTrackId);\n }\n } else if (msg.case === 'offer') {\n const sd = fromProtoSessionDescription(msg.value);\n if (this.onOffer) {\n this.onOffer(sd, msg.value.id, msg.value.midToTrackId);\n }\n } else if (msg.case === 'trickle') {\n const candidate = JSON.parse(msg.value.candidateInit);\n if (this.onTrickle) {\n this.onTrickle(candidate, msg.value.target);\n }\n } else if (msg.case === 'update') {\n if (this.onParticipantUpdate) {\n this.onParticipantUpdate((_a = msg.value.participants) !== null && _a !== void 0 ? _a : []);\n }\n } else if (msg.case === 'trackPublished') {\n if (this.onLocalTrackPublished) {\n this.onLocalTrackPublished(msg.value);\n }\n } else if (msg.case === 'speakersChanged') {\n if (this.onSpeakersChanged) {\n this.onSpeakersChanged((_b = msg.value.speakers) !== null && _b !== void 0 ? _b : []);\n }\n } else if (msg.case === 'leave') {\n if (this.onLeave) {\n this.onLeave(msg.value);\n }\n } else if (msg.case === 'mute') {\n if (this.onRemoteMuteChanged) {\n this.onRemoteMuteChanged(msg.value.sid, msg.value.muted);\n }\n } else if (msg.case === 'roomUpdate') {\n if (this.onRoomUpdate && msg.value.room) {\n this.onRoomUpdate(msg.value.room);\n }\n } else if (msg.case === 'connectionQuality') {\n if (this.onConnectionQuality) {\n this.onConnectionQuality(msg.value);\n }\n } else if (msg.case === 'streamStateUpdate') {\n if (this.onStreamStateUpdate) {\n this.onStreamStateUpdate(msg.value);\n }\n } else if (msg.case === 'subscribedQualityUpdate') {\n if (this.onSubscribedQualityUpdate) {\n this.onSubscribedQualityUpdate(msg.value);\n }\n } else if (msg.case === 'subscriptionPermissionUpdate') {\n if (this.onSubscriptionPermissionUpdate) {\n this.onSubscriptionPermissionUpdate(msg.value);\n }\n } else if (msg.case === 'refreshToken') {\n if (this.onTokenRefresh) {\n this.onTokenRefresh(msg.value);\n }\n } else if (msg.case === 'trackUnpublished') {\n if (this.onLocalTrackUnpublished) {\n this.onLocalTrackUnpublished(msg.value);\n }\n } else if (msg.case === 'subscriptionResponse') {\n if (this.onSubscriptionError) {\n this.onSubscriptionError(msg.value);\n }\n } else if (msg.case === 'pong') ; else if (msg.case === 'pongResp') {\n this.rtt = Date.now() - Number.parseInt(msg.value.lastPingTimestamp.toString());\n this.resetPingTimeout();\n pingHandled = true;\n } else if (msg.case === 'requestResponse') {\n if (this.onRequestResponse) {\n this.onRequestResponse(msg.value);\n }\n } else if (msg.case === 'trackSubscribed') {\n if (this.onLocalTrackSubscribed) {\n this.onLocalTrackSubscribed(msg.value.trackSid);\n }\n } else if (msg.case === 'roomMoved') {\n if (this.onTokenRefresh) {\n this.onTokenRefresh(msg.value.token);\n }\n if (this.onRoomMoved) {\n this.onRoomMoved(msg.value);\n }\n } else if (msg.case === 'mediaSectionsRequirement') {\n if (this.onMediaSectionsRequirement) {\n this.onMediaSectionsRequirement(msg.value);\n }\n } else if (msg.case === 'publishDataTrackResponse') {\n if (this.onPublishDataTrackResponse) {\n this.onPublishDataTrackResponse(msg.value);\n }\n } else if (msg.case === 'unpublishDataTrackResponse') {\n if (this.onUnPublishDataTrackResponse) {\n this.onUnPublishDataTrackResponse(msg.value);\n }\n } else if (msg.case === 'dataTrackSubscriberHandles') {\n if (this.onDataTrackSubscriberHandles) {\n this.onDataTrackSubscriberHandles(msg.value);\n }\n } else {\n this.log.debug('unsupported message', {\n msgCase: msg.case\n });\n }\n if (!pingHandled) {\n this.resetPingTimeout();\n }\n }\n setReconnected() {\n while (this.queuedRequests.length > 0) {\n const req = this.queuedRequests.shift();\n if (req) {\n this.requestQueue.run(req);\n }\n }\n }\n handleOnClose(reason) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === SignalConnectionState.DISCONNECTED) return;\n const onCloseCallback = this.onClose;\n yield this.close(undefined, reason);\n this.log.info(\"websocket connection closed: \".concat(reason), {\n reason\n });\n if (onCloseCallback) {\n onCloseCallback(reason);\n }\n });\n }\n handleWSError(error) {\n this.log.error('websocket error', {\n error\n });\n }\n /**\n * Resets the ping timeout and starts a new timeout.\n * Call this after receiving a pong message\n */\n resetPingTimeout() {\n this.clearPingTimeout();\n if (!this.pingTimeoutDuration) {\n this.log.warn('ping timeout duration not set');\n return;\n }\n this.pingTimeout = CriticalTimers.setTimeout(() => {\n this.log.warn(\"ping timeout triggered. last pong received at: \".concat(new Date(Date.now() - this.pingTimeoutDuration * 1000).toUTCString()));\n this.handleOnClose('ping timeout');\n }, this.pingTimeoutDuration * 1000);\n }\n /**\n * Clears ping timeout (does not start a new timeout)\n */\n clearPingTimeout() {\n if (this.pingTimeout) {\n CriticalTimers.clearTimeout(this.pingTimeout);\n }\n }\n startPingInterval() {\n this.clearPingInterval();\n this.resetPingTimeout();\n if (!this.pingIntervalDuration) {\n this.log.warn('ping interval duration not set');\n return;\n }\n this.log.debug('start ping interval');\n this.pingInterval = CriticalTimers.setInterval(() => {\n this.sendPing();\n }, this.pingIntervalDuration * 1000);\n }\n clearPingInterval() {\n this.log.debug('clearing ping interval');\n this.clearPingTimeout();\n if (this.pingInterval) {\n CriticalTimers.clearInterval(this.pingInterval);\n }\n }\n /**\n * Handles the successful connection to the signal server\n * @param connection The WebSocket connection\n * @param timeoutHandle The timeout handle to clear\n * @param firstMessage Optional first message to process\n * @internal\n */\n handleSignalConnected(connection, timeoutHandle, firstMessage) {\n this.state = SignalConnectionState.CONNECTED;\n this.log.info('signal connected');\n clearTimeout(timeoutHandle);\n this.startPingInterval();\n this.startReadingLoop(connection.readable.getReader(), firstMessage);\n }\n /**\n * Validates the first message received from the signal server\n * @param firstSignalResponse The first signal response received\n * @param isReconnect Whether this is a reconnection attempt\n * @returns Validation result with response or error\n * @internal\n */\n validateFirstMessage(firstSignalResponse, isReconnect) {\n var _a, _b, _c, _d, _e;\n if (((_a = firstSignalResponse.message) === null || _a === void 0 ? void 0 : _a.case) === 'join') {\n return {\n isValid: true,\n response: firstSignalResponse.message.value\n };\n } else if (this.state === SignalConnectionState.RECONNECTING && ((_b = firstSignalResponse.message) === null || _b === void 0 ? void 0 : _b.case) !== 'leave') {\n if (((_c = firstSignalResponse.message) === null || _c === void 0 ? void 0 : _c.case) === 'reconnect') {\n return {\n isValid: true,\n response: firstSignalResponse.message.value\n };\n } else {\n // in reconnecting, any message received means signal reconnected and we still need to process it\n this.log.debug('declaring signal reconnected without reconnect response received');\n return {\n isValid: true,\n response: undefined,\n shouldProcessFirstMessage: true\n };\n }\n } else if (this.isEstablishingConnection && ((_d = firstSignalResponse.message) === null || _d === void 0 ? void 0 : _d.case) === 'leave') {\n return {\n isValid: false,\n error: ConnectionError.leaveRequest('Received leave request while trying to (re)connect', firstSignalResponse.message.value.reason)\n };\n } else if (!isReconnect) {\n // non-reconnect case, should receive join response first\n return {\n isValid: false,\n error: ConnectionError.internal(\"did not receive join response, got \".concat((_e = firstSignalResponse.message) === null || _e === void 0 ? void 0 : _e.case, \" instead\"))\n };\n }\n return {\n isValid: false,\n error: ConnectionError.internal('Unexpected first message')\n };\n }\n /**\n * Handles WebSocket connection errors by validating with the server\n * @param reason The error that occurred\n * @param validateUrl The URL to validate the connection with\n * @returns A ConnectionError with appropriate reason and status\n * @internal\n */\n handleConnectionError(reason, validateUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const resp = yield fetch(validateUrl);\n switch (resp.status) {\n case 404:\n const errorMsg = yield resp.text();\n if (errorMsg.includes('requested room does not exist')) {\n return ConnectionError.notAllowed(errorMsg, resp.status);\n }\n return ConnectionError.serviceNotFound('v1 RTC path not found. Consider upgrading your LiveKit server version', 'v0-rtc');\n case 401:\n case 403:\n const msg = yield resp.text();\n return ConnectionError.notAllowed(msg, resp.status);\n default:\n break;\n }\n if (reason instanceof ConnectionError) {\n return reason;\n } else {\n return ConnectionError.internal(\"Encountered unknown websocket error during connection: \".concat(reason), {\n status: resp.status,\n statusText: resp.statusText\n });\n }\n } catch (e) {\n return e instanceof ConnectionError ? e : ConnectionError.serverUnreachable(e instanceof Error ? e.message : 'server was not reachable');\n }\n });\n }\n}\nfunction fromProtoSessionDescription(sd) {\n const rsd = {\n type: 'offer',\n sdp: sd.sdp\n };\n switch (sd.type) {\n case 'answer':\n case 'offer':\n case 'pranswer':\n case 'rollback':\n rsd.type = sd.type;\n break;\n }\n return rsd;\n}\nfunction toProtoSessionDescription(rsd, id) {\n const sd = new SessionDescription({\n sdp: rsd.sdp,\n type: rsd.type,\n id\n });\n return sd;\n}\nfunction createConnectionParams(token, info, opts) {\n var _a;\n const params = new URLSearchParams();\n params.set('access_token', token);\n // opts\n if (opts.reconnect) {\n params.set('reconnect', '1');\n if (opts.sid) {\n params.set('sid', opts.sid);\n }\n }\n params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');\n // ClientInfo\n params.set('sdk', isReactNative() ? 'reactnative' : 'js');\n params.set('version', info.version);\n params.set('protocol', info.protocol.toString());\n params.set('client_protocol', info.clientProtocol.toString());\n if (info.deviceModel) {\n params.set('device_model', info.deviceModel);\n }\n if (info.os) {\n params.set('os', info.os);\n }\n if (info.osVersion) {\n params.set('os_version', info.osVersion);\n }\n if (info.browser) {\n params.set('browser', info.browser);\n }\n if (info.browserVersion) {\n params.set('browser_version', info.browserVersion);\n }\n if (opts.adaptiveStream) {\n params.set('adaptive_stream', '1');\n }\n if (opts.reconnectReason) {\n params.set('reconnect_reason', opts.reconnectReason.toString());\n }\n // @ts-ignore\n if ((_a = navigator.connection) === null || _a === void 0 ? void 0 : _a.type) {\n // @ts-ignore\n params.set('network', navigator.connection.type);\n }\n return params;\n}\nfunction createJoinRequestConnectionParams(token, info, opts, publisherOffer) {\n return __awaiter(this, void 0, void 0, function* () {\n const params = new URLSearchParams();\n params.set('access_token', token);\n const joinRequest = new JoinRequest({\n clientInfo: info,\n connectionSettings: new ConnectionSettings({\n autoSubscribe: !!opts.autoSubscribe,\n adaptiveStream: !!opts.adaptiveStream\n }),\n reconnect: !!opts.reconnect,\n participantSid: opts.sid ? opts.sid : undefined,\n publisherOffer: publisherOffer\n });\n if (opts.reconnectReason) {\n joinRequest.reconnectReason = opts.reconnectReason;\n }\n const joinRequestBytes = joinRequest.toBinary();\n let requestBytes;\n let compression;\n if (isCompressionStreamSupported()) {\n const stream = new CompressionStream('gzip');\n const writer = stream.writable.getWriter();\n writer.write(new Uint8Array(joinRequestBytes));\n writer.close();\n const chunks = [];\n const reader = stream.readable.getReader();\n while (true) {\n const _yield$reader$read = yield reader.read(),\n done = _yield$reader$read.done,\n value = _yield$reader$read.value;\n if (done) break;\n chunks.push(value);\n }\n const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n requestBytes = result;\n compression = WrappedJoinRequest_Compression.GZIP;\n } else {\n requestBytes = joinRequestBytes;\n compression = WrappedJoinRequest_Compression.NONE;\n }\n const wrappedJoinRequest = new WrappedJoinRequest({\n joinRequest: requestBytes,\n compression\n });\n const wrappedBytes = wrappedJoinRequest.toBinary();\n const bytesToBase64 = bytes => {\n const binString = Array.from(bytes, byte => String.fromCodePoint(byte)).join('');\n return btoa(binString);\n };\n params.set('join_request', bytesToBase64(wrappedBytes).replace(/\\+/g, '-').replace(/\\//g, '_'));\n return params;\n });\n}class DataPacketBuffer {\n constructor() {\n this.buffer = [];\n this._totalSize = 0;\n }\n push(item) {\n this.buffer.push(item);\n this._totalSize += item.data.byteLength;\n }\n pop() {\n const item = this.buffer.shift();\n if (item) {\n this._totalSize -= item.data.byteLength;\n }\n return item;\n }\n getAll() {\n return this.buffer.slice();\n }\n popToSequence(sequence) {\n while (this.buffer.length > 0) {\n const first = this.buffer[0];\n if (first.sequence <= sequence) {\n this.pop();\n } else {\n break;\n }\n }\n }\n alignBufferedAmount(bufferedAmount) {\n while (this.buffer.length > 0) {\n const first = this.buffer[0];\n if (this._totalSize - first.data.byteLength <= bufferedAmount) {\n break;\n }\n this.pop();\n }\n }\n get length() {\n return this.buffer.length;\n }\n}class TTLMap {\n /**\n * @param ttl ttl of the key (ms)\n */\n constructor(ttl) {\n this._map = new Map();\n this._lastCleanup = 0;\n this.ttl = ttl;\n }\n set(key, value) {\n const now = Date.now();\n if (now - this._lastCleanup > this.ttl / 2) {\n this.cleanup();\n }\n const expiresAt = now + this.ttl;\n this._map.set(key, {\n value,\n expiresAt\n });\n return this;\n }\n get(key) {\n const entry = this._map.get(key);\n if (!entry) return undefined;\n if (entry.expiresAt < Date.now()) {\n this._map.delete(key);\n return undefined;\n }\n return entry.value;\n }\n has(key) {\n const entry = this._map.get(key);\n if (!entry) return false;\n if (entry.expiresAt < Date.now()) {\n this._map.delete(key);\n return false;\n }\n return true;\n }\n delete(key) {\n return this._map.delete(key);\n }\n clear() {\n this._map.clear();\n }\n cleanup() {\n const now = Date.now();\n for (const _ref of this._map.entries()) {\n var _ref2 = _slicedToArray(_ref, 2);\n const key = _ref2[0];\n const entry = _ref2[1];\n if (entry.expiresAt < now) {\n this._map.delete(key);\n }\n }\n this._lastCleanup = now;\n }\n get size() {\n this.cleanup();\n return this._map.size;\n }\n forEach(callback) {\n this.cleanup();\n for (const _ref3 of this._map.entries()) {\n var _ref4 = _slicedToArray(_ref3, 2);\n const key = _ref4[0];\n const entry = _ref4[1];\n if (entry.expiresAt >= Date.now()) {\n callback(entry.value, key, this.asValueMap());\n }\n }\n }\n map(callback) {\n this.cleanup();\n const result = [];\n const valueMap = this.asValueMap();\n for (const _ref5 of valueMap.entries()) {\n var _ref6 = _slicedToArray(_ref5, 2);\n const key = _ref6[0];\n const value = _ref6[1];\n result.push(callback(value, key, valueMap));\n }\n return result;\n }\n asValueMap() {\n const result = new Map();\n for (const _ref7 of this._map.entries()) {\n var _ref8 = _slicedToArray(_ref7, 2);\n const key = _ref8[0];\n const entry = _ref8[1];\n if (entry.expiresAt >= Date.now()) {\n result.set(key, entry.value);\n }\n }\n return result;\n }\n}var lib = {};var parser = {};var grammar = {exports: {}};var hasRequiredGrammar;\nfunction requireGrammar() {\n if (hasRequiredGrammar) return grammar.exports;\n hasRequiredGrammar = 1;\n var grammar$1 = grammar.exports = {\n v: [{\n name: 'version',\n reg: /^(\\d*)$/\n }],\n o: [{\n // o=- 20518 0 IN IP4 203.0.113.1\n // NB: sessionId will be a String in most cases because it is huge\n name: 'origin',\n reg: /^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,\n names: ['username', 'sessionId', 'sessionVersion', 'netType', 'ipVer', 'address'],\n format: '%s %s %d %s IP%d %s'\n }],\n // default parsing of these only (though some of these feel outdated)\n s: [{\n name: 'name'\n }],\n i: [{\n name: 'description'\n }],\n u: [{\n name: 'uri'\n }],\n e: [{\n name: 'email'\n }],\n p: [{\n name: 'phone'\n }],\n z: [{\n name: 'timezones'\n }],\n // TODO: this one can actually be parsed properly...\n r: [{\n name: 'repeats'\n }],\n // TODO: this one can also be parsed properly\n // k: [{}], // outdated thing ignored\n t: [{\n // t=0 0\n name: 'timing',\n reg: /^(\\d*) (\\d*)/,\n names: ['start', 'stop'],\n format: '%d %d'\n }],\n c: [{\n // c=IN IP4 10.47.197.26\n name: 'connection',\n reg: /^IN IP(\\d) (\\S*)/,\n names: ['version', 'ip'],\n format: 'IN IP%d %s'\n }],\n b: [{\n // b=AS:4000\n push: 'bandwidth',\n reg: /^(TIAS|AS|CT|RR|RS):(\\d*)/,\n names: ['type', 'limit'],\n format: '%s:%s'\n }],\n m: [{\n // m=video 51744 RTP/AVP 126 97 98 34 31\n // NB: special - pushes to session\n // TODO: rtp/fmtp should be filtered by the payloads found here?\n reg: /^(\\w*) (\\d*) ([\\w/]*)(?: (.*))?/,\n names: ['type', 'port', 'protocol', 'payloads'],\n format: '%s %d %s %s'\n }],\n a: [{\n // a=rtpmap:110 opus/48000/2\n push: 'rtp',\n reg: /^rtpmap:(\\d*) ([\\w\\-.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,\n names: ['payload', 'codec', 'rate', 'encoding'],\n format: function (o) {\n return o.encoding ? 'rtpmap:%d %s/%s/%s' : o.rate ? 'rtpmap:%d %s/%s' : 'rtpmap:%d %s';\n }\n }, {\n // a=fmtp:108 profile-level-id=24;object=23;bitrate=64000\n // a=fmtp:111 minptime=10; useinbandfec=1\n push: 'fmtp',\n reg: /^fmtp:(\\d*) ([\\S| ]*)/,\n names: ['payload', 'config'],\n format: 'fmtp:%d %s'\n }, {\n // a=control:streamid=0\n name: 'control',\n reg: /^control:(.*)/,\n format: 'control:%s'\n }, {\n // a=rtcp:65179 IN IP4 193.84.77.194\n name: 'rtcp',\n reg: /^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,\n names: ['port', 'netType', 'ipVer', 'address'],\n format: function (o) {\n return o.address != null ? 'rtcp:%d %s IP%d %s' : 'rtcp:%d';\n }\n }, {\n // a=rtcp-fb:98 trr-int 100\n push: 'rtcpFbTrrInt',\n reg: /^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,\n names: ['payload', 'value'],\n format: 'rtcp-fb:%s trr-int %d'\n }, {\n // a=rtcp-fb:98 nack rpsi\n push: 'rtcpFb',\n reg: /^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,\n names: ['payload', 'type', 'subtype'],\n format: function (o) {\n return o.subtype != null ? 'rtcp-fb:%s %s %s' : 'rtcp-fb:%s %s';\n }\n }, {\n // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n // a=extmap:1/recvonly URI-gps-string\n // a=extmap:3 urn:ietf:params:rtp-hdrext:encrypt urn:ietf:params:rtp-hdrext:smpte-tc 25@600/24\n push: 'ext',\n reg: /^extmap:(\\d+)(?:\\/(\\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\\S*)(?: (\\S*))?/,\n names: ['value', 'direction', 'encrypt-uri', 'uri', 'config'],\n format: function (o) {\n return 'extmap:%d' + (o.direction ? '/%s' : '%v') + (o['encrypt-uri'] ? ' %s' : '%v') + ' %s' + (o.config ? ' %s' : '');\n }\n }, {\n // a=extmap-allow-mixed\n name: 'extmapAllowMixed',\n reg: /^(extmap-allow-mixed)/\n }, {\n // a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32\n push: 'crypto',\n reg: /^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,\n names: ['id', 'suite', 'config', 'sessionConfig'],\n format: function (o) {\n return o.sessionConfig != null ? 'crypto:%d %s %s %s' : 'crypto:%d %s %s';\n }\n }, {\n // a=setup:actpass\n name: 'setup',\n reg: /^setup:(\\w*)/,\n format: 'setup:%s'\n }, {\n // a=connection:new\n name: 'connectionType',\n reg: /^connection:(new|existing)/,\n format: 'connection:%s'\n }, {\n // a=mid:1\n name: 'mid',\n reg: /^mid:([^\\s]*)/,\n format: 'mid:%s'\n }, {\n // a=msid:0c8b064d-d807-43b4-b434-f92a889d8587 98178685-d409-46e0-8e16-7ef0db0db64a\n name: 'msid',\n reg: /^msid:(.*)/,\n format: 'msid:%s'\n }, {\n // a=ptime:20\n name: 'ptime',\n reg: /^ptime:(\\d*(?:\\.\\d*)*)/,\n format: 'ptime:%d'\n }, {\n // a=maxptime:60\n name: 'maxptime',\n reg: /^maxptime:(\\d*(?:\\.\\d*)*)/,\n format: 'maxptime:%d'\n }, {\n // a=sendrecv\n name: 'direction',\n reg: /^(sendrecv|recvonly|sendonly|inactive)/\n }, {\n // a=ice-lite\n name: 'icelite',\n reg: /^(ice-lite)/\n }, {\n // a=ice-ufrag:F7gI\n name: 'iceUfrag',\n reg: /^ice-ufrag:(\\S*)/,\n format: 'ice-ufrag:%s'\n }, {\n // a=ice-pwd:x9cml/YzichV2+XlhiMu8g\n name: 'icePwd',\n reg: /^ice-pwd:(\\S*)/,\n format: 'ice-pwd:%s'\n }, {\n // a=fingerprint:SHA-1 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33\n name: 'fingerprint',\n reg: /^fingerprint:(\\S*) (\\S*)/,\n names: ['type', 'hash'],\n format: 'fingerprint:%s %s'\n }, {\n // a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host\n // a=candidate:1162875081 1 udp 2113937151 192.168.34.75 60017 typ host generation 0 network-id 3 network-cost 10\n // a=candidate:3289912957 2 udp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 generation 0 network-id 3 network-cost 10\n // a=candidate:229815620 1 tcp 1518280447 192.168.150.19 60017 typ host tcptype active generation 0 network-id 3 network-cost 10\n // a=candidate:3289912957 2 tcp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 tcptype passive generation 0 network-id 3 network-cost 10\n push: 'candidates',\n reg: /^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,\n names: ['foundation', 'component', 'transport', 'priority', 'ip', 'port', 'type', 'raddr', 'rport', 'tcptype', 'generation', 'network-id', 'network-cost'],\n format: function (o) {\n var str = 'candidate:%s %d %s %d %s %d typ %s';\n str += o.raddr != null ? ' raddr %s rport %d' : '%v%v';\n\n // NB: candidate has three optional chunks, so %void middles one if it's missing\n str += o.tcptype != null ? ' tcptype %s' : '%v';\n if (o.generation != null) {\n str += ' generation %d';\n }\n str += o['network-id'] != null ? ' network-id %d' : '%v';\n str += o['network-cost'] != null ? ' network-cost %d' : '%v';\n return str;\n }\n }, {\n // a=end-of-candidates (keep after the candidates line for readability)\n name: 'endOfCandidates',\n reg: /^(end-of-candidates)/\n }, {\n // a=remote-candidates:1 203.0.113.1 54400 2 203.0.113.1 54401 ...\n name: 'remoteCandidates',\n reg: /^remote-candidates:(.*)/,\n format: 'remote-candidates:%s'\n }, {\n // a=ice-options:google-ice\n name: 'iceOptions',\n reg: /^ice-options:(\\S*)/,\n format: 'ice-options:%s'\n }, {\n // a=ssrc:2566107569 cname:t9YU8M1UxTF8Y1A1\n push: 'ssrcs',\n reg: /^ssrc:(\\d*) ([\\w_-]*)(?::(.*))?/,\n names: ['id', 'attribute', 'value'],\n format: function (o) {\n var str = 'ssrc:%d';\n if (o.attribute != null) {\n str += ' %s';\n if (o.value != null) {\n str += ':%s';\n }\n }\n return str;\n }\n }, {\n // a=ssrc-group:FEC 1 2\n // a=ssrc-group:FEC-FR 3004364195 1080772241\n push: 'ssrcGroups',\n // token-char = %x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39 / %x41-5A / %x5E-7E\n reg: /^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,\n names: ['semantics', 'ssrcs'],\n format: 'ssrc-group:%s %s'\n }, {\n // a=msid-semantic: WMS Jvlam5X3SX1OP6pn20zWogvaKJz5Hjf9OnlV\n name: 'msidSemantic',\n reg: /^msid-semantic:\\s?(\\w*) (\\S*)/,\n names: ['semantic', 'token'],\n format: 'msid-semantic: %s %s' // space after ':' is not accidental\n }, {\n // a=group:BUNDLE audio video\n push: 'groups',\n reg: /^group:(\\w*) (.*)/,\n names: ['type', 'mids'],\n format: 'group:%s %s'\n }, {\n // a=rtcp-mux\n name: 'rtcpMux',\n reg: /^(rtcp-mux)/\n }, {\n // a=rtcp-rsize\n name: 'rtcpRsize',\n reg: /^(rtcp-rsize)/\n }, {\n // a=sctpmap:5000 webrtc-datachannel 1024\n name: 'sctpmap',\n reg: /^sctpmap:([\\w_/]*) (\\S*)(?: (\\S*))?/,\n names: ['sctpmapNumber', 'app', 'maxMessageSize'],\n format: function (o) {\n return o.maxMessageSize != null ? 'sctpmap:%s %s %s' : 'sctpmap:%s %s';\n }\n }, {\n // a=x-google-flag:conference\n name: 'xGoogleFlag',\n reg: /^x-google-flag:([^\\s]*)/,\n format: 'x-google-flag:%s'\n }, {\n // a=rid:1 send max-width=1280;max-height=720;max-fps=30;depend=0\n push: 'rids',\n reg: /^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,\n names: ['id', 'direction', 'params'],\n format: function (o) {\n return o.params ? 'rid:%s %s %s' : 'rid:%s %s';\n }\n }, {\n // a=imageattr:97 send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320] recv [x=330,y=250]\n // a=imageattr:* send [x=800,y=640] recv *\n // a=imageattr:100 recv [x=320,y=240]\n push: 'imageattrs',\n reg: new RegExp(\n // a=imageattr:97\n '^imageattr:(\\\\d+|\\\\*)' +\n // send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320]\n '[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)' +\n // recv [x=330,y=250]\n '(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?'),\n names: ['pt', 'dir1', 'attrs1', 'dir2', 'attrs2'],\n format: function (o) {\n return 'imageattr:%s %s %s' + (o.dir2 ? ' %s %s' : '');\n }\n }, {\n // a=simulcast:send 1,2,3;~4,~5 recv 6;~7,~8\n // a=simulcast:recv 1;4,5 send 6;7\n name: 'simulcast',\n reg: new RegExp(\n // a=simulcast:\n '^simulcast:' +\n // send 1,2,3;~4,~5\n '(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)' +\n // space + recv 6;~7,~8\n '(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?' +\n // end\n '$'),\n names: ['dir1', 'list1', 'dir2', 'list2'],\n format: function (o) {\n return 'simulcast:%s %s' + (o.dir2 ? ' %s %s' : '');\n }\n }, {\n // old simulcast draft 03 (implemented by Firefox)\n // https://tools.ietf.org/html/draft-ietf-mmusic-sdp-simulcast-03\n // a=simulcast: recv pt=97;98 send pt=97\n // a=simulcast: send rid=5;6;7 paused=6,7\n name: 'simulcast_03',\n reg: /^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,\n names: ['value'],\n format: 'simulcast: %s'\n }, {\n // a=framerate:25\n // a=framerate:29.97\n name: 'framerate',\n reg: /^framerate:(\\d+(?:$|\\.\\d+))/,\n format: 'framerate:%s'\n }, {\n // RFC4570\n // a=source-filter: incl IN IP4 239.5.2.31 10.1.15.5\n name: 'sourceFilter',\n reg: /^source-filter: *(excl|incl) (\\S*) (IP4|IP6|\\*) (\\S*) (.*)/,\n names: ['filterMode', 'netType', 'addressTypes', 'destAddress', 'srcList'],\n format: 'source-filter: %s %s %s %s %s'\n }, {\n // a=bundle-only\n name: 'bundleOnly',\n reg: /^(bundle-only)/\n }, {\n // a=label:1\n name: 'label',\n reg: /^label:(.+)/,\n format: 'label:%s'\n }, {\n // RFC version 26 for SCTP over DTLS\n // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-5\n name: 'sctpPort',\n reg: /^sctp-port:(\\d+)$/,\n format: 'sctp-port:%s'\n }, {\n // RFC version 26 for SCTP over DTLS\n // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-6\n name: 'maxMessageSize',\n reg: /^max-message-size:(\\d+)$/,\n format: 'max-message-size:%s'\n }, {\n // RFC7273\n // a=ts-refclk:ptp=IEEE1588-2008:39-A7-94-FF-FE-07-CB-D0:37\n push: 'tsRefClocks',\n reg: /^ts-refclk:([^\\s=]*)(?:=(\\S*))?/,\n names: ['clksrc', 'clksrcExt'],\n format: function (o) {\n return 'ts-refclk:%s' + (o.clksrcExt != null ? '=%s' : '');\n }\n }, {\n // RFC7273\n // a=mediaclk:direct=963214424\n name: 'mediaClk',\n reg: /^mediaclk:(?:id=(\\S*))? *([^\\s=]*)(?:=(\\S*))?(?: *rate=(\\d+)\\/(\\d+))?/,\n names: ['id', 'mediaClockName', 'mediaClockValue', 'rateNumerator', 'rateDenominator'],\n format: function (o) {\n var str = 'mediaclk:';\n str += o.id != null ? 'id=%s %s' : '%v%s';\n str += o.mediaClockValue != null ? '=%s' : '';\n str += o.rateNumerator != null ? ' rate=%s' : '';\n str += o.rateDenominator != null ? '/%s' : '';\n return str;\n }\n }, {\n // a=keywds:keywords\n name: 'keywords',\n reg: /^keywds:(.+)$/,\n format: 'keywds:%s'\n }, {\n // a=content:main\n name: 'content',\n reg: /^content:(.+)/,\n format: 'content:%s'\n },\n // BFCP https://tools.ietf.org/html/rfc4583\n {\n // a=floorctrl:c-s\n name: 'bfcpFloorCtrl',\n reg: /^floorctrl:(c-only|s-only|c-s)/,\n format: 'floorctrl:%s'\n }, {\n // a=confid:1\n name: 'bfcpConfId',\n reg: /^confid:(\\d+)/,\n format: 'confid:%s'\n }, {\n // a=userid:1\n name: 'bfcpUserId',\n reg: /^userid:(\\d+)/,\n format: 'userid:%s'\n }, {\n // a=floorid:1\n name: 'bfcpFloorId',\n reg: /^floorid:(.+) (?:m-stream|mstrm):(.+)/,\n names: ['id', 'mStream'],\n format: 'floorid:%s mstrm:%s'\n }, {\n // any a= that we don't understand is kept verbatim on media.invalid\n push: 'invalid',\n names: ['value']\n }]\n };\n\n // set sensible defaults to avoid polluting the grammar with boring details\n Object.keys(grammar$1).forEach(function (key) {\n var objs = grammar$1[key];\n objs.forEach(function (obj) {\n if (!obj.reg) {\n obj.reg = /(.*)/;\n }\n if (!obj.format) {\n obj.format = '%s';\n }\n });\n });\n return grammar.exports;\n}var hasRequiredParser;\nfunction requireParser() {\n if (hasRequiredParser) return parser;\n hasRequiredParser = 1;\n (function (exports) {\n var toIntIfInt = function (v) {\n return String(Number(v)) === v ? Number(v) : v;\n };\n var attachProperties = function (match, location, names, rawName) {\n if (rawName && !names) {\n location[rawName] = toIntIfInt(match[1]);\n } else {\n for (var i = 0; i < names.length; i += 1) {\n if (match[i + 1] != null) {\n location[names[i]] = toIntIfInt(match[i + 1]);\n }\n }\n }\n };\n var parseReg = function (obj, location, content) {\n var needsBlank = obj.name && obj.names;\n if (obj.push && !location[obj.push]) {\n location[obj.push] = [];\n } else if (needsBlank && !location[obj.name]) {\n location[obj.name] = {};\n }\n var keyLocation = obj.push ? {} :\n // blank object that will be pushed\n needsBlank ? location[obj.name] : location; // otherwise, named location or root\n\n attachProperties(content.match(obj.reg), keyLocation, obj.names, obj.name);\n if (obj.push) {\n location[obj.push].push(keyLocation);\n }\n };\n var grammar = requireGrammar();\n var validLine = RegExp.prototype.test.bind(/^([a-z])=(.*)/);\n exports.parse = function (sdp) {\n var session = {},\n media = [],\n location = session; // points at where properties go under (one of the above)\n\n // parse lines we understand\n sdp.split(/(\\r\\n|\\r|\\n)/).filter(validLine).forEach(function (l) {\n var type = l[0];\n var content = l.slice(2);\n if (type === 'm') {\n media.push({\n rtp: [],\n fmtp: []\n });\n location = media[media.length - 1]; // point at latest media line\n }\n for (var j = 0; j < (grammar[type] || []).length; j += 1) {\n var obj = grammar[type][j];\n if (obj.reg.test(content)) {\n return parseReg(obj, location, content);\n }\n }\n });\n session.media = media; // link it up\n return session;\n };\n var paramReducer = function (acc, expr) {\n var s = expr.split(/=(.+)/, 2);\n if (s.length === 2) {\n acc[s[0]] = toIntIfInt(s[1]);\n } else if (s.length === 1 && expr.length > 1) {\n acc[s[0]] = undefined;\n }\n return acc;\n };\n exports.parseParams = function (str) {\n return str.split(/;\\s?/).reduce(paramReducer, {});\n };\n\n // For backward compatibility - alias will be removed in 3.0.0\n exports.parseFmtpConfig = exports.parseParams;\n exports.parsePayloads = function (str) {\n return str.toString().split(' ').map(Number);\n };\n exports.parseRemoteCandidates = function (str) {\n var candidates = [];\n var parts = str.split(' ').map(toIntIfInt);\n for (var i = 0; i < parts.length; i += 3) {\n candidates.push({\n component: parts[i],\n ip: parts[i + 1],\n port: parts[i + 2]\n });\n }\n return candidates;\n };\n exports.parseImageAttributes = function (str) {\n return str.split(' ').map(function (item) {\n return item.substring(1, item.length - 1).split(',').reduce(paramReducer, {});\n });\n };\n exports.parseSimulcastStreamList = function (str) {\n return str.split(';').map(function (stream) {\n return stream.split(',').map(function (format) {\n var scid,\n paused = false;\n if (format[0] !== '~') {\n scid = toIntIfInt(format);\n } else {\n scid = toIntIfInt(format.substring(1, format.length));\n paused = true;\n }\n return {\n scid: scid,\n paused: paused\n };\n });\n });\n };\n })(parser);\n return parser;\n}var writer;\nvar hasRequiredWriter;\nfunction requireWriter() {\n if (hasRequiredWriter) return writer;\n hasRequiredWriter = 1;\n var grammar = requireGrammar();\n\n // customized util.format - discards excess arguments and can void middle ones\n var formatRegExp = /%[sdv%]/g;\n var format = function (formatStr) {\n var i = 1;\n var args = arguments;\n var len = args.length;\n return formatStr.replace(formatRegExp, function (x) {\n if (i >= len) {\n return x; // missing argument\n }\n var arg = args[i];\n i += 1;\n switch (x) {\n case '%%':\n return '%';\n case '%s':\n return String(arg);\n case '%d':\n return Number(arg);\n case '%v':\n return '';\n }\n });\n // NB: we discard excess arguments - they are typically undefined from makeLine\n };\n var makeLine = function (type, obj, location) {\n var str = obj.format instanceof Function ? obj.format(obj.push ? location : location[obj.name]) : obj.format;\n var args = [type + '=' + str];\n if (obj.names) {\n for (var i = 0; i < obj.names.length; i += 1) {\n var n = obj.names[i];\n if (obj.name) {\n args.push(location[obj.name][n]);\n } else {\n // for mLine and push attributes\n args.push(location[obj.names[i]]);\n }\n }\n } else {\n args.push(location[obj.name]);\n }\n return format.apply(null, args);\n };\n\n // RFC specified order\n // TODO: extend this with all the rest\n var defaultOuterOrder = ['v', 'o', 's', 'i', 'u', 'e', 'p', 'c', 'b', 't', 'r', 'z', 'a'];\n var defaultInnerOrder = ['i', 'c', 'b', 'a'];\n writer = function (session, opts) {\n opts = opts || {};\n // ensure certain properties exist\n if (session.version == null) {\n session.version = 0; // 'v=0' must be there (only defined version atm)\n }\n if (session.name == null) {\n session.name = ' '; // 's= ' must be there if no meaningful name set\n }\n session.media.forEach(function (mLine) {\n if (mLine.payloads == null) {\n mLine.payloads = '';\n }\n });\n var outerOrder = opts.outerOrder || defaultOuterOrder;\n var innerOrder = opts.innerOrder || defaultInnerOrder;\n var sdp = [];\n\n // loop through outerOrder for matching properties on session\n outerOrder.forEach(function (type) {\n grammar[type].forEach(function (obj) {\n if (obj.name in session && session[obj.name] != null) {\n sdp.push(makeLine(type, obj, session));\n } else if (obj.push in session && session[obj.push] != null) {\n session[obj.push].forEach(function (el) {\n sdp.push(makeLine(type, obj, el));\n });\n }\n });\n });\n\n // then for each media line, follow the innerOrder\n session.media.forEach(function (mLine) {\n sdp.push(makeLine('m', grammar.m[0], mLine));\n innerOrder.forEach(function (type) {\n grammar[type].forEach(function (obj) {\n if (obj.name in mLine && mLine[obj.name] != null) {\n sdp.push(makeLine(type, obj, mLine));\n } else if (obj.push in mLine && mLine[obj.push] != null) {\n mLine[obj.push].forEach(function (el) {\n sdp.push(makeLine(type, obj, el));\n });\n }\n });\n });\n });\n return sdp.join('\\r\\n') + '\\r\\n';\n };\n return writer;\n}var hasRequiredLib;\nfunction requireLib() {\n if (hasRequiredLib) return lib;\n hasRequiredLib = 1;\n var parser = requireParser();\n var writer = requireWriter();\n var grammar = requireGrammar();\n lib.grammar = grammar;\n lib.write = writer;\n lib.parse = parser.parse;\n lib.parseParams = parser.parseParams;\n lib.parseFmtpConfig = parser.parseFmtpConfig; // Alias of parseParams().\n lib.parsePayloads = parser.parsePayloads;\n lib.parseRemoteCandidates = parser.parseRemoteCandidates;\n lib.parseImageAttributes = parser.parseImageAttributes;\n lib.parseSimulcastStreamList = parser.parseSimulcastStreamList;\n return lib;\n}var libExports = requireLib();/* The svc codec (av1/vp9) would use a very low bitrate at the begining and\nincrease slowly by the bandwidth estimator until it reach the target bitrate. The\nprocess commonly cost more than 10 seconds cause subscriber will get blur video at\nthe first few seconds. So we use a 70% of target bitrate here as the start bitrate to\neliminate this issue.\n*/\nconst startBitrateForSVC = 0.7;\nconst debounceInterval = 20;\nconst PCEvents = {\n NegotiationStarted: 'negotiationStarted',\n NegotiationComplete: 'negotiationComplete',\n // Fired with the offerId for every successful publisher answer application,\n // including answers that immediately recurse into another offer via\n // `renegotiate`. Use this rather than NegotiationComplete to know that a\n // specific offer has been negotiated end-to-end.\n OfferAnswered: 'offerAnswered',\n RTPVideoPayloadTypes: 'rtpVideoPayloadTypes'\n};\n/** @internal */\nclass PCTransport extends eventsExports.EventEmitter {\n get pc() {\n if (!this._pc) {\n this._pc = this.createPC();\n }\n return this._pc;\n }\n constructor(config) {\n let loggerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _a;\n super();\n this.log = livekitLogger;\n this.ddExtID = 0;\n this.latestOfferId = 0;\n this.latestAcknowledgedOfferId = 0;\n this.pendingCandidates = [];\n this.restartingIce = false;\n this.renegotiate = false;\n this.trackBitrates = [];\n this.remoteStereoMids = [];\n this.remoteNackMids = [];\n // debounced negotiate interface\n this.negotiate = debounce(onError => __awaiter(this, void 0, void 0, function* () {\n this.emit(PCEvents.NegotiationStarted);\n try {\n yield this.createAndSendOffer();\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n throw e;\n }\n }\n }), debounceInterval);\n this.close = () => {\n if (!this._pc) {\n return;\n }\n this.pendingInitialOffer = undefined;\n this._pc.close();\n this._pc.onconnectionstatechange = null;\n this._pc.oniceconnectionstatechange = null;\n this._pc.onicegatheringstatechange = null;\n this._pc.ondatachannel = null;\n this._pc.onnegotiationneeded = null;\n this._pc.onsignalingstatechange = null;\n this._pc.onicecandidate = null;\n this._pc.ondatachannel = null;\n this._pc.ontrack = null;\n this._pc.onconnectionstatechange = null;\n this._pc.oniceconnectionstatechange = null;\n this._pc = null;\n };\n this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.PCTransport);\n this.loggerOptions = loggerOptions;\n this.config = config;\n this._pc = this.createPC();\n this.offerLock = new _();\n }\n createPC() {\n const pc = new RTCPeerConnection(this.config);\n pc.onicecandidate = ev => {\n var _a;\n if (!ev.candidate) return;\n (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, ev.candidate);\n };\n pc.onicecandidateerror = ev => {\n var _a;\n (_a = this.onIceCandidateError) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n };\n pc.oniceconnectionstatechange = () => {\n var _a;\n (_a = this.onIceConnectionStateChange) === null || _a === void 0 ? void 0 : _a.call(this, pc.iceConnectionState);\n };\n pc.onsignalingstatechange = () => {\n var _a;\n (_a = this.onSignalingStatechange) === null || _a === void 0 ? void 0 : _a.call(this, pc.signalingState);\n };\n pc.onconnectionstatechange = () => {\n var _a;\n (_a = this.onConnectionStateChange) === null || _a === void 0 ? void 0 : _a.call(this, pc.connectionState);\n };\n pc.ondatachannel = ev => {\n var _a;\n (_a = this.onDataChannel) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n };\n pc.ontrack = ev => {\n var _a;\n (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n };\n return pc;\n }\n get logContext() {\n var _a, _b;\n return Object.assign({}, (_b = (_a = this.loggerOptions).loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n }\n get isICEConnected() {\n return this._pc !== null && (this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed');\n }\n addIceCandidate(candidate) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.pc.remoteDescription && !this.restartingIce) {\n return this.pc.addIceCandidate(candidate);\n }\n this.pendingCandidates.push(candidate);\n });\n }\n setRemoteDescription(sd, offerId) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (sd.type === 'answer' && this.latestOfferId > 0 && offerId > 0 && offerId !== this.latestOfferId) {\n this.log.warn('ignoring answer for old offer', Object.assign(Object.assign({}, this.logContext), {\n offerId,\n latestOfferId: this.latestOfferId\n }));\n return false;\n }\n let mungedSDP = undefined;\n if (sd.type === 'offer') {\n let _extractStereoAndNack = extractStereoAndNackAudioFromOffer(sd),\n stereoMids = _extractStereoAndNack.stereoMids,\n nackMids = _extractStereoAndNack.nackMids;\n this.remoteStereoMids = stereoMids;\n this.remoteNackMids = nackMids;\n } else if (sd.type === 'answer') {\n if (this.pendingInitialOffer && this._pc) {\n const initialOffer = this.pendingInitialOffer;\n this.pendingInitialOffer = undefined;\n const sdpParsed = libExports.parse((_a = initialOffer.sdp) !== null && _a !== void 0 ? _a : '');\n sdpParsed.media.forEach(media => {\n ensureIPAddrMatchVersion(media);\n });\n this.log.debug('setting pending initial offer before processing answer', this.logContext);\n yield this.setMungedSDP(initialOffer, libExports.write(sdpParsed));\n }\n const sdpParsed = libExports.parse((_b = sd.sdp) !== null && _b !== void 0 ? _b : '');\n sdpParsed.media.forEach(media => {\n const mid = getMidString(media.mid);\n if (media.type === 'audio') {\n // munge sdp for opus bitrate settings\n this.trackBitrates.some(trackbr => {\n if (!trackbr.transceiver || mid != trackbr.transceiver.mid) {\n return false;\n }\n let codecPayload = 0;\n media.rtp.some(rtp => {\n if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {\n codecPayload = rtp.payload;\n return true;\n }\n return false;\n });\n if (codecPayload === 0) {\n return true;\n }\n let fmtpFound = false;\n for (const fmtp of media.fmtp) {\n if (fmtp.payload === codecPayload) {\n fmtp.config = fmtp.config.split(';').filter(attr => !attr.includes('maxaveragebitrate')).join(';');\n if (trackbr.maxbr > 0) {\n fmtp.config += \";maxaveragebitrate=\".concat(trackbr.maxbr * 1000);\n }\n fmtpFound = true;\n break;\n }\n }\n if (!fmtpFound) {\n if (trackbr.maxbr > 0) {\n media.fmtp.push({\n payload: codecPayload,\n config: \"maxaveragebitrate=\".concat(trackbr.maxbr * 1000)\n });\n }\n }\n return true;\n });\n }\n });\n mungedSDP = libExports.write(sdpParsed);\n }\n yield this.setMungedSDP(sd, mungedSDP, true);\n this.pendingCandidates.forEach(candidate => {\n this.pc.addIceCandidate(candidate);\n });\n this.pendingCandidates = [];\n this.restartingIce = false;\n // Fire OfferAnswered for every successfully applied answer, including the\n // ones that recurse into another offer via `renegotiate`. Callers waiting\n // on a specific offerId can resolve as soon as their offer's answer is in.\n if (sd.type === 'answer') {\n this.latestAcknowledgedOfferId = offerId;\n this.emit(PCEvents.OfferAnswered, offerId);\n }\n if (this.renegotiate) {\n this.renegotiate = false;\n yield this.createAndSendOffer();\n } else if (sd.type === 'answer') {\n this.emit(PCEvents.NegotiationComplete);\n if (sd.sdp) {\n const sdpParsed = libExports.parse(sd.sdp);\n sdpParsed.media.forEach(media => {\n if (media.type === 'video') {\n this.emit(PCEvents.RTPVideoPayloadTypes, media.rtp);\n }\n });\n }\n }\n return true;\n });\n }\n createInitialOffer() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const unlock = yield this.offerLock.lock();\n try {\n if (this.pc.signalingState !== 'stable') {\n this.log.warn('signaling state is not stable, cannot create initial offer', this.logContext);\n return;\n }\n const offerId = this.latestOfferId + 1;\n this.latestOfferId = offerId;\n const offer = yield this.pc.createOffer();\n this.pendingInitialOffer = {\n sdp: offer.sdp,\n type: offer.type\n };\n const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n sdpParsed.media.forEach(media => {\n ensureIPAddrMatchVersion(media);\n });\n offer.sdp = libExports.write(sdpParsed);\n return {\n offer,\n offerId\n };\n } finally {\n unlock();\n }\n });\n }\n createAndSendOffer(options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const unlock = yield this.offerLock.lock();\n try {\n if (this.onOffer === undefined) {\n return;\n }\n if (options === null || options === void 0 ? void 0 : options.iceRestart) {\n this.log.debug('restarting ICE', this.logContext);\n this.restartingIce = true;\n }\n if (this._pc && (this._pc.signalingState === 'have-local-offer' || this.pendingInitialOffer)) {\n // we're waiting for the peer to accept our offer, so we'll just wait\n // the only exception to this is when ICE restart is needed\n const currentSD = this._pc.remoteDescription;\n if ((options === null || options === void 0 ? void 0 : options.iceRestart) && currentSD) {\n // TODO: handle when ICE restart is needed but we don't have a remote description\n // the best thing to do is to recreate the peerconnection\n yield this._pc.setRemoteDescription(currentSD);\n } else {\n this.renegotiate = true;\n this.log.debug('requesting renegotiation', Object.assign({}, this.logContext));\n return;\n }\n } else if (!this._pc || this._pc.signalingState === 'closed') {\n this.log.warn('could not createOffer with closed peer connection', this.logContext);\n return;\n }\n // actually negotiate\n this.log.debug('starting to negotiate', this.logContext);\n // increase the offer id at the start to ensure the offer is always > 0 so that we can use 0 as a default value for legacy behavior\n const offerId = this.latestOfferId + 1;\n this.latestOfferId = offerId;\n const offer = yield this.pc.createOffer(options);\n this.log.debug('original offer', Object.assign({\n sdp: offer.sdp\n }, this.logContext));\n const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n sdpParsed.media.forEach(media => {\n ensureIPAddrMatchVersion(media);\n if (media.type === 'audio') {\n ensureAudioNackAndStereo(media, ['all'], []);\n } else if (media.type === 'video') {\n this.trackBitrates.some(trackbr => {\n if (!media.msid || !trackbr.cid || !media.msid.includes(trackbr.cid)) {\n return false;\n }\n let codecPayload = 0;\n media.rtp.some(rtp => {\n if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {\n codecPayload = rtp.payload;\n return true;\n }\n return false;\n });\n if (codecPayload === 0) {\n return true;\n }\n if (isSVCCodec(trackbr.codec) && !isSafari()) {\n this.ensureVideoDDExtensionForSVC(media, sdpParsed);\n }\n // mung sdp for bitrate setting that can't apply by sendEncoding\n if (!isSVCCodec(trackbr.codec)) {\n return true;\n }\n const startBitrate = Math.round(trackbr.maxbr * startBitrateForSVC);\n for (const fmtp of media.fmtp) {\n if (fmtp.payload === codecPayload) {\n // if another track's fmtp already is set, we cannot override the bitrate\n // this has the unfortunate consequence of being forced to use the\n // initial track's bitrate for all tracks\n if (!fmtp.config.includes('x-google-start-bitrate')) {\n fmtp.config += \";x-google-start-bitrate=\".concat(startBitrate);\n }\n break;\n }\n }\n return true;\n });\n }\n });\n if (this.latestOfferId > offerId) {\n this.log.warn('latestOfferId mismatch', Object.assign(Object.assign({}, this.logContext), {\n latestOfferId: this.latestOfferId,\n offerId\n }));\n return;\n }\n yield this.setMungedSDP(offer, libExports.write(sdpParsed));\n this.onOffer(offer, this.latestOfferId);\n } finally {\n unlock();\n }\n });\n }\n createAndSetAnswer() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const answer = yield this.pc.createAnswer();\n const sdpParsed = libExports.parse((_a = answer.sdp) !== null && _a !== void 0 ? _a : '');\n sdpParsed.media.forEach(media => {\n ensureIPAddrMatchVersion(media);\n if (media.type === 'audio') {\n ensureAudioNackAndStereo(media, this.remoteStereoMids, this.remoteNackMids);\n }\n });\n yield this.setMungedSDP(answer, libExports.write(sdpParsed));\n return answer;\n });\n }\n createDataChannel(label, dataChannelDict) {\n return this.pc.createDataChannel(label, dataChannelDict);\n }\n addTransceiver(mediaStreamTrack, transceiverInit) {\n return this.pc.addTransceiver(mediaStreamTrack, transceiverInit);\n }\n addTransceiverOfKind(kind, transceiverInit) {\n return this.pc.addTransceiver(kind, transceiverInit);\n }\n addTrack(track) {\n if (!this._pc) {\n throw new UnexpectedConnectionState('PC closed, cannot add track');\n }\n return this._pc.addTrack(track);\n }\n setTrackCodecBitrate(info) {\n this.trackBitrates.push(info);\n }\n setConfiguration(rtcConfig) {\n var _a;\n if (!this._pc) {\n throw new UnexpectedConnectionState('PC closed, cannot configure');\n }\n return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.setConfiguration(rtcConfig);\n }\n canRemoveTrack() {\n var _a;\n return !!((_a = this._pc) === null || _a === void 0 ? void 0 : _a.removeTrack);\n }\n removeTrack(sender) {\n var _a;\n return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.removeTrack(sender);\n }\n getConnectionState() {\n var _a, _b;\n return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.connectionState) !== null && _b !== void 0 ? _b : 'closed';\n }\n getICEConnectionState() {\n var _a, _b;\n return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.iceConnectionState) !== null && _b !== void 0 ? _b : 'closed';\n }\n getSignallingState() {\n var _a, _b;\n return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.signalingState) !== null && _b !== void 0 ? _b : 'closed';\n }\n getTransceivers() {\n var _a, _b;\n return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : [];\n }\n getSenders() {\n var _a, _b;\n return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.getSenders()) !== null && _b !== void 0 ? _b : [];\n }\n getLocalDescription() {\n var _a;\n return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.localDescription;\n }\n getRemoteDescription() {\n var _a;\n return (_a = this.pc) === null || _a === void 0 ? void 0 : _a.remoteDescription;\n }\n getStats() {\n return this.pc.getStats();\n }\n getConnectedAddress() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!this._pc) {\n return;\n }\n let selectedCandidatePairId = '';\n const candidatePairs = new Map();\n // id -> candidate ip\n const candidates = new Map();\n const stats = yield this._pc.getStats();\n stats.forEach(v => {\n switch (v.type) {\n case 'transport':\n selectedCandidatePairId = v.selectedCandidatePairId;\n break;\n case 'candidate-pair':\n if (selectedCandidatePairId === '' && v.selected) {\n selectedCandidatePairId = v.id;\n }\n candidatePairs.set(v.id, v);\n break;\n case 'remote-candidate':\n candidates.set(v.id, \"\".concat(v.address, \":\").concat(v.port));\n break;\n }\n });\n if (selectedCandidatePairId === '') {\n return undefined;\n }\n const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;\n if (selectedID === undefined) {\n return undefined;\n }\n return candidates.get(selectedID);\n });\n }\n setMungedSDP(sd, munged, remote) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n const originalSdp = sd.sdp;\n if (munged) {\n sd.sdp = munged;\n try {\n this.log.debug(\"setting munged \".concat(remote ? 'remote' : 'local', \" description\"), this.logContext);\n if (remote) {\n yield this.pc.setRemoteDescription(sd);\n } else {\n yield this.pc.setLocalDescription(sd);\n }\n return;\n } catch (e) {\n this.log.warn(\"not able to set \".concat(sd.type, \", falling back to unmodified sdp\"), Object.assign(Object.assign({}, this.logContext), {\n error: e,\n mungedSdp: munged,\n originalSdp\n }));\n sd.sdp = originalSdp;\n }\n }\n try {\n if (remote) {\n yield (_a = this._pc) === null || _a === void 0 ? void 0 : _a.setRemoteDescription(sd);\n } else {\n yield (_b = this._pc) === null || _b === void 0 ? void 0 : _b.setLocalDescription(sd);\n }\n } catch (e) {\n let msg = 'unknown error';\n if (e instanceof Error) {\n msg = e.message;\n } else if (typeof e === 'string') {\n msg = e;\n }\n const fields = {\n error: msg,\n sdp: sd.sdp\n };\n if (munged && munged !== originalSdp) {\n fields.mungedSdp = munged;\n }\n if (!remote && this.pc.remoteDescription) {\n fields.remoteSdp = this.pc.remoteDescription;\n }\n this.log.error(\"unable to set \".concat(sd.type), Object.assign(Object.assign({}, this.logContext), {\n fields\n }));\n throw new NegotiationError(msg);\n }\n });\n }\n ensureVideoDDExtensionForSVC(media, sdp) {\n var _a, _b;\n const ddFound = (_a = media.ext) === null || _a === void 0 ? void 0 : _a.some(ext => {\n if (ext.uri === ddExtensionURI) {\n return true;\n }\n return false;\n });\n if (!ddFound) {\n if (this.ddExtID === 0) {\n let maxID = 0;\n sdp.media.forEach(m => {\n var _a;\n (_a = m.ext) === null || _a === void 0 ? void 0 : _a.forEach(ext => {\n if (ext.value > maxID) {\n maxID = ext.value;\n }\n });\n });\n this.ddExtID = maxID + 1;\n }\n (_b = media.ext) === null || _b === void 0 ? void 0 : _b.push({\n value: this.ddExtID,\n uri: ddExtensionURI\n });\n }\n }\n}\nfunction ensureAudioNackAndStereo(media, stereoMids, nackMids) {\n // sdp-transform types don't include number however the parser outputs mids as numbers in some cases\n const mid = getMidString(media.mid);\n // found opus codec to add nack fb\n let opusPayload = 0;\n media.rtp.some(rtp => {\n if (rtp.codec === 'opus') {\n opusPayload = rtp.payload;\n return true;\n }\n return false;\n });\n // add nack rtcpfb if not exist\n if (opusPayload > 0) {\n if (!media.rtcpFb) {\n media.rtcpFb = [];\n }\n if (nackMids.includes(mid) && !media.rtcpFb.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {\n media.rtcpFb.push({\n payload: opusPayload,\n type: 'nack'\n });\n }\n if (stereoMids.includes(mid) || stereoMids.length === 1 && stereoMids[0] === 'all') {\n media.fmtp.some(fmtp => {\n if (fmtp.payload === opusPayload) {\n if (!fmtp.config.includes('stereo=1')) {\n fmtp.config += ';stereo=1';\n }\n return true;\n }\n return false;\n });\n }\n }\n}\nfunction extractStereoAndNackAudioFromOffer(offer) {\n var _a;\n const stereoMids = [];\n const nackMids = [];\n const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n let opusPayload = 0;\n sdpParsed.media.forEach(media => {\n var _a;\n const mid = getMidString(media.mid);\n if (media.type === 'audio') {\n media.rtp.some(rtp => {\n if (rtp.codec === 'opus') {\n opusPayload = rtp.payload;\n return true;\n }\n return false;\n });\n if ((_a = media.rtcpFb) === null || _a === void 0 ? void 0 : _a.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {\n nackMids.push(mid);\n }\n media.fmtp.some(fmtp => {\n if (fmtp.payload === opusPayload) {\n if (fmtp.config.includes('sprop-stereo=1')) {\n stereoMids.push(mid);\n }\n return true;\n }\n return false;\n });\n }\n });\n return {\n stereoMids,\n nackMids\n };\n}\nfunction ensureIPAddrMatchVersion(media) {\n // Chrome could generate sdp with c = IN IP4 <ipv6 addr>\n // in edge case and return error when set sdp.This is not a\n // sdk error but correct it if the issue detected.\n if (media.connection) {\n const isV6 = media.connection.ip.indexOf(':') >= 0;\n if (media.connection.version === 4 && isV6 || media.connection.version === 6 && !isV6) {\n // fallback to dummy address\n media.connection.ip = '0.0.0.0';\n media.connection.version = 4;\n }\n }\n}\nfunction getMidString(mid) {\n return typeof mid === 'number' ? mid.toFixed(0) : mid;\n}const defaultVideoCodec = 'vp8';\nconst publishDefaults = {\n audioPreset: AudioPresets.music,\n dtx: true,\n red: true,\n forceStereo: false,\n simulcast: true,\n screenShareEncoding: ScreenSharePresets.h1080fps15.encoding,\n stopMicTrackOnMute: false,\n videoCodec: defaultVideoCodec,\n backupCodec: true,\n preConnectBuffer: false\n};\nconst audioDefaults = {\n deviceId: {\n ideal: 'default'\n },\n autoGainControl: true,\n echoCancellation: true,\n noiseSuppression: true,\n voiceIsolation: true\n};\nconst videoDefaults = {\n deviceId: {\n ideal: 'default'\n },\n resolution: VideoPresets.h720.resolution\n};\nconst roomOptionDefaults = {\n adaptiveStream: false,\n dynacast: false,\n stopLocalTrackOnUnpublish: true,\n reconnectPolicy: new DefaultReconnectPolicy(),\n disconnectOnPageLeave: true,\n webAudioMix: false,\n singlePeerConnection: true\n};\nconst roomConnectOptionDefaults = {\n autoSubscribe: true,\n maxRetries: 1,\n peerConnectionTimeout: 15000,\n websocketTimeout: 15000\n};var PCTransportState;\n(function (PCTransportState) {\n PCTransportState[PCTransportState[\"NEW\"] = 0] = \"NEW\";\n PCTransportState[PCTransportState[\"CONNECTING\"] = 1] = \"CONNECTING\";\n PCTransportState[PCTransportState[\"CONNECTED\"] = 2] = \"CONNECTED\";\n PCTransportState[PCTransportState[\"FAILED\"] = 3] = \"FAILED\";\n PCTransportState[PCTransportState[\"CLOSING\"] = 4] = \"CLOSING\";\n PCTransportState[PCTransportState[\"CLOSED\"] = 5] = \"CLOSED\";\n})(PCTransportState || (PCTransportState = {}));\nclass PCTransportManager {\n get needsPublisher() {\n return this.isPublisherConnectionRequired;\n }\n get needsSubscriber() {\n return this.isSubscriberConnectionRequired;\n }\n get currentState() {\n return this.state;\n }\n get mode() {\n return this._mode;\n }\n constructor(mode, loggerOptions, rtcConfig) {\n var _a;\n this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;\n this.log = livekitLogger;\n this.updateState = () => {\n var _a, _b;\n const previousState = this.state;\n const connectionStates = this.requiredTransports.map(tr => tr.getConnectionState());\n if (connectionStates.every(st => st === 'connected')) {\n this.state = PCTransportState.CONNECTED;\n } else if (connectionStates.some(st => st === 'failed')) {\n this.state = PCTransportState.FAILED;\n } else if (connectionStates.some(st => st === 'connecting')) {\n this.state = PCTransportState.CONNECTING;\n } else if (connectionStates.every(st => st === 'closed')) {\n this.state = PCTransportState.CLOSED;\n } else if (connectionStates.some(st => st === 'closed')) {\n this.state = PCTransportState.CLOSING;\n } else if (connectionStates.every(st => st === 'new')) {\n this.state = PCTransportState.NEW;\n }\n if (previousState !== this.state) {\n this.log.debug(\"pc state change: from \".concat(PCTransportState[previousState], \" to \").concat(PCTransportState[this.state]), this.logContext);\n (_a = this.onStateChange) === null || _a === void 0 ? void 0 : _a.call(this, this.state, this.publisher.getConnectionState(), (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.getConnectionState());\n }\n };\n this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.PCManager);\n this.loggerOptions = loggerOptions;\n this.isPublisherConnectionRequired = mode !== 'subscriber-primary';\n this.isSubscriberConnectionRequired = mode === 'subscriber-primary';\n this.publisher = new PCTransport(rtcConfig, loggerOptions);\n this._mode = mode;\n if (mode !== 'publisher-only') {\n this.subscriber = new PCTransport(rtcConfig, loggerOptions);\n this.subscriber.onConnectionStateChange = this.updateState;\n this.subscriber.onIceConnectionStateChange = this.updateState;\n this.subscriber.onSignalingStatechange = this.updateState;\n this.subscriber.onIceCandidate = candidate => {\n var _a;\n (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, candidate, SignalTarget.SUBSCRIBER);\n };\n // in subscriber primary mode, server side opens sub data channels.\n this.subscriber.onDataChannel = ev => {\n var _a;\n (_a = this.onDataChannel) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n };\n this.subscriber.onTrack = ev => {\n var _a;\n (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n };\n }\n this.publisher.onConnectionStateChange = this.updateState;\n this.publisher.onIceConnectionStateChange = this.updateState;\n this.publisher.onSignalingStatechange = this.updateState;\n this.publisher.onIceCandidate = candidate => {\n var _a;\n (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, candidate, SignalTarget.PUBLISHER);\n };\n this.publisher.onTrack = ev => {\n var _a;\n (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n };\n this.publisher.onOffer = (offer, offerId) => {\n var _a;\n (_a = this.onPublisherOffer) === null || _a === void 0 ? void 0 : _a.call(this, offer, offerId);\n };\n this.state = PCTransportState.NEW;\n this.connectionLock = new _();\n this.remoteOfferLock = new _();\n }\n get logContext() {\n var _a, _b;\n return Object.assign({}, (_b = (_a = this.loggerOptions).loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n }\n requirePublisher() {\n let require = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.isPublisherConnectionRequired = require;\n this.updateState();\n }\n createAndSendPublisherOffer(options) {\n return this.publisher.createAndSendOffer(options);\n }\n setPublisherAnswer(sd, offerId) {\n return this.publisher.setRemoteDescription(sd, offerId);\n }\n removeTrack(sender) {\n return this.publisher.removeTrack(sender);\n }\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this.publisher && this.publisher.getSignallingState() !== 'closed') {\n const publisher = this.publisher;\n for (const sender of publisher.getSenders()) {\n try {\n // TODO: react-native-webrtc doesn't have removeTrack yet.\n if (publisher.canRemoveTrack()) {\n publisher.removeTrack(sender);\n }\n } catch (e) {\n this.log.warn('could not removeTrack', Object.assign(Object.assign({}, this.logContext), {\n error: e\n }));\n }\n }\n }\n yield Promise.all([this.publisher.close(), (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.close()]);\n this.updateState();\n });\n }\n triggerIceRestart() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.subscriber) {\n this.subscriber.restartingIce = true;\n }\n // only restart publisher if it's needed\n if (this.needsPublisher) {\n yield this.createAndSendPublisherOffer({\n iceRestart: true\n });\n }\n });\n }\n addIceCandidate(candidate, target) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (target === SignalTarget.PUBLISHER) {\n yield this.publisher.addIceCandidate(candidate);\n } else {\n yield (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.addIceCandidate(candidate);\n }\n });\n }\n createSubscriberAnswerFromOffer(sd, offerId) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n this.log.debug('received server offer', Object.assign(Object.assign({}, this.logContext), {\n RTCSdpType: sd.type,\n sdp: sd.sdp,\n signalingState: (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.getSignallingState().toString()\n }));\n const unlock = yield this.remoteOfferLock.lock();\n try {\n const success = yield (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.setRemoteDescription(sd, offerId);\n if (!success) {\n return undefined;\n }\n // answer the offer\n const answer = yield (_c = this.subscriber) === null || _c === void 0 ? void 0 : _c.createAndSetAnswer();\n return answer;\n } finally {\n unlock();\n }\n });\n }\n updateConfiguration(config, iceRestart) {\n var _a;\n this.publisher.setConfiguration(config);\n (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.setConfiguration(config);\n if (iceRestart) {\n this.triggerIceRestart();\n }\n }\n ensurePCTransportConnection(abortController, timeout) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const unlock = yield this.connectionLock.lock();\n try {\n if (this.isPublisherConnectionRequired && this.publisher.getConnectionState() !== 'connected' && this.publisher.getConnectionState() !== 'connecting') {\n this.log.debug('negotiation required, start negotiating', this.logContext);\n this.publisher.negotiate();\n }\n yield Promise.all((_a = this.requiredTransports) === null || _a === void 0 ? void 0 : _a.map(transport => this.ensureTransportConnected(transport, abortController, timeout)));\n } finally {\n unlock();\n }\n });\n }\n negotiate(abortController) {\n return __awaiter(this, void 0, void 0, function* () {\n return new TypedPromise((resolve, reject) => {\n // Capture the publisher's latest offer id at request time. We are done\n // when an offer with a higher id has had its answer successfully\n // applied — that offer is the one that includes any transceiver/SDP\n // changes that motivated this negotiate call. Concurrent callers each\n // get their own checkpoint and resolve independently.\n const checkpoint = this.publisher.latestOfferId;\n // Race: an answer past our checkpoint already arrived before we had a\n // chance to subscribe.\n if (this.publisher.latestAcknowledgedOfferId > checkpoint) {\n this.log.debug(\"negotiation already handled in more recent acknowledged offer\", this.logContext);\n resolve();\n return;\n }\n let cleanedUp = false;\n const cleanup = () => {\n if (cleanedUp) return;\n cleanedUp = true;\n clearTimeout(deadlineTimer);\n this.publisher.off(PCEvents.OfferAnswered, onAnswered);\n abortController.signal.removeEventListener('abort', onAbort);\n };\n const onAnswered = offerId => {\n if (offerId > checkpoint) {\n cleanup();\n resolve();\n }\n };\n const onAbort = () => {\n cleanup();\n reject(new NegotiationError('negotiation aborted'));\n };\n // Single hard deadline as a backstop. Not reset on cycle progress —\n // progress is tracked via OfferAnswered, not NegotiationStarted.\n const deadlineTimer = setTimeout(() => {\n cleanup();\n reject(new NegotiationError('negotiation timed out'));\n }, this.peerConnectionTimeout);\n abortController.signal.addEventListener('abort', onAbort);\n this.publisher.on(PCEvents.OfferAnswered, onAnswered);\n this.publisher.negotiate(e => {\n cleanup();\n if (e instanceof Error) {\n reject(e);\n } else {\n reject(new Error(String(e)));\n }\n });\n });\n });\n }\n addPublisherTransceiver(track, transceiverInit) {\n return this.publisher.addTransceiver(track, transceiverInit);\n }\n addPublisherTransceiverOfKind(kind, transceiverInit) {\n return this.publisher.addTransceiverOfKind(kind, transceiverInit);\n }\n getMidForReceiver(receiver) {\n const transceivers = this.subscriber ? this.subscriber.getTransceivers() : this.publisher.getTransceivers();\n const matchingTransceiver = transceivers.find(transceiver => transceiver.receiver === receiver);\n return matchingTransceiver === null || matchingTransceiver === void 0 ? void 0 : matchingTransceiver.mid;\n }\n addPublisherTrack(track) {\n return this.publisher.addTrack(track);\n }\n createPublisherDataChannel(label, dataChannelDict) {\n return this.publisher.createDataChannel(label, dataChannelDict);\n }\n /**\n * Returns the first required transport's address if no explicit target is specified\n */\n getConnectedAddress(target) {\n if (target === SignalTarget.PUBLISHER) {\n return this.publisher.getConnectedAddress();\n } else if (target === SignalTarget.SUBSCRIBER) {\n return this.publisher.getConnectedAddress();\n }\n return this.requiredTransports[0].getConnectedAddress();\n }\n get requiredTransports() {\n const transports = [];\n if (this.isPublisherConnectionRequired) {\n transports.push(this.publisher);\n }\n if (this.isSubscriberConnectionRequired && this.subscriber) {\n transports.push(this.subscriber);\n }\n return transports;\n }\n ensureTransportConnected(pcTransport_1, abortController_1) {\n return __awaiter(this, arguments, void 0, function (pcTransport, abortController) {\n var _this = this;\n let timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.peerConnectionTimeout;\n return function* () {\n const connectionState = pcTransport.getConnectionState();\n if (connectionState === 'connected') {\n return;\n }\n return new Promise((resolve, reject) => __awaiter(_this, void 0, void 0, function* () {\n const abortHandler = () => {\n this.log.warn('abort transport connection', this.logContext);\n CriticalTimers.clearTimeout(connectTimeout);\n reject(ConnectionError.cancelled('room connection has been cancelled'));\n };\n if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {\n abortHandler();\n }\n abortController === null || abortController === void 0 ? void 0 : abortController.signal.addEventListener('abort', abortHandler);\n const connectTimeout = CriticalTimers.setTimeout(() => {\n abortController === null || abortController === void 0 ? void 0 : abortController.signal.removeEventListener('abort', abortHandler);\n reject(ConnectionError.internal('could not establish pc connection'));\n }, timeout);\n while (this.state !== PCTransportState.CONNECTED) {\n yield sleep(50); // FIXME we shouldn't rely on `sleep` in the connection paths, as it invokes `setTimeout` which can be drastically throttled by browser implementations\n if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {\n reject(ConnectionError.cancelled('room connection has been cancelled'));\n return;\n }\n }\n CriticalTimers.clearTimeout(connectTimeout);\n abortController === null || abortController === void 0 ? void 0 : abortController.signal.removeEventListener('abort', abortHandler);\n resolve();\n }));\n }();\n });\n }\n}// Check if MediaRecorder is available\nconst isMediaRecorderAvailable = typeof MediaRecorder !== 'undefined';\n// Fallback class for environments without MediaRecorder\nclass FallbackRecorder {\n constructor() {\n throw new Error('MediaRecorder is not available in this environment');\n }\n}\n// Use conditional inheritance to avoid parse-time errors\nconst RecorderBase = isMediaRecorderAvailable ? MediaRecorder : FallbackRecorder;\nclass LocalTrackRecorder extends RecorderBase {\n constructor(track, options) {\n if (!isMediaRecorderAvailable) {\n throw new Error('MediaRecorder is not available in this environment');\n }\n super(new MediaStream([track.mediaStreamTrack]), options);\n let dataListener;\n let streamController;\n const isClosed = () => streamController === undefined;\n const onStop = () => {\n this.removeEventListener('dataavailable', dataListener);\n this.removeEventListener('stop', onStop);\n this.removeEventListener('error', onError);\n streamController === null || streamController === void 0 ? void 0 : streamController.close();\n streamController = undefined;\n };\n const onError = event => {\n streamController === null || streamController === void 0 ? void 0 : streamController.error(event);\n this.removeEventListener('dataavailable', dataListener);\n this.removeEventListener('stop', onStop);\n this.removeEventListener('error', onError);\n streamController = undefined;\n };\n this.byteStream = new ReadableStream({\n start: controller => {\n streamController = controller;\n dataListener = event => __awaiter(this, void 0, void 0, function* () {\n let data;\n if (event.data.arrayBuffer) {\n const arrayBuffer = yield event.data.arrayBuffer();\n data = new Uint8Array(arrayBuffer);\n // @ts-expect-error react-native passes over Uint8Arrays directly\n } else if (event.data.byteArray) {\n // @ts-expect-error\n data = event.data.byteArray;\n } else {\n throw new Error('no data available!');\n }\n if (isClosed()) {\n return;\n }\n controller.enqueue(data);\n });\n this.addEventListener('dataavailable', dataListener);\n },\n cancel: () => {\n onStop();\n }\n });\n this.addEventListener('stop', onStop);\n this.addEventListener('error', onError);\n }\n}\n// Helper function to check if recording is supported\nfunction isRecordingSupported() {\n return isMediaRecorderAvailable;\n}const DEFAULT_DIMENSIONS_TIMEOUT = 1000;\nconst PRE_CONNECT_BUFFER_TIMEOUT = 10000;\nclass LocalTrack extends Track {\n /** @internal */\n get sender() {\n return this._sender;\n }\n /** @internal */\n set sender(sender) {\n this._sender = sender;\n }\n get constraints() {\n return this._constraints;\n }\n get hasPreConnectBuffer() {\n return !!this.localTrackRecorder;\n }\n /**\n *\n * @param mediaTrack\n * @param kind\n * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n */\n constructor(mediaTrack, kind, constraints) {\n let userProvidedTrack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n let loggerOptions = arguments.length > 4 ? arguments[4] : undefined;\n super(mediaTrack, kind, loggerOptions);\n this.manuallyStopped = false;\n this.pendingDeviceChange = false;\n this._isUpstreamPaused = false;\n this.handleTrackMuteEvent = () => this.debouncedTrackMuteHandler().catch(() => this.log.debug('track mute bounce got cancelled by an unmute event', this.logContext));\n this.debouncedTrackMuteHandler = debounce(() => __awaiter(this, void 0, void 0, function* () {\n yield this.pauseUpstream();\n }), 5000);\n this.handleTrackUnmuteEvent = () => __awaiter(this, void 0, void 0, function* () {\n this.debouncedTrackMuteHandler.cancel('unmute');\n yield this.resumeUpstream();\n });\n this.handleEnded = () => {\n if (this.isInBackground) {\n this.reacquireTrack = true;\n }\n this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n this.emit(TrackEvent.Ended, this);\n };\n this.reacquireTrack = false;\n this.providedByUser = userProvidedTrack;\n this.muteLock = new _();\n this.pauseUpstreamLock = new _();\n this.trackChangeLock = new _();\n this.trackChangeLock.lock().then(unlock => __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.setMediaStreamTrack(mediaTrack, true);\n } finally {\n unlock();\n }\n }));\n // added to satisfy TS compiler, constraints are synced with MediaStreamTrack\n this._constraints = mediaTrack.getConstraints();\n if (constraints) {\n this._constraints = constraints;\n }\n }\n get id() {\n return this._mediaStreamTrack.id;\n }\n get dimensions() {\n if (this.kind !== Track.Kind.Video) {\n return undefined;\n }\n const _this$_mediaStreamTra = this._mediaStreamTrack.getSettings(),\n width = _this$_mediaStreamTra.width,\n height = _this$_mediaStreamTra.height;\n if (width && height) {\n return {\n width,\n height\n };\n }\n return undefined;\n }\n get isUpstreamPaused() {\n return this._isUpstreamPaused;\n }\n get isUserProvided() {\n return this.providedByUser;\n }\n get mediaStreamTrack() {\n var _a, _b;\n return (_b = (_a = this.processor) === null || _a === void 0 ? void 0 : _a.processedTrack) !== null && _b !== void 0 ? _b : this._mediaStreamTrack;\n }\n get isLocal() {\n return true;\n }\n /**\n * @internal\n * returns mediaStreamTrack settings of the capturing mediastreamtrack source - ignoring processors\n */\n getSourceTrackSettings() {\n return this._mediaStreamTrack.getSettings();\n }\n setMediaStreamTrack(newTrack, force, isUnmuting) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (newTrack === this._mediaStreamTrack && !force) {\n return;\n }\n if (this._mediaStreamTrack) {\n // detach\n this.attachedElements.forEach(el => {\n detachTrack(this._mediaStreamTrack, el);\n });\n this.debouncedTrackMuteHandler.cancel('new-track');\n this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n }\n this.mediaStream = new MediaStream([newTrack]);\n if (newTrack) {\n newTrack.addEventListener('ended', this.handleEnded);\n // when underlying track emits mute, it indicates that the device is unable\n // to produce media. In this case we'll need to signal with remote that\n // the track is \"muted\"\n // note this is different from LocalTrack.mute because we do not want to\n // touch MediaStreamTrack.enabled\n newTrack.addEventListener('mute', this.handleTrackMuteEvent);\n newTrack.addEventListener('unmute', this.handleTrackUnmuteEvent);\n this._constraints = newTrack.getConstraints();\n }\n let processedTrack;\n if (this.processor && newTrack) {\n this.log.debug('restarting processor', this.logContext);\n if (this.kind === 'unknown') {\n throw TypeError('cannot set processor on track of unknown kind');\n }\n if (this.processorElement) {\n attachToElement(newTrack, this.processorElement);\n // ensure the processorElement itself stays muted\n this.processorElement.muted = true;\n }\n yield this.processor.restart({\n track: newTrack,\n kind: this.kind,\n element: this.processorElement,\n localTrack: this\n });\n processedTrack = this.processor.processedTrack;\n }\n if (this.sender && ((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n yield this.sender.replaceTrack(processedTrack !== null && processedTrack !== void 0 ? processedTrack : newTrack);\n }\n // if `newTrack` is different from the existing track, stop the\n // older track just before replacing it\n if (!this.providedByUser && this._mediaStreamTrack !== newTrack) {\n this._mediaStreamTrack.stop();\n }\n this._mediaStreamTrack = newTrack;\n if (newTrack) {\n // sync muted state with the enabled state of the newly provided track\n // if restarting as part of an unmute, set enabled to true directly to avoid mute cycling\n this._mediaStreamTrack.enabled = isUnmuting ? true : !this.isMuted;\n // when a valid track is replace, we'd want to start producing\n yield this.resumeUpstream();\n this.attachedElements.forEach(el => {\n attachToElement(processedTrack !== null && processedTrack !== void 0 ? processedTrack : newTrack, el);\n });\n }\n });\n }\n waitForDimensions() {\n return __awaiter(this, arguments, void 0, function () {\n var _this = this;\n let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DIMENSIONS_TIMEOUT;\n return function* () {\n var _a;\n if (_this.kind === Track.Kind.Audio) {\n throw new Error('cannot get dimensions for audio tracks');\n }\n if (((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.os) === 'iOS') {\n // browsers report wrong initial resolution on iOS.\n // when slightly delaying the call to .getSettings(), the correct resolution is being reported\n yield sleep(10);\n }\n const started = Date.now();\n while (Date.now() - started < timeout) {\n const dims = _this.dimensions;\n if (dims) {\n return dims;\n }\n yield sleep(50);\n }\n throw new TrackInvalidError('unable to get track dimensions after timeout');\n }();\n });\n }\n setDeviceId(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._constraints.deviceId === deviceId && this._mediaStreamTrack.getSettings().deviceId === unwrapConstraint(deviceId)) {\n return true;\n }\n this._constraints.deviceId = deviceId;\n // when track is muted, underlying media stream track is stopped and\n // will be restarted later\n if (this.isMuted) {\n this.pendingDeviceChange = true;\n return true;\n }\n yield this.restartTrack();\n return unwrapConstraint(deviceId) === this._mediaStreamTrack.getSettings().deviceId;\n });\n }\n /**\n * @returns DeviceID of the device that is currently being used for this track\n */\n getDeviceId() {\n return __awaiter(this, arguments, void 0, function () {\n var _this2 = this;\n let normalize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n return function* () {\n // screen share doesn't have a usable device id\n if (_this2.source === Track.Source.ScreenShare) {\n return;\n }\n const _this2$_mediaStreamTr = _this2._mediaStreamTrack.getSettings(),\n deviceId = _this2$_mediaStreamTr.deviceId,\n groupId = _this2$_mediaStreamTr.groupId;\n const kind = _this2.kind === Track.Kind.Audio ? 'audioinput' : 'videoinput';\n return normalize ? DeviceManager.getInstance().normalizeDeviceId(kind, deviceId, groupId) : deviceId;\n }();\n });\n }\n mute() {\n return __awaiter(this, void 0, void 0, function* () {\n this.setTrackMuted(true);\n return this;\n });\n }\n unmute() {\n return __awaiter(this, void 0, void 0, function* () {\n this.setTrackMuted(false);\n return this;\n });\n }\n replaceTrack(track, userProvidedOrOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.trackChangeLock.lock();\n try {\n if (!this.sender) {\n throw new TrackInvalidError('unable to replace an unpublished track');\n }\n let userProvidedTrack;\n let stopProcessor;\n if (typeof userProvidedOrOptions === 'boolean') {\n userProvidedTrack = userProvidedOrOptions;\n } else if (userProvidedOrOptions !== undefined) {\n userProvidedTrack = userProvidedOrOptions.userProvidedTrack;\n stopProcessor = userProvidedOrOptions.stopProcessor;\n }\n this.providedByUser = userProvidedTrack !== null && userProvidedTrack !== void 0 ? userProvidedTrack : true;\n this.log.debug('replace MediaStreamTrack', this.logContext);\n yield this.setMediaStreamTrack(track);\n // this must be synced *after* setting mediaStreamTrack above, since it relies\n // on the previous state in order to cleanup\n if (stopProcessor && this.processor) {\n yield this.internalStopProcessor();\n }\n } finally {\n unlock();\n }\n yield this.onSenderTrackSwapped();\n return this;\n });\n }\n /**\n * Hook invoked after the MediaStreamTrack on the sender has been swapped\n * (via replaceTrack, setProcessor, or stopProcessor). Fires outside the\n * trackChangeLock so subclasses can do asynchronous work such as polling\n * for new dimensions without blocking other track operations.\n */\n onSenderTrackSwapped() {\n return __awaiter(this, void 0, void 0, function* () {\n // base implementation is a no-op; LocalVideoTrack overrides this to\n // recompute sender encoding parameters.\n });\n }\n restart(constraints, isUnmuting) {\n return __awaiter(this, void 0, void 0, function* () {\n this.manuallyStopped = false;\n const unlock = yield this.trackChangeLock.lock();\n try {\n if (!constraints) {\n constraints = this._constraints;\n }\n const _constraints = constraints,\n deviceId = _constraints.deviceId,\n facingMode = _constraints.facingMode,\n otherConstraints = __rest(constraints, [\"deviceId\", \"facingMode\"]);\n this.log.debug('restarting track with constraints', Object.assign(Object.assign({}, this.logContext), {\n constraints\n }));\n const streamConstraints = {\n audio: false,\n video: false\n };\n if (this.kind === Track.Kind.Video) {\n streamConstraints.video = deviceId || facingMode ? {\n deviceId,\n facingMode\n } : true;\n } else {\n streamConstraints.audio = deviceId ? Object.assign({\n deviceId\n }, otherConstraints) : true;\n }\n // these steps are duplicated from setMediaStreamTrack because we must stop\n // the previous tracks before new tracks can be acquired\n this.attachedElements.forEach(el => {\n detachTrack(this.mediaStreamTrack, el);\n });\n this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n // on Safari, the old audio track must be stopped before attempting to acquire\n // the new track, otherwise the new track will stop with\n // 'A MediaStreamTrack ended due to a capture failure`\n this._mediaStreamTrack.stop();\n // create new track and attach\n const mediaStream = yield navigator.mediaDevices.getUserMedia(streamConstraints);\n const newTrack = mediaStream.getTracks()[0];\n if (this.kind === Track.Kind.Video) {\n // we already captured the audio track with the constraints, so we only need to apply the video constraints\n yield newTrack.applyConstraints(otherConstraints);\n }\n newTrack.addEventListener('ended', this.handleEnded);\n this.log.debug('re-acquired MediaStreamTrack', this.logContext);\n yield this.setMediaStreamTrack(newTrack, false, isUnmuting);\n this._constraints = constraints;\n this.pendingDeviceChange = false;\n this.emit(TrackEvent.Restarted, this);\n if (this.manuallyStopped) {\n this.log.warn('track was stopped during a restart, stopping restarted track', this.logContext);\n this.stop();\n }\n return this;\n } finally {\n unlock();\n }\n });\n }\n setTrackMuted(muted) {\n this.log.debug(\"setting \".concat(this.kind, \" track \").concat(muted ? 'muted' : 'unmuted'), this.logContext);\n if (this.isMuted === muted && this._mediaStreamTrack.enabled !== muted) {\n return;\n }\n this.isMuted = muted;\n this._mediaStreamTrack.enabled = !muted;\n this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n }\n get needsReAcquisition() {\n return this._mediaStreamTrack.readyState !== 'live' || this._mediaStreamTrack.muted || !this._mediaStreamTrack.enabled || this.reacquireTrack;\n }\n handleAppVisibilityChanged() {\n const _super = Object.create(null, {\n handleAppVisibilityChanged: {\n get: () => super.handleAppVisibilityChanged\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.handleAppVisibilityChanged.call(this);\n if (!isMobile()) return;\n this.log.debug(\"visibility changed, is in Background: \".concat(this.isInBackground), this.logContext);\n if (!this.isInBackground && this.needsReAcquisition && !this.isUserProvided && !this.isMuted) {\n this.log.debug(\"track needs to be reacquired, restarting \".concat(this.source), this.logContext);\n yield this.restart();\n this.reacquireTrack = false;\n }\n });\n }\n stop() {\n var _a;\n this.manuallyStopped = true;\n super.stop();\n this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n (_a = this.processor) === null || _a === void 0 ? void 0 : _a.destroy();\n this.processor = undefined;\n }\n /**\n * pauses publishing to the server without disabling the local MediaStreamTrack\n * this is used to display a user's own video locally while pausing publishing to\n * the server.\n * this API is unsupported on Safari < 12 due to a bug\n **/\n pauseUpstream() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const unlock = yield this.pauseUpstreamLock.lock();\n try {\n if (this._isUpstreamPaused === true) {\n return;\n }\n if (!this.sender) {\n this.log.warn('unable to pause upstream for an unpublished track', this.logContext);\n return;\n }\n this._isUpstreamPaused = true;\n this.emit(TrackEvent.UpstreamPaused, this);\n const browser = getBrowser();\n if ((browser === null || browser === void 0 ? void 0 : browser.name) === 'Safari' && compareVersions(browser.version, '12.0') < 0) {\n // https://bugs.webkit.org/show_bug.cgi?id=184911\n throw new DeviceUnsupportedError('pauseUpstream is not supported on Safari < 12.');\n }\n if (((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n yield this.sender.replaceTrack(null);\n }\n } finally {\n unlock();\n }\n });\n }\n resumeUpstream() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const unlock = yield this.pauseUpstreamLock.lock();\n try {\n if (this._isUpstreamPaused === false) {\n return;\n }\n if (!this.sender) {\n this.log.warn('unable to resume upstream for an unpublished track', this.logContext);\n return;\n }\n this._isUpstreamPaused = false;\n this.emit(TrackEvent.UpstreamResumed, this);\n if (((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n // this operation is noop if mediastreamtrack is already being sent\n yield this.sender.replaceTrack(this.mediaStreamTrack);\n }\n } finally {\n unlock();\n }\n });\n }\n /**\n * Gets the RTCStatsReport for the LocalTrack's underlying RTCRtpSender\n * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport\n *\n * @returns Promise<RTCStatsReport> | undefined\n */\n getRTCStatsReport() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n return;\n }\n const statsReport = yield this.sender.getStats();\n return statsReport;\n });\n }\n /**\n * Sets a processor on this track.\n * See https://github.com/livekit/track-processors-js for example usage\n *\n * @param processor\n * @param showProcessedStreamLocally\n * @returns\n */\n setProcessor(processor_1) {\n return __awaiter(this, arguments, void 0, function (processor) {\n var _this3 = this;\n let showProcessedStreamLocally = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return function* () {\n var _a;\n const unlock = yield _this3.trackChangeLock.lock();\n try {\n _this3.log.debug('setting up processor', _this3.logContext);\n const processorElement = document.createElement(_this3.kind);\n const processorOptions = {\n kind: _this3.kind,\n track: _this3._mediaStreamTrack,\n element: processorElement,\n audioContext: _this3.audioContext,\n localTrack: _this3\n };\n yield processor.init(processorOptions);\n _this3.log.debug('processor initialized', _this3.logContext);\n if (_this3.processor) {\n yield _this3.internalStopProcessor();\n }\n if (_this3.kind === 'unknown') {\n throw TypeError('cannot set processor on track of unknown kind');\n }\n attachToElement(_this3._mediaStreamTrack, processorElement);\n processorElement.muted = true;\n processorElement.play().catch(error => {\n if (error instanceof DOMException && error.name === 'AbortError') {\n // This happens on Safari when the processor is restarted, try again after a delay\n _this3.log.warn('failed to play processor element, retrying', Object.assign(Object.assign({}, _this3.logContext), {\n error\n }));\n setTimeout(() => {\n processorElement.play().catch(err => {\n _this3.log.error('failed to play processor element', Object.assign(Object.assign({}, _this3.logContext), {\n err\n }));\n });\n }, 100);\n } else {\n _this3.log.error('failed to play processor element', Object.assign(Object.assign({}, _this3.logContext), {\n error\n }));\n }\n });\n _this3.processor = processor;\n _this3.processorElement = processorElement;\n if (_this3.processor.processedTrack) {\n for (const el of _this3.attachedElements) {\n if (el !== _this3.processorElement && showProcessedStreamLocally) {\n detachTrack(_this3._mediaStreamTrack, el);\n attachToElement(_this3.processor.processedTrack, el);\n }\n }\n yield (_a = _this3.sender) === null || _a === void 0 ? void 0 : _a.replaceTrack(_this3.processor.processedTrack);\n }\n _this3.emit(TrackEvent.TrackProcessorUpdate, _this3.processor);\n } finally {\n unlock();\n }\n yield _this3.onSenderTrackSwapped();\n }();\n });\n }\n getProcessor() {\n return this.processor;\n }\n /**\n * Stops the track processor\n * See https://github.com/livekit/track-processors-js for example usage\n *\n */\n stopProcessor() {\n return __awaiter(this, arguments, void 0, function () {\n var _this4 = this;\n let keepElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n return function* () {\n const unlock = yield _this4.trackChangeLock.lock();\n try {\n yield _this4.internalStopProcessor(keepElement);\n } finally {\n unlock();\n }\n yield _this4.onSenderTrackSwapped();\n }();\n });\n }\n /**\n * @internal\n * This method assumes the caller has acquired a trackChangeLock already.\n * The public facing method for stopping the processor is `stopProcessor` and it wraps this method in the trackChangeLock.\n */\n internalStopProcessor() {\n return __awaiter(this, arguments, void 0, function () {\n var _this5 = this;\n let keepElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n return function* () {\n var _a, _b;\n if (!_this5.processor) return;\n _this5.log.debug('stopping processor', _this5.logContext);\n (_a = _this5.processor.processedTrack) === null || _a === void 0 ? void 0 : _a.stop();\n yield _this5.processor.destroy();\n _this5.processor = undefined;\n if (!keepElement) {\n (_b = _this5.processorElement) === null || _b === void 0 ? void 0 : _b.remove();\n _this5.processorElement = undefined;\n }\n // apply original track constraints in case the processor changed them\n yield _this5._mediaStreamTrack.applyConstraints(_this5._constraints);\n // force re-setting of the mediaStreamTrack on the sender\n yield _this5.setMediaStreamTrack(_this5._mediaStreamTrack, true);\n _this5.emit(TrackEvent.TrackProcessorUpdate);\n }();\n });\n }\n /** @internal */\n startPreConnectBuffer() {\n let timeslice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n if (!isRecordingSupported()) {\n this.log.warn('MediaRecorder is not available, cannot start preconnect buffer', this.logContext);\n return;\n }\n if (!this.localTrackRecorder) {\n let mimeType = 'audio/webm;codecs=opus';\n if (!MediaRecorder.isTypeSupported(mimeType)) {\n // iOS currently only supports video/mp4 as a mime type - even for audio.\n mimeType = 'video/mp4';\n }\n this.localTrackRecorder = new LocalTrackRecorder(this, {\n mimeType\n });\n } else {\n this.log.warn('preconnect buffer already started');\n return;\n }\n this.localTrackRecorder.start(timeslice);\n this.autoStopPreConnectBuffer = setTimeout(() => {\n this.log.warn('preconnect buffer timed out, stopping recording automatically', this.logContext);\n this.stopPreConnectBuffer();\n }, PRE_CONNECT_BUFFER_TIMEOUT);\n }\n /** @internal */\n stopPreConnectBuffer() {\n clearTimeout(this.autoStopPreConnectBuffer);\n if (this.localTrackRecorder) {\n this.localTrackRecorder.stop();\n this.localTrackRecorder = undefined;\n }\n }\n /** @internal */\n getPreConnectBuffer() {\n var _a;\n return (_a = this.localTrackRecorder) === null || _a === void 0 ? void 0 : _a.byteStream;\n }\n getPreConnectBufferMimeType() {\n var _a;\n return (_a = this.localTrackRecorder) === null || _a === void 0 ? void 0 : _a.mimeType;\n }\n}class LocalAudioTrack extends LocalTrack {\n /**\n * boolean indicating whether enhanced noise cancellation is currently being used on this track\n */\n get enhancedNoiseCancellation() {\n return this.isKrispNoiseFilterEnabled;\n }\n /**\n *\n * @param mediaTrack\n * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n */\n constructor(mediaTrack, constraints) {\n let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n let audioContext = arguments.length > 3 ? arguments[3] : undefined;\n let loggerOptions = arguments.length > 4 ? arguments[4] : undefined;\n super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack, loggerOptions);\n /** @internal */\n this.stopOnMute = false;\n this.isKrispNoiseFilterEnabled = false;\n this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {\n if (!this.sender) {\n this._currentBitrate = 0;\n return;\n }\n let stats;\n try {\n stats = yield this.getSenderStats();\n } catch (e) {\n this.log.error('could not get audio sender stats', Object.assign(Object.assign({}, this.logContext), {\n error: e\n }));\n return;\n }\n if (stats && this.prevStats) {\n this._currentBitrate = computeBitrate(stats, this.prevStats);\n }\n this.prevStats = stats;\n });\n this.handleKrispNoiseFilterEnable = () => {\n this.isKrispNoiseFilterEnabled = true;\n this.log.debug(\"Krisp noise filter enabled\", this.logContext);\n this.emit(TrackEvent.AudioTrackFeatureUpdate, this, AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION, true);\n };\n this.handleKrispNoiseFilterDisable = () => {\n this.isKrispNoiseFilterEnabled = false;\n this.log.debug(\"Krisp noise filter disabled\", this.logContext);\n this.emit(TrackEvent.AudioTrackFeatureUpdate, this, AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION, false);\n };\n this.audioContext = audioContext;\n this.checkForSilence();\n }\n mute() {\n const _super = Object.create(null, {\n mute: {\n get: () => super.mute\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.muteLock.lock();\n try {\n if (this.isMuted) {\n this.log.debug('Track already muted', this.logContext);\n return this;\n }\n // disabled special handling as it will cause BT headsets to switch communication modes\n if (this.source === Track.Source.Microphone && this.stopOnMute && !this.isUserProvided) {\n this.log.debug('stopping mic track', this.logContext);\n // also stop the track, so that microphone indicator is turned off\n this._mediaStreamTrack.stop();\n }\n yield _super.mute.call(this);\n return this;\n } finally {\n unlock();\n }\n });\n }\n unmute() {\n const _super = Object.create(null, {\n unmute: {\n get: () => super.unmute\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.muteLock.lock();\n try {\n if (!this.isMuted) {\n this.log.debug('Track already unmuted', this.logContext);\n return this;\n }\n if (this.source === Track.Source.Microphone && (this.stopOnMute || this._mediaStreamTrack.readyState === 'ended' || this.pendingDeviceChange) && !this.isUserProvided) {\n this.log.debug('reacquiring mic track', this.logContext);\n yield this.restart(undefined, true);\n }\n yield _super.unmute.call(this);\n return this;\n } finally {\n unlock();\n }\n });\n }\n restartTrack(options) {\n return __awaiter(this, void 0, void 0, function* () {\n let constraints;\n if (options) {\n const streamConstraints = constraintsForOptions({\n audio: options\n });\n if (typeof streamConstraints.audio !== 'boolean') {\n constraints = streamConstraints.audio;\n }\n }\n yield this.restart(constraints);\n });\n }\n restart(constraints, isUnmuting) {\n const _super = Object.create(null, {\n restart: {\n get: () => super.restart\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n const track = yield _super.restart.call(this, constraints, isUnmuting);\n this.checkForSilence();\n return track;\n });\n }\n /* @internal */\n startMonitor() {\n if (!isWeb()) {\n return;\n }\n if (this.monitorInterval) {\n return;\n }\n this.monitorInterval = setInterval(() => {\n this.monitorSender();\n }, monitorFrequency);\n }\n setProcessor(processor) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const unlock = yield this.trackChangeLock.lock();\n try {\n if (!isReactNative() && !this.audioContext) {\n throw Error('Audio context needs to be set on LocalAudioTrack in order to enable processors');\n }\n if (this.processor) {\n yield this.internalStopProcessor();\n }\n const processorOptions = {\n kind: this.kind,\n track: this._mediaStreamTrack,\n // RN won't have or use AudioContext\n audioContext: this.audioContext,\n localTrack: this\n };\n this.log.debug(\"setting up audio processor \".concat(processor.name), this.logContext);\n yield processor.init(processorOptions);\n this.processor = processor;\n if (this.processor.processedTrack) {\n yield (_a = this.sender) === null || _a === void 0 ? void 0 : _a.replaceTrack(this.processor.processedTrack);\n this.processor.processedTrack.addEventListener('enable-lk-krisp-noise-filter', this.handleKrispNoiseFilterEnable);\n this.processor.processedTrack.addEventListener('disable-lk-krisp-noise-filter', this.handleKrispNoiseFilterDisable);\n }\n this.emit(TrackEvent.TrackProcessorUpdate, this.processor);\n } finally {\n unlock();\n }\n });\n }\n /**\n * @internal\n * @experimental\n */\n setAudioContext(audioContext) {\n this.audioContext = audioContext;\n }\n getSenderStats() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n return undefined;\n }\n const stats = yield this.sender.getStats();\n let audioStats;\n stats.forEach(v => {\n if (v.type === 'outbound-rtp') {\n audioStats = {\n type: 'audio',\n streamId: v.id,\n packetsSent: v.packetsSent,\n packetsLost: v.packetsLost,\n bytesSent: v.bytesSent,\n timestamp: v.timestamp,\n roundTripTime: v.roundTripTime,\n jitter: v.jitter\n };\n }\n });\n return audioStats;\n });\n }\n checkForSilence() {\n return __awaiter(this, void 0, void 0, function* () {\n const trackIsSilent = yield detectSilence(this);\n if (trackIsSilent) {\n if (!this.isMuted) {\n this.log.debug('silence detected on local audio track', this.logContext);\n }\n this.emit(TrackEvent.AudioSilenceDetected);\n }\n return trackIsSilent;\n });\n }\n}/** @internal */\nfunction mediaTrackToLocalTrack(mediaStreamTrack, constraints, loggerOptions) {\n switch (mediaStreamTrack.kind) {\n case 'audio':\n return new LocalAudioTrack(mediaStreamTrack, constraints, false, undefined, loggerOptions);\n case 'video':\n return new LocalVideoTrack(mediaStreamTrack, constraints, false, loggerOptions);\n default:\n throw new TrackInvalidError(\"unsupported track type: \".concat(mediaStreamTrack.kind));\n }\n}\n/* @internal */\nconst presets169 = Object.values(VideoPresets);\n/* @internal */\nconst presets43 = Object.values(VideoPresets43);\n/* @internal */\nconst presetsScreenShare = Object.values(ScreenSharePresets);\n/* @internal */\nconst defaultSimulcastPresets169 = [VideoPresets.h180, VideoPresets.h360];\n/* @internal */\nconst defaultSimulcastPresets43 = [VideoPresets43.h180, VideoPresets43.h360];\n/* @internal */\nconst computeDefaultScreenShareSimulcastPresets = fromPreset => {\n const layers = [{\n scaleResolutionDownBy: 2,\n fps: fromPreset.encoding.maxFramerate\n }];\n return layers.map(t => {\n var _a, _b;\n return new VideoPreset(Math.floor(fromPreset.width / t.scaleResolutionDownBy), Math.floor(fromPreset.height / t.scaleResolutionDownBy), Math.max(150000, Math.floor(fromPreset.encoding.maxBitrate / (Math.pow(t.scaleResolutionDownBy, 2) * (((_a = fromPreset.encoding.maxFramerate) !== null && _a !== void 0 ? _a : 30) / ((_b = t.fps) !== null && _b !== void 0 ? _b : 30))))), t.fps, fromPreset.encoding.priority);\n });\n};\n// /**\n// *\n// * @internal\n// * @experimental\n// */\n// const computeDefaultMultiCodecSimulcastEncodings = (width: number, height: number) => {\n// // use vp8 as a default\n// const vp8 = determineAppropriateEncoding(false, width, height);\n// const vp9 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.9 };\n// const h264 = { ...vp8, maxBitrate: vp8.maxBitrate * 1.1 };\n// const av1 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.7 };\n// return {\n// vp8,\n// vp9,\n// h264,\n// av1,\n// };\n// };\nconst videoRids = ['q', 'h', 'f'];\n/* @internal */\nfunction computeVideoEncodings(isScreenShare, width, height, options) {\n var _a, _b;\n let videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;\n if (isScreenShare) {\n videoEncoding = options === null || options === void 0 ? void 0 : options.screenShareEncoding;\n }\n const useSimulcast = options === null || options === void 0 ? void 0 : options.simulcast;\n const scalabilityMode = options === null || options === void 0 ? void 0 : options.scalabilityMode;\n const videoCodec = options === null || options === void 0 ? void 0 : options.videoCodec;\n if (!videoEncoding && !useSimulcast && !scalabilityMode || !width || !height) {\n // when we aren't simulcasting or svc, will need to return a single encoding without\n // capping bandwidth. we always require a encoding for dynacast\n return [{}];\n }\n if (!videoEncoding) {\n // find the right encoding based on width/height\n videoEncoding = determineAppropriateEncoding(isScreenShare, width, height, videoCodec);\n livekitLogger.debug('using video encoding', videoEncoding);\n }\n const sourceFramerate = videoEncoding.maxFramerate;\n const original = new VideoPreset(width, height, videoEncoding.maxBitrate, videoEncoding.maxFramerate, videoEncoding.priority);\n if (scalabilityMode && isSVCCodec(videoCodec)) {\n const sm = new ScalabilityMode(scalabilityMode);\n const encodings = [];\n if (sm.spatial > 3) {\n throw new Error(\"unsupported scalabilityMode: \".concat(scalabilityMode));\n }\n // Before M113 in Chrome, defining multiple encodings with an SVC codec indicated\n // that SVC mode should be used. Safari still works this way.\n // This is a bit confusing but is due to how libwebrtc interpreted the encodings field\n // before M113.\n // Announced here: https://groups.google.com/g/discuss-webrtc/c/-QQ3pxrl-fw?pli=1\n const browser = getBrowser();\n if (isSafariBased() ||\n // Even tho RN runs M114, it does not produce SVC layers when a single encoding\n // is provided. So we'll use the legacy SVC specification for now.\n // TODO: when we upstream libwebrtc, this will need additional verification\n isReactNative() || (browser === null || browser === void 0 ? void 0 : browser.name) === 'Chrome' && compareVersions(browser === null || browser === void 0 ? void 0 : browser.version, '113') < 0) {\n const bitratesRatio = sm.suffix == 'h' ? 2 : 3;\n // safari 18.4 uses a different svc API that requires scaleResolutionDownBy to be set.\n const requireScale = isSafariSvcApi(browser);\n for (let i = 0; i < sm.spatial; i += 1) {\n // in legacy SVC, scaleResolutionDownBy cannot be set\n encodings.push({\n rid: videoRids[2 - i],\n maxBitrate: videoEncoding.maxBitrate / Math.pow(bitratesRatio, i),\n maxFramerate: original.encoding.maxFramerate,\n scaleResolutionDownBy: requireScale ? Math.pow(2, i) : undefined\n });\n }\n // legacy SVC, scalabilityMode is set only on the first encoding\n /* @ts-ignore */\n encodings[0].scalabilityMode = scalabilityMode;\n } else {\n encodings.push({\n maxBitrate: videoEncoding.maxBitrate,\n maxFramerate: original.encoding.maxFramerate,\n /* @ts-ignore */\n scalabilityMode: scalabilityMode\n });\n }\n if (original.encoding.priority) {\n encodings[0].priority = original.encoding.priority;\n encodings[0].networkPriority = original.encoding.priority;\n }\n livekitLogger.debug(\"using svc encoding\", {\n encodings\n });\n return encodings;\n }\n if (!useSimulcast) {\n return [videoEncoding];\n }\n let presets;\n if (isScreenShare) {\n presets = (_a = sortPresets(options === null || options === void 0 ? void 0 : options.screenShareSimulcastLayers)) !== null && _a !== void 0 ? _a : defaultSimulcastLayers(isScreenShare, original);\n } else {\n presets = (_b = sortPresets(options === null || options === void 0 ? void 0 : options.videoSimulcastLayers)) !== null && _b !== void 0 ? _b : defaultSimulcastLayers(isScreenShare, original);\n }\n let midPreset;\n if (presets.length > 0) {\n const lowPreset = presets[0];\n if (presets.length > 1) {\n var _presets = presets;\n var _presets2 = _slicedToArray(_presets, 2);\n midPreset = _presets2[1];\n }\n // NOTE:\n // 1. Ordering of these encodings is important. Chrome seems\n // to use the index into encodings to decide which layer\n // to disable when CPU constrained.\n // So encodings should be ordered in increasing spatial\n // resolution order.\n // 2. livekit-server translates rids into layers. So, all encodings\n // should have the base layer `q` and then more added\n // based on other conditions.\n const size = Math.max(width, height);\n if (size >= 960 && midPreset) {\n return encodingsFromPresets(width, height, [lowPreset, midPreset, original], sourceFramerate);\n }\n if (size >= 480) {\n return encodingsFromPresets(width, height, [lowPreset, original], sourceFramerate);\n }\n }\n return encodingsFromPresets(width, height, [original]);\n}\nfunction computeTrackBackupEncodings(track, videoCodec, opts) {\n var _a, _b, _c, _d;\n // backupCodec should not be true anymore, default codec is set in LocalParticipant.publish\n if (!opts.backupCodec || opts.backupCodec === true || opts.backupCodec.codec === opts.videoCodec) {\n // backup codec publishing is disabled\n return;\n }\n if (videoCodec !== opts.backupCodec.codec) {\n livekitLogger.warn('requested a different codec than specified as backup', {\n serverRequested: videoCodec,\n backup: opts.backupCodec.codec\n });\n }\n opts.videoCodec = videoCodec;\n // use backup encoding setting as videoEncoding for backup codec publishing\n opts.videoEncoding = opts.backupCodec.encoding;\n const settings = track.mediaStreamTrack.getSettings();\n const width = (_a = settings.width) !== null && _a !== void 0 ? _a : (_b = track.dimensions) === null || _b === void 0 ? void 0 : _b.width;\n const height = (_c = settings.height) !== null && _c !== void 0 ? _c : (_d = track.dimensions) === null || _d === void 0 ? void 0 : _d.height;\n // disable simulcast for screenshare backup codec since L1Tx is used by primary codec\n if (track.source === Track.Source.ScreenShare && opts.simulcast) {\n opts.simulcast = false;\n }\n const encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, width, height, opts);\n return encodings;\n}\n/* @internal */\nfunction determineAppropriateEncoding(isScreenShare, width, height, codec) {\n const presets = presetsForResolution(isScreenShare, width, height);\n let encoding = presets[0].encoding;\n // handle portrait by swapping dimensions\n const size = Math.max(width, height);\n for (let i = 0; i < presets.length; i += 1) {\n const preset = presets[i];\n encoding = preset.encoding;\n if (preset.width >= size) {\n break;\n }\n }\n // presets are based on the assumption of vp8 as a codec\n // for other codecs we adjust the maxBitrate if no specific videoEncoding has been provided\n // users should override these with ones that are optimized for their use case\n // NOTE: SVC codec bitrates are inclusive of all scalability layers. while\n // bitrate for non-SVC codecs does not include other simulcast layers.\n if (codec) {\n switch (codec) {\n case 'av1':\n case 'h265':\n encoding = Object.assign({}, encoding);\n encoding.maxBitrate = encoding.maxBitrate * 0.7;\n break;\n case 'vp9':\n encoding = Object.assign({}, encoding);\n encoding.maxBitrate = encoding.maxBitrate * 0.85;\n break;\n }\n }\n return encoding;\n}\n/* @internal */\nfunction presetsForResolution(isScreenShare, width, height) {\n if (isScreenShare) {\n return presetsScreenShare;\n }\n const aspect = width > height ? width / height : height / width;\n if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n return presets169;\n }\n return presets43;\n}\n/* @internal */\nfunction defaultSimulcastLayers(isScreenShare, original) {\n if (isScreenShare) {\n return computeDefaultScreenShareSimulcastPresets(original);\n }\n const width = original.width,\n height = original.height;\n const aspect = width > height ? width / height : height / width;\n if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n return defaultSimulcastPresets169;\n }\n return defaultSimulcastPresets43;\n}\n// presets should be ordered by low, medium, high\nfunction encodingsFromPresets(width, height, presets, sourceFramerate) {\n const encodings = [];\n presets.forEach((preset, idx) => {\n if (idx >= videoRids.length) {\n return;\n }\n const size = Math.min(width, height);\n const rid = videoRids[idx];\n const encoding = {\n rid,\n scaleResolutionDownBy: Math.max(1, size / Math.min(preset.width, preset.height)),\n maxBitrate: preset.encoding.maxBitrate\n };\n // ensure that the sourceFramerate is the highest framerate applied across all layers so that the\n // original encoding doesn't get bumped unintentionally by any of the other layers\n const maxFramerate = sourceFramerate && preset.encoding.maxFramerate ? Math.min(sourceFramerate, preset.encoding.maxFramerate) : preset.encoding.maxFramerate;\n if (maxFramerate) {\n encoding.maxFramerate = maxFramerate;\n }\n const browser = getBrowser();\n const canSetPriority = (browser === null || browser === void 0 ? void 0 : browser.name) === 'Firefox' && browser.os !== 'iOS' || idx === 0;\n if (preset.encoding.priority && canSetPriority) {\n encoding.priority = preset.encoding.priority;\n encoding.networkPriority = preset.encoding.priority;\n }\n encodings.push(encoding);\n });\n // RN ios simulcast requires all same framerates.\n if (isReactNative() && getReactNativeOs() === 'ios') {\n let topFramerate = undefined;\n encodings.forEach(encoding => {\n if (!topFramerate) {\n topFramerate = encoding.maxFramerate;\n } else if (encoding.maxFramerate && encoding.maxFramerate > topFramerate) {\n topFramerate = encoding.maxFramerate;\n }\n });\n let notifyOnce = true;\n encodings.forEach(encoding => {\n var _a;\n if (encoding.maxFramerate != topFramerate) {\n if (notifyOnce) {\n notifyOnce = false;\n livekitLogger.info(\"Simulcast on iOS React-Native requires all encodings to share the same framerate.\");\n }\n livekitLogger.info(\"Setting framerate of encoding \\\"\".concat((_a = encoding.rid) !== null && _a !== void 0 ? _a : '', \"\\\" to \").concat(topFramerate));\n encoding.maxFramerate = topFramerate;\n }\n });\n }\n return encodings;\n}\n/** @internal */\nfunction sortPresets(presets) {\n if (!presets) return;\n return presets.sort((a, b) => {\n const aEnc = a.encoding;\n const bEnc = b.encoding;\n if (aEnc.maxBitrate > bEnc.maxBitrate) {\n return 1;\n }\n if (aEnc.maxBitrate < bEnc.maxBitrate) return -1;\n if (aEnc.maxBitrate === bEnc.maxBitrate && aEnc.maxFramerate && bEnc.maxFramerate) {\n return aEnc.maxFramerate > bEnc.maxFramerate ? 1 : -1;\n }\n return 0;\n });\n}\n/** @internal */\nclass ScalabilityMode {\n constructor(scalabilityMode) {\n const results = scalabilityMode.match(/^L(\\d)T(\\d)(h|_KEY|_KEY_SHIFT){0,1}$/);\n if (!results) {\n throw new Error('invalid scalability mode');\n }\n this.spatial = parseInt(results[1]);\n this.temporal = parseInt(results[2]);\n if (results.length > 3) {\n switch (results[3]) {\n case 'h':\n case '_KEY':\n case '_KEY_SHIFT':\n this.suffix = results[3];\n }\n }\n }\n toString() {\n var _a;\n return \"L\".concat(this.spatial, \"T\").concat(this.temporal).concat((_a = this.suffix) !== null && _a !== void 0 ? _a : '');\n }\n}\nfunction getDefaultDegradationPreference(track) {\n // a few of reasons we have different default paths:\n // 1. without this, Chrome seems to aggressively resize the SVC video stating `quality-limitation: bandwidth` even when BW isn't an issue\n // 2. since we are overriding contentHint to motion (to workaround L1T3 publishing), it overrides the default degradationPreference to `balanced`\n if (track.source === Track.Source.ScreenShare || track.constraints.height && unwrapConstraint(track.constraints.height) >= 1080) {\n return 'maintain-resolution';\n } else {\n return 'balanced';\n }\n}const refreshSubscribedCodecAfterNewCodec = 5000;\nclass LocalVideoTrack extends LocalTrack {\n get sender() {\n return this._sender;\n }\n set sender(sender) {\n this._sender = sender;\n if (this.degradationPreference) {\n this.setDegradationPreference(this.degradationPreference);\n }\n }\n /**\n *\n * @param mediaTrack\n * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n */\n constructor(mediaTrack, constraints) {\n let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n let loggerOptions = arguments.length > 3 ? arguments[3] : undefined;\n super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack, loggerOptions);\n /* @internal */\n this.simulcastCodecs = new Map();\n this.degradationPreference = 'balanced';\n this.isCpuConstrained = false;\n this.optimizeForPerformance = false;\n this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {\n if (!this.sender) {\n this._currentBitrate = 0;\n return;\n }\n let stats;\n try {\n stats = yield this.getSenderStats();\n } catch (e) {\n this.log.error('could not get video sender stats', Object.assign(Object.assign({}, this.logContext), {\n error: e\n }));\n return;\n }\n const statsMap = new Map(stats.map(s => [s.rid, s]));\n const isCpuConstrained = stats.some(s => s.qualityLimitationReason === 'cpu');\n if (isCpuConstrained !== this.isCpuConstrained) {\n this.isCpuConstrained = isCpuConstrained;\n if (this.isCpuConstrained) {\n this.emit(TrackEvent.CpuConstrained);\n }\n }\n if (this.prevStats) {\n let totalBitrate = 0;\n statsMap.forEach((s, key) => {\n var _a;\n const prev = (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.get(key);\n totalBitrate += computeBitrate(s, prev);\n });\n this._currentBitrate = totalBitrate;\n }\n this.prevStats = statsMap;\n });\n this.senderLock = new _();\n }\n get isSimulcast() {\n if (this.sender && this.sender.getParameters().encodings.length > 1) {\n return true;\n }\n return false;\n }\n /* @internal */\n startMonitor(signalClient) {\n var _a;\n this.signalClient = signalClient;\n if (!isWeb()) {\n return;\n }\n // save original encodings\n // TODO : merge simulcast tracks stats\n const params = (_a = this.sender) === null || _a === void 0 ? void 0 : _a.getParameters();\n if (params) {\n this.encodings = params.encodings;\n }\n if (this.monitorInterval) {\n return;\n }\n this.monitorInterval = setInterval(() => {\n this.monitorSender();\n }, monitorFrequency);\n }\n stop() {\n this._mediaStreamTrack.getConstraints();\n this.simulcastCodecs.forEach(trackInfo => {\n trackInfo.mediaStreamTrack.stop();\n });\n super.stop();\n }\n pauseUpstream() {\n const _super = Object.create(null, {\n pauseUpstream: {\n get: () => super.pauseUpstream\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a, e_1, _b, _c;\n var _d;\n yield _super.pauseUpstream.call(this);\n try {\n for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n _c = _g.value;\n _e = false;\n const sc = _c;\n yield (_d = sc.sender) === null || _d === void 0 ? void 0 : _d.replaceTrack(null);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n });\n }\n resumeUpstream() {\n const _super = Object.create(null, {\n resumeUpstream: {\n get: () => super.resumeUpstream\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a, e_2, _b, _c;\n var _d;\n yield _super.resumeUpstream.call(this);\n try {\n for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n _c = _g.value;\n _e = false;\n const sc = _c;\n yield (_d = sc.sender) === null || _d === void 0 ? void 0 : _d.replaceTrack(sc.mediaStreamTrack);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n });\n }\n mute() {\n const _super = Object.create(null, {\n mute: {\n get: () => super.mute\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.muteLock.lock();\n try {\n if (this.isMuted) {\n this.log.debug('Track already muted', this.logContext);\n return this;\n }\n if (this.source === Track.Source.Camera && !this.isUserProvided) {\n this.log.debug('stopping camera track', this.logContext);\n // also stop the track, so that camera indicator is turned off\n this._mediaStreamTrack.stop();\n }\n yield _super.mute.call(this);\n return this;\n } finally {\n unlock();\n }\n });\n }\n unmute() {\n const _super = Object.create(null, {\n unmute: {\n get: () => super.unmute\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.muteLock.lock();\n try {\n if (!this.isMuted) {\n this.log.debug('Track already unmuted', this.logContext);\n return this;\n }\n if (this.source === Track.Source.Camera && !this.isUserProvided) {\n this.log.debug('reacquiring camera track', this.logContext);\n yield this.restart(undefined, true);\n }\n yield _super.unmute.call(this);\n return this;\n } finally {\n unlock();\n }\n });\n }\n setTrackMuted(muted) {\n super.setTrackMuted(muted);\n for (const sc of this.simulcastCodecs.values()) {\n sc.mediaStreamTrack.enabled = !muted;\n }\n }\n getSenderStats() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n return [];\n }\n const items = [];\n const stats = yield this.sender.getStats();\n stats.forEach(v => {\n var _a;\n if (v.type === 'outbound-rtp') {\n const vs = {\n type: 'video',\n streamId: v.id,\n frameHeight: v.frameHeight,\n frameWidth: v.frameWidth,\n framesPerSecond: v.framesPerSecond,\n framesSent: v.framesSent,\n firCount: v.firCount,\n pliCount: v.pliCount,\n nackCount: v.nackCount,\n packetsSent: v.packetsSent,\n bytesSent: v.bytesSent,\n qualityLimitationReason: v.qualityLimitationReason,\n qualityLimitationDurations: v.qualityLimitationDurations,\n qualityLimitationResolutionChanges: v.qualityLimitationResolutionChanges,\n rid: (_a = v.rid) !== null && _a !== void 0 ? _a : v.id,\n retransmittedPacketsSent: v.retransmittedPacketsSent,\n targetBitrate: v.targetBitrate,\n timestamp: v.timestamp\n };\n // locate the appropriate remote-inbound-rtp item\n const r = stats.get(v.remoteId);\n if (r) {\n vs.jitter = r.jitter;\n vs.packetsLost = r.packetsLost;\n vs.roundTripTime = r.roundTripTime;\n }\n items.push(vs);\n }\n });\n // make sure highest res layer is always first\n items.sort((a, b) => {\n var _a, _b;\n return ((_a = b.frameWidth) !== null && _a !== void 0 ? _a : 0) - ((_b = a.frameWidth) !== null && _b !== void 0 ? _b : 0);\n });\n return items;\n });\n }\n setPublishingQuality(maxQuality) {\n const qualities = [];\n for (let q = VideoQuality.LOW; q <= VideoQuality.HIGH; q += 1) {\n qualities.push(new SubscribedQuality({\n quality: q,\n enabled: q <= maxQuality\n }));\n }\n this.log.debug(\"setting publishing quality. max quality \".concat(maxQuality), this.logContext);\n this.setPublishingLayers(isSVCCodec(this.codec), qualities);\n }\n restartTrack(options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, e_3, _b, _c;\n var _d;\n let constraints;\n if (options) {\n const streamConstraints = constraintsForOptions({\n video: options\n });\n if (typeof streamConstraints.video !== 'boolean') {\n constraints = streamConstraints.video;\n }\n }\n yield this.restart(constraints);\n // reset cpu constrained state after track is restarted\n this.isCpuConstrained = false;\n try {\n for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n _c = _g.value;\n _e = false;\n const sc = _c;\n if (sc.sender && ((_d = sc.sender.transport) === null || _d === void 0 ? void 0 : _d.state) !== 'closed') {\n sc.mediaStreamTrack = this.mediaStreamTrack.clone();\n yield sc.sender.replaceTrack(sc.mediaStreamTrack);\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n // The new MediaStreamTrack may have different dimensions than the previous one\n // (e.g. switching between cameras with different native resolutions), which would\n // leave the sender's encoding parameters (scaleResolutionDownBy, maxBitrate, etc.)\n // based on the old dimensions. Recompute them so the encoded output matches the\n // new source.\n yield this.onSenderTrackSwapped();\n });\n }\n onSenderTrackSwapped() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.refreshSenderEncodings();\n });\n }\n /**\n * Recomputes encoding parameters for this track's senders based on the current\n * MediaStreamTrack dimensions and reapplies them via setParameters. This is a no-op\n * if the track hasn't been published yet or if the track is in performance-optimized\n * mode (which manages its own encodings).\n */\n refreshSenderEncodings() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!this.sender || !this.publishOptions || this.optimizeForPerformance) {\n return;\n }\n const unlock = yield this.senderLock.lock();\n try {\n let dims;\n try {\n dims = yield this.waitForDimensions();\n } catch (e) {\n this.log.warn('could not determine new track dimensions, skipping encoding recompute', Object.assign(Object.assign({}, this.logContext), {\n error: e\n }));\n return;\n }\n if (this.lastEncodedDimensions && this.lastEncodedDimensions.width === dims.width && this.lastEncodedDimensions.height === dims.height) {\n return;\n }\n const isScreenShare = this.source === Track.Source.ScreenShare;\n const newEncodings = computeVideoEncodings(isScreenShare, dims.width, dims.height, Object.assign({}, this.publishOptions));\n yield this.applyEncodingsToSender(this.sender, newEncodings);\n this.encodings = newEncodings;\n this.lastEncodedDimensions = dims;\n for (const _ref of this.simulcastCodecs) {\n var _ref2 = _slicedToArray(_ref, 2);\n const codec = _ref2[0];\n const sc = _ref2[1];\n if (!sc.sender || ((_a = sc.sender.transport) === null || _a === void 0 ? void 0 : _a.state) === 'closed') {\n continue;\n }\n if (!isBackupVideoCodec(codec)) {\n continue;\n }\n const backupOpts = Object.assign({}, this.publishOptions);\n const backupEncodings = computeTrackBackupEncodings(this, codec, backupOpts);\n if (!backupEncodings) {\n continue;\n }\n yield this.applyEncodingsToSender(sc.sender, backupEncodings);\n sc.encodings = backupEncodings;\n }\n } catch (e) {\n this.log.warn('failed to apply recomputed encodings', Object.assign(Object.assign({}, this.logContext), {\n error: e\n }));\n } finally {\n unlock();\n }\n });\n }\n applyEncodingsToSender(sender, encodings) {\n return __awaiter(this, void 0, void 0, function* () {\n const params = sender.getParameters();\n if (!params.encodings || params.encodings.length !== encodings.length) {\n return;\n }\n params.encodings.forEach((existing, idx) => {\n // preserve disabled layers (dynacast / Firefox workaround in\n // setPublishingLayersForSender set scaleResolutionDownBy/maxBitrate to sentinel\n // values for disabled layers — don't clobber those).\n if (existing.active === false) {\n return;\n }\n const next = encodings[idx];\n if (next.scaleResolutionDownBy !== undefined) {\n existing.scaleResolutionDownBy = next.scaleResolutionDownBy;\n }\n if (next.maxBitrate !== undefined) {\n existing.maxBitrate = next.maxBitrate;\n }\n if (next.maxFramerate !== undefined) {\n existing.maxFramerate = next.maxFramerate;\n }\n if (next.priority !== undefined) {\n existing.priority = next.priority;\n existing.networkPriority = next.priority;\n }\n });\n this.log.debug('updating sender encodings after track restart', Object.assign(Object.assign({}, this.logContext), {\n encodings: params.encodings\n }));\n yield sender.setParameters(params);\n });\n }\n setProcessor(processor_1) {\n const _super = Object.create(null, {\n setProcessor: {\n get: () => super.setProcessor\n }\n });\n return __awaiter(this, arguments, void 0, function (processor) {\n var _this = this;\n let showProcessedStreamLocally = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return function* () {\n var _a, e_4, _b, _c;\n var _d, _e;\n yield _super.setProcessor.call(_this, processor, showProcessedStreamLocally);\n if ((_d = _this.processor) === null || _d === void 0 ? void 0 : _d.processedTrack) {\n try {\n for (var _f = true, _g = __asyncValues(_this.simulcastCodecs.values()), _h; _h = yield _g.next(), _a = _h.done, !_a; _f = true) {\n _c = _h.value;\n _f = false;\n const sc = _c;\n yield (_e = sc.sender) === null || _e === void 0 ? void 0 : _e.replaceTrack(_this.processor.processedTrack);\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (!_f && !_a && (_b = _g.return)) yield _b.call(_g);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n }\n }();\n });\n }\n setDegradationPreference(preference) {\n return __awaiter(this, void 0, void 0, function* () {\n this.degradationPreference = preference;\n if (this.sender) {\n try {\n this.log.debug(\"setting degradationPreference to \".concat(preference), this.logContext);\n const params = this.sender.getParameters();\n params.degradationPreference = preference;\n this.sender.setParameters(params);\n } catch (e) {\n this.log.warn(\"failed to set degradationPreference\", Object.assign({\n error: e\n }, this.logContext));\n }\n }\n });\n }\n addSimulcastTrack(codec, encodings) {\n if (this.simulcastCodecs.has(codec)) {\n this.log.error(\"\".concat(codec, \" already added, skipping adding simulcast codec\"), this.logContext);\n return;\n }\n const simulcastCodecInfo = {\n codec,\n mediaStreamTrack: this.mediaStreamTrack.clone(),\n sender: undefined,\n encodings\n };\n this.simulcastCodecs.set(codec, simulcastCodecInfo);\n return simulcastCodecInfo;\n }\n setSimulcastTrackSender(codec, sender) {\n const simulcastCodecInfo = this.simulcastCodecs.get(codec);\n if (!simulcastCodecInfo) {\n return;\n }\n simulcastCodecInfo.sender = sender;\n // browser will reenable disabled codec/layers after new codec has been published,\n // so refresh subscribedCodecs after publish a new codec\n setTimeout(() => {\n if (this.subscribedCodecs) {\n this.setPublishingCodecs(this.subscribedCodecs);\n }\n }, refreshSubscribedCodecAfterNewCodec);\n }\n /**\n * @internal\n * Sets codecs that should be publishing, returns new codecs that have not yet\n * been published\n */\n setPublishingCodecs(codecs) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, codecs_1, codecs_1_1;\n var _b, e_5, _c, _d;\n this.log.debug('setting publishing codecs', Object.assign(Object.assign({}, this.logContext), {\n codecs,\n currentCodec: this.codec\n }));\n // only enable simulcast codec for preference codec setted\n if (!this.codec && codecs.length > 0) {\n yield this.setPublishingLayers(isSVCCodec(codecs[0].codec), codecs[0].qualities);\n return [];\n }\n this.subscribedCodecs = codecs;\n const newCodecs = [];\n try {\n for (_a = true, codecs_1 = __asyncValues(codecs); codecs_1_1 = yield codecs_1.next(), _b = codecs_1_1.done, !_b; _a = true) {\n _d = codecs_1_1.value;\n _a = false;\n const codec = _d;\n if (!this.codec || this.codec === codec.codec) {\n yield this.setPublishingLayers(isSVCCodec(codec.codec), codec.qualities);\n } else {\n const simulcastCodecInfo = this.simulcastCodecs.get(codec.codec);\n this.log.debug(\"try setPublishingCodec for \".concat(codec.codec), Object.assign(Object.assign({}, this.logContext), {\n simulcastCodecInfo\n }));\n if (!simulcastCodecInfo || !simulcastCodecInfo.sender) {\n for (const q of codec.qualities) {\n if (q.enabled) {\n newCodecs.push(codec.codec);\n break;\n }\n }\n } else if (simulcastCodecInfo.encodings) {\n this.log.debug(\"try setPublishingLayersForSender \".concat(codec.codec), this.logContext);\n yield setPublishingLayersForSender(simulcastCodecInfo.sender, simulcastCodecInfo.encodings, codec.qualities, this.senderLock, isSVCCodec(codec.codec), this.log, this.logContext);\n }\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (!_a && !_b && (_c = codecs_1.return)) yield _c.call(codecs_1);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n return newCodecs;\n });\n }\n /**\n * @internal\n * Sets layers that should be publishing\n */\n setPublishingLayers(isSvc, qualities) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.optimizeForPerformance) {\n this.log.info('skipping setPublishingLayers due to optimized publishing performance', Object.assign(Object.assign({}, this.logContext), {\n qualities\n }));\n return;\n }\n this.log.debug('setting publishing layers', Object.assign(Object.assign({}, this.logContext), {\n qualities\n }));\n if (!this.sender || !this.encodings) {\n return;\n }\n yield setPublishingLayersForSender(this.sender, this.encodings, qualities, this.senderLock, isSvc, this.log, this.logContext);\n });\n }\n /**\n * Designed for lower powered devices, reduces video publishing quality and disables simulcast.\n * @experimental\n */\n prioritizePerformance() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.sender) {\n throw new Error('sender not found');\n }\n const unlock = yield this.senderLock.lock();\n try {\n this.optimizeForPerformance = true;\n const params = this.sender.getParameters();\n params.encodings = params.encodings.map((e, idx) => {\n var _a;\n return Object.assign(Object.assign({}, e), {\n active: idx === 0,\n scaleResolutionDownBy: Math.max(1, Math.ceil(((_a = this.mediaStreamTrack.getSettings().height) !== null && _a !== void 0 ? _a : 360) / 360)),\n scalabilityMode: idx === 0 && isSVCCodec(this.codec) ? 'L1T3' : undefined,\n maxFramerate: idx === 0 ? 15 : 0,\n maxBitrate: idx === 0 ? e.maxBitrate : 0\n });\n });\n this.log.debug('setting performance optimised encodings', Object.assign(Object.assign({}, this.logContext), {\n encodings: params.encodings\n }));\n this.encodings = params.encodings;\n yield this.sender.setParameters(params);\n } catch (e) {\n this.log.error('failed to set performance optimised encodings', Object.assign(Object.assign({}, this.logContext), {\n error: e\n }));\n this.optimizeForPerformance = false;\n } finally {\n unlock();\n }\n });\n }\n handleAppVisibilityChanged() {\n const _super = Object.create(null, {\n handleAppVisibilityChanged: {\n get: () => super.handleAppVisibilityChanged\n }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.handleAppVisibilityChanged.call(this);\n if (!isMobile()) return;\n if (this.isInBackground && this.source === Track.Source.Camera) {\n this._mediaStreamTrack.enabled = false;\n }\n });\n }\n}\nfunction setPublishingLayersForSender(sender, senderEncodings, qualities, senderLock, isSVC, log, logContext) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield senderLock.lock();\n log.debug('setPublishingLayersForSender', Object.assign(Object.assign({}, logContext), {\n sender,\n qualities,\n senderEncodings\n }));\n try {\n const params = sender.getParameters();\n const encodings = params.encodings;\n if (!encodings) {\n return;\n }\n if (encodings.length !== senderEncodings.length) {\n log.warn('cannot set publishing layers, encodings mismatch', Object.assign(Object.assign({}, logContext), {\n encodings,\n senderEncodings\n }));\n return;\n }\n let hasChanged = false;\n /* disable closable spatial layer as it has video blur / frozen issue with current server / client\n 1. chrome 113: when switching to up layer with scalability Mode change, it will generate a\n low resolution frame and recover very quickly, but noticable\n 2. livekit sfu: additional pli request cause video frozen for a few frames, also noticable */\n const closableSpatial = false;\n /* @ts-ignore */\n if (closableSpatial && encodings[0].scalabilityMode) ; else {\n if (isSVC) {\n const hasEnabledEncoding = qualities.some(q => q.enabled);\n if (hasEnabledEncoding) {\n qualities.forEach(q => q.enabled = true);\n }\n }\n // simulcast dynacast encodings\n encodings.forEach((encoding, idx) => {\n var _a;\n let rid = (_a = encoding.rid) !== null && _a !== void 0 ? _a : '';\n if (rid === '') {\n rid = 'q';\n }\n const quality = videoQualityForRid(rid);\n const subscribedQuality = qualities.find(q => q.quality === quality);\n if (!subscribedQuality) {\n return;\n }\n if (encoding.active !== subscribedQuality.enabled) {\n hasChanged = true;\n encoding.active = subscribedQuality.enabled;\n log.debug(\"setting layer \".concat(subscribedQuality.quality, \" to \").concat(encoding.active ? 'enabled' : 'disabled'), logContext);\n // FireFox does not support setting encoding.active to false, so we\n // have a workaround of lowering its bitrate and resolution to the min.\n if (isFireFox()) {\n if (subscribedQuality.enabled) {\n encoding.scaleResolutionDownBy = senderEncodings[idx].scaleResolutionDownBy;\n encoding.maxBitrate = senderEncodings[idx].maxBitrate;\n /* @ts-ignore */\n encoding.maxFrameRate = senderEncodings[idx].maxFrameRate;\n } else {\n encoding.scaleResolutionDownBy = 4;\n encoding.maxBitrate = 10;\n /* @ts-ignore */\n encoding.maxFrameRate = 2;\n }\n }\n }\n });\n }\n if (hasChanged) {\n params.encodings = encodings;\n log.debug(\"setting encodings\", Object.assign(Object.assign({}, logContext), {\n encodings: params.encodings\n }));\n yield sender.setParameters(params);\n }\n } finally {\n unlock();\n }\n });\n}\nfunction videoQualityForRid(rid) {\n switch (rid) {\n case 'f':\n return VideoQuality.HIGH;\n case 'h':\n return VideoQuality.MEDIUM;\n case 'q':\n return VideoQuality.LOW;\n default:\n return VideoQuality.HIGH;\n }\n}\nfunction videoLayersFromEncodings(width, height, encodings, svc) {\n // default to a single layer, HQ\n if (!encodings) {\n return [new VideoLayer({\n quality: VideoQuality.HIGH,\n width,\n height,\n bitrate: 0,\n ssrc: 0\n })];\n }\n if (svc) {\n // svc layers\n /* @ts-ignore */\n const encodingSM = encodings[0].scalabilityMode;\n const sm = new ScalabilityMode(encodingSM);\n const layers = [];\n const resRatio = sm.suffix == 'h' ? 1.5 : 2;\n const bitratesRatio = sm.suffix == 'h' ? 2 : 3;\n for (let i = 0; i < sm.spatial; i += 1) {\n layers.push(new VideoLayer({\n quality: Math.min(VideoQuality.HIGH, sm.spatial - 1) - i,\n width: Math.ceil(width / Math.pow(resRatio, i)),\n height: Math.ceil(height / Math.pow(resRatio, i)),\n bitrate: encodings[0].maxBitrate ? Math.ceil(encodings[0].maxBitrate / Math.pow(bitratesRatio, i)) : 0,\n ssrc: 0\n }));\n }\n return layers;\n }\n return encodings.map(encoding => {\n var _a, _b, _c;\n const scale = (_a = encoding.scaleResolutionDownBy) !== null && _a !== void 0 ? _a : 1;\n let quality = videoQualityForRid((_b = encoding.rid) !== null && _b !== void 0 ? _b : '');\n return new VideoLayer({\n quality,\n width: Math.ceil(width / scale),\n height: Math.ceil(height / scale),\n bitrate: (_c = encoding.maxBitrate) !== null && _c !== void 0 ? _c : 0,\n ssrc: 0\n });\n });\n}const lossyDataChannel = '_lossy';\nconst reliableDataChannel = '_reliable';\nconst dataTrackDataChannel = '_data_track';\nconst minReconnectWait = 2 * 1000;\nconst leaveReconnect = 'leave-reconnect';\nconst reliabeReceiveStateTTL = 30000;\nconst lossyDataChannelBufferThresholdMin = 8 * 1024;\nconst lossyDataChannelBufferThresholdMax = 256 * 1024;\nconst initialMediaSectionsAudio = 3;\nconst initialMediaSectionsVideo = 3;\nvar PCState;\n(function (PCState) {\n PCState[PCState[\"New\"] = 0] = \"New\";\n PCState[PCState[\"Connected\"] = 1] = \"Connected\";\n PCState[PCState[\"Disconnected\"] = 2] = \"Disconnected\";\n PCState[PCState[\"Reconnecting\"] = 3] = \"Reconnecting\";\n PCState[PCState[\"Closed\"] = 4] = \"Closed\";\n})(PCState || (PCState = {}));\nvar DataChannelKind;\n(function (DataChannelKind) {\n DataChannelKind[DataChannelKind[\"RELIABLE\"] = 0] = \"RELIABLE\";\n DataChannelKind[DataChannelKind[\"LOSSY\"] = 1] = \"LOSSY\";\n DataChannelKind[DataChannelKind[\"DATA_TRACK_LOSSY\"] = 2] = \"DATA_TRACK_LOSSY\";\n})(DataChannelKind || (DataChannelKind = {}));\n/** @internal */\nclass RTCEngine extends eventsExports.EventEmitter {\n get isClosed() {\n return this._isClosed;\n }\n get isNewlyCreated() {\n return this._isNewlyCreated;\n }\n get pendingReconnect() {\n return !!this.reconnectTimeout;\n }\n constructor(options) {\n var _a;\n super();\n this.options = options;\n this.rtcConfig = {};\n this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;\n this.fullReconnectOnNext = false;\n /**\n * @internal\n */\n this.latestRemoteOfferId = 0;\n this.subscriberPrimary = false;\n this.pcState = PCState.New;\n this._isClosed = true;\n this._isNewlyCreated = true;\n this.pendingTrackResolvers = {};\n this.reconnectAttempts = 0;\n this.reconnectStart = 0;\n this.attemptingReconnect = false;\n /** keeps track of how often an initial join connection has been tried */\n this.joinAttempts = 0;\n /** specifies how often an initial join connection is allowed to retry */\n this.maxJoinAttempts = 1;\n this.shouldFailNext = false;\n this.shouldFailOnV1Path = false;\n this.log = livekitLogger;\n this.reliableDataSequence = 1;\n this.reliableMessageBuffer = new DataPacketBuffer();\n this.reliableReceivedState = new TTLMap(reliabeReceiveStateTTL);\n this.lossyDataStatCurrentBytes = 0;\n this.lossyDataStatByterate = 0;\n this.lossyDataDropCount = 0;\n this.midToTrackId = {};\n /** used to indicate whether the browser is currently waiting to reconnect */\n this.isWaitingForNetworkReconnect = false;\n this.bufferStatusLowClosingFuture = new Future();\n this.handleDataChannel = _a => __awaiter(this, [_a], void 0, function (_ref) {\n var _this = this;\n let channel = _ref.channel;\n return function* () {\n if (!channel) {\n return;\n }\n let handler;\n if (channel.label === reliableDataChannel) {\n _this.reliableDCSub = channel;\n handler = _this.handleDataMessage;\n } else if (channel.label === lossyDataChannel) {\n _this.lossyDCSub = channel;\n handler = _this.handleDataMessage;\n } else if (channel.label === dataTrackDataChannel) {\n _this.dataTrackDCSub = channel;\n handler = _this.handleDataTrackMessage;\n } else {\n return;\n }\n _this.log.debug(\"on data channel \".concat(channel.id, \", \").concat(channel.label));\n channel.onmessage = handler;\n }();\n });\n this.handleDataMessage = message => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e;\n // make sure to respect incoming data message order by processing message events one after the other\n const unlock = yield this.dataProcessLock.lock();\n try {\n // decode\n let buffer;\n if (message.data instanceof ArrayBuffer) {\n buffer = message.data;\n } else if (message.data instanceof Blob) {\n buffer = yield message.data.arrayBuffer();\n } else {\n this.log.error('unsupported data type', {\n data: message.data\n });\n return;\n }\n const dp = DataPacket.fromBinary(new Uint8Array(buffer));\n if (dp.sequence > 0 && dp.participantSid !== '') {\n const lastSeq = this.reliableReceivedState.get(dp.participantSid);\n if (lastSeq && dp.sequence <= lastSeq) {\n // ignore duplicate or out-of-order packets in reliable channel\n return;\n }\n this.reliableReceivedState.set(dp.participantSid, dp.sequence);\n }\n if (((_a = dp.value) === null || _a === void 0 ? void 0 : _a.case) === 'speaker') {\n // dispatch speaker updates\n this.emit(EngineEvent.ActiveSpeakersUpdate, dp.value.value.speakers);\n } else if (((_b = dp.value) === null || _b === void 0 ? void 0 : _b.case) === 'encryptedPacket') {\n if (!this.e2eeManager) {\n this.log.error('Received encrypted packet but E2EE not set up');\n return;\n }\n const decryptedData = yield (_c = this.e2eeManager) === null || _c === void 0 ? void 0 : _c.handleEncryptedData(dp.value.value.encryptedValue, dp.value.value.iv, dp.participantIdentity, dp.value.value.keyIndex);\n const decryptedPacket = EncryptedPacketPayload.fromBinary(decryptedData.payload);\n const newDp = new DataPacket({\n value: decryptedPacket.value,\n participantIdentity: dp.participantIdentity,\n participantSid: dp.participantSid\n });\n if (((_d = newDp.value) === null || _d === void 0 ? void 0 : _d.case) === 'user') {\n // compatibility\n applyUserDataCompat(newDp, newDp.value.value);\n }\n this.emit(EngineEvent.DataPacketReceived, newDp, dp.value.value.encryptionType);\n } else {\n if (((_e = dp.value) === null || _e === void 0 ? void 0 : _e.case) === 'user') {\n // compatibility\n applyUserDataCompat(dp, dp.value.value);\n }\n this.emit(EngineEvent.DataPacketReceived, dp, Encryption_Type.NONE);\n }\n } finally {\n unlock();\n }\n });\n this.handleDataTrackMessage = message => __awaiter(this, void 0, void 0, function* () {\n // Decode / normalize into a common format\n let buffer;\n if (message.data instanceof ArrayBuffer) {\n buffer = message.data;\n } else if (message.data instanceof Blob) {\n buffer = yield message.data.arrayBuffer();\n } else {\n this.log.error('unsupported data type', {\n data: message.data\n });\n return;\n }\n this.emit('dataTrackPacketReceived', new Uint8Array(buffer));\n });\n this.handleDataError = event => {\n const channel = event.currentTarget;\n const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';\n if (event instanceof ErrorEvent && event.error) {\n const error = event.error.error;\n this.log.error(\"DataChannel error on \".concat(channelKind, \": \").concat(event.message), {\n error\n });\n } else {\n this.log.error(\"Unknown DataChannel error on \".concat(channelKind), {\n event\n });\n }\n };\n this.handleBufferedAmountLow = channelKind => {\n this.updateAndEmitDCBufferStatus(channelKind);\n };\n // websocket reconnect behavior. if websocket is interrupted, and the PeerConnection\n // continues to work, we can reconnect to websocket to continue the session\n // after a number of retries, we'll close and give up permanently\n this.handleDisconnect = (connection, disconnectReason) => {\n if (this._isClosed) {\n return;\n }\n this.log.warn(\"\".concat(connection, \" disconnected\"));\n if (this.reconnectAttempts === 0) {\n // only reset start time on the first try\n this.reconnectStart = Date.now();\n }\n const disconnect = duration => {\n this.log.warn(\"could not recover connection after \".concat(this.reconnectAttempts, \" attempts, \").concat(duration, \"ms. giving up\"));\n this.emit(EngineEvent.Disconnected);\n this.close();\n };\n const duration = Date.now() - this.reconnectStart;\n let delay = this.getNextRetryDelay({\n elapsedMs: duration,\n retryCount: this.reconnectAttempts\n });\n if (delay === null) {\n disconnect(duration);\n return;\n }\n if (connection === leaveReconnect) {\n delay = 0;\n }\n this.log.debug(\"reconnecting in \".concat(delay, \"ms\"));\n this.clearReconnectTimeout();\n if (this.token) {\n // token may have been refreshed, we do not want to recreate the regionUrlProvider\n // since the current engine may have inherited a regional url\n this.emit(EngineEvent.TokenRefreshed, this.token);\n }\n this.reconnectTimeout = CriticalTimers.setTimeout(() => this.attemptReconnect(disconnectReason).finally(() => this.reconnectTimeout = undefined), delay);\n };\n this.waitForRestarted = () => {\n return new Promise((resolve, reject) => {\n if (this.pcState === PCState.Connected) {\n resolve();\n }\n const onRestarted = () => {\n this.off(EngineEvent.Disconnected, onDisconnected);\n resolve();\n };\n const onDisconnected = () => {\n this.off(EngineEvent.Restarted, onRestarted);\n reject();\n };\n this.once(EngineEvent.Restarted, onRestarted);\n this.once(EngineEvent.Disconnected, onDisconnected);\n });\n };\n this.updateAndEmitDCBufferStatus = kind => {\n if (kind === DataChannelKind.RELIABLE) {\n const dc = this.dataChannelForKind(kind);\n if (dc) {\n this.reliableMessageBuffer.alignBufferedAmount(dc.bufferedAmount);\n }\n }\n const status = this.isBufferStatusLow(kind);\n if (typeof status !== 'undefined' && status !== this.dcBufferStatus.get(kind)) {\n this.dcBufferStatus.set(kind, status);\n this.emit(EngineEvent.DCBufferStatusChanged, status, kind);\n }\n };\n this.isBufferStatusLow = kind => {\n const dc = this.dataChannelForKind(kind);\n if (dc) {\n return dc.bufferedAmount <= dc.bufferedAmountLowThreshold;\n }\n };\n this.onRtpMapAvailable = rtpTypes => {\n const rtpMap = new Map();\n rtpTypes.forEach(rtp => {\n const codec = rtp.codec.toLowerCase();\n if (isVideoCodec(codec)) {\n rtpMap.set(rtp.payload, codec);\n }\n });\n this.emit(EngineEvent.RTPVideoMapUpdate, rtpMap);\n };\n this.handleBrowserOnLine = () => __awaiter(this, void 0, void 0, function* () {\n if (!this.url) {\n return;\n }\n const hasNetworkConnection = yield fetch(toHttpUrl(this.url), {\n method: 'HEAD'\n }).then(resp => resp.ok).catch(() => false);\n if (!hasNetworkConnection) {\n return;\n }\n this.log.info('detected network reconnected');\n if (\n // in case the engine is currently reconnecting, attempt a reconnect immediately after the browser state has changed to 'onLine'\n this.client.currentState === SignalConnectionState.RECONNECTING ||\n // also if the browser went offline before and the engine still thinks it's in a connected state, treat it as a network interruption that we haven't noticed yet\n this.isWaitingForNetworkReconnect && this.client.currentState === SignalConnectionState.CONNECTED) {\n this.clearReconnectTimeout();\n this.attemptReconnect(ReconnectReason.RR_SIGNAL_DISCONNECTED);\n this.isWaitingForNetworkReconnect = false;\n }\n });\n this.handleBrowserOffline = () => __awaiter(this, void 0, void 0, function* () {\n if (!this.url) {\n return;\n }\n try {\n yield Promise.race([fetch(toHttpUrl(this.url), {\n method: 'HEAD'\n }),\n // if there's no internet connection the fetch rejects immediately, so we only use a short timeout here\n sleep(4000).then(() => Promise.reject())]);\n } catch (e) {\n // only set if the browser still thinks it's offline after the request failed\n if (window.navigator.onLine === false) {\n this.log.info('detected network interruption');\n this.isWaitingForNetworkReconnect = true;\n }\n }\n });\n this.log = getLogger((_a = options.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Engine, () => this.logContext);\n this.loggerOptions = {\n loggerName: options.loggerName,\n loggerContextCb: () => this.logContext\n };\n this.client = new SignalClient(undefined, this.loggerOptions);\n this.client.signalLatency = this.options.expSignalLatency;\n this.reconnectPolicy = this.options.reconnectPolicy;\n this.closingLock = new _();\n this.dataProcessLock = new _();\n this.dcBufferStatus = new Map([[DataChannelKind.RELIABLE, true], [DataChannelKind.LOSSY, true], [DataChannelKind.DATA_TRACK_LOSSY, true]]);\n this.client.onParticipantUpdate = updates => this.emit(EngineEvent.ParticipantUpdate, updates);\n this.client.onConnectionQuality = update => this.emit(EngineEvent.ConnectionQualityUpdate, update);\n this.client.onRoomUpdate = update => this.emit(EngineEvent.RoomUpdate, update);\n this.client.onSubscriptionError = resp => this.emit(EngineEvent.SubscriptionError, resp);\n this.client.onSubscriptionPermissionUpdate = update => this.emit(EngineEvent.SubscriptionPermissionUpdate, update);\n this.client.onSpeakersChanged = update => this.emit(EngineEvent.SpeakersChanged, update);\n this.client.onStreamStateUpdate = update => this.emit(EngineEvent.StreamStateChanged, update);\n this.client.onRequestResponse = response => this.emit(EngineEvent.SignalRequestResponse, response);\n this.client.onParticipantUpdate = updates => this.emit(EngineEvent.ParticipantUpdate, updates);\n this.client.onJoined = joinResponse => this.emit(EngineEvent.Joined, joinResponse);\n this.on(EngineEvent.Closing, () => {\n var _a, _b;\n (_b = (_a = this.bufferStatusLowClosingFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, new UnexpectedConnectionState('engine closed'));\n });\n // Swallow the rejection at the source so it doesn't surface as an unhandled promise rejection\n // when no waitForBufferStatusLow callers are attached.\n this.bufferStatusLowClosingFuture.promise.catch(() => {});\n }\n /** @internal */\n get logContext() {\n var _a, _b, _c, _d, _e, _f;\n return {\n room: (_b = (_a = this.latestJoinResponse) === null || _a === void 0 ? void 0 : _a.room) === null || _b === void 0 ? void 0 : _b.name,\n roomID: (_d = (_c = this.latestJoinResponse) === null || _c === void 0 ? void 0 : _c.room) === null || _d === void 0 ? void 0 : _d.sid,\n participant: (_f = (_e = this.latestJoinResponse) === null || _e === void 0 ? void 0 : _e.participant) === null || _f === void 0 ? void 0 : _f.identity,\n participantID: this.participantSid\n };\n }\n join(url_1, token_1, opts_1, abortSignal_1) {\n return __awaiter(this, arguments, void 0, function (url, token, opts, abortSignal) {\n var _this2 = this;\n let useV0Path = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n return function* () {\n var _a, _b, _c;\n _this2._isNewlyCreated = false;\n _this2.url = url;\n _this2.token = token;\n _this2.signalOpts = opts;\n _this2.maxJoinAttempts = opts.maxRetries;\n try {\n _this2.joinAttempts += 1;\n _this2.setupSignalClientCallbacks();\n // Whether the initial publisher offer is bundled with the join request. Computed once and\n // reused after the join below. Only the (non-Firefox) offer-with-join path does this.\n const sendOfferWithJoin = !useV0Path && isPublisherOfferWithJoinSupported();\n let offerProto;\n if (sendOfferWithJoin) {\n if (!_this2.pcManager) {\n // Firefox is excluded from offer-with-join (see isPublisherOfferWithJoinSupported):\n // customers reported ICE connectivity problems for FF on this path (#1919) that we were\n // never able to reproduce, so out of caution FF stays on the deferred path below. The\n // exact cause is unknown — note that ICE gathering does not actually start here, since\n // createInitialOffer() defers setLocalDescription (via pendingInitialOffer) until the\n // answer is applied, after updateConfiguration() has set the server's TURN servers.\n yield _this2.configure();\n _this2.applyInitialPublisherLayout();\n }\n const offer = yield (_a = _this2.pcManager) === null || _a === void 0 ? void 0 : _a.publisher.createInitialOffer();\n if (offer) {\n offerProto = toProtoSessionDescription(offer.offer, offer.offerId);\n }\n }\n if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {\n throw ConnectionError.cancelled('Connection aborted');\n }\n if (!useV0Path && _this2.shouldFailOnV1Path) {\n _this2.shouldFailOnV1Path = false;\n throw ConnectionError.serviceNotFound('Simulated v1 path failure', 'v0-rtc');\n }\n const joinResponse = yield _this2.client.join(url, token, opts, abortSignal, useV0Path, offerProto);\n _this2._isClosed = false;\n _this2.latestJoinResponse = joinResponse;\n _this2.participantSid = (_b = joinResponse.participant) === null || _b === void 0 ? void 0 : _b.sid;\n _this2.subscriberPrimary = joinResponse.subscriberPrimary;\n if (sendOfferWithJoin) {\n (_c = _this2.pcManager) === null || _c === void 0 ? void 0 : _c.updateConfiguration(_this2.makeRTCConfiguration(joinResponse));\n } else {\n if (!_this2.pcManager) {\n // Deferred path (Firefox, and V0): configure with the join response so the PC picks up\n // the server's ICE servers and topology, then negotiate separately rather than bundling\n // the offer with the join.\n yield _this2.configure(joinResponse, !useV0Path);\n if (!useV0Path) {\n // The V1 first offer must carry the media layout so Firefox binds receive decoders for\n // subscribed tracks — without it, subscribed audio/video arrive as RTP but\n // never decode. V0 (legacy dual-PC) keeps its original lazy behavior.\n _this2.applyInitialPublisherLayout();\n }\n }\n // create offer\n if (!_this2.subscriberPrimary || joinResponse.fastPublish) {\n _this2.negotiate().catch(err => {\n _this2.log.error(err);\n });\n }\n }\n _this2.registerOnLineListener();\n _this2.clientConfiguration = joinResponse.clientConfiguration;\n _this2.emit(EngineEvent.SignalConnected, joinResponse);\n let serverInfo = joinResponse.serverInfo;\n if (!serverInfo) {\n serverInfo = {\n version: joinResponse.serverVersion,\n region: joinResponse.serverRegion\n };\n }\n _this2.log.info(\"connected to Livekit Server \".concat(Object.entries(serverInfo).map(_ref2 => {\n let _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n value = _ref3[1];\n return \"\".concat(key, \": \").concat(value);\n }).join(', ')));\n return {\n joinResponse,\n serverInfo\n };\n } catch (e) {\n if (e instanceof ConnectionError) {\n if (e.reason === ConnectionErrorReason.ServerUnreachable) {\n _this2.log.warn(\"Couldn't connect to server, attempt \".concat(_this2.joinAttempts, \" of \").concat(_this2.maxJoinAttempts));\n if (_this2.joinAttempts < _this2.maxJoinAttempts) {\n return _this2.join(url, token, opts, abortSignal, useV0Path);\n }\n } else if (e.reason === ConnectionErrorReason.ServiceNotFound) {\n _this2.log.warn(\"Initial connection failed: \".concat(e.message, \" \\u2013 Retrying\"));\n if (_this2.pcManager) {\n _this2.pcManager.onStateChange = undefined;\n yield _this2.cleanupPeerConnections();\n }\n return _this2.join(url, token, opts, abortSignal, true);\n }\n }\n throw e;\n }\n }();\n });\n }\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.closingLock.lock();\n if (this.isClosed) {\n unlock();\n return;\n }\n try {\n this._isClosed = true;\n this.joinAttempts = 0;\n this.emit(EngineEvent.Closing);\n this.removeAllListeners();\n this.deregisterOnLineListener();\n this.clearPendingReconnect();\n this.cleanupLossyDataStats();\n yield this.cleanupPeerConnections();\n yield this.cleanupClient();\n } finally {\n unlock();\n }\n });\n }\n cleanupPeerConnections() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.close();\n this.pcManager = undefined;\n const dcCleanup = dc => {\n if (!dc) return;\n dc.close();\n dc.onbufferedamountlow = null;\n dc.onclose = null;\n dc.onclosing = null;\n dc.onerror = null;\n dc.onmessage = null;\n dc.onopen = null;\n };\n dcCleanup(this.lossyDC);\n dcCleanup(this.lossyDCSub);\n dcCleanup(this.reliableDC);\n dcCleanup(this.reliableDCSub);\n dcCleanup(this.dataTrackDC);\n dcCleanup(this.dataTrackDCSub);\n this.lossyDC = undefined;\n this.lossyDCSub = undefined;\n this.reliableDC = undefined;\n this.reliableDCSub = undefined;\n this.dataTrackDC = undefined;\n this.dataTrackDCSub = undefined;\n this.reliableMessageBuffer = new DataPacketBuffer();\n this.reliableDataSequence = 1;\n this.reliableReceivedState.clear();\n });\n }\n cleanupLossyDataStats() {\n this.lossyDataStatByterate = 0;\n this.lossyDataStatCurrentBytes = 0;\n if (this.lossyDataStatInterval) {\n clearInterval(this.lossyDataStatInterval);\n this.lossyDataStatInterval = undefined;\n }\n this.lossyDataDropCount = 0;\n }\n cleanupClient() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.client.close();\n this.client.resetCallbacks();\n // Any in-flight addTrack requests are orphaned by the signal reconnect — the new session\n // won't deliver `trackPublishedResponse` for them, so reject the pending resolvers and\n // clear the map. Otherwise a subsequent `addTrack` call with the same client id (e.g. a\n // publish retry after a `NegotiationError`) throws `TrackInvalidError`.\n for (const cid of Object.keys(this.pendingTrackResolvers)) {\n this.pendingTrackResolvers[cid].reject();\n }\n this.pendingTrackResolvers = {};\n });\n }\n addTrack(req) {\n if (this.pendingTrackResolvers[req.cid]) {\n throw new TrackInvalidError('a track with the same ID has already been published');\n }\n return new Promise((resolve, reject) => {\n const publicationTimeout = setTimeout(() => {\n delete this.pendingTrackResolvers[req.cid];\n reject(ConnectionError.timeout('publication of local track timed out, no response from server'));\n }, 10000);\n this.pendingTrackResolvers[req.cid] = {\n resolve: info => {\n clearTimeout(publicationTimeout);\n resolve(info);\n },\n reject: () => {\n clearTimeout(publicationTimeout);\n reject(new Error('Cancelled publication by calling unpublish'));\n }\n };\n this.client.sendAddTrack(req);\n });\n }\n /**\n * Removes sender from PeerConnection, returning true if it was removed successfully\n * and a negotiation is necessary\n * @param sender\n * @returns\n */\n removeTrack(sender) {\n if (sender.track && this.pendingTrackResolvers[sender.track.id]) {\n const reject = this.pendingTrackResolvers[sender.track.id].reject;\n if (reject) {\n reject();\n }\n delete this.pendingTrackResolvers[sender.track.id];\n }\n try {\n this.pcManager.removeTrack(sender);\n return true;\n } catch (e) {\n this.log.warn('failed to remove track', {\n error: e\n });\n }\n return false;\n }\n updateMuteStatus(trackSid, muted) {\n this.client.sendMuteTrack(trackSid, muted);\n }\n get dataSubscriberReadyState() {\n var _a;\n return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;\n }\n getConnectedServerAddress() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n return (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getConnectedAddress();\n });\n }\n /* @internal */\n setRegionStrategy(strategy) {\n this.regionStrategy = strategy;\n }\n configure(joinResponse, useSinglePeerConnection) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n // already configured\n if (this.pcManager && this.pcManager.currentState !== PCTransportState.NEW) {\n return;\n }\n if (!joinResponse) {\n const rtcConfig = this.makeRTCConfiguration();\n this.pcManager = new PCTransportManager('publisher-only', this.loggerOptions, rtcConfig);\n } else {\n this.participantSid = (_a = joinResponse.participant) === null || _a === void 0 ? void 0 : _a.sid;\n const rtcConfig = this.makeRTCConfiguration(joinResponse);\n this.pcManager = new PCTransportManager(useSinglePeerConnection ? 'publisher-only' : joinResponse.subscriberPrimary ? 'subscriber-primary' : 'publisher-primary', this.loggerOptions, rtcConfig);\n }\n this.emit(EngineEvent.TransportsCreated, this.pcManager.publisher, this.pcManager.subscriber);\n this.pcManager.onIceCandidate = (candidate, target) => {\n this.client.sendIceCandidate(candidate, target);\n };\n this.pcManager.onPublisherOffer = (offer, offerId) => {\n this.client.sendOffer(offer, offerId);\n };\n this.pcManager.onDataChannel = this.handleDataChannel;\n this.pcManager.onStateChange = (connectionState, publisherState, subscriberState) => __awaiter(this, void 0, void 0, function* () {\n this.log.debug(\"primary PC state changed \".concat(connectionState));\n if (['closed', 'disconnected', 'failed'].includes(publisherState)) {\n // reset publisher connection promise\n this.publisherConnectionPromise = undefined;\n }\n if (connectionState === PCTransportState.CONNECTED) {\n const shouldEmit = this.pcState === PCState.New;\n this.pcState = PCState.Connected;\n if (shouldEmit) {\n this.emit(EngineEvent.Connected, this.latestJoinResponse);\n }\n } else if (connectionState === PCTransportState.FAILED) {\n // on Safari, PeerConnection will switch to 'disconnected' during renegotiation\n if (this.pcState === PCState.Connected || this.pcState === PCState.Reconnecting) {\n this.pcState = PCState.Disconnected;\n this.handleDisconnect('peerconnection failed', subscriberState === 'failed' ? ReconnectReason.RR_SUBSCRIBER_FAILED : ReconnectReason.RR_PUBLISHER_FAILED);\n }\n }\n // detect cases where both signal client and peer connection are severed and assume that user has lost network connection\n const isSignalSevered = this.client.isDisconnected || this.client.currentState === SignalConnectionState.RECONNECTING;\n const isPCSevered = [PCTransportState.FAILED, PCTransportState.CLOSING, PCTransportState.CLOSED].includes(connectionState);\n if (isSignalSevered && isPCSevered && !this._isClosed) {\n this.emit(EngineEvent.Offline);\n }\n });\n this.pcManager.onTrack = ev => {\n // this fires after the underlying transceiver is stopped and potentially\n // peer connection closed, so do not bubble up if there are no streams\n if (ev.streams.length === 0) return;\n this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);\n };\n });\n }\n setupSignalClientCallbacks() {\n // configure signaling client\n this.client.onAnswer = (sd, offerId, midToTrackId) => __awaiter(this, void 0, void 0, function* () {\n if (!this.pcManager) {\n return;\n }\n this.log.debug('received server answer', {\n RTCSdpType: sd.type,\n sdp: sd.sdp,\n midToTrackId\n });\n this.midToTrackId = midToTrackId;\n yield this.pcManager.setPublisherAnswer(sd, offerId);\n });\n // add candidate on trickle\n this.client.onTrickle = (candidate, target) => {\n if (!this.pcManager) {\n return;\n }\n this.log.debug('got ICE candidate from peer', {\n candidate,\n target\n });\n this.pcManager.addIceCandidate(candidate, target);\n };\n // when server creates an offer for the client\n this.client.onOffer = (sd, offerId, midToTrackId) => __awaiter(this, void 0, void 0, function* () {\n this.latestRemoteOfferId = offerId;\n if (!this.pcManager) {\n return;\n }\n this.midToTrackId = midToTrackId;\n const answer = yield this.pcManager.createSubscriberAnswerFromOffer(sd, offerId);\n if (answer) {\n this.client.sendAnswer(answer, offerId);\n }\n });\n this.client.onLocalTrackPublished = res => {\n var _a;\n this.log.debug('received trackPublishedResponse', {\n cid: res.cid,\n track: (_a = res.track) === null || _a === void 0 ? void 0 : _a.sid\n });\n if (!this.pendingTrackResolvers[res.cid]) {\n this.log.error(\"missing track resolver for \".concat(res.cid), {\n cid: res.cid\n });\n return;\n }\n const resolve = this.pendingTrackResolvers[res.cid].resolve;\n delete this.pendingTrackResolvers[res.cid];\n resolve(res.track);\n };\n this.client.onLocalTrackUnpublished = response => {\n this.emit(EngineEvent.LocalTrackUnpublished, response);\n };\n this.client.onLocalTrackSubscribed = trackSid => {\n this.emit(EngineEvent.LocalTrackSubscribed, trackSid);\n };\n this.client.onTokenRefresh = token => {\n this.token = token;\n this.emit(EngineEvent.TokenRefreshed, token);\n };\n this.client.onRemoteMuteChanged = (trackSid, muted) => {\n this.emit(EngineEvent.RemoteMute, trackSid, muted);\n };\n this.client.onSubscribedQualityUpdate = update => {\n this.emit(EngineEvent.SubscribedQualityUpdate, update);\n };\n this.client.onRoomMoved = res => {\n var _a;\n this.participantSid = (_a = res.participant) === null || _a === void 0 ? void 0 : _a.sid;\n if (this.latestJoinResponse) {\n this.latestJoinResponse.room = res.room;\n }\n this.emit(EngineEvent.RoomMoved, res);\n };\n this.client.onMediaSectionsRequirement = requirement => {\n this.addMediaSections(requirement.numAudios, requirement.numVideos);\n this.negotiate();\n };\n this.client.onPublishDataTrackResponse = event => {\n this.emit(EngineEvent.PublishDataTrackResponse, event);\n };\n this.client.onUnPublishDataTrackResponse = event => {\n this.emit(EngineEvent.UnPublishDataTrackResponse, event);\n };\n this.client.onDataTrackSubscriberHandles = event => {\n this.emit(EngineEvent.DataTrackSubscriberHandles, event);\n };\n this.client.onClose = () => {\n this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED);\n };\n this.client.onLeave = leave => {\n this.log.info(\"client leave request received (action=\".concat(leave === null || leave === void 0 ? void 0 : leave.action, \")\"), {\n reason: leave === null || leave === void 0 ? void 0 : leave.reason\n });\n if (leave.regions) {\n this.log.debug('updating regions');\n this.emit(EngineEvent.ServerRegionsReported, leave.regions);\n }\n switch (leave.action) {\n case LeaveRequest_Action.DISCONNECT:\n this.emit(EngineEvent.Disconnected, leave === null || leave === void 0 ? void 0 : leave.reason);\n this.close();\n break;\n case LeaveRequest_Action.RECONNECT:\n this.fullReconnectOnNext = true;\n // reconnect immediately instead of waiting for next attempt\n this.handleDisconnect(leaveReconnect);\n break;\n case LeaveRequest_Action.RESUME:\n // reconnect immediately instead of waiting for next attempt\n this.handleDisconnect(leaveReconnect);\n }\n };\n }\n makeRTCConfiguration(serverResponse) {\n var _a, _b;\n const rtcConfig = Object.assign({}, this.rtcConfig);\n // E2EE and packet trailer extraction both rely on encoded frame transforms.\n // Only opt into the createEncodedStreams flavor when that path will be\n // used; RTCRtpScriptTransform does not need the PeerConnection flag.\n const needsInsertableStreams = ((_a = this.signalOpts) === null || _a === void 0 ? void 0 : _a.e2eeEnabled) || ((_b = this.options.packetTrailer) === null || _b === void 0 ? void 0 : _b.worker) && !shouldUsePacketTrailerScriptTransform();\n if (needsInsertableStreams && isInsertableStreamSupported()) {\n this.log.debug('E2EE - setting up transports with insertable streams');\n // this makes sure that no data is sent before the transforms are ready\n // @ts-ignore\n rtcConfig.encodedInsertableStreams = true;\n }\n // @ts-ignore\n rtcConfig.sdpSemantics = 'unified-plan';\n // @ts-ignore\n rtcConfig.continualGatheringPolicy = 'gather_continually';\n if (!serverResponse) {\n return rtcConfig;\n }\n // update ICE servers before creating PeerConnection\n if (serverResponse.iceServers && !rtcConfig.iceServers) {\n const rtcIceServers = [];\n serverResponse.iceServers.forEach(iceServer => {\n const rtcIceServer = {\n urls: iceServer.urls\n };\n if (iceServer.username) rtcIceServer.username = iceServer.username;\n if (iceServer.credential) {\n rtcIceServer.credential = iceServer.credential;\n }\n rtcIceServers.push(rtcIceServer);\n });\n rtcConfig.iceServers = rtcIceServers;\n }\n if (serverResponse.clientConfiguration && serverResponse.clientConfiguration.forceRelay === ClientConfigSetting.ENABLED) {\n rtcConfig.iceTransportPolicy = 'relay';\n }\n return rtcConfig;\n }\n /**\n * Populate the publisher PC so its first offer carries the data channels + recvonly media\n * sections. Required for every V1 connection: Firefox only binds receive decoders for media\n * present in that first offer, and the offer-with-join path needs the sections to\n * build a meaningful initial offer. Must be called on a configured pcManager.\n */\n applyInitialPublisherLayout() {\n this.createDataChannels();\n this.addMediaSections(initialMediaSectionsAudio, initialMediaSectionsVideo);\n }\n addMediaSections(numAudios, numVideos) {\n var _a, _b;\n const transceiverInit = {\n direction: 'recvonly'\n };\n for (let i = 0; i < numAudios; i++) {\n (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.addPublisherTransceiverOfKind('audio', transceiverInit);\n }\n for (let i = 0; i < numVideos; i++) {\n (_b = this.pcManager) === null || _b === void 0 ? void 0 : _b.addPublisherTransceiverOfKind('video', transceiverInit);\n }\n }\n createDataChannels() {\n if (!this.pcManager) {\n return;\n }\n // clear old data channel callbacks if recreate\n if (this.lossyDC) {\n this.lossyDC.onmessage = null;\n this.lossyDC.onerror = null;\n }\n if (this.reliableDC) {\n this.reliableDC.onmessage = null;\n this.reliableDC.onerror = null;\n }\n if (this.dataTrackDC) {\n this.dataTrackDC.onmessage = null;\n this.dataTrackDC.onerror = null;\n }\n // create data channels\n this.lossyDC = this.pcManager.createPublisherDataChannel(lossyDataChannel, {\n ordered: false,\n maxRetransmits: 0\n });\n this.reliableDC = this.pcManager.createPublisherDataChannel(reliableDataChannel, {\n ordered: true\n });\n this.dataTrackDC = this.pcManager.createPublisherDataChannel(dataTrackDataChannel, {\n ordered: false,\n maxRetransmits: 0\n });\n // also handle messages over the pub channel, for backwards compatibility\n this.lossyDC.onmessage = this.handleDataMessage;\n this.reliableDC.onmessage = this.handleDataMessage;\n this.dataTrackDC.onmessage = this.handleDataTrackMessage;\n // handle datachannel errors\n this.lossyDC.onerror = this.handleDataError;\n this.reliableDC.onerror = this.handleDataError;\n this.dataTrackDC.onerror = this.handleDataError;\n // set up dc buffer threshold, set to 64kB (otherwise 0 by default)\n this.lossyDC.bufferedAmountLowThreshold = 65535;\n this.reliableDC.bufferedAmountLowThreshold = 65535;\n this.dataTrackDC.bufferedAmountLowThreshold = 65535;\n // handle buffer amount low events\n this.lossyDC.onbufferedamountlow = () => this.handleBufferedAmountLow(DataChannelKind.LOSSY);\n this.reliableDC.onbufferedamountlow = () => this.handleBufferedAmountLow(DataChannelKind.RELIABLE);\n this.dataTrackDC.onbufferedamountlow = () => this.handleBufferedAmountLow(DataChannelKind.DATA_TRACK_LOSSY);\n this.cleanupLossyDataStats();\n this.lossyDataStatInterval = setInterval(() => {\n this.lossyDataStatByterate = this.lossyDataStatCurrentBytes;\n this.lossyDataStatCurrentBytes = 0;\n const dc = this.dataChannelForKind(DataChannelKind.LOSSY);\n if (dc) {\n // control buffered latency to ~100ms\n const threshold = this.lossyDataStatByterate / 10;\n dc.bufferedAmountLowThreshold = Math.min(Math.max(threshold, lossyDataChannelBufferThresholdMin), lossyDataChannelBufferThresholdMax);\n }\n }, 1000);\n }\n createSender(track, opts, encodings) {\n return __awaiter(this, void 0, void 0, function* () {\n let sender;\n if (supportsTransceiver()) {\n sender = yield this.createTransceiverRTCRtpSender(track, opts, encodings);\n } else if (supportsAddTrack()) {\n this.log.warn('using add-track fallback');\n sender = yield this.createRTCRtpSender(track.mediaStreamTrack);\n } else {\n throw new UnexpectedConnectionState('Required webRTC APIs not supported on this device');\n }\n this.setupPacketTrailerSender(sender, opts);\n return sender;\n });\n }\n createSimulcastSender(track, simulcastTrack, opts, encodings) {\n return __awaiter(this, void 0, void 0, function* () {\n let sender;\n if (supportsTransceiver()) {\n sender = yield this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings);\n } else if (supportsAddTrack()) {\n this.log.debug('using add-track fallback');\n sender = yield this.createRTCRtpSender(track.mediaStreamTrack);\n } else {\n throw new UnexpectedConnectionState('Cannot stream on this device');\n }\n if (sender) {\n this.setupPacketTrailerSender(sender, opts);\n }\n return sender;\n });\n }\n setupPacketTrailerSender(sender) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _a, _b;\n if (!((_a = this.options.packetTrailer) === null || _a === void 0 ? void 0 : _a.worker) || ((_b = this.signalOpts) === null || _b === void 0 ? void 0 : _b.e2eeEnabled)) {\n return;\n }\n const packetTrailer = opts.packetTrailer;\n const hasPacketTrailer = hasPacketTrailerPublishOptions(packetTrailer);\n if (shouldUsePacketTrailerScriptTransform()) {\n if (hasPacketTrailer) {\n // @ts-ignore\n sender.transform = new RTCRtpScriptTransform(this.options.packetTrailer.worker, {\n kind: 'encode',\n packetTrailer\n });\n }\n return;\n }\n if (!isPacketTrailerSupported(this.options.packetTrailer) || !('createEncodedStreams' in sender)) {\n if (hasPacketTrailer) {\n this.log.warn('packet trailer transform not supported; skipping write', this.logContext);\n }\n return;\n }\n // @ts-ignore\n const _sender$createEncoded = sender.createEncodedStreams(),\n readable = _sender$createEncoded.readable,\n writable = _sender$createEncoded.writable;\n if (hasPacketTrailer) {\n this.options.packetTrailer.worker.postMessage({\n kind: 'encode',\n data: {\n readableStream: readable,\n writableStream: writable,\n packetTrailer\n }\n }, [readable, writable]);\n } else {\n readable.pipeTo(writable);\n }\n }\n createTransceiverRTCRtpSender(track, opts, encodings) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.pcManager) {\n throw new UnexpectedConnectionState('publisher is closed');\n }\n const streams = [];\n if (track.mediaStream) {\n streams.push(track.mediaStream);\n }\n if (isVideoTrack(track)) {\n track.codec = opts.videoCodec;\n }\n const transceiverInit = {\n direction: 'sendonly',\n streams\n };\n if (encodings) {\n transceiverInit.sendEncodings = encodings;\n }\n // addTransceiver for react-native is async. web is synchronous, but await won't effect it.\n const transceiver = yield this.pcManager.addPublisherTransceiver(track.mediaStreamTrack, transceiverInit);\n return transceiver.sender;\n });\n }\n createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.pcManager) {\n throw new UnexpectedConnectionState('publisher is closed');\n }\n const transceiverInit = {\n direction: 'sendonly'\n };\n if (encodings) {\n transceiverInit.sendEncodings = encodings;\n }\n // addTransceiver for react-native is async. web is synchronous, but await won't effect it.\n const transceiver = yield this.pcManager.addPublisherTransceiver(simulcastTrack.mediaStreamTrack, transceiverInit);\n if (!opts.videoCodec) {\n return;\n }\n track.setSimulcastTrackSender(opts.videoCodec, transceiver.sender);\n return transceiver.sender;\n });\n }\n createRTCRtpSender(track) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.pcManager) {\n throw new UnexpectedConnectionState('publisher is closed');\n }\n return this.pcManager.addPublisherTrack(track);\n });\n }\n attemptReconnect(reason) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n if (this._isClosed) {\n return;\n }\n // guard for attempting reconnection multiple times while one attempt is still not finished\n if (this.attemptingReconnect) {\n this.log.warn('already attempting reconnect, returning early');\n return;\n }\n if (((_a = this.clientConfiguration) === null || _a === void 0 ? void 0 : _a.resumeConnection) === ClientConfigSetting.DISABLED ||\n // signaling state could change to closed due to hardware sleep\n // those connections cannot be resumed\n ((_c = (_b = this.pcManager) === null || _b === void 0 ? void 0 : _b.currentState) !== null && _c !== void 0 ? _c : PCTransportState.NEW) === PCTransportState.NEW) {\n this.fullReconnectOnNext = true;\n }\n try {\n this.attemptingReconnect = true;\n if (this.fullReconnectOnNext) {\n yield this.restartConnection();\n } else {\n yield this.resumeConnection(reason);\n }\n this.clearPendingReconnect();\n this.fullReconnectOnNext = false;\n } catch (e) {\n this.reconnectAttempts += 1;\n let recoverable = true;\n if (e instanceof UnexpectedConnectionState) {\n this.log.debug('received unrecoverable error', {\n error: e\n });\n // unrecoverable\n recoverable = false;\n } else if (!(e instanceof SignalReconnectError)) {\n // cannot resume\n this.fullReconnectOnNext = true;\n }\n if (recoverable) {\n this.handleDisconnect('reconnect', ReconnectReason.RR_UNKNOWN);\n } else {\n this.log.info(\"could not recover connection after \".concat(this.reconnectAttempts, \" attempts, \").concat(Date.now() - this.reconnectStart, \"ms. giving up\"));\n this.emit(EngineEvent.Disconnected);\n yield this.close();\n }\n } finally {\n this.attemptingReconnect = false;\n }\n });\n }\n getNextRetryDelay(context) {\n try {\n return this.reconnectPolicy.nextRetryDelayInMs(context);\n } catch (e) {\n this.log.warn('encountered error in reconnect policy', {\n error: e\n });\n }\n // error in user code with provided reconnect policy, stop reconnecting\n return null;\n }\n restartConnection(regionUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n try {\n if (!this.url || !this.token) {\n // permanent failure, don't attempt reconnection\n throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n }\n this.log.info(\"reconnecting, attempt: \".concat(this.reconnectAttempts));\n this.emit(EngineEvent.Restarting);\n if (!this.client.isDisconnected) {\n yield this.client.sendLeave();\n }\n yield this.cleanupPeerConnections();\n yield this.cleanupClient();\n let joinResponse;\n try {\n if (!this.signalOpts) {\n this.log.warn('attempted connection restart, without signal options present');\n throw new SignalReconnectError();\n }\n // in case a regionUrl is passed, the region URL takes precedence\n joinResponse = (yield this.join(regionUrl !== null && regionUrl !== void 0 ? regionUrl : this.url, this.token, this.signalOpts, undefined, !this.options.singlePeerConnection)).joinResponse;\n } catch (e) {\n if (e instanceof ConnectionError && e.reason === ConnectionErrorReason.NotAllowed) {\n throw new UnexpectedConnectionState('could not reconnect, token might be expired');\n }\n throw new SignalReconnectError();\n }\n if (this.shouldFailNext) {\n this.shouldFailNext = false;\n throw new Error('simulated failure');\n }\n this.client.setReconnected();\n this.emit(EngineEvent.SignalRestarted, joinResponse);\n yield this.waitForPCReconnected();\n // re-check signal connection state before setting engine as resumed\n if (this.client.currentState !== SignalConnectionState.CONNECTED) {\n throw new SignalReconnectError('Signal connection got severed during reconnect');\n }\n (_a = this.regionStrategy) === null || _a === void 0 ? void 0 : _a.resetAttempts();\n // reconnect success\n this.emit(EngineEvent.Restarted);\n } catch (error) {\n const nextRegionUrl = yield (_b = this.regionStrategy) === null || _b === void 0 ? void 0 : _b.getNextUrl();\n if (nextRegionUrl) {\n yield this.restartConnection(nextRegionUrl);\n return;\n } else {\n // no more regions to try (or we're not on cloud)\n (_c = this.regionStrategy) === null || _c === void 0 ? void 0 : _c.resetAttempts();\n throw error;\n }\n }\n });\n }\n resumeConnection(reason) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!this.url || !this.token) {\n // permanent failure, don't attempt reconnection\n throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n }\n // trigger publisher reconnect\n if (!this.pcManager) {\n throw new UnexpectedConnectionState('publisher and subscriber connections unset');\n }\n this.log.info(\"resuming signal connection, attempt \".concat(this.reconnectAttempts));\n this.emit(EngineEvent.Resuming);\n let res;\n try {\n this.setupSignalClientCallbacks();\n res = yield this.client.reconnect(this.url, this.token, this.participantSid, reason);\n } catch (error) {\n let message = '';\n if (error instanceof Error) {\n message = error.message;\n this.log.error(error.message, {\n error\n });\n }\n if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.NotAllowed) {\n throw new UnexpectedConnectionState('could not reconnect, token might be expired');\n }\n if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.LeaveRequest) {\n throw error;\n }\n throw new SignalReconnectError(message);\n }\n this.emit(EngineEvent.SignalResumed);\n if (res) {\n const rtcConfig = this.makeRTCConfiguration(res);\n this.pcManager.updateConfiguration(rtcConfig);\n if (this.latestJoinResponse) {\n this.latestJoinResponse.serverInfo = res.serverInfo;\n }\n } else {\n this.log.warn('Did not receive reconnect response');\n }\n if (this.shouldFailNext) {\n this.shouldFailNext = false;\n throw new Error('simulated failure');\n }\n yield this.pcManager.triggerIceRestart();\n yield this.waitForPCReconnected();\n // re-check signal connection state before setting engine as resumed\n if (this.client.currentState !== SignalConnectionState.CONNECTED) {\n throw new SignalReconnectError('Signal connection got severed during reconnect');\n }\n this.client.setReconnected();\n // recreate publish datachannel if it's id is null\n // (for safari https://bugs.webkit.org/show_bug.cgi?id=184688)\n if (((_a = this.reliableDC) === null || _a === void 0 ? void 0 : _a.readyState) === 'open' && this.reliableDC.id === null) {\n this.createDataChannels();\n }\n if (res === null || res === void 0 ? void 0 : res.lastMessageSeq) {\n this.resendReliableMessagesForResume(res.lastMessageSeq);\n }\n // resume success\n this.emit(EngineEvent.Resumed);\n });\n }\n waitForPCInitialConnection(timeout, abortController) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.pcManager) {\n throw new UnexpectedConnectionState('PC manager is closed');\n }\n yield this.pcManager.ensurePCTransportConnection(abortController, timeout);\n });\n }\n waitForPCReconnected() {\n return __awaiter(this, void 0, void 0, function* () {\n this.pcState = PCState.Reconnecting;\n this.log.debug('waiting for peer connection to reconnect');\n try {\n yield sleep(minReconnectWait); // FIXME setTimeout again not ideal for a connection critical path\n if (!this.pcManager) {\n throw new UnexpectedConnectionState('PC manager is closed');\n }\n yield this.pcManager.ensurePCTransportConnection(undefined, this.peerConnectionTimeout);\n this.pcState = PCState.Connected;\n } catch (e) {\n // TODO do we need a `failed` state here for the PC?\n this.pcState = PCState.Disconnected;\n throw ConnectionError.internal(\"could not establish PC connection, \".concat(e.message));\n }\n });\n }\n /** @internal */\n publishRpcAck(destinationIdentity, requestId) {\n return __awaiter(this, void 0, void 0, function* () {\n const packet = new DataPacket({\n destinationIdentities: [destinationIdentity],\n kind: DataPacket_Kind.RELIABLE,\n value: {\n case: 'rpcAck',\n value: new RpcAck({\n requestId\n })\n }\n });\n yield this.sendDataPacket(packet, DataChannelKind.RELIABLE);\n });\n }\n /* @internal */\n sendDataPacket(packet, kind) {\n return __awaiter(this, void 0, void 0, function* () {\n // make sure we do have a data connection\n yield this.ensurePublisherConnected(kind);\n if (this.e2eeManager && this.e2eeManager.isDataChannelEncryptionEnabled) {\n const encryptablePacket = asEncryptablePacket(packet);\n if (encryptablePacket) {\n const encryptedData = yield this.e2eeManager.encryptData(encryptablePacket.toBinary());\n packet.value = {\n case: 'encryptedPacket',\n value: new EncryptedPacket({\n encryptedValue: encryptedData.payload,\n iv: encryptedData.iv,\n keyIndex: encryptedData.keyIndex\n })\n };\n }\n }\n if (kind === DataChannelKind.RELIABLE) {\n packet.sequence = this.reliableDataSequence;\n this.reliableDataSequence += 1;\n }\n const msg = packet.toBinary();\n switch (kind) {\n case DataChannelKind.LOSSY:\n case DataChannelKind.DATA_TRACK_LOSSY:\n return this.sendLossyBytes(msg, kind);\n case DataChannelKind.RELIABLE:\n const dc = this.dataChannelForKind(kind);\n if (dc) {\n yield this.waitForBufferStatusLow(kind);\n this.reliableMessageBuffer.push({\n data: msg,\n sequence: packet.sequence\n });\n if (this.attemptingReconnect) {\n return;\n }\n dc.send(msg);\n }\n this.updateAndEmitDCBufferStatus(kind);\n break;\n }\n });\n }\n /* @internal */\n sendLossyBytes(bytes_1, kind_1) {\n return __awaiter(this, arguments, void 0, function (bytes, kind) {\n var _this3 = this;\n let bufferStatusLowBehavior = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'drop';\n return function* () {\n // make sure we do have a data connection\n yield _this3.ensurePublisherConnected(kind);\n const dc = _this3.dataChannelForKind(kind);\n if (dc) {\n if (!_this3.isBufferStatusLow(kind)) {\n // Depending on the exact circumstance that data is being sent, either drop or wait for the\n // buffer status to not be low before continuing.\n switch (bufferStatusLowBehavior) {\n case 'wait':\n yield _this3.waitForBufferStatusLow(kind);\n break;\n case 'drop':\n // this.log.warn(`dropping lossy data channel message`, this.logContext);\n // Drop messages to reduce latency\n _this3.lossyDataDropCount += 1;\n if (_this3.lossyDataDropCount % 100 === 0) {\n _this3.log.warn(\"dropping lossy data channel messages, total dropped: \".concat(_this3.lossyDataDropCount));\n }\n return;\n }\n }\n _this3.lossyDataStatCurrentBytes += bytes.byteLength;\n if (_this3.attemptingReconnect) {\n return;\n }\n dc.send(bytes);\n }\n _this3.updateAndEmitDCBufferStatus(kind);\n }();\n });\n }\n resendReliableMessagesForResume(lastMessageSeq) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.ensurePublisherConnected(DataChannelKind.RELIABLE);\n const dc = this.dataChannelForKind(DataChannelKind.RELIABLE);\n if (dc) {\n this.reliableMessageBuffer.popToSequence(lastMessageSeq);\n this.reliableMessageBuffer.getAll().forEach(msg => {\n dc.send(msg.data);\n });\n }\n this.updateAndEmitDCBufferStatus(DataChannelKind.RELIABLE);\n });\n }\n waitForBufferStatusLow(kind) {\n return __awaiter(this, void 0, void 0, function* () {\n return new TypedPromise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n if (this.isClosed) {\n reject(new UnexpectedConnectionState('engine closed'));\n }\n if (this.isBufferStatusLow(kind)) {\n resolve();\n } else {\n const dc = this.dataChannelForKind(kind);\n if (!dc) {\n reject(new UnexpectedConnectionState(\"DataChannel not found, kind: \".concat(kind)));\n return;\n }\n this.bufferStatusLowClosingFuture.promise.catch(e => reject(e));\n dc.addEventListener('bufferedamountlow', () => resolve(), {\n once: true\n });\n }\n }));\n });\n }\n /**\n * @internal\n */\n ensureDataTransportConnected(kind_1) {\n return __awaiter(this, arguments, void 0, function (kind) {\n var _this4 = this;\n let subscriber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.subscriberPrimary;\n return function* () {\n var _a;\n if (!_this4.pcManager) {\n throw new UnexpectedConnectionState('PC manager is closed');\n }\n const transport = subscriber ? _this4.pcManager.subscriber : _this4.pcManager.publisher;\n const transportName = subscriber ? 'Subscriber' : 'Publisher';\n if (!transport) {\n throw ConnectionError.internal(\"\".concat(transportName, \" connection not set\"));\n }\n let needNegotiation = false;\n if (!subscriber && !_this4.dataChannelForKind(kind, subscriber)) {\n _this4.createDataChannels();\n needNegotiation = true;\n }\n if (!needNegotiation && !subscriber && !_this4.pcManager.publisher.isICEConnected && _this4.pcManager.publisher.getICEConnectionState() !== 'checking') {\n needNegotiation = true;\n }\n if (needNegotiation) {\n // start negotiation\n _this4.negotiate().catch(err => {\n _this4.log.error(err);\n });\n }\n const targetChannel = _this4.dataChannelForKind(kind, subscriber);\n if ((targetChannel === null || targetChannel === void 0 ? void 0 : targetChannel.readyState) === 'open') {\n return;\n }\n // wait until ICE connected\n const endTime = new Date().getTime() + _this4.peerConnectionTimeout;\n while (new Date().getTime() < endTime) {\n if (transport.isICEConnected && ((_a = _this4.dataChannelForKind(kind, subscriber)) === null || _a === void 0 ? void 0 : _a.readyState) === 'open') {\n return;\n }\n yield sleep(50);\n }\n throw ConnectionError.internal(\"could not establish \".concat(transportName, \" connection, state: \").concat(transport.getICEConnectionState()));\n }();\n });\n }\n ensurePublisherConnected(kind) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.publisherConnectionPromise) {\n this.publisherConnectionPromise = this.ensureDataTransportConnected(kind, false);\n }\n yield this.publisherConnectionPromise;\n });\n }\n /* @internal */\n verifyTransport() {\n if (!this.pcManager) {\n return false;\n }\n const allowedConnectionStates = [PCTransportState.CONNECTING, PCTransportState.CONNECTED];\n if (!allowedConnectionStates.includes(this.pcManager.currentState)) {\n return false;\n }\n // ensure signal is connected\n if (!this.client.ws || this.client.ws.readyState === WebSocket.CLOSED) {\n return false;\n }\n return true;\n }\n /** @internal */\n negotiate() {\n return __awaiter(this, void 0, void 0, function* () {\n // observe signal state\n return new TypedPromise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n if (!this.pcManager) {\n reject(new NegotiationError('PC manager is closed'));\n return;\n }\n this.pcManager.requirePublisher();\n // don't negotiate without any transceivers or data channel, it will generate sdp without ice frag then negotiate failed\n if (this.pcManager.publisher.getTransceivers().length == 0 && !this.lossyDC && !this.reliableDC && !this.dataTrackDC) {\n this.createDataChannels();\n }\n const abortController = new AbortController();\n const handleClosed = () => {\n abortController.abort();\n this.log.debug('engine disconnected while negotiation was ongoing');\n resolve();\n return;\n };\n if (this.isClosed) {\n reject(new NegotiationError('cannot negotiate on closed engine'));\n }\n this.on(EngineEvent.Closing, handleClosed);\n this.on(EngineEvent.Restarting, handleClosed);\n this.pcManager.publisher.off(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable);\n this.pcManager.publisher.once(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable);\n try {\n yield this.pcManager.negotiate(abortController);\n resolve();\n } catch (e) {\n if (abortController.signal.aborted) {\n // negotiation was aborted due to engine close or restart, resolve\n // cleanly to avoid triggering a cascading reconnect loop\n resolve();\n return;\n }\n if (e instanceof NegotiationError) {\n this.fullReconnectOnNext = true;\n }\n this.handleDisconnect('negotiation', ReconnectReason.RR_UNKNOWN);\n if (e instanceof Error) {\n reject(e);\n } else {\n reject(new Error(String(e)));\n }\n } finally {\n this.off(EngineEvent.Closing, handleClosed);\n this.off(EngineEvent.Restarting, handleClosed);\n }\n }));\n });\n }\n dataChannelForKind(kind, sub) {\n switch (kind) {\n case DataChannelKind.RELIABLE:\n if (!sub) {\n return this.reliableDC;\n } else {\n return this.reliableDCSub;\n }\n case DataChannelKind.LOSSY:\n if (!sub) {\n return this.lossyDC;\n } else {\n return this.lossyDCSub;\n }\n case DataChannelKind.DATA_TRACK_LOSSY:\n if (!sub) {\n return this.dataTrackDC;\n } else {\n return this.dataTrackDCSub;\n }\n }\n }\n /** @internal */\n sendSyncState(remoteTracks, localTracks, localDataTrackInfos) {\n var _a, _b, _c, _d;\n if (!this.pcManager) {\n this.log.warn('sync state cannot be sent without peer connection setup');\n return;\n }\n const previousPublisherOffer = this.pcManager.publisher.getLocalDescription();\n const previousPublisherAnswer = this.pcManager.publisher.getRemoteDescription();\n const previousSubscriberOffer = (_a = this.pcManager.subscriber) === null || _a === void 0 ? void 0 : _a.getRemoteDescription();\n const previousSubscriberAnswer = (_b = this.pcManager.subscriber) === null || _b === void 0 ? void 0 : _b.getLocalDescription();\n /* 1. autosubscribe on, so subscribed tracks = all tracks - unsub tracks,\n in this case, we send unsub tracks, so server add all tracks to this\n subscribe pc and unsub special tracks from it.\n 2. autosubscribe off, we send subscribed tracks.\n */\n const autoSubscribe = (_d = (_c = this.signalOpts) === null || _c === void 0 ? void 0 : _c.autoSubscribe) !== null && _d !== void 0 ? _d : true;\n const trackSids = new Array();\n const trackSidsDisabled = new Array();\n remoteTracks.forEach(track => {\n if (track.isDesired !== autoSubscribe) {\n trackSids.push(track.trackSid);\n }\n if (!track.isEnabled) {\n trackSidsDisabled.push(track.trackSid);\n }\n });\n this.client.sendSyncState(new SyncState({\n answer: this.pcManager.mode === 'publisher-only' ? previousPublisherAnswer ? toProtoSessionDescription({\n sdp: previousPublisherAnswer.sdp,\n type: previousPublisherAnswer.type\n }) : undefined : previousSubscriberAnswer ? toProtoSessionDescription({\n sdp: previousSubscriberAnswer.sdp,\n type: previousSubscriberAnswer.type\n }) : undefined,\n offer: this.pcManager.mode === 'publisher-only' ? previousPublisherOffer ? toProtoSessionDescription({\n sdp: previousPublisherOffer.sdp,\n type: previousPublisherOffer.type\n }) : undefined : previousSubscriberOffer ? toProtoSessionDescription({\n sdp: previousSubscriberOffer.sdp,\n type: previousSubscriberOffer.type\n }) : undefined,\n subscription: new UpdateSubscription({\n trackSids,\n subscribe: !autoSubscribe,\n participantTracks: []\n }),\n publishTracks: getTrackPublicationInfo(localTracks),\n dataChannels: this.dataChannelsInfo(),\n trackSidsDisabled,\n datachannelReceiveStates: this.reliableReceivedState.map((seq, sid) => {\n return new DataChannelReceiveState({\n publisherSid: sid,\n lastSeq: seq\n });\n }),\n publishDataTracks: localDataTrackInfos.map(info => {\n return new PublishDataTrackResponse({\n info: DataTrackInfo.toProtobuf(info)\n });\n })\n }));\n }\n /* @internal */\n failNext() {\n // debugging method to fail the next reconnect/resume attempt\n this.shouldFailNext = true;\n }\n /* @internal */\n failNextV1Path() {\n // debugging method to fail the next connection attempt for /rtc/v1 to trigger the fallback version\n this.shouldFailOnV1Path = true;\n }\n dataChannelsInfo() {\n const infos = [];\n const getInfo = (dc, target) => {\n if ((dc === null || dc === void 0 ? void 0 : dc.id) !== undefined && dc.id !== null) {\n infos.push(new DataChannelInfo({\n label: dc.label,\n id: dc.id,\n target\n }));\n }\n };\n getInfo(this.dataChannelForKind(DataChannelKind.LOSSY), SignalTarget.PUBLISHER);\n getInfo(this.dataChannelForKind(DataChannelKind.RELIABLE), SignalTarget.PUBLISHER);\n getInfo(this.dataChannelForKind(DataChannelKind.LOSSY, true), SignalTarget.SUBSCRIBER);\n getInfo(this.dataChannelForKind(DataChannelKind.RELIABLE, true), SignalTarget.SUBSCRIBER);\n return infos;\n }\n clearReconnectTimeout() {\n if (this.reconnectTimeout) {\n CriticalTimers.clearTimeout(this.reconnectTimeout);\n }\n }\n clearPendingReconnect() {\n this.clearReconnectTimeout();\n this.reconnectAttempts = 0;\n }\n registerOnLineListener() {\n if (isWeb()) {\n window.addEventListener('online', this.handleBrowserOnLine);\n window.addEventListener('offline', this.handleBrowserOffline);\n }\n }\n deregisterOnLineListener() {\n if (isWeb()) {\n window.removeEventListener('online', this.handleBrowserOnLine);\n window.removeEventListener('offline', this.handleBrowserOffline);\n }\n }\n getTrackIdForReceiver(receiver) {\n var _a;\n const mid = (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getMidForReceiver(receiver);\n if (mid) {\n const match = Object.entries(this.midToTrackId).find(_ref4 => {\n let _ref5 = _slicedToArray(_ref4, 1),\n key = _ref5[0];\n return key === mid;\n });\n if (match) {\n return match[1];\n }\n }\n }\n}\nfunction applyUserDataCompat(newObj, oldObj) {\n const participantIdentity = newObj.participantIdentity ? newObj.participantIdentity : oldObj.participantIdentity;\n newObj.participantIdentity = participantIdentity;\n oldObj.participantIdentity = participantIdentity;\n const destinationIdentities = newObj.destinationIdentities.length !== 0 ? newObj.destinationIdentities : oldObj.destinationIdentities;\n newObj.destinationIdentities = destinationIdentities;\n oldObj.destinationIdentities = destinationIdentities;\n}const DEFAULT_MAX_AGE_MS = 5000;\nconst STOP_REFETCH_DELAY_MS = 30000;\nclass RegionUrlProvider {\n static fetchRegionSettings(serverUrl, token, signal) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield RegionUrlProvider.fetchLock.lock();\n try {\n const regionSettingsResponse = yield fetch(\"\".concat(getCloudConfigUrl(serverUrl), \"/regions\"), {\n headers: {\n authorization: \"Bearer \".concat(token)\n },\n signal\n });\n if (regionSettingsResponse.ok) {\n const maxAge = extractMaxAgeFromRequestHeaders(regionSettingsResponse.headers);\n const maxAgeInMs = maxAge ? maxAge * 1000 : DEFAULT_MAX_AGE_MS;\n const regionSettings = yield regionSettingsResponse.json();\n return {\n regionSettings,\n updatedAtInMs: Date.now(),\n maxAgeInMs\n };\n } else {\n if (regionSettingsResponse.status === 401) {\n throw ConnectionError.notAllowed(\"Could not fetch region settings: \".concat(regionSettingsResponse.statusText), regionSettingsResponse.status);\n } else {\n throw ConnectionError.internal(\"Could not fetch region settings: \".concat(regionSettingsResponse.statusText));\n }\n }\n } catch (e) {\n if (e instanceof ConnectionError) {\n // rethrow connection errors\n throw e;\n } else if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n throw ConnectionError.cancelled(\"Region fetching was aborted\");\n } else {\n // wrap other errors as connection errors\n throw ConnectionError.serverUnreachable(\"Could not fetch region settings, \".concat(e instanceof Error ? \"\".concat(e.name, \": \").concat(e.message) : e));\n }\n } finally {\n unlock();\n }\n });\n }\n static scheduleRefetch(url, token, maxAgeInMs) {\n return __awaiter(this, void 0, void 0, function* () {\n const timeout = RegionUrlProvider.settingsTimeouts.get(url.hostname);\n clearTimeout(timeout);\n RegionUrlProvider.settingsTimeouts.set(url.hostname, setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n try {\n const newSettings = yield RegionUrlProvider.fetchRegionSettings(url, token);\n RegionUrlProvider.updateCachedRegionSettings(url, token, newSettings);\n } catch (error) {\n if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.NotAllowed) {\n livekitLogger.debug('token is not valid, cancelling auto region refresh');\n return;\n }\n livekitLogger.debug('auto refetching of region settings failed', {\n error\n });\n // continue retrying with the same max age\n RegionUrlProvider.scheduleRefetch(url, token, maxAgeInMs);\n }\n }), maxAgeInMs));\n });\n }\n static updateCachedRegionSettings(url, token, settings) {\n RegionUrlProvider.cache.set(url.hostname, settings);\n RegionUrlProvider.scheduleRefetch(url, token, settings.maxAgeInMs);\n }\n static stopRefetch(hostname) {\n const timeout = RegionUrlProvider.settingsTimeouts.get(hostname);\n if (timeout) {\n clearTimeout(timeout);\n RegionUrlProvider.settingsTimeouts.delete(hostname);\n }\n }\n static scheduleCleanup(hostname) {\n let tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n if (!tracker) {\n return;\n }\n // Cancel any existing cleanup timeout\n if (tracker.cleanupTimeout) {\n clearTimeout(tracker.cleanupTimeout);\n }\n // Schedule cleanup to stop refetch after delay\n tracker.cleanupTimeout = setTimeout(() => {\n const currentTracker = RegionUrlProvider.connectionTrackers.get(hostname);\n if (currentTracker && currentTracker.connectionCount === 0) {\n livekitLogger.debug('stopping region refetch after disconnect delay', {\n hostname\n });\n RegionUrlProvider.stopRefetch(hostname);\n }\n if (currentTracker) {\n currentTracker.cleanupTimeout = undefined;\n }\n }, STOP_REFETCH_DELAY_MS);\n }\n static cancelCleanup(hostname) {\n const tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n if (tracker === null || tracker === void 0 ? void 0 : tracker.cleanupTimeout) {\n clearTimeout(tracker.cleanupTimeout);\n tracker.cleanupTimeout = undefined;\n }\n }\n notifyConnected() {\n const hostname = this.serverUrl.hostname;\n let tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n if (!tracker) {\n tracker = {\n connectionCount: 0\n };\n RegionUrlProvider.connectionTrackers.set(hostname, tracker);\n }\n tracker.connectionCount++;\n // Cancel any scheduled cleanup since we have an active connection\n RegionUrlProvider.cancelCleanup(hostname);\n }\n notifyDisconnected() {\n const hostname = this.serverUrl.hostname;\n const tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n if (!tracker) {\n return;\n }\n tracker.connectionCount = Math.max(0, tracker.connectionCount - 1);\n // If no more connections, schedule cleanup\n if (tracker.connectionCount === 0) {\n RegionUrlProvider.scheduleCleanup(hostname);\n }\n }\n constructor(url, token) {\n this.attemptedRegions = [];\n this.serverUrl = new URL(url);\n this.token = token;\n }\n updateToken(token) {\n var _a;\n this.token = token;\n const url = this.getServerUrl();\n const settings = RegionUrlProvider.cache.get(url.hostname);\n RegionUrlProvider.scheduleRefetch(this.serverUrl, this.token, (_a = settings === null || settings === void 0 ? void 0 : settings.maxAgeInMs) !== null && _a !== void 0 ? _a : DEFAULT_MAX_AGE_MS);\n }\n isCloud() {\n return isCloud(this.serverUrl);\n }\n getServerUrl() {\n return this.serverUrl;\n }\n /** @internal */\n fetchRegionSettings(abortSignal) {\n return __awaiter(this, void 0, void 0, function* () {\n return RegionUrlProvider.fetchRegionSettings(this.serverUrl, this.token, abortSignal);\n });\n }\n getNextBestRegionUrl(abortSignal) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.isCloud()) {\n throw Error('region availability is only supported for LiveKit Cloud domains');\n }\n let cachedSettings = RegionUrlProvider.cache.get(this.serverUrl.hostname);\n if (!cachedSettings || Date.now() - cachedSettings.updatedAtInMs > cachedSettings.maxAgeInMs) {\n cachedSettings = yield this.fetchRegionSettings(abortSignal);\n RegionUrlProvider.updateCachedRegionSettings(this.serverUrl, this.token, cachedSettings);\n }\n const regionsLeft = cachedSettings.regionSettings.regions.filter(region => !this.attemptedRegions.find(attempted => attempted.url === region.url));\n if (regionsLeft.length > 0) {\n const nextRegion = regionsLeft[0];\n this.attemptedRegions.push(nextRegion);\n livekitLogger.debug(\"next region: \".concat(nextRegion.region));\n return nextRegion.url;\n } else {\n return null;\n }\n });\n }\n resetAttempts() {\n this.attemptedRegions = [];\n }\n setServerReportedRegions(settings) {\n RegionUrlProvider.updateCachedRegionSettings(this.serverUrl, this.token, settings);\n }\n}\nRegionUrlProvider.cache = new Map();\nRegionUrlProvider.settingsTimeouts = new Map();\nRegionUrlProvider.connectionTrackers = new Map();\nRegionUrlProvider.fetchLock = new _();\nfunction getCloudConfigUrl(serverUrl) {\n return \"\".concat(serverUrl.protocol.replace('ws', 'http'), \"//\").concat(serverUrl.host, \"/settings\");\n}class BaseStreamReader {\n get info() {\n return this._info;\n }\n /** @internal */\n validateBytesReceived() {\n let doneReceiving = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (typeof this.totalByteSize !== 'number' || this.totalByteSize === 0) {\n return;\n }\n if (doneReceiving && this.bytesReceived < this.totalByteSize) {\n throw new DataStreamError(\"Not enough chunk(s) received - expected \".concat(this.totalByteSize, \" bytes of data total, only received \").concat(this.bytesReceived, \" bytes\"), DataStreamErrorReason.Incomplete);\n } else if (this.bytesReceived > this.totalByteSize) {\n throw new DataStreamError(\"Extra chunk(s) received - expected \".concat(this.totalByteSize, \" bytes of data total, received \").concat(this.bytesReceived, \" bytes\"), DataStreamErrorReason.LengthExceeded);\n }\n }\n constructor(info, stream, totalByteSize) {\n this.reader = stream;\n this.totalByteSize = totalByteSize;\n this._info = info;\n this.bytesReceived = 0;\n }\n}\nclass ByteStreamReader extends BaseStreamReader {\n handleChunkReceived(chunk) {\n var _a;\n this.bytesReceived += chunk.content.byteLength;\n this.validateBytesReceived();\n const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : undefined;\n (_a = this.onProgress) === null || _a === void 0 ? void 0 : _a.call(this, currentProgress);\n }\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n // Suppress unhandled rejection on reader.closed — errors are\n // already propagated through reader.read() to the consumer.\n reader.closed.catch(() => {});\n const cleanup = () => {\n reader.releaseLock();\n this.signal = undefined;\n };\n return {\n next: () => __awaiter(this, void 0, void 0, function* () {\n try {\n const signal = this.signal;\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n throw signal.reason;\n }\n const result = yield new Promise((resolve, reject) => {\n if (signal) {\n const onAbort = () => reject(signal.reason);\n signal.addEventListener('abort', onAbort, {\n once: true\n });\n reader.read().then(resolve, reject).finally(() => {\n signal.removeEventListener('abort', onAbort);\n });\n } else {\n reader.read().then(resolve, reject);\n }\n });\n if (result.done) {\n this.validateBytesReceived(true);\n return {\n done: true,\n value: undefined\n };\n } else {\n this.handleChunkReceived(result.value);\n return {\n done: false,\n value: result.value.content\n };\n }\n } catch (err) {\n cleanup();\n throw err;\n }\n }),\n // note: `return` runs only for premature exits, see:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#errors_during_iteration\n return() {\n return __awaiter(this, void 0, void 0, function* () {\n cleanup();\n return {\n done: true,\n value: undefined\n };\n });\n }\n };\n }\n /**\n * Injects an AbortSignal, which if aborted, will terminate the currently active\n * stream iteration operation.\n *\n * Note that when using AbortSignal.timeout(...), the timeout applies across\n * the whole iteration operation, not just one individual chunk read.\n */\n withAbortSignal(signal) {\n this.signal = signal;\n return this;\n }\n readAll() {\n return __awaiter(this, arguments, void 0, function () {\n var _this = this;\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return function* () {\n var _a, e_1, _b, _c;\n let chunks = new Set();\n const iterator = opts.signal ? _this.withAbortSignal(opts.signal) : _this;\n try {\n for (var _d = true, iterator_1 = __asyncValues(iterator), iterator_1_1; iterator_1_1 = yield iterator_1.next(), _a = iterator_1_1.done, !_a; _d = true) {\n _c = iterator_1_1.value;\n _d = false;\n const chunk = _c;\n chunks.add(chunk);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (!_d && !_a && (_b = iterator_1.return)) yield _b.call(iterator_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n return Array.from(chunks);\n }();\n });\n }\n}\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nclass TextStreamReader extends BaseStreamReader {\n /**\n * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string\n * that has been received up to the current point in time.\n */\n constructor(info, stream, totalChunkCount) {\n super(info, stream, totalChunkCount);\n this.receivedChunks = new Map();\n }\n handleChunkReceived(chunk) {\n var _a;\n const index = bigIntToNumber(chunk.chunkIndex);\n const previousChunkAtIndex = this.receivedChunks.get(index);\n if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) {\n // we have a newer version already, dropping the old one\n return;\n }\n this.receivedChunks.set(index, chunk);\n this.bytesReceived += chunk.content.byteLength;\n this.validateBytesReceived();\n const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : undefined;\n (_a = this.onProgress) === null || _a === void 0 ? void 0 : _a.call(this, currentProgress);\n }\n /**\n * Async iterator implementation to allow usage of `for await...of` syntax.\n * Yields structured chunks from the stream.\n *\n */\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n // Suppress unhandled rejection on reader.closed — errors are\n // already propagated through reader.read() to the consumer.\n reader.closed.catch(() => {});\n const decoder = new TextDecoder('utf-8', {\n fatal: true\n });\n const signal = this.signal;\n const cleanup = () => {\n reader.releaseLock();\n this.signal = undefined;\n };\n return {\n next: () => __awaiter(this, void 0, void 0, function* () {\n try {\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n throw signal.reason;\n }\n const result = yield new Promise((resolve, reject) => {\n if (signal) {\n const onAbort = () => reject(signal.reason);\n signal.addEventListener('abort', onAbort, {\n once: true\n });\n reader.read().then(resolve, reject).finally(() => {\n signal.removeEventListener('abort', onAbort);\n });\n } else {\n reader.read().then(resolve, reject);\n }\n });\n if (result.done) {\n this.validateBytesReceived(true);\n return {\n done: true,\n value: undefined\n };\n } else {\n this.handleChunkReceived(result.value);\n let decodedResult;\n try {\n decodedResult = decoder.decode(result.value.content);\n } catch (err) {\n throw new DataStreamError(\"Cannot decode datastream chunk \".concat(result.value.chunkIndex, \" as text: \").concat(err), DataStreamErrorReason.DecodeFailed);\n }\n return {\n done: false,\n value: decodedResult\n };\n }\n } catch (err) {\n cleanup();\n throw err;\n }\n }),\n // note: `return` runs only for premature exits, see:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#errors_during_iteration\n return() {\n return __awaiter(this, void 0, void 0, function* () {\n cleanup();\n return {\n done: true,\n value: undefined\n };\n });\n }\n };\n }\n /**\n * Injects an AbortSignal, which if aborted, will terminate the currently active\n * stream iteration operation.\n *\n * Note that when using AbortSignal.timeout(...), the timeout applies across\n * the whole iteration operation, not just one individual chunk read.\n */\n withAbortSignal(signal) {\n this.signal = signal;\n return this;\n }\n readAll() {\n return __awaiter(this, arguments, void 0, function () {\n var _this2 = this;\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return function* () {\n var _a, e_2, _b, _c;\n let finalString = '';\n const iterator = opts.signal ? _this2.withAbortSignal(opts.signal) : _this2;\n try {\n for (var _d = true, iterator_2 = __asyncValues(iterator), iterator_2_1; iterator_2_1 = yield iterator_2.next(), _a = iterator_2_1.done, !_a; _d = true) {\n _c = iterator_2_1.value;\n _d = false;\n const chunk = _c;\n finalString += chunk;\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (!_d && !_a && (_b = iterator_2.return)) yield _b.call(iterator_2);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n return finalString;\n }();\n });\n }\n}class IncomingDataStreamManager {\n constructor() {\n this.log = livekitLogger;\n this.byteStreamControllers = new Map();\n this.textStreamControllers = new Map();\n this.byteStreamHandlers = new Map();\n this.textStreamHandlers = new Map();\n this.isConnected = false;\n this.bufferedPackets = [];\n }\n setConnected(connected) {\n this.isConnected = connected;\n if (connected) {\n this.flushBufferedPackets();\n }\n }\n flushBufferedPackets() {\n const packets = this.bufferedPackets;\n this.bufferedPackets = [];\n for (const _ref of packets) {\n const packet = _ref.packet;\n const encryptionType = _ref.encryptionType;\n this.handleDataStreamPacket(packet, encryptionType);\n }\n }\n registerTextStreamHandler(topic, callback) {\n if (this.textStreamHandlers.has(topic)) {\n throw new DataStreamError(\"A text stream handler for topic \\\"\".concat(topic, \"\\\" has already been set.\"), DataStreamErrorReason.HandlerAlreadyRegistered);\n }\n this.textStreamHandlers.set(topic, callback);\n }\n unregisterTextStreamHandler(topic) {\n this.textStreamHandlers.delete(topic);\n }\n registerByteStreamHandler(topic, callback) {\n if (this.byteStreamHandlers.has(topic)) {\n throw new DataStreamError(\"A byte stream handler for topic \\\"\".concat(topic, \"\\\" has already been set.\"), DataStreamErrorReason.HandlerAlreadyRegistered);\n }\n this.byteStreamHandlers.set(topic, callback);\n }\n unregisterByteStreamHandler(topic) {\n this.byteStreamHandlers.delete(topic);\n }\n clearControllers() {\n this.byteStreamControllers.clear();\n this.textStreamControllers.clear();\n this.bufferedPackets = [];\n }\n validateParticipantHasNoActiveDataStreams(participantIdentity) {\n // Terminate any in flight data stream receives from the given participant\n const textStreamsBeingSentByDisconnectingParticipant = Array.from(this.textStreamControllers.entries()).filter(entry => entry[1].sendingParticipantIdentity === participantIdentity);\n const byteStreamsBeingSentByDisconnectingParticipant = Array.from(this.byteStreamControllers.entries()).filter(entry => entry[1].sendingParticipantIdentity === participantIdentity);\n if (textStreamsBeingSentByDisconnectingParticipant.length > 0 || byteStreamsBeingSentByDisconnectingParticipant.length > 0) {\n const abnormalEndError = new DataStreamError(\"Participant \".concat(participantIdentity, \" unexpectedly disconnected in the middle of sending data\"), DataStreamErrorReason.AbnormalEnd);\n for (const _ref2 of byteStreamsBeingSentByDisconnectingParticipant) {\n var _ref3 = _slicedToArray(_ref2, 2);\n const id = _ref3[0];\n const controller = _ref3[1];\n controller.controller.error(abnormalEndError);\n this.byteStreamControllers.delete(id);\n }\n for (const _ref4 of textStreamsBeingSentByDisconnectingParticipant) {\n var _ref5 = _slicedToArray(_ref4, 2);\n const id = _ref5[0];\n const controller = _ref5[1];\n controller.controller.error(abnormalEndError);\n this.textStreamControllers.delete(id);\n }\n }\n }\n handleDataStreamPacket(packet, encryptionType) {\n if (!this.isConnected) {\n this.bufferedPackets.push({\n packet,\n encryptionType\n });\n return;\n }\n switch (packet.value.case) {\n case 'streamHeader':\n return this.handleStreamHeader(packet.value.value, packet.participantIdentity, encryptionType);\n case 'streamChunk':\n return this.handleStreamChunk(packet.value.value, encryptionType);\n case 'streamTrailer':\n return this.handleStreamTrailer(packet.value.value, encryptionType);\n default:\n throw new Error(\"DataPacket of value \\\"\".concat(packet.value.case, \"\\\" is not data stream related!\"));\n }\n }\n handleStreamHeader(streamHeader, participantIdentity, encryptionType) {\n var _a;\n if (streamHeader.contentHeader.case === 'byteHeader') {\n const streamHandlerCallback = this.byteStreamHandlers.get(streamHeader.topic);\n if (!streamHandlerCallback) {\n this.log.debug('ignoring incoming byte stream due to no handler for topic', streamHeader.topic);\n return;\n }\n let streamController;\n const info = {\n id: streamHeader.streamId,\n name: (_a = streamHeader.contentHeader.value.name) !== null && _a !== void 0 ? _a : 'unknown',\n mimeType: streamHeader.mimeType,\n size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined,\n topic: streamHeader.topic,\n timestamp: bigIntToNumber(streamHeader.timestamp),\n attributes: streamHeader.attributes,\n encryptionType\n };\n const stream = new ReadableStream({\n start: controller => {\n streamController = controller;\n if (this.textStreamControllers.has(streamHeader.streamId)) {\n throw new DataStreamError(\"A data stream read is already in progress for a stream with id \".concat(streamHeader.streamId, \".\"), DataStreamErrorReason.AlreadyOpened);\n }\n this.byteStreamControllers.set(streamHeader.streamId, {\n info,\n controller: streamController,\n startTime: Date.now(),\n sendingParticipantIdentity: participantIdentity\n });\n }\n });\n streamHandlerCallback(new ByteStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength)), {\n identity: participantIdentity\n });\n } else if (streamHeader.contentHeader.case === 'textHeader') {\n const streamHandlerCallback = this.textStreamHandlers.get(streamHeader.topic);\n if (!streamHandlerCallback) {\n this.log.debug('ignoring incoming text stream due to no handler for topic', streamHeader.topic);\n return;\n }\n let streamController;\n const info = {\n id: streamHeader.streamId,\n mimeType: streamHeader.mimeType,\n size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined,\n topic: streamHeader.topic,\n timestamp: Number(streamHeader.timestamp),\n attributes: streamHeader.attributes,\n encryptionType,\n attachedStreamIds: streamHeader.contentHeader.value.attachedStreamIds\n };\n const stream = new ReadableStream({\n start: controller => {\n streamController = controller;\n if (this.textStreamControllers.has(streamHeader.streamId)) {\n throw new DataStreamError(\"A data stream read is already in progress for a stream with id \".concat(streamHeader.streamId, \".\"), DataStreamErrorReason.AlreadyOpened);\n }\n this.textStreamControllers.set(streamHeader.streamId, {\n info,\n controller: streamController,\n startTime: Date.now(),\n sendingParticipantIdentity: participantIdentity\n });\n }\n });\n streamHandlerCallback(new TextStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength)), {\n identity: participantIdentity\n });\n }\n }\n handleStreamChunk(chunk, encryptionType) {\n const fileBuffer = this.byteStreamControllers.get(chunk.streamId);\n if (fileBuffer) {\n if (fileBuffer.info.encryptionType !== encryptionType) {\n fileBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(chunk.streamId, \". Expected \").concat(encryptionType, \", got \").concat(fileBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n this.byteStreamControllers.delete(chunk.streamId);\n } else if (chunk.content.length > 0) {\n fileBuffer.controller.enqueue(chunk);\n }\n }\n const textBuffer = this.textStreamControllers.get(chunk.streamId);\n if (textBuffer) {\n if (textBuffer.info.encryptionType !== encryptionType) {\n textBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(chunk.streamId, \". Expected \").concat(encryptionType, \", got \").concat(textBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n this.textStreamControllers.delete(chunk.streamId);\n } else if (chunk.content.length > 0) {\n textBuffer.controller.enqueue(chunk);\n }\n }\n }\n handleStreamTrailer(trailer, encryptionType) {\n const textBuffer = this.textStreamControllers.get(trailer.streamId);\n if (textBuffer) {\n if (textBuffer.info.encryptionType !== encryptionType) {\n textBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(trailer.streamId, \". Expected \").concat(encryptionType, \", got \").concat(textBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n } else {\n textBuffer.info.attributes = Object.assign(Object.assign({}, textBuffer.info.attributes), trailer.attributes);\n textBuffer.controller.close();\n this.textStreamControllers.delete(trailer.streamId);\n }\n }\n const fileBuffer = this.byteStreamControllers.get(trailer.streamId);\n if (fileBuffer) {\n if (fileBuffer.info.encryptionType !== encryptionType) {\n fileBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(trailer.streamId, \". Expected \").concat(encryptionType, \", got \").concat(fileBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n } else {\n fileBuffer.info.attributes = Object.assign(Object.assign({}, fileBuffer.info.attributes), trailer.attributes);\n fileBuffer.controller.close();\n }\n this.byteStreamControllers.delete(trailer.streamId);\n }\n }\n}class BaseStreamWriter {\n constructor(writableStream, info, onClose) {\n this.writableStream = writableStream;\n this.defaultWriter = writableStream.getWriter();\n this.onClose = onClose;\n this.info = info;\n }\n write(chunk) {\n return this.defaultWriter.write(chunk);\n }\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield this.defaultWriter.close();\n this.defaultWriter.releaseLock();\n (_a = this.onClose) === null || _a === void 0 ? void 0 : _a.call(this);\n });\n }\n}\nclass TextStreamWriter extends BaseStreamWriter {}\nclass ByteStreamWriter extends BaseStreamWriter {}const STREAM_CHUNK_SIZE = 15000;\n/**\n * Manages sending custom user data via data channels.\n * @internal\n */\nclass OutgoingDataStreamManager {\n constructor(engine, log) {\n this.engine = engine;\n this.log = log;\n }\n setupEngine(engine) {\n this.engine = engine;\n }\n /** {@inheritDoc LocalParticipant.sendText} */\n sendText(text, options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const streamId = crypto.randomUUID();\n const textInBytes = new TextEncoder().encode(text);\n const totalTextLength = textInBytes.byteLength;\n const fileIds = (_a = options === null || options === void 0 ? void 0 : options.attachments) === null || _a === void 0 ? void 0 : _a.map(() => crypto.randomUUID());\n const progresses = new Array(fileIds ? fileIds.length + 1 : 1).fill(0);\n const handleProgress = (progress, idx) => {\n var _a;\n progresses[idx] = progress;\n const totalProgress = progresses.reduce((acc, val) => acc + val, 0);\n (_a = options === null || options === void 0 ? void 0 : options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, totalProgress);\n };\n const writer = yield this.streamText({\n streamId,\n totalSize: totalTextLength,\n destinationIdentities: options === null || options === void 0 ? void 0 : options.destinationIdentities,\n topic: options === null || options === void 0 ? void 0 : options.topic,\n attachedStreamIds: fileIds,\n attributes: options === null || options === void 0 ? void 0 : options.attributes\n });\n yield writer.write(text);\n // set text part of progress to 1\n handleProgress(1, 0);\n yield writer.close();\n if ((options === null || options === void 0 ? void 0 : options.attachments) && fileIds) {\n yield Promise.all(options.attachments.map((file, idx) => __awaiter(this, void 0, void 0, function* () {\n return this._sendFile(fileIds[idx], file, {\n topic: options.topic,\n mimeType: file.type,\n onProgress: progress => {\n handleProgress(progress, idx + 1);\n }\n });\n })));\n }\n return writer.info;\n });\n }\n /**\n * @internal\n */\n streamText(options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n const streamId = (_a = options === null || options === void 0 ? void 0 : options.streamId) !== null && _a !== void 0 ? _a : crypto.randomUUID();\n const info = {\n id: streamId,\n mimeType: 'text/plain',\n timestamp: Date.now(),\n topic: (_b = options === null || options === void 0 ? void 0 : options.topic) !== null && _b !== void 0 ? _b : '',\n size: options === null || options === void 0 ? void 0 : options.totalSize,\n attributes: options === null || options === void 0 ? void 0 : options.attributes,\n encryptionType: ((_c = this.engine.e2eeManager) === null || _c === void 0 ? void 0 : _c.isDataChannelEncryptionEnabled) ? Encryption_Type.GCM : Encryption_Type.NONE,\n attachedStreamIds: options === null || options === void 0 ? void 0 : options.attachedStreamIds\n };\n const header = new DataStream_Header({\n streamId,\n mimeType: info.mimeType,\n topic: info.topic,\n timestamp: numberToBigInt(info.timestamp),\n totalLength: numberToBigInt(info.size),\n attributes: info.attributes,\n contentHeader: {\n case: 'textHeader',\n value: new DataStream_TextHeader({\n version: options === null || options === void 0 ? void 0 : options.version,\n attachedStreamIds: info.attachedStreamIds,\n replyToStreamId: options === null || options === void 0 ? void 0 : options.replyToStreamId,\n operationType: (options === null || options === void 0 ? void 0 : options.type) === 'update' ? DataStream_OperationType.UPDATE : DataStream_OperationType.CREATE\n })\n }\n });\n const destinationIdentities = options === null || options === void 0 ? void 0 : options.destinationIdentities;\n const packet = new DataPacket({\n destinationIdentities,\n value: {\n case: 'streamHeader',\n value: header\n }\n });\n yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n let chunkId = 0;\n const engine = this.engine;\n const writableStream = new WritableStream({\n // Implement the sink\n write(text) {\n return __awaiter(this, void 0, void 0, function* () {\n for (const textByteChunk of splitUtf8(text, STREAM_CHUNK_SIZE)) {\n const chunk = new DataStream_Chunk({\n content: textByteChunk,\n streamId,\n chunkIndex: numberToBigInt(chunkId)\n });\n const chunkPacket = new DataPacket({\n destinationIdentities,\n value: {\n case: 'streamChunk',\n value: chunk\n }\n });\n yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE);\n chunkId += 1;\n }\n });\n },\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n const trailer = new DataStream_Trailer({\n streamId\n });\n const trailerPacket = new DataPacket({\n destinationIdentities,\n value: {\n case: 'streamTrailer',\n value: trailer\n }\n });\n yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE);\n });\n },\n abort(err) {\n console.log('Sink error:', err);\n // TODO handle aborts to signal something to receiver side\n }\n });\n let onEngineClose = () => __awaiter(this, void 0, void 0, function* () {\n yield writer.close();\n });\n engine.once(EngineEvent.Closing, onEngineClose);\n const writer = new TextStreamWriter(writableStream, info, () => this.engine.off(EngineEvent.Closing, onEngineClose));\n return writer;\n });\n }\n sendFile(file, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const streamId = crypto.randomUUID();\n yield this._sendFile(streamId, file, options);\n return {\n id: streamId\n };\n });\n }\n _sendFile(streamId, file, options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const writer = yield this.streamBytes({\n streamId,\n totalSize: file.size,\n name: file.name,\n mimeType: (_a = options === null || options === void 0 ? void 0 : options.mimeType) !== null && _a !== void 0 ? _a : file.type,\n topic: options === null || options === void 0 ? void 0 : options.topic,\n destinationIdentities: options === null || options === void 0 ? void 0 : options.destinationIdentities\n });\n const reader = file.stream().getReader();\n while (true) {\n const _yield$reader$read = yield reader.read(),\n done = _yield$reader$read.done,\n value = _yield$reader$read.value;\n if (done) {\n break;\n }\n yield writer.write(value);\n }\n yield writer.close();\n return writer.info;\n });\n }\n streamBytes(options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e;\n const streamId = (_a = options === null || options === void 0 ? void 0 : options.streamId) !== null && _a !== void 0 ? _a : crypto.randomUUID();\n const destinationIdentities = options === null || options === void 0 ? void 0 : options.destinationIdentities;\n const info = {\n id: streamId,\n mimeType: (_b = options === null || options === void 0 ? void 0 : options.mimeType) !== null && _b !== void 0 ? _b : 'application/octet-stream',\n topic: (_c = options === null || options === void 0 ? void 0 : options.topic) !== null && _c !== void 0 ? _c : '',\n timestamp: Date.now(),\n attributes: options === null || options === void 0 ? void 0 : options.attributes,\n size: options === null || options === void 0 ? void 0 : options.totalSize,\n name: (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : 'unknown',\n encryptionType: ((_e = this.engine.e2eeManager) === null || _e === void 0 ? void 0 : _e.isDataChannelEncryptionEnabled) ? Encryption_Type.GCM : Encryption_Type.NONE\n };\n const header = new DataStream_Header({\n totalLength: numberToBigInt(info.size),\n mimeType: info.mimeType,\n streamId,\n topic: info.topic,\n timestamp: numberToBigInt(Date.now()),\n attributes: info.attributes,\n contentHeader: {\n case: 'byteHeader',\n value: new DataStream_ByteHeader({\n name: info.name\n })\n }\n });\n const packet = new DataPacket({\n destinationIdentities,\n value: {\n case: 'streamHeader',\n value: header\n }\n });\n yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n let chunkId = 0;\n const writeMutex = new _();\n const engine = this.engine;\n const logLocal = this.log;\n const writableStream = new WritableStream({\n write(chunk) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield writeMutex.lock();\n let byteOffset = 0;\n try {\n while (byteOffset < chunk.byteLength) {\n const subChunk = chunk.slice(byteOffset, byteOffset + STREAM_CHUNK_SIZE);\n const chunkPacket = new DataPacket({\n destinationIdentities,\n value: {\n case: 'streamChunk',\n value: new DataStream_Chunk({\n content: subChunk,\n streamId,\n chunkIndex: numberToBigInt(chunkId)\n })\n }\n });\n yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE);\n chunkId += 1;\n byteOffset += subChunk.byteLength;\n }\n } finally {\n unlock();\n }\n });\n },\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n const trailer = new DataStream_Trailer({\n streamId\n });\n const trailerPacket = new DataPacket({\n destinationIdentities,\n value: {\n case: 'streamTrailer',\n value: trailer\n }\n });\n yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE);\n });\n },\n abort(err) {\n logLocal.error('Sink error:', err);\n }\n });\n const byteWriter = new ByteStreamWriter(writableStream, info);\n return byteWriter;\n });\n }\n}/**\n * Implementation of AbortSignal.any\n * Creates a signal that will be aborted when any of the given signals is aborted.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any\n */\nfunction abortSignalAny(signals) {\n // Handle empty signals array\n if (signals.length === 0) {\n const controller = new AbortController();\n return controller.signal;\n }\n // Fast path for single signal\n if (signals.length === 1) {\n return signals[0];\n }\n // Check if any signal is already aborted\n for (const signal of signals) {\n if (signal.aborted) {\n return signal;\n }\n }\n // Create a new controller for the combined signal\n const controller = new AbortController();\n const unlisteners = Array(signals.length);\n // Function to clean up all event listeners\n const cleanup = () => {\n for (const unsubscribe of unlisteners) {\n unsubscribe();\n }\n };\n // Add event listeners to each signal\n signals.forEach((signal, index) => {\n const handler = () => {\n controller.abort(signal.reason);\n cleanup();\n };\n signal.addEventListener('abort', handler);\n unlisteners[index] = () => signal.removeEventListener('abort', handler);\n });\n return controller.signal;\n}\n/**\n * Implementation of AbortSignal.timeout\n * Creates a signal that will be aborted after the specified timeout.\n * @link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout\n */\nfunction abortSignalTimeout(ms) {\n const controller = new AbortController();\n setTimeout(() => {\n controller.abort(new DOMException(\"signal timed out after \".concat(ms, \" ms\"), 'TimeoutError'));\n }, ms);\n return controller.signal;\n}// Number type sizes\nconst U8_LENGTH_BYTES = 1;\nconst U16_LENGTH_BYTES = 2;\nconst U32_LENGTH_BYTES = 4;\nconst U64_LENGTH_BYTES = 8;\n/// Constants used for serialization and deserialization.\nconst SUPPORTED_VERSION = 0;\nconst BASE_HEADER_LEN = 12;\n// Bitfield shifts and masks for header flags\nconst VERSION_SHIFT = 5;\nconst VERSION_MASK = 0x07;\nconst FRAME_MARKER_SHIFT = 3;\nconst FRAME_MARKER_MASK = 0x3;\nconst FRAME_MARKER_START = 0x2;\nconst FRAME_MARKER_FINAL = 0x1;\nconst FRAME_MARKER_INTER = 0x0;\nconst FRAME_MARKER_SINGLE = 0x3;\nconst EXT_WORDS_INDICATOR_SIZE = 2;\nconst EXT_FLAG_SHIFT = 0x2;\nconst EXT_FLAG_MASK = 0x1;\nconst EXT_TAG_PADDING = 0;var DataTrackDeserializeErrorReason;\n(function (DataTrackDeserializeErrorReason) {\n DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"TooShort\"] = 0] = \"TooShort\";\n DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"HeaderOverrun\"] = 1] = \"HeaderOverrun\";\n DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"MissingExtWords\"] = 2] = \"MissingExtWords\";\n DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"UnsupportedVersion\"] = 3] = \"UnsupportedVersion\";\n DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"InvalidHandle\"] = 4] = \"InvalidHandle\";\n DataTrackDeserializeErrorReason[DataTrackDeserializeErrorReason[\"MalformedExt\"] = 5] = \"MalformedExt\";\n})(DataTrackDeserializeErrorReason || (DataTrackDeserializeErrorReason = {}));\nclass DataTrackDeserializeError extends LivekitReasonedError {\n constructor(message, reason, options) {\n super(19, message, options);\n this.name = 'DataTrackDeserializeError';\n this.reason = reason;\n this.reasonName = DataTrackDeserializeErrorReason[reason];\n }\n static tooShort() {\n return new DataTrackDeserializeError('Too short to contain a valid header', DataTrackDeserializeErrorReason.TooShort);\n }\n static headerOverrun() {\n return new DataTrackDeserializeError('Header exceeds total packet length', DataTrackDeserializeErrorReason.HeaderOverrun);\n }\n static missingExtWords() {\n return new DataTrackDeserializeError('Extension word indicator is missing', DataTrackDeserializeErrorReason.MissingExtWords);\n }\n static unsupportedVersion(version) {\n return new DataTrackDeserializeError(\"Unsupported version \".concat(version), DataTrackDeserializeErrorReason.UnsupportedVersion);\n }\n static invalidHandle(cause) {\n return new DataTrackDeserializeError(\"invalid track handle: \".concat(cause.message), DataTrackDeserializeErrorReason.InvalidHandle, {\n cause\n });\n }\n static malformedExt(tag) {\n return new DataTrackDeserializeError(\"Extension with tag \".concat(tag, \" is malformed\"), DataTrackDeserializeErrorReason.MalformedExt);\n }\n}\nvar DataTrackSerializeErrorReason;\n(function (DataTrackSerializeErrorReason) {\n DataTrackSerializeErrorReason[DataTrackSerializeErrorReason[\"TooSmallForHeader\"] = 0] = \"TooSmallForHeader\";\n DataTrackSerializeErrorReason[DataTrackSerializeErrorReason[\"TooSmallForPayload\"] = 1] = \"TooSmallForPayload\";\n})(DataTrackSerializeErrorReason || (DataTrackSerializeErrorReason = {}));\nclass DataTrackSerializeError extends LivekitReasonedError {\n constructor(message, reason, options) {\n super(19, message, options);\n this.name = 'DataTrackSerializeError';\n this.reason = reason;\n this.reasonName = DataTrackSerializeErrorReason[reason];\n }\n static tooSmallForHeader() {\n return new DataTrackSerializeError('Buffer cannot fit header', DataTrackSerializeErrorReason.TooSmallForHeader);\n }\n static tooSmallForPayload() {\n return new DataTrackSerializeError('Buffer cannot fit payload', DataTrackSerializeErrorReason.TooSmallForPayload);\n }\n}/** An abstract class implementing common behavior related to data track binary serialization. */\nclass Serializable {\n /** Encodes the instance as binary and returns the data as a Uint8Array. */\n toBinary() {\n const lengthBytes = this.toBinaryLengthBytes();\n const output = new ArrayBuffer(lengthBytes);\n const view = new DataView(output);\n const writtenBytes = this.toBinaryInto(view);\n if (lengthBytes !== writtenBytes) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"\".concat(this.constructor.name, \".toBinary: written bytes (\").concat(writtenBytes, \" bytes) not equal to allocated array buffer length (\").concat(lengthBytes, \" bytes).\"));\n }\n return new Uint8Array(output);\n }\n}var DataTrackExtensionTag;\n(function (DataTrackExtensionTag) {\n DataTrackExtensionTag[DataTrackExtensionTag[\"UserTimestamp\"] = 2] = \"UserTimestamp\";\n DataTrackExtensionTag[DataTrackExtensionTag[\"E2ee\"] = 1] = \"E2ee\";\n})(DataTrackExtensionTag || (DataTrackExtensionTag = {}));\nclass DataTrackExtension extends Serializable {}\nclass DataTrackUserTimestampExtension extends DataTrackExtension {\n constructor(timestamp) {\n super();\n this.timestamp = timestamp;\n }\n toBinaryLengthBytes() {\n return U8_LENGTH_BYTES /* tag */ + U8_LENGTH_BYTES /* length */ + DataTrackUserTimestampExtension.lengthBytes;\n }\n toBinaryInto(dataView) {\n let byteIndex = 0;\n dataView.setUint8(byteIndex, DataTrackUserTimestampExtension.tag);\n byteIndex += U8_LENGTH_BYTES;\n dataView.setUint8(byteIndex, DataTrackUserTimestampExtension.lengthBytes);\n byteIndex += U8_LENGTH_BYTES;\n dataView.setBigUint64(byteIndex, this.timestamp);\n byteIndex += U64_LENGTH_BYTES;\n const totalLengthBytes = this.toBinaryLengthBytes();\n if (byteIndex !== totalLengthBytes) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"DataTrackUserTimestampExtension.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n }\n return byteIndex;\n }\n toJSON() {\n return {\n tag: DataTrackUserTimestampExtension.tag,\n lengthBytes: DataTrackUserTimestampExtension.lengthBytes,\n timestamp: this.timestamp\n };\n }\n}\nDataTrackUserTimestampExtension.tag = DataTrackExtensionTag.UserTimestamp;\nDataTrackUserTimestampExtension.lengthBytes = 8;\nclass DataTrackE2eeExtension extends DataTrackExtension {\n constructor(keyIndex, iv) {\n super();\n this.keyIndex = keyIndex;\n this.iv = iv;\n }\n toBinaryLengthBytes() {\n return U8_LENGTH_BYTES /* tag */ + U8_LENGTH_BYTES /* length */ + DataTrackE2eeExtension.lengthBytes;\n }\n toBinaryInto(dataView) {\n let byteIndex = 0;\n dataView.setUint8(byteIndex, DataTrackE2eeExtension.tag);\n byteIndex += U8_LENGTH_BYTES;\n dataView.setUint8(byteIndex, DataTrackE2eeExtension.lengthBytes);\n byteIndex += U8_LENGTH_BYTES;\n dataView.setUint8(byteIndex, this.keyIndex);\n byteIndex += U8_LENGTH_BYTES;\n for (let i = 0; i < this.iv.length; i += 1) {\n dataView.setUint8(byteIndex, this.iv[i]);\n byteIndex += U8_LENGTH_BYTES;\n }\n const totalLengthBytes = this.toBinaryLengthBytes();\n if (byteIndex !== totalLengthBytes) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"DataTrackE2eeExtension.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n }\n return byteIndex;\n }\n toJSON() {\n return {\n tag: DataTrackE2eeExtension.tag,\n lengthBytes: DataTrackE2eeExtension.lengthBytes,\n keyIndex: this.keyIndex,\n iv: this.iv\n };\n }\n}\nDataTrackE2eeExtension.tag = DataTrackExtensionTag.E2ee;\nDataTrackE2eeExtension.lengthBytes = 13;\nclass DataTrackExtensions extends Serializable {\n constructor() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n super();\n this.userTimestamp = opts.userTimestamp;\n this.e2ee = opts.e2ee;\n }\n toBinaryLengthBytes() {\n let lengthBytes = 0;\n if (this.userTimestamp) {\n lengthBytes += this.userTimestamp.toBinaryLengthBytes();\n }\n if (this.e2ee) {\n lengthBytes += this.e2ee.toBinaryLengthBytes();\n }\n return lengthBytes;\n }\n toBinaryInto(dataView) {\n let byteIndex = 0;\n if (this.e2ee) {\n const e2eeBytes = this.e2ee.toBinaryInto(dataView);\n byteIndex += e2eeBytes;\n }\n if (this.userTimestamp) {\n const userTimestampBytes = this.userTimestamp.toBinaryInto(new DataView(dataView.buffer, dataView.byteOffset + byteIndex));\n byteIndex += userTimestampBytes;\n }\n const totalLengthBytes = this.toBinaryLengthBytes();\n if (byteIndex !== totalLengthBytes) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"DataTrackExtensions.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n }\n return byteIndex;\n }\n static fromBinary(input) {\n const dataView = coerceToDataView(input);\n let userTimestamp;\n let e2ee;\n let byteIndex = 0;\n while (dataView.byteLength - byteIndex >= U8_LENGTH_BYTES + U8_LENGTH_BYTES) {\n const tag = dataView.getUint8(byteIndex);\n byteIndex += U8_LENGTH_BYTES;\n const lengthBytes = dataView.getUint8(byteIndex);\n byteIndex += U8_LENGTH_BYTES;\n if (tag === EXT_TAG_PADDING) {\n // Skip padding\n continue;\n }\n switch (tag) {\n case DataTrackExtensionTag.UserTimestamp:\n if (dataView.byteLength - byteIndex < DataTrackUserTimestampExtension.lengthBytes) {\n throw DataTrackDeserializeError.malformedExt(tag);\n }\n userTimestamp = new DataTrackUserTimestampExtension(dataView.getBigUint64(byteIndex));\n byteIndex += lengthBytes;\n break;\n case DataTrackExtensionTag.E2ee:\n if (dataView.byteLength - byteIndex < DataTrackE2eeExtension.lengthBytes) {\n throw DataTrackDeserializeError.malformedExt(tag);\n }\n const keyIndex = dataView.getUint8(byteIndex);\n const iv = new Uint8Array(12);\n for (let i = 0; i < iv.length; i += 1) {\n let byteIndexForIv = byteIndex;\n byteIndexForIv += U8_LENGTH_BYTES; // key index\n byteIndexForIv += i * U8_LENGTH_BYTES; // Index into iv array\n iv[i] = dataView.getUint8(byteIndexForIv);\n }\n e2ee = new DataTrackE2eeExtension(keyIndex, iv);\n byteIndex += lengthBytes;\n break;\n default:\n // Skip over unknown extensions (forward compatible).\n if (dataView.byteLength - byteIndex < lengthBytes) {\n throw DataTrackDeserializeError.malformedExt(tag);\n }\n byteIndex += lengthBytes;\n break;\n }\n }\n // NOTE: padding bytes after extension data is intentionally not being processed\n return [new DataTrackExtensions({\n userTimestamp,\n e2ee\n }), dataView.byteLength];\n }\n toJSON() {\n var _a, _b, _c, _d;\n return {\n userTimestamp: (_b = (_a = this.userTimestamp) === null || _a === void 0 ? void 0 : _a.toJSON()) !== null && _b !== void 0 ? _b : null,\n e2ee: (_d = (_c = this.e2ee) === null || _c === void 0 ? void 0 : _c.toJSON()) !== null && _d !== void 0 ? _d : null\n };\n }\n}const DataTrackFrameInternal = {\n from(frame) {\n return {\n payload: frame.payload,\n extensions: new DataTrackExtensions({\n userTimestamp: frame.userTimestamp ? new DataTrackUserTimestampExtension(frame.userTimestamp) : undefined\n })\n };\n },\n /** Converts from a DataTrackFrameInternal -> DataTrackFrame. Some internal information is\n * discarded like e2ee encrption extension data. */\n lossyIntoFrame(frame) {\n var _a;\n return {\n payload: frame.payload,\n userTimestamp: (_a = frame.extensions.userTimestamp) === null || _a === void 0 ? void 0 : _a.timestamp\n };\n }\n};const TrackSymbol = Symbol.for('lk.track');\nconst DataTrackSymbol = Symbol.for('lk.data-track');class RemoteDataTrack {\n /** @internal */\n constructor(info, manager, options) {\n this.trackSymbol = TrackSymbol;\n this.isLocal = false;\n this.typeSymbol = DataTrackSymbol;\n this.info = info;\n this.manager = manager;\n this.publisherIdentity = options.publisherIdentity;\n }\n /** Subscribes to the data track to receive frames.\n *\n * # Returns\n *\n * A stream that yields {@link DataTrackFrame}s as they arrive.\n *\n * # Multiple Subscriptions\n *\n * An application may call `subscribe` more than once to process frames in\n * multiple places. For example, one async task might plot values on a graph\n * while another writes them to a file.\n *\n * Internally, only the first call to `subscribe` communicates with the SFU and\n * allocates the resources required to receive frames. Additional subscriptions\n * reuse the same underlying pipeline and do not trigger additional signaling.\n *\n * Note that newly created subscriptions only receive frames published after\n * the initial subscription is established.\n */\n subscribe(options) {\n try {\n const _this$manager$openSub = this.manager.openSubscriptionStream(this.info.sid, options === null || options === void 0 ? void 0 : options.signal, options === null || options === void 0 ? void 0 : options.bufferSize),\n _this$manager$openSub2 = _slicedToArray(_this$manager$openSub, 2),\n stream = _this$manager$openSub2[0],\n sfuSubscriptionComplete = _this$manager$openSub2[1];\n // Prevent uncaught promise rejections from bubbling up if rejections occur after the\n // readable stream is discarded.\n sfuSubscriptionComplete.catch(() => {});\n return stream;\n } catch (err) {\n // NOTE: Rethrow errors to break Throws<...> type boundary\n throw err;\n }\n }\n /** Configure how incoming frames for this track are processed before they are handed out to\n * subscribers (the \"pipeline\"). These options apply to all current and future subscriptions\n * of this track, and may be set at any time. */\n setPipelineOptions(options) {\n this.manager.setPipelineOptions(this.info.sid, options);\n }\n}/** A class for serializing / deserializing data track packet header sections. */\nclass DataTrackPacketHeader extends Serializable {\n constructor(opts) {\n var _a;\n super();\n this.marker = opts.marker;\n this.trackHandle = opts.trackHandle;\n this.sequence = opts.sequence;\n this.frameNumber = opts.frameNumber;\n this.timestamp = opts.timestamp;\n this.extensions = (_a = opts.extensions) !== null && _a !== void 0 ? _a : new DataTrackExtensions();\n }\n extensionsMetrics() {\n const lengthBytes = this.extensions.toBinaryLengthBytes();\n const lengthWords = Math.ceil((EXT_WORDS_INDICATOR_SIZE + lengthBytes) / 4);\n const paddingLengthBytes = lengthWords * 4 - EXT_WORDS_INDICATOR_SIZE - lengthBytes;\n return {\n lengthBytes,\n lengthWords,\n paddingLengthBytes\n };\n }\n toBinaryLengthBytes() {\n const _this$extensionsMetri = this.extensionsMetrics(),\n extLengthBytes = _this$extensionsMetri.lengthBytes,\n extPaddingLengthBytes = _this$extensionsMetri.paddingLengthBytes;\n let totalLengthBytes = BASE_HEADER_LEN;\n if (extLengthBytes > 0) {\n totalLengthBytes += EXT_WORDS_INDICATOR_SIZE + extLengthBytes + extPaddingLengthBytes;\n }\n return totalLengthBytes;\n }\n toBinaryInto(dataView) {\n if (dataView.byteLength < this.toBinaryLengthBytes()) {\n throw DataTrackSerializeError.tooSmallForHeader();\n }\n let initial = SUPPORTED_VERSION << VERSION_SHIFT;\n let marker;\n switch (this.marker) {\n case FrameMarker.Inter:\n marker = FRAME_MARKER_INTER;\n break;\n case FrameMarker.Final:\n marker = FRAME_MARKER_FINAL;\n break;\n case FrameMarker.Start:\n marker = FRAME_MARKER_START;\n break;\n case FrameMarker.Single:\n marker = FRAME_MARKER_SINGLE;\n break;\n }\n initial |= marker << FRAME_MARKER_SHIFT;\n const _this$extensionsMetri2 = this.extensionsMetrics(),\n extensionsLengthBytes = _this$extensionsMetri2.lengthBytes,\n extensionsLengthWords = _this$extensionsMetri2.lengthWords,\n extensionsPaddingLengthBytes = _this$extensionsMetri2.paddingLengthBytes;\n if (extensionsLengthBytes > 0) {\n initial |= 1 << EXT_FLAG_SHIFT;\n }\n let byteIndex = 0;\n dataView.setUint8(byteIndex, initial);\n byteIndex += U8_LENGTH_BYTES;\n dataView.setUint8(byteIndex, 0); // Reserved\n byteIndex += U8_LENGTH_BYTES;\n dataView.setUint16(byteIndex, this.trackHandle);\n byteIndex += U16_LENGTH_BYTES;\n dataView.setUint16(byteIndex, this.sequence.value);\n byteIndex += U16_LENGTH_BYTES;\n dataView.setUint16(byteIndex, this.frameNumber.value);\n byteIndex += U16_LENGTH_BYTES;\n dataView.setUint32(byteIndex, this.timestamp.asTicks());\n byteIndex += U32_LENGTH_BYTES;\n if (extensionsLengthBytes > 0) {\n // NOTE: The protocol is implemented in a way where if the extension bit is set, any\n // deserializer assumes the extensions section is at least one byte long, and the \"length\"\n // field represents the \"number of additional bytes\" long the extensions section is. This is\n // potentially unintuitive so I wanted to call it out.\n const rtpOrientedExtensionLengthWords = extensionsLengthWords - 1;\n dataView.setUint16(byteIndex, rtpOrientedExtensionLengthWords);\n byteIndex += U16_LENGTH_BYTES;\n const extensionBytes = this.extensions.toBinaryInto(new DataView(dataView.buffer, dataView.byteOffset + byteIndex));\n byteIndex += extensionBytes;\n for (let i = 0; i < extensionsPaddingLengthBytes; i += 1) {\n dataView.setUint8(byteIndex, 0);\n byteIndex += U8_LENGTH_BYTES;\n }\n }\n const totalLengthBytes = this.toBinaryLengthBytes();\n if (byteIndex !== totalLengthBytes) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"DataTrackPacketHeader.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n }\n return totalLengthBytes;\n }\n static fromBinary(input) {\n const dataView = coerceToDataView(input);\n if (dataView.byteLength < BASE_HEADER_LEN) {\n throw DataTrackDeserializeError.tooShort();\n }\n let byteIndex = 0;\n const initial = dataView.getUint8(byteIndex);\n byteIndex += U8_LENGTH_BYTES;\n const version = initial >> VERSION_SHIFT & VERSION_MASK;\n if (version > SUPPORTED_VERSION) {\n throw DataTrackDeserializeError.unsupportedVersion(version);\n }\n let marker;\n switch (initial >> FRAME_MARKER_SHIFT & FRAME_MARKER_MASK) {\n case FRAME_MARKER_START:\n marker = FrameMarker.Start;\n break;\n case FRAME_MARKER_FINAL:\n marker = FrameMarker.Final;\n break;\n case FRAME_MARKER_SINGLE:\n marker = FrameMarker.Single;\n break;\n case FRAME_MARKER_INTER:\n default:\n marker = FrameMarker.Inter;\n break;\n }\n const extensionsFlag = (initial >> EXT_FLAG_SHIFT & EXT_FLAG_MASK) > 0;\n byteIndex += U8_LENGTH_BYTES; // Reserved\n let trackHandle;\n try {\n trackHandle = DataTrackHandle.fromNumber(dataView.getUint16(byteIndex));\n } catch (e) {\n if (e instanceof DataTrackHandleError && (e.isReason(DataTrackHandleErrorReason.Reserved) || e.isReason(DataTrackHandleErrorReason.TooLarge))) {\n throw DataTrackDeserializeError.invalidHandle(e);\n } else {\n throw e;\n }\n }\n byteIndex += U16_LENGTH_BYTES;\n const sequence = WrapAroundUnsignedInt.u16(dataView.getUint16(byteIndex));\n byteIndex += U16_LENGTH_BYTES;\n const frameNumber = WrapAroundUnsignedInt.u16(dataView.getUint16(byteIndex));\n byteIndex += U16_LENGTH_BYTES;\n const timestamp = DataTrackTimestamp.fromRtpTicks(dataView.getUint32(byteIndex));\n byteIndex += U32_LENGTH_BYTES;\n let extensions = new DataTrackExtensions();\n if (extensionsFlag) {\n if (dataView.byteLength - byteIndex < U16_LENGTH_BYTES) {\n throw DataTrackDeserializeError.missingExtWords();\n }\n let rtpOrientedExtensionWords = dataView.getUint16(byteIndex);\n byteIndex += U16_LENGTH_BYTES;\n // NOTE: The protocol is implemented in a way where if the extension bit is set, any\n // deserializer assumes the extensions section is at least one byte long, and the \"length\"\n // field represents the \"number of additional bytes\" long the extensions section is. This is\n // potentially unintuitive so I wanted to call it out.\n const extensionWords = rtpOrientedExtensionWords + 1;\n let extensionLengthBytes = 4 * extensionWords - EXT_WORDS_INDICATOR_SIZE;\n if (byteIndex + extensionLengthBytes > dataView.byteLength) {\n throw DataTrackDeserializeError.headerOverrun();\n }\n let extensionDataView = new DataView(dataView.buffer, dataView.byteOffset + byteIndex, extensionLengthBytes);\n const _DataTrackExtensions$ = DataTrackExtensions.fromBinary(extensionDataView),\n _DataTrackExtensions$2 = _slicedToArray(_DataTrackExtensions$, 2),\n result = _DataTrackExtensions$2[0],\n readBytes = _DataTrackExtensions$2[1];\n extensions = result;\n byteIndex += readBytes;\n }\n return [new DataTrackPacketHeader({\n marker,\n trackHandle: trackHandle,\n sequence,\n frameNumber,\n timestamp,\n extensions\n }), byteIndex];\n }\n toJSON() {\n return {\n marker: this.marker,\n trackHandle: this.trackHandle,\n sequence: this.sequence.value,\n frameNumber: this.frameNumber.value,\n timestamp: this.timestamp.asTicks(),\n extensions: this.extensions.toJSON()\n };\n }\n}\n/** Marker indicating a packet's position in relation to a frame. */\nvar FrameMarker;\n(function (FrameMarker) {\n /** Packet is the first in a frame. */\n FrameMarker[FrameMarker[\"Start\"] = 0] = \"Start\";\n /** Packet is within a frame. */\n FrameMarker[FrameMarker[\"Inter\"] = 1] = \"Inter\";\n /** Packet is the last in a frame. */\n FrameMarker[FrameMarker[\"Final\"] = 2] = \"Final\";\n /** Packet is the only one in a frame. */\n FrameMarker[FrameMarker[\"Single\"] = 3] = \"Single\";\n})(FrameMarker || (FrameMarker = {}));\n/** A class for serializing / deserializing data track packets. */\nclass DataTrackPacket extends Serializable {\n constructor(header, payload) {\n super();\n this.header = header;\n this.payload = payload;\n }\n toBinaryLengthBytes() {\n return this.header.toBinaryLengthBytes() + this.payload.byteLength;\n }\n toBinaryInto(dataView) {\n let byteIndex = 0;\n const headerLengthBytes = this.header.toBinaryInto(dataView);\n byteIndex += headerLengthBytes;\n if (dataView.byteLength - byteIndex < this.payload.byteLength) {\n throw DataTrackSerializeError.tooSmallForPayload();\n }\n for (let index = 0; index < this.payload.length; index += 1) {\n dataView.setUint8(byteIndex, this.payload[index]);\n byteIndex += U8_LENGTH_BYTES;\n }\n const totalLengthBytes = this.toBinaryLengthBytes();\n if (byteIndex !== totalLengthBytes) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"DataTrackPacket.toBinaryInto: Wrote \".concat(byteIndex, \" bytes but expected length was \").concat(totalLengthBytes, \" bytes\"));\n }\n return totalLengthBytes;\n }\n static fromBinary(input) {\n const dataView = coerceToDataView(input);\n const _DataTrackPacketHeade = DataTrackPacketHeader.fromBinary(dataView),\n _DataTrackPacketHeade2 = _slicedToArray(_DataTrackPacketHeade, 2),\n header = _DataTrackPacketHeade2[0],\n headerByteLength = _DataTrackPacketHeade2[1];\n const payload = dataView.buffer.slice(dataView.byteOffset + headerByteLength, dataView.byteOffset + dataView.byteLength);\n return [new DataTrackPacket(header, new Uint8Array(payload)), dataView.byteLength];\n }\n toJSON() {\n return {\n header: this.header.toJSON(),\n payload: this.payload\n };\n }\n}const log$3 = getLogger(LoggerNames.DataTracks);\n/** An error indicating a frame was dropped. */\nclass DataTrackDepacketizerDropError extends LivekitReasonedError {\n constructor(message, reason, frameNumber, options) {\n super(19, \"Frame \".concat(frameNumber, \" dropped: \").concat(message), options);\n this.name = 'DataTrackDepacketizerDropError';\n this.reason = reason;\n this.reasonName = DataTrackDepacketizerDropReason[reason];\n this.frameNumber = frameNumber;\n }\n static interrupted(frameNumber, newFrameNumber) {\n return new DataTrackDepacketizerDropError(\"Interrupted by the start of a new frame \".concat(newFrameNumber), DataTrackDepacketizerDropReason.Interrupted, frameNumber);\n }\n static unknownFrame(frameNumber) {\n return new DataTrackDepacketizerDropError('Initial packet was never received.', DataTrackDepacketizerDropReason.UnknownFrame, frameNumber);\n }\n static bufferFull(frameNumber) {\n return new DataTrackDepacketizerDropError('Reorder buffer is full.', DataTrackDepacketizerDropReason.BufferFull, frameNumber);\n }\n static incomplete(frameNumber, receivedPackets, expectedPackets) {\n return new DataTrackDepacketizerDropError(\"Not all packets received before final packet. Received \".concat(receivedPackets, \" packets, expected \").concat(expectedPackets, \" packets.\"), DataTrackDepacketizerDropReason.Incomplete, frameNumber);\n }\n}\n/** Reason why a frame was dropped. */\nvar DataTrackDepacketizerDropReason;\n(function (DataTrackDepacketizerDropReason) {\n DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"Interrupted\"] = 0] = \"Interrupted\";\n DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"UnknownFrame\"] = 1] = \"UnknownFrame\";\n DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"BufferFull\"] = 2] = \"BufferFull\";\n DataTrackDepacketizerDropReason[DataTrackDepacketizerDropReason[\"Incomplete\"] = 3] = \"Incomplete\";\n})(DataTrackDepacketizerDropReason || (DataTrackDepacketizerDropReason = {}));\nclass DataTrackDepacketizer {\n constructor() {\n /** Partial frames currently being assembled, keyed by frame number. `Map` preserves insertion\n * order, so the oldest entry is the first key. */\n this.partials = new Map();\n }\n /** Should be repeatedly called with received {@link DataTrackPacket}s - intermediate calls\n * aggregate the packet's state internally, and return null.\n *\n * Once this method is called with the final packet to form a frame, a new {@link DataTrackFrameInternal}\n * is returned.*/\n push(packet, options) {\n switch (packet.header.marker) {\n case FrameMarker.Single:\n return this.frameFromSingle(packet, options);\n case FrameMarker.Start:\n return this.beginPartial(packet, options);\n case FrameMarker.Inter:\n case FrameMarker.Final:\n return this.pushToPartial(packet);\n }\n }\n reset() {\n this.partials.clear();\n }\n peekOldestPartialFrameNumber() {\n const first = this.partials.keys().next();\n return first.done ? null : first.value;\n }\n frameFromSingle(packet, options) {\n var _a;\n if (packet.header.marker !== FrameMarker.Single) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"Depacketizer.frameFromSingle: packet.header.marker was not FrameMarker.Single, found \".concat(packet.header.marker, \".\"));\n }\n // A `Single` packet is a self-contained frame and doesn't reserve a partials slot, but if\n // the partials map is at capacity, treat it as a signal that the oldest in-flight partial\n // is stale and evict it (matches `main`'s behavior when `maxPartialFrames`\n // defaults to 1).\n const maxPartialFrames = (_a = options === null || options === void 0 ? void 0 : options.maxPartialFrames) !== null && _a !== void 0 ? _a : 1;\n if (this.partials.size >= maxPartialFrames) {\n const oldestPartialFrameNumber = this.peekOldestPartialFrameNumber();\n if (typeof oldestPartialFrameNumber !== 'number') {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"Depacketizer.frameFromSingle: no oldest frame number found, but partials.size is \".concat(this.partials.size, \".\"));\n }\n this.partials.delete(oldestPartialFrameNumber);\n if (options === null || options === void 0 ? void 0 : options.throwOnInterruption) {\n throw DataTrackDepacketizerDropError.interrupted(oldestPartialFrameNumber, packet.header.frameNumber.value);\n }\n log$3.warn(\"Data track frame \".concat(oldestPartialFrameNumber, \" was interrupted by single-packet frame \").concat(packet.header.frameNumber.value, \", dropping.\"));\n }\n return {\n payload: packet.payload,\n extensions: packet.header.extensions\n };\n }\n /** Begin assembling a new packet. */\n beginPartial(packet, options) {\n var _a;\n if (packet.header.marker !== FrameMarker.Start) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"Depacketizer.beginPartial: packet.header.marker was not FrameMarker.Start, found \".concat(packet.header.marker, \".\"));\n }\n const startSequence = packet.header.sequence;\n const frameNumber = packet.header.frameNumber.value;\n const partial = {\n startSequence,\n extensions: packet.header.extensions,\n payloads: new Map([[startSequence.value, packet.payload]])\n };\n // Loop in case `maxPartialFrames` shrunk relative to a previous push call - evict the\n // oldest partials until there is room for the new one. With `throwOnInterruption` set the\n // throw inside the loop short-circuits on the first eviction, matching the single-eviction\n // behavior callers expect when they ask to be told about interruptions.\n const maxPartialFrames = (_a = options === null || options === void 0 ? void 0 : options.maxPartialFrames) !== null && _a !== void 0 ? _a : 1;\n while (this.partials.size >= maxPartialFrames) {\n const oldestPartialFrameNumber = this.peekOldestPartialFrameNumber();\n if (typeof oldestPartialFrameNumber !== 'number') {\n // partials map is empty - nothing more to evict\n break;\n }\n this.partials.delete(oldestPartialFrameNumber);\n if (options === null || options === void 0 ? void 0 : options.throwOnInterruption) {\n throw DataTrackDepacketizerDropError.interrupted(oldestPartialFrameNumber, frameNumber);\n }\n log$3.warn(\"Data track partials full (max \".concat(maxPartialFrames, \"), evicted oldest frame \").concat(oldestPartialFrameNumber, \" to make room for new frame \").concat(frameNumber, \".\"));\n }\n this.partials.set(frameNumber, partial);\n return null;\n }\n /** Push to the existing partial frame. */\n pushToPartial(packet) {\n if (packet.header.marker !== FrameMarker.Inter && packet.header.marker !== FrameMarker.Final) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"Depacketizer.pushToPartial: packet.header.marker was not FrameMarker.Inter or FrameMarker.Final, found \".concat(packet.header.marker, \".\"));\n }\n const packetFrameNumber = packet.header.frameNumber.value;\n const matchingPartial = this.partials.get(packetFrameNumber);\n if (!matchingPartial) {\n this.partials.delete(packetFrameNumber);\n throw DataTrackDepacketizerDropError.unknownFrame(packetFrameNumber);\n }\n // NOTE: this check will block reprocessing packets with duplicate sequence values if the\n // buffer is full already, which could maybe be problematic for very large frames.\n if (matchingPartial.payloads.size >= DataTrackDepacketizer.MAX_BUFFER_PACKETS) {\n this.partials.delete(packetFrameNumber);\n throw DataTrackDepacketizerDropError.bufferFull(packetFrameNumber);\n }\n // Note: receiving a packet with a duplicate `sequence` value is something that likely won't\n // happen in actual use, but even if it does (maybe a low level network retransmission?) the\n // last packet with a given sequence received should always win.\n if (matchingPartial.payloads.has(packet.header.sequence.value)) {\n log$3.warn(\"Data track frame \".concat(packetFrameNumber, \" received duplicate packet for sequence \").concat(packet.header.sequence.value, \", so replacing with newly received packet.\"));\n }\n matchingPartial.payloads.set(packet.header.sequence.value, packet.payload);\n if (packet.header.marker === FrameMarker.Final) {\n return this.finalize(packetFrameNumber, matchingPartial, packet.header.sequence.value);\n }\n return null;\n }\n /** Try to reassemble the complete frame. */\n finalize(partialFrameNumber, partial, endSequence) {\n const received = partial.payloads.size;\n let payloadLengthBytes = 0;\n for (const p of partial.payloads.values()) {\n payloadLengthBytes += p.length;\n }\n const payload = new Uint8Array(payloadLengthBytes);\n let sequencePointer = partial.startSequence.clone();\n let payloadOffsetPointerBytes = 0;\n while (true) {\n const partialPayload = partial.payloads.get(sequencePointer.value);\n if (!partialPayload) {\n break;\n }\n partial.payloads.delete(sequencePointer.value);\n const payloadRemainingBytes = payload.length - payloadOffsetPointerBytes;\n if (partialPayload.length > payloadRemainingBytes) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"Depacketizer.finalize: Expected at least \".concat(partialPayload.length, \" more bytes left in the payload buffer, only got \").concat(payloadRemainingBytes, \" bytes.\"));\n }\n payload.set(partialPayload, payloadOffsetPointerBytes);\n payloadOffsetPointerBytes += partialPayload.length;\n // NOTE: sequencePointer could wrap around, which is why this isn't a \"<\"\n if (sequencePointer.value != endSequence) {\n sequencePointer.increment();\n continue;\n }\n // The packet is done processing, reset the state so another frame can be processed next.\n this.partials.delete(partialFrameNumber);\n return {\n payload,\n extensions: partial.extensions\n };\n }\n this.partials.delete(partialFrameNumber);\n throw DataTrackDepacketizerDropError.incomplete(partialFrameNumber, received, endSequence - partial.startSequence.value + 1);\n }\n}\n/** Maximum number of packets to buffer per frame before dropping. */\nDataTrackDepacketizer.MAX_BUFFER_PACKETS = 128;var DataTrackSubscribeErrorReason;\n(function (DataTrackSubscribeErrorReason) {\n /** The track has been unpublished and is no longer available */\n DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Unpublished\"] = 0] = \"Unpublished\";\n /** Request to subscribe to data track timed-out */\n DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Timeout\"] = 1] = \"Timeout\";\n /** Cannot subscribe to data track when disconnected */\n DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Disconnected\"] = 2] = \"Disconnected\";\n /** Subscription to data track cancelled by caller */\n DataTrackSubscribeErrorReason[DataTrackSubscribeErrorReason[\"Cancelled\"] = 4] = \"Cancelled\";\n})(DataTrackSubscribeErrorReason || (DataTrackSubscribeErrorReason = {}));\nclass DataTrackSubscribeError extends LivekitReasonedError {\n constructor(message, reason, options) {\n super(22, message, options);\n this.name = 'DataTrackSubscribeError';\n this.reason = reason;\n this.reasonName = DataTrackSubscribeErrorReason[reason];\n }\n static unpublished() {\n return new DataTrackSubscribeError('The track has been unpublished and is no longer available', DataTrackSubscribeErrorReason.Unpublished);\n }\n static timeout() {\n return new DataTrackSubscribeError('Request to subscribe to data track timed-out', DataTrackSubscribeErrorReason.Timeout);\n }\n static disconnected() {\n return new DataTrackSubscribeError('Cannot subscribe to data track when disconnected', DataTrackSubscribeErrorReason.Disconnected);\n }\n // NOTE: this was introduced by web / there isn't a corresponding case in the rust version.\n static cancelled() {\n return new DataTrackSubscribeError('Subscription to data track cancelled by caller', DataTrackSubscribeErrorReason.Cancelled);\n }\n}const log$2 = getLogger(LoggerNames.DataTracks);\n/**\n * Pipeline for an individual data track subscription.\n */\nclass IncomingDataTrackPipeline {\n /**\n * Creates a new pipeline with the given options.\n */\n constructor(options) {\n var _a, _b;\n const hasProvider = options.e2eeManager !== null;\n if (options.info.usesE2ee !== hasProvider) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error('IncomingDataTrackPipeline: DataTrackInfo.usesE2ee must match presence of decryptionProvider');\n }\n const depacketizer = new DataTrackDepacketizer();\n this.publisherIdentity = options.publisherIdentity;\n this.e2eeManager = (_a = options.e2eeManager) !== null && _a !== void 0 ? _a : null;\n this.depacketizer = depacketizer;\n this.options = (_b = options.pipelineOptions) !== null && _b !== void 0 ? _b : {};\n }\n updateE2eeManager(e2eeManager) {\n this.e2eeManager = e2eeManager;\n }\n setOptions(options) {\n this.options = options;\n }\n processPacket(packet) {\n return __awaiter(this, void 0, void 0, function* () {\n const frame = this.depacketize(packet);\n if (!frame) {\n return null;\n }\n const decrypted = yield this.decryptIfNeeded(frame);\n if (!decrypted) {\n return null;\n }\n return decrypted;\n });\n }\n /**\n * Depacketize the given frame, log if a drop occurs.\n */\n depacketize(packet) {\n let frame;\n try {\n frame = this.depacketizer.push(packet, {\n throwOnInterruption: false,\n maxPartialFrames: this.options.maxPartialFrames\n });\n } catch (err) {\n // In a future version, use this to maintain drop statistics.\n // FIXME: is this a good idea?\n log$2.warn(\"Data frame depacketize error: \".concat(err));\n return null;\n }\n return frame;\n }\n /**\n * Decrypt the frame's payload if E2EE is enabled for this track.\n */\n decryptIfNeeded(frame) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n const e2eeManager = this.e2eeManager;\n if (!e2eeManager) {\n return frame;\n }\n const e2ee = (_b = (_a = frame.extensions) === null || _a === void 0 ? void 0 : _a.e2ee) !== null && _b !== void 0 ? _b : null;\n if (!e2ee) {\n log$2.error('Missing E2EE meta');\n return null;\n }\n let result;\n try {\n result = yield e2eeManager.handleEncryptedData(frame.payload, e2ee.iv, this.publisherIdentity, e2ee.keyIndex);\n } catch (err) {\n log$2.error(\"Error decrypting packet: \".concat(err));\n return null;\n }\n frame.payload = result.payload;\n return frame;\n });\n }\n}const log$1 = getLogger(LoggerNames.DataTracks);\n/** How long to wait when attempting to subscribe before timing out. */\nconst SUBSCRIBE_TIMEOUT_MILLISECONDS = 10000;\n/** Maximum number of {@link DataTrackFrame}s that are cached for each ReadableStream subscription.\n * If data comes in too fast and saturates this threshold, backpressure will be applied. */\nconst READABLE_STREAM_DEFAULT_BUFFER_SIZE = 16;\nclass IncomingDataTrackManager extends eventsExports.EventEmitter {\n constructor(options) {\n var _a;\n super();\n /** Mapping between track SID and descriptor. */\n this.descriptors = new Map();\n /** Mapping between subscriber handle and track SID.\n *\n * This is an index that allows track descriptors to be looked up\n * by subscriber handle in O(1) time, to make routing incoming packets\n * (a hot code path) faster.\n */\n this.subscriptionHandles = new Map();\n this.e2eeManager = (_a = options === null || options === void 0 ? void 0 : options.e2eeManager) !== null && _a !== void 0 ? _a : null;\n }\n /** @internal */\n updateE2eeManager(e2eeManager) {\n this.e2eeManager = e2eeManager;\n // Propegate downwards to all pre-existing pipelines\n for (const descriptor of this.descriptors.values()) {\n if (descriptor.subscription.type === 'active') {\n descriptor.subscription.pipeline.updateE2eeManager(e2eeManager);\n }\n }\n }\n /** @internal */\n setPipelineOptions(sid, options) {\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n log$1.warn(\"Unknown track \".concat(sid, \", cannot set pipeline options.\"));\n return;\n }\n descriptor.pipelineOptions = options;\n if (descriptor.subscription.type === 'active') {\n descriptor.subscription.pipeline.setOptions(options);\n }\n }\n /** Allocates a ReadableStream which emits when a new {@link DataTrackFrame} is received from the\n * SFU. The SFU subscription is initiated lazily when the stream is created.\n *\n * @returns A tuple of the ReadableStream and a Promise that resolves once the SFU subscription\n * is fully established / the stream is ready to receive frames.\n *\n * @internal\n **/\n openSubscriptionStream(sid, signal) {\n let bufferSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : READABLE_STREAM_DEFAULT_BUFFER_SIZE;\n let streamController = null;\n const sfuSubscriptionComplete = new Future();\n const detachSignal = () => {\n signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', onAbort);\n };\n const cleanup = () => {\n detachSignal();\n if (!streamController) {\n log$1.warn(\"ReadableStream subscribed to \".concat(sid, \" was not started.\"));\n return;\n }\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n log$1.warn(\"Unknown track \".concat(sid, \", skipping cancel...\"));\n return;\n }\n if (descriptor.subscription.type !== 'active') {\n log$1.warn(\"Subscription for track \".concat(sid, \" is not active, skipping cancel...\"));\n return;\n }\n descriptor.subscription.streamControllers.delete(streamController);\n // If no active stream controllers are left, also unsubscribe on the SFU end.\n if (descriptor.subscription.streamControllers.size === 0) {\n this.unSubscribeRequest(descriptor.info.sid);\n }\n };\n const onAbort = () => {\n var _a;\n if (!streamController) {\n return;\n }\n const currentDescriptor = this.descriptors.get(sid);\n if ((currentDescriptor === null || currentDescriptor === void 0 ? void 0 : currentDescriptor.subscription.type) === 'active') {\n currentDescriptor.subscription.streamControllers.delete(streamController);\n }\n streamController.error(DataTrackSubscribeError.cancelled());\n (_a = sfuSubscriptionComplete.reject) === null || _a === void 0 ? void 0 : _a.call(sfuSubscriptionComplete, DataTrackSubscribeError.cancelled());\n cleanup();\n };\n const stream = new ReadableStream({\n start: controller => {\n streamController = controller;\n this.subscribeRequest(sid, signal).then(() => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n log$1.error(\"Unknown track \".concat(sid));\n const err = DataTrackSubscribeError.disconnected();\n controller.error(err);\n (_a = sfuSubscriptionComplete.reject) === null || _a === void 0 ? void 0 : _a.call(sfuSubscriptionComplete, err);\n return;\n }\n if (descriptor.subscription.type !== 'active') {\n log$1.error(\"Subscription for track \".concat(sid, \" is not active\"));\n const err = DataTrackSubscribeError.disconnected();\n controller.error(err);\n (_b = sfuSubscriptionComplete.reject) === null || _b === void 0 ? void 0 : _b.call(sfuSubscriptionComplete, err);\n return;\n }\n // Attach the abort signal, aborting immediately if the abort signal was fired while\n // subscribeRequest was in flight.\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n onAbort();\n return;\n }\n signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', onAbort);\n descriptor.subscription.streamControllers.set(controller, detachSignal);\n (_c = sfuSubscriptionComplete.resolve) === null || _c === void 0 ? void 0 : _c.call(sfuSubscriptionComplete);\n })).catch(err => {\n var _a;\n // subscribeRequest rejected (cancelled, timed out, disconnected). The signal\n // listener was never attached in this path, so nothing to detach.\n controller.error(err);\n (_a = sfuSubscriptionComplete.reject) === null || _a === void 0 ? void 0 : _a.call(sfuSubscriptionComplete, err);\n });\n },\n cancel: () => {\n cleanup();\n }\n }, new CountQueuingStrategy({\n highWaterMark: bufferSize\n }));\n return [stream, sfuSubscriptionComplete.promise];\n }\n /** Client requested to subscribe to a data track.\n *\n * This is sent when the user calls {@link RemoteDataTrack.subscribe}.\n *\n * Only the first request to subscribe to a given track incurs meaningful overhead; subsequent\n * requests simply attach an additional receiver to the broadcast channel, allowing them to consume\n * frames from the existing subscription pipeline.\n */\n subscribeRequest(sid, signal) {\n return __awaiter(this, void 0, void 0, function* () {\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error('Cannot subscribe to unknown track');\n }\n const waitForCompletionFuture = (currentDescriptor, userProvidedSignal, timeoutSignal) => __awaiter(this, void 0, void 0, function* () {\n if (currentDescriptor.subscription.type === 'active') {\n // Subscription has already become active! So bail out early, there is nothing to wait for.\n return;\n }\n if (currentDescriptor.subscription.type !== 'pending') {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error(\"Descriptor for track \".concat(sid, \" is not pending, found \").concat(currentDescriptor.subscription.type));\n }\n const combinedSignal = abortSignalAny([userProvidedSignal, timeoutSignal].filter(s => typeof s !== 'undefined'));\n const proxiedCompletionFuture = new Future();\n currentDescriptor.subscription.completionFuture.promise.then(() => {\n var _a;\n return (_a = proxiedCompletionFuture.resolve) === null || _a === void 0 ? void 0 : _a.call(proxiedCompletionFuture);\n }).catch(err => {\n var _a;\n return (_a = proxiedCompletionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(proxiedCompletionFuture, err);\n });\n const onAbort = () => {\n var _a;\n if (currentDescriptor.subscription.type !== 'pending') {\n return;\n }\n currentDescriptor.subscription.pendingRequestCount -= 1;\n if (timeoutSignal === null || timeoutSignal === void 0 ? void 0 : timeoutSignal.aborted) {\n // A timeout should apply to the underlying SFU subscription and cancel all user\n // subscriptions.\n currentDescriptor.subscription.cancel();\n return;\n }\n if (currentDescriptor.subscription.pendingRequestCount <= 0) {\n // No user subscriptions are still pending, so cancel the underlying pending `sfuUpdateSubscription`\n currentDescriptor.subscription.cancel();\n return;\n }\n // Other subscriptions are still pending for this data track, so just cancel this one\n // active user subscription, and leave the rest of the user subscriptions alone.\n (_a = proxiedCompletionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(proxiedCompletionFuture, DataTrackSubscribeError.cancelled());\n };\n if (combinedSignal.aborted) {\n onAbort();\n }\n combinedSignal.addEventListener('abort', onAbort);\n yield proxiedCompletionFuture.promise;\n combinedSignal.removeEventListener('abort', onAbort);\n });\n switch (descriptor.subscription.type) {\n case 'none':\n {\n descriptor.subscription = {\n type: 'pending',\n completionFuture: new Future(),\n pendingRequestCount: 1,\n cancel: () => {\n var _a, _b;\n const previousDescriptorSubscription = descriptor.subscription;\n descriptor.subscription = {\n type: 'none'\n };\n // Let the SFU know that the subscribe has been cancelled\n this.emit('sfuUpdateSubscription', {\n sid,\n subscribe: false\n });\n if (previousDescriptorSubscription.type === 'pending') {\n (_b = (_a = previousDescriptorSubscription.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, timeoutSignal.aborted ? DataTrackSubscribeError.timeout() :\n // NOTE: the below cancelled case was introduced by web / there isn't a corresponding case in the rust version.\n DataTrackSubscribeError.cancelled());\n }\n }\n };\n this.emit('sfuUpdateSubscription', {\n sid,\n subscribe: true\n });\n const timeoutSignal = abortSignalTimeout(SUBSCRIBE_TIMEOUT_MILLISECONDS);\n // Wait for the subscription to complete, or time out if it takes too long\n yield waitForCompletionFuture(descriptor, signal, timeoutSignal);\n return;\n }\n case 'pending':\n {\n descriptor.subscription.pendingRequestCount += 1;\n // Wait for the subscription to complete\n yield waitForCompletionFuture(descriptor, signal);\n return;\n }\n case 'active':\n {\n return;\n }\n }\n });\n }\n /**\n * Get information about all currently subscribed tracks.\n * @internal */\n querySubscribed() {\n return __awaiter(this, void 0, void 0, function* () {\n const descriptorInfos = Array.from(this.descriptors.values()).filter(descriptor => descriptor.subscription.type === 'active').map(descriptor => [descriptor.info, descriptor.publisherIdentity]);\n return descriptorInfos;\n });\n }\n /** Client requested to unsubscribe from a data track. */\n unSubscribeRequest(sid) {\n var _a;\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n // FIXME: rust implementation returns here, not throws\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error('Cannot subscribe to unknown track');\n }\n if (descriptor.subscription.type !== 'active') {\n log$1.warn(\"Unexpected descriptor state in unSubscribeRequest, expected active, found \".concat((_a = descriptor.subscription) === null || _a === void 0 ? void 0 : _a.type));\n return;\n }\n this.closeStreamControllers(descriptor.subscription.streamControllers, sid);\n // FIXME: this might be wrong? Shouldn't this only occur if it is the last subscription to\n // terminate?\n const previousDescriptorSubscription = descriptor.subscription;\n descriptor.subscription = {\n type: 'none'\n };\n this.subscriptionHandles.delete(previousDescriptorSubscription.subcriptionHandle);\n this.emit('sfuUpdateSubscription', {\n sid,\n subscribe: false\n });\n }\n /** Detach abort-signal listeners and close all downstream stream controllers for an active\n * subscription. Used when the subscription is being torn down by the manager (unsubscribe,\n * unpublish, or shutdown). */\n closeStreamControllers(streamControllers, sid) {\n for (const _ref of streamControllers) {\n var _ref2 = _slicedToArray(_ref, 2);\n const controller = _ref2[0];\n const detachSignal = _ref2[1];\n // Detach before close so we don't leak a listener on the user's AbortSignal.\n detachSignal();\n try {\n controller.close();\n } catch (err) {\n // Defensive: if the controller has already been errored (e.g. by a racing abort whose\n // listener removed itself before we got here), close() throws. There's nothing\n // meaningful to do other than log — the stream is already terminal.\n log$1.warn(\"Failed to close readable stream for track \".concat(sid, \": \").concat(err));\n }\n }\n }\n /** SFU notification that track publications have changed.\n *\n * This event is produced from both {@link JoinResponse} and {@link ParticipantUpdate}\n * to provide a complete view of remote participants' track publications:\n *\n * - From a `JoinResponse`, it captures the initial set of tracks published when a participant joins.\n * - From a `ParticipantUpdate`, it captures subsequent changes (i.e., new tracks being\n * published and existing tracks unpublished).\n */\n receiveSfuPublicationUpdates(updates) {\n return __awaiter(this, void 0, void 0, function* () {\n if (updates.size === 0) {\n return;\n }\n // Detect published track\n const publisherParticipantToSidsInUpdate = new Map();\n for (const _ref3 of updates.entries()) {\n var _ref4 = _slicedToArray(_ref3, 2);\n const publisherIdentity = _ref4[0];\n const infos = _ref4[1];\n const sidsInUpdate = new Set();\n for (const info of infos) {\n sidsInUpdate.add(info.sid);\n if (this.descriptors.has(info.sid)) {\n continue;\n }\n yield this.handleTrackPublished(publisherIdentity, info);\n }\n publisherParticipantToSidsInUpdate.set(publisherIdentity, sidsInUpdate);\n }\n // Detect unpublished tracks\n for (const _ref5 of publisherParticipantToSidsInUpdate.entries()) {\n var _ref6 = _slicedToArray(_ref5, 2);\n const publisherIdentity = _ref6[0];\n const sidsInUpdate = _ref6[1];\n const descriptorsForPublisher = Array.from(this.descriptors.entries()).filter(_ref7 => {\n let _ref8 = _slicedToArray(_ref7, 2);\n _ref8[0];\n let descriptor = _ref8[1];\n return descriptor.publisherIdentity === publisherIdentity;\n }).map(_ref9 => {\n let _ref0 = _slicedToArray(_ref9, 1),\n sid = _ref0[0];\n return sid;\n });\n let unpublishedSids = descriptorsForPublisher.filter(sid => !sidsInUpdate.has(sid));\n for (const sid of unpublishedSids) {\n this.handleTrackUnpublished(sid);\n }\n }\n });\n }\n /**\n * Get information about all currently remotely published tracks which could be subscribed to.\n * @internal */\n queryPublications() {\n return __awaiter(this, void 0, void 0, function* () {\n return Array.from(this.descriptors.values()).map(descriptor => descriptor.info);\n });\n }\n handleTrackPublished(publisherIdentity, info) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.descriptors.has(info.sid)) {\n log$1.error(\"Existing descriptor for track \".concat(info.sid));\n return;\n }\n let descriptor = {\n info,\n publisherIdentity,\n subscription: {\n type: 'none'\n },\n pipelineOptions: {}\n };\n this.descriptors.set(descriptor.info.sid, descriptor);\n const track = new RemoteDataTrack(descriptor.info, this, {\n publisherIdentity\n });\n this.emit('trackPublished', {\n track\n });\n });\n }\n handleTrackUnpublished(sid) {\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n log$1.error(\"Unknown track \".concat(sid));\n return;\n }\n this.descriptors.delete(sid);\n if (descriptor.subscription.type === 'active') {\n this.closeStreamControllers(descriptor.subscription.streamControllers, sid);\n this.subscriptionHandles.delete(descriptor.subscription.subcriptionHandle);\n }\n this.emit('trackUnpublished', {\n sid,\n publisherIdentity: descriptor.publisherIdentity\n });\n }\n /** SFU notification that handles have been assigned for requested subscriptions. */\n receivedSfuSubscriberHandles(\n /** Mapping between track handles attached to incoming packets to the\n * track SIDs they belong to. */\n mapping) {\n for (const _ref1 of mapping.entries()) {\n var _ref10 = _slicedToArray(_ref1, 2);\n const handle = _ref10[0];\n const sid = _ref10[1];\n this.registerSubscriberHandle(handle, sid);\n }\n }\n registerSubscriberHandle(assignedHandle, sid) {\n var _a, _b;\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n log$1.error(\"Unknown track \".concat(sid));\n return;\n }\n switch (descriptor.subscription.type) {\n case 'none':\n {\n // Handle assigned when there is no pending or active subscription is unexpected.\n log$1.warn(\"No subscription for \".concat(sid));\n return;\n }\n case 'active':\n {\n // Update handle for an active subscription. This can occur following a full reconnect.\n descriptor.subscription.subcriptionHandle = assignedHandle;\n this.subscriptionHandles.set(assignedHandle, sid);\n return;\n }\n case 'pending':\n {\n const pipeline = new IncomingDataTrackPipeline({\n info: descriptor.info,\n publisherIdentity: descriptor.publisherIdentity,\n e2eeManager: this.e2eeManager,\n pipelineOptions: descriptor.pipelineOptions\n });\n const previousDescriptorSubscription = descriptor.subscription;\n descriptor.subscription = {\n type: 'active',\n subcriptionHandle: assignedHandle,\n pipeline,\n streamControllers: new Map()\n };\n this.subscriptionHandles.set(assignedHandle, sid);\n (_b = (_a = previousDescriptorSubscription.completionFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n }\n }\n /** Packet has been received over the transport. */\n packetReceived(bytes) {\n return __awaiter(this, void 0, void 0, function* () {\n let packet;\n try {\n var _DataTrackPacket$from = DataTrackPacket.fromBinary(bytes);\n var _DataTrackPacket$from2 = _slicedToArray(_DataTrackPacket$from, 1);\n packet = _DataTrackPacket$from2[0];\n } catch (err) {\n log$1.error(\"Failed to deserialize packet: \".concat(err));\n return;\n }\n const sid = this.subscriptionHandles.get(packet.header.trackHandle);\n if (!sid) {\n log$1.warn(\"Unknown subscriber handle \".concat(packet.header.trackHandle));\n return;\n }\n const descriptor = this.descriptors.get(sid);\n if (!descriptor) {\n log$1.error(\"Missing descriptor for track \".concat(sid));\n return;\n }\n if (descriptor.subscription.type !== 'active') {\n log$1.warn(\"Received packet for track \".concat(sid, \" without active subscription\"));\n return;\n }\n const internalFrame = yield descriptor.subscription.pipeline.processPacket(packet);\n if (!internalFrame) {\n // Not all packets have been received yet to form a complete frame\n return;\n }\n // Broadcast to all downstream subscribers\n for (const controller of descriptor.subscription.streamControllers.keys()) {\n if (controller.desiredSize !== null && controller.desiredSize <= 0) {\n log$1.warn(\"Cannot send frame to subscribers: readable stream is full (desiredSize is \".concat(controller.desiredSize, \"). To increase this threshold, set a higher 'options.highWaterMark' when calling .subscribe().\"));\n continue;\n }\n const frame = DataTrackFrameInternal.lossyIntoFrame(internalFrame);\n controller.enqueue(frame);\n }\n });\n }\n /** Resend all subscription updates.\n *\n * This must be sent after a full reconnect to ensure the SFU knows which\n * tracks are subscribed to locally.\n */\n resendSubscriptionUpdates() {\n for (const _ref11 of this.descriptors) {\n var _ref12 = _slicedToArray(_ref11, 2);\n const sid = _ref12[0];\n const descriptor = _ref12[1];\n if (descriptor.subscription.type === 'none') {\n continue;\n }\n this.emit('sfuUpdateSubscription', {\n sid,\n subscribe: true\n });\n }\n }\n /** Called when a remote participant is disconnected so that any pending data tracks can be\n * cancelled. */\n handleRemoteParticipantDisconnected(remoteParticipantIdentity) {\n var _a, _b;\n for (const descriptor of this.descriptors.values()) {\n if (descriptor.publisherIdentity !== remoteParticipantIdentity) {\n continue;\n }\n switch (descriptor.subscription.type) {\n case 'none':\n break;\n case 'pending':\n (_b = (_a = descriptor.subscription.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackSubscribeError.disconnected());\n break;\n case 'active':\n this.unSubscribeRequest(descriptor.info.sid);\n break;\n }\n }\n }\n /** Resets the manager, ending any subscriptions, and getting it ready for the next room\n * connection. */\n reset() {\n var _a, _b;\n for (const descriptor of this.descriptors.values()) {\n this.emit('trackUnpublished', {\n sid: descriptor.info.sid,\n publisherIdentity: descriptor.publisherIdentity\n });\n if (descriptor.subscription.type === 'pending') {\n (_b = (_a = descriptor.subscription.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackSubscribeError.disconnected());\n }\n if (descriptor.subscription.type === 'active') {\n this.closeStreamControllers(descriptor.subscription.streamControllers, descriptor.info.sid);\n }\n }\n this.descriptors.clear();\n this.subscriptionHandles.clear();\n }\n}class DataTrackPacketizerError extends LivekitReasonedError {\n constructor(message, reason, options) {\n super(19, message, options);\n this.name = 'DataTrackPacketizerError';\n this.reason = reason;\n this.reasonName = DataTrackPacketizerReason[reason];\n }\n static mtuTooShort() {\n return new DataTrackPacketizerError('MTU is too short to send frame', DataTrackPacketizerReason.MtuTooShort);\n }\n}\nvar DataTrackPacketizerReason;\n(function (DataTrackPacketizerReason) {\n DataTrackPacketizerReason[DataTrackPacketizerReason[\"MtuTooShort\"] = 0] = \"MtuTooShort\";\n})(DataTrackPacketizerReason || (DataTrackPacketizerReason = {}));\n/** A packetizer takes a {@link DataTrackFrameInternal} as input and generates a series\n * of {@link DataTrackPacket}s for transmission to other clients over webrtc. */\nclass DataTrackPacketizer {\n constructor(trackHandle, mtuSizeBytes) {\n this.sequence = WrapAroundUnsignedInt.u16(0);\n this.frameNumber = WrapAroundUnsignedInt.u16(0);\n this.clock = DataTrackClock.rtpStartingNow(DataTrackTimestamp.rtpRandom());\n this.handle = trackHandle;\n this.mtuSizeBytes = mtuSizeBytes;\n }\n /** @internal */\n static computeFrameMarker(index, packetCount) {\n if (packetCount <= 1) {\n return FrameMarker.Single;\n }\n if (index === 0) {\n return FrameMarker.Start;\n } else if (index === packetCount - 1) {\n return FrameMarker.Final;\n } else {\n return FrameMarker.Inter;\n }\n }\n /** Generates a series of packets for the specified {@link DataTrackFrameInternal}.\n *\n * NOTE: The return value of this function is a generator, so it can be lazily ran if desired,\n * or converted to an array with {@link Array.from}.\n */\n *packetize(frame, options) {\n var _a;\n const frameNumber = this.frameNumber.getThenIncrement();\n const headerParams = {\n marker: FrameMarker.Inter,\n trackHandle: this.handle,\n sequence: WrapAroundUnsignedInt.u16(0),\n frameNumber,\n timestamp: (_a = options === null || options === void 0 ? void 0 : options.now) !== null && _a !== void 0 ? _a : this.clock.now(),\n extensions: frame.extensions\n };\n const headerSerializedLengthBytes = new DataTrackPacketHeader(headerParams).toBinaryLengthBytes();\n if (headerSerializedLengthBytes >= this.mtuSizeBytes) {\n throw DataTrackPacketizerError.mtuTooShort();\n }\n const maxPayloadSizeBytes = this.mtuSizeBytes - headerSerializedLengthBytes;\n const packetCount = Math.ceil(frame.payload.byteLength / maxPayloadSizeBytes);\n for (let index = 0, indexBytes = 0; indexBytes < frame.payload.byteLength; _ref = [index + 1, indexBytes + maxPayloadSizeBytes], index = _ref[0], indexBytes = _ref[1], _ref) {\n var _ref;\n const sequence = this.sequence.getThenIncrement();\n const packetHeader = new DataTrackPacketHeader(Object.assign(Object.assign({}, headerParams), {\n marker: DataTrackPacketizer.computeFrameMarker(index, packetCount),\n sequence\n }));\n const packetPayloadLengthBytes = Math.min(\n // All but the last packet will be max length ...\n maxPayloadSizeBytes,\n // ... and the last packet will be as long as it needs to be to finish out the buffer.\n frame.payload.byteLength - indexBytes);\n const packetPayload = new Uint8Array(frame.payload.buffer, frame.payload.byteOffset + indexBytes, packetPayloadLengthBytes);\n yield new DataTrackPacket(packetHeader, packetPayload);\n }\n }\n}var DataTrackPublishErrorReason;\n(function (DataTrackPublishErrorReason) {\n /**\n * Local participant does not have permission to publish data tracks.\n *\n * Ensure the participant's token contains the `canPublishData` grant.\n */\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"NotAllowed\"] = 0] = \"NotAllowed\";\n /** A track with the same name is already published by the local participant. */\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"DuplicateName\"] = 1] = \"DuplicateName\";\n /** Request to publish the track took long to complete. */\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Timeout\"] = 2] = \"Timeout\";\n /** No additional data tracks can be published by the local participant. */\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"LimitReached\"] = 3] = \"LimitReached\";\n /** Cannot publish data track when the room is disconnected. */\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Disconnected\"] = 4] = \"Disconnected\";\n // NOTE: this was introduced by web / there isn't a corresponding case in the rust version.\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Cancelled\"] = 5] = \"Cancelled\";\n /** The name requested is not able to be used when creating the data track. */\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"InvalidName\"] = 6] = \"InvalidName\";\n /** There was an error publishing, but it was not something that could be sorted into a known\n * category. */\n DataTrackPublishErrorReason[DataTrackPublishErrorReason[\"Unknown\"] = 7] = \"Unknown\";\n})(DataTrackPublishErrorReason || (DataTrackPublishErrorReason = {}));\nclass DataTrackPublishError extends LivekitReasonedError {\n constructor(message, reason, options) {\n super(21, message, options);\n this.name = 'DataTrackPublishError';\n this.reason = reason;\n this.reasonName = DataTrackPublishErrorReason[reason];\n this.rawMessage = options === null || options === void 0 ? void 0 : options.rawMessage;\n }\n static notAllowed(rawMessage) {\n return new DataTrackPublishError('Data track publishing unauthorized', DataTrackPublishErrorReason.NotAllowed, {\n rawMessage\n });\n }\n static duplicateName(rawMessage) {\n return new DataTrackPublishError('Track name already taken', DataTrackPublishErrorReason.DuplicateName, {\n rawMessage\n });\n }\n static invalidName(rawMessage) {\n return new DataTrackPublishError('Track name is invalid', DataTrackPublishErrorReason.InvalidName, {\n rawMessage\n });\n }\n static timeout() {\n return new DataTrackPublishError('Publish data track timed-out. Does the LiveKit server support data tracks?', DataTrackPublishErrorReason.Timeout);\n }\n static limitReached(rawMessage) {\n return new DataTrackPublishError('Data track publication limit reached', DataTrackPublishErrorReason.LimitReached, {\n rawMessage\n });\n }\n static unknown(reason, message) {\n return new DataTrackPublishError(\"Received RequestResponse for publishDataTrack, but reason was unrecognised (\".concat(reason, \", \").concat(message, \")\"), DataTrackPublishErrorReason.Unknown);\n }\n static disconnected() {\n return new DataTrackPublishError('Room disconnected', DataTrackPublishErrorReason.Disconnected);\n }\n // NOTE: this was introduced by web / there isn't a corresponding case in the rust version.\n static cancelled() {\n return new DataTrackPublishError('Publish data track cancelled by caller', DataTrackPublishErrorReason.Cancelled);\n }\n}\nvar DataTrackPushFrameErrorReason;\n(function (DataTrackPushFrameErrorReason) {\n /** Track is no longer published. */\n DataTrackPushFrameErrorReason[DataTrackPushFrameErrorReason[\"TrackUnpublished\"] = 0] = \"TrackUnpublished\";\n /** Frame was dropped. */\n // NOTE: this should become a web specific error, the rust version of this \"dropped\" error means\n // something different and will be renamed to \"QueueFull\".\n DataTrackPushFrameErrorReason[DataTrackPushFrameErrorReason[\"Dropped\"] = 1] = \"Dropped\";\n})(DataTrackPushFrameErrorReason || (DataTrackPushFrameErrorReason = {}));\nclass DataTrackPushFrameError extends LivekitReasonedError {\n constructor(message, reason, options) {\n super(22, message, options);\n this.name = 'DataTrackPushFrameError';\n this.reason = reason;\n this.reasonName = DataTrackPushFrameErrorReason[reason];\n }\n static trackUnpublished() {\n return new DataTrackPushFrameError('Track is no longer published', DataTrackPushFrameErrorReason.TrackUnpublished);\n }\n static dropped(cause) {\n return new DataTrackPushFrameError('Frame was dropped', DataTrackPushFrameErrorReason.Dropped, {\n cause\n });\n }\n}\nvar DataTrackOutgoingPipelineErrorReason;\n(function (DataTrackOutgoingPipelineErrorReason) {\n DataTrackOutgoingPipelineErrorReason[DataTrackOutgoingPipelineErrorReason[\"Packetizer\"] = 0] = \"Packetizer\";\n DataTrackOutgoingPipelineErrorReason[DataTrackOutgoingPipelineErrorReason[\"Encryption\"] = 1] = \"Encryption\";\n})(DataTrackOutgoingPipelineErrorReason || (DataTrackOutgoingPipelineErrorReason = {}));\nclass DataTrackOutgoingPipelineError extends LivekitReasonedError {\n constructor(message, reason, options) {\n super(21, message, options);\n this.name = 'DataTrackOutgoingPipelineError';\n this.reason = reason;\n this.reasonName = DataTrackOutgoingPipelineErrorReason[reason];\n }\n static packetizer(cause) {\n return new DataTrackOutgoingPipelineError('Error packetizing frame', DataTrackOutgoingPipelineErrorReason.Packetizer, {\n cause\n });\n }\n static encryption(cause) {\n return new DataTrackOutgoingPipelineError('Error encrypting frame', DataTrackOutgoingPipelineErrorReason.Encryption, {\n cause\n });\n }\n}class LocalDataTrack {\n /** @internal */\n constructor(options, manager) {\n this.trackSymbol = TrackSymbol;\n this.isLocal = true;\n this.typeSymbol = DataTrackSymbol;\n /** Represents the currently active {@link DataTrackHandle} for the publication. */\n this.handle = null;\n this.log = livekitLogger;\n /** Resolves once the data track has sent all pending packets the rtc data channel buffer. */\n this.flushedFuture = new Future();\n this.isFlushed = true;\n this.handleManagerReset = () => {\n var _a, _b;\n // When the associated manager resets, mark any in flight flushes as complete\n // There's nothing actionable a user can do to get these to complete so no\n // error is being thrown.\n (_b = (_a = this.flushedFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.manager.off('packetsFlushedChange', this.handleManagerPacketsFlushedChange);\n this.manager.off('reset', this.handleManagerReset);\n };\n this.handleManagerPacketsFlushedChange = event => {\n var _a, _b;\n this.isFlushed = event.isFlushed;\n if (event.isFlushed) {\n (_b = (_a = this.flushedFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.flushedFuture = new Future();\n }\n };\n this.options = options;\n this.manager = manager;\n this.log = getLogger(LoggerNames.DataTracks);\n this.manager.on('packetsFlushedChange', this.handleManagerPacketsFlushedChange);\n this.manager.on('reset', this.handleManagerReset);\n }\n /** @internal */\n static withExplicitHandle(options, manager, handle) {\n const track = new LocalDataTrack(options, manager);\n track.handle = handle;\n return track;\n }\n /** Metrics about the data track publication. */\n get info() {\n const descriptor = this.descriptor;\n if ((descriptor === null || descriptor === void 0 ? void 0 : descriptor.type) === 'active') {\n return descriptor.info;\n } else {\n return undefined;\n }\n }\n /** The raw descriptor from the manager containing the internal state for this local track. */\n get descriptor() {\n return this.handle ? this.manager.getDescriptor(this.handle) : null;\n }\n /**\n * Publish the track to the SFU. This must be done before calling {@link tryPush} for the first time.\n * @internal\n * */\n publish(signal) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.handle = yield this.manager.publishRequest(this.options, signal);\n } catch (err) {\n // NOTE: Rethrow errors to break Throws<...> type boundary\n throw err;\n }\n });\n }\n isPublished() {\n var _a;\n // NOTE: a track which is internally in the \"resubscribing\" state is still considered\n // published from the public API perspective.\n return ((_a = this.descriptor) === null || _a === void 0 ? void 0 : _a.type) === 'active' && this.descriptor.publishState !== 'unpublished';\n }\n /** Try pushing a frame to subscribers of the track.\n *\n * Pushing a frame can fail for several reasons:\n *\n * - The track has been unpublished by the local participant or SFU\n * - The room is no longer connected\n */\n tryPush(frame) {\n if (!this.handle) {\n throw DataTrackPushFrameError.trackUnpublished();\n }\n const internalFrame = DataTrackFrameInternal.from(frame);\n try {\n return this.manager.tryProcessAndSend(this.handle, internalFrame);\n } catch (err) {\n // NOTE: wrapping in the bare try/catch like this means that the Throws<...> type doesn't\n // propagate upwards into the public interface.\n throw err;\n }\n }\n /**\n * When called, waits for all in flight packets to be sent before resolving.\n *\n * Use this to:\n *\n * 1. Send frames exactly in order:\n * ```ts\n * await track.tryPush(/* ... *\\/);\n * await track.flush();\n * await track.tryPush(/* ... *\\/);\n * await track.flush();\n * // ... etc ...\n * ```\n *\n * 2. Wait for frames to all be delivered before unpublishing a local data track:\n *\n * ```ts\n * await track.tryPush(/* ... *\\/);\n * await track.tryPush(/* ... *\\/);\n * await track.tryPush(/* ... *\\/);\n * // ... etc ...\n * await track.flush();\n * await track.unpublish();\n * ```\n **/\n flush() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isFlushed) {\n return;\n }\n return this.flushedFuture.promise;\n });\n }\n /**\n * Unpublish the track from the SFU. Once this is called, any further calls to {@link tryPush}\n * will fail.\n * */\n unpublish() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.handle) {\n livekitLogger.warn(\"Data track \\\"\".concat(this.options.name, \"\\\" is not published, so unpublishing has no effect.\"));\n return;\n }\n try {\n yield this.manager.unpublishRequest(this.handle);\n } catch (err) {\n // NOTE: Rethrow errors to break Throws<...> type boundary\n throw err;\n }\n });\n }\n}/** Processes outgoing frames into final packets for distribution to the SFU. */\nclass DataTrackOutgoingPipeline {\n constructor(options) {\n this.e2eeManager = options.e2eeManager;\n this.packetizer = new DataTrackPacketizer(options.info.pubHandle, DataTrackOutgoingPipeline.TRANSPORT_MTU_BYTES);\n }\n updateE2eeManager(e2eeManager) {\n this.e2eeManager = e2eeManager;\n }\n processFrame(frame) {\n return __asyncGenerator(this, arguments, function* processFrame_1() {\n const encryptedFrame = yield __await(this.encryptIfNeeded(frame));\n try {\n yield __await(yield* __asyncDelegator(__asyncValues(this.packetizer.packetize(encryptedFrame))));\n } catch (error) {\n if (error instanceof DataTrackPacketizerError) {\n throw DataTrackOutgoingPipelineError.packetizer(error);\n }\n throw error;\n }\n });\n }\n encryptIfNeeded(frame) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.e2eeManager) {\n return frame;\n }\n let encryptedResult;\n try {\n encryptedResult = yield this.e2eeManager.encryptData(frame.payload);\n } catch (err) {\n throw DataTrackOutgoingPipelineError.encryption(err);\n }\n frame.payload = encryptedResult.payload;\n frame.extensions.e2ee = new DataTrackE2eeExtension(encryptedResult.keyIndex, encryptedResult.iv);\n return frame;\n });\n }\n}\n/** Maximum transmission unit (MTU) of the transport. */\nDataTrackOutgoingPipeline.TRANSPORT_MTU_BYTES = 16000;const log = getLogger(LoggerNames.DataTracks);\nconst Descriptor = {\n pending() {\n return {\n type: 'pending',\n completionFuture: new Future()\n };\n },\n active(info, e2eeManager) {\n return {\n type: 'active',\n info,\n publishState: 'published',\n pipeline: new DataTrackOutgoingPipeline({\n info,\n e2eeManager\n }),\n unpublishingFuture: new Future()\n };\n }\n};\n/** How long to wait when attempting to publish before timing out. */\nconst PUBLISH_TIMEOUT_MILLISECONDS = 10000;\nclass OutgoingDataTrackManager extends eventsExports.EventEmitter {\n constructor(options) {\n var _a;\n super();\n this.handleAllocator = new DataTrackHandleAllocator();\n this.descriptors = new Map();\n /** Number of packets for each data track which have been emitted via the `packetAvailable` event\n * and which have not yet been sent via the rtc data channel yet. Once this goes to 0, then\n * all in flight packets have been delivered, and the data tracks is \"flushed\". */\n this.inFlightPacketCounter = new Map();\n this.e2eeManager = (_a = options === null || options === void 0 ? void 0 : options.e2eeManager) !== null && _a !== void 0 ? _a : null;\n }\n static withDescriptors(descriptors) {\n const manager = new OutgoingDataTrackManager();\n manager.descriptors = descriptors;\n return manager;\n }\n /** @internal */\n updateE2eeManager(e2eeManager) {\n this.e2eeManager = e2eeManager;\n // Propegate downwards to all pre-existing pipelines\n for (const descriptor of this.descriptors.values()) {\n if (descriptor.type === 'active') {\n descriptor.pipeline.updateE2eeManager(e2eeManager);\n }\n }\n }\n /**\n * Used by attached {@link LocalDataTrack} instances to query their associated descriptor info.\n * @internal\n */\n getDescriptor(handle) {\n var _a;\n return (_a = this.descriptors.get(handle)) !== null && _a !== void 0 ? _a : null;\n }\n /** Used by attached {@link LocalDataTrack} instances to broadcast data track packets to other\n * subscribers.\n * @internal\n */\n tryProcessAndSend(handle, frame) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, e_1, _b, _c;\n var _d;\n const descriptor = this.getDescriptor(handle);\n if ((descriptor === null || descriptor === void 0 ? void 0 : descriptor.type) !== 'active') {\n throw DataTrackPushFrameError.trackUnpublished();\n }\n if (descriptor.publishState === 'unpublished') {\n throw DataTrackPushFrameError.trackUnpublished();\n }\n if (descriptor.publishState === 'republishing') {\n throw DataTrackPushFrameError.dropped('Data track republishing');\n }\n try {\n try {\n for (var _e = true, _f = __asyncValues(descriptor.pipeline.processFrame(frame)), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n _c = _g.value;\n _e = false;\n const packet = _c;\n const prev = (_d = this.inFlightPacketCounter.get(handle)) !== null && _d !== void 0 ? _d : 0;\n this.inFlightPacketCounter.set(handle, prev + 1);\n if (prev === 0) {\n // A new packet has been sent, so there are now packets in the rtc data channel buffer for\n // this data track frame\n this.emit('packetsFlushedChange', {\n handle,\n isFlushed: false\n });\n }\n this.emit('packetAvailable', {\n handle,\n bytes: packet.toBinary()\n });\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n } catch (err) {\n // NOTE: In the rust implementation this \"dropped\" error means something different (not enough room\n // in the track mpsc channel)\n throw DataTrackPushFrameError.dropped(err);\n }\n });\n }\n /** The client has sent a packet over the rtc data channel. This signal is used for determining\n * once all packets are sent and a data track has been \"flushed\".\n *\n * @internal */\n handlePacketSendComplete(handle) {\n var _a;\n const prev = (_a = this.inFlightPacketCounter.get(handle)) !== null && _a !== void 0 ? _a : 0;\n let counter = prev - 1;\n if (counter < 0) {\n log.warn(\"OutgoingDataTrackManager.handlePacketSendComplete: inFlightPacketCounter was decremented below 0 (got \".concat(this.inFlightPacketCounter, \" - resetting to 0. Were more packets send than were emitted?\"));\n counter = 0;\n }\n this.inFlightPacketCounter.set(handle, counter);\n if (counter === 0) {\n this.emit('packetsFlushedChange', {\n handle,\n isFlushed: true\n });\n }\n }\n /**\n * Client requested to publish a track.\n *\n * If the LiveKit server is too old and doesn't support data tracks, a\n * {@link DataTrackPublishError#timeout} will be thrown.\n *\n * @internal\n **/\n publishRequest(options, signal) {\n return __awaiter(this, void 0, void 0, function* () {\n const handle = this.handleAllocator.get();\n if (!handle) {\n throw DataTrackPublishError.limitReached();\n }\n const timeoutSignal = abortSignalTimeout(PUBLISH_TIMEOUT_MILLISECONDS);\n const combinedSignal = signal ? abortSignalAny([signal, timeoutSignal]) : timeoutSignal;\n if (this.descriptors.has(handle)) {\n // @throws-transformer ignore - this should be treated as a \"panic\" and not be caught\n throw new Error('Descriptor for handle already exists');\n }\n const descriptor = Descriptor.pending();\n this.descriptors.set(handle, descriptor);\n const onAbort = () => {\n var _a, _b;\n const existingDescriptor = this.descriptors.get(handle);\n if (!existingDescriptor) {\n log.warn(\"No descriptor for \".concat(handle));\n return;\n }\n this.descriptors.delete(handle);\n // Let the SFU know that the publish has been cancelled\n this.emit('sfuUnpublishRequest', {\n handle\n });\n if (existingDescriptor.type === 'pending') {\n (_b = (_a = existingDescriptor.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, timeoutSignal.aborted ? DataTrackPublishError.timeout() :\n // NOTE: the below cancelled case was introduced by web / there isn't a corresponding case in the rust version.\n DataTrackPublishError.cancelled());\n }\n };\n if (combinedSignal.aborted) {\n onAbort(); // NOTE: this rejects `completionFuture`; the next line just returns the rejection\n return descriptor.completionFuture.promise.then(() => handle /* no-op, makes typescript happy */);\n }\n combinedSignal.addEventListener('abort', onAbort);\n this.emit('sfuPublishRequest', {\n handle,\n name: options.name,\n usesE2ee: this.e2eeManager !== null\n });\n yield descriptor.completionFuture.promise;\n combinedSignal.removeEventListener('abort', onAbort);\n this.emit('trackPublished', {\n track: LocalDataTrack.withExplicitHandle(options, this, handle)\n });\n return handle;\n });\n }\n /**\n * Get information about all currently published tracks.\n * @internal\n **/\n queryPublished() {\n const descriptorInfos = Array.from(this.descriptors.values()).filter(descriptor => descriptor.type === 'active').map(descriptor => descriptor.info);\n return descriptorInfos;\n }\n /**\n * Client request to unpublish a track.\n * @internal\n **/\n unpublishRequest(handle) {\n return __awaiter(this, void 0, void 0, function* () {\n const descriptor = this.descriptors.get(handle);\n if (!descriptor) {\n log.warn(\"No descriptor for \".concat(handle));\n return;\n }\n if (descriptor.type !== 'active') {\n log.warn(\"Track \".concat(handle, \" not active\"));\n return;\n }\n this.emit('sfuUnpublishRequest', {\n handle\n });\n yield descriptor.unpublishingFuture.promise;\n this.inFlightPacketCounter.delete(handle);\n this.emit('trackUnpublished', {\n sid: descriptor.info.sid\n });\n });\n }\n /**\n * SFU responded to a request to publish a data track.\n * @internal\n **/\n receivedSfuPublishResponse(handle, result) {\n var _a, _b, _c, _d;\n const descriptor = this.descriptors.get(handle);\n if (!descriptor) {\n log.warn(\"No descriptor for \".concat(handle));\n return;\n }\n this.descriptors.delete(handle);\n switch (descriptor.type) {\n case 'pending':\n {\n if (result.type === 'ok') {\n const info = result.data;\n const e2eeManager = info.usesE2ee ? this.e2eeManager : null;\n this.descriptors.set(info.pubHandle, Descriptor.active(info, e2eeManager));\n (_b = (_a = descriptor.completionFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n } else {\n (_d = (_c = descriptor.completionFuture).reject) === null || _d === void 0 ? void 0 : _d.call(_c, result.error);\n }\n return;\n }\n case 'active':\n {\n if (descriptor.publishState !== 'republishing') {\n log.warn(\"Track \".concat(handle, \" already active\"));\n return;\n }\n if (result.type === 'error') {\n log.warn(\"Republish failed for track \".concat(handle));\n return;\n }\n log.debug(\"Track \".concat(handle, \" republished\"));\n descriptor.info.sid = result.data.sid;\n descriptor.publishState = 'published';\n this.descriptors.set(descriptor.info.pubHandle, descriptor);\n }\n }\n }\n /**\n * SFU notification that a track has been unpublished.\n * @internal\n **/\n receivedSfuUnpublishResponse(handle) {\n var _a, _b;\n const descriptor = this.descriptors.get(handle);\n if (!descriptor) {\n log.warn(\"No descriptor for \".concat(handle));\n return;\n }\n this.descriptors.delete(handle);\n if (descriptor.type !== 'active') {\n log.warn(\"Track \".concat(handle, \" not active\"));\n return;\n }\n descriptor.publishState = 'unpublished';\n (_b = (_a = descriptor.unpublishingFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n /** Republish all tracks.\n *\n * This must be sent after a full reconnect in order for existing publications\n * to be recognized by the SFU. Each republished track will be assigned a new SID.\n * @internal\n */\n sfuWillRepublishTracks() {\n var _a, _b;\n for (const _ref of this.descriptors.entries()) {\n var _ref2 = _slicedToArray(_ref, 2);\n const handle = _ref2[0];\n const descriptor = _ref2[1];\n switch (descriptor.type) {\n case 'pending':\n // TODO: support republish for pending publications\n this.descriptors.delete(handle);\n (_b = (_a = descriptor.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackPublishError.disconnected());\n break;\n case 'active':\n descriptor.publishState = 'republishing';\n this.emit('sfuPublishRequest', {\n handle: descriptor.info.pubHandle,\n name: descriptor.info.name,\n usesE2ee: descriptor.info.usesE2ee\n });\n }\n }\n }\n /**\n * Reset's the state of the manager and all associated tracks. Run on room disconnect to get\n * the manager ready for the next room connection.\n * @internal\n **/\n reset() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d;\n this.handleAllocator.reset();\n for (const descriptor of this.descriptors.values()) {\n switch (descriptor.type) {\n case 'pending':\n (_b = (_a = descriptor.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, DataTrackPublishError.disconnected());\n break;\n case 'active':\n // Abandon any unpublishing descriptors that were in flight and assume they will get\n // cleaned up automatically with the connection shutdown.\n (_d = (_c = descriptor.unpublishingFuture).resolve) === null || _d === void 0 ? void 0 : _d.call(_c);\n yield this.unpublishRequest(descriptor.info.pubHandle);\n break;\n }\n }\n this.descriptors.clear();\n this.inFlightPacketCounter.clear();\n this.emit('reset');\n });\n }\n}/**\n * Specialized error handling for RPC methods.\n *\n * Instances of this type, when thrown in a method handler, will have their `message`\n * serialized and sent across the wire. The sender will receive an equivalent error on the other side.\n *\n * Built-in types are included but developers may use any string, with a max length of 256 bytes.\n */\nclass RpcError extends Error {\n /**\n * Creates an error object with the given code and message, plus an optional data payload.\n *\n * If thrown in an RPC method handler, the error will be sent back to the caller.\n *\n * Error codes 1001-1999 are reserved for built-in errors (see RpcError.ErrorCode for their meanings).\n */\n constructor(code, message, data, options) {\n super(message);\n this.code = code;\n this.message = truncateBytes(message, RpcError.MAX_MESSAGE_BYTES);\n this.data = data ? truncateBytes(data, RpcError.MAX_DATA_BYTES) : undefined;\n if (typeof (options === null || options === void 0 ? void 0 : options.cause) !== 'undefined') {\n this.cause = options === null || options === void 0 ? void 0 : options.cause;\n }\n }\n /**\n * @internal\n */\n static fromProto(proto) {\n return new RpcError(proto.code, proto.message, proto.data);\n }\n /**\n * @internal\n */\n toProto() {\n return new RpcError$1({\n code: this.code,\n message: this.message,\n data: this.data\n });\n }\n /**\n * Creates an error object from the code, with an auto-populated message.\n *\n * @internal\n */\n static builtIn(key, data, options) {\n return new RpcError(RpcError.ErrorCode[key], RpcError.ErrorMessage[key], data, options);\n }\n}\nRpcError.MAX_MESSAGE_BYTES = 256;\nRpcError.MAX_DATA_BYTES = 15360; // 15 KB\nRpcError.ErrorCode = {\n APPLICATION_ERROR: 1500,\n CONNECTION_TIMEOUT: 1501,\n RESPONSE_TIMEOUT: 1502,\n RECIPIENT_DISCONNECTED: 1503,\n RESPONSE_PAYLOAD_TOO_LARGE: 1504,\n SEND_FAILED: 1505,\n UNSUPPORTED_METHOD: 1400,\n RECIPIENT_NOT_FOUND: 1401,\n REQUEST_PAYLOAD_TOO_LARGE: 1402,\n UNSUPPORTED_SERVER: 1403,\n UNSUPPORTED_VERSION: 1404\n};\n/**\n * @internal\n */\nRpcError.ErrorMessage = {\n APPLICATION_ERROR: 'Application error in method handler',\n CONNECTION_TIMEOUT: 'Connection timeout',\n RESPONSE_TIMEOUT: 'Response timeout',\n RECIPIENT_DISCONNECTED: 'Recipient disconnected',\n RESPONSE_PAYLOAD_TOO_LARGE: 'Response payload too large',\n SEND_FAILED: 'Failed to send',\n UNSUPPORTED_METHOD: 'Method not supported at destination',\n RECIPIENT_NOT_FOUND: 'Recipient not found',\n REQUEST_PAYLOAD_TOO_LARGE: 'Request payload too large',\n UNSUPPORTED_SERVER: 'RPC not supported by server',\n UNSUPPORTED_VERSION: 'Unsupported RPC version'\n};\n/*\n * Maximum payload size for RPC requests and responses for clients with a clientProtocol of less\n * than CLIENT_PROTOCOL_DATA_STREAM_RPC.\n *\n * If a payload exceeds this size and the remote client does not support compression,\n * the RPC call will fail with a REQUEST_PAYLOAD_TOO_LARGE(1402) or RESPONSE_PAYLOAD_TOO_LARGE(1504) error.\n */\nconst MAX_V1_PAYLOAD_BYTES = 15360; // 15 KB\n/**\n * Topic used for v2 RPC request data streams.\n * @internal\n */\nconst RPC_REQUEST_DATA_STREAM_TOPIC = 'lk.rpc_request';\n/**\n * Topic used for v2 RPC response data streams.\n * @internal\n */\nconst RPC_RESPONSE_DATA_STREAM_TOPIC = 'lk.rpc_response';\n/** @internal */\nvar RpcRequestAttrs;\n(function (RpcRequestAttrs) {\n RpcRequestAttrs[\"RPC_REQUEST_ID\"] = \"lk.rpc_request_id\";\n RpcRequestAttrs[\"RPC_REQUEST_METHOD\"] = \"lk.rpc_request_method\";\n RpcRequestAttrs[\"RPC_REQUEST_RESPONSE_TIMEOUT_MS\"] = \"lk.rpc_request_response_timeout_ms\";\n RpcRequestAttrs[\"RPC_REQUEST_VERSION\"] = \"lk.rpc_request_version\";\n})(RpcRequestAttrs || (RpcRequestAttrs = {}));\n/** Initial version of rpc which uses RpcRequest / RpcResponse messages.\n * @internal\n **/\nconst RPC_VERSION_V1 = 1;\n/** Rpc version backed by data streams instead of RpcRequest / RpcResponse.\n * @internal\n **/\nconst RPC_VERSION_V2 = 2;\n/**\n * @internal\n */\nfunction byteLength(str) {\n const encoder = new TextEncoder();\n return encoder.encode(str).length;\n}\n/**\n * @internal\n */\nfunction truncateBytes(str, maxBytes) {\n if (byteLength(str) <= maxBytes) {\n return str;\n }\n let low = 0;\n let high = str.length;\n const encoder = new TextEncoder();\n while (low < high) {\n const mid = Math.floor((low + high + 1) / 2);\n if (encoder.encode(str.slice(0, mid)).length <= maxBytes) {\n low = mid;\n } else {\n high = mid - 1;\n }\n }\n return str.slice(0, low);\n}/**\n * Manages the client (caller) side of RPC: sending requests, tracking pending\n * ack/response state, and handling incoming ack/response packets.\n * @internal\n */\nclass RpcClientManager extends EventEmitter {\n constructor(log, outgoingDataStreamManager, getRemoteParticipantClientProtocol, getServerVersion) {\n super();\n this.pendingAcks = new Map();\n this.pendingResponses = new Map();\n this.log = log;\n this.outgoingDataStreamManager = outgoingDataStreamManager;\n this.getRemoteParticipantClientProtocol = getRemoteParticipantClientProtocol;\n this.getServerVersion = getServerVersion;\n }\n performRpc(_a) {\n return __awaiter(this, arguments, void 0, function (_ref) {\n var _this = this;\n let destinationIdentity = _ref.destinationIdentity,\n method = _ref.method,\n payload = _ref.payload,\n _ref$responseTimeout = _ref.responseTimeout,\n responseTimeoutMs = _ref$responseTimeout === void 0 ? 15000 : _ref$responseTimeout;\n return function* () {\n const maxRoundTripLatencyMs = 7000;\n const minEffectiveTimeoutMs = maxRoundTripLatencyMs + 1000;\n const remoteClientProtocol = _this.getRemoteParticipantClientProtocol(destinationIdentity);\n const payloadBytes = byteLength(payload);\n // Only enforce the legacy size limit when on rpc v1\n if (payloadBytes > MAX_V1_PAYLOAD_BYTES && remoteClientProtocol < CLIENT_PROTOCOL_DATA_STREAM_RPC) {\n throw RpcError.builtIn('REQUEST_PAYLOAD_TOO_LARGE');\n }\n const serverVersion = _this.getServerVersion();\n if (serverVersion && compareVersions(serverVersion, '1.8.0') < 0) {\n throw RpcError.builtIn('UNSUPPORTED_SERVER');\n }\n const effectiveTimeoutMs = Math.max(responseTimeoutMs, minEffectiveTimeoutMs);\n const id = crypto.randomUUID();\n const completionFuture = new Future();\n let responseTimeoutId = null;\n const ackTimeoutId = setTimeout(() => {\n var _a;\n _this.pendingAcks.delete(id);\n (_a = completionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(completionFuture, RpcError.builtIn('CONNECTION_TIMEOUT'));\n _this.pendingResponses.delete(id);\n if (responseTimeoutId !== null) {\n clearTimeout(responseTimeoutId);\n }\n }, maxRoundTripLatencyMs);\n _this.pendingAcks.set(id, {\n resolve: () => {\n clearTimeout(ackTimeoutId);\n },\n participantIdentity: destinationIdentity\n });\n _this.pendingResponses.set(id, {\n completionFuture,\n participantIdentity: destinationIdentity\n });\n yield _this.publishRpcRequest(destinationIdentity, id, method, payload, effectiveTimeoutMs, remoteClientProtocol);\n responseTimeoutId = setTimeout(() => {\n var _a;\n _this.pendingResponses.delete(id);\n (_a = completionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(completionFuture, RpcError.builtIn('RESPONSE_TIMEOUT'));\n }, responseTimeoutMs);\n const completionPromise = completionFuture.promise.finally(() => {\n clearTimeout(responseTimeoutId);\n if (_this.pendingAcks.has(id)) {\n _this.log.warn('RPC response received before ack', id);\n _this.pendingAcks.delete(id);\n clearTimeout(ackTimeoutId);\n }\n });\n return [id, completionPromise];\n }();\n });\n }\n publishRpcRequest(destinationIdentity, requestId, method, payload, responseTimeout, remoteClientProtocol) {\n return __awaiter(this, void 0, void 0, function* () {\n if (remoteClientProtocol >= CLIENT_PROTOCOL_DATA_STREAM_RPC) {\n // Send payload as a data stream - a \"version 2\" rpc request.\n const writer = yield this.outgoingDataStreamManager.streamText({\n topic: RPC_REQUEST_DATA_STREAM_TOPIC,\n destinationIdentities: [destinationIdentity],\n attributes: {\n [RpcRequestAttrs.RPC_REQUEST_ID]: requestId,\n [RpcRequestAttrs.RPC_REQUEST_METHOD]: method,\n [RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS]: \"\".concat(responseTimeout),\n [RpcRequestAttrs.RPC_REQUEST_VERSION]: \"\".concat(RPC_VERSION_V2)\n }\n });\n yield writer.write(payload);\n yield writer.close();\n return;\n }\n // Fallback to sending a literal RpcRequest - a \"version 1\" rpc request.\n this.emit('sendDataPacket', {\n packet: new DataPacket({\n destinationIdentities: [destinationIdentity],\n kind: DataPacket_Kind.RELIABLE,\n value: {\n case: 'rpcRequest',\n value: new RpcRequest({\n id: requestId,\n method,\n payload,\n responseTimeoutMs: responseTimeout,\n version: RPC_VERSION_V1\n })\n }\n })\n });\n });\n }\n /**\n * Handle an incoming data stream containing an RPC response payload.\n * @internal\n */\n handleIncomingDataStream(reader, senderIdentity, attributes) {\n return __awaiter(this, void 0, void 0, function* () {\n const associatedRequestId = attributes[RpcRequestAttrs.RPC_REQUEST_ID];\n if (!associatedRequestId) {\n this.log.warn(\"RPC data stream malformed: \".concat(RpcRequestAttrs.RPC_REQUEST_ID, \" not set.\"));\n // NOTE: no response can be sent here, because there's no request id so associate\n // so logging is the best we can do here.\n return;\n }\n const pending = this.pendingResponses.get(associatedRequestId);\n if (pending && pending.participantIdentity !== senderIdentity) {\n this.log.warn(\"RPC response stream for \".concat(associatedRequestId, \" arrived from unexpected sender \").concat(senderIdentity, \", expected \").concat(pending.participantIdentity, \". Ignoring.\"));\n return;\n }\n let payload;\n try {\n payload = yield reader.readAll();\n } catch (e) {\n this.log.warn(\"Error reading RPC response payload: \".concat(e));\n this.handleIncomingRpcResponseFailure(associatedRequestId, RpcError.builtIn('APPLICATION_ERROR', 'Error reading RPC response payload', {\n cause: e\n }));\n return;\n }\n this.handleIncomingRpcResponseSuccess(associatedRequestId, payload);\n });\n }\n /** @internal */\n handleIncomingRpcResponseSuccess(requestId, payload) {\n var _a, _b;\n const handler = this.pendingResponses.get(requestId);\n if (handler) {\n (_b = (_a = handler.completionFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a, payload);\n this.pendingResponses.delete(requestId);\n } else {\n this.log.error('Response received for unexpected RPC request', requestId);\n }\n }\n /** @internal */\n handleIncomingRpcResponseFailure(requestId, error) {\n var _a, _b;\n const handler = this.pendingResponses.get(requestId);\n if (handler) {\n (_b = (_a = handler.completionFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, error);\n this.pendingResponses.delete(requestId);\n } else {\n this.log.error('Response received for unexpected RPC request', requestId);\n }\n }\n /** @internal */\n handleIncomingRpcAck(requestId) {\n const handler = this.pendingAcks.get(requestId);\n if (handler) {\n handler.resolve();\n this.pendingAcks.delete(requestId);\n } else {\n this.log.error(\"Ack received for unexpected RPC request: \".concat(requestId));\n }\n }\n /** @internal */\n handleParticipantDisconnected(participantIdentity) {\n var _a;\n for (const _ref2 of this.pendingAcks) {\n var _ref3 = _slicedToArray(_ref2, 2);\n const id = _ref3[0];\n const pendingIdentity = _ref3[1].participantIdentity;\n if (pendingIdentity === participantIdentity) {\n this.pendingAcks.delete(id);\n }\n }\n for (const _ref4 of this.pendingResponses) {\n var _ref5 = _slicedToArray(_ref4, 2);\n const id = _ref5[0];\n var _ref5$ = _ref5[1];\n const pendingIdentity = _ref5$.participantIdentity;\n const completionFuture = _ref5$.completionFuture;\n if (pendingIdentity === participantIdentity) {\n (_a = completionFuture.reject) === null || _a === void 0 ? void 0 : _a.call(completionFuture, RpcError.builtIn('RECIPIENT_DISCONNECTED'));\n this.pendingResponses.delete(id);\n }\n }\n }\n}/**\n * Manages the server (handler) side of RPC: processing incoming requests,\n * managing registered method handlers, and sending responses.\n * @internal\n */\nclass RpcServerManager extends EventEmitter {\n constructor(log, outgoingDataStreamManager, getRemoteParticipantClientProtocol) {\n super();\n this.rpcHandlers = new Map();\n this.log = log;\n this.outgoingDataStreamManager = outgoingDataStreamManager;\n this.getRemoteParticipantClientProtocol = getRemoteParticipantClientProtocol;\n }\n registerRpcMethod(method, handler) {\n if (this.rpcHandlers.has(method)) {\n throw Error(\"RPC handler already registered for method \".concat(method, \", unregisterRpcMethod before trying to register again\"));\n }\n this.rpcHandlers.set(method, handler);\n }\n unregisterRpcMethod(method) {\n this.rpcHandlers.delete(method);\n }\n /**\n * Handle an incoming RPCRequest message containing a payload.\n * This handles \"version 1\" of rpc requests.\n * @internal\n */\n handleIncomingRpcRequest(callerIdentity, rpcRequest) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.publishRpcAck(callerIdentity, rpcRequest.id);\n if (rpcRequest.version !== 1) {\n this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, RpcError.builtIn('UNSUPPORTED_VERSION'));\n return;\n }\n const handler = this.rpcHandlers.get(rpcRequest.method);\n if (!handler) {\n this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, RpcError.builtIn('UNSUPPORTED_METHOD'));\n return;\n }\n let response;\n try {\n response = yield handler({\n requestId: rpcRequest.id,\n callerIdentity,\n payload: rpcRequest.payload,\n responseTimeout: rpcRequest.responseTimeoutMs\n });\n } catch (error) {\n let responseError;\n if (error instanceof RpcError) {\n responseError = error;\n } else {\n this.log.warn(\"Uncaught error returned by RPC handler for \".concat(rpcRequest.method, \". Returning APPLICATION_ERROR instead.\"), error);\n responseError = RpcError.builtIn('APPLICATION_ERROR', \"Uncaught error: \".concat((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error), {\n cause: error\n });\n }\n this.publishRpcResponsePacket(callerIdentity, rpcRequest.id, null, responseError);\n return;\n }\n yield this.publishRpcResponse(callerIdentity, rpcRequest.id, response !== null && response !== void 0 ? response : '');\n });\n }\n /**\n * Handle an incoming data stream containing a RPC request payload.\n * This handles \"version 2\" of rpc requests.\n * @internal\n */\n handleIncomingDataStream(reader, callerIdentity, dataStreamAttrs) {\n return __awaiter(this, void 0, void 0, function* () {\n const requestId = dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_ID];\n const method = dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_METHOD];\n const responseTimeout = parseInt(dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS], 10);\n const version = parseInt(dataStreamAttrs[RpcRequestAttrs.RPC_REQUEST_VERSION], 10);\n if (!requestId || !method || Number.isNaN(responseTimeout) || Number.isNaN(version)) {\n this.log.warn(\"RPC data stream malformed: \".concat(RpcRequestAttrs.RPC_REQUEST_ID, \" / \").concat(RpcRequestAttrs.RPC_REQUEST_METHOD, \" / \").concat(RpcRequestAttrs.RPC_REQUEST_RESPONSE_TIMEOUT_MS, \" / \").concat(RpcRequestAttrs.RPC_REQUEST_VERSION, \" not set.\"));\n this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('APPLICATION_ERROR', 'RPC data stream malformed'));\n return;\n }\n this.publishRpcAck(callerIdentity, requestId);\n if (version !== RPC_VERSION_V2) {\n this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_VERSION'));\n return;\n }\n let payload;\n try {\n payload = yield reader.readAll();\n } catch (e) {\n this.log.warn(\"Error reading RPC request payload: \".concat(e));\n this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('APPLICATION_ERROR', 'Error reading RPC request payload', {\n cause: e\n }));\n return;\n }\n const handler = this.rpcHandlers.get(method);\n if (!handler) {\n this.publishRpcResponsePacket(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_METHOD'));\n return;\n }\n let response;\n try {\n response = yield handler({\n requestId,\n callerIdentity,\n payload,\n responseTimeout\n });\n } catch (error) {\n let responseError;\n if (error instanceof RpcError) {\n responseError = error;\n } else {\n this.log.warn(\"Uncaught error returned by RPC handler for \".concat(method, \". Returning APPLICATION_ERROR instead.\"), error);\n responseError = RpcError.builtIn('APPLICATION_ERROR');\n }\n this.publishRpcResponsePacket(callerIdentity, requestId, null, responseError);\n return;\n }\n yield this.publishRpcResponse(callerIdentity, requestId, response !== null && response !== void 0 ? response : '');\n });\n }\n publishRpcAck(destinationIdentity, requestId) {\n this.emit('sendDataPacket', {\n packet: new DataPacket({\n destinationIdentities: [destinationIdentity],\n kind: DataPacket_Kind.RELIABLE,\n value: {\n case: 'rpcAck',\n value: new RpcAck({\n requestId\n })\n }\n })\n });\n }\n publishRpcResponsePacket(destinationIdentity, requestId, payload, error) {\n this.emit('sendDataPacket', {\n packet: new DataPacket({\n destinationIdentities: [destinationIdentity],\n kind: DataPacket_Kind.RELIABLE,\n value: {\n case: 'rpcResponse',\n value: new RpcResponse({\n requestId,\n value: error ? {\n case: 'error',\n value: error.toProto()\n } : {\n case: 'payload',\n value: payload !== null && payload !== void 0 ? payload : ''\n }\n })\n }\n })\n });\n }\n /**\n * Send a successful RPC response payload, choosing the transport based on\n * the caller's client protocol version.\n */\n publishRpcResponse(destinationIdentity, requestId, payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const callerClientProtocol = this.getRemoteParticipantClientProtocol(destinationIdentity);\n if (callerClientProtocol >= CLIENT_PROTOCOL_DATA_STREAM_RPC) {\n // Send response as a data stream\n const writer = yield this.outgoingDataStreamManager.streamText({\n topic: RPC_RESPONSE_DATA_STREAM_TOPIC,\n destinationIdentities: [destinationIdentity],\n attributes: {\n [RpcRequestAttrs.RPC_REQUEST_ID]: requestId\n }\n });\n yield writer.write(payload);\n yield writer.close();\n return;\n }\n // Legacy client: enforce size limit and send uncompressed payload inline\n const responseBytes = byteLength(payload);\n if (responseBytes > MAX_V1_PAYLOAD_BYTES) {\n this.log.warn(\"RPC Response payload too large for request \".concat(requestId, \". To send larger responses, consider updating the sending client.\"));\n this.publishRpcResponsePacket(destinationIdentity, requestId, null, RpcError.builtIn('RESPONSE_PAYLOAD_TOO_LARGE'));\n return;\n }\n this.publishRpcResponsePacket(destinationIdentity, requestId, payload, null);\n });\n }\n}class RemoteAudioTrack extends RemoteTrack {\n constructor(mediaTrack, sid, receiver, audioContext, audioOutput, loggerOptions) {\n super(mediaTrack, sid, Track.Kind.Audio, receiver, loggerOptions);\n this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {\n if (!this.receiver) {\n this._currentBitrate = 0;\n return;\n }\n const stats = yield this.getReceiverStats();\n if (stats && this.prevStats && this.receiver) {\n this._currentBitrate = computeBitrate(stats, this.prevStats);\n }\n this.prevStats = stats;\n });\n this.audioContext = audioContext;\n this.webAudioPluginNodes = [];\n if (audioOutput) {\n this.sinkId = audioOutput.deviceId;\n }\n }\n /**\n * sets the volume for all attached audio elements\n */\n setVolume(volume) {\n var _a;\n for (const el of this.attachedElements) {\n if (this.audioContext) {\n (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.gain.setTargetAtTime(volume, 0, 0.1);\n } else {\n el.volume = volume;\n }\n }\n if (isReactNative()) {\n // @ts-ignore\n this._mediaStreamTrack._setVolume(volume);\n }\n this.elementVolume = volume;\n }\n /**\n * gets the volume of attached audio elements (loudest)\n */\n getVolume() {\n if (this.elementVolume) {\n return this.elementVolume;\n }\n if (isReactNative()) {\n // RN volume value defaults to 1.0 if hasn't been changed.\n return 1.0;\n }\n let highestVolume = 0;\n this.attachedElements.forEach(element => {\n if (element.volume > highestVolume) {\n highestVolume = element.volume;\n }\n });\n return highestVolume;\n }\n /**\n * calls setSinkId on all attached elements, if supported\n * @param deviceId audio output device\n */\n setSinkId(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n this.sinkId = deviceId;\n yield Promise.all(this.attachedElements.map(elm => {\n if (!supportsSetSinkId(elm)) {\n return;\n }\n /* @ts-ignore */\n return elm.setSinkId(deviceId);\n }));\n });\n }\n attach(element) {\n const needsNewWebAudioConnection = this.attachedElements.length === 0;\n if (!element) {\n element = super.attach();\n } else {\n super.attach(element);\n }\n if (this.sinkId && supportsSetSinkId(element)) {\n element.setSinkId(this.sinkId).catch(e => {\n this.log.error('Failed to set sink id on remote audio track', e, this.logContext);\n });\n }\n if (this.audioContext && needsNewWebAudioConnection) {\n this.log.debug('using audio context mapping', this.logContext);\n this.connectWebAudio(this.audioContext, element);\n element.volume = 0;\n element.muted = true;\n }\n if (this.elementVolume) {\n // make sure volume setting is being applied to the newly attached element\n this.setVolume(this.elementVolume);\n }\n return element;\n }\n detach(element) {\n let detached;\n if (!element) {\n detached = super.detach();\n this.disconnectWebAudio();\n } else {\n detached = super.detach(element);\n // if there are still any attached elements after detaching, connect webaudio to the first element that's left\n // disconnect webaudio otherwise\n if (this.audioContext) {\n if (this.attachedElements.length > 0) {\n this.connectWebAudio(this.audioContext, this.attachedElements[0]);\n } else {\n this.disconnectWebAudio();\n }\n }\n }\n return detached;\n }\n /**\n * @internal\n * @experimental\n */\n setAudioContext(audioContext) {\n this.audioContext = audioContext;\n if (audioContext && this.attachedElements.length > 0) {\n this.connectWebAudio(audioContext, this.attachedElements[0]);\n } else if (!audioContext) {\n this.disconnectWebAudio();\n }\n }\n /**\n * @internal\n * @experimental\n * @param {AudioNode[]} nodes - An array of WebAudio nodes. These nodes should not be connected to each other when passed, as the sdk will take care of connecting them in the order of the array.\n */\n setWebAudioPlugins(nodes) {\n this.webAudioPluginNodes = nodes;\n if (this.attachedElements.length > 0 && this.audioContext) {\n this.connectWebAudio(this.audioContext, this.attachedElements[0]);\n }\n }\n connectWebAudio(context, element) {\n this.disconnectWebAudio();\n // @ts-ignore attached elements always have a srcObject set\n this.sourceNode = context.createMediaStreamSource(element.srcObject);\n let lastNode = this.sourceNode;\n this.webAudioPluginNodes.forEach(node => {\n lastNode.connect(node);\n lastNode = node;\n });\n this.gainNode = context.createGain();\n lastNode.connect(this.gainNode);\n this.gainNode.connect(context.destination);\n if (this.elementVolume) {\n this.gainNode.gain.setTargetAtTime(this.elementVolume, 0, 0.1);\n }\n // try to resume the context if it isn't running already\n if (context.state !== 'running') {\n context.resume().then(() => {\n if (context.state !== 'running') {\n this.emit(TrackEvent.AudioPlaybackFailed, new Error(\"Audio Context couldn't be started automatically\"));\n }\n }).catch(e => {\n this.emit(TrackEvent.AudioPlaybackFailed, e);\n });\n }\n }\n disconnectWebAudio() {\n var _a, _b;\n (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.disconnect();\n (_b = this.sourceNode) === null || _b === void 0 ? void 0 : _b.disconnect();\n this.gainNode = undefined;\n this.sourceNode = undefined;\n }\n getReceiverStats() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.receiver || !this.receiver.getStats) {\n return;\n }\n const stats = yield this.receiver.getStats();\n let receiverStats;\n stats.forEach(v => {\n if (v.type === 'inbound-rtp') {\n receiverStats = {\n type: 'audio',\n streamId: v.id,\n timestamp: v.timestamp,\n jitter: v.jitter,\n bytesReceived: v.bytesReceived,\n concealedSamples: v.concealedSamples,\n concealmentEvents: v.concealmentEvents,\n silentConcealedSamples: v.silentConcealedSamples,\n silentConcealmentEvents: v.silentConcealmentEvents,\n totalAudioEnergy: v.totalAudioEnergy,\n totalSamplesDuration: v.totalSamplesDuration\n };\n }\n });\n return receiverStats;\n });\n }\n}class TrackPublication extends eventsExports.EventEmitter {\n constructor(kind, id, name, loggerOptions) {\n var _a;\n super();\n this.metadataMuted = false;\n this.encryption = Encryption_Type.NONE;\n this.log = livekitLogger;\n this.handleMuted = () => {\n this.emit(TrackEvent.Muted);\n };\n this.handleUnmuted = () => {\n this.emit(TrackEvent.Unmuted);\n };\n this.log = getLogger((_a = loggerOptions === null || loggerOptions === void 0 ? void 0 : loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Publication);\n this.loggerContextCb = this.loggerContextCb;\n this.setMaxListeners(100);\n this.kind = kind;\n this.trackSid = id;\n this.trackName = name;\n this.source = Track.Source.Unknown;\n }\n /** @internal */\n setTrack(track) {\n if (this.track) {\n this.track.off(TrackEvent.Muted, this.handleMuted);\n this.track.off(TrackEvent.Unmuted, this.handleUnmuted);\n }\n this.track = track;\n if (track) {\n // forward events\n track.on(TrackEvent.Muted, this.handleMuted);\n track.on(TrackEvent.Unmuted, this.handleUnmuted);\n }\n }\n get logContext() {\n var _a;\n return Object.assign(Object.assign({}, (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)), getLogContextFromTrack(this));\n }\n get isMuted() {\n return this.metadataMuted;\n }\n get isEnabled() {\n return true;\n }\n get isSubscribed() {\n return this.track !== undefined;\n }\n get isEncrypted() {\n return this.encryption !== Encryption_Type.NONE;\n }\n /**\n * an [AudioTrack] if this publication holds an audio track\n */\n get audioTrack() {\n if (isAudioTrack(this.track)) {\n return this.track;\n }\n }\n /**\n * an [VideoTrack] if this publication holds a video track\n */\n get videoTrack() {\n if (isVideoTrack(this.track)) {\n return this.track;\n }\n }\n /** @internal */\n updateInfo(info) {\n this.trackSid = info.sid;\n this.trackName = info.name;\n this.source = Track.sourceFromProto(info.source);\n this.mimeType = info.mimeType;\n if (this.kind === Track.Kind.Video && info.width > 0) {\n this.dimensions = {\n width: info.width,\n height: info.height\n };\n this.simulcasted = info.simulcast;\n }\n this.encryption = info.encryption;\n this.trackInfo = info;\n this.log.debug('update publication info', Object.assign(Object.assign({}, this.logContext), {\n info\n }));\n }\n}\n(function (TrackPublication) {\n (function (SubscriptionStatus) {\n SubscriptionStatus[\"Desired\"] = \"desired\";\n SubscriptionStatus[\"Subscribed\"] = \"subscribed\";\n SubscriptionStatus[\"Unsubscribed\"] = \"unsubscribed\";\n })(TrackPublication.SubscriptionStatus || (TrackPublication.SubscriptionStatus = {}));\n (function (PermissionStatus) {\n PermissionStatus[\"Allowed\"] = \"allowed\";\n PermissionStatus[\"NotAllowed\"] = \"not_allowed\";\n })(TrackPublication.PermissionStatus || (TrackPublication.PermissionStatus = {}));\n})(TrackPublication || (TrackPublication = {}));class LocalTrackPublication extends TrackPublication {\n get isUpstreamPaused() {\n var _a;\n return (_a = this.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused;\n }\n constructor(kind, ti, track, loggerOptions) {\n super(kind, ti.sid, ti.name, loggerOptions);\n this.track = undefined;\n this.handleTrackEnded = () => {\n this.emit(TrackEvent.Ended);\n };\n this.handleCpuConstrained = () => {\n if (this.track && isVideoTrack(this.track)) {\n this.emit(TrackEvent.CpuConstrained, this.track);\n }\n };\n this.updateInfo(ti);\n this.setTrack(track);\n }\n setTrack(track) {\n if (this.track) {\n this.track.off(TrackEvent.Ended, this.handleTrackEnded);\n this.track.off(TrackEvent.CpuConstrained, this.handleCpuConstrained);\n }\n super.setTrack(track);\n if (track) {\n track.on(TrackEvent.Ended, this.handleTrackEnded);\n track.on(TrackEvent.CpuConstrained, this.handleCpuConstrained);\n }\n }\n get isMuted() {\n if (this.track) {\n return this.track.isMuted;\n }\n return super.isMuted;\n }\n get audioTrack() {\n return super.audioTrack;\n }\n get videoTrack() {\n return super.videoTrack;\n }\n get isLocal() {\n return true;\n }\n /**\n * Mute the track associated with this publication\n */\n mute() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n return (_a = this.track) === null || _a === void 0 ? void 0 : _a.mute();\n });\n }\n /**\n * Unmute track associated with this publication\n */\n unmute() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n return (_a = this.track) === null || _a === void 0 ? void 0 : _a.unmute();\n });\n }\n /**\n * Pauses the media stream track associated with this publication from being sent to the server\n * and signals \"muted\" event to other participants\n * Useful if you want to pause the stream without pausing the local media stream track\n */\n pauseUpstream() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.pauseUpstream();\n });\n }\n /**\n * Resumes sending the media stream track associated with this publication to the server after a call to [[pauseUpstream()]]\n * and signals \"unmuted\" event to other participants (unless the track is explicitly muted)\n */\n resumeUpstream() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.resumeUpstream();\n });\n }\n getTrackFeatures() {\n var _a;\n if (isAudioTrack(this.track)) {\n const settings = this.track.getSourceTrackSettings();\n const features = new Set();\n if (settings.autoGainControl) {\n features.add(AudioTrackFeature.TF_AUTO_GAIN_CONTROL);\n }\n if (settings.echoCancellation) {\n features.add(AudioTrackFeature.TF_ECHO_CANCELLATION);\n }\n if (settings.noiseSuppression) {\n features.add(AudioTrackFeature.TF_NOISE_SUPPRESSION);\n }\n if (settings.channelCount && settings.channelCount > 1) {\n features.add(AudioTrackFeature.TF_STEREO);\n }\n if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.dtx)) {\n features.add(AudioTrackFeature.TF_NO_DTX);\n }\n if (this.track.enhancedNoiseCancellation) {\n features.add(AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION);\n }\n return Array.from(features.values());\n } else return [];\n }\n}/**\n * Creates a local video and audio track at the same time. When acquiring both\n * audio and video tracks together, it'll display a single permission prompt to\n * the user instead of two separate ones.\n * @param options\n */\nfunction createLocalTracks(options, loggerOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n options !== null && options !== void 0 ? options : options = {};\n let attemptExactMatch = false;\n const _extractProcessorsFro = extractProcessorsFromOptions(options),\n audioProcessor = _extractProcessorsFro.audioProcessor,\n videoProcessor = _extractProcessorsFro.videoProcessor,\n internalOptions = _extractProcessorsFro.optionsWithoutProcessor;\n let retryAudioOptions = internalOptions.audio;\n let retryVideoOptions = internalOptions.video;\n if (audioProcessor && typeof internalOptions.audio === 'object') {\n internalOptions.audio.processor = audioProcessor;\n }\n if (videoProcessor && typeof internalOptions.video === 'object') {\n internalOptions.video.processor = videoProcessor;\n }\n // if the user passes a device id as a string, we default to exact match\n if (options.audio && typeof internalOptions.audio === 'object' && typeof internalOptions.audio.deviceId === 'string') {\n const deviceId = internalOptions.audio.deviceId;\n internalOptions.audio.deviceId = {\n exact: deviceId\n };\n attemptExactMatch = true;\n retryAudioOptions = Object.assign(Object.assign({}, internalOptions.audio), {\n deviceId: {\n ideal: deviceId\n }\n });\n }\n if (internalOptions.video && typeof internalOptions.video === 'object' && typeof internalOptions.video.deviceId === 'string') {\n const deviceId = internalOptions.video.deviceId;\n internalOptions.video.deviceId = {\n exact: deviceId\n };\n attemptExactMatch = true;\n retryVideoOptions = Object.assign(Object.assign({}, internalOptions.video), {\n deviceId: {\n ideal: deviceId\n }\n });\n }\n if (internalOptions.audio === true) {\n internalOptions.audio = {\n deviceId: 'default'\n };\n } else if (typeof internalOptions.audio === 'object' && internalOptions.audio !== null) {\n internalOptions.audio = Object.assign(Object.assign({}, internalOptions.audio), {\n deviceId: internalOptions.audio.deviceId || 'default'\n });\n }\n if (internalOptions.video === true) {\n internalOptions.video = {\n deviceId: 'default'\n };\n } else if (typeof internalOptions.video === 'object' && !internalOptions.video.deviceId) {\n internalOptions.video.deviceId = 'default';\n }\n const opts = mergeDefaultOptions(internalOptions, audioDefaults, videoDefaults);\n const constraints = constraintsForOptions(opts);\n // Keep a reference to the promise on DeviceManager and await it in getLocalDevices()\n // works around iOS Safari Bug https://bugs.webkit.org/show_bug.cgi?id=179363\n const mediaPromise = navigator.mediaDevices.getUserMedia(constraints);\n if (internalOptions.audio) {\n DeviceManager.userMediaPromiseMap.set('audioinput', mediaPromise);\n mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('audioinput'));\n }\n if (internalOptions.video) {\n DeviceManager.userMediaPromiseMap.set('videoinput', mediaPromise);\n mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('videoinput'));\n }\n try {\n const stream = yield mediaPromise;\n return yield Promise.all(stream.getTracks().map(mediaStreamTrack => __awaiter(this, void 0, void 0, function* () {\n const isAudio = mediaStreamTrack.kind === 'audio';\n let trackConstraints;\n const conOrBool = isAudio ? constraints.audio : constraints.video;\n if (typeof conOrBool !== 'boolean') {\n trackConstraints = conOrBool;\n }\n // update the constraints with the device id the user gave permissions to in the permission prompt\n // otherwise each track restart (e.g. mute - unmute) will try to initialize the device again -> causing additional permission prompts\n const newDeviceId = mediaStreamTrack.getSettings().deviceId;\n if ((trackConstraints === null || trackConstraints === void 0 ? void 0 : trackConstraints.deviceId) && unwrapConstraint(trackConstraints.deviceId) !== newDeviceId) {\n trackConstraints.deviceId = newDeviceId;\n } else if (!trackConstraints) {\n trackConstraints = {\n deviceId: newDeviceId\n };\n }\n const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints, loggerOptions);\n if (track.kind === Track.Kind.Video) {\n track.source = Track.Source.Camera;\n } else if (track.kind === Track.Kind.Audio) {\n track.source = Track.Source.Microphone;\n }\n track.mediaStream = stream;\n if (isAudioTrack(track) && audioProcessor) {\n yield track.setProcessor(audioProcessor);\n } else if (isVideoTrack(track) && videoProcessor) {\n yield track.setProcessor(videoProcessor);\n }\n return track;\n })));\n } catch (e) {\n if (!attemptExactMatch) {\n throw e;\n }\n return createLocalTracks(Object.assign(Object.assign({}, options), {\n audio: retryAudioOptions,\n video: retryVideoOptions\n }), loggerOptions);\n }\n });\n}\n/**\n * Creates a [[LocalVideoTrack]] with getUserMedia()\n * @param options\n */\nfunction createLocalVideoTrack(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const tracks = yield createLocalTracks({\n audio: false,\n video: options !== null && options !== void 0 ? options : true\n });\n return tracks[0];\n });\n}\nfunction createLocalAudioTrack(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const tracks = yield createLocalTracks({\n audio: options !== null && options !== void 0 ? options : true,\n video: false\n });\n return tracks[0];\n });\n}\n/**\n * Creates a screen capture tracks with getDisplayMedia().\n * A LocalVideoTrack is always created and returned.\n * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n */\nfunction createLocalScreenTracks(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options === undefined) {\n options = {};\n }\n if (options.resolution === undefined && !isSafari17Based()) {\n options.resolution = ScreenSharePresets.h1080fps30.resolution;\n }\n if (navigator.mediaDevices.getDisplayMedia === undefined) {\n throw new DeviceUnsupportedError('getDisplayMedia not supported');\n }\n const constraints = screenCaptureToDisplayMediaStreamOptions(options);\n const stream = yield navigator.mediaDevices.getDisplayMedia(constraints);\n const tracks = stream.getVideoTracks();\n if (tracks.length === 0) {\n throw new TrackInvalidError('no video track found');\n }\n const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);\n screenVideo.source = Track.Source.ScreenShare;\n const localTracks = [screenVideo];\n if (stream.getAudioTracks().length > 0) {\n const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);\n screenAudio.source = Track.Source.ScreenShareAudio;\n localTracks.push(screenAudio);\n }\n return localTracks;\n });\n}var ConnectionQuality;\n(function (ConnectionQuality) {\n ConnectionQuality[\"Excellent\"] = \"excellent\";\n ConnectionQuality[\"Good\"] = \"good\";\n ConnectionQuality[\"Poor\"] = \"poor\";\n /**\n * Indicates that a participant has temporarily (or permanently) lost connection to LiveKit.\n * For permanent disconnection a `ParticipantDisconnected` event will be emitted after a timeout\n */\n ConnectionQuality[\"Lost\"] = \"lost\";\n ConnectionQuality[\"Unknown\"] = \"unknown\";\n})(ConnectionQuality || (ConnectionQuality = {}));\nfunction qualityFromProto(q) {\n switch (q) {\n case ConnectionQuality$1.EXCELLENT:\n return ConnectionQuality.Excellent;\n case ConnectionQuality$1.GOOD:\n return ConnectionQuality.Good;\n case ConnectionQuality$1.POOR:\n return ConnectionQuality.Poor;\n case ConnectionQuality$1.LOST:\n return ConnectionQuality.Lost;\n default:\n return ConnectionQuality.Unknown;\n }\n}\nclass Participant extends eventsExports.EventEmitter {\n get logContext() {\n var _a, _b;\n return Object.assign({}, (_b = (_a = this.loggerOptions) === null || _a === void 0 ? void 0 : _a.loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n }\n get isEncrypted() {\n return this.trackPublications.size > 0 && Array.from(this.trackPublications.values()).every(tr => tr.isEncrypted);\n }\n get isAgent() {\n var _a;\n return ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.agent) || this.kind === ParticipantInfo_Kind.AGENT;\n }\n get isActive() {\n var _a;\n return ((_a = this.participantInfo) === null || _a === void 0 ? void 0 : _a.state) === ParticipantInfo_State.ACTIVE;\n }\n get kind() {\n return this._kind;\n }\n /** participant attributes, similar to metadata, but as a key/value map */\n get attributes() {\n return Object.freeze(Object.assign({}, this._attributes));\n }\n /** @internal */\n constructor(sid, identity, name, metadata, attributes, loggerOptions) {\n let kind = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : ParticipantInfo_Kind.STANDARD;\n var _a;\n super();\n /** audio level between 0-1.0, 1 being loudest, 0 being softest */\n this.audioLevel = 0;\n /** if participant is currently speaking */\n this.isSpeaking = false;\n this._connectionQuality = ConnectionQuality.Unknown;\n this.log = livekitLogger;\n this.loggerOptions = loggerOptions;\n this.log = getLogger((_a = loggerOptions === null || loggerOptions === void 0 ? void 0 : loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Participant, () => this.logContext);\n this.setMaxListeners(100);\n this.sid = sid;\n this.identity = identity;\n this.name = name;\n this.metadata = metadata;\n this.audioTrackPublications = new Map();\n this.videoTrackPublications = new Map();\n this.trackPublications = new Map();\n this._kind = kind;\n this._attributes = attributes !== null && attributes !== void 0 ? attributes : {};\n }\n getTrackPublications() {\n return Array.from(this.trackPublications.values());\n }\n /**\n * Finds the first track that matches the source filter, for example, getting\n * the user's camera track with getTrackBySource(Track.Source.Camera).\n */\n getTrackPublication(source) {\n for (const _ref of this.trackPublications) {\n var _ref2 = _slicedToArray(_ref, 2);\n const pub = _ref2[1];\n if (pub.source === source) {\n return pub;\n }\n }\n }\n /**\n * Finds the first track that matches the track's name.\n */\n getTrackPublicationByName(name) {\n for (const _ref3 of this.trackPublications) {\n var _ref4 = _slicedToArray(_ref3, 2);\n const pub = _ref4[1];\n if (pub.trackName === name) {\n return pub;\n }\n }\n }\n /**\n * Waits until the participant is active and ready to receive data messages\n * @returns a promise that resolves when the participant is active\n */\n waitUntilActive() {\n if (this.isActive) {\n return Promise.resolve();\n }\n if (this.activeFuture) {\n return this.activeFuture.promise;\n }\n this.activeFuture = new Future();\n this.once(ParticipantEvent.Active, () => {\n var _a, _b;\n (_b = (_a = this.activeFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.activeFuture = undefined;\n });\n return this.activeFuture.promise;\n }\n get connectionQuality() {\n return this._connectionQuality;\n }\n get isCameraEnabled() {\n var _a;\n const track = this.getTrackPublication(Track.Source.Camera);\n return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);\n }\n get isMicrophoneEnabled() {\n var _a;\n const track = this.getTrackPublication(Track.Source.Microphone);\n return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);\n }\n get isScreenShareEnabled() {\n const track = this.getTrackPublication(Track.Source.ScreenShare);\n return !!track;\n }\n get isLocal() {\n return false;\n }\n /** when participant joined the room */\n get joinedAt() {\n if (this.participantInfo) {\n return new Date(Number.parseInt(this.participantInfo.joinedAt.toString()) * 1000);\n }\n return new Date();\n }\n /** @internal */\n updateInfo(info) {\n var _a;\n // it's possible the update could be applied out of order due to await\n // during reconnect sequences. when that happens, it's possible for server\n // to have sent more recent version of participant info while JS is waiting\n // to process the existing payload.\n // when the participant sid remains the same, and we already have a later version\n // of the payload, they can be safely skipped\n if (this.participantInfo && this.participantInfo.sid === info.sid && this.participantInfo.version > info.version) {\n return false;\n }\n this.identity = info.identity;\n this.sid = info.sid;\n this._setName(info.name);\n this._setMetadata(info.metadata);\n this._setAttributes(info.attributes);\n if (info.state === ParticipantInfo_State.ACTIVE && ((_a = this.participantInfo) === null || _a === void 0 ? void 0 : _a.state) !== ParticipantInfo_State.ACTIVE) {\n this.emit(ParticipantEvent.Active);\n }\n if (info.permission) {\n this.setPermissions(info.permission);\n }\n // set this last so setMetadata can detect changes\n this.participantInfo = info;\n return true;\n }\n /**\n * Updates metadata from server\n **/\n _setMetadata(md) {\n const changed = this.metadata !== md;\n const prevMetadata = this.metadata;\n this.metadata = md;\n if (changed) {\n this.emit(ParticipantEvent.ParticipantMetadataChanged, prevMetadata);\n }\n }\n _setName(name) {\n const changed = this.name !== name;\n this.name = name;\n if (changed) {\n this.emit(ParticipantEvent.ParticipantNameChanged, name);\n }\n }\n /**\n * Updates metadata from server\n **/\n _setAttributes(attributes) {\n const diff = diffAttributes(this.attributes, attributes);\n this._attributes = attributes;\n if (Object.keys(diff).length > 0) {\n this.emit(ParticipantEvent.AttributesChanged, diff);\n }\n }\n /** @internal */\n setPermissions(permissions) {\n var _a, _b, _c, _d, _e, _f;\n const prevPermissions = this.permissions;\n const changed = permissions.canPublish !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublish) || permissions.canSubscribe !== ((_b = this.permissions) === null || _b === void 0 ? void 0 : _b.canSubscribe) || permissions.canPublishData !== ((_c = this.permissions) === null || _c === void 0 ? void 0 : _c.canPublishData) || permissions.hidden !== ((_d = this.permissions) === null || _d === void 0 ? void 0 : _d.hidden) || permissions.recorder !== ((_e = this.permissions) === null || _e === void 0 ? void 0 : _e.recorder) || permissions.canPublishSources.length !== this.permissions.canPublishSources.length || permissions.canPublishSources.some((value, index) => {\n var _a;\n return value !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublishSources[index]);\n }) || permissions.canSubscribeMetrics !== ((_f = this.permissions) === null || _f === void 0 ? void 0 : _f.canSubscribeMetrics);\n this.permissions = permissions;\n if (changed) {\n this.emit(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions);\n }\n return changed;\n }\n /** @internal */\n setIsSpeaking(speaking) {\n if (speaking === this.isSpeaking) {\n return;\n }\n this.isSpeaking = speaking;\n if (speaking) {\n this.lastSpokeAt = new Date();\n }\n this.emit(ParticipantEvent.IsSpeakingChanged, speaking);\n }\n /** @internal */\n setConnectionQuality(q) {\n const prevQuality = this._connectionQuality;\n this._connectionQuality = qualityFromProto(q);\n if (prevQuality !== this._connectionQuality) {\n this.emit(ParticipantEvent.ConnectionQualityChanged, this._connectionQuality);\n }\n }\n /**\n * @internal\n */\n setDisconnected() {\n var _a, _b;\n if (this.activeFuture) {\n (_b = (_a = this.activeFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, new Error('Participant disconnected'));\n this.activeFuture = undefined;\n }\n }\n /**\n * @internal\n */\n setAudioContext(ctx) {\n this.audioContext = ctx;\n this.audioTrackPublications.forEach(track => isAudioTrack(track.track) && track.track.setAudioContext(ctx));\n }\n addTrackPublication(publication) {\n // forward publication driven events\n publication.on(TrackEvent.Muted, () => {\n this.emit(ParticipantEvent.TrackMuted, publication);\n });\n publication.on(TrackEvent.Unmuted, () => {\n this.emit(ParticipantEvent.TrackUnmuted, publication);\n });\n const pub = publication;\n if (pub.track) {\n pub.track.sid = publication.trackSid;\n }\n this.trackPublications.set(publication.trackSid, publication);\n switch (publication.kind) {\n case Track.Kind.Audio:\n this.audioTrackPublications.set(publication.trackSid, publication);\n break;\n case Track.Kind.Video:\n this.videoTrackPublications.set(publication.trackSid, publication);\n break;\n }\n }\n}function trackPermissionToProto(perms) {\n var _a, _b, _c;\n if (!perms.participantSid && !perms.participantIdentity) {\n throw new Error('Invalid track permission, must provide at least one of participantIdentity and participantSid');\n }\n return new TrackPermission({\n participantIdentity: (_a = perms.participantIdentity) !== null && _a !== void 0 ? _a : '',\n participantSid: (_b = perms.participantSid) !== null && _b !== void 0 ? _b : '',\n allTracks: (_c = perms.allowAll) !== null && _c !== void 0 ? _c : false,\n trackSids: perms.allowedTrackSids || []\n });\n}class LocalParticipant extends Participant {\n /** @internal */\n constructor(sid, identity, engine, options, roomOutgoingDataStreamManager, roomOutgoingDataTrackManager, rpcClientManager, rpcServerManager) {\n super(sid, identity, undefined, undefined, undefined, {\n loggerName: options.loggerName,\n loggerContextCb: () => this.engine.logContext\n });\n this.pendingPublishing = new Set();\n this.pendingPublishPromises = new Map();\n this.participantTrackPermissions = [];\n this.allParticipantsAllowedToSubscribe = true;\n this.encryptionType = Encryption_Type.NONE;\n this.e2eeStateMutex = new _();\n this.enabledPublishVideoCodecs = [];\n this.handleReconnecting = () => {\n if (!this.reconnectFuture) {\n this.reconnectFuture = new Future();\n }\n };\n this.handleReconnected = () => {\n var _a, _b;\n (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.reconnectFuture = undefined;\n this.updateTrackSubscriptionPermissions();\n };\n this.handleClosing = () => {\n var _a, _b, _c, _d, _e, _f;\n if (this.reconnectFuture) {\n // @throws-transformer ignore - introduced due to adding Throws into Future, investigate this\n // further\n this.reconnectFuture.promise.catch(e => this.log.warn(e.message));\n (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.reject) === null || _b === void 0 ? void 0 : _b.call(_a, new Error('Got disconnected during reconnection attempt'));\n this.reconnectFuture = undefined;\n }\n if (this.signalConnectedFuture) {\n (_d = (_c = this.signalConnectedFuture).reject) === null || _d === void 0 ? void 0 : _d.call(_c, new Error('Got disconnected without signal connected'));\n this.signalConnectedFuture = undefined;\n }\n (_f = (_e = this.activeAgentFuture) === null || _e === void 0 ? void 0 : _e.reject) === null || _f === void 0 ? void 0 : _f.call(_e, new Error('Got disconnected without active agent present'));\n this.activeAgentFuture = undefined;\n this.firstActiveAgent = undefined;\n };\n this.handleSignalConnected = joinResponse => {\n var _a, _b;\n if (joinResponse.participant) {\n this.updateInfo(joinResponse.participant);\n }\n if (!this.signalConnectedFuture) {\n this.signalConnectedFuture = new Future();\n }\n (_b = (_a = this.signalConnectedFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n this.handleSignalRequestResponse = response => {\n const requestId = response.requestId,\n reason = response.reason,\n message = response.message;\n const targetRequest = this.pendingSignalRequests.get(requestId);\n if (targetRequest) {\n if (reason !== RequestResponse_Reason.OK) {\n targetRequest.reject(new SignalRequestError(message, reason));\n }\n this.pendingSignalRequests.delete(requestId);\n }\n switch (response.request.case) {\n case 'publishDataTrack':\n {\n let error;\n switch (response.reason) {\n case RequestResponse_Reason.NOT_ALLOWED:\n error = DataTrackPublishError.notAllowed(response.message);\n break;\n case RequestResponse_Reason.DUPLICATE_NAME:\n error = DataTrackPublishError.duplicateName(response.message);\n break;\n case RequestResponse_Reason.INVALID_NAME:\n error = DataTrackPublishError.invalidName(response.message);\n break;\n case RequestResponse_Reason.LIMIT_EXCEEDED:\n error = DataTrackPublishError.limitReached(response.message);\n break;\n default:\n error = DataTrackPublishError.unknown(response.reason, response.message);\n break;\n }\n this.roomOutgoingDataTrackManager.receivedSfuPublishResponse(response.request.value.pubHandle, {\n type: 'error',\n error\n });\n break;\n }\n }\n };\n this.updateTrackSubscriptionPermissions = () => {\n this.log.debug('updating track subscription permissions', {\n allParticipantsAllowed: this.allParticipantsAllowedToSubscribe,\n participantTrackPermissions: this.participantTrackPermissions\n });\n this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe, this.participantTrackPermissions.map(p => trackPermissionToProto(p)));\n };\n /** @internal */\n this.onTrackUnmuted = track => {\n this.onTrackMuted(track, track.isUpstreamPaused);\n };\n // when the local track changes in mute status, we'll notify server as such\n /** @internal */\n this.onTrackMuted = (track, muted) => {\n if (muted === undefined) {\n muted = true;\n }\n if (!track.sid) {\n this.log.error('could not update mute status for unpublished track', getLogContextFromTrack(track));\n return;\n }\n this.engine.updateMuteStatus(track.sid, muted);\n };\n this.onTrackUpstreamPaused = track => {\n this.log.debug('upstream paused', getLogContextFromTrack(track));\n this.onTrackMuted(track, true);\n };\n this.onTrackUpstreamResumed = track => {\n this.log.debug('upstream resumed', getLogContextFromTrack(track));\n this.onTrackMuted(track, track.isMuted);\n };\n this.onTrackFeatureUpdate = track => {\n const pub = this.audioTrackPublications.get(track.sid);\n if (!pub) {\n this.log.warn(\"Could not update local audio track settings, missing publication for track \".concat(track.sid));\n return;\n }\n this.engine.client.sendUpdateLocalAudioTrack(pub.trackSid, pub.getTrackFeatures());\n };\n this.onTrackCpuConstrained = (track, publication) => {\n this.log.debug('track cpu constrained', getLogContextFromTrack(publication));\n this.emit(ParticipantEvent.LocalTrackCpuConstrained, track, publication);\n };\n this.handleSubscribedQualityUpdate = update => __awaiter(this, void 0, void 0, function* () {\n var _a, e_1, _b, _c;\n var _d;\n if (!((_d = this.roomOptions) === null || _d === void 0 ? void 0 : _d.dynacast)) {\n return;\n }\n const pub = this.videoTrackPublications.get(update.trackSid);\n if (!pub) {\n this.log.warn('received subscribed quality update for unknown track', {\n trackSid: update.trackSid\n });\n return;\n }\n if (!pub.videoTrack) {\n return;\n }\n const newCodecs = yield pub.videoTrack.setPublishingCodecs(update.subscribedCodecs);\n try {\n for (var _e = true, newCodecs_1 = __asyncValues(newCodecs), newCodecs_1_1; newCodecs_1_1 = yield newCodecs_1.next(), _a = newCodecs_1_1.done, !_a; _e = true) {\n _c = newCodecs_1_1.value;\n _e = false;\n const codec = _c;\n if (isBackupCodec(codec)) {\n this.log.debug(\"publish \".concat(codec, \" for \").concat(pub.videoTrack.sid), getLogContextFromTrack(pub));\n yield this.publishAdditionalCodecForTrack(pub.videoTrack, codec, pub.options);\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (!_e && !_a && (_b = newCodecs_1.return)) yield _b.call(newCodecs_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n });\n this.handleLocalTrackUnpublished = unpublished => {\n const track = this.trackPublications.get(unpublished.trackSid);\n if (!track) {\n this.log.warn('received unpublished event for unknown track', {\n trackSid: unpublished.trackSid\n });\n return;\n }\n this.unpublishTrack(track.track);\n };\n this.handleTrackEnded = track => __awaiter(this, void 0, void 0, function* () {\n if (track.source === Track.Source.ScreenShare || track.source === Track.Source.ScreenShareAudio) {\n this.log.debug('unpublishing local track due to TrackEnded', getLogContextFromTrack(track));\n this.unpublishTrack(track);\n } else if (track.isUserProvided) {\n yield track.mute();\n } else if (isLocalAudioTrack(track) || isLocalVideoTrack(track)) {\n try {\n if (isWeb()) {\n try {\n const currentPermissions = yield navigator === null || navigator === void 0 ? void 0 : navigator.permissions.query({\n // the permission query for camera and microphone currently not supported in Safari and Firefox\n // @ts-ignore\n name: track.source === Track.Source.Camera ? 'camera' : 'microphone'\n });\n if (currentPermissions && currentPermissions.state === 'denied') {\n this.log.warn(\"user has revoked access to \".concat(track.source), getLogContextFromTrack(track));\n // detect granted change after permissions were denied to try and resume then\n currentPermissions.onchange = () => {\n if (currentPermissions.state !== 'denied') {\n if (!track.isMuted) {\n track.restartTrack();\n }\n currentPermissions.onchange = null;\n }\n };\n throw new Error('GetUserMedia Permission denied');\n }\n } catch (e) {\n // permissions query fails for firefox, we continue and try to restart the track\n }\n }\n if (!track.isMuted) {\n this.log.debug('track ended, attempting to use a different device', getLogContextFromTrack(track));\n if (isLocalAudioTrack(track)) {\n // fall back to default device if available\n yield track.restartTrack({\n deviceId: 'default'\n });\n } else {\n yield track.restartTrack();\n }\n }\n } catch (e) {\n this.log.warn(\"could not restart track, muting instead\", getLogContextFromTrack(track));\n yield track.mute();\n }\n }\n });\n this.audioTrackPublications = new Map();\n this.videoTrackPublications = new Map();\n this.trackPublications = new Map();\n this.engine = engine;\n this.roomOptions = options;\n this.setupEngine(engine);\n this.activeDeviceMap = new Map([['audioinput', 'default'], ['videoinput', 'default'], ['audiooutput', 'default']]);\n this.pendingSignalRequests = new Map();\n this.roomOutgoingDataStreamManager = roomOutgoingDataStreamManager;\n this.roomOutgoingDataTrackManager = roomOutgoingDataTrackManager;\n this.rpcClientManager = rpcClientManager;\n this.rpcServerManager = rpcServerManager;\n }\n get lastCameraError() {\n return this.cameraError;\n }\n get lastMicrophoneError() {\n return this.microphoneError;\n }\n get isE2EEEnabled() {\n return this.encryptionType !== Encryption_Type.NONE;\n }\n getTrackPublication(source) {\n const track = super.getTrackPublication(source);\n if (track) {\n return track;\n }\n }\n getTrackPublicationByName(name) {\n const track = super.getTrackPublicationByName(name);\n if (track) {\n return track;\n }\n }\n /**\n * @internal\n */\n setupEngine(engine) {\n var _a;\n this.engine = engine;\n this.engine.on(EngineEvent.RemoteMute, (trackSid, muted) => {\n const pub = this.trackPublications.get(trackSid);\n if (!pub || !pub.track) {\n return;\n }\n if (muted) {\n pub.mute();\n } else {\n pub.unmute();\n }\n });\n if ((_a = this.signalConnectedFuture) === null || _a === void 0 ? void 0 : _a.isResolved) {\n this.signalConnectedFuture = undefined;\n }\n this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.SignalConnected, this.handleSignalConnected).on(EngineEvent.SignalRestarted, this.handleReconnected).on(EngineEvent.SignalResumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.LocalTrackUnpublished, this.handleLocalTrackUnpublished).on(EngineEvent.SubscribedQualityUpdate, this.handleSubscribedQualityUpdate).on(EngineEvent.Closing, this.handleClosing).on(EngineEvent.SignalRequestResponse, this.handleSignalRequestResponse);\n }\n /**\n * Sets and updates the metadata of the local participant.\n * Note: this requires `canUpdateOwnMetadata` permission.\n * method will throw if the user doesn't have the required permissions\n * @param metadata\n */\n setMetadata(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.requestMetadataUpdate({\n metadata\n });\n });\n }\n /**\n * Sets and updates the name of the local participant.\n * Note: this requires `canUpdateOwnMetadata` permission.\n * method will throw if the user doesn't have the required permissions\n * @param metadata\n */\n setName(name) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.requestMetadataUpdate({\n name\n });\n });\n }\n /**\n * Set or update participant attributes. It will make updates only to keys that\n * are present in `attributes`, and will not override others.\n * Note: this requires `canUpdateOwnMetadata` permission.\n * @param attributes attributes to update\n */\n setAttributes(attributes) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.requestMetadataUpdate({\n attributes\n });\n });\n }\n requestMetadataUpdate(_a) {\n return __awaiter(this, arguments, void 0, function (_ref) {\n var _this = this;\n let metadata = _ref.metadata,\n name = _ref.name,\n attributes = _ref.attributes;\n return function* () {\n return new TypedPromise((resolve, reject) => __awaiter(_this, void 0, void 0, function* () {\n var _a, _b;\n try {\n let isRejected = false;\n const requestId = yield this.engine.client.sendUpdateLocalMetadata((_a = metadata !== null && metadata !== void 0 ? metadata : this.metadata) !== null && _a !== void 0 ? _a : '', (_b = name !== null && name !== void 0 ? name : this.name) !== null && _b !== void 0 ? _b : '', attributes);\n const startTime = performance.now();\n this.pendingSignalRequests.set(requestId, {\n resolve,\n reject: error => {\n reject(error);\n isRejected = true;\n },\n values: {\n name,\n metadata,\n attributes\n }\n });\n while (performance.now() - startTime < 5000 && !isRejected) {\n if ((!name || this.name === name) && (!metadata || this.metadata === metadata) && (!attributes || Object.entries(attributes).every(_ref2 => {\n let _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n value = _ref3[1];\n return this.attributes[key] === value || value === '' && !this.attributes[key];\n }))) {\n this.pendingSignalRequests.delete(requestId);\n resolve();\n return;\n }\n yield sleep(50);\n }\n reject(new SignalRequestError('Request to update local metadata timed out', 'TimeoutError'));\n } catch (e) {\n if (e instanceof Error) {\n reject(e);\n } else {\n reject(new Error(String(e)));\n }\n }\n }));\n }();\n });\n }\n /**\n * Enable or disable a participant's camera track.\n *\n * If a track has already published, it'll mute or unmute the track.\n * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n */\n setCameraEnabled(enabled, options, publishOptions) {\n return this.setTrackEnabled(Track.Source.Camera, enabled, options, publishOptions);\n }\n /**\n * Enable or disable a participant's microphone track.\n *\n * If a track has already published, it'll mute or unmute the track.\n * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n */\n setMicrophoneEnabled(enabled, options, publishOptions) {\n return this.setTrackEnabled(Track.Source.Microphone, enabled, options, publishOptions);\n }\n /**\n * Start or stop sharing a participant's screen\n * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n */\n setScreenShareEnabled(enabled, options, publishOptions) {\n return this.setTrackEnabled(Track.Source.ScreenShare, enabled, options, publishOptions);\n }\n /** @internal */\n setE2EEEnabled(enabled) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.e2eeStateMutex.lock();\n try {\n this.encryptionType = enabled ? Encryption_Type.GCM : Encryption_Type.NONE;\n yield Promise.all(this.pendingPublishPromises.values());\n if (this.trackPublications.size === 0 || Array.from(this.trackPublications.values()).every(pub => pub.isEncrypted === enabled)) {\n return;\n }\n yield this.republishAllTracks(undefined, false);\n } finally {\n unlock();\n }\n });\n }\n setTrackEnabled(source, enabled, options, publishOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n this.log.debug('setTrackEnabled', {\n source,\n enabled\n });\n if (this.republishPromise) {\n yield this.republishPromise;\n }\n let track = this.getTrackPublication(source);\n if (enabled) {\n if (track) {\n yield track.unmute();\n } else {\n let localTracks;\n if (this.pendingPublishing.has(source)) {\n const pendingTrack = yield this.waitForPendingPublicationOfSource(source);\n if (!pendingTrack) {\n this.log.info('waiting for pending publication promise timed out', {\n source\n });\n }\n yield pendingTrack === null || pendingTrack === void 0 ? void 0 : pendingTrack.unmute();\n return pendingTrack;\n }\n this.pendingPublishing.add(source);\n try {\n switch (source) {\n case Track.Source.Camera:\n localTracks = yield this.createTracks({\n video: (_a = options) !== null && _a !== void 0 ? _a : true\n });\n break;\n case Track.Source.Microphone:\n localTracks = yield this.createTracks({\n audio: (_b = options) !== null && _b !== void 0 ? _b : true\n });\n break;\n case Track.Source.ScreenShare:\n localTracks = yield this.createScreenTracks(Object.assign({}, options));\n break;\n default:\n throw new TrackInvalidError(source);\n }\n } catch (e) {\n localTracks === null || localTracks === void 0 ? void 0 : localTracks.forEach(tr => {\n tr.stop();\n });\n if (e instanceof Error) {\n this.emit(ParticipantEvent.MediaDevicesError, e, sourceToKind(source));\n }\n this.pendingPublishing.delete(source);\n throw e;\n }\n for (const localTrack of localTracks) {\n const opts = Object.assign(Object.assign({}, this.roomOptions.publishDefaults), options);\n if (source === Track.Source.Microphone && isAudioTrack(localTrack) && opts.preConnectBuffer) {\n this.log.info('starting preconnect buffer for microphone');\n localTrack.startPreConnectBuffer();\n }\n }\n try {\n const publishPromises = [];\n for (const localTrack of localTracks) {\n this.log.info('publishing track', getLogContextFromTrack(localTrack));\n publishPromises.push(this.publishTrack(localTrack, publishOptions));\n }\n const publishedTracks = yield Promise.all(publishPromises);\n // for screen share publications including audio, this will only return the screen share publication, not the screen share audio one\n // revisit if we want to return an array of tracks instead for v2\n var _publishedTracks = _slicedToArray(publishedTracks, 1);\n track = _publishedTracks[0];\n } catch (e) {\n localTracks === null || localTracks === void 0 ? void 0 : localTracks.forEach(tr => {\n tr.stop();\n });\n throw e;\n } finally {\n this.pendingPublishing.delete(source);\n }\n }\n } else {\n if (!(track === null || track === void 0 ? void 0 : track.track) && this.pendingPublishing.has(source)) {\n // if there's no track available yet first wait for pending publishing promises of that source to see if it becomes available\n track = yield this.waitForPendingPublicationOfSource(source);\n if (!track) {\n this.log.info('waiting for pending publication promise timed out', {\n source\n });\n }\n }\n if (track && track.track) {\n // screenshare cannot be muted, unpublish instead\n if (source === Track.Source.ScreenShare) {\n const unpublishPromises = [this.unpublishTrack(track.track)];\n const screenAudioTrack = this.getTrackPublication(Track.Source.ScreenShareAudio);\n if (screenAudioTrack && screenAudioTrack.track) {\n unpublishPromises.push(this.unpublishTrack(screenAudioTrack.track));\n }\n var _yield$Promise$all = yield Promise.all(unpublishPromises);\n var _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 1);\n track = _yield$Promise$all2[0];\n } else {\n yield track.mute();\n }\n }\n }\n return track;\n });\n }\n /**\n * Publish both camera and microphone at the same time. This is useful for\n * displaying a single Permission Dialog box to the end user.\n */\n enableCameraAndMicrophone() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.pendingPublishing.has(Track.Source.Camera) || this.pendingPublishing.has(Track.Source.Microphone)) {\n // no-op it's already been requested\n return;\n }\n this.pendingPublishing.add(Track.Source.Camera);\n this.pendingPublishing.add(Track.Source.Microphone);\n try {\n const tracks = yield this.createTracks({\n audio: true,\n video: true\n });\n yield Promise.all(tracks.map(track => this.publishTrack(track)));\n } finally {\n this.pendingPublishing.delete(Track.Source.Camera);\n this.pendingPublishing.delete(Track.Source.Microphone);\n }\n });\n }\n /**\n * Create local camera and/or microphone tracks\n * @param options\n * @returns\n */\n createTracks(options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n options !== null && options !== void 0 ? options : options = {};\n const mergedOptionsWithProcessors = mergeDefaultOptions(options, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.audioCaptureDefaults, (_b = this.roomOptions) === null || _b === void 0 ? void 0 : _b.videoCaptureDefaults);\n try {\n const tracks = yield createLocalTracks(mergedOptionsWithProcessors, {\n loggerName: this.roomOptions.loggerName,\n loggerContextCb: () => this.logContext\n });\n const localTracks = tracks.map(track => {\n if (isAudioTrack(track)) {\n this.microphoneError = undefined;\n track.setAudioContext(this.audioContext);\n track.source = Track.Source.Microphone;\n this.emit(ParticipantEvent.AudioStreamAcquired);\n }\n if (isVideoTrack(track)) {\n this.cameraError = undefined;\n track.source = Track.Source.Camera;\n }\n return track;\n });\n return localTracks;\n } catch (err) {\n if (err instanceof Error) {\n if (options.audio) {\n this.microphoneError = err;\n }\n if (options.video) {\n this.cameraError = err;\n }\n }\n throw err;\n }\n });\n }\n /**\n * Creates a screen capture tracks with getDisplayMedia().\n * A LocalVideoTrack is always created and returned.\n * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n */\n createScreenTracks(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options === undefined) {\n options = {};\n }\n if (navigator.mediaDevices.getDisplayMedia === undefined) {\n throw new DeviceUnsupportedError('getDisplayMedia not supported');\n }\n if (options.resolution === undefined && !isSafari17Based()) {\n // we need to constrain the dimensions, otherwise it could lead to low bitrate\n // due to encoding a huge video. Encoding such large surfaces is really expensive\n // unfortunately Safari 17 has a but and cannot be constrained by default\n options.resolution = ScreenSharePresets.h1080fps30.resolution;\n }\n const constraints = screenCaptureToDisplayMediaStreamOptions(options);\n const stream = yield navigator.mediaDevices.getDisplayMedia(constraints);\n const tracks = stream.getVideoTracks();\n if (tracks.length === 0) {\n throw new TrackInvalidError('no video track found');\n }\n const screenVideo = new LocalVideoTrack(tracks[0], undefined, false, {\n loggerName: this.roomOptions.loggerName,\n loggerContextCb: () => this.logContext\n });\n screenVideo.source = Track.Source.ScreenShare;\n if (options.contentHint) {\n screenVideo.mediaStreamTrack.contentHint = options.contentHint;\n }\n const localTracks = [screenVideo];\n if (stream.getAudioTracks().length > 0) {\n this.emit(ParticipantEvent.AudioStreamAcquired);\n const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false, this.audioContext, {\n loggerName: this.roomOptions.loggerName,\n loggerContextCb: () => this.logContext\n });\n screenAudio.source = Track.Source.ScreenShareAudio;\n localTracks.push(screenAudio);\n }\n return localTracks;\n });\n }\n /**\n * Publish a new track to the room\n * @param track\n * @param options\n */\n publishTrack(track, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.publishOrRepublishTrack(track, options);\n });\n }\n /**\n * Waits for the engine's next `Restarted` event. Unlike `engine.waitForRestarted`, this does\n * not short-circuit when `pcState === Connected` — at the point this is called (right after a\n * `NegotiationError`) the PC transport is still connected, but `fullReconnectOnNext` has been\n * set and `attemptReconnect` is queued via setTimeout. We need to wait for that restart to\n * actually complete (which clears `pendingTrackResolvers` via `cleanupClient`) before retrying.\n */\n waitForNextEngineRestart() {\n let timeoutMs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 15000;\n return new Promise((resolve, reject) => {\n const cleanup = () => {\n clearTimeout(timeout);\n this.engine.off(EngineEvent.Restarted, onRestarted);\n this.engine.off(EngineEvent.Closing, onClosing);\n };\n const onRestarted = () => {\n cleanup();\n resolve();\n };\n const onClosing = () => {\n cleanup();\n reject(new Error('engine closed before restart completed'));\n };\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error('timed out waiting for engine restart'));\n }, timeoutMs);\n this.engine.once(EngineEvent.Restarted, onRestarted);\n this.engine.once(EngineEvent.Closing, onClosing);\n });\n }\n publishOrRepublishTrack(track_1, options_1) {\n return __awaiter(this, arguments, void 0, function (track, options) {\n var _this2 = this;\n let isRepublish = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n let hasRetriedAfterNegotiationError = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n return function* () {\n var _a, _b, _c, _d;\n if (isLocalAudioTrack(track)) {\n track.setAudioContext(_this2.audioContext);\n }\n yield (_a = _this2.reconnectFuture) === null || _a === void 0 ? void 0 : _a.promise;\n if (_this2.republishPromise && !isRepublish) {\n yield _this2.republishPromise;\n }\n if (isLocalTrack(track) && _this2.pendingPublishPromises.has(track)) {\n yield _this2.pendingPublishPromises.get(track);\n }\n let defaultConstraints;\n if (track instanceof MediaStreamTrack) {\n defaultConstraints = track.getConstraints();\n } else {\n // we want to access constraints directly as `track.mediaStreamTrack`\n // might be pointing to a non-device track (e.g. processed track) already\n defaultConstraints = track.constraints;\n let deviceKind = undefined;\n switch (track.source) {\n case Track.Source.Microphone:\n deviceKind = 'audioinput';\n break;\n case Track.Source.Camera:\n deviceKind = 'videoinput';\n }\n if (deviceKind && _this2.activeDeviceMap.has(deviceKind)) {\n defaultConstraints = Object.assign(Object.assign({}, defaultConstraints), {\n deviceId: _this2.activeDeviceMap.get(deviceKind)\n });\n }\n }\n // convert raw media track into audio or video track\n if (track instanceof MediaStreamTrack) {\n switch (track.kind) {\n case 'audio':\n track = new LocalAudioTrack(track, defaultConstraints, true, _this2.audioContext, {\n loggerName: _this2.roomOptions.loggerName,\n loggerContextCb: () => _this2.logContext\n });\n break;\n case 'video':\n track = new LocalVideoTrack(track, defaultConstraints, true, {\n loggerName: _this2.roomOptions.loggerName,\n loggerContextCb: () => _this2.logContext\n });\n break;\n default:\n throw new TrackInvalidError(\"unsupported MediaStreamTrack kind \".concat(track.kind));\n }\n } else {\n track.updateLoggerOptions({\n loggerName: _this2.roomOptions.loggerName,\n loggerContextCb: () => _this2.logContext\n });\n }\n // is it already published? if so skip\n let existingPublication;\n _this2.trackPublications.forEach(publication => {\n if (!publication.track) {\n return;\n }\n if (publication.track === track) {\n existingPublication = publication;\n }\n });\n if (existingPublication) {\n _this2.log.warn('track has already been published, skipping', getLogContextFromTrack(existingPublication));\n return existingPublication;\n }\n const opts = Object.assign(Object.assign({}, _this2.roomOptions.publishDefaults), options);\n const isStereoInput = 'channelCount' in track.mediaStreamTrack.getSettings() &&\n // @ts-ignore `channelCount` on getSettings() is currently only available for Safari, but is generally the best way to determine a stereo track https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/channelCount\n track.mediaStreamTrack.getSettings().channelCount === 2 || track.mediaStreamTrack.getConstraints().channelCount === 2;\n const isStereo = (_b = opts.forceStereo) !== null && _b !== void 0 ? _b : isStereoInput;\n // disable dtx for stereo track if not enabled explicitly\n if (isStereo) {\n if (opts.dtx === undefined) {\n _this2.log.debug(\"Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.\", getLogContextFromTrack(track));\n }\n if (opts.red === undefined) {\n _this2.log.debug(\"Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.\");\n }\n (_c = opts.dtx) !== null && _c !== void 0 ? _c : opts.dtx = false;\n (_d = opts.red) !== null && _d !== void 0 ? _d : opts.red = false;\n }\n if (!isE2EESimulcastSupported() && _this2.roomOptions.e2ee) {\n _this2.log.info(\"End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2\");\n opts.simulcast = false;\n }\n if (opts.source) {\n track.source = opts.source;\n }\n const publishPromise = new Promise((resolve, reject) => __awaiter(_this2, void 0, void 0, function* () {\n try {\n if (this.engine.client.currentState !== SignalConnectionState.CONNECTED) {\n this.log.debug('deferring track publication until signal is connected', {\n track: getLogContextFromTrack(track)\n });\n let publicationTimedOut = false;\n const timeout = setTimeout(() => {\n publicationTimedOut = true;\n track.stop();\n reject(new PublishTrackError('publishing rejected as engine not connected within timeout', 408));\n }, 15000);\n yield this.waitUntilEngineConnected();\n clearTimeout(timeout);\n if (publicationTimedOut) {\n return;\n }\n const publication = yield this.publish(track, opts, isStereo);\n resolve(publication);\n } else {\n try {\n const publication = yield this.publish(track, opts, isStereo);\n resolve(publication);\n } catch (e) {\n reject(e);\n }\n }\n } catch (e) {\n reject(e);\n }\n }));\n _this2.pendingPublishPromises.set(track, publishPromise);\n try {\n const publication = yield publishPromise;\n return publication;\n } catch (e) {\n if (!hasRetriedAfterNegotiationError && e instanceof NegotiationError) {\n _this2.log.warn('negotiation due to track publish failed, retrying after reconnect', {\n error: e\n });\n _this2.pendingPublishPromises.delete(track);\n yield _this2.waitForNextEngineRestart();\n return yield _this2.publishOrRepublishTrack(track, options, isRepublish, true);\n }\n throw e;\n } finally {\n _this2.pendingPublishPromises.delete(track);\n }\n }();\n });\n }\n waitUntilEngineConnected() {\n if (!this.signalConnectedFuture) {\n this.signalConnectedFuture = new Future();\n }\n return this.signalConnectedFuture.promise;\n }\n hasPermissionsToPublish(track) {\n if (!this.permissions) {\n this.log.warn('no permissions present for publishing track', getLogContextFromTrack(track));\n return false;\n }\n const _this$permissions = this.permissions,\n canPublish = _this$permissions.canPublish,\n canPublishSources = _this$permissions.canPublishSources;\n if (canPublish && (canPublishSources.length === 0 || canPublishSources.map(source => getTrackSourceFromProto(source)).includes(track.source))) {\n return true;\n }\n this.log.warn('insufficient permissions to publish', getLogContextFromTrack(track));\n return false;\n }\n publish(track, opts, isStereo) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n if (!this.hasPermissionsToPublish(track)) {\n throw new PublishTrackError('failed to publish track, insufficient permissions', 403);\n }\n const existingTrackOfSource = Array.from(this.trackPublications.values()).find(publishedTrack => isLocalTrack(track) && publishedTrack.source === track.source);\n if (existingTrackOfSource && track.source !== Track.Source.Unknown) {\n this.log.info(\"publishing a second track with the same source: \".concat(track.source), getLogContextFromTrack(track));\n }\n if (opts.stopMicTrackOnMute && isAudioTrack(track)) {\n track.stopOnMute = true;\n }\n if (track.source === Track.Source.ScreenShare && isFireFox()) {\n // Firefox does not work well with simulcasted screen share\n // we frequently get no data on layer 0 when enabled\n opts.simulcast = false;\n }\n // require full AV1/VP9 SVC support prior to using it\n if (opts.videoCodec === 'av1' && !supportsAV1()) {\n opts.videoCodec = undefined;\n }\n if (opts.videoCodec === 'vp9' && !supportsVP9()) {\n opts.videoCodec = undefined;\n }\n if (opts.videoCodec === undefined) {\n opts.videoCodec = defaultVideoCodec;\n }\n if (this.enabledPublishVideoCodecs.length > 0) {\n // fallback to a supported codec if it is not supported\n if (!this.enabledPublishVideoCodecs.some(c => opts.videoCodec === mimeTypeToVideoCodecString(c.mime))) {\n opts.videoCodec = mimeTypeToVideoCodecString(this.enabledPublishVideoCodecs[0].mime);\n }\n }\n const videoCodec = opts.videoCodec;\n // handle track actions\n track.on(TrackEvent.Muted, this.onTrackMuted);\n track.on(TrackEvent.Unmuted, this.onTrackUnmuted);\n track.on(TrackEvent.Ended, this.handleTrackEnded);\n track.on(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n track.on(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n track.on(TrackEvent.AudioTrackFeatureUpdate, this.onTrackFeatureUpdate);\n const audioFeatures = [];\n const disableDtx = !((_a = opts.dtx) !== null && _a !== void 0 ? _a : true);\n const settings = track.getSourceTrackSettings();\n if (settings.autoGainControl) {\n audioFeatures.push(AudioTrackFeature.TF_AUTO_GAIN_CONTROL);\n }\n if (settings.echoCancellation) {\n audioFeatures.push(AudioTrackFeature.TF_ECHO_CANCELLATION);\n }\n if (settings.noiseSuppression) {\n audioFeatures.push(AudioTrackFeature.TF_NOISE_SUPPRESSION);\n }\n if (settings.channelCount && settings.channelCount > 1) {\n audioFeatures.push(AudioTrackFeature.TF_STEREO);\n }\n if (disableDtx) {\n audioFeatures.push(AudioTrackFeature.TF_NO_DTX);\n }\n if (isLocalAudioTrack(track) && track.hasPreConnectBuffer) {\n audioFeatures.push(AudioTrackFeature.TF_PRECONNECT_BUFFER);\n }\n const packetTrailerFeatures = this.normalizeRequestedPacketTrailerOptions(track, opts);\n // create track publication from track\n const req = new AddTrackRequest({\n // get local track id for use during publishing\n cid: track.mediaStreamTrack.id,\n name: opts.name,\n type: Track.kindToProto(track.kind),\n muted: track.isMuted,\n source: Track.sourceToProto(track.source),\n disableDtx,\n encryption: this.encryptionType,\n stereo: isStereo,\n disableRed: this.isE2EEEnabled || !((_b = opts.red) !== null && _b !== void 0 ? _b : true),\n stream: opts === null || opts === void 0 ? void 0 : opts.stream,\n backupCodecPolicy: opts === null || opts === void 0 ? void 0 : opts.backupCodecPolicy,\n audioFeatures,\n packetTrailerFeatures\n });\n // compute encodings and layers for video\n let encodings;\n if (track.kind === Track.Kind.Video) {\n let dims;\n try {\n dims = yield track.waitForDimensions();\n } catch (e) {\n // use defaults, it's quite painful for congestion control without simulcast\n // so using default dims according to publish settings\n const defaultRes = (_d = (_c = this.roomOptions.videoCaptureDefaults) === null || _c === void 0 ? void 0 : _c.resolution) !== null && _d !== void 0 ? _d : VideoPresets.h720.resolution;\n dims = {\n width: defaultRes.width,\n height: defaultRes.height\n };\n // log failure\n this.log.error('could not determine track dimensions, using defaults', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n dims\n }));\n }\n // width and height should be defined for video\n req.width = dims.width;\n req.height = dims.height;\n // for svc codecs, disable simulcast and use vp8 for backup codec\n if (isLocalVideoTrack(track)) {\n if (isSVCCodec(videoCodec)) {\n if (track.source === Track.Source.ScreenShare) {\n // vp9 svc with screenshare cannot encode multiple spatial layers\n // doing so reduces publish resolution to minimal resolution\n opts.scalabilityMode = 'L1T3';\n // Chrome does not allow more than 5 fps with L1T3, and it has encoding bugs with L3T3\n // It has a different path for screenshare handling and it seems to be untested/buggy\n // As a workaround, we are setting contentHint to force it to go through the same\n // path as regular camera video. While this is not optimal, it delivers the performance\n // that we need\n if ('contentHint' in track.mediaStreamTrack) {\n track.mediaStreamTrack.contentHint = 'motion';\n this.log.debug('forcing contentHint to motion for screenshare with SVC codecs', getLogContextFromTrack(track));\n }\n }\n // set scalabilityMode to 'L3T3_KEY' by default\n opts.scalabilityMode = (_e = opts.scalabilityMode) !== null && _e !== void 0 ? _e : 'L3T3_KEY';\n }\n req.simulcastCodecs = [new SimulcastCodec({\n codec: videoCodec,\n cid: track.mediaStreamTrack.id\n })];\n // set up backup\n if (opts.backupCodec === true) {\n opts.backupCodec = {\n codec: defaultVideoCodec\n };\n }\n if (opts.backupCodec && videoCodec !== opts.backupCodec.codec &&\n // TODO remove this once e2ee is supported for backup codecs\n req.encryption === Encryption_Type.NONE) {\n // multi-codec simulcast requires dynacast\n if (!this.roomOptions.dynacast) {\n this.roomOptions.dynacast = true;\n }\n req.simulcastCodecs.push(new SimulcastCodec({\n codec: opts.backupCodec.codec,\n cid: ''\n }));\n }\n }\n encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, req.width, req.height, opts);\n req.layers = videoLayersFromEncodings(req.width, req.height, encodings, isSVCCodec(opts.videoCodec));\n } else if (track.kind === Track.Kind.Audio) {\n encodings = [{\n maxBitrate: (_f = opts.audioPreset) === null || _f === void 0 ? void 0 : _f.maxBitrate,\n priority: (_h = (_g = opts.audioPreset) === null || _g === void 0 ? void 0 : _g.priority) !== null && _h !== void 0 ? _h : 'high',\n networkPriority: (_k = (_j = opts.audioPreset) === null || _j === void 0 ? void 0 : _j.priority) !== null && _k !== void 0 ? _k : 'high'\n }];\n }\n if (!this.engine || this.engine.isClosed) {\n throw new UnexpectedConnectionState('cannot publish track when not connected');\n }\n const negotiate = () => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n if (!this.engine.pcManager) {\n throw new UnexpectedConnectionState('pcManager is not ready');\n }\n track.sender = yield this.engine.createSender(track, opts, encodings);\n if (isLocalVideoTrack(track)) {\n track.publishOptions = opts;\n }\n this.emit(ParticipantEvent.LocalSenderCreated, track.sender, track);\n if (isLocalVideoTrack(track)) {\n (_a = opts.degradationPreference) !== null && _a !== void 0 ? _a : opts.degradationPreference = getDefaultDegradationPreference(track);\n track.setDegradationPreference(opts.degradationPreference);\n }\n if (encodings) {\n if (isFireFox() && track.kind === Track.Kind.Audio) {\n /* Refer to RFC https://datatracker.ietf.org/doc/html/rfc7587#section-6.1,\n livekit-server uses maxaveragebitrate=510000 in the answer sdp to permit client to\n publish high quality audio track. But firefox always uses this value as the actual\n bitrates, causing the audio bitrates to rise to 510Kbps in any stereo case unexpectedly.\n So the client need to modify maxaverragebitrates in answer sdp to user provided value to\n fix the issue.\n */\n let trackTransceiver = undefined;\n for (const transceiver of this.engine.pcManager.publisher.getTransceivers()) {\n if (transceiver.sender === track.sender) {\n trackTransceiver = transceiver;\n break;\n }\n }\n if (trackTransceiver) {\n this.engine.pcManager.publisher.setTrackCodecBitrate({\n transceiver: trackTransceiver,\n codec: 'opus',\n maxbr: ((_b = encodings[0]) === null || _b === void 0 ? void 0 : _b.maxBitrate) ? encodings[0].maxBitrate / 1000 : 0\n });\n }\n } else if (track.codec && isSVCCodec(track.codec) && ((_c = encodings[0]) === null || _c === void 0 ? void 0 : _c.maxBitrate)) {\n this.engine.pcManager.publisher.setTrackCodecBitrate({\n cid: req.cid,\n codec: track.codec,\n maxbr: encodings[0].maxBitrate / 1000\n });\n }\n }\n yield this.engine.negotiate();\n });\n let ti;\n const addTrackPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n try {\n ti = yield this.engine.addTrack(req);\n resolve(ti);\n } catch (err) {\n if (track.sender && ((_a = this.engine.pcManager) === null || _a === void 0 ? void 0 : _a.publisher)) {\n try {\n this.engine.pcManager.publisher.removeTrack(track.sender);\n } catch (e) {\n this.log.error(e);\n }\n yield this.engine.negotiate().catch(negotiateErr => {\n this.log.error('failed to negotiate after removing track due to failed add track request', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n error: negotiateErr\n }));\n });\n }\n reject(err);\n }\n }));\n if (this.enabledPublishVideoCodecs.length > 0 && packetTrailerFeatures.length === 0) {\n const rets = yield Promise.all([addTrackPromise, negotiate()]);\n ti = rets[0];\n } else {\n ti = yield addTrackPromise;\n // server might not support the codec the client has requested, in that case, fallback\n // to a supported codec\n let primaryCodecMime;\n ti.codecs.forEach(codec => {\n if (primaryCodecMime === undefined) {\n primaryCodecMime = codec.mimeType;\n }\n });\n if (primaryCodecMime && track.kind === Track.Kind.Video) {\n const updatedCodec = mimeTypeToVideoCodecString(primaryCodecMime);\n if (updatedCodec !== videoCodec) {\n this.log.debug('falling back to server selected codec', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n codec: updatedCodec\n }));\n opts.videoCodec = updatedCodec;\n // recompute encodings since bitrates/etc could have changed\n encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, req.width, req.height, opts);\n }\n }\n yield negotiate();\n }\n const publication = new LocalTrackPublication(track.kind, ti, track, {\n loggerName: this.roomOptions.loggerName,\n loggerContextCb: () => this.logContext\n });\n publication.on(TrackEvent.CpuConstrained, constrainedTrack => this.onTrackCpuConstrained(constrainedTrack, publication));\n // save options for when it needs to be republished again\n publication.options = opts;\n track.sid = ti.sid;\n // keep publish options on the video track so that it can recompute encoding\n // parameters when the MediaStreamTrack is restarted (e.g. after switching cameras).\n // Seed the dimensions we encoded at publish time so the first no-op restart\n // (e.g. unmute with unchanged constraints) can skip the recompute.\n if (isLocalVideoTrack(track)) {\n track.publishOptions = opts;\n if (req.width && req.height) {\n track.lastEncodedDimensions = {\n width: req.width,\n height: req.height\n };\n }\n }\n this.log.debug(\"publishing \".concat(track.kind, \" with encodings\"), {\n encodings,\n trackInfo: ti\n });\n if (isLocalVideoTrack(track)) {\n track.startMonitor(this.engine.client);\n } else if (isLocalAudioTrack(track)) {\n track.startMonitor();\n }\n this.addTrackPublication(publication);\n // send event for publication\n this.emit(ParticipantEvent.LocalTrackPublished, publication);\n if (isLocalAudioTrack(track) && ti.audioFeatures.includes(AudioTrackFeature.TF_PRECONNECT_BUFFER)) {\n const stream = track.getPreConnectBuffer();\n const mimeType = track.getPreConnectBufferMimeType();\n // TODO: we're registering the listener after negotiation, so there might be a race\n this.on(ParticipantEvent.LocalTrackSubscribed, pub => {\n if (pub.trackSid === ti.sid) {\n if (!track.hasPreConnectBuffer) {\n this.log.warn('subscribe event came to late, buffer already closed');\n return;\n }\n this.log.debug('finished recording preconnect buffer', getLogContextFromTrack(track));\n track.stopPreConnectBuffer();\n }\n });\n if (stream) {\n const bufferStreamPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n var _a, e_2, _b, _c;\n var _d, _e;\n try {\n this.log.debug('waiting for agent', getLogContextFromTrack(track));\n const agentActiveTimeout = setTimeout(() => {\n reject(new Error('agent not active within 10 seconds'));\n }, 10000);\n const agent = yield this.waitUntilActiveAgentPresent();\n clearTimeout(agentActiveTimeout);\n this.log.debug('sending preconnect buffer', getLogContextFromTrack(track));\n const writer = yield this.streamBytes({\n name: 'preconnect-buffer',\n mimeType,\n topic: 'lk.agent.pre-connect-audio-buffer',\n destinationIdentities: [agent.identity],\n attributes: {\n trackId: publication.trackSid,\n sampleRate: String((_d = settings.sampleRate) !== null && _d !== void 0 ? _d : '48000'),\n channels: String((_e = settings.channelCount) !== null && _e !== void 0 ? _e : '1')\n }\n });\n try {\n for (var _f = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield stream_1.next(), _a = stream_1_1.done, !_a; _f = true) {\n _c = stream_1_1.value;\n _f = false;\n const chunk = _c;\n yield writer.write(chunk);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (!_f && !_a && (_b = stream_1.return)) yield _b.call(stream_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n yield writer.close();\n resolve();\n } catch (e) {\n reject(e);\n }\n }));\n bufferStreamPromise.then(() => {\n this.log.debug('preconnect buffer sent successfully', getLogContextFromTrack(track));\n }).catch(e => {\n this.log.error('error sending preconnect buffer', Object.assign(Object.assign({}, getLogContextFromTrack(track)), {\n error: e\n }));\n });\n }\n }\n return publication;\n });\n }\n canPublishPacketTrailer() {\n return !!(this.roomOptions.e2ee || this.roomOptions.encryption || isPacketTrailerSupported(this.roomOptions.packetTrailer));\n }\n normalizeRequestedPacketTrailerOptions(track, opts) {\n if (track.kind !== Track.Kind.Video || !hasPacketTrailerPublishOptions(opts.packetTrailer)) {\n opts.packetTrailer = undefined;\n return [];\n }\n if (!this.canPublishPacketTrailer()) {\n this.log.warn('packet trailer transform not supported; not advertising features', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n opts.packetTrailer = undefined;\n return [];\n }\n const features = getPacketTrailerFeatures(opts.packetTrailer);\n opts.packetTrailer = getPacketTrailerPublishOptions(features);\n return features;\n }\n get isLocal() {\n return true;\n }\n /** @internal\n * publish additional codec to existing track\n */\n publishAdditionalCodecForTrack(track, videoCodec, options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n // TODO remove once e2ee is supported for backup tracks\n if (this.encryptionType !== Encryption_Type.NONE) {\n return;\n }\n // is it not published? if so skip\n let existingPublication;\n this.trackPublications.forEach(publication => {\n if (!publication.track) {\n return;\n }\n if (publication.track === track) {\n existingPublication = publication;\n }\n });\n if (!existingPublication) {\n throw new TrackInvalidError('track is not published');\n }\n if (!isLocalVideoTrack(track)) {\n throw new TrackInvalidError('track is not a video track');\n }\n const opts = Object.assign(Object.assign({}, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.publishDefaults), options);\n const encodings = computeTrackBackupEncodings(track, videoCodec, opts);\n if (!encodings) {\n this.log.info(\"backup codec has been disabled, ignoring request to add additional codec for track\", getLogContextFromTrack(track));\n return;\n }\n const simulcastTrack = track.addSimulcastTrack(videoCodec, encodings);\n if (!simulcastTrack) {\n return;\n }\n const packetTrailerFeatures = this.normalizeRequestedPacketTrailerOptions(track, opts);\n const req = new AddTrackRequest({\n cid: simulcastTrack.mediaStreamTrack.id,\n type: Track.kindToProto(track.kind),\n muted: track.isMuted,\n source: Track.sourceToProto(track.source),\n sid: track.sid,\n packetTrailerFeatures,\n simulcastCodecs: [{\n codec: opts.videoCodec,\n cid: simulcastTrack.mediaStreamTrack.id\n }]\n });\n req.layers = videoLayersFromEncodings(req.width, req.height, encodings);\n if (!this.engine || this.engine.isClosed) {\n throw new UnexpectedConnectionState('cannot publish track when not connected');\n }\n const negotiate = () => __awaiter(this, void 0, void 0, function* () {\n yield this.engine.createSimulcastSender(track, simulcastTrack, opts, encodings);\n yield this.engine.negotiate();\n });\n const rets = yield Promise.all([this.engine.addTrack(req), negotiate()]);\n const ti = rets[0];\n this.log.debug(\"published \".concat(videoCodec, \" for track \").concat(track.sid), {\n encodings,\n trackInfo: ti\n });\n });\n }\n unpublishTrack(track, stopOnUnpublish) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (isLocalTrack(track)) {\n const publishPromise = this.pendingPublishPromises.get(track);\n if (publishPromise) {\n this.log.debug('awaiting publish promise before attempting to unpublish', getLogContextFromTrack(track));\n yield publishPromise;\n }\n }\n // look through all published tracks to find the right ones\n const publication = this.getPublicationForTrack(track);\n const pubLogContext = publication ? getLogContextFromTrack(publication) : undefined;\n this.log.info('unpublishing track', pubLogContext);\n if (!publication || !publication.track) {\n this.log.warn('track was not unpublished because no publication was found', pubLogContext);\n return undefined;\n }\n track = publication.track;\n track.off(TrackEvent.Muted, this.onTrackMuted);\n track.off(TrackEvent.Unmuted, this.onTrackUnmuted);\n track.off(TrackEvent.Ended, this.handleTrackEnded);\n track.off(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n track.off(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n track.off(TrackEvent.AudioTrackFeatureUpdate, this.onTrackFeatureUpdate);\n if (stopOnUnpublish === undefined) {\n stopOnUnpublish = (_b = (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.stopLocalTrackOnUnpublish) !== null && _b !== void 0 ? _b : true;\n }\n if (stopOnUnpublish) {\n track.stop();\n } else {\n track.stopMonitor();\n }\n let negotiationNeeded = false;\n const trackSender = track.sender;\n track.sender = undefined;\n if (this.engine.pcManager && this.engine.pcManager.currentState < PCTransportState.FAILED && trackSender) {\n try {\n for (const transceiver of this.engine.pcManager.publisher.getTransceivers()) {\n // if sender is not currently sending (after replaceTrack(null))\n // removeTrack would have no effect.\n // to ensure we end up successfully removing the track, manually set\n // the transceiver to inactive\n if (transceiver.sender === trackSender) {\n transceiver.direction = 'inactive';\n negotiationNeeded = true;\n }\n }\n try {\n negotiationNeeded = this.engine.removeTrack(trackSender);\n } catch (e) {\n this.log.warn(e);\n negotiationNeeded = true;\n }\n if (isLocalVideoTrack(track)) {\n for (const _ref4 of track.simulcastCodecs) {\n var _ref5 = _slicedToArray(_ref4, 2);\n const trackInfo = _ref5[1];\n if (trackInfo.sender) {\n try {\n negotiationNeeded = this.engine.removeTrack(trackInfo.sender);\n } catch (e) {\n this.log.warn(e);\n negotiationNeeded = true;\n }\n trackInfo.sender = undefined;\n }\n }\n track.simulcastCodecs.clear();\n }\n } catch (e) {\n this.log.warn('failed to unpublish track', Object.assign(Object.assign({}, pubLogContext), {\n error: e\n }));\n }\n }\n // remove from our maps\n this.trackPublications.delete(publication.trackSid);\n switch (publication.kind) {\n case Track.Kind.Audio:\n this.audioTrackPublications.delete(publication.trackSid);\n break;\n case Track.Kind.Video:\n this.videoTrackPublications.delete(publication.trackSid);\n break;\n }\n this.emit(ParticipantEvent.LocalTrackUnpublished, publication);\n publication.setTrack(undefined);\n if (negotiationNeeded) {\n yield this.engine.negotiate();\n }\n return publication;\n });\n }\n unpublishTracks(tracks) {\n return __awaiter(this, void 0, void 0, function* () {\n const results = yield Promise.all(tracks.map(track => this.unpublishTrack(track)));\n return results.filter(track => !!track);\n });\n }\n republishAllTracks(options_1) {\n return __awaiter(this, arguments, void 0, function (options) {\n var _this3 = this;\n let restartTracks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return function* () {\n if (_this3.republishPromise) {\n yield _this3.republishPromise;\n }\n _this3.republishPromise = new TypedPromise((resolve, reject) => __awaiter(_this3, void 0, void 0, function* () {\n try {\n const localPubs = [];\n this.trackPublications.forEach(pub => {\n if (pub.track) {\n if (options) {\n pub.options = Object.assign(Object.assign({}, pub.options), options);\n }\n localPubs.push(pub);\n }\n });\n yield Promise.all(localPubs.map(pub => __awaiter(this, void 0, void 0, function* () {\n const track = pub.track;\n yield this.unpublishTrack(track, false);\n if (restartTracks && !track.isMuted && track.source !== Track.Source.ScreenShare && track.source !== Track.Source.ScreenShareAudio && (isLocalAudioTrack(track) || isLocalVideoTrack(track)) && !track.isUserProvided) {\n // generally we need to restart the track before publishing, often a full reconnect\n // is necessary because computer had gone to sleep.\n this.log.debug('restarting existing track', {\n track: pub.trackSid\n });\n yield track.restartTrack();\n }\n yield this.publishOrRepublishTrack(track, pub.options, true);\n })));\n resolve();\n } catch (error) {\n if (error instanceof Error) {\n reject(error);\n } else {\n reject(new Error(String(error)));\n }\n } finally {\n this.republishPromise = undefined;\n }\n }));\n yield _this3.republishPromise;\n }();\n });\n }\n /**\n * Publish a new data payload to the room. Data will be forwarded to each\n * participant in the room if the destination field in publishOptions is empty\n *\n * @param data Uint8Array of the payload. To send string data, use TextEncoder.encode\n * @param options optionally specify a `reliable`, `topic` and `destination`\n */\n publishData(data_1) {\n return __awaiter(this, arguments, void 0, function (data) {\n var _this4 = this;\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return function* () {\n const kind = options.reliable ? DataChannelKind.RELIABLE : DataChannelKind.LOSSY;\n const dataPacketKind = options.reliable ? DataPacket_Kind.RELIABLE : DataPacket_Kind.LOSSY;\n const destinationIdentities = options.destinationIdentities;\n const topic = options.topic;\n let userPacket = new UserPacket({\n participantIdentity: _this4.identity,\n payload: data,\n destinationIdentities,\n topic\n });\n const packet = new DataPacket({\n kind: dataPacketKind,\n value: {\n case: 'user',\n value: userPacket\n }\n });\n yield _this4.engine.sendDataPacket(packet, kind);\n }();\n });\n }\n /**\n * Publish SIP DTMF message to the room.\n *\n * @param code DTMF code\n * @param digit DTMF digit\n */\n publishDtmf(code, digit) {\n return __awaiter(this, void 0, void 0, function* () {\n const packet = new DataPacket({\n kind: DataPacket_Kind.RELIABLE,\n value: {\n case: 'sipDtmf',\n value: new SipDTMF({\n code: code,\n digit: digit\n })\n }\n });\n yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n });\n }\n /** @deprecated Consider migrating to {@link sendText} */\n sendChatMessage(text, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const msg = {\n id: crypto.randomUUID(),\n message: text,\n timestamp: Date.now(),\n attachedFiles: options === null || options === void 0 ? void 0 : options.attachments\n };\n const packet = new DataPacket({\n value: {\n case: 'chatMessage',\n value: new ChatMessage(Object.assign(Object.assign({}, msg), {\n timestamp: protoInt64.parse(msg.timestamp)\n }))\n }\n });\n yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n this.emit(ParticipantEvent.ChatMessage, msg);\n return msg;\n });\n }\n /** @deprecated Consider migrating to {@link sendText} */\n editChatMessage(editText, originalMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n const msg = Object.assign(Object.assign({}, originalMessage), {\n message: editText,\n editTimestamp: Date.now()\n });\n const packet = new DataPacket({\n value: {\n case: 'chatMessage',\n value: new ChatMessage(Object.assign(Object.assign({}, msg), {\n timestamp: protoInt64.parse(msg.timestamp),\n editTimestamp: protoInt64.parse(msg.editTimestamp)\n }))\n }\n });\n yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);\n this.emit(ParticipantEvent.ChatMessage, msg);\n return msg;\n });\n }\n /**\n * Sends the given string to participants in the room via the data channel.\n * For longer messages, consider using {@link streamText} instead.\n *\n * @param text The text payload\n * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n */\n sendText(text, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.roomOutgoingDataStreamManager.sendText(text, options);\n });\n }\n /**\n * Creates a new TextStreamWriter which can be used to stream text incrementally\n * to participants in the room via the data channel.\n *\n * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n *\n * @internal\n * @experimental CAUTION, might get removed in a minor release\n */\n streamText(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.roomOutgoingDataStreamManager.streamText(options);\n });\n }\n /** Send a File to all participants in the room via the data channel.\n * @param file The File object payload\n * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n * @param options.onProgress A callback function used to monitor the upload progress percentage.\n */\n sendFile(file, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.roomOutgoingDataStreamManager.sendFile(file, options);\n });\n }\n /**\n * Stream bytes incrementally to participants in the room via the data channel.\n * For sending files, consider using {@link sendFile} instead.\n *\n * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n */\n streamBytes(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.roomOutgoingDataStreamManager.streamBytes(options);\n });\n }\n /**\n * Initiate an RPC call to a remote participant\n * @param params - Parameters for initiating the RPC call, see {@link PerformRpcParams}\n * @returns A promise that resolves with the response payload or rejects with an error.\n * @throws Error on failure. Details in `message`.\n */\n performRpc(params) {\n return this.rpcClientManager.performRpc(params).then(_ref6 => {\n let _ref7 = _slicedToArray(_ref6, 2);\n _ref7[0];\n let completionPromise = _ref7[1];\n return completionPromise;\n });\n }\n /**\n * @deprecated use `room.registerRpcMethod` instead\n */\n registerRpcMethod(method, handler) {\n this.rpcServerManager.registerRpcMethod(method, handler);\n }\n /**\n * @deprecated use `room.unregisterRpcMethod` instead\n */\n unregisterRpcMethod(method) {\n this.rpcServerManager.unregisterRpcMethod(method);\n }\n /**\n * Control who can subscribe to LocalParticipant's published tracks.\n *\n * By default, all participants can subscribe. This allows fine-grained control over\n * who is able to subscribe at a participant and track level.\n *\n * Note: if access is given at a track-level (i.e. both [allParticipantsAllowed] and\n * [ParticipantTrackPermission.allTracksAllowed] are false), any newer published tracks\n * will not grant permissions to any participants and will require a subsequent\n * permissions update to allow subscription.\n *\n * @param allParticipantsAllowed Allows all participants to subscribe all tracks.\n * Takes precedence over [[participantTrackPermissions]] if set to true.\n * By default this is set to true.\n * @param participantTrackPermissions Full list of individual permissions per\n * participant/track. Any omitted participants will not receive any permissions.\n */\n setTrackSubscriptionPermissions(allParticipantsAllowed) {\n let participantTrackPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n this.participantTrackPermissions = participantTrackPermissions;\n this.allParticipantsAllowedToSubscribe = allParticipantsAllowed;\n if (!this.engine.client.isDisconnected) {\n this.updateTrackSubscriptionPermissions();\n }\n }\n /** @internal */\n setEnabledPublishCodecs(codecs) {\n this.enabledPublishVideoCodecs = codecs.filter(c => c.mime.split('/')[0].toLowerCase() === 'video');\n }\n /** @internal */\n updateInfo(info) {\n if (!super.updateInfo(info)) {\n return false;\n }\n // reconcile track mute status.\n // if server's track mute status doesn't match actual, we'll have to update\n // the server's copy\n info.tracks.forEach(ti => {\n var _a, _b;\n const pub = this.trackPublications.get(ti.sid);\n if (pub) {\n const mutedOnServer = pub.isMuted || ((_b = (_a = pub.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused) !== null && _b !== void 0 ? _b : false);\n if (mutedOnServer !== ti.muted) {\n this.log.debug('updating server mute state after reconcile', Object.assign(Object.assign({}, getLogContextFromTrack(pub)), {\n mutedOnServer\n }));\n this.engine.client.sendMuteTrack(ti.sid, mutedOnServer);\n }\n }\n });\n return true;\n }\n /** @internal */\n setActiveAgent(agent) {\n var _a, _b, _c, _d;\n this.firstActiveAgent = agent;\n if (agent && !this.firstActiveAgent) {\n this.firstActiveAgent = agent;\n }\n if (agent) {\n (_b = (_a = this.activeAgentFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a, agent);\n } else {\n (_d = (_c = this.activeAgentFuture) === null || _c === void 0 ? void 0 : _c.reject) === null || _d === void 0 ? void 0 : _d.call(_c, new Error('Agent disconnected'));\n }\n this.activeAgentFuture = undefined;\n }\n waitUntilActiveAgentPresent() {\n if (this.firstActiveAgent) {\n return Promise.resolve(this.firstActiveAgent);\n }\n if (!this.activeAgentFuture) {\n this.activeAgentFuture = new Future();\n }\n return this.activeAgentFuture.promise;\n }\n getPublicationForTrack(track) {\n let publication;\n this.trackPublications.forEach(pub => {\n const localTrack = pub.track;\n if (!localTrack) {\n return;\n }\n // this looks overly complicated due to this object tree\n if (track instanceof MediaStreamTrack) {\n if (isLocalAudioTrack(localTrack) || isLocalVideoTrack(localTrack)) {\n if (localTrack.mediaStreamTrack === track) {\n publication = pub;\n }\n }\n } else if (track === localTrack) {\n publication = pub;\n }\n });\n return publication;\n }\n waitForPendingPublicationOfSource(source) {\n return __awaiter(this, void 0, void 0, function* () {\n const waitForPendingTimeout = 10000;\n const startTime = Date.now();\n while (Date.now() < startTime + waitForPendingTimeout) {\n const publishPromiseEntry = Array.from(this.pendingPublishPromises.entries()).find(_ref8 => {\n let _ref9 = _slicedToArray(_ref8, 1),\n pendingTrack = _ref9[0];\n return pendingTrack.source === source;\n });\n if (publishPromiseEntry) {\n return publishPromiseEntry[1];\n }\n yield sleep(20);\n }\n });\n }\n /** Publishes a data track.\n *\n * Returns the published data track if successful. Use {@link LocalDataTrack#tryPush}\n * to send data frames on the track.\n */\n publishDataTrack(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const track = new LocalDataTrack(options, this.roomOutgoingDataTrackManager);\n yield track.publish();\n return track;\n });\n }\n}/** An error which is thrown if a {@link DeferrableMap#getDeferred} call is aborted midway\n * through. */\nclass DeferrableMapAbortError extends DOMException {\n constructor(message, reason) {\n super(message, 'AbortError');\n this.reason = reason;\n }\n}\n/**\n * A Map-like container keyed by unique strings that supports the ability to wait\n * for future keys to show up in the map.\n *\n * @example\n * // An already existing key:\n * const value = map.get(\"key\");\n * // Wait for a key which will be added soon:\n * const value = await map.getDeferred(\"key\");\n */\nclass DeferrableMap extends Map {\n constructor() {\n super(...arguments);\n this.pending = new Map();\n }\n set(key, value) {\n var _a, _b;\n super.set(key, value);\n // Resolve any futures waiting on this key.\n const futures = (_a = this.pending) === null || _a === void 0 ? void 0 : _a.get(key);\n if (futures) {\n for (const future of futures) {\n if (!future.isResolved) {\n (_b = future.resolve) === null || _b === void 0 ? void 0 : _b.call(future, value);\n }\n }\n this.pending.delete(key);\n }\n return this;\n }\n get [Symbol.toStringTag]() {\n return 'DeferrableMap';\n }\n getDeferred(key, signal) {\n return __awaiter(this, void 0, void 0, function* () {\n const existing = this.get(key);\n if (typeof existing !== 'undefined') {\n return existing;\n }\n // Bail out immediately if the signal is already aborted.\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n throw new DeferrableMapAbortError('The operation was aborted.', signal.reason);\n }\n const future = new Future(undefined, () => {\n // Clean up the pending list when the future settles.\n const futures = this.pending.get(key);\n if (!futures) {\n return;\n }\n const idx = futures.indexOf(future);\n if (idx !== -1) {\n futures.splice(idx, 1);\n }\n if (futures.length === 0) {\n this.pending.delete(key);\n }\n });\n const existingFutures = this.pending.get(key);\n if (existingFutures) {\n existingFutures.push(future);\n } else {\n this.pending.set(key, [future]);\n }\n // If a signal was provided, listen for abort and reject the future.\n if (signal) {\n const onAbort = () => {\n var _a;\n if (!future.isResolved) {\n (_a = future.reject) === null || _a === void 0 ? void 0 : _a.call(future, new DeferrableMapAbortError('The operation was aborted.', signal.reason));\n }\n };\n signal.addEventListener('abort', onAbort, {\n once: true\n });\n // Clean up the listener once the future settles (resolved or rejected).\n future.promise.finally(() => {\n signal.removeEventListener('abort', onAbort);\n });\n }\n return future.promise;\n });\n }\n}class RemoteTrackPublication extends TrackPublication {\n constructor(kind, ti, autoSubscribe, loggerOptions) {\n super(kind, ti.sid, ti.name, loggerOptions);\n this.track = undefined;\n /** @internal */\n this.allowed = true;\n this.requestedDisabled = undefined;\n this.visible = true;\n this.handleEnded = track => {\n this.setTrack(undefined);\n this.emit(TrackEvent.Ended, track);\n };\n this.handleVisibilityChange = visible => {\n this.log.debug(\"adaptivestream video visibility \".concat(this.trackSid, \", visible=\").concat(visible), this.logContext);\n this.visible = visible;\n this.emitTrackUpdate();\n };\n this.handleVideoDimensionsChange = dimensions => {\n this.log.debug(\"adaptivestream video dimensions \".concat(dimensions.width, \"x\").concat(dimensions.height), this.logContext);\n this.videoDimensionsAdaptiveStream = dimensions;\n this.emitTrackUpdate();\n };\n this.subscribed = autoSubscribe;\n this.updateInfo(ti);\n }\n /**\n * Subscribe or unsubscribe to this remote track\n * @param subscribed true to subscribe to a track, false to unsubscribe\n */\n setSubscribed(subscribed) {\n const prevStatus = this.subscriptionStatus;\n const prevPermission = this.permissionStatus;\n this.subscribed = subscribed;\n // reset allowed status when desired subscription state changes\n // server will notify client via signal message if it's not allowed\n if (subscribed) {\n this.allowed = true;\n }\n const sub = new UpdateSubscription({\n trackSids: [this.trackSid],\n subscribe: this.subscribed,\n participantTracks: [new ParticipantTracks({\n // sending an empty participant id since TrackPublication doesn't keep it\n // this is filled in by the participant that receives this message\n participantSid: '',\n trackSids: [this.trackSid]\n })]\n });\n this.emit(TrackEvent.UpdateSubscription, sub);\n this.emitSubscriptionUpdateIfChanged(prevStatus);\n this.emitPermissionUpdateIfChanged(prevPermission);\n }\n get subscriptionStatus() {\n if (this.subscribed === false) {\n return TrackPublication.SubscriptionStatus.Unsubscribed;\n }\n if (!super.isSubscribed) {\n return TrackPublication.SubscriptionStatus.Desired;\n }\n return TrackPublication.SubscriptionStatus.Subscribed;\n }\n get permissionStatus() {\n return this.allowed ? TrackPublication.PermissionStatus.Allowed : TrackPublication.PermissionStatus.NotAllowed;\n }\n /**\n * Returns true if track is subscribed, and ready for playback\n */\n get isSubscribed() {\n if (this.subscribed === false) {\n return false;\n }\n return super.isSubscribed;\n }\n // returns client's desire to subscribe to a track, also true if autoSubscribe is enabled\n get isDesired() {\n return this.subscribed !== false;\n }\n get isEnabled() {\n return this.requestedDisabled !== undefined ? !this.requestedDisabled : this.isAdaptiveStream ? this.visible : true;\n }\n get isLocal() {\n return false;\n }\n /**\n * disable server from sending down data for this track. this is useful when\n * the participant is off screen, you may disable streaming down their video\n * to reduce bandwidth requirements\n * @param enabled\n */\n setEnabled(enabled) {\n if (!this.isManualOperationAllowed() || this.requestedDisabled === !enabled) {\n return;\n }\n this.requestedDisabled = !enabled;\n this.emitTrackUpdate();\n }\n /**\n * for tracks that support simulcasting, adjust subscribed quality\n *\n * This indicates the highest quality the client can accept. if network\n * bandwidth does not allow, server will automatically reduce quality to\n * optimize for uninterrupted video\n */\n setVideoQuality(quality) {\n if (!this.isManualOperationAllowed() || this.requestedMaxQuality === quality) {\n return;\n }\n this.requestedMaxQuality = quality;\n this.requestedVideoDimensions = undefined;\n this.emitTrackUpdate();\n }\n /**\n * Explicitly set the video dimensions for this track.\n *\n * This will take precedence over adaptive stream dimensions.\n *\n * @param dimensions The video dimensions to set.\n */\n setVideoDimensions(dimensions) {\n var _a, _b;\n if (!this.isManualOperationAllowed()) {\n return;\n }\n if (((_a = this.requestedVideoDimensions) === null || _a === void 0 ? void 0 : _a.width) === dimensions.width && ((_b = this.requestedVideoDimensions) === null || _b === void 0 ? void 0 : _b.height) === dimensions.height) {\n return;\n }\n if (isRemoteVideoTrack(this.track)) {\n this.requestedVideoDimensions = dimensions;\n }\n this.requestedMaxQuality = undefined;\n this.emitTrackUpdate();\n }\n setVideoFPS(fps) {\n if (!this.isManualOperationAllowed()) {\n return;\n }\n if (!isRemoteVideoTrack(this.track)) {\n return;\n }\n if (this.fps === fps) {\n return;\n }\n this.fps = fps;\n this.emitTrackUpdate();\n }\n get videoQuality() {\n var _a;\n return (_a = this.requestedMaxQuality) !== null && _a !== void 0 ? _a : VideoQuality.HIGH;\n }\n /** @internal */\n setTrack(track) {\n const prevStatus = this.subscriptionStatus;\n const prevPermission = this.permissionStatus;\n const prevTrack = this.track;\n if (prevTrack === track) {\n return;\n }\n if (prevTrack) {\n // unregister listener\n prevTrack.off(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n prevTrack.off(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n prevTrack.off(TrackEvent.Ended, this.handleEnded);\n prevTrack.detach();\n prevTrack.stopMonitor();\n this.emit(TrackEvent.Unsubscribed, prevTrack);\n }\n super.setTrack(track);\n if (track) {\n track.sid = this.trackSid;\n track.on(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n track.on(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n track.on(TrackEvent.Ended, this.handleEnded);\n this.emit(TrackEvent.Subscribed, track);\n }\n this.emitPermissionUpdateIfChanged(prevPermission);\n this.emitSubscriptionUpdateIfChanged(prevStatus);\n }\n /** @internal */\n setAllowed(allowed) {\n const prevStatus = this.subscriptionStatus;\n const prevPermission = this.permissionStatus;\n this.allowed = allowed;\n this.emitPermissionUpdateIfChanged(prevPermission);\n this.emitSubscriptionUpdateIfChanged(prevStatus);\n }\n /** @internal */\n setSubscriptionError(error) {\n this.emit(TrackEvent.SubscriptionFailed, error);\n }\n /** @internal */\n updateInfo(info) {\n super.updateInfo(info);\n const prevMetadataMuted = this.metadataMuted;\n this.metadataMuted = info.muted;\n if (this.track) {\n this.track.setMuted(info.muted);\n } else if (prevMetadataMuted !== info.muted) {\n this.emit(info.muted ? TrackEvent.Muted : TrackEvent.Unmuted);\n }\n }\n emitSubscriptionUpdateIfChanged(previousStatus) {\n const currentStatus = this.subscriptionStatus;\n if (previousStatus === currentStatus) {\n return;\n }\n this.emit(TrackEvent.SubscriptionStatusChanged, currentStatus, previousStatus);\n }\n emitPermissionUpdateIfChanged(previousPermissionStatus) {\n const currentPermissionStatus = this.permissionStatus;\n if (currentPermissionStatus !== previousPermissionStatus) {\n this.emit(TrackEvent.SubscriptionPermissionChanged, this.permissionStatus, previousPermissionStatus);\n }\n }\n isManualOperationAllowed() {\n if (!this.isDesired) {\n this.log.warn('cannot update track settings when not subscribed', this.logContext);\n return false;\n }\n return true;\n }\n get isAdaptiveStream() {\n return isRemoteVideoTrack(this.track) && this.track.isAdaptiveStream;\n }\n /* @internal */\n emitTrackUpdate() {\n const settings = new UpdateTrackSettings({\n trackSids: [this.trackSid],\n disabled: !this.isEnabled,\n fps: this.fps\n });\n if (this.kind === Track.Kind.Video) {\n let minDimensions = this.requestedVideoDimensions;\n if (this.videoDimensionsAdaptiveStream !== undefined) {\n if (minDimensions) {\n // check whether the adaptive stream dimensions are smaller than the requested dimensions and use smaller one\n const smallerAdaptive = areDimensionsSmaller(this.videoDimensionsAdaptiveStream, minDimensions);\n if (smallerAdaptive) {\n this.log.debug('using adaptive stream dimensions instead of requested', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n minDimensions = this.videoDimensionsAdaptiveStream;\n }\n } else if (this.requestedMaxQuality !== undefined && this.trackInfo) {\n // check whether adaptive stream dimensions are smaller than the max quality layer and use smaller one\n const maxQualityLayer = layerDimensionsFor(this.trackInfo, this.requestedMaxQuality);\n if (maxQualityLayer && areDimensionsSmaller(this.videoDimensionsAdaptiveStream, maxQualityLayer)) {\n this.log.debug('using adaptive stream dimensions instead of max quality layer', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n minDimensions = this.videoDimensionsAdaptiveStream;\n }\n } else {\n this.log.debug('using adaptive stream dimensions', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n minDimensions = this.videoDimensionsAdaptiveStream;\n }\n }\n if (minDimensions) {\n settings.width = Math.ceil(minDimensions.width);\n settings.height = Math.ceil(minDimensions.height);\n } else if (this.requestedMaxQuality !== undefined) {\n this.log.debug('using requested max quality', Object.assign(Object.assign({}, this.logContext), {\n quality: this.requestedMaxQuality\n }));\n settings.quality = this.requestedMaxQuality;\n } else {\n this.log.debug('using default quality', Object.assign(Object.assign({}, this.logContext), {\n quality: VideoQuality.HIGH\n }));\n // defaults to high quality\n settings.quality = VideoQuality.HIGH;\n }\n }\n this.emit(TrackEvent.UpdateSettings, settings);\n }\n}class RemoteParticipant extends Participant {\n /** @internal */\n static fromParticipantInfo(signalClient, pi, loggerOptions, manager) {\n return new RemoteParticipant(signalClient, pi.sid, pi.identity, pi.name, pi.metadata, pi.attributes, loggerOptions, pi.kind, pi.dataTracks.map(dti => {\n const info = DataTrackInfo.from(dti);\n return new RemoteDataTrack(info, manager, {\n publisherIdentity: pi.identity\n });\n }), pi.clientProtocol);\n }\n get logContext() {\n return Object.assign(Object.assign({}, super.logContext), {\n remoteParticipantID: this.sid,\n remoteParticipant: this.identity\n });\n }\n /** @internal */\n constructor(signalClient, sid, identity, name, metadata, attributes, loggerOptions) {\n let kind = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : ParticipantInfo_Kind.STANDARD;\n let remoteDataTracks = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : [];\n let clientProtocol = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : CLIENT_PROTOCOL_DEFAULT;\n super(sid, identity || '', name, metadata, attributes, loggerOptions, kind);\n this.signalClient = signalClient;\n this.trackPublications = new Map();\n this.audioTrackPublications = new Map();\n this.videoTrackPublications = new Map();\n this.dataTracks = new DeferrableMap(remoteDataTracks.map(remoteDataTrack => {\n return [remoteDataTrack.info.name, remoteDataTrack];\n }));\n this.volumeMap = new Map();\n this.clientProtocol = clientProtocol;\n }\n addTrackPublication(publication) {\n super.addTrackPublication(publication);\n // register action events\n publication.on(TrackEvent.UpdateSettings, settings => {\n this.log.debug('send update settings', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)), {\n settings\n }));\n this.signalClient.sendUpdateTrackSettings(settings);\n });\n publication.on(TrackEvent.UpdateSubscription, sub => {\n sub.participantTracks.forEach(pt => {\n pt.participantSid = this.sid;\n });\n this.signalClient.sendUpdateSubscription(sub);\n });\n publication.on(TrackEvent.SubscriptionPermissionChanged, status => {\n this.emit(ParticipantEvent.TrackSubscriptionPermissionChanged, publication, status);\n });\n publication.on(TrackEvent.SubscriptionStatusChanged, status => {\n this.emit(ParticipantEvent.TrackSubscriptionStatusChanged, publication, status);\n });\n publication.on(TrackEvent.Subscribed, track => {\n this.emit(ParticipantEvent.TrackSubscribed, track, publication);\n });\n publication.on(TrackEvent.Unsubscribed, previousTrack => {\n this.emit(ParticipantEvent.TrackUnsubscribed, previousTrack, publication);\n });\n publication.on(TrackEvent.SubscriptionFailed, error => {\n this.emit(ParticipantEvent.TrackSubscriptionFailed, publication.trackSid, error);\n });\n }\n getTrackPublication(source) {\n const track = super.getTrackPublication(source);\n if (track) {\n return track;\n }\n }\n getTrackPublicationByName(name) {\n const track = super.getTrackPublicationByName(name);\n if (track) {\n return track;\n }\n }\n /**\n * sets the volume on the participant's audio track\n * by default, this affects the microphone publication\n * a different source can be passed in as a second argument\n * if no track exists the volume will be applied when the microphone track is added\n */\n setVolume(volume) {\n let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Track.Source.Microphone;\n this.volumeMap.set(source, volume);\n const audioPublication = this.getTrackPublication(source);\n if (audioPublication && audioPublication.track) {\n audioPublication.track.setVolume(volume);\n }\n }\n /**\n * gets the volume on the participant's microphone track\n */\n getVolume() {\n let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Track.Source.Microphone;\n const audioPublication = this.getTrackPublication(source);\n if (audioPublication && audioPublication.track) {\n return audioPublication.track.getVolume();\n }\n return this.volumeMap.get(source);\n }\n /** @internal */\n addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft) {\n // find the track publication\n // it's possible for the media track to arrive before participant info\n let publication = this.getTrackPublicationBySid(sid);\n // it's also possible that the browser didn't honor our original track id\n // FireFox would use its own local uuid instead of server track id\n if (!publication) {\n if (!sid.startsWith('TR')) {\n // find the first track that matches type\n this.trackPublications.forEach(p => {\n if (!publication && mediaTrack.kind === p.kind.toString()) {\n publication = p;\n }\n });\n }\n }\n // when we couldn't locate the track, it's possible that the metadata hasn't\n // yet arrived. Wait a bit longer for it to arrive, or fire an error\n if (!publication) {\n if (triesLeft === 0) {\n this.log.error('could not find published track', Object.assign(Object.assign({}, this.logContext), {\n trackSid: sid\n }));\n this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);\n return;\n }\n if (triesLeft === undefined) triesLeft = 20;\n setTimeout(() => {\n this.addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft - 1);\n }, 150);\n return;\n }\n if (mediaTrack.readyState === 'ended') {\n this.log.error('unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)));\n this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);\n return;\n }\n const isVideo = mediaTrack.kind === 'video';\n let track;\n if (isVideo) {\n track = new RemoteVideoTrack(mediaTrack, sid, receiver, adaptiveStreamSettings);\n } else {\n track = new RemoteAudioTrack(mediaTrack, sid, receiver, this.audioContext, this.audioOutput);\n }\n // set track info\n track.source = publication.source;\n // keep publication's muted status\n track.isMuted = publication.isMuted;\n track.setMediaStream(mediaStream);\n track.start();\n publication.setTrack(track);\n // set participant volumes on new audio tracks\n if (this.volumeMap.has(publication.source) && isRemoteTrack(track) && isAudioTrack(track)) {\n track.setVolume(this.volumeMap.get(publication.source));\n }\n return publication;\n }\n /** @internal */\n get hasMetadata() {\n return !!this.participantInfo;\n }\n /**\n * @internal\n */\n getTrackPublicationBySid(sid) {\n return this.trackPublications.get(sid);\n }\n /** @internal */\n updateInfo(info) {\n if (!super.updateInfo(info)) {\n return false;\n }\n // we are getting a list of all available tracks, reconcile in here\n // and send out events for changes\n // reconcile track publications, publish events only if metadata is already there\n // i.e. changes since the local participant has joined\n const validTracks = new Map();\n const newTracks = new Map();\n info.tracks.forEach(ti => {\n var _a, _b;\n let publication = this.getTrackPublicationBySid(ti.sid);\n if (!publication) {\n // new publication\n const kind = Track.kindFromProto(ti.type);\n if (!kind) {\n return;\n }\n publication = new RemoteTrackPublication(kind, ti, (_a = this.signalClient.connectOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe, {\n loggerContextCb: () => this.logContext,\n loggerName: (_b = this.loggerOptions) === null || _b === void 0 ? void 0 : _b.loggerName\n });\n publication.updateInfo(ti);\n newTracks.set(ti.sid, publication);\n const existingTrackOfSource = Array.from(this.trackPublications.values()).find(publishedTrack => publishedTrack.source === (publication === null || publication === void 0 ? void 0 : publication.source));\n if (existingTrackOfSource && publication.source !== Track.Source.Unknown) {\n this.log.debug(\"received a second track publication for \".concat(this.identity, \" with the same source: \").concat(publication.source), Object.assign(Object.assign({}, this.logContext), {\n oldTrack: getLogContextFromTrack(existingTrackOfSource),\n newTrack: getLogContextFromTrack(publication)\n }));\n }\n this.addTrackPublication(publication);\n } else {\n publication.updateInfo(ti);\n }\n validTracks.set(ti.sid, publication);\n });\n // detect removed tracks\n this.trackPublications.forEach(publication => {\n if (!validTracks.has(publication.trackSid)) {\n this.log.trace('detected removed track on remote participant, unpublishing', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)));\n this.unpublishTrack(publication.trackSid, true);\n }\n });\n // always emit events for new publications, Room will not forward them unless it's ready\n newTracks.forEach(publication => {\n this.emit(ParticipantEvent.TrackPublished, publication);\n });\n return true;\n }\n /** @internal */\n unpublishTrack(sid, sendUnpublish) {\n const publication = this.trackPublications.get(sid);\n if (!publication) {\n return;\n }\n // also send unsubscribe, if track is actively subscribed\n const track = publication.track;\n if (track) {\n track.stop();\n publication.setTrack(undefined);\n }\n // remove track from maps only after unsubscribed has been fired\n this.trackPublications.delete(sid);\n // remove from the right type map\n switch (publication.kind) {\n case Track.Kind.Audio:\n this.audioTrackPublications.delete(sid);\n break;\n case Track.Kind.Video:\n this.videoTrackPublications.delete(sid);\n break;\n }\n if (sendUnpublish) {\n this.emit(ParticipantEvent.TrackUnpublished, publication);\n }\n }\n /**\n * @internal\n */\n setAudioOutput(output) {\n return __awaiter(this, void 0, void 0, function* () {\n this.audioOutput = output;\n const promises = [];\n this.audioTrackPublications.forEach(pub => {\n var _a;\n if (isAudioTrack(pub.track) && isRemoteTrack(pub.track)) {\n promises.push(pub.track.setSinkId((_a = output.deviceId) !== null && _a !== void 0 ? _a : 'default'));\n }\n });\n yield Promise.all(promises);\n });\n }\n /** @internal */\n addRemoteDataTrack(remoteDataTrack) {\n this.dataTracks.set(remoteDataTrack.info.name, remoteDataTrack);\n }\n /** @internal */\n removeRemoteDataTrack(remoteDataTrackSid) {\n for (const _ref of this.dataTracks.entries()) {\n var _ref2 = _slicedToArray(_ref, 2);\n const name = _ref2[0];\n const dataTrack = _ref2[1];\n if (remoteDataTrackSid === dataTrack.info.sid) {\n this.dataTracks.delete(name);\n }\n }\n }\n /** @internal */\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n this.log.trace('participant event', Object.assign(Object.assign({}, this.logContext), {\n event,\n args\n }));\n return super.emit(event, ...args);\n }\n}var ConnectionState;\n(function (ConnectionState) {\n ConnectionState[\"Disconnected\"] = \"disconnected\";\n ConnectionState[\"Connecting\"] = \"connecting\";\n ConnectionState[\"Connected\"] = \"connected\";\n ConnectionState[\"Reconnecting\"] = \"reconnecting\";\n ConnectionState[\"SignalReconnecting\"] = \"signalReconnecting\";\n})(ConnectionState || (ConnectionState = {}));\nconst CONNECTION_RECONCILE_FREQUENCY_MS = 4 * 1000;\n/**\n * In LiveKit, a room is the logical grouping for a list of participants.\n * Participants in a room can publish tracks, and subscribe to others' tracks.\n *\n * a Room fires [[RoomEvent | RoomEvents]].\n *\n * @noInheritDoc\n */\nclass Room extends eventsExports.EventEmitter {\n get hasE2EESetup() {\n return this.e2eeManager !== undefined;\n }\n /**\n * Creates a new Room, the primary construct for a LiveKit session.\n * @param options\n */\n constructor(options) {\n var _this;\n var _a, _b, _c, _d, _e, _f;\n super();\n _this = this;\n this.state = ConnectionState.Disconnected;\n /**\n * list of participants that are actively speaking. when this changes\n * a [[RoomEvent.ActiveSpeakersChanged]] event is fired\n */\n this.activeSpeakers = [];\n /** reflects the sender encryption status of the local participant */\n this.isE2EEEnabled = false;\n this.audioEnabled = true;\n this.e2eeStateMutex = new _();\n this.isVideoPlaybackBlocked = false;\n this.log = livekitLogger;\n this.bufferedEvents = [];\n this.isResuming = false;\n this.connect = (url, token, opts) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (!isBrowserSupported()) {\n if (isReactNative()) {\n throw Error(\"WebRTC isn't detected, have you called registerGlobals?\");\n } else {\n throw Error(\"LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.\");\n }\n }\n // In case a disconnect called happened right before the connect call, make sure the disconnect is completed first by awaiting its lock\n const unlockDisconnect = yield this.disconnectLock.lock();\n if (this.state === ConnectionState.Connected) {\n // when the state is reconnecting or connected, this function returns immediately\n this.log.info(\"already connected to room \".concat(this.name));\n unlockDisconnect();\n return Promise.resolve();\n }\n if (this.connectFuture) {\n unlockDisconnect();\n return this.connectFuture.promise;\n }\n this.setAndEmitConnectionState(ConnectionState.Connecting);\n if (((_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.getServerUrl().toString()) !== ensureTrailingSlash(url)) {\n this.regionUrl = undefined;\n this.regionUrlProvider = undefined;\n }\n if (isCloud(new URL(url))) {\n if (this.regionUrlProvider === undefined) {\n this.regionUrlProvider = new RegionUrlProvider(url, token);\n } else {\n this.regionUrlProvider.updateToken(token);\n }\n // trigger the first fetch without waiting for a response\n // if initial connection fails, this will speed up picking regional url\n // on subsequent runs\n this.regionUrlProvider.fetchRegionSettings().then(settings => {\n var _a;\n (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.setServerReportedRegions(settings);\n }).catch(e => {\n this.log.warn('could not fetch region settings', {\n error: e\n });\n });\n }\n const connectFn = (resolve, reject, regionUrl) => __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (this.abortController) {\n this.abortController.abort();\n }\n // explicit creation as local var needed to satisfy TS compiler when passing it to `attemptConnection` further down\n const abortController = new AbortController();\n this.abortController = abortController;\n // at this point the intention to connect has been signalled so we can allow cancelling of the connection via disconnect() again\n unlockDisconnect === null || unlockDisconnect === void 0 ? void 0 : unlockDisconnect();\n try {\n yield BackOffStrategy.getInstance().getBackOffPromise(url);\n if (abortController.signal.aborted) {\n throw ConnectionError.cancelled('Connection attempt aborted');\n }\n yield this.attemptConnection(regionUrl !== null && regionUrl !== void 0 ? regionUrl : url, token, opts, abortController);\n this.abortController = undefined;\n resolve();\n } catch (error) {\n if (this.regionUrlProvider && error instanceof ConnectionError && error.reason !== ConnectionErrorReason.Cancelled && error.reason !== ConnectionErrorReason.NotAllowed) {\n let nextUrl = null;\n try {\n this.log.debug('Fetching next region');\n nextUrl = yield this.regionUrlProvider.getNextBestRegionUrl((_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal);\n } catch (regionFetchError) {\n if (regionFetchError instanceof ConnectionError && (regionFetchError.status === 401 || regionFetchError.reason === ConnectionErrorReason.Cancelled)) {\n this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);\n reject(regionFetchError);\n return;\n }\n }\n if (\n // making sure we only register failed attempts on things we actually care about\n [ConnectionErrorReason.InternalError, ConnectionErrorReason.ServerUnreachable, ConnectionErrorReason.Timeout].includes(error.reason)) {\n this.log.debug('Adding failed connection attempt to back off');\n BackOffStrategy.getInstance().addFailedConnectionAttempt(url);\n }\n if (nextUrl && !((_b = this.abortController) === null || _b === void 0 ? void 0 : _b.signal.aborted)) {\n this.log.info(\"Initial connection failed with ConnectionError: \".concat(error.message, \". Retrying with another region: \").concat(nextUrl));\n this.recreateEngine(true);\n yield connectFn(resolve, reject, nextUrl);\n } else {\n this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, getDisconnectReasonFromConnectionError(error));\n reject(error);\n }\n } else {\n let disconnectReason = DisconnectReason.UNKNOWN_REASON;\n if (error instanceof ConnectionError) {\n disconnectReason = getDisconnectReasonFromConnectionError(error);\n }\n this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, disconnectReason);\n reject(error);\n }\n }\n });\n const regionUrl = this.regionUrl;\n this.regionUrl = undefined;\n this.connectFuture = new Future((resolve, reject) => {\n connectFn(resolve, reject, regionUrl);\n }, () => {\n this.clearConnectionFutures();\n });\n return this.connectFuture.promise;\n });\n this.connectSignal = (url, token, engine, connectOptions, roomOptions, abortController) => __awaiter(this, void 0, void 0, function* () {\n const _yield$engine$join = yield engine.join(url, token, {\n autoSubscribe: connectOptions.autoSubscribe,\n adaptiveStream: typeof roomOptions.adaptiveStream === 'object' ? true : roomOptions.adaptiveStream,\n clientInfoCapabilities: isPacketTrailerSupported(roomOptions.packetTrailer) || !!this.e2eeManager ? [ClientInfo_Capability.CAP_PACKET_TRAILER] : undefined,\n maxRetries: connectOptions.maxRetries,\n e2eeEnabled: !!this.e2eeManager,\n websocketTimeout: connectOptions.websocketTimeout\n }, abortController.signal, !roomOptions.singlePeerConnection),\n joinResponse = _yield$engine$join.joinResponse,\n serverInfo = _yield$engine$join.serverInfo;\n this.serverInfo = serverInfo;\n if (!serverInfo.version) {\n throw new UnsupportedServer('unknown server version');\n }\n if (serverInfo.version === '0.15.1' && this.options.dynacast) {\n this.log.debug('disabling dynacast due to server version');\n // dynacast has a bug in 0.15.1, so we cannot use it then\n roomOptions.dynacast = false;\n }\n return joinResponse;\n });\n this.applyJoinResponse = joinResponse => {\n const pi = joinResponse.participant;\n this.localParticipant.sid = pi.sid;\n this.localParticipant.identity = pi.identity;\n this.localParticipant.setEnabledPublishCodecs(joinResponse.enabledPublishCodecs);\n if (this.e2eeManager) {\n try {\n this.e2eeManager.setSifTrailer(joinResponse.sifTrailer);\n } catch (e) {\n this.log.error(e instanceof Error ? e.message : 'Could not set SifTrailer', {\n error: e\n });\n }\n }\n // populate remote participants, these should not trigger new events\n this.handleParticipantUpdates([pi, ...joinResponse.otherParticipants]);\n if (joinResponse.room) {\n this.handleRoomUpdate(joinResponse.room);\n }\n };\n this.attemptConnection = (url, token, opts, abortController) => __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (this.state === ConnectionState.Reconnecting || this.isResuming || ((_a = this.engine) === null || _a === void 0 ? void 0 : _a.pendingReconnect)) {\n this.log.info('Reconnection attempt replaced by new connection attempt');\n // make sure we close and recreate the existing engine in order to get rid of any potentially ongoing reconnection attempts\n this.recreateEngine(true);\n } else {\n // create engine if previously disconnected\n this.maybeCreateEngine();\n }\n if ((_b = this.regionUrlProvider) === null || _b === void 0 ? void 0 : _b.isCloud()) {\n this.engine.setRegionStrategy(this.createRegionStrategy());\n }\n this.acquireAudioContext();\n this.connOptions = Object.assign(Object.assign({}, roomConnectOptionDefaults), opts);\n if (this.connOptions.rtcConfig) {\n this.engine.rtcConfig = this.connOptions.rtcConfig;\n }\n if (this.connOptions.peerConnectionTimeout) {\n this.engine.peerConnectionTimeout = this.connOptions.peerConnectionTimeout;\n }\n try {\n const joinResponse = yield this.connectSignal(url, token, this.engine, this.connOptions, this.options, abortController);\n this.applyJoinResponse(joinResponse);\n // forward metadata changed for the local participant\n this.setupLocalParticipantEvents();\n this.emit(RoomEvent.SignalConnected);\n } catch (err) {\n yield this.engine.close();\n this.recreateEngine();\n const resultingError = abortController.signal.aborted ? ConnectionError.cancelled('Signal connection aborted') : ConnectionError.serverUnreachable('could not establish signal connection');\n if (err instanceof Error) {\n resultingError.message = \"\".concat(resultingError.message, \": \").concat(err.message);\n }\n if (err instanceof ConnectionError) {\n resultingError.reason = err.reason;\n resultingError.status = err.status;\n }\n this.log.debug(\"error trying to establish signal connection\", {\n error: err\n });\n throw resultingError;\n }\n if (abortController.signal.aborted) {\n yield this.engine.close();\n this.recreateEngine();\n throw ConnectionError.cancelled(\"Connection attempt aborted\");\n }\n try {\n yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout, abortController);\n } catch (e) {\n yield this.engine.close();\n this.recreateEngine();\n throw e;\n }\n // also hook unload event\n if (isWeb() && this.options.disconnectOnPageLeave) {\n // capturing both 'pagehide' and 'beforeunload' to capture broadest set of browser behaviors\n window.addEventListener('pagehide', this.onPageLeave);\n window.addEventListener('beforeunload', this.onPageLeave);\n }\n if (isWeb()) {\n window.addEventListener('freeze', this.onPageLeave);\n }\n this.setAndEmitConnectionState(ConnectionState.Connected);\n this.emit(RoomEvent.Connected);\n BackOffStrategy.getInstance().resetFailedConnectionAttempts(url);\n this.registerConnectionReconcile();\n // Notify region provider about successful connection\n if (this.regionUrlProvider) {\n this.regionUrlProvider.notifyConnected();\n }\n });\n /**\n * disconnects the room, emits [[RoomEvent.Disconnected]]\n */\n this.disconnect = function () {\n for (var _len = arguments.length, args_1 = new Array(_len), _key = 0; _key < _len; _key++) {\n args_1[_key] = arguments[_key];\n }\n return __awaiter(_this, [...args_1], void 0, function () {\n var _this2 = this;\n let stopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n return function* () {\n var _a, _b, _c;\n const unlock = yield _this2.disconnectLock.lock();\n try {\n if (_this2.state === ConnectionState.Disconnected) {\n _this2.log.debug('already disconnected');\n return;\n }\n _this2.log.info('disconnect from room');\n if (_this2.state === ConnectionState.Connecting || _this2.state === ConnectionState.Reconnecting || _this2.isResuming) {\n // try aborting pending connection attempt\n const msg = 'Abort connection attempt due to user initiated disconnect';\n _this2.log.warn(msg);\n (_a = _this2.abortController) === null || _a === void 0 ? void 0 : _a.abort(msg);\n // in case the abort controller didn't manage to cancel the connection attempt, reject the connect promise explicitly\n (_c = (_b = _this2.connectFuture) === null || _b === void 0 ? void 0 : _b.reject) === null || _c === void 0 ? void 0 : _c.call(_b, ConnectionError.cancelled('Client initiated disconnect'));\n _this2.connectFuture = undefined;\n }\n // close engine (also closes client)\n if (_this2.engine) {\n // send leave\n if (!_this2.engine.client.isDisconnected) {\n yield _this2.engine.client.sendLeave();\n }\n yield _this2.engine.close();\n }\n _this2.handleDisconnect(stopTracks, DisconnectReason.CLIENT_INITIATED);\n /* @ts-ignore */\n _this2.engine = undefined;\n } finally {\n unlock();\n }\n }();\n });\n };\n this.onPageLeave = () => __awaiter(this, void 0, void 0, function* () {\n this.log.info('Page leave detected, disconnecting');\n yield this.disconnect();\n });\n /**\n * Browsers have different policies regarding audio playback. Most requiring\n * some form of user interaction (click/tap/etc).\n * In those cases, audio will be silent until a click/tap triggering one of the following\n * - `startAudio`\n * - `getUserMedia`\n */\n this.startAudio = () => __awaiter(this, void 0, void 0, function* () {\n const elements = [];\n const browser = getBrowser();\n if (browser && browser.os === 'iOS') {\n /**\n * iOS blocks audio element playback if\n * - user is not publishing audio themselves and\n * - no other audio source is playing\n *\n * as a workaround, we create an audio element with an empty track, so that\n * silent audio is always playing\n */\n const audioId = 'livekit-dummy-audio-el';\n let dummyAudioEl = document.getElementById(audioId);\n if (!dummyAudioEl) {\n dummyAudioEl = document.createElement('audio');\n dummyAudioEl.id = audioId;\n dummyAudioEl.autoplay = true;\n dummyAudioEl.hidden = true;\n const track = getEmptyAudioStreamTrack();\n track.enabled = true;\n const stream = new MediaStream([track]);\n dummyAudioEl.srcObject = stream;\n document.addEventListener('visibilitychange', () => {\n if (!dummyAudioEl) {\n return;\n }\n // set the srcObject to null on page hide in order to prevent lock screen controls to show up for it\n dummyAudioEl.srcObject = document.hidden ? null : stream;\n if (!document.hidden) {\n this.log.debug('page visible again, triggering startAudio to resume playback and update playback status');\n this.startAudio();\n }\n });\n document.body.append(dummyAudioEl);\n this.once(RoomEvent.Disconnected, () => {\n dummyAudioEl === null || dummyAudioEl === void 0 ? void 0 : dummyAudioEl.remove();\n dummyAudioEl = null;\n });\n }\n elements.push(dummyAudioEl);\n }\n this.remoteParticipants.forEach(p => {\n p.audioTrackPublications.forEach(t => {\n if (t.track) {\n t.track.attachedElements.forEach(e => {\n elements.push(e);\n });\n }\n });\n });\n try {\n yield Promise.all([this.acquireAudioContext(), ...elements.map(e => {\n e.muted = false;\n return e.play();\n })]);\n this.handleAudioPlaybackStarted();\n } catch (err) {\n this.handleAudioPlaybackFailed(err);\n throw err;\n }\n });\n this.startVideo = () => __awaiter(this, void 0, void 0, function* () {\n const elements = [];\n for (const p of this.remoteParticipants.values()) {\n p.videoTrackPublications.forEach(tr => {\n var _a;\n (_a = tr.track) === null || _a === void 0 ? void 0 : _a.attachedElements.forEach(el => {\n if (!elements.includes(el)) {\n elements.push(el);\n }\n });\n });\n }\n yield Promise.all(elements.map(el => el.play())).then(() => {\n this.handleVideoPlaybackStarted();\n }).catch(e => {\n if (e.name === 'NotAllowedError') {\n this.handleVideoPlaybackFailed();\n } else {\n this.log.warn('Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler');\n }\n });\n });\n this.handleRestarting = () => {\n this.clearConnectionReconcile();\n // in case we went from resuming to full-reconnect, make sure to reflect it on the isResuming flag\n this.isResuming = false;\n // also unwind existing participants & existing subscriptions\n for (const p of this.remoteParticipants.values()) {\n this.handleParticipantDisconnected(p.identity, p);\n }\n if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {\n this.emit(RoomEvent.Reconnecting);\n }\n };\n this.handleRestarted = () => {\n this.outgoingDataTrackManager.sfuWillRepublishTracks();\n this.incomingDataTrackManager.resendSubscriptionUpdates();\n };\n this.handleSignalRestarted = joinResponse => __awaiter(this, void 0, void 0, function* () {\n this.log.debug(\"signal reconnected to server, region \".concat(joinResponse.serverRegion), {\n region: joinResponse.serverRegion\n });\n this.bufferedEvents = [];\n this.applyJoinResponse(joinResponse);\n try {\n // unpublish & republish tracks\n yield this.localParticipant.republishAllTracks(undefined, true);\n } catch (error) {\n this.log.error('error trying to re-publish tracks after reconnection', {\n error\n });\n }\n try {\n yield this.engine.waitForRestarted();\n this.log.debug(\"fully reconnected to server\", {\n region: joinResponse.serverRegion\n });\n } catch (_a) {\n // reconnection failed, handleDisconnect is being invoked already, just return here\n return;\n }\n this.setAndEmitConnectionState(ConnectionState.Connected);\n this.emit(RoomEvent.Reconnected);\n this.registerConnectionReconcile();\n this.emitBufferedEvents();\n });\n this.handleParticipantUpdates = participantInfos => {\n var _a;\n // handle changes to participant state, and send events\n for (const info of participantInfos) {\n if (info.identity === this.localParticipant.identity) {\n this.localParticipant.updateInfo(info);\n continue;\n }\n // LiveKit server doesn't send identity info prior to version 1.5.2 in disconnect updates\n // so we try to map an empty identity to an already known sID manually\n if (info.identity === '') {\n info.identity = (_a = this.sidToIdentity.get(info.sid)) !== null && _a !== void 0 ? _a : '';\n }\n let remoteParticipant = this.remoteParticipants.get(info.identity);\n // when it's disconnected, send updates\n if (info.state === ParticipantInfo_State.DISCONNECTED) {\n this.handleParticipantDisconnected(info.identity, remoteParticipant);\n } else {\n // create participant if doesn't exist\n this.getOrCreateParticipant(info.identity, info);\n }\n }\n // Ingest data track publication updates into data tracks infrastructure\n const mapped = new Map(participantInfos.filter(p => p.identity !== this.localParticipant.identity).map(info => {\n return [info.identity, info.dataTracks.map(dataTrack => DataTrackInfo.from(dataTrack))];\n }));\n this.incomingDataTrackManager.receiveSfuPublicationUpdates(mapped);\n };\n // updates are sent only when there's a change to speaker ordering\n this.handleActiveSpeakersUpdate = speakers => {\n const activeSpeakers = [];\n const seenSids = {};\n speakers.forEach(speaker => {\n seenSids[speaker.sid] = true;\n if (speaker.sid === this.localParticipant.sid) {\n this.localParticipant.audioLevel = speaker.level;\n this.localParticipant.setIsSpeaking(true);\n activeSpeakers.push(this.localParticipant);\n } else {\n const p = this.getRemoteParticipantBySid(speaker.sid);\n if (p) {\n p.audioLevel = speaker.level;\n p.setIsSpeaking(true);\n activeSpeakers.push(p);\n }\n }\n });\n if (!seenSids[this.localParticipant.sid]) {\n this.localParticipant.audioLevel = 0;\n this.localParticipant.setIsSpeaking(false);\n }\n this.remoteParticipants.forEach(p => {\n if (!seenSids[p.sid]) {\n p.audioLevel = 0;\n p.setIsSpeaking(false);\n }\n });\n this.activeSpeakers = activeSpeakers;\n this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n };\n // process list of changed speakers\n this.handleSpeakersChanged = speakerUpdates => {\n const lastSpeakers = new Map();\n this.activeSpeakers.forEach(p => {\n const remoteParticipant = this.remoteParticipants.get(p.identity);\n if (remoteParticipant && remoteParticipant.sid !== p.sid) {\n return;\n }\n lastSpeakers.set(p.sid, p);\n });\n speakerUpdates.forEach(speaker => {\n let p = this.getRemoteParticipantBySid(speaker.sid);\n if (speaker.sid === this.localParticipant.sid) {\n p = this.localParticipant;\n }\n if (!p) {\n return;\n }\n p.audioLevel = speaker.level;\n p.setIsSpeaking(speaker.active);\n if (speaker.active) {\n lastSpeakers.set(speaker.sid, p);\n } else {\n lastSpeakers.delete(speaker.sid);\n }\n });\n const activeSpeakers = Array.from(lastSpeakers.values());\n activeSpeakers.sort((a, b) => b.audioLevel - a.audioLevel);\n this.activeSpeakers = activeSpeakers;\n this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n };\n this.handleStreamStateUpdate = streamStateUpdate => {\n streamStateUpdate.streamStates.forEach(streamState => {\n const participant = this.getRemoteParticipantBySid(streamState.participantSid);\n if (!participant) {\n return;\n }\n const pub = participant.getTrackPublicationBySid(streamState.trackSid);\n if (!pub || !pub.track) {\n return;\n }\n const newStreamState = Track.streamStateFromProto(streamState.state);\n pub.track.setStreamState(newStreamState);\n if (newStreamState !== pub.track.streamState) {\n participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);\n this.emitWhenConnected(RoomEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant);\n }\n });\n };\n this.handleSubscriptionPermissionUpdate = update => {\n const participant = this.getRemoteParticipantBySid(update.participantSid);\n if (!participant) {\n return;\n }\n const pub = participant.getTrackPublicationBySid(update.trackSid);\n if (!pub) {\n return;\n }\n pub.setAllowed(update.allowed);\n };\n this.handleSubscriptionError = update => {\n const participant = Array.from(this.remoteParticipants.values()).find(p => p.trackPublications.has(update.trackSid));\n if (!participant) {\n return;\n }\n const pub = participant.getTrackPublicationBySid(update.trackSid);\n if (!pub) {\n return;\n }\n pub.setSubscriptionError(update.err);\n };\n this.handleDataPacket = (packet, encryptionType) => {\n // find the participant\n const participant = this.remoteParticipants.get(packet.participantIdentity);\n if (packet.value.case === 'user') {\n this.handleUserPacket(participant, packet.value.value, packet.kind, encryptionType);\n } else if (packet.value.case === 'transcription') {\n this.handleTranscription(participant, packet.value.value);\n } else if (packet.value.case === 'sipDtmf') {\n this.handleSipDtmf(participant, packet.value.value);\n } else if (packet.value.case === 'chatMessage') {\n this.handleChatMessage(participant, packet.value.value);\n } else if (packet.value.case === 'metrics') {\n this.handleMetrics(packet.value.value, participant);\n } else if (packet.value.case === 'streamHeader' || packet.value.case === 'streamChunk' || packet.value.case === 'streamTrailer') {\n this.handleDataStream(packet, encryptionType);\n } else if (packet.value.case === 'rpcRequest') {\n const rpc = packet.value.value;\n this.rpcServerManager.handleIncomingRpcRequest(packet.participantIdentity, rpc);\n } else if (packet.value.case === 'rpcResponse') {\n const rpcResponse = packet.value.value;\n switch (rpcResponse.value.case) {\n case 'payload':\n this.rpcClientManager.handleIncomingRpcResponseSuccess(rpcResponse.requestId, rpcResponse.value.value);\n break;\n case 'error':\n this.rpcClientManager.handleIncomingRpcResponseFailure(rpcResponse.requestId, RpcError.fromProto(rpcResponse.value.value));\n break;\n default:\n this.log.warn(\"Unknown rpcResponse.value.case: \".concat(rpcResponse.value.case), this.logContext);\n break;\n }\n } else if (packet.value.case === 'rpcAck') {\n this.rpcClientManager.handleIncomingRpcAck(packet.value.value.requestId);\n }\n };\n this.handleUserPacket = (participant, userPacket, kind, encryptionType) => {\n this.emit(RoomEvent.DataReceived, userPacket.payload, participant, kind, userPacket.topic, encryptionType);\n // also emit on the participant\n participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.DataReceived, userPacket.payload, kind, encryptionType);\n };\n this.handleSipDtmf = (participant, dtmf) => {\n this.emit(RoomEvent.SipDTMFReceived, dtmf, participant);\n // also emit on the participant\n participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.SipDTMFReceived, dtmf);\n };\n this.handleTranscription = (_remoteParticipant, transcription) => {\n // find the participant\n const participant = transcription.transcribedParticipantIdentity === this.localParticipant.identity ? this.localParticipant : this.getParticipantByIdentity(transcription.transcribedParticipantIdentity);\n const publication = participant === null || participant === void 0 ? void 0 : participant.trackPublications.get(transcription.trackId);\n const segments = extractTranscriptionSegments(transcription, this.transcriptionReceivedTimes);\n publication === null || publication === void 0 ? void 0 : publication.emit(TrackEvent.TranscriptionReceived, segments);\n participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.TranscriptionReceived, segments, publication);\n this.emit(RoomEvent.TranscriptionReceived, segments, participant, publication);\n };\n this.handleChatMessage = (participant, chatMessage) => {\n const msg = extractChatMessage(chatMessage);\n this.emit(RoomEvent.ChatMessage, msg, participant);\n };\n this.handleMetrics = (metrics, participant) => {\n this.emit(RoomEvent.MetricsReceived, metrics, participant);\n };\n this.handleDataStream = (packet, encryptionType) => {\n this.incomingDataStreamManager.handleDataStreamPacket(packet, encryptionType);\n };\n this.bufferedSegments = new Map();\n this.handleAudioPlaybackStarted = () => {\n if (this.canPlaybackAudio) {\n return;\n }\n this.audioEnabled = true;\n this.emit(RoomEvent.AudioPlaybackStatusChanged, true);\n };\n this.handleAudioPlaybackFailed = e => {\n this.log.warn('could not playback audio', {\n error: e\n });\n if (!this.canPlaybackAudio) {\n return;\n }\n this.audioEnabled = false;\n this.emit(RoomEvent.AudioPlaybackStatusChanged, false);\n };\n this.handleVideoPlaybackStarted = () => {\n if (this.isVideoPlaybackBlocked) {\n this.isVideoPlaybackBlocked = false;\n this.emit(RoomEvent.VideoPlaybackStatusChanged, true);\n }\n };\n this.handleVideoPlaybackFailed = () => {\n if (!this.isVideoPlaybackBlocked) {\n this.isVideoPlaybackBlocked = true;\n this.emit(RoomEvent.VideoPlaybackStatusChanged, false);\n }\n };\n this.handleDeviceChange = () => __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.os) !== 'iOS') {\n // default devices are non deterministic on iOS, so we don't attempt to select them here\n yield this.selectDefaultDevices();\n }\n this.emit(RoomEvent.MediaDevicesChanged);\n });\n this.handleRoomUpdate = room => {\n const oldRoom = this.roomInfo;\n this.roomInfo = room;\n if (oldRoom && oldRoom.metadata !== room.metadata) {\n this.emitWhenConnected(RoomEvent.RoomMetadataChanged, room.metadata);\n }\n if ((oldRoom === null || oldRoom === void 0 ? void 0 : oldRoom.activeRecording) !== room.activeRecording) {\n this.emitWhenConnected(RoomEvent.RecordingStatusChanged, room.activeRecording);\n }\n };\n this.handleConnectionQualityUpdate = update => {\n update.updates.forEach(info => {\n if (info.participantSid === this.localParticipant.sid) {\n this.localParticipant.setConnectionQuality(info.quality);\n return;\n }\n const participant = this.getRemoteParticipantBySid(info.participantSid);\n if (participant) {\n participant.setConnectionQuality(info.quality);\n }\n });\n };\n this.getRemoteParticipantClientProtocol = identity => {\n var _a, _b;\n return (_b = (_a = this.remoteParticipants.get(identity)) === null || _a === void 0 ? void 0 : _a.clientProtocol) !== null && _b !== void 0 ? _b : CLIENT_PROTOCOL_DEFAULT;\n };\n this.onLocalParticipantMetadataChanged = metadata => {\n this.emit(RoomEvent.ParticipantMetadataChanged, metadata, this.localParticipant);\n };\n this.onLocalParticipantNameChanged = name => {\n this.emit(RoomEvent.ParticipantNameChanged, name, this.localParticipant);\n };\n this.onLocalAttributesChanged = changedAttributes => {\n this.emit(RoomEvent.ParticipantAttributesChanged, changedAttributes, this.localParticipant);\n };\n this.onLocalTrackMuted = pub => {\n this.emit(RoomEvent.TrackMuted, pub, this.localParticipant);\n };\n this.onLocalTrackUnmuted = pub => {\n this.emit(RoomEvent.TrackUnmuted, pub, this.localParticipant);\n };\n this.onTrackProcessorUpdate = processor => {\n var _a;\n (_a = processor === null || processor === void 0 ? void 0 : processor.onPublish) === null || _a === void 0 ? void 0 : _a.call(processor, this);\n };\n this.onLocalTrackPublished = pub => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f;\n (_a = pub.track) === null || _a === void 0 ? void 0 : _a.on(TrackEvent.TrackProcessorUpdate, this.onTrackProcessorUpdate);\n (_b = pub.track) === null || _b === void 0 ? void 0 : _b.on(TrackEvent.Restarted, this.onLocalTrackRestarted);\n (_e = (_d = (_c = pub.track) === null || _c === void 0 ? void 0 : _c.getProcessor()) === null || _d === void 0 ? void 0 : _d.onPublish) === null || _e === void 0 ? void 0 : _e.call(_d, this);\n this.emit(RoomEvent.LocalTrackPublished, pub, this.localParticipant);\n if (isLocalAudioTrack(pub.track)) {\n const trackIsSilent = yield pub.track.checkForSilence();\n if (trackIsSilent) {\n this.emit(RoomEvent.LocalAudioSilenceDetected, pub);\n }\n }\n const deviceId = yield (_f = pub.track) === null || _f === void 0 ? void 0 : _f.getDeviceId(false);\n const deviceKind = sourceToKind(pub.source);\n if (deviceKind && deviceId && deviceId !== this.localParticipant.activeDeviceMap.get(deviceKind)) {\n this.localParticipant.activeDeviceMap.set(deviceKind, deviceId);\n this.emit(RoomEvent.ActiveDeviceChanged, deviceKind, deviceId);\n }\n });\n this.onLocalTrackUnpublished = pub => {\n var _a, _b;\n (_a = pub.track) === null || _a === void 0 ? void 0 : _a.off(TrackEvent.TrackProcessorUpdate, this.onTrackProcessorUpdate);\n (_b = pub.track) === null || _b === void 0 ? void 0 : _b.off(TrackEvent.Restarted, this.onLocalTrackRestarted);\n this.emit(RoomEvent.LocalTrackUnpublished, pub, this.localParticipant);\n };\n this.onLocalTrackRestarted = track => __awaiter(this, void 0, void 0, function* () {\n const deviceId = yield track.getDeviceId(false);\n const deviceKind = sourceToKind(track.source);\n if (deviceKind && deviceId && deviceId !== this.localParticipant.activeDeviceMap.get(deviceKind)) {\n this.log.debug(\"local track restarted, setting \".concat(deviceKind, \" \").concat(deviceId, \" active\"));\n this.localParticipant.activeDeviceMap.set(deviceKind, deviceId);\n this.emit(RoomEvent.ActiveDeviceChanged, deviceKind, deviceId);\n }\n });\n this.onLocalConnectionQualityChanged = quality => {\n this.emit(RoomEvent.ConnectionQualityChanged, quality, this.localParticipant);\n };\n this.onMediaDevicesError = (e, kind) => {\n this.emit(RoomEvent.MediaDevicesError, e, kind);\n };\n this.onLocalParticipantPermissionsChanged = prevPermissions => {\n this.emit(RoomEvent.ParticipantPermissionsChanged, prevPermissions, this.localParticipant);\n };\n this.onLocalChatMessageSent = msg => {\n this.emit(RoomEvent.ChatMessage, msg, this.localParticipant);\n };\n this.setMaxListeners(100);\n this.remoteParticipants = new Map();\n this.sidToIdentity = new Map();\n this.options = Object.assign(Object.assign({}, roomOptionDefaults), options);\n this.log = getLogger((_a = this.options.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Room, () => this.logContext);\n this.transcriptionReceivedTimes = new Map();\n this.options.audioCaptureDefaults = Object.assign(Object.assign({}, audioDefaults), options === null || options === void 0 ? void 0 : options.audioCaptureDefaults);\n this.options.videoCaptureDefaults = Object.assign(Object.assign({}, videoDefaults), options === null || options === void 0 ? void 0 : options.videoCaptureDefaults);\n this.options.publishDefaults = Object.assign(Object.assign({}, publishDefaults), options === null || options === void 0 ? void 0 : options.publishDefaults);\n this.maybeCreateEngine();\n this.incomingDataStreamManager = new IncomingDataStreamManager();\n this.outgoingDataStreamManager = new OutgoingDataStreamManager(this.engine, this.log);\n this.incomingDataTrackManager = new IncomingDataTrackManager({\n e2eeManager: this.e2eeManager\n });\n this.incomingDataTrackManager.on('sfuUpdateSubscription', event => {\n this.engine.client.sendUpdateDataSubscription(event.sid, event.subscribe);\n }).on('trackPublished', event => {\n var _a;\n if (event.track.publisherIdentity === this.localParticipant.identity) {\n // Only advertize tracks from other participants\n return;\n }\n this.emit(RoomEvent.DataTrackPublished, event.track);\n (_a = this.remoteParticipants.get(event.track.publisherIdentity)) === null || _a === void 0 ? void 0 : _a.addRemoteDataTrack(event.track);\n }).on('trackUnpublished', event => {\n var _a;\n if (event.publisherIdentity === this.localParticipant.identity) {\n // Only advertize tracks from other participants\n return;\n }\n this.emit(RoomEvent.DataTrackUnpublished, event.sid);\n (_a = this.remoteParticipants.get(event.publisherIdentity)) === null || _a === void 0 ? void 0 : _a.removeRemoteDataTrack(event.sid);\n });\n this.outgoingDataTrackManager = new OutgoingDataTrackManager({\n e2eeManager: this.e2eeManager\n });\n this.outgoingDataTrackManager.on('sfuPublishRequest', event => {\n this.engine.client.sendPublishDataTrackRequest(event.handle, event.name, event.usesE2ee);\n }).on('sfuUnpublishRequest', event => {\n this.engine.client.sendUnPublishDataTrackRequest(event.handle);\n }).on('trackPublished', event => {\n this.emit(RoomEvent.LocalDataTrackPublished, event.track);\n }).on('trackUnpublished', event => {\n this.emit(RoomEvent.LocalDataTrackUnpublished, event.sid);\n }).on('packetAvailable', _ref => {\n let handle = _ref.handle,\n bytes = _ref.bytes;\n this.engine.sendLossyBytes(bytes, DataChannelKind.DATA_TRACK_LOSSY, 'wait').finally(() => this.outgoingDataTrackManager.handlePacketSendComplete(handle));\n });\n this.registerRpcDataStreamHandler();\n this.rpcClientManager = new RpcClientManager(this.log, this.outgoingDataStreamManager, this.getRemoteParticipantClientProtocol, () => {\n var _a, _b;\n return (_b = (_a = this.engine.latestJoinResponse) === null || _a === void 0 ? void 0 : _a.serverInfo) === null || _b === void 0 ? void 0 : _b.version;\n });\n this.rpcClientManager.on('sendDataPacket', _ref2 => {\n let packet = _ref2.packet;\n var _a;\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.sendDataPacket(packet, DataChannelKind.RELIABLE);\n });\n this.rpcServerManager = new RpcServerManager(this.log, this.outgoingDataStreamManager, this.getRemoteParticipantClientProtocol);\n this.rpcServerManager.on('sendDataPacket', _ref3 => {\n let packet = _ref3.packet;\n var _a;\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.sendDataPacket(packet, DataChannelKind.RELIABLE);\n });\n this.disconnectLock = new _();\n this.localParticipant = new LocalParticipant('', '', this.engine, this.options, this.outgoingDataStreamManager, this.outgoingDataTrackManager, this.rpcClientManager, this.rpcServerManager);\n this.setupPacketTrailer();\n if (this.options.e2ee || this.options.encryption) {\n this.setupE2EE();\n }\n this.engine.e2eeManager = this.e2eeManager;\n this.incomingDataTrackManager.updateE2eeManager((_b = this.e2eeManager) !== null && _b !== void 0 ? _b : null);\n this.outgoingDataTrackManager.updateE2eeManager((_c = this.e2eeManager) !== null && _c !== void 0 ? _c : null);\n if (this.options.videoCaptureDefaults.deviceId) {\n this.localParticipant.activeDeviceMap.set('videoinput', unwrapConstraint(this.options.videoCaptureDefaults.deviceId));\n }\n if (this.options.audioCaptureDefaults.deviceId) {\n this.localParticipant.activeDeviceMap.set('audioinput', unwrapConstraint(this.options.audioCaptureDefaults.deviceId));\n }\n if ((_d = this.options.audioOutput) === null || _d === void 0 ? void 0 : _d.deviceId) {\n this.switchActiveDevice('audiooutput', unwrapConstraint(this.options.audioOutput.deviceId)).catch(e => this.log.warn(\"Could not set audio output: \".concat(e.message)));\n }\n if (isWeb()) {\n const cleanupController = new AbortController();\n let onDeviceChange;\n if (Room.cleanupRegistry) {\n // Wrap the listener in a WeakRef closure so navigator.mediaDevices does not\n // strongly retain the Room. When the user drops their Room ref, the\n // FinalizationRegistry callback aborts the controller and removes the listener.\n const roomRef = new WeakRef(this);\n onDeviceChange = () => {\n const self = roomRef.deref();\n if (!self) {\n return;\n }\n self.handleDeviceChange();\n };\n Room.cleanupRegistry.register(this, () => {\n cleanupController.abort();\n });\n } else {\n // Legacy browsers without WeakRef/FinalizationRegistry: fall back to a\n // direct listener (matches pre-#1944 behavior).\n onDeviceChange = this.handleDeviceChange;\n }\n // in order to catch device changes prior to room connection we need to register the event in the constructor\n (_f = (_e = navigator.mediaDevices) === null || _e === void 0 ? void 0 : _e.addEventListener) === null || _f === void 0 ? void 0 : _f.call(_e, 'devicechange', onDeviceChange, {\n signal: cleanupController.signal\n });\n }\n }\n registerTextStreamHandler(topic, callback) {\n return this.incomingDataStreamManager.registerTextStreamHandler(topic, callback);\n }\n unregisterTextStreamHandler(topic) {\n return this.incomingDataStreamManager.unregisterTextStreamHandler(topic);\n }\n registerByteStreamHandler(topic, callback) {\n return this.incomingDataStreamManager.registerByteStreamHandler(topic, callback);\n }\n unregisterByteStreamHandler(topic) {\n return this.incomingDataStreamManager.unregisterByteStreamHandler(topic);\n }\n /**\n * Establishes the participant as a receiver for calls of the specified RPC method.\n *\n * @param method - The name of the indicated RPC method\n * @param handler - Will be invoked when an RPC request for this method is received\n * @returns A promise that resolves when the method is successfully registered\n * @throws {Error} If a handler for this method is already registered (must call unregisterRpcMethod first)\n *\n * @example\n * ```typescript\n * room.localParticipant?.registerRpcMethod(\n * 'greet',\n * async (data: RpcInvocationData) => {\n * console.log(`Received greeting from ${data.callerIdentity}: ${data.payload}`);\n * return `Hello, ${data.callerIdentity}!`;\n * }\n * );\n * ```\n *\n * The handler should return a Promise that resolves to a string.\n * If unable to respond within `responseTimeout`, the request will result in an error on the caller's side.\n *\n * You may throw errors of type `RpcError` with a string `message` in the handler,\n * and they will be received on the caller's side with the message intact.\n * Other errors thrown in your handler will not be transmitted as-is, and will instead arrive to the caller as `1500` (\"Application Error\").\n */\n registerRpcMethod(method, handler) {\n this.rpcServerManager.registerRpcMethod(method, handler);\n }\n /**\n * Unregisters a previously registered RPC method.\n *\n * @param method - The name of the RPC method to unregister\n */\n unregisterRpcMethod(method) {\n this.rpcServerManager.unregisterRpcMethod(method);\n }\n /**\n * @experimental\n */\n setE2EEEnabled(enabled) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.e2eeStateMutex.lock();\n try {\n if (this.e2eeManager) {\n if (this.isE2EEEnabled !== enabled) {\n yield this.localParticipant.setE2EEEnabled(enabled);\n if (this.localParticipant.identity !== '') {\n this.e2eeManager.setParticipantCryptorEnabled(enabled, this.localParticipant.identity);\n }\n }\n } else {\n throw Error('e2ee not configured, please set e2ee settings within the room options');\n }\n } finally {\n unlock();\n }\n });\n }\n setupE2EE() {\n // when encryption is enabled via `options.encryption`, we enable data channel encryption\n var _a, _b;\n const dcEncryptionEnabled = !!this.options.encryption;\n const e2eeOptions = this.options.encryption || this.options.e2ee;\n if (e2eeOptions) {\n if ('e2eeManager' in e2eeOptions) {\n this.e2eeManager = e2eeOptions.e2eeManager;\n this.e2eeManager.isDataChannelEncryptionEnabled = dcEncryptionEnabled;\n } else {\n this.e2eeManager = new E2EEManager(e2eeOptions, dcEncryptionEnabled);\n }\n this.e2eeManager.on(EncryptionEvent.ParticipantEncryptionStatusChanged, (enabled, participant) => {\n if (isLocalParticipant(participant)) {\n this.isE2EEEnabled = enabled;\n }\n this.emit(RoomEvent.ParticipantEncryptionStatusChanged, enabled, participant);\n });\n this.e2eeManager.on(EncryptionEvent.EncryptionError, (error, participantIdentity) => {\n const participant = participantIdentity ? this.getParticipantByIdentity(participantIdentity) : undefined;\n this.emit(RoomEvent.EncryptionError, error, participant);\n });\n (_a = this.e2eeManager) === null || _a === void 0 ? void 0 : _a.setup(this);\n (_b = this.e2eeManager) === null || _b === void 0 ? void 0 : _b.setupEngine(this.engine);\n }\n }\n setupPacketTrailer() {\n // The manager is always created so tracks that advertise packet trailer\n // features can be wired up when the app passes a packet trailer worker.\n this.packetTrailerManager = new PacketTrailerManager(this.options.packetTrailer);\n this.packetTrailerManager.setup(this);\n }\n get logContext() {\n var _a, _b, _c;\n return {\n room: this.name,\n roomID: (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.sid,\n participant: (_b = this.localParticipant) === null || _b === void 0 ? void 0 : _b.identity,\n participantID: (_c = this.localParticipant) === null || _c === void 0 ? void 0 : _c.sid\n };\n }\n /**\n * if the current room has a participant with `recorder: true` in its JWT grant\n **/\n get isRecording() {\n var _a, _b;\n return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.activeRecording) !== null && _b !== void 0 ? _b : false;\n }\n /**\n * server assigned unique room id.\n * returns once a sid has been issued by the server.\n */\n getSid() {\n if (this.state === ConnectionState.Disconnected) {\n return TypedPromise.resolve('');\n }\n if (this.roomInfo && this.roomInfo.sid !== '') {\n return TypedPromise.resolve(this.roomInfo.sid);\n }\n return new TypedPromise((resolve, reject) => {\n const handleRoomUpdate = roomInfo => {\n if (roomInfo.sid !== '') {\n this.engine.off(EngineEvent.RoomUpdate, handleRoomUpdate);\n resolve(roomInfo.sid);\n }\n };\n this.engine.on(EngineEvent.RoomUpdate, handleRoomUpdate);\n this.once(RoomEvent.Disconnected, () => {\n this.engine.off(EngineEvent.RoomUpdate, handleRoomUpdate);\n reject(new UnexpectedConnectionState('Room disconnected before room server id was available'));\n });\n });\n }\n /** user assigned name, derived from JWT token */\n get name() {\n var _a, _b;\n return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';\n }\n /** room metadata */\n get metadata() {\n var _a;\n return (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.metadata;\n }\n get numParticipants() {\n var _a, _b;\n return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numParticipants) !== null && _b !== void 0 ? _b : 0;\n }\n get numPublishers() {\n var _a, _b;\n return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numPublishers) !== null && _b !== void 0 ? _b : 0;\n }\n maybeCreateEngine() {\n if (this.engine && (this.engine.isNewlyCreated || !this.engine.isClosed)) {\n return;\n }\n this.engine = new RTCEngine(this.options);\n this.engine.e2eeManager = this.e2eeManager;\n this.engine.on(EngineEvent.ParticipantUpdate, this.handleParticipantUpdates).on(EngineEvent.RoomUpdate, this.handleRoomUpdate).on(EngineEvent.SpeakersChanged, this.handleSpeakersChanged).on(EngineEvent.StreamStateChanged, this.handleStreamStateUpdate).on(EngineEvent.ConnectionQualityUpdate, this.handleConnectionQualityUpdate).on(EngineEvent.SubscriptionError, this.handleSubscriptionError).on(EngineEvent.SubscriptionPermissionUpdate, this.handleSubscriptionPermissionUpdate).on(EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {\n this.onTrackAdded(mediaTrack, stream, receiver);\n }).on(EngineEvent.Disconnected, reason => {\n this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, reason);\n }).on(EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate).on(EngineEvent.DataPacketReceived, this.handleDataPacket).on(EngineEvent.Resuming, () => {\n this.clearConnectionReconcile();\n this.isResuming = true;\n this.log.debug('Resuming signal connection');\n if (this.setAndEmitConnectionState(ConnectionState.SignalReconnecting)) {\n this.emit(RoomEvent.SignalReconnecting);\n }\n }).on(EngineEvent.Resumed, () => {\n this.registerConnectionReconcile();\n this.isResuming = false;\n this.log.debug('Resumed signal connection');\n this.updateSubscriptions();\n this.emitBufferedEvents();\n if (this.setAndEmitConnectionState(ConnectionState.Connected)) {\n this.emit(RoomEvent.Reconnected);\n }\n }).on(EngineEvent.SignalResumed, () => {\n this.bufferedEvents = [];\n if (this.state === ConnectionState.Reconnecting || this.isResuming) {\n this.sendSyncState();\n }\n }).on(EngineEvent.Restarting, this.handleRestarting).on(EngineEvent.Restarted, this.handleRestarted).on(EngineEvent.SignalRestarted, this.handleSignalRestarted).on(EngineEvent.Offline, () => {\n if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {\n this.emit(RoomEvent.Reconnecting);\n }\n }).on(EngineEvent.DCBufferStatusChanged, (status, kind) => {\n this.emit(RoomEvent.DCBufferStatusChanged, status, kind);\n }).on(EngineEvent.LocalTrackSubscribed, subscribedSid => {\n this.handleLocalTrackSubscribed(subscribedSid);\n }).on(EngineEvent.RoomMoved, roomMoved => {\n this.log.debug('room moved', roomMoved);\n if (roomMoved.room) {\n this.handleRoomUpdate(roomMoved.room);\n }\n this.remoteParticipants.forEach((participant, identity) => {\n this.handleParticipantDisconnected(identity, participant);\n });\n this.emit(RoomEvent.Moved, roomMoved.room.name);\n if (roomMoved.participant) {\n this.handleParticipantUpdates([roomMoved.participant, ...roomMoved.otherParticipants]);\n } else {\n this.handleParticipantUpdates(roomMoved.otherParticipants);\n }\n }).on(EngineEvent.PublishDataTrackResponse, event => {\n if (!event.info) {\n this.log.warn(\"received PublishDataTrackResponse, but event.info was \".concat(event.info, \", so skipping.\"));\n return;\n }\n this.outgoingDataTrackManager.receivedSfuPublishResponse(event.info.pubHandle, {\n type: 'ok',\n data: {\n sid: event.info.sid,\n pubHandle: event.info.pubHandle,\n name: event.info.name,\n usesE2ee: event.info.encryption !== Encryption_Type.NONE\n }\n });\n }).on(EngineEvent.UnPublishDataTrackResponse, event => {\n if (!event.info) {\n this.log.warn(\"received UnPublishDataTrackResponse, but event.info was \".concat(event.info, \", so skipping.\"));\n return;\n }\n this.outgoingDataTrackManager.receivedSfuUnpublishResponse(event.info.pubHandle);\n }).on(EngineEvent.DataTrackSubscriberHandles, event => {\n const handleToSidMapping = new Map(Object.entries(event.subHandles).map(_ref4 => {\n let _ref5 = _slicedToArray(_ref4, 2),\n key = _ref5[0],\n value = _ref5[1];\n return [parseInt(key, 10), value.trackSid];\n }));\n this.incomingDataTrackManager.receivedSfuSubscriberHandles(handleToSidMapping);\n }).on(EngineEvent.DataTrackPacketReceived, packetBytes => {\n try {\n this.incomingDataTrackManager.packetReceived(packetBytes);\n } catch (err) {\n // NOTE: wrapping in the bare try/catch like this means that the Throws<...> type doesn't\n // propagate upwards into the public interface.\n throw err;\n }\n }).on(EngineEvent.Joined, joinResponse => {\n // Ingest data track publication updates into data tracks infrastructure\n const mapped = new Map(joinResponse.otherParticipants.map(participant => {\n return [participant.identity, participant.dataTracks.map(info => DataTrackInfo.from(info))];\n }));\n this.incomingDataTrackManager.receiveSfuPublicationUpdates(mapped);\n }).on(EngineEvent.TokenRefreshed, token => {\n var _a;\n (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.updateToken(token);\n }).on(EngineEvent.ServerRegionsReported, regions => {\n var _a;\n (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.setServerReportedRegions({\n regionSettings: regions,\n updatedAtInMs: Date.now(),\n maxAgeInMs: DEFAULT_MAX_AGE_MS\n });\n });\n if (this.localParticipant) {\n this.localParticipant.setupEngine(this.engine);\n }\n if (this.e2eeManager) {\n this.e2eeManager.setupEngine(this.engine);\n }\n if (this.outgoingDataStreamManager) {\n this.outgoingDataStreamManager.setupEngine(this.engine);\n }\n }\n createRegionStrategy() {\n return {\n getNextUrl: signal => __awaiter(this, void 0, void 0, function* () {\n return this.regionUrlProvider ? this.regionUrlProvider.getNextBestRegionUrl(signal) : null;\n }),\n resetAttempts: () => {\n var _a;\n return (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.resetAttempts();\n }\n };\n }\n /**\n * getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.\n * In particular, it requests device permissions by default if needed\n * and makes sure the returned device does not consist of dummy devices\n * @param kind\n * @returns a list of available local devices\n */\n static getLocalDevices(kind) {\n let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return DeviceManager.getInstance().getDevices(kind, requestPermissions);\n }\n /**\n * prepareConnection should be called as soon as the page is loaded, in order\n * to speed up the connection attempt. This function will\n * - perform DNS resolution and pre-warm the DNS cache\n * - establish TLS connection and cache TLS keys\n *\n * With LiveKit Cloud, it will also determine the best edge data center for\n * the current client to connect to if a token is provided.\n */\n prepareConnection(url, token) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state !== ConnectionState.Disconnected) {\n return;\n }\n this.log.debug(\"prepareConnection to \".concat(url));\n try {\n if (isCloud(new URL(url)) && token) {\n this.regionUrlProvider = new RegionUrlProvider(url, token);\n const regionUrl = yield this.regionUrlProvider.getNextBestRegionUrl();\n // we will not replace the regionUrl if an attempt had already started\n // to avoid overriding regionUrl after a new connection attempt had started\n if (regionUrl && this.state === ConnectionState.Disconnected) {\n this.regionUrl = regionUrl;\n yield fetch(toHttpUrl(regionUrl), {\n method: 'HEAD'\n });\n this.log.debug(\"prepared connection to \".concat(regionUrl));\n }\n } else {\n yield fetch(toHttpUrl(url), {\n method: 'HEAD'\n });\n }\n } catch (e) {\n this.log.warn('could not prepare connection', {\n error: e\n });\n }\n });\n }\n /**\n * retrieves a participant by identity\n * @param identity\n * @returns\n */\n getParticipantByIdentity(identity) {\n if (this.localParticipant.identity === identity) {\n return this.localParticipant;\n }\n return this.remoteParticipants.get(identity);\n }\n clearConnectionFutures() {\n this.connectFuture = undefined;\n }\n /**\n * @internal for testing\n */\n simulateScenario(scenario, arg) {\n return __awaiter(this, void 0, void 0, function* () {\n let postAction = () => __awaiter(this, void 0, void 0, function* () {});\n let req;\n switch (scenario) {\n case 'signal-reconnect':\n // @ts-expect-error function is private\n yield this.engine.client.handleOnClose('simulate disconnect');\n break;\n case 'fail-on-v1-path':\n this.engine.failNextV1Path();\n break;\n case 'speaker':\n req = new SimulateScenario({\n scenario: {\n case: 'speakerUpdate',\n value: 3\n }\n });\n break;\n case 'node-failure':\n req = new SimulateScenario({\n scenario: {\n case: 'nodeFailure',\n value: true\n }\n });\n break;\n case 'server-leave':\n req = new SimulateScenario({\n scenario: {\n case: 'serverLeave',\n value: true\n }\n });\n break;\n case 'migration':\n req = new SimulateScenario({\n scenario: {\n case: 'migration',\n value: true\n }\n });\n break;\n case 'resume-reconnect':\n this.engine.failNext();\n // @ts-expect-error function is private\n yield this.engine.client.handleOnClose('simulate resume-disconnect');\n break;\n case 'disconnect-signal-on-resume':\n postAction = () => __awaiter(this, void 0, void 0, function* () {\n // @ts-expect-error function is private\n yield this.engine.client.handleOnClose('simulate resume-disconnect');\n });\n req = new SimulateScenario({\n scenario: {\n case: 'disconnectSignalOnResume',\n value: true\n }\n });\n break;\n case 'disconnect-signal-on-resume-no-messages':\n postAction = () => __awaiter(this, void 0, void 0, function* () {\n // @ts-expect-error function is private\n yield this.engine.client.handleOnClose('simulate resume-disconnect');\n });\n req = new SimulateScenario({\n scenario: {\n case: 'disconnectSignalOnResumeNoMessages',\n value: true\n }\n });\n break;\n case 'full-reconnect':\n this.engine.fullReconnectOnNext = true;\n // @ts-expect-error function is private\n yield this.engine.client.handleOnClose('simulate full-reconnect');\n break;\n case 'force-tcp':\n case 'force-tls':\n req = new SimulateScenario({\n scenario: {\n case: 'switchCandidateProtocol',\n value: scenario === 'force-tls' ? 2 : 1\n }\n });\n postAction = () => __awaiter(this, void 0, void 0, function* () {\n const onLeave = this.engine.client.onLeave;\n if (onLeave) {\n onLeave(new LeaveRequest({\n reason: DisconnectReason.CLIENT_INITIATED,\n action: LeaveRequest_Action.RECONNECT\n }));\n }\n });\n break;\n case 'subscriber-bandwidth':\n if (arg === undefined || typeof arg !== 'number') {\n throw new Error('subscriber-bandwidth requires a number as argument');\n }\n req = new SimulateScenario({\n scenario: {\n case: 'subscriberBandwidth',\n value: numberToBigInt(arg)\n }\n });\n break;\n case 'leave-full-reconnect':\n req = new SimulateScenario({\n scenario: {\n case: 'leaveRequestFullReconnect',\n value: true\n }\n });\n }\n if (req) {\n yield this.engine.client.sendSimulateScenario(req);\n yield postAction();\n }\n });\n }\n /**\n * Returns true if audio playback is enabled\n */\n get canPlaybackAudio() {\n return this.audioEnabled;\n }\n /**\n * Returns true if video playback is enabled\n */\n get canPlaybackVideo() {\n return !this.isVideoPlaybackBlocked;\n }\n getActiveDevice(kind) {\n return this.localParticipant.activeDeviceMap.get(kind);\n }\n /**\n * Switches all active devices used in this room to the given device.\n *\n * Note: setting AudioOutput is not supported on some browsers. See [setSinkId](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId#browser_compatibility)\n *\n * @param kind use `videoinput` for camera track,\n * `audioinput` for microphone track,\n * `audiooutput` to set speaker for all incoming audio tracks\n * @param deviceId\n */\n switchActiveDevice(kind_1, deviceId_1) {\n return __awaiter(this, arguments, void 0, function (kind, deviceId) {\n var _this3 = this;\n let exact = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n return function* () {\n var _a, _b, _c, _d, _e, _f;\n var _g;\n let success = true;\n let shouldTriggerImmediateDeviceChange = false;\n const deviceConstraint = exact ? {\n exact: deviceId\n } : deviceId;\n if (kind === 'audioinput') {\n shouldTriggerImmediateDeviceChange = _this3.localParticipant.audioTrackPublications.size === 0;\n const prevDeviceId = (_a = _this3.getActiveDevice(kind)) !== null && _a !== void 0 ? _a : _this3.options.audioCaptureDefaults.deviceId;\n _this3.options.audioCaptureDefaults.deviceId = deviceConstraint;\n const tracks = Array.from(_this3.localParticipant.audioTrackPublications.values()).filter(track => track.source === Track.Source.Microphone);\n try {\n success = (yield Promise.all(tracks.map(t => {\n var _a;\n return (_a = t.audioTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);\n }))).every(val => val === true);\n } catch (e) {\n _this3.options.audioCaptureDefaults.deviceId = prevDeviceId;\n throw e;\n }\n const isMuted = tracks.some(t => {\n var _a, _b;\n return (_b = (_a = t.track) === null || _a === void 0 ? void 0 : _a.isMuted) !== null && _b !== void 0 ? _b : false;\n });\n if (success && isMuted) shouldTriggerImmediateDeviceChange = true;\n } else if (kind === 'videoinput') {\n shouldTriggerImmediateDeviceChange = _this3.localParticipant.videoTrackPublications.size === 0;\n const prevDeviceId = (_b = _this3.getActiveDevice(kind)) !== null && _b !== void 0 ? _b : _this3.options.videoCaptureDefaults.deviceId;\n _this3.options.videoCaptureDefaults.deviceId = deviceConstraint;\n const tracks = Array.from(_this3.localParticipant.videoTrackPublications.values()).filter(track => track.source === Track.Source.Camera);\n try {\n success = (yield Promise.all(tracks.map(t => {\n var _a;\n return (_a = t.videoTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);\n }))).every(val => val === true);\n } catch (e) {\n _this3.options.videoCaptureDefaults.deviceId = prevDeviceId;\n throw e;\n }\n const isMuted = tracks.some(t => {\n var _a, _b;\n return (_b = (_a = t.track) === null || _a === void 0 ? void 0 : _a.isMuted) !== null && _b !== void 0 ? _b : false;\n });\n if (success && isMuted) shouldTriggerImmediateDeviceChange = true;\n } else if (kind === 'audiooutput') {\n shouldTriggerImmediateDeviceChange = true;\n if (!supportsSetSinkId() && !_this3.options.webAudioMix || _this3.options.webAudioMix && _this3.audioContext && !('setSinkId' in _this3.audioContext)) {\n throw new Error('cannot switch audio output, the current browser does not support it');\n }\n if (_this3.options.webAudioMix) {\n // setting `default` for web audio output doesn't work, so we need to normalize the id before\n deviceId = (_c = yield DeviceManager.getInstance().normalizeDeviceId('audiooutput', deviceId)) !== null && _c !== void 0 ? _c : '';\n }\n (_d = (_g = _this3.options).audioOutput) !== null && _d !== void 0 ? _d : _g.audioOutput = {};\n const prevDeviceId = (_e = _this3.getActiveDevice(kind)) !== null && _e !== void 0 ? _e : _this3.options.audioOutput.deviceId;\n _this3.options.audioOutput.deviceId = deviceId;\n try {\n if (_this3.options.webAudioMix) {\n // @ts-expect-error setSinkId is not yet in the typescript type of AudioContext\n (_f = _this3.audioContext) === null || _f === void 0 ? void 0 : _f.setSinkId(deviceId);\n }\n // also set audio output on all audio elements, even if webAudioMix is enabled in order to workaround echo cancellation not working on chrome with non-default output devices\n // see https://issues.chromium.org/issues/40252911#comment7\n yield Promise.all(Array.from(_this3.remoteParticipants.values()).map(p => p.setAudioOutput({\n deviceId\n })));\n } catch (e) {\n _this3.options.audioOutput.deviceId = prevDeviceId;\n throw e;\n }\n }\n if (shouldTriggerImmediateDeviceChange) {\n _this3.localParticipant.activeDeviceMap.set(kind, deviceId);\n _this3.emit(RoomEvent.ActiveDeviceChanged, kind, deviceId);\n }\n return success;\n }();\n });\n }\n setupLocalParticipantEvents() {\n this.localParticipant.on(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).on(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).on(ParticipantEvent.AttributesChanged, this.onLocalAttributesChanged).on(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).on(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).on(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).on(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).on(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).on(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).on(ParticipantEvent.AudioStreamAcquired, this.startAudio).on(ParticipantEvent.ChatMessage, this.onLocalChatMessageSent).on(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);\n }\n recreateEngine(sendLeave) {\n const oldEngine = this.engine;\n if (sendLeave && oldEngine && !oldEngine.client.isDisconnected) {\n oldEngine.client.sendLeave().finally(() => oldEngine.close());\n } else {\n oldEngine === null || oldEngine === void 0 ? void 0 : oldEngine.close();\n }\n /* @ts-ignore */\n this.engine = undefined;\n this.isResuming = false;\n // clear out existing remote participants, since they may have attached\n // the old engine\n this.remoteParticipants.clear();\n this.sidToIdentity.clear();\n this.bufferedEvents = [];\n this.maybeCreateEngine();\n }\n onTrackAdded(mediaTrack, stream, receiver) {\n // don't fire onSubscribed when connecting\n // WebRTC fires onTrack as soon as setRemoteDescription is called on the offer\n // at that time, ICE connectivity has not been established so the track is not\n // technically subscribed.\n // We'll defer these events until when the room is connected or eventually disconnected.\n if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) {\n const reconnectedHandler = () => {\n this.log.debug('deferring on track for later', {\n mediaTrackId: mediaTrack.id,\n mediaStreamId: stream.id,\n tracksInStream: stream.getTracks().map(track => track.id)\n });\n this.onTrackAdded(mediaTrack, stream, receiver);\n cleanup();\n };\n const cleanup = () => {\n this.off(RoomEvent.Reconnected, reconnectedHandler);\n this.off(RoomEvent.Connected, reconnectedHandler);\n this.off(RoomEvent.Disconnected, cleanup);\n };\n this.once(RoomEvent.Reconnected, reconnectedHandler);\n this.once(RoomEvent.Connected, reconnectedHandler);\n this.once(RoomEvent.Disconnected, cleanup);\n return;\n }\n if (this.state === ConnectionState.Disconnected) {\n this.log.warn('skipping incoming track after Room disconnected');\n return;\n }\n if (mediaTrack.readyState === 'ended') {\n this.log.debug('skipping incoming track as it already ended');\n return;\n }\n const parts = unpackStreamId(stream.id);\n const participantSid = parts[0];\n let streamId = parts[1];\n let trackId = mediaTrack.id;\n // firefox will get streamId (pID|trackId) instead of (pID|streamId) as it doesn't support sync tracks by stream\n // and generates its own track id instead of infer from sdp track id.\n if (streamId && streamId.startsWith('TR')) trackId = streamId;\n if (participantSid === this.localParticipant.sid) {\n this.log.warn('tried to create RemoteParticipant for local participant');\n return;\n }\n const participant = Array.from(this.remoteParticipants.values()).find(p => p.sid === participantSid);\n if (!participant) {\n // server could require extra media sections to accelerate subscription.\n if (participantSid.startsWith('PA')) {\n this.log.error(\"Tried to add a track for a participant, that's not present. Sid: \".concat(participantSid));\n }\n return;\n }\n // in single peer connection case, the trackID is locally generated,\n // not the TR_ prefixed one generated by the server,\n // use `mid` to find the appropriate track.\n if (!trackId.startsWith('TR')) {\n const id = this.engine.getTrackIdForReceiver(receiver);\n if (!id) {\n this.log.error(\"Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: \".concat(participantSid));\n return;\n }\n trackId = id;\n }\n if (!trackId.startsWith('TR')) {\n this.log.warn(\"Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: \".concat(participantSid, \", streamId: \").concat(streamId, \", trackId: \").concat(trackId), {\n remoteParticipantID: participantSid,\n streamId,\n trackId\n });\n }\n let adaptiveStreamSettings;\n if (this.options.adaptiveStream) {\n if (typeof this.options.adaptiveStream === 'object') {\n adaptiveStreamSettings = this.options.adaptiveStream;\n } else {\n adaptiveStreamSettings = {};\n }\n }\n const publication = participant.addSubscribedMediaTrack(mediaTrack, trackId, stream, receiver, adaptiveStreamSettings);\n if ((publication === null || publication === void 0 ? void 0 : publication.isEncrypted) && !this.e2eeManager) {\n this.emit(RoomEvent.EncryptionError, new Error(\"Encrypted \".concat(publication.source, \" track received from participant \").concat(participant.sid, \", but room does not have encryption enabled!\")));\n }\n }\n handleLocalTrackSubscribed(subscribedSid) {\n const findPublication = () => this.localParticipant.getTrackPublications().find(_ref6 => {\n let trackSid = _ref6.trackSid;\n return trackSid === subscribedSid;\n });\n const trackPublication = findPublication();\n if (trackPublication) {\n this.emitLocalTrackSubscribed(trackPublication);\n return;\n }\n // the track publication may not be registered yet if the server signals\n // the subscription before publishTrack has finished adding the publication.\n // defer with a timeout until LocalTrackPublished fires for the matching trackSid\n this.log.debug('deferring LocalTrackSubscribed, publication not yet available', {\n subscribedSid\n });\n const TIMEOUT_MS = 10000;\n let timer;\n const onPublished = pub => {\n if (pub.trackSid === subscribedSid) {\n cleanup();\n this.emitLocalTrackSubscribed(pub);\n }\n };\n const cleanup = () => {\n clearTimeout(timer);\n this.localParticipant.off(ParticipantEvent.LocalTrackPublished, onPublished);\n this.off(RoomEvent.Disconnected, cleanup);\n };\n this.localParticipant.on(ParticipantEvent.LocalTrackPublished, onPublished);\n this.once(RoomEvent.Disconnected, cleanup);\n timer = setTimeout(() => {\n cleanup();\n // final attempt in case the publication was added without emitting the event\n const pub = findPublication();\n if (pub) {\n this.emitLocalTrackSubscribed(pub);\n } else {\n this.log.warn('could not find local track publication for LocalTrackSubscribed event after timeout', {\n subscribedSid\n });\n }\n }, TIMEOUT_MS);\n }\n emitLocalTrackSubscribed(trackPublication) {\n this.localParticipant.emit(ParticipantEvent.LocalTrackSubscribed, trackPublication);\n this.emitWhenConnected(RoomEvent.LocalTrackSubscribed, trackPublication, this.localParticipant);\n }\n handleDisconnect() {\n let shouldStopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n let reason = arguments.length > 1 ? arguments[1] : undefined;\n var _a, _b;\n this.clearConnectionReconcile();\n this.isResuming = false;\n this.bufferedEvents = [];\n this.transcriptionReceivedTimes.clear();\n this.incomingDataStreamManager.clearControllers();\n this.incomingDataTrackManager.reset();\n this.outgoingDataTrackManager.reset();\n if (this.state === ConnectionState.Disconnected) {\n return;\n }\n this.regionUrl = undefined;\n // Notify region provider about disconnect to potentially stop auto-refetch\n if (this.regionUrlProvider) {\n this.regionUrlProvider.notifyDisconnected();\n }\n try {\n this.remoteParticipants.forEach(p => {\n p.trackPublications.forEach(pub => {\n p.unpublishTrack(pub.trackSid);\n });\n });\n this.localParticipant.trackPublications.forEach(pub => {\n var _a, _b, _c;\n if (pub.track) {\n this.localParticipant.unpublishTrack(pub.track, shouldStopTracks);\n }\n if (shouldStopTracks) {\n (_a = pub.track) === null || _a === void 0 ? void 0 : _a.detach();\n (_b = pub.track) === null || _b === void 0 ? void 0 : _b.stop();\n } else {\n (_c = pub.track) === null || _c === void 0 ? void 0 : _c.stopMonitor();\n }\n });\n this.localParticipant.off(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).off(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).off(ParticipantEvent.AttributesChanged, this.onLocalAttributesChanged).off(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).off(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).off(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).off(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).off(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).off(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).off(ParticipantEvent.AudioStreamAcquired, this.startAudio).off(ParticipantEvent.ChatMessage, this.onLocalChatMessageSent).off(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);\n this.localParticipant.trackPublications.clear();\n this.localParticipant.videoTrackPublications.clear();\n this.localParticipant.audioTrackPublications.clear();\n this.remoteParticipants.clear();\n this.sidToIdentity.clear();\n this.activeSpeakers = [];\n if (this.audioContext && typeof this.options.webAudioMix === 'boolean') {\n this.audioContext.close();\n this.audioContext = undefined;\n }\n if (isWeb()) {\n window.removeEventListener('beforeunload', this.onPageLeave);\n window.removeEventListener('pagehide', this.onPageLeave);\n window.removeEventListener('freeze', this.onPageLeave);\n (_b = (_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'devicechange', this.handleDeviceChange);\n }\n } finally {\n this.setAndEmitConnectionState(ConnectionState.Disconnected);\n this.emit(RoomEvent.Disconnected, reason);\n }\n }\n handleParticipantDisconnected(identity, participant) {\n // remove and send event\n this.remoteParticipants.delete(identity);\n if (!participant) {\n return;\n }\n this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(identity);\n this.incomingDataTrackManager.handleRemoteParticipantDisconnected(identity);\n participant.trackPublications.forEach(publication => {\n participant.unpublishTrack(publication.trackSid, true);\n });\n this.emit(RoomEvent.ParticipantDisconnected, participant);\n participant.setDisconnected();\n this.rpcClientManager.handleParticipantDisconnected(participant.identity);\n }\n /**\n * attempt to select the default devices if the previously selected devices are no longer available after a device change event\n */\n selectDefaultDevices() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n const previousDevices = DeviceManager.getInstance().previousDevices;\n // check for available devices, but don't request permissions in order to avoid prompts for kinds that haven't been used before\n const availableDevices = yield DeviceManager.getInstance().getDevices(undefined, false);\n const browser = getBrowser();\n if ((browser === null || browser === void 0 ? void 0 : browser.name) === 'Chrome' && browser.os !== 'iOS') {\n for (let availableDevice of availableDevices) {\n const previousDevice = previousDevices.find(info => info.deviceId === availableDevice.deviceId);\n if (previousDevice && previousDevice.label !== '' && previousDevice.kind === availableDevice.kind && previousDevice.label !== availableDevice.label) {\n // label has changed on device the same deviceId, indicating that the default device has changed on the OS level\n if (this.getActiveDevice(availableDevice.kind) === 'default') {\n // emit an active device change event only if the selected output device is actually on `default`\n this.emit(RoomEvent.ActiveDeviceChanged, availableDevice.kind, availableDevice.deviceId);\n }\n }\n }\n }\n const kinds = ['audiooutput', 'audioinput', 'videoinput'];\n for (let kind of kinds) {\n const targetSource = kindToSource(kind);\n const targetPublication = this.localParticipant.getTrackPublication(targetSource);\n if (targetPublication && ((_a = targetPublication.track) === null || _a === void 0 ? void 0 : _a.isUserProvided)) {\n // if the track is user provided, we don't want to switch devices on behalf of the user\n continue;\n }\n const devicesOfKind = availableDevices.filter(d => d.kind === kind);\n const activeDevice = this.getActiveDevice(kind);\n if (activeDevice === ((_b = previousDevices.filter(info => info.kind === kind)[0]) === null || _b === void 0 ? void 0 : _b.deviceId)) {\n // in Safari the first device is always the default, so we assume a user on the default device would like to switch to the default once it changes\n // FF doesn't emit an event when the default device changes, so we perform the same best effort and switch to the new device once connected and if it's the first in the array\n if (devicesOfKind.length > 0 && ((_c = devicesOfKind[0]) === null || _c === void 0 ? void 0 : _c.deviceId) !== activeDevice) {\n yield this.switchActiveDevice(kind, devicesOfKind[0].deviceId);\n continue;\n }\n }\n if (kind === 'audioinput' && !isSafariBased() || kind === 'videoinput') {\n // airpods on Safari need special handling for audioinput as the track doesn't end as soon as you take them out\n continue;\n }\n // switch to first available device if previously active device is not available any more\n if (devicesOfKind.length > 0 && !devicesOfKind.find(deviceInfo => deviceInfo.deviceId === this.getActiveDevice(kind)) && (\n // avoid switching audio output on safari without explicit user action as it leads to slowed down audio playback\n kind !== 'audiooutput' || !isSafariBased())) {\n yield this.switchActiveDevice(kind, devicesOfKind[0].deviceId);\n }\n }\n });\n }\n acquireAudioContext() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n if (typeof this.options.webAudioMix !== 'boolean' && this.options.webAudioMix.audioContext) {\n // override audio context with custom audio context if supplied by user\n this.audioContext = this.options.webAudioMix.audioContext;\n } else if (!this.audioContext || this.audioContext.state === 'closed') {\n // by using an AudioContext, it reduces lag on audio elements\n // https://stackoverflow.com/questions/9811429/html5-audio-tag-on-safari-has-a-delay/54119854#54119854\n this.audioContext = (_a = getNewAudioContext()) !== null && _a !== void 0 ? _a : undefined;\n }\n if (this.options.webAudioMix) {\n this.remoteParticipants.forEach(participant => participant.setAudioContext(this.audioContext));\n }\n this.localParticipant.setAudioContext(this.audioContext);\n if (this.audioContext && this.audioContext.state === 'suspended') {\n // for iOS a newly created AudioContext is always in `suspended` state.\n // we try our best to resume the context here, if that doesn't work, we just continue with regular processing\n try {\n yield Promise.race([this.audioContext.resume(), sleep(200)]);\n } catch (e) {\n this.log.warn('Could not resume audio context', {\n error: e\n });\n }\n }\n const newContextIsRunning = ((_b = this.audioContext) === null || _b === void 0 ? void 0 : _b.state) === 'running';\n if (newContextIsRunning !== this.canPlaybackAudio) {\n this.audioEnabled = newContextIsRunning;\n this.emit(RoomEvent.AudioPlaybackStatusChanged, newContextIsRunning);\n }\n });\n }\n createParticipant(identity, info) {\n var _a;\n let participant;\n if (info) {\n participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info, {\n loggerContextCb: () => this.logContext,\n loggerName: this.options.loggerName\n }, this.incomingDataTrackManager);\n } else {\n participant = new RemoteParticipant(this.engine.client, '', identity, undefined, undefined, undefined, {\n loggerContextCb: () => this.logContext,\n loggerName: this.options.loggerName\n });\n }\n if (this.options.webAudioMix) {\n participant.setAudioContext(this.audioContext);\n }\n if ((_a = this.options.audioOutput) === null || _a === void 0 ? void 0 : _a.deviceId) {\n participant.setAudioOutput(this.options.audioOutput).catch(e => this.log.warn(\"Could not set audio output: \".concat(e.message)));\n }\n return participant;\n }\n getOrCreateParticipant(identity, info) {\n if (this.remoteParticipants.has(identity)) {\n const existingParticipant = this.remoteParticipants.get(identity);\n if (info) {\n const wasUpdated = existingParticipant.updateInfo(info);\n if (wasUpdated) {\n this.sidToIdentity.set(info.sid, info.identity);\n }\n }\n return existingParticipant;\n }\n const participant = this.createParticipant(identity, info);\n this.remoteParticipants.set(identity, participant);\n this.sidToIdentity.set(info.sid, info.identity);\n // if we have valid info and the participant wasn't in the map before, we can assume the participant is new\n // firing here to make sure that `ParticipantConnected` fires before the initial track events\n this.emitWhenConnected(RoomEvent.ParticipantConnected, participant);\n // also forward events\n // trackPublished is only fired for tracks added after both local participant\n // and remote participant joined the room\n participant.on(ParticipantEvent.TrackPublished, trackPublication => {\n this.emitWhenConnected(RoomEvent.TrackPublished, trackPublication, participant);\n }).on(ParticipantEvent.TrackSubscribed, (track, publication) => {\n // monitor playback status\n if (track.kind === Track.Kind.Audio) {\n track.on(TrackEvent.AudioPlaybackStarted, this.handleAudioPlaybackStarted);\n track.on(TrackEvent.AudioPlaybackFailed, this.handleAudioPlaybackFailed);\n } else if (track.kind === Track.Kind.Video) {\n track.on(TrackEvent.VideoPlaybackFailed, this.handleVideoPlaybackFailed);\n track.on(TrackEvent.VideoPlaybackStarted, this.handleVideoPlaybackStarted);\n }\n this.emitWhenConnected(RoomEvent.TrackSubscribed, track, publication, participant);\n }).on(ParticipantEvent.TrackUnpublished, publication => {\n this.emit(RoomEvent.TrackUnpublished, publication, participant);\n }).on(ParticipantEvent.TrackUnsubscribed, (track, publication) => {\n this.emit(RoomEvent.TrackUnsubscribed, track, publication, participant);\n }).on(ParticipantEvent.TrackMuted, pub => {\n this.emitWhenConnected(RoomEvent.TrackMuted, pub, participant);\n }).on(ParticipantEvent.TrackUnmuted, pub => {\n this.emitWhenConnected(RoomEvent.TrackUnmuted, pub, participant);\n }).on(ParticipantEvent.ParticipantMetadataChanged, metadata => {\n this.emitWhenConnected(RoomEvent.ParticipantMetadataChanged, metadata, participant);\n }).on(ParticipantEvent.ParticipantNameChanged, name => {\n this.emitWhenConnected(RoomEvent.ParticipantNameChanged, name, participant);\n }).on(ParticipantEvent.AttributesChanged, changedAttributes => {\n this.emitWhenConnected(RoomEvent.ParticipantAttributesChanged, changedAttributes, participant);\n }).on(ParticipantEvent.ConnectionQualityChanged, quality => {\n this.emitWhenConnected(RoomEvent.ConnectionQualityChanged, quality, participant);\n }).on(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions => {\n this.emitWhenConnected(RoomEvent.ParticipantPermissionsChanged, prevPermissions, participant);\n }).on(ParticipantEvent.TrackSubscriptionStatusChanged, (pub, status) => {\n this.emitWhenConnected(RoomEvent.TrackSubscriptionStatusChanged, pub, status, participant);\n }).on(ParticipantEvent.TrackSubscriptionFailed, (trackSid, error) => {\n this.emit(RoomEvent.TrackSubscriptionFailed, trackSid, participant, error);\n }).on(ParticipantEvent.TrackSubscriptionPermissionChanged, (pub, status) => {\n this.emitWhenConnected(RoomEvent.TrackSubscriptionPermissionChanged, pub, status, participant);\n }).on(ParticipantEvent.Active, () => {\n this.emitWhenConnected(RoomEvent.ParticipantActive, participant);\n if (participant.kind === ParticipantInfo_Kind.AGENT) {\n this.localParticipant.setActiveAgent(participant);\n }\n });\n // update info at the end after callbacks have been set up\n if (info) {\n participant.updateInfo(info);\n }\n return participant;\n }\n sendSyncState() {\n const remoteTracks = Array.from(this.remoteParticipants.values()).reduce((acc, participant) => {\n acc.push(...participant.getTrackPublications()); // FIXME would be nice to have this return RemoteTrackPublications directly instead of the type cast\n return acc;\n }, []);\n const localTracks = this.localParticipant.getTrackPublications(); // FIXME would be nice to have this return LocalTrackPublications directly instead of the type cast\n const localDataTrackInfos = this.outgoingDataTrackManager.queryPublished();\n this.engine.sendSyncState(remoteTracks, localTracks, localDataTrackInfos);\n }\n /**\n * After resuming, we'll need to notify the server of the current\n * subscription settings.\n */\n updateSubscriptions() {\n for (const p of this.remoteParticipants.values()) {\n for (const pub of p.videoTrackPublications.values()) {\n if (pub.isSubscribed && isRemotePub(pub)) {\n pub.emitTrackUpdate();\n }\n }\n }\n }\n getRemoteParticipantBySid(sid) {\n const identity = this.sidToIdentity.get(sid);\n if (identity) {\n return this.remoteParticipants.get(identity);\n }\n }\n registerRpcDataStreamHandler() {\n this.incomingDataStreamManager.registerTextStreamHandler(RPC_REQUEST_DATA_STREAM_TOPIC, (reader_1, _a) => __awaiter(this, [reader_1, _a], void 0, function (reader, _ref7) {\n var _this4 = this;\n let identity = _ref7.identity;\n return function* () {\n var _b;\n const attributes = (_b = reader.info.attributes) !== null && _b !== void 0 ? _b : {};\n yield _this4.rpcServerManager.handleIncomingDataStream(reader, identity, attributes);\n }();\n }));\n this.incomingDataStreamManager.registerTextStreamHandler(RPC_RESPONSE_DATA_STREAM_TOPIC, (reader_1, _a) => __awaiter(this, [reader_1, _a], void 0, function (reader, _ref8) {\n var _this5 = this;\n let identity = _ref8.identity;\n return function* () {\n var _b;\n const attributes = (_b = reader.info.attributes) !== null && _b !== void 0 ? _b : {};\n yield _this5.rpcClientManager.handleIncomingDataStream(reader, identity, attributes);\n }();\n }));\n }\n registerConnectionReconcile() {\n this.clearConnectionReconcile();\n let consecutiveFailures = 0;\n this.connectionReconcileInterval = CriticalTimers.setInterval(() => {\n if (\n // ensure we didn't tear it down\n !this.engine ||\n // engine detected close, but Room missed it\n this.engine.isClosed ||\n // transports failed without notifying engine\n !this.engine.verifyTransport()) {\n consecutiveFailures++;\n this.log.warn('detected connection state mismatch', {\n numFailures: consecutiveFailures,\n engine: this.engine ? {\n closed: this.engine.isClosed,\n transportsConnectedOrConnecting: this.engine.verifyTransport()\n } : undefined\n });\n if (consecutiveFailures >= 3) {\n this.recreateEngine();\n this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, DisconnectReason.STATE_MISMATCH);\n }\n } else {\n consecutiveFailures = 0;\n }\n }, CONNECTION_RECONCILE_FREQUENCY_MS);\n }\n clearConnectionReconcile() {\n if (this.connectionReconcileInterval) {\n CriticalTimers.clearInterval(this.connectionReconcileInterval);\n }\n }\n setAndEmitConnectionState(state) {\n if (state === this.state) {\n // unchanged\n return false;\n }\n this.log.info(\"connection state changed: \".concat(this.state, \" -> \").concat(state));\n this.state = state;\n this.incomingDataStreamManager.setConnected(state === ConnectionState.Connected);\n this.emit(RoomEvent.ConnectionStateChanged, this.state);\n return true;\n }\n emitBufferedEvents() {\n this.bufferedEvents.forEach(_ref9 => {\n let _ref0 = _slicedToArray(_ref9, 2),\n ev = _ref0[0],\n args = _ref0[1];\n this.emit(ev, ...args);\n });\n this.bufferedEvents = [];\n }\n emitWhenConnected(event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n if (this.state === ConnectionState.Reconnecting || this.isResuming || !this.engine || this.engine.pendingReconnect) {\n // in case the room is reconnecting, buffer the events by firing them later after emitting RoomEvent.Reconnected\n this.bufferedEvents.push([event, args]);\n } else if (this.state === ConnectionState.Connected) {\n return this.emit(event, ...args);\n }\n return false;\n }\n /**\n * Allows to populate a room with simulated participants.\n * No actual connection to a server will be established, all state is\n * @experimental\n */\n simulateParticipants(options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d;\n const publishOptions = Object.assign({\n audio: true,\n video: true,\n useRealTracks: false\n }, options.publish);\n const participantOptions = Object.assign({\n count: 9,\n audio: false,\n video: true,\n aspectRatios: [1.66, 1.7, 1.3]\n }, options.participants);\n this.handleDisconnect();\n this.roomInfo = new Room$1({\n sid: 'RM_SIMULATED',\n name: 'simulated-room',\n emptyTimeout: 0,\n maxParticipants: 0,\n creationTime: protoInt64.parse(new Date().getTime()),\n metadata: '',\n numParticipants: 1,\n numPublishers: 1,\n turnPassword: '',\n enabledCodecs: [],\n activeRecording: false\n });\n this.localParticipant.updateInfo(new ParticipantInfo({\n identity: 'simulated-local',\n name: 'local-name'\n }));\n this.setupLocalParticipantEvents();\n this.emit(RoomEvent.SignalConnected);\n this.emit(RoomEvent.Connected);\n this.setAndEmitConnectionState(ConnectionState.Connected);\n if (publishOptions.video) {\n const camPub = new LocalTrackPublication(Track.Kind.Video, new TrackInfo({\n source: TrackSource.CAMERA,\n sid: Math.floor(Math.random() * 10000).toString(),\n type: TrackType.AUDIO,\n name: 'video-dummy'\n }), new LocalVideoTrack(publishOptions.useRealTracks && ((_a = window.navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) ? (yield window.navigator.mediaDevices.getUserMedia({\n video: true\n })).getVideoTracks()[0] : createDummyVideoStreamTrack(160 * ((_b = participantOptions.aspectRatios[0]) !== null && _b !== void 0 ? _b : 1), 160, true, true), undefined, false, {\n loggerName: this.options.loggerName,\n loggerContextCb: () => this.logContext\n }), {\n loggerName: this.options.loggerName,\n loggerContextCb: () => this.logContext\n });\n // @ts-ignore\n this.localParticipant.addTrackPublication(camPub);\n this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, camPub);\n }\n if (publishOptions.audio) {\n const audioPub = new LocalTrackPublication(Track.Kind.Audio, new TrackInfo({\n source: TrackSource.MICROPHONE,\n sid: Math.floor(Math.random() * 10000).toString(),\n type: TrackType.AUDIO\n }), new LocalAudioTrack(publishOptions.useRealTracks && ((_c = navigator.mediaDevices) === null || _c === void 0 ? void 0 : _c.getUserMedia) ? (yield navigator.mediaDevices.getUserMedia({\n audio: true\n })).getAudioTracks()[0] : getEmptyAudioStreamTrack(), undefined, false, this.audioContext, {\n loggerName: this.options.loggerName,\n loggerContextCb: () => this.logContext\n }), {\n loggerName: this.options.loggerName,\n loggerContextCb: () => this.logContext\n });\n // @ts-ignore\n this.localParticipant.addTrackPublication(audioPub);\n this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, audioPub);\n }\n for (let i = 0; i < participantOptions.count - 1; i += 1) {\n let info = new ParticipantInfo({\n sid: Math.floor(Math.random() * 10000).toString(),\n identity: \"simulated-\".concat(i),\n state: ParticipantInfo_State.ACTIVE,\n tracks: [],\n joinedAt: protoInt64.parse(Date.now())\n });\n const p = this.getOrCreateParticipant(info.identity, info);\n if (participantOptions.video) {\n const dummyVideo = createDummyVideoStreamTrack(160 * ((_d = participantOptions.aspectRatios[i % participantOptions.aspectRatios.length]) !== null && _d !== void 0 ? _d : 1), 160, false, true);\n const videoTrack = new TrackInfo({\n source: TrackSource.CAMERA,\n sid: Math.floor(Math.random() * 10000).toString(),\n type: TrackType.AUDIO\n });\n p.addSubscribedMediaTrack(dummyVideo, videoTrack.sid, new MediaStream([dummyVideo]), new RTCRtpReceiver());\n info.tracks = [...info.tracks, videoTrack];\n }\n if (participantOptions.audio) {\n const dummyTrack = getEmptyAudioStreamTrack();\n const audioTrack = new TrackInfo({\n source: TrackSource.MICROPHONE,\n sid: Math.floor(Math.random() * 10000).toString(),\n type: TrackType.AUDIO\n });\n p.addSubscribedMediaTrack(dummyTrack, audioTrack.sid, new MediaStream([dummyTrack]), new RTCRtpReceiver());\n info.tracks = [...info.tracks, audioTrack];\n }\n p.updateInfo(info);\n }\n });\n }\n // /** @internal */\n emit(event) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n // active speaker updates are too spammy\n if (event !== RoomEvent.ActiveSpeakersChanged && event !== RoomEvent.TranscriptionReceived) {\n // only extract logContext from arguments in order to avoid logging the whole object tree\n const minimizedArgs = mapArgs(args).filter(arg => arg !== undefined);\n if (event === RoomEvent.TrackSubscribed || event === RoomEvent.TrackUnsubscribed) {\n this.log.trace(\"subscribe trace: \".concat(event), {\n event,\n args: minimizedArgs\n });\n }\n this.log.debug(\"room event \".concat(event), {\n event,\n args: minimizedArgs\n });\n }\n return super.emit(event, ...args);\n }\n}\nRoom.cleanupRegistry = typeof FinalizationRegistry !== 'undefined' && typeof WeakRef !== 'undefined' && new FinalizationRegistry(cleanup => {\n cleanup();\n});\nfunction mapArgs(args) {\n return args.map(arg => {\n if (!arg) {\n return;\n }\n if (Array.isArray(arg)) {\n return mapArgs(arg);\n }\n if (typeof arg === 'object') {\n return 'logContext' in arg ? arg.logContext : undefined;\n }\n return arg;\n });\n}// This file was generated from JSON Schema using quicktype, do not modify it directly.\n// The code generation lives at https://github.com/livekit/attribute-definitions\n//\n// To parse this data:\n//\n// import { Convert, AgentAttributes, TranscriptionAttributes } from \"./file\";\n//\n// const agentAttributes = Convert.toAgentAttributes(json);\n// const transcriptionAttributes = Convert.toTranscriptionAttributes(json);\n// Converts JSON strings to/from your types\nclass Convert {\n static toAgentAttributes(json) {\n return JSON.parse(json);\n }\n static agentAttributesToJson(value) {\n return JSON.stringify(value);\n }\n static toTranscriptionAttributes(json) {\n return JSON.parse(json);\n }\n static transcriptionAttributesToJson(value) {\n return JSON.stringify(value);\n }\n}var attributeTypings=/*#__PURE__*/Object.freeze({__proto__:null,Convert:Convert});var CheckStatus;\n(function (CheckStatus) {\n CheckStatus[CheckStatus[\"IDLE\"] = 0] = \"IDLE\";\n CheckStatus[CheckStatus[\"RUNNING\"] = 1] = \"RUNNING\";\n CheckStatus[CheckStatus[\"SKIPPED\"] = 2] = \"SKIPPED\";\n CheckStatus[CheckStatus[\"SUCCESS\"] = 3] = \"SUCCESS\";\n CheckStatus[CheckStatus[\"FAILED\"] = 4] = \"FAILED\";\n})(CheckStatus || (CheckStatus = {}));\nclass Checker extends eventsExports.EventEmitter {\n constructor(url, token) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n super();\n this.status = CheckStatus.IDLE;\n this.logs = [];\n this.options = {};\n this.url = url;\n this.token = token;\n this.name = this.constructor.name;\n this.room = new Room(options.roomOptions);\n this.connectOptions = options.connectOptions;\n this.options = options;\n }\n run(onComplete) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.status !== CheckStatus.IDLE) {\n throw Error('check is running already');\n }\n this.setStatus(CheckStatus.RUNNING);\n try {\n yield this.perform();\n } catch (err) {\n if (err instanceof Error) {\n if (this.options.errorsAsWarnings) {\n this.appendWarning(err.message);\n } else {\n this.appendError(err.message);\n }\n }\n }\n yield this.disconnect();\n // sleep for a bit to ensure disconnect\n yield new Promise(resolve => setTimeout(resolve, 500));\n // @ts-ignore\n if (this.status !== CheckStatus.SKIPPED) {\n this.setStatus(this.isSuccess() ? CheckStatus.SUCCESS : CheckStatus.FAILED);\n }\n if (onComplete) {\n onComplete();\n }\n return this.getInfo();\n });\n }\n isSuccess() {\n return !this.logs.some(l => l.level === 'error');\n }\n connect(url) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.room.state === ConnectionState.Connected) {\n return this.room;\n }\n if (!url) {\n url = this.url;\n }\n yield this.room.connect(url, this.token, this.connectOptions);\n return this.room;\n });\n }\n disconnect() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.room && this.room.state !== ConnectionState.Disconnected) {\n yield this.room.disconnect();\n // wait for it to go through\n yield new Promise(resolve => setTimeout(resolve, 500));\n }\n });\n }\n skip() {\n this.setStatus(CheckStatus.SKIPPED);\n }\n switchProtocol(protocol) {\n return __awaiter(this, void 0, void 0, function* () {\n let hasReconnecting = false;\n let hasReconnected = false;\n this.room.on(RoomEvent.Reconnecting, () => {\n hasReconnecting = true;\n });\n this.room.once(RoomEvent.Reconnected, () => {\n hasReconnected = true;\n });\n this.room.simulateScenario(\"force-\".concat(protocol));\n yield new Promise(resolve => setTimeout(resolve, 1000));\n if (!hasReconnecting) {\n // no need to wait for reconnection\n return;\n }\n // wait for 10 seconds for reconnection\n const timeout = Date.now() + 10000;\n while (Date.now() < timeout) {\n if (hasReconnected) {\n return;\n }\n yield sleep(100);\n }\n throw new Error(\"Could not reconnect using \".concat(protocol, \" protocol after 10 seconds\"));\n });\n }\n appendMessage(message) {\n this.logs.push({\n level: 'info',\n message\n });\n this.emit('update', this.getInfo());\n }\n appendWarning(message) {\n this.logs.push({\n level: 'warning',\n message\n });\n this.emit('update', this.getInfo());\n }\n appendError(message) {\n this.logs.push({\n level: 'error',\n message\n });\n this.emit('update', this.getInfo());\n }\n setStatus(status) {\n this.status = status;\n this.emit('update', this.getInfo());\n }\n get engine() {\n var _a;\n return (_a = this.room) === null || _a === void 0 ? void 0 : _a.engine;\n }\n getInfo() {\n return {\n logs: this.logs,\n name: this.name,\n status: this.status,\n description: this.description\n };\n }\n}/**\n * Checks for connections quality to closests Cloud regions and determining the best quality\n */\nclass CloudRegionCheck extends Checker {\n get description() {\n return 'Cloud regions';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n const regionProvider = new RegionUrlProvider(this.url, this.token);\n if (!regionProvider.isCloud()) {\n this.skip();\n return;\n }\n const regionStats = [];\n const seenUrls = new Set();\n for (let i = 0; i < 3; i++) {\n const regionUrl = yield regionProvider.getNextBestRegionUrl();\n if (!regionUrl) {\n break;\n }\n if (seenUrls.has(regionUrl)) {\n continue;\n }\n seenUrls.add(regionUrl);\n const stats = yield this.checkCloudRegion(regionUrl);\n this.appendMessage(\"\".concat(stats.region, \" RTT: \").concat(stats.rtt, \"ms, duration: \").concat(stats.duration, \"ms\"));\n regionStats.push(stats);\n }\n regionStats.sort((a, b) => {\n return (a.duration - b.duration) * 0.5 + (a.rtt - b.rtt) * 0.5;\n });\n const bestRegion = regionStats[0];\n this.bestStats = bestRegion;\n this.appendMessage(\"best Cloud region: \".concat(bestRegion.region));\n });\n }\n getInfo() {\n const info = super.getInfo();\n info.data = this.bestStats;\n return info;\n }\n checkCloudRegion(url) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n yield this.connect(url);\n if (this.options.protocol === 'tcp') {\n yield this.switchProtocol('tcp');\n }\n const region = (_a = this.room.serverInfo) === null || _a === void 0 ? void 0 : _a.region;\n if (!region) {\n throw new Error('Region not found');\n }\n const writer = yield this.room.localParticipant.streamText({\n topic: 'test'\n });\n const chunkSize = 1000; // each chunk is about 1000 bytes\n const totalSize = 1000000; // approximately 1MB of data\n const numChunks = totalSize / chunkSize; // will yield 1000 chunks\n const chunkData = 'A'.repeat(chunkSize); // create a string of 1000 'A' characters\n const startTime = Date.now();\n for (let i = 0; i < numChunks; i++) {\n yield writer.write(chunkData);\n }\n yield writer.close();\n const endTime = Date.now();\n const stats = yield (_b = this.room.engine.pcManager) === null || _b === void 0 ? void 0 : _b.publisher.getStats();\n const regionStats = {\n region: region,\n rtt: 10000,\n duration: endTime - startTime\n };\n stats === null || stats === void 0 ? void 0 : stats.forEach(stat => {\n if (stat.type === 'candidate-pair' && stat.nominated) {\n regionStats.rtt = stat.currentRoundTripTime * 1000;\n }\n });\n yield this.disconnect();\n return regionStats;\n });\n }\n}const TEST_DURATION = 10000;\nclass ConnectionProtocolCheck extends Checker {\n get description() {\n return 'Connection via UDP vs TCP';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n const udpStats = yield this.checkConnectionProtocol('udp');\n const tcpStats = yield this.checkConnectionProtocol('tcp');\n this.bestStats = udpStats;\n // udp should is the better protocol typically. however, we'd prefer TCP when either of these conditions are true:\n // 1. the bandwidth limitation is worse on UDP by 500ms\n // 2. the packet loss is higher on UDP by 1%\n if (udpStats.qualityLimitationDurations.bandwidth - tcpStats.qualityLimitationDurations.bandwidth > 0.5 || (udpStats.packetsLost - tcpStats.packetsLost) / udpStats.packetsSent > 0.01) {\n this.appendMessage('best connection quality via tcp');\n this.bestStats = tcpStats;\n } else {\n this.appendMessage('best connection quality via udp');\n }\n const stats = this.bestStats;\n this.appendMessage(\"upstream bitrate: \".concat((stats.bitrateTotal / stats.count / 1000 / 1000).toFixed(2), \" mbps\"));\n this.appendMessage(\"RTT: \".concat((stats.rttTotal / stats.count * 1000).toFixed(2), \" ms\"));\n this.appendMessage(\"jitter: \".concat((stats.jitterTotal / stats.count * 1000).toFixed(2), \" ms\"));\n if (stats.packetsLost > 0) {\n this.appendWarning(\"packets lost: \".concat((stats.packetsLost / stats.packetsSent * 100).toFixed(2), \"%\"));\n }\n if (stats.qualityLimitationDurations.bandwidth > 1) {\n this.appendWarning(\"bandwidth limited \".concat((stats.qualityLimitationDurations.bandwidth / (TEST_DURATION / 1000) * 100).toFixed(2), \"%\"));\n }\n if (stats.qualityLimitationDurations.cpu > 0) {\n this.appendWarning(\"cpu limited \".concat((stats.qualityLimitationDurations.cpu / (TEST_DURATION / 1000) * 100).toFixed(2), \"%\"));\n }\n });\n }\n getInfo() {\n const info = super.getInfo();\n info.data = this.bestStats;\n return info;\n }\n checkConnectionProtocol(protocol) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.connect();\n if (protocol === 'tcp') {\n yield this.switchProtocol('tcp');\n } else {\n yield this.switchProtocol('udp');\n }\n // create a canvas with animated content\n const canvas = document.createElement('canvas');\n canvas.width = 1280;\n canvas.height = 720;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n let hue = 0;\n const animate = () => {\n hue = (hue + 1) % 360;\n ctx.fillStyle = \"hsl(\".concat(hue, \", 100%, 50%)\");\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n requestAnimationFrame(animate);\n };\n animate();\n // create video track from canvas\n const stream = canvas.captureStream(30); // 30fps\n const videoTrack = stream.getVideoTracks()[0];\n // publish to room\n const pub = yield this.room.localParticipant.publishTrack(videoTrack, {\n simulcast: false,\n degradationPreference: 'maintain-resolution',\n videoEncoding: {\n maxBitrate: 2000000\n }\n });\n const track = pub.track;\n const protocolStats = {\n protocol,\n packetsLost: 0,\n packetsSent: 0,\n qualityLimitationDurations: {},\n rttTotal: 0,\n jitterTotal: 0,\n bitrateTotal: 0,\n count: 0\n };\n // gather stats once a second\n const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n const stats = yield track.getRTCStatsReport();\n stats === null || stats === void 0 ? void 0 : stats.forEach(stat => {\n if (stat.type === 'outbound-rtp') {\n protocolStats.packetsSent = stat.packetsSent;\n protocolStats.qualityLimitationDurations = stat.qualityLimitationDurations;\n protocolStats.bitrateTotal += stat.targetBitrate;\n protocolStats.count++;\n } else if (stat.type === 'remote-inbound-rtp') {\n protocolStats.packetsLost = stat.packetsLost;\n protocolStats.rttTotal += stat.roundTripTime;\n protocolStats.jitterTotal += stat.jitter;\n }\n });\n }), 1000);\n // wait a bit to gather stats\n yield new Promise(resolve => setTimeout(resolve, TEST_DURATION));\n clearInterval(interval);\n videoTrack.stop();\n canvas.remove();\n yield this.disconnect();\n return protocolStats;\n });\n }\n}class PublishAudioCheck extends Checker {\n get description() {\n return 'Can publish audio';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const room = yield this.connect();\n const track = yield createLocalAudioTrack();\n const trackIsSilent = yield detectSilence(track, 1000);\n if (trackIsSilent) {\n throw new Error('unable to detect audio from microphone');\n }\n this.appendMessage('detected audio from microphone');\n room.localParticipant.publishTrack(track);\n // wait for a few seconds to publish\n yield new Promise(resolve => setTimeout(resolve, 3000));\n // verify RTC stats that it's publishing\n const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();\n if (!stats) {\n throw new Error('Could not get RTCStats');\n }\n let numPackets = 0;\n stats.forEach(stat => {\n if (stat.type === 'outbound-rtp' && (stat.kind === 'audio' || !stat.kind && stat.mediaType === 'audio')) {\n numPackets = stat.packetsSent;\n }\n });\n if (numPackets === 0) {\n throw new Error('Could not determine packets are sent');\n }\n this.appendMessage(\"published \".concat(numPackets, \" audio packets\"));\n });\n }\n}class PublishVideoCheck extends Checker {\n get description() {\n return 'Can publish video';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const room = yield this.connect();\n const track = yield createLocalVideoTrack();\n // check if we have video from camera\n yield this.checkForVideo(track.mediaStreamTrack);\n room.localParticipant.publishTrack(track);\n // wait for a few seconds to publish\n yield new Promise(resolve => setTimeout(resolve, 5000));\n // verify RTC stats that it's publishing\n const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();\n if (!stats) {\n throw new Error('Could not get RTCStats');\n }\n let numPackets = 0;\n stats.forEach(stat => {\n if (stat.type === 'outbound-rtp' && (stat.kind === 'video' || !stat.kind && stat.mediaType === 'video')) {\n numPackets += stat.packetsSent;\n }\n });\n if (numPackets === 0) {\n throw new Error('Could not determine packets are sent');\n }\n this.appendMessage(\"published \".concat(numPackets, \" video packets\"));\n });\n }\n checkForVideo(track) {\n return __awaiter(this, void 0, void 0, function* () {\n const stream = new MediaStream();\n stream.addTrack(track.clone());\n // Create video element to check frames\n const video = document.createElement('video');\n video.srcObject = stream;\n video.muted = true;\n video.autoplay = true;\n video.playsInline = true;\n // For iOS Safari\n video.setAttribute('playsinline', 'true');\n document.body.appendChild(video);\n yield new Promise(resolve => {\n video.onplay = () => {\n setTimeout(() => {\n var _a, _b, _c, _d;\n const canvas = document.createElement('canvas');\n const settings = track.getSettings();\n const width = (_b = (_a = settings.width) !== null && _a !== void 0 ? _a : video.videoWidth) !== null && _b !== void 0 ? _b : 1280;\n const height = (_d = (_c = settings.height) !== null && _c !== void 0 ? _c : video.videoHeight) !== null && _d !== void 0 ? _d : 720;\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n // Draw video frame to canvas\n ctx.drawImage(video, 0, 0);\n // Get image data and check if all pixels are black\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const data = imageData.data;\n let isAllBlack = true;\n for (let i = 0; i < data.length; i += 4) {\n if (data[i] !== 0 || data[i + 1] !== 0 || data[i + 2] !== 0) {\n isAllBlack = false;\n break;\n }\n }\n if (isAllBlack) {\n this.appendError('camera appears to be producing only black frames');\n } else {\n this.appendMessage('received video frames');\n }\n resolve();\n }, 1000);\n };\n video.play();\n });\n stream.getTracks().forEach(t => t.stop());\n video.remove();\n });\n }\n}class ReconnectCheck extends Checker {\n get description() {\n return 'Resuming connection after interruption';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const room = yield this.connect();\n let reconnectingTriggered = false;\n let reconnected = false;\n let reconnectResolver;\n const reconnectTimeout = new Promise(resolve => {\n setTimeout(resolve, 5000);\n reconnectResolver = resolve;\n });\n const handleReconnecting = () => {\n reconnectingTriggered = true;\n };\n room.on(RoomEvent.SignalReconnecting, handleReconnecting).on(RoomEvent.Reconnecting, handleReconnecting).on(RoomEvent.Reconnected, () => {\n reconnected = true;\n reconnectResolver(true);\n });\n (_a = room.engine.client.ws) === null || _a === void 0 ? void 0 : _a.close();\n const onClose = room.engine.client.onClose;\n if (onClose) {\n onClose('');\n }\n yield reconnectTimeout;\n if (!reconnectingTriggered) {\n throw new Error('Did not attempt to reconnect');\n } else if (!reconnected || room.state !== ConnectionState.Connected) {\n this.appendWarning('reconnection is only possible in Redis-based configurations');\n throw new Error('Not able to reconnect');\n }\n });\n }\n}class TURNCheck extends Checker {\n get description() {\n return 'Can connect via TURN';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n if (isCloud(new URL(this.url))) {\n this.appendMessage('Using region specific url');\n this.url = (_a = yield new RegionUrlProvider(this.url, this.token).getNextBestRegionUrl()) !== null && _a !== void 0 ? _a : this.url;\n }\n const signalClient = new SignalClient();\n const joinRes = yield signalClient.join(this.url, this.token, {\n autoSubscribe: true,\n maxRetries: 0,\n e2eeEnabled: false,\n websocketTimeout: 15000\n }, undefined, true);\n let hasTLS = false;\n let hasTURN = false;\n let hasSTUN = false;\n for (let iceServer of joinRes.iceServers) {\n for (let url of iceServer.urls) {\n if (url.startsWith('turn:')) {\n hasTURN = true;\n hasSTUN = true;\n } else if (url.startsWith('turns:')) {\n hasTURN = true;\n hasSTUN = true;\n hasTLS = true;\n }\n if (url.startsWith('stun:')) {\n hasSTUN = true;\n }\n }\n }\n if (!hasSTUN) {\n this.appendWarning('No STUN servers configured on server side.');\n } else if (hasTURN && !hasTLS) {\n this.appendWarning('TURN is configured server side, but TURN/TLS is unavailable.');\n }\n yield signalClient.close();\n if (((_c = (_b = this.connectOptions) === null || _b === void 0 ? void 0 : _b.rtcConfig) === null || _c === void 0 ? void 0 : _c.iceServers) || hasTURN) {\n yield this.room.connect(this.url, this.token, {\n rtcConfig: {\n iceTransportPolicy: 'relay'\n }\n });\n } else {\n this.appendWarning('No TURN servers configured.');\n this.skip();\n yield new Promise(resolve => setTimeout(resolve, 0));\n }\n });\n }\n}class WebRTCCheck extends Checker {\n get description() {\n return 'Establishing WebRTC connection';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n let hasTcp = false;\n let hasIpv4Udp = false;\n this.room.on(RoomEvent.SignalConnected, () => {\n var _a;\n const prevTrickle = this.room.engine.client.onTrickle;\n this.room.engine.client.onTrickle = (sd, target) => {\n if (sd.candidate) {\n const candidate = new RTCIceCandidate(sd);\n let str = \"\".concat(candidate.protocol, \" \").concat(candidate.address, \":\").concat(candidate.port, \" \").concat(candidate.type);\n if (candidate.address) {\n if (isIPPrivate(candidate.address)) {\n str += ' (private)';\n } else {\n if (candidate.protocol === 'tcp' && candidate.tcpType === 'passive') {\n hasTcp = true;\n str += ' (passive)';\n } else if (candidate.protocol === 'udp') {\n hasIpv4Udp = true;\n }\n }\n }\n this.appendMessage(str);\n }\n if (prevTrickle) {\n prevTrickle(sd, target);\n }\n };\n if ((_a = this.room.engine.pcManager) === null || _a === void 0 ? void 0 : _a.subscriber) {\n this.room.engine.pcManager.subscriber.onIceCandidateError = ev => {\n if (ev instanceof RTCPeerConnectionIceErrorEvent) {\n this.appendWarning(\"error with ICE candidate: \".concat(ev.errorCode, \" \").concat(ev.errorText, \" \").concat(ev.url));\n }\n };\n }\n });\n try {\n yield this.connect();\n livekitLogger.info('now the room is connected');\n } catch (err) {\n this.appendWarning('ports need to be open on firewall in order to connect.');\n throw err;\n }\n if (!hasTcp) {\n this.appendWarning('Server is not configured for ICE/TCP');\n }\n if (!hasIpv4Udp) {\n this.appendWarning('No public IPv4 UDP candidates were found. Your server is likely not configured correctly');\n }\n });\n }\n}\nfunction isIPPrivate(address) {\n const parts = address.split('.');\n if (parts.length === 4) {\n if (parts[0] === '10') {\n return true;\n } else if (parts[0] === '192' && parts[1] === '168') {\n return true;\n } else if (parts[0] === '172') {\n const second = parseInt(parts[1], 10);\n if (second >= 16 && second <= 31) {\n return true;\n }\n }\n }\n return false;\n}class WebSocketCheck extends Checker {\n get description() {\n return 'Connecting to signal connection via WebSocket';\n }\n perform() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n if (this.url.startsWith('ws:') || this.url.startsWith('http:')) {\n this.appendWarning('Server is insecure, clients may block connections to it');\n }\n let signalClient = new SignalClient();\n let joinRes;\n try {\n joinRes = yield signalClient.join(this.url, this.token, {\n autoSubscribe: true,\n maxRetries: 0,\n e2eeEnabled: false,\n websocketTimeout: 15000\n }, undefined, true);\n } catch (e) {\n if (isCloud(new URL(this.url))) {\n this.appendMessage(\"Initial connection failed with error \".concat(e.message, \". Retrying with region fallback\"));\n const regionProvider = new RegionUrlProvider(this.url, this.token);\n const regionUrl = yield regionProvider.getNextBestRegionUrl();\n if (regionUrl) {\n joinRes = yield signalClient.join(regionUrl, this.token, {\n autoSubscribe: true,\n maxRetries: 0,\n e2eeEnabled: false,\n websocketTimeout: 15000\n }, undefined, true);\n this.appendMessage(\"Fallback to region worked. To avoid initial connections failing, ensure you're calling room.prepareConnection() ahead of time\");\n }\n }\n }\n if (joinRes) {\n this.appendMessage(\"Connected to server, version \".concat(joinRes.serverVersion, \".\"));\n if (((_a = joinRes.serverInfo) === null || _a === void 0 ? void 0 : _a.edition) === ServerInfo_Edition.Cloud && ((_b = joinRes.serverInfo) === null || _b === void 0 ? void 0 : _b.region)) {\n this.appendMessage(\"LiveKit Cloud: \".concat((_c = joinRes.serverInfo) === null || _c === void 0 ? void 0 : _c.region));\n }\n } else {\n this.appendError(\"Websocket connection could not be established\");\n }\n yield signalClient.close();\n });\n }\n}class ConnectionCheck extends eventsExports.EventEmitter {\n constructor(url, token) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n super();\n this.options = {};\n this.checkResults = new Map();\n this.url = url;\n this.token = token;\n this.options = options;\n }\n getNextCheckId() {\n const nextId = this.checkResults.size;\n this.checkResults.set(nextId, {\n logs: [],\n status: CheckStatus.IDLE,\n name: '',\n description: ''\n });\n return nextId;\n }\n updateCheck(checkId, info) {\n this.checkResults.set(checkId, info);\n this.emit('checkUpdate', checkId, info);\n }\n isSuccess() {\n return Array.from(this.checkResults.values()).every(r => r.status !== CheckStatus.FAILED);\n }\n getResults() {\n return Array.from(this.checkResults.values());\n }\n createAndRunCheck(check) {\n return __awaiter(this, void 0, void 0, function* () {\n const checkId = this.getNextCheckId();\n const test = new check(this.url, this.token, this.options);\n const handleUpdate = info => {\n this.updateCheck(checkId, info);\n };\n test.on('update', handleUpdate);\n const result = yield test.run();\n test.off('update', handleUpdate);\n return result;\n });\n }\n checkWebsocket() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.createAndRunCheck(WebSocketCheck);\n });\n }\n checkWebRTC() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.createAndRunCheck(WebRTCCheck);\n });\n }\n checkTURN() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.createAndRunCheck(TURNCheck);\n });\n }\n checkReconnect() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.createAndRunCheck(ReconnectCheck);\n });\n }\n checkPublishAudio() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.createAndRunCheck(PublishAudioCheck);\n });\n }\n checkPublishVideo() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.createAndRunCheck(PublishVideoCheck);\n });\n }\n checkConnectionProtocol() {\n return __awaiter(this, void 0, void 0, function* () {\n const info = yield this.createAndRunCheck(ConnectionProtocolCheck);\n if (info.data && 'protocol' in info.data) {\n const stats = info.data;\n this.options.protocol = stats.protocol;\n }\n return info;\n });\n }\n checkCloudRegion() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.createAndRunCheck(CloudRegionCheck);\n });\n }\n}/** A Fixed TokenSource is a token source that takes no parameters and returns a completely\n * independently derived value on each fetch() call.\n *\n * The most common downstream implementer is {@link TokenSourceLiteral}.\n */\nclass TokenSourceFixed {}\n/** A Configurable TokenSource is a token source that takes a\n * {@link TokenSourceFetchOptions} object as input and returns a deterministic\n * {@link TokenSourceResponseObject} output based on the options specified.\n *\n * For example, if options.participantName is set, it should be expected that\n * all tokens that are generated will have participant name field set to the\n * provided value.\n *\n * A few common downstream implementers are {@link TokenSourceEndpoint}\n * and {@link TokenSourceCustom}.\n */\nclass TokenSourceConfigurable {}new TextEncoder();\nconst decoder = new TextDecoder();function decodeBase64(encoded) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(encoded);\n }\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}function decode(input) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(typeof input === 'string' ? input : decoder.decode(input), {\n alphabet: 'base64url'\n });\n }\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');\n try {\n return decodeBase64(encoded);\n } catch (_unused) {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n}class JOSEError extends Error {\n constructor(message, options) {\n var _Error$captureStackTr;\n super(message, options);\n _defineProperty(this, \"code\", 'ERR_JOSE_GENERIC');\n this.name = this.constructor.name;\n (_Error$captureStackTr = Error.captureStackTrace) === null || _Error$captureStackTr === void 0 || _Error$captureStackTr.call(Error, this, this.constructor);\n }\n}\n_defineProperty(JOSEError, \"code\", 'ERR_JOSE_GENERIC');\nclass JWTClaimValidationFailed extends JOSEError {\n constructor(message, payload) {\n let claim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';\n let reason = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unspecified';\n super(message, {\n cause: {\n claim,\n reason,\n payload\n }\n });\n _defineProperty(this, \"code\", 'ERR_JWT_CLAIM_VALIDATION_FAILED');\n _defineProperty(this, \"claim\", void 0);\n _defineProperty(this, \"reason\", void 0);\n _defineProperty(this, \"payload\", void 0);\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\n_defineProperty(JWTClaimValidationFailed, \"code\", 'ERR_JWT_CLAIM_VALIDATION_FAILED');\nclass JWTExpired extends JOSEError {\n constructor(message, payload) {\n let claim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';\n let reason = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unspecified';\n super(message, {\n cause: {\n claim,\n reason,\n payload\n }\n });\n _defineProperty(this, \"code\", 'ERR_JWT_EXPIRED');\n _defineProperty(this, \"claim\", void 0);\n _defineProperty(this, \"reason\", void 0);\n _defineProperty(this, \"payload\", void 0);\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\n_defineProperty(JWTExpired, \"code\", 'ERR_JWT_EXPIRED');\nclass JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"code\", 'ERR_JOSE_ALG_NOT_ALLOWED');\n }\n}\n_defineProperty(JOSEAlgNotAllowed, \"code\", 'ERR_JOSE_ALG_NOT_ALLOWED');\nclass JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"code\", 'ERR_JOSE_NOT_SUPPORTED');\n }\n}\n_defineProperty(JOSENotSupported, \"code\", 'ERR_JOSE_NOT_SUPPORTED');\nclass JWEDecryptionFailed extends JOSEError {\n constructor() {\n let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'decryption operation failed';\n let options = arguments.length > 1 ? arguments[1] : undefined;\n super(message, options);\n _defineProperty(this, \"code\", 'ERR_JWE_DECRYPTION_FAILED');\n }\n}\n_defineProperty(JWEDecryptionFailed, \"code\", 'ERR_JWE_DECRYPTION_FAILED');\nclass JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"code\", 'ERR_JWE_INVALID');\n }\n}\n_defineProperty(JWEInvalid, \"code\", 'ERR_JWE_INVALID');\nclass JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"code\", 'ERR_JWS_INVALID');\n }\n}\n_defineProperty(JWSInvalid, \"code\", 'ERR_JWS_INVALID');\nclass JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"code\", 'ERR_JWT_INVALID');\n }\n}\n_defineProperty(JWTInvalid, \"code\", 'ERR_JWT_INVALID');\nclass JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"code\", 'ERR_JWK_INVALID');\n }\n}\n_defineProperty(JWKInvalid, \"code\", 'ERR_JWK_INVALID');\nclass JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"code\", 'ERR_JWKS_INVALID');\n }\n}\n_defineProperty(JWKSInvalid, \"code\", 'ERR_JWKS_INVALID');\nclass JWKSNoMatchingKey extends JOSEError {\n constructor() {\n let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'no applicable key found in the JSON Web Key Set';\n let options = arguments.length > 1 ? arguments[1] : undefined;\n super(message, options);\n _defineProperty(this, \"code\", 'ERR_JWKS_NO_MATCHING_KEY');\n }\n}\n_defineProperty(JWKSNoMatchingKey, \"code\", 'ERR_JWKS_NO_MATCHING_KEY');\nclass JWKSMultipleMatchingKeys extends JOSEError {\n constructor() {\n let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'multiple matching keys found in the JSON Web Key Set';\n let options = arguments.length > 1 ? arguments[1] : undefined;\n super(message, options);\n _defineProperty(this, Symbol.asyncIterator, void 0);\n _defineProperty(this, \"code\", 'ERR_JWKS_MULTIPLE_MATCHING_KEYS');\n }\n}\n_defineProperty(JWKSMultipleMatchingKeys, \"code\", 'ERR_JWKS_MULTIPLE_MATCHING_KEYS');\nclass JWKSTimeout extends JOSEError {\n constructor() {\n let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'request timed out';\n let options = arguments.length > 1 ? arguments[1] : undefined;\n super(message, options);\n _defineProperty(this, \"code\", 'ERR_JWKS_TIMEOUT');\n }\n}\n_defineProperty(JWKSTimeout, \"code\", 'ERR_JWKS_TIMEOUT');\nclass JWSSignatureVerificationFailed extends JOSEError {\n constructor() {\n let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'signature verification failed';\n let options = arguments.length > 1 ? arguments[1] : undefined;\n super(message, options);\n _defineProperty(this, \"code\", 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED');\n }\n}\n_defineProperty(JWSSignatureVerificationFailed, \"code\", 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED');const isObjectLike = value => typeof value === 'object' && value !== null;\nfunction isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}function decodeJwt(jwt) {\n if (typeof jwt !== 'string') throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n const _jwt$split = jwt.split('.'),\n payload = _jwt$split[1],\n length = _jwt$split.length;\n if (length === 5) throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n if (length !== 3) throw new JWTInvalid('Invalid JWT');\n if (!payload) throw new JWTInvalid('JWTs must contain a payload');\n let decoded;\n try {\n decoded = decode(payload);\n } catch (_unused) {\n throw new JWTInvalid('Failed to base64url decode the payload');\n }\n let result;\n try {\n result = JSON.parse(decoder.decode(decoded));\n } catch (_unused2) {\n throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n }\n if (!isObject(result)) throw new JWTInvalid('Invalid JWT Claims Set');\n return result;\n}const ONE_SECOND_IN_MILLISECONDS = 1000;\nconst ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;\nfunction isResponseTokenValid(response) {\n const jwtPayload = decodeTokenPayload(response.participantToken);\n if (!(jwtPayload === null || jwtPayload === void 0 ? void 0 : jwtPayload.nbf) || !(jwtPayload === null || jwtPayload === void 0 ? void 0 : jwtPayload.exp)) {\n return true;\n }\n const now = new Date();\n const nbfInMilliseconds = jwtPayload.nbf * ONE_SECOND_IN_MILLISECONDS;\n const nbfDate = new Date(nbfInMilliseconds);\n const expInMilliseconds = jwtPayload.exp * ONE_SECOND_IN_MILLISECONDS;\n const expDate = new Date(expInMilliseconds - ONE_MINUTE_IN_MILLISECONDS);\n return nbfDate <= now && expDate > now;\n}\n/** Given a LiveKit generated participant token, decodes and returns the associated {@link TokenPayload} data. */\nfunction decodeTokenPayload(token) {\n const payload = decodeJwt(token);\n payload.roomConfig;\n const rest = __rest(payload, [\"roomConfig\"]);\n const mappedPayload = Object.assign(Object.assign({}, rest), {\n roomConfig: payload.roomConfig ? RoomConfiguration.fromJson(payload.roomConfig, {\n ignoreUnknownFields: true\n }) : undefined\n });\n return mappedPayload;\n}\n/** Given two TokenSourceFetchOptions values, check to see if they are deep equal. */\nfunction areTokenSourceFetchOptionsEqual(a, b) {\n const allKeysSet = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const key of allKeysSet) {\n switch (key) {\n case 'roomName':\n case 'participantName':\n case 'participantIdentity':\n case 'participantMetadata':\n case 'participantAttributes':\n case 'agentName':\n case 'agentMetadata':\n if (a[key] !== b[key]) {\n return false;\n }\n break;\n default:\n // ref: https://stackoverflow.com/a/58009992\n const exhaustiveCheckedKey = key;\n throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being checked for equality!\"));\n }\n }\n return true;\n}/** A TokenSourceCached is a TokenSource which caches the last {@link TokenSourceResponseObject} value and returns it\n * until a) it expires or b) the {@link TokenSourceFetchOptions} provided to .fetch(...) change. */\nclass TokenSourceCached extends TokenSourceConfigurable {\n constructor() {\n super(...arguments);\n this.cachedFetchOptions = null;\n this.cachedResponse = null;\n this.fetchMutex = new _();\n }\n isSameAsCachedFetchOptions(options) {\n if (!this.cachedFetchOptions) {\n return false;\n }\n for (const key of Object.keys(this.cachedFetchOptions)) {\n switch (key) {\n case 'roomName':\n case 'participantName':\n case 'participantIdentity':\n case 'participantMetadata':\n case 'participantAttributes':\n case 'agentName':\n case 'agentMetadata':\n if (this.cachedFetchOptions[key] !== options[key]) {\n return false;\n }\n break;\n default:\n // ref: https://stackoverflow.com/a/58009992\n const exhaustiveCheckedKey = key;\n throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being checked for equality!\"));\n }\n }\n return true;\n }\n shouldReturnCachedValueFromFetch(fetchOptions) {\n if (!this.cachedResponse) {\n return false;\n }\n if (!isResponseTokenValid(this.cachedResponse)) {\n return false;\n }\n if (!this.isSameAsCachedFetchOptions(fetchOptions)) {\n return false;\n }\n return true;\n }\n getCachedResponseJwtPayload() {\n if (!this.cachedResponse) {\n return null;\n }\n return decodeTokenPayload(this.cachedResponse.participantToken);\n }\n fetch(options, force) {\n return __awaiter(this, void 0, void 0, function* () {\n const unlock = yield this.fetchMutex.lock();\n try {\n if (force) {\n this.cachedResponse = null;\n }\n if (this.shouldReturnCachedValueFromFetch(options)) {\n return this.cachedResponse.toJson();\n }\n this.cachedFetchOptions = options;\n const tokenResponse = yield this.update(options);\n this.cachedResponse = tokenResponse;\n return tokenResponse.toJson();\n } finally {\n unlock();\n }\n });\n }\n}\nclass TokenSourceLiteral extends TokenSourceFixed {\n constructor(literalOrFn) {\n super();\n this.literalOrFn = literalOrFn;\n }\n fetch() {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof this.literalOrFn === 'function') {\n return this.literalOrFn();\n } else {\n return this.literalOrFn;\n }\n });\n }\n}\nclass TokenSourceCustom extends TokenSourceCached {\n constructor(customFn) {\n super();\n this.customFn = customFn;\n }\n update(options) {\n return __awaiter(this, void 0, void 0, function* () {\n const resultMaybePromise = this.customFn(options);\n let result;\n if (resultMaybePromise instanceof Promise) {\n result = yield resultMaybePromise;\n } else {\n result = resultMaybePromise;\n }\n return TokenSourceResponse.fromJson(result, {\n // NOTE: it could be possible that the response body could contain more fields than just\n // what's in TokenSourceResponse depending on the implementation\n ignoreUnknownFields: true\n });\n });\n }\n}\nclass TokenSourceEndpoint extends TokenSourceCached {\n constructor(url) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n this.url = url;\n this.endpointOptions = options;\n }\n createRequestFromOptions(options) {\n var _a, _b, _c;\n const request = new TokenSourceRequest();\n for (const key of Object.keys(options)) {\n switch (key) {\n case 'roomName':\n case 'participantName':\n case 'participantIdentity':\n case 'participantMetadata':\n request[key] = options[key];\n break;\n case 'participantAttributes':\n request.participantAttributes = (_a = options.participantAttributes) !== null && _a !== void 0 ? _a : {};\n break;\n case 'agentName':\n request.roomConfig = (_b = request.roomConfig) !== null && _b !== void 0 ? _b : new RoomConfiguration();\n if (request.roomConfig.agents.length === 0) {\n request.roomConfig.agents.push(new RoomAgentDispatch());\n }\n request.roomConfig.agents[0].agentName = options.agentName;\n break;\n case 'agentMetadata':\n request.roomConfig = (_c = request.roomConfig) !== null && _c !== void 0 ? _c : new RoomConfiguration();\n if (request.roomConfig.agents.length === 0) {\n request.roomConfig.agents.push(new RoomAgentDispatch());\n }\n request.roomConfig.agents[0].metadata = options.agentMetadata;\n break;\n default:\n // ref: https://stackoverflow.com/a/58009992\n const exhaustiveCheckedKey = key;\n throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being included in forming request!\"));\n }\n }\n return request;\n }\n update(options) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const request = this.createRequestFromOptions(options);\n const response = yield fetch(this.url, Object.assign(Object.assign({}, this.endpointOptions), {\n method: (_a = this.endpointOptions.method) !== null && _a !== void 0 ? _a : 'POST',\n headers: Object.assign({\n 'Content-Type': 'application/json'\n }, this.endpointOptions.headers),\n body: request.toJsonString({\n useProtoFieldName: true\n })\n }));\n if (!response.ok) {\n throw new Error(\"Error generating token from endpoint \".concat(this.url, \": received \").concat(response.status, \" / \").concat(yield response.text()));\n }\n const body = yield response.json();\n return TokenSourceResponse.fromJson(body, {\n // NOTE: it could be possible that the response body could contain more fields than just\n // what's in TokenSourceResponse depending on the implementation (ie, SandboxTokenServer)\n ignoreUnknownFields: true\n });\n });\n }\n}\nclass TokenSourceSandboxTokenServer extends TokenSourceEndpoint {\n constructor(sandboxId, options) {\n const _options$baseUrl = options.baseUrl,\n baseUrl = _options$baseUrl === void 0 ? 'https://cloud-api.livekit.io' : _options$baseUrl,\n rest = __rest(options, [\"baseUrl\"]);\n super(\"\".concat(baseUrl, \"/api/v2/sandbox/connection-details\"), Object.assign(Object.assign({}, rest), {\n headers: {\n 'X-Sandbox-ID': sandboxId\n }\n }));\n }\n}\nconst TokenSource = {\n /** TokenSource.literal contains a single, literal set of {@link TokenSourceResponseObject}\n * credentials, either provided directly or returned from a provided function. */\n literal(literalOrFn) {\n return new TokenSourceLiteral(literalOrFn);\n },\n /**\n * TokenSource.custom allows a user to define a manual function which generates new\n * {@link TokenSourceResponseObject} values on demand.\n *\n * Use this to get credentials from custom backends / etc.\n */\n custom(customFn) {\n return new TokenSourceCustom(customFn);\n },\n /**\n * TokenSource.endpoint creates a token source that fetches credentials from a given URL using\n * the standard endpoint format:\n * @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server\n */\n endpoint(url) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new TokenSourceEndpoint(url, options);\n },\n /**\n * TokenSource.sandboxTokenServer queries a sandbox token server for credentials,\n * which supports quick prototyping / getting started types of use cases.\n *\n * This token provider is INSECURE and should NOT be used in production.\n *\n * For more info:\n * @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server\n */\n sandboxTokenServer(sandboxId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new TokenSourceSandboxTokenServer(sandboxId, options);\n }\n};/**\n * Try to analyze the local track to determine the facing mode of a track.\n *\n * @remarks\n * There is no property supported by all browsers to detect whether a video track originated from a user- or environment-facing camera device.\n * For this reason, we use the `facingMode` property when available, but will fall back on a string-based analysis of the device label to determine the facing mode.\n * If both methods fail, the default facing mode will be used.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/facingMode | MDN docs on facingMode}\n * @experimental\n */\nfunction facingModeFromLocalTrack(localTrack) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _a;\n const track = isLocalTrack(localTrack) ? localTrack.mediaStreamTrack : localTrack;\n const trackSettings = track.getSettings();\n let result = {\n facingMode: (_a = options.defaultFacingMode) !== null && _a !== void 0 ? _a : 'user',\n confidence: 'low'\n };\n // 1. Try to get facingMode from track settings.\n if ('facingMode' in trackSettings) {\n const rawFacingMode = trackSettings.facingMode;\n livekitLogger.trace('rawFacingMode', {\n rawFacingMode\n });\n if (rawFacingMode && typeof rawFacingMode === 'string' && isFacingModeValue(rawFacingMode)) {\n result = {\n facingMode: rawFacingMode,\n confidence: 'high'\n };\n }\n }\n // 2. If we don't have a high confidence we try to get the facing mode from the device label.\n if (['low', 'medium'].includes(result.confidence)) {\n livekitLogger.trace(\"Try to get facing mode from device label: (\".concat(track.label, \")\"));\n const labelAnalysisResult = facingModeFromDeviceLabel(track.label);\n if (labelAnalysisResult !== undefined) {\n result = labelAnalysisResult;\n }\n }\n return result;\n}\nconst knownDeviceLabels = new Map([['obs virtual camera', {\n facingMode: 'environment',\n confidence: 'medium'\n}]]);\nconst knownDeviceLabelSections = new Map([['iphone', {\n facingMode: 'environment',\n confidence: 'medium'\n}], ['ipad', {\n facingMode: 'environment',\n confidence: 'medium'\n}]]);\n/**\n * Attempt to analyze the device label to determine the facing mode.\n *\n * @experimental\n */\nfunction facingModeFromDeviceLabel(deviceLabel) {\n var _a;\n const label = deviceLabel.trim().toLowerCase();\n // Empty string is a valid device label but we can't infer anything from it.\n if (label === '') {\n return undefined;\n }\n // Can we match against widely known device labels.\n if (knownDeviceLabels.has(label)) {\n return knownDeviceLabels.get(label);\n }\n // Can we match against sections of the device label.\n return (_a = Array.from(knownDeviceLabelSections.entries()).find(_ref => {\n let _ref2 = _slicedToArray(_ref, 1),\n section = _ref2[0];\n return label.includes(section);\n })) === null || _a === void 0 ? void 0 : _a[1];\n}\nfunction isFacingModeValue(item) {\n const allowedValues = ['user', 'environment', 'left', 'right'];\n return item === undefined || allowedValues.includes(item);\n}const SerializerSymbol = Symbol.for('lk.serializer');\nfunction isSerializer(v) {\n return typeof v === 'object' && v !== null && 'symbol' in v && v.symbol === SerializerSymbol;\n}\n/** @internal */\nfunction base(params) {\n return Object.assign(Object.assign({}, params), {\n symbol: SerializerSymbol\n });\n}\n/**\n * JSON serializer — `JSON.parse` on the way in, `JSON.stringify` on the way out.\n * Defaults to `any` so individual handlers can annotate their own payload types.\n */\nfunction json() {\n return base({\n parse: rawString => JSON.parse(rawString),\n serialize: val => JSON.stringify(val)\n });\n}\n/** Raw string serializer — passes payloads through as plain strings with no encoding. */\nfunction raw() {\n return base({\n parse: rawString => rawString,\n serialize: val => val\n });\n}\n/** Custom serializer - allows custom defined parse and serialize functions */\nfunction custom(params) {\n return base(params);\n}\n/**\n * Serializer helpers for message payload encoding.\n *\n * @example\n * ```ts\n * const a = serializers.raw(); // Serializer<string, string>\n * const b = serializer.json<{ foo: string }, { bar: string }>(); // Serializer<{ foo: string }, { bar: string }>\n * ```\n *\n * @beta\n */\nconst serializers = {\n json,\n raw,\n custom\n};export{AudioPresets,BackupCodecPolicy,BaseKeyProvider,CLIENT_PROTOCOL_DATA_STREAM_RPC,CLIENT_PROTOCOL_DEFAULT,CheckStatus,Checker,ConnectionCheck,ConnectionError,ConnectionErrorReason,ConnectionQuality,ConnectionState,CriticalTimers,CryptorError,CryptorErrorReason,CryptorEvent,DataPacket_Kind,DataStreamError,DataStreamErrorReason,DataTrackPacket,DefaultReconnectPolicy,DeviceUnsupportedError,DisconnectReason,EncryptionEvent,Encryption_Type,EngineEvent,ExternalE2EEKeyProvider,KeyHandlerEvent,KeyProviderEvent,LivekitError,LivekitReasonedError,LocalAudioTrack,LocalDataTrack,LocalParticipant,LocalTrack,LocalTrackPublication,LocalTrackRecorder,LocalVideoTrack,LogLevel,LoggerNames,MediaDeviceFailure,_ as Mutex,NegotiationError,PacketTrailerManager,Participant,ParticipantEvent,ParticipantInfo_Kind as ParticipantKind,PublishDataError,PublishTrackError,RemoteAudioTrack,RemoteDataTrack,RemoteParticipant,RemoteTrack,RemoteTrackPublication,RemoteVideoTrack,Room,RoomEvent,RpcError,ScreenSharePresets,SignalReconnectError,SignalRequestError,SimulatedError,SubscriptionError,TokenSource,TokenSourceConfigurable,TokenSourceFixed,Track,TrackEvent,TrackInvalidError,TrackPublication,TrackType,UnexpectedConnectionState,UnsupportedServer,VideoPreset,VideoPresets,VideoPresets43,VideoQuality,areTokenSourceFetchOptionsEqual,asEncryptablePacket,attachToElement,attributeTypings as attributes,audioCodecs,clientProtocol,compareVersions,createAudioAnalyser,createE2EEKey,createKeyMaterialFromBuffer,createKeyMaterialFromString,createLocalAudioTrack,createLocalScreenTracks,createLocalTracks,createLocalVideoTrack,decodeTokenPayload,deriveKeys,detachTrack,facingModeFromDeviceLabel,facingModeFromLocalTrack,getBrowser,getEmptyAudioStreamTrack,getEmptyVideoStreamTrack,getLogger,importKey,isAudioCodec,isAudioTrack,isBackupCodec,isBackupVideoCodec,isBrowserSupported,isE2EESupported,isInsertableStreamSupported,isLocalParticipant,isLocalTrack,isRemoteParticipant,isRemoteTrack,isScriptTransformSupported,isSerializer,isVideoCodec,isVideoFrame,isVideoTrack,needsRbspUnescaping,parseRbsp,protocolVersion,ratchet,serializers,setLogExtension,setLogLevel,supportsAV1,supportsAdaptiveStream,supportsAudioOutputSelection,supportsDynacast,supportsVP9,version,videoCodecs,writeRbsp};//# sourceMappingURL=livekit-client.esm.mjs.map\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for(\"Symbol.\" + name);\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\nvar __forAwait = (obj, it, method) => (it = obj[__knownSymbol(\"asyncIterator\")]) ? it.call(obj) : (obj = obj[__knownSymbol(\"iterator\")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method(\"next\"), method(\"return\"), it);\n\n// src/constants.ts\nvar cssPrefix = \"lk\";\n\n// src/track-reference/track-reference.types.ts\nfunction isTrackReference(trackReference) {\n if (typeof trackReference === \"undefined\") {\n return false;\n }\n return isTrackReferenceSubscribed(trackReference) || isTrackReferencePublished(trackReference);\n}\nfunction isTrackReferenceSubscribed(trackReference) {\n var _a;\n if (!trackReference) {\n return false;\n }\n return trackReference.hasOwnProperty(\"participant\") && trackReference.hasOwnProperty(\"source\") && trackReference.hasOwnProperty(\"track\") && typeof ((_a = trackReference.publication) == null ? void 0 : _a.track) !== \"undefined\";\n}\nfunction isTrackReferencePublished(trackReference) {\n if (!trackReference) {\n return false;\n }\n return trackReference.hasOwnProperty(\"participant\") && trackReference.hasOwnProperty(\"source\") && trackReference.hasOwnProperty(\"publication\") && typeof trackReference.publication !== \"undefined\";\n}\nfunction isTrackReferencePlaceholder(trackReference) {\n if (!trackReference) {\n return false;\n }\n return trackReference.hasOwnProperty(\"participant\") && trackReference.hasOwnProperty(\"source\") && typeof trackReference.publication === \"undefined\";\n}\n\n// src/track-reference/track-reference.utils.ts\nfunction getTrackReferenceId(trackReference) {\n if (typeof trackReference === \"string\" || typeof trackReference === \"number\") {\n return `${trackReference}`;\n } else if (isTrackReferencePlaceholder(trackReference)) {\n return `${trackReference.participant.identity}_${trackReference.source}_placeholder`;\n } else if (isTrackReference(trackReference)) {\n return `${trackReference.participant.identity}_${trackReference.publication.source}_${trackReference.publication.trackSid}`;\n } else {\n throw new Error(`Can't generate a id for the given track reference: ${trackReference}`);\n }\n}\nfunction getTrackReferenceSource(trackReference) {\n if (isTrackReference(trackReference)) {\n return trackReference.publication.source;\n } else {\n return trackReference.source;\n }\n}\nfunction isEqualTrackRef(a, b) {\n if (a === void 0 || b === void 0) {\n return false;\n }\n if (isTrackReference(a) && isTrackReference(b)) {\n return a.publication.trackSid === b.publication.trackSid;\n } else {\n return getTrackReferenceId(a) === getTrackReferenceId(b);\n }\n}\nfunction isTrackReferencePinned(trackReference, pinState) {\n if (typeof pinState === \"undefined\") {\n return false;\n }\n if (isTrackReference(trackReference)) {\n return pinState.some(\n (pinnedTrackReference) => pinnedTrackReference.participant.identity === trackReference.participant.identity && isTrackReference(pinnedTrackReference) && pinnedTrackReference.publication.trackSid === trackReference.publication.trackSid\n );\n } else if (isTrackReferencePlaceholder(trackReference)) {\n return pinState.some(\n (pinnedTrackReference) => pinnedTrackReference.participant.identity === trackReference.participant.identity && isTrackReferencePlaceholder(pinnedTrackReference) && pinnedTrackReference.source === trackReference.source\n );\n } else {\n return false;\n }\n}\nfunction isPlaceholderReplacement(currentTrackRef, nextTrackRef) {\n return isTrackReferencePlaceholder(currentTrackRef) && isTrackReference(nextTrackRef) && nextTrackRef.participant.identity === currentTrackRef.participant.identity && nextTrackRef.source === currentTrackRef.source;\n}\n\n// src/utils.ts\nfunction isLocal(p) {\n return p.isLocal;\n}\nfunction isRemote(p) {\n return !p.isLocal;\n}\nvar attachIfSubscribed = (publication, element) => {\n if (!publication) return;\n const { isSubscribed, track } = publication;\n if (element && track) {\n if (isSubscribed) {\n track.attach(element);\n } else {\n track.detach(element);\n }\n }\n};\nfunction isParticipantTrackReferencePinned(trackRef, pinState) {\n if (pinState === void 0) {\n return false;\n }\n return pinState.some((pinnedTrackRef) => isEqualTrackRef(pinnedTrackRef, trackRef));\n}\nfunction getScrollBarWidth() {\n const inner = document.createElement(\"p\");\n inner.style.width = \"100%\";\n inner.style.height = \"200px\";\n const outer = document.createElement(\"div\");\n outer.style.position = \"absolute\";\n outer.style.top = \"0px\";\n outer.style.left = \"0px\";\n outer.style.visibility = \"hidden\";\n outer.style.width = \"200px\";\n outer.style.height = \"150px\";\n outer.style.overflow = \"hidden\";\n outer.appendChild(inner);\n document.body.appendChild(outer);\n const w1 = inner.offsetWidth;\n outer.style.overflow = \"scroll\";\n let w2 = inner.offsetWidth;\n if (w1 === w2) {\n w2 = outer.clientWidth;\n }\n document.body.removeChild(outer);\n const scrollBarWidth = w1 - w2;\n return scrollBarWidth;\n}\n\n// src/helper/detectMobileBrowser.ts\nfunction isWeb() {\n return typeof document !== \"undefined\";\n}\nfunction isMobileBrowser() {\n return isWeb() ? /Mobi/i.test(window.navigator.userAgent) : false;\n}\n\n// src/helper/url-regex.ts\nfunction createUrlRegExp(options) {\n options = __spreadValues({}, options);\n const protocol = `(?:(?:[a-z]+:)?//)?`;\n const auth = \"(?:\\\\S+(?::\\\\S*)?@)?\";\n const ip = new RegExp(\n \"(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}\",\n \"g\"\n ).source;\n const host = \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\";\n const domain = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\";\n const tld = `(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\\\\.?`;\n const port = \"(?::\\\\d{2,5})?\";\n const path = '(?:[/?#][^\\\\s\"]*)?';\n const regex2 = `(?:${protocol}|www\\\\.)${auth}(?:localhost|${ip}|${host}${domain}${tld})${port}${path}`;\n return options.exact ? new RegExp(`(?:^${regex2}$)`, \"i\") : new RegExp(regex2, \"ig\");\n}\n\n// src/helper/emailRegex.ts\nvar regex = \"[^\\\\.\\\\s@:](?:[^\\\\s@:]*[^\\\\s@:\\\\.])?@[^\\\\.\\\\s@]+(?:\\\\.[^\\\\.\\\\s@]+)*\";\nfunction createEmailRegExp({ exact } = {}) {\n return exact ? new RegExp(`^${regex}$`) : new RegExp(regex, \"g\");\n}\n\n// src/helper/floating-menu.ts\nimport { autoUpdate, computePosition, flip, offset, shift } from \"@floating-ui/dom\";\nfunction computeMenuPosition(button, menu, onUpdate) {\n const cleanup = autoUpdate(button, menu, () => __async(this, null, function* () {\n const { x, y } = yield computePosition(button, menu, {\n placement: \"top\",\n middleware: [offset(6), flip(), shift({ padding: 5 })]\n });\n onUpdate == null ? void 0 : onUpdate(x, y);\n }));\n return cleanup;\n}\nfunction wasClickOutside(insideElement, event) {\n const isOutside = !insideElement.contains(event.target);\n return isOutside;\n}\n\n// src/helper/tokenizer.ts\nvar createDefaultGrammar = () => {\n return {\n email: createEmailRegExp(),\n url: createUrlRegExp({})\n };\n};\nfunction tokenize(input, grammar) {\n const matches = Object.entries(grammar).map(\n ([type, rx], weight) => Array.from(input.matchAll(rx)).map(({ index, 0: content }) => ({\n type,\n weight,\n content,\n index: index != null ? index : 0\n }))\n ).flat().sort((a, b) => {\n const d = a.index - b.index;\n return d !== 0 ? d : a.weight - b.weight;\n }).filter(({ index }, i, arr) => {\n if (i === 0) return true;\n const prev = arr[i - 1];\n return prev.index + prev.content.length <= index;\n });\n const tokens = [];\n let pos = 0;\n for (const { type, content, index } of matches) {\n if (index > pos) tokens.push(input.substring(pos, index));\n tokens.push({ type, content });\n pos = index + content.length;\n }\n if (input.length > pos) tokens.push(input.substring(pos));\n return tokens;\n}\n\n// src/helper/eventGroups.ts\nimport { ParticipantEvent, RoomEvent } from \"livekit-client\";\nvar allRemoteParticipantRoomEvents = [\n RoomEvent.ConnectionStateChanged,\n RoomEvent.RoomMetadataChanged,\n RoomEvent.ActiveSpeakersChanged,\n RoomEvent.ConnectionQualityChanged,\n RoomEvent.ParticipantConnected,\n RoomEvent.ParticipantDisconnected,\n RoomEvent.ParticipantPermissionsChanged,\n RoomEvent.ParticipantMetadataChanged,\n RoomEvent.ParticipantNameChanged,\n RoomEvent.ParticipantAttributesChanged,\n RoomEvent.TrackMuted,\n RoomEvent.TrackUnmuted,\n RoomEvent.TrackPublished,\n RoomEvent.TrackUnpublished,\n RoomEvent.TrackStreamStateChanged,\n RoomEvent.TrackSubscriptionFailed,\n RoomEvent.TrackSubscriptionPermissionChanged,\n RoomEvent.TrackSubscriptionStatusChanged\n];\nvar allParticipantRoomEvents = [\n ...allRemoteParticipantRoomEvents,\n RoomEvent.LocalTrackPublished,\n RoomEvent.LocalTrackUnpublished\n];\nvar participantTrackEvents = [\n ParticipantEvent.TrackPublished,\n ParticipantEvent.TrackUnpublished,\n ParticipantEvent.TrackMuted,\n ParticipantEvent.TrackUnmuted,\n ParticipantEvent.TrackStreamStateChanged,\n ParticipantEvent.TrackSubscribed,\n ParticipantEvent.TrackUnsubscribed,\n ParticipantEvent.TrackSubscriptionPermissionChanged,\n ParticipantEvent.TrackSubscriptionFailed,\n ParticipantEvent.LocalTrackPublished,\n ParticipantEvent.LocalTrackUnpublished\n];\nvar allRemoteParticipantEvents = [\n ParticipantEvent.ConnectionQualityChanged,\n ParticipantEvent.IsSpeakingChanged,\n ParticipantEvent.ParticipantMetadataChanged,\n ParticipantEvent.ParticipantPermissionsChanged,\n ParticipantEvent.TrackMuted,\n ParticipantEvent.TrackUnmuted,\n ParticipantEvent.TrackPublished,\n ParticipantEvent.TrackUnpublished,\n ParticipantEvent.TrackStreamStateChanged,\n ParticipantEvent.TrackSubscriptionFailed,\n ParticipantEvent.TrackSubscriptionPermissionChanged,\n ParticipantEvent.TrackSubscriptionStatusChanged\n];\nvar allParticipantEvents = [\n ...allRemoteParticipantEvents,\n ParticipantEvent.LocalTrackPublished,\n ParticipantEvent.LocalTrackUnpublished\n];\n\n// src/logger.ts\nimport {\n setLogLevel as setClientSdkLogLevel,\n setLogExtension as setClientSdkLogExtension,\n LogLevel as LogLevelEnum\n} from \"livekit-client\";\nimport loglevel from \"loglevel\";\nvar log = loglevel.getLogger(\"lk-components-js\");\nlog.setDefaultLevel(\"WARN\");\nfunction setLogLevel(level, options = {}) {\n var _a;\n log.setLevel(level);\n setClientSdkLogLevel((_a = options.liveKitClientLogLevel) != null ? _a : level);\n}\nfunction setLogExtension(extension, options = {}) {\n var _a;\n const originalFactory = log.methodFactory;\n log.methodFactory = (methodName, configLevel, loggerName) => {\n const rawMethod = originalFactory(methodName, configLevel, loggerName);\n const logLevel = LogLevelEnum[methodName];\n const needLog = logLevel >= configLevel && logLevel < LogLevelEnum.silent;\n return (msg, context) => {\n if (context) rawMethod(msg, context);\n else rawMethod(msg);\n if (needLog) {\n extension(logLevel, msg, context);\n }\n };\n };\n log.setLevel(log.getLevel());\n setClientSdkLogExtension((_a = options.liveKitClientLogExtension) != null ? _a : extension);\n}\n\n// src/helper/grid-layouts.ts\nvar GRID_LAYOUTS = [\n {\n columns: 1,\n rows: 1\n },\n {\n columns: 1,\n rows: 2,\n orientation: \"portrait\"\n },\n {\n columns: 2,\n rows: 1,\n orientation: \"landscape\"\n },\n {\n columns: 2,\n rows: 2,\n minWidth: 560\n },\n {\n columns: 3,\n rows: 3,\n minWidth: 700\n },\n {\n columns: 4,\n rows: 4,\n minWidth: 960\n },\n {\n columns: 5,\n rows: 5,\n minWidth: 1100\n }\n];\nfunction selectGridLayout(layoutDefinitions, participantCount, width, height) {\n if (layoutDefinitions.length < 1) {\n throw new Error(\"At least one grid layout definition must be provided.\");\n }\n const layouts = expandAndSortLayoutDefinitions(layoutDefinitions);\n if (width <= 0 || height <= 0) {\n return layouts[0];\n }\n let currentLayoutIndex = 0;\n const containerOrientation = width / height > 1 ? \"landscape\" : \"portrait\";\n let layout = layouts.find((layout_, index, allLayouts) => {\n currentLayoutIndex = index;\n const isBiggerLayoutAvailable = allLayouts.findIndex((l, i) => {\n const fitsOrientation = !l.orientation || l.orientation === containerOrientation;\n const layoutIsBiggerThanCurrent = i > index;\n const layoutFitsSameAmountOfParticipants = l.maxTiles === layout_.maxTiles;\n return layoutIsBiggerThanCurrent && layoutFitsSameAmountOfParticipants && fitsOrientation;\n }) !== -1;\n return layout_.maxTiles >= participantCount && !isBiggerLayoutAvailable;\n });\n if (layout === void 0) {\n layout = layouts[layouts.length - 1];\n if (layout) {\n log.warn(\n `No layout found for: participantCount: ${participantCount}, width/height: ${width}/${height} fallback to biggest available layout (${layout}).`\n );\n } else {\n throw new Error(`No layout or fallback layout found.`);\n }\n }\n if (width < layout.minWidth || height < layout.minHeight) {\n if (currentLayoutIndex > 0) {\n const smallerLayout = layouts[currentLayoutIndex - 1];\n layout = selectGridLayout(\n layouts.slice(0, currentLayoutIndex),\n smallerLayout.maxTiles,\n width,\n height\n );\n }\n }\n return layout;\n}\nfunction expandAndSortLayoutDefinitions(layouts) {\n return [...layouts].map((layout) => {\n var _a, _b;\n return {\n name: `${layout.columns}x${layout.rows}`,\n columns: layout.columns,\n rows: layout.rows,\n maxTiles: layout.columns * layout.rows,\n minWidth: (_a = layout.minWidth) != null ? _a : 0,\n minHeight: (_b = layout.minHeight) != null ? _b : 0,\n orientation: layout.orientation\n };\n }).sort((a, b) => {\n if (a.maxTiles !== b.maxTiles) {\n return a.maxTiles - b.maxTiles;\n } else if (a.minWidth !== 0 || b.minWidth !== 0) {\n return a.minWidth - b.minWidth;\n } else if (a.minHeight !== 0 || b.minHeight !== 0) {\n return a.minHeight - b.minHeight;\n } else {\n return 0;\n }\n });\n}\n\n// src/helper/set-helper.ts\nfunction setDifference(setA, setB) {\n const _difference = new Set(setA);\n for (const elem of setB) {\n _difference.delete(elem);\n }\n return _difference;\n}\n\n// src/helper/featureDetection.ts\nfunction supportsScreenSharing() {\n return typeof navigator !== \"undefined\" && navigator.mediaDevices && !!navigator.mediaDevices.getDisplayMedia;\n}\n\n// src/helper/transcriptions.ts\nfunction getActiveTranscriptionSegments(segments, syncTimes, maxAge = 0) {\n return segments.filter((segment) => {\n var _a;\n const hasTrackSync = !!syncTimes.rtpTimestamp;\n const currentTrackTime = (_a = syncTimes.rtpTimestamp) != null ? _a : performance.timeOrigin + performance.now();\n const displayStartTime = hasTrackSync ? Math.max(segment.receivedAtMediaTimestamp, segment.startTime) : segment.receivedAt;\n const segmentDuration = maxAge + segment.endTime - segment.startTime;\n return currentTrackTime >= displayStartTime && currentTrackTime <= displayStartTime + segmentDuration;\n });\n}\nfunction addMediaTimestampToTranscription(segment, timestamps) {\n var _a;\n return __spreadProps(__spreadValues({}, segment), {\n receivedAtMediaTimestamp: (_a = timestamps.rtpTimestamp) != null ? _a : 0,\n receivedAt: timestamps.timestamp\n });\n}\nfunction dedupeSegments(prevSegments, newSegments, windowSize) {\n return [...prevSegments, ...newSegments].reduceRight((acc, segment) => {\n if (!acc.find((val) => val.id === segment.id)) {\n acc.unshift(segment);\n }\n return acc;\n }, []).slice(0 - windowSize);\n}\nfunction didActiveSegmentsChange(prevActive, newActive) {\n if (newActive.length !== prevActive.length) {\n return true;\n }\n return !newActive.every((newSegment) => {\n return prevActive.find(\n (prevSegment) => prevSegment.id === newSegment.id && prevSegment.text === newSegment.text && prevSegment.final === newSegment.final && prevSegment.language === newSegment.language && prevSegment.startTime === newSegment.startTime && prevSegment.endTime === newSegment.endTime\n );\n });\n}\n\n// src/helper/participant-attributes.ts\nvar ParticipantAgentAttributes = /* @__PURE__ */ ((ParticipantAgentAttributes2) => {\n ParticipantAgentAttributes2[\"AgentState\"] = \"lk.agent.state\";\n ParticipantAgentAttributes2[\"PublishOnBehalf\"] = \"lk.publish_on_behalf\";\n ParticipantAgentAttributes2[\"TranscriptionFinal\"] = \"lk.transcription_final\";\n ParticipantAgentAttributes2[\"TranscriptionSegmentId\"] = \"lk.segment_id\";\n ParticipantAgentAttributes2[\"TranscribedTrackId\"] = \"lk.transcribed_track_id\";\n return ParticipantAgentAttributes2;\n})(ParticipantAgentAttributes || {});\n\n// src/types.ts\nvar PIN_DEFAULT_STATE = [];\nvar WIDGET_DEFAULT_STATE = {\n showChat: false,\n unreadMessages: 0,\n showSettings: false\n};\nfunction isSourceWitOptions(source) {\n return typeof source === \"object\";\n}\nfunction isSourcesWithOptions(sources) {\n return Array.isArray(sources) && sources.filter(isSourceWitOptions).length > 0;\n}\n\n// src/sorting/sort-track-bundles.ts\nimport { Track as Track2 } from \"livekit-client\";\n\n// src/sorting/base-sort-functions.ts\nimport { Track } from \"livekit-client\";\nfunction sortParticipantsByAudioLevel(a, b) {\n return b.audioLevel - a.audioLevel;\n}\nfunction sortParticipantsByIsSpeaking(a, b) {\n if (a.isSpeaking === b.isSpeaking) {\n return 0;\n } else {\n return a.isSpeaking ? -1 : 1;\n }\n}\nfunction sortParticipantsByLastSpokenAT(a, b) {\n var _a, _b, _c, _d;\n if (a.lastSpokeAt !== void 0 || b.lastSpokeAt !== void 0) {\n return ((_b = (_a = b.lastSpokeAt) == null ? void 0 : _a.getTime()) != null ? _b : 0) - ((_d = (_c = a.lastSpokeAt) == null ? void 0 : _c.getTime()) != null ? _d : 0);\n } else {\n return 0;\n }\n}\nfunction sortParticipantsByJoinedAt(a, b) {\n var _a, _b, _c, _d;\n return ((_b = (_a = a.joinedAt) == null ? void 0 : _a.getTime()) != null ? _b : 0) - ((_d = (_c = b.joinedAt) == null ? void 0 : _c.getTime()) != null ? _d : 0);\n}\nfunction sortTrackReferencesByType(a, b) {\n if (isTrackReference(a)) {\n if (isTrackReference(b)) {\n return 0;\n } else {\n return -1;\n }\n } else if (isTrackReference(b)) {\n return 1;\n } else {\n return 0;\n }\n}\nfunction sortTrackRefsByIsCameraEnabled(a, b) {\n const aVideo = a.participant.isCameraEnabled;\n const bVideo = b.participant.isCameraEnabled;\n if (aVideo !== bVideo) {\n if (aVideo) {\n return -1;\n } else {\n return 1;\n }\n } else {\n return 0;\n }\n}\n\n// src/sorting/sort-track-bundles.ts\nfunction sortTrackReferences(tracks) {\n const localTracks = [];\n const screenShareTracks = [];\n const cameraTracks = [];\n const undefinedTracks = [];\n tracks.forEach((trackRef) => {\n if (trackRef.participant.isLocal && trackRef.source === Track2.Source.Camera) {\n localTracks.push(trackRef);\n } else if (trackRef.source === Track2.Source.ScreenShare) {\n screenShareTracks.push(trackRef);\n } else if (trackRef.source === Track2.Source.Camera) {\n cameraTracks.push(trackRef);\n } else {\n undefinedTracks.push(trackRef);\n }\n });\n const sortedScreenShareTracks = sortScreenShareTracks(screenShareTracks);\n const sortedCameraTracks = sortCameraTracks(cameraTracks);\n return [...localTracks, ...sortedScreenShareTracks, ...sortedCameraTracks, ...undefinedTracks];\n}\nfunction sortScreenShareTracks(screenShareTracks) {\n const localScreenShares = [];\n const remoteScreenShares = [];\n screenShareTracks.forEach((trackRef) => {\n if (trackRef.participant.isLocal) {\n localScreenShares.push(trackRef);\n } else {\n remoteScreenShares.push(trackRef);\n }\n });\n localScreenShares.sort((a, b) => sortParticipantsByJoinedAt(a.participant, b.participant));\n remoteScreenShares.sort((a, b) => sortParticipantsByJoinedAt(a.participant, b.participant));\n const sortedScreenShareTrackRefs = [...remoteScreenShares, ...localScreenShares];\n return sortedScreenShareTrackRefs;\n}\nfunction sortCameraTracks(cameraTrackReferences) {\n const localCameraTracks = [];\n const remoteCameraTracks = [];\n cameraTrackReferences.forEach((trackRef) => {\n if (trackRef.participant.isLocal) {\n localCameraTracks.push(trackRef);\n } else {\n remoteCameraTracks.push(trackRef);\n }\n });\n remoteCameraTracks.sort((a, b) => {\n if (a.participant.isSpeaking && b.participant.isSpeaking) {\n return sortParticipantsByAudioLevel(a.participant, b.participant);\n }\n if (a.participant.isSpeaking !== b.participant.isSpeaking) {\n return sortParticipantsByIsSpeaking(a.participant, b.participant);\n }\n if (a.participant.lastSpokeAt !== b.participant.lastSpokeAt) {\n return sortParticipantsByLastSpokenAT(a.participant, b.participant);\n }\n if (isTrackReference(a) !== isTrackReference(b)) {\n return sortTrackReferencesByType(a, b);\n }\n if (a.participant.isCameraEnabled !== b.participant.isCameraEnabled) {\n return sortTrackRefsByIsCameraEnabled(a, b);\n }\n return sortParticipantsByJoinedAt(a.participant, b.participant);\n });\n return [...localCameraTracks, ...remoteCameraTracks];\n}\n\n// src/sorting/sort-participants.ts\nfunction sortParticipants(participants) {\n const sortedParticipants = [...participants];\n sortedParticipants.sort((a, b) => {\n if (a.isSpeaking && b.isSpeaking) {\n return sortParticipantsByAudioLevel(a, b);\n }\n if (a.isSpeaking !== b.isSpeaking) {\n return sortParticipantsByIsSpeaking(a, b);\n }\n if (a.lastSpokeAt !== b.lastSpokeAt) {\n return sortParticipantsByLastSpokenAT(a, b);\n }\n const aVideo = a.videoTrackPublications.size > 0;\n const bVideo = b.videoTrackPublications.size > 0;\n if (aVideo !== bVideo) {\n if (aVideo) {\n return -1;\n } else {\n return 1;\n }\n }\n return sortParticipantsByJoinedAt(a, b);\n });\n const localParticipant = sortedParticipants.find((p) => p.isLocal);\n if (localParticipant) {\n const localIdx = sortedParticipants.indexOf(localParticipant);\n if (localIdx >= 0) {\n sortedParticipants.splice(localIdx, 1);\n if (sortedParticipants.length > 0) {\n sortedParticipants.splice(0, 0, localParticipant);\n } else {\n sortedParticipants.push(localParticipant);\n }\n }\n }\n return sortedParticipants;\n}\n\n// src/helper/array-helper.ts\nfunction chunk(input, size) {\n return input.reduce(\n (arr, item, idx) => {\n return idx % size === 0 ? [...arr, [item]] : [...arr.slice(0, -1), [...arr.slice(-1)[0], item]];\n },\n []\n );\n}\nfunction zip(a1, a2) {\n const resultLength = Math.max(a1.length, a2.length);\n return new Array(resultLength).fill([]).map((_val, idx) => [a1[idx], a2[idx]]);\n}\nfunction differenceBy(a1, a2, by) {\n return a1.filter((c) => !a2.map((v) => by(v)).includes(by(c)));\n}\n\n// src/track-reference/test-utils.ts\nimport { Participant, RemoteTrackPublication, Track as Track3 } from \"livekit-client\";\nimport { TrackInfo } from \"@livekit/protocol\";\nfunction flatTrackReferenceArray(list) {\n return list.map((item) => {\n if (typeof item === \"string\" || typeof item === \"number\") {\n return `${item}`;\n } else {\n return getTrackReferenceId(item);\n }\n });\n}\n\n// src/sorting/tile-array-update.ts\nfunction visualPageChange(state, next) {\n return {\n dropped: differenceBy(state, next, getTrackReferenceId),\n added: differenceBy(next, state, getTrackReferenceId)\n };\n}\nfunction listNeedsUpdating(changes) {\n return changes.added.length !== 0 || changes.dropped.length !== 0;\n}\nfunction findIndex(trackReference, trackReferences) {\n const indexToReplace = trackReferences.findIndex(\n (trackReference_) => getTrackReferenceId(trackReference_) === getTrackReferenceId(trackReference)\n );\n if (indexToReplace === -1) {\n throw new Error(\n `Element not part of the array: ${getTrackReferenceId(\n trackReference\n )} not in ${flatTrackReferenceArray(trackReferences)}`\n );\n }\n return indexToReplace;\n}\nfunction swapItems(moveForward, moveBack, trackReferences) {\n const indexToReplace = findIndex(moveForward, trackReferences);\n const indexReplaceWith = findIndex(moveBack, trackReferences);\n trackReferences.splice(indexToReplace, 1, moveBack);\n trackReferences.splice(indexReplaceWith, 1, moveForward);\n return trackReferences;\n}\nfunction dropItem(itemToDrop, list) {\n const indexOfElementToDrop = findIndex(itemToDrop, list);\n list.splice(indexOfElementToDrop, 1);\n return list;\n}\nfunction addItem(itemToAdd, list) {\n return [...list, itemToAdd];\n}\nfunction divideIntoPages(list, maxElementsOnPage) {\n const pages = chunk(list, maxElementsOnPage);\n return pages;\n}\nfunction updatePages(currentList, nextList, maxItemsOnPage) {\n let updatedList = refreshList(currentList, nextList);\n if (updatedList.length < nextList.length) {\n const addedItems = differenceBy(nextList, updatedList, getTrackReferenceId);\n updatedList = [...updatedList, ...addedItems];\n }\n const currentPages = divideIntoPages(updatedList, maxItemsOnPage);\n const nextPages = divideIntoPages(nextList, maxItemsOnPage);\n zip(currentPages, nextPages).forEach(([currentPage, nextPage], pageIndex) => {\n if (currentPage && nextPage) {\n const updatedPage = divideIntoPages(updatedList, maxItemsOnPage)[pageIndex];\n const changes = visualPageChange(updatedPage, nextPage);\n if (listNeedsUpdating(changes)) {\n log.debug(\n `Detected visual changes on page: ${pageIndex}, current: ${flatTrackReferenceArray(\n currentPage\n )}, next: ${flatTrackReferenceArray(nextPage)}`,\n { changes }\n );\n if (changes.added.length === changes.dropped.length) {\n zip(changes.added, changes.dropped).forEach(([added, dropped]) => {\n if (added && dropped) {\n updatedList = swapItems(added, dropped, updatedList);\n } else {\n throw new Error(\n `For a swap action we need a addition and a removal one is missing: ${added}, ${dropped}`\n );\n }\n });\n }\n if (changes.added.length === 0 && changes.dropped.length > 0) {\n changes.dropped.forEach((item) => {\n updatedList = dropItem(item, updatedList);\n });\n }\n if (changes.added.length > 0 && changes.dropped.length === 0) {\n changes.added.forEach((item) => {\n updatedList = addItem(item, updatedList);\n });\n }\n }\n }\n });\n if (updatedList.length > nextList.length) {\n const missingItems = differenceBy(updatedList, nextList, getTrackReferenceId);\n updatedList = updatedList.filter(\n (item) => !missingItems.map(getTrackReferenceId).includes(getTrackReferenceId(item))\n );\n }\n return updatedList;\n}\nfunction refreshList(currentList, nextList) {\n return currentList.map((currentItem) => {\n const updateForCurrentItem = nextList.find(\n (newItem_) => (\n // If the IDs match or ..\n getTrackReferenceId(currentItem) === getTrackReferenceId(newItem_) || // ... if the current item is a placeholder and the new item is the track reference can replace it.\n typeof currentItem !== \"number\" && isTrackReferencePlaceholder(currentItem) && isTrackReference(newItem_) && isPlaceholderReplacement(currentItem, newItem_)\n )\n );\n return updateForCurrentItem != null ? updateForCurrentItem : currentItem;\n });\n}\n\n// src/components/mediaToggle.ts\nimport { Track as Track7 } from \"livekit-client\";\nimport { Subject, map as map4, startWith as startWith4 } from \"rxjs\";\n\n// src/observables/participant.ts\nimport {\n ParticipantEvent as ParticipantEvent2,\n RoomEvent as RoomEvent3,\n Track as Track6\n} from \"livekit-client\";\nimport { Observable as Observable2, map as map3, startWith as startWith3, switchMap } from \"rxjs\";\n\n// src/components/mediaTrack.ts\nimport { Track as Track4 } from \"livekit-client\";\nimport { map, startWith } from \"rxjs\";\n\n// src/styles-interface/class-prefixer.ts\nfunction prefixClass(unprefixedClassName) {\n return `${cssPrefix}-${unprefixedClassName}`;\n}\n\n// src/components/mediaTrack.ts\nfunction setupMediaTrack(trackIdentifier) {\n const initialPub = getTrackByIdentifier(trackIdentifier);\n const trackObserver = observeParticipantMedia(trackIdentifier.participant).pipe(\n map(() => {\n return getTrackByIdentifier(trackIdentifier);\n }),\n startWith(initialPub)\n );\n const className = prefixClass(\n trackIdentifier.source === Track4.Source.Camera || trackIdentifier.source === Track4.Source.ScreenShare ? \"participant-media-video\" : \"participant-media-audio\"\n );\n return { className, trackObserver };\n}\nfunction getTrackByIdentifier(options) {\n if (isTrackReference(options)) {\n return options.publication;\n } else {\n const { source, name, participant } = options;\n if (source && name) {\n return participant.getTrackPublications().find((pub) => pub.source === source && pub.trackName === name);\n } else if (name) {\n return participant.getTrackPublicationByName(name);\n } else if (source) {\n return participant.getTrackPublication(source);\n } else {\n throw new Error(\"At least one of source and name needs to be defined\");\n }\n }\n}\n\n// src/observables/room.ts\nimport {\n Room,\n RoomEvent as RoomEvent2,\n Track as Track5\n} from \"livekit-client\";\nimport { concat, filter, map as map2, Observable, startWith as startWith2 } from \"rxjs\";\nfunction observeRoomEvents(room, ...events) {\n const observable = new Observable((subscribe) => {\n const onRoomUpdate = () => {\n subscribe.next(room);\n };\n events.forEach((evt) => {\n room.on(evt, onRoomUpdate);\n });\n const unsubscribe = () => {\n events.forEach((evt) => {\n room.off(evt, onRoomUpdate);\n });\n };\n return unsubscribe;\n }).pipe(startWith2(room));\n return observable;\n}\nfunction roomEventSelector(room, event) {\n const observable = new Observable((subscribe) => {\n const update = (...params) => {\n subscribe.next(params);\n };\n room.on(event, update);\n const unsubscribe = () => {\n room.off(event, update);\n };\n return unsubscribe;\n });\n return observable;\n}\nfunction roomObserver(room) {\n const observable = observeRoomEvents(\n room,\n RoomEvent2.ParticipantConnected,\n RoomEvent2.ParticipantDisconnected,\n RoomEvent2.ActiveSpeakersChanged,\n RoomEvent2.TrackSubscribed,\n RoomEvent2.TrackUnsubscribed,\n RoomEvent2.LocalTrackPublished,\n RoomEvent2.LocalTrackUnpublished,\n RoomEvent2.AudioPlaybackStatusChanged,\n RoomEvent2.ConnectionStateChanged\n );\n return observable;\n}\nfunction connectionStateObserver(room) {\n return roomEventSelector(room, RoomEvent2.ConnectionStateChanged).pipe(\n map2(([connectionState]) => connectionState),\n startWith2(room.state)\n );\n}\nfunction screenShareObserver(room) {\n let screenShareSubscriber;\n const observers = [];\n const observable = new Observable((subscriber) => {\n screenShareSubscriber = subscriber;\n return () => {\n observers.forEach((observer) => {\n observer.unsubscribe();\n });\n };\n });\n const screenShareTracks = [];\n const handleSub = (publication, participant) => {\n if (publication.source !== Track5.Source.ScreenShare && publication.source !== Track5.Source.ScreenShareAudio) {\n return;\n }\n let trackMap = screenShareTracks.find((tr) => tr.participant.identity === participant.identity);\n const getScreenShareTracks = (participant2) => {\n return participant2.getTrackPublications().filter(\n (track) => (track.source === Track5.Source.ScreenShare || track.source === Track5.Source.ScreenShareAudio) && track.track\n );\n };\n if (!trackMap) {\n trackMap = {\n participant,\n tracks: getScreenShareTracks(participant)\n };\n } else {\n const index = screenShareTracks.indexOf(trackMap);\n screenShareTracks.splice(index, 1);\n trackMap.tracks = getScreenShareTracks(participant);\n }\n if (trackMap.tracks.length > 0) {\n screenShareTracks.push(trackMap);\n }\n screenShareSubscriber.next(screenShareTracks);\n };\n observers.push(\n roomEventSelector(room, RoomEvent2.TrackSubscribed).subscribe(\n ([, ...args]) => handleSub(...args)\n )\n );\n observers.push(\n roomEventSelector(room, RoomEvent2.TrackUnsubscribed).subscribe(\n ([, ...args]) => handleSub(...args)\n )\n );\n observers.push(\n roomEventSelector(room, RoomEvent2.LocalTrackPublished).subscribe((args) => handleSub(...args))\n );\n observers.push(\n roomEventSelector(room, RoomEvent2.LocalTrackUnpublished).subscribe((args) => {\n handleSub(...args);\n })\n );\n observers.push(\n roomEventSelector(room, RoomEvent2.TrackMuted).subscribe((args) => {\n handleSub(...args);\n })\n );\n observers.push(\n roomEventSelector(room, RoomEvent2.TrackUnmuted).subscribe((args) => {\n handleSub(...args);\n })\n );\n setTimeout(() => {\n for (const p of room.remoteParticipants.values()) {\n p.getTrackPublications().forEach((track) => {\n handleSub(track, p);\n });\n }\n }, 1);\n return observable;\n}\nfunction roomInfoObserver(room) {\n const observer = observeRoomEvents(\n room,\n RoomEvent2.RoomMetadataChanged,\n RoomEvent2.ConnectionStateChanged\n ).pipe(\n map2((r) => {\n return { name: r.name, metadata: r.metadata };\n })\n );\n return observer;\n}\nfunction activeSpeakerObserver(room) {\n return roomEventSelector(room, RoomEvent2.ActiveSpeakersChanged).pipe(\n map2(([speakers]) => speakers)\n );\n}\nfunction createMediaDeviceObserver(kind, onError, requestPermissions = true) {\n const initialDevices$ = new Observable((subscriber) => {\n Room.getLocalDevices(kind, requestPermissions).then((devices) => {\n subscriber.next(devices);\n subscriber.complete();\n }).catch((e) => {\n onError == null ? void 0 : onError(e);\n subscriber.next([]);\n subscriber.complete();\n });\n });\n const deviceChanges$ = new Observable((subscriber) => {\n var _a;\n const onDeviceChange = () => __async(this, null, function* () {\n try {\n const newDevices = yield Room.getLocalDevices(kind, requestPermissions);\n subscriber.next(newDevices);\n } catch (e) {\n onError == null ? void 0 : onError(e);\n }\n });\n if (typeof window !== \"undefined\") {\n if (!window.isSecureContext) {\n throw new Error(\n `Accessing media devices is available only in secure contexts (HTTPS and localhost), in some or all supporting browsers. See: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/mediaDevices`\n );\n }\n (_a = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a.addEventListener(\"devicechange\", onDeviceChange);\n }\n return () => {\n var _a2;\n (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.removeEventListener(\"devicechange\", onDeviceChange);\n };\n });\n return concat(initialDevices$, deviceChanges$);\n}\nfunction createDataObserver(room) {\n return roomEventSelector(room, RoomEvent2.DataReceived);\n}\nfunction createChatObserver(room) {\n return roomEventSelector(room, RoomEvent2.ChatMessage);\n}\nfunction roomAudioPlaybackAllowedObservable(room) {\n const observable = observeRoomEvents(room, RoomEvent2.AudioPlaybackStatusChanged).pipe(\n map2((room2) => {\n return { canPlayAudio: room2.canPlaybackAudio };\n })\n );\n return observable;\n}\nfunction roomVideoPlaybackAllowedObservable(room) {\n const observable = observeRoomEvents(room, RoomEvent2.VideoPlaybackStatusChanged).pipe(\n map2((room2) => {\n return { canPlayVideo: room2.canPlaybackVideo };\n })\n );\n return observable;\n}\nfunction createActiveDeviceObservable(room, kind) {\n return roomEventSelector(room, RoomEvent2.ActiveDeviceChanged).pipe(\n filter(([kindOfDevice]) => kindOfDevice === kind),\n map2(([kind2, deviceId]) => {\n log.debug(\"activeDeviceObservable | RoomEvent.ActiveDeviceChanged\", { kind: kind2, deviceId });\n return deviceId;\n })\n );\n}\nfunction encryptionStatusObservable(room, participant) {\n return roomEventSelector(room, RoomEvent2.ParticipantEncryptionStatusChanged).pipe(\n filter(\n ([, p]) => (participant == null ? void 0 : participant.identity) === (p == null ? void 0 : p.identity) || !p && (participant == null ? void 0 : participant.identity) === room.localParticipant.identity\n ),\n map2(([encrypted]) => encrypted),\n startWith2(\n (participant == null ? void 0 : participant.isLocal) ? participant.isE2EEEnabled : !!(participant == null ? void 0 : participant.isEncrypted)\n )\n );\n}\nfunction recordingStatusObservable(room) {\n return roomEventSelector(room, RoomEvent2.RecordingStatusChanged).pipe(\n map2(([recording]) => recording),\n startWith2(room.isRecording)\n );\n}\n\n// src/observables/participant.ts\nfunction observeParticipantEvents(participant, ...events) {\n const observable = new Observable2((subscribe) => {\n const onParticipantUpdate = () => {\n subscribe.next(participant);\n };\n events.forEach((evt) => {\n participant.on(evt, onParticipantUpdate);\n });\n const unsubscribe = () => {\n events.forEach((evt) => {\n participant.off(evt, onParticipantUpdate);\n });\n };\n return unsubscribe;\n }).pipe(startWith3(participant));\n return observable;\n}\nfunction observeParticipantMedia(participant) {\n const participantObserver = observeParticipantEvents(\n participant,\n ParticipantEvent2.TrackMuted,\n ParticipantEvent2.TrackUnmuted,\n ParticipantEvent2.ParticipantPermissionsChanged,\n // ParticipantEvent.IsSpeakingChanged,\n ParticipantEvent2.TrackPublished,\n ParticipantEvent2.TrackUnpublished,\n ParticipantEvent2.LocalTrackPublished,\n ParticipantEvent2.LocalTrackUnpublished,\n ParticipantEvent2.MediaDevicesError,\n ParticipantEvent2.TrackSubscriptionStatusChanged\n // ParticipantEvent.ConnectionQualityChanged,\n ).pipe(\n map3((p) => {\n const { isMicrophoneEnabled, isCameraEnabled, isScreenShareEnabled } = p;\n const microphoneTrack = p.getTrackPublication(Track6.Source.Microphone);\n const cameraTrack = p.getTrackPublication(Track6.Source.Camera);\n const participantMedia = {\n isCameraEnabled,\n isMicrophoneEnabled,\n isScreenShareEnabled,\n cameraTrack,\n microphoneTrack,\n participant: p\n };\n return participantMedia;\n })\n );\n return participantObserver;\n}\nfunction createTrackObserver(participant, options) {\n return observeParticipantMedia(participant).pipe(\n map3(() => {\n return { publication: getTrackByIdentifier(options) };\n })\n );\n}\nfunction participantInfoObserver(participant) {\n if (!participant) {\n return void 0;\n }\n const observer = observeParticipantEvents(\n participant,\n ParticipantEvent2.ParticipantMetadataChanged,\n ParticipantEvent2.ParticipantNameChanged\n ).pipe(\n map3(({ name, identity, metadata }) => {\n return {\n name,\n identity,\n metadata\n };\n }),\n startWith3({\n name: participant.name,\n identity: participant.identity,\n metadata: participant.metadata\n })\n );\n return observer;\n}\nfunction createConnectionQualityObserver(participant) {\n const observer = participantEventSelector(\n participant,\n ParticipantEvent2.ConnectionQualityChanged\n ).pipe(\n map3(([quality]) => quality),\n startWith3(participant.connectionQuality)\n );\n return observer;\n}\nfunction participantEventSelector(participant, event) {\n const observable = new Observable2((subscribe) => {\n const update = (...params) => {\n subscribe.next(params);\n };\n participant.on(event, update);\n const unsubscribe = () => {\n participant.off(event, update);\n };\n return unsubscribe;\n });\n return observable;\n}\nfunction mutedObserver(trackRef) {\n var _a, _b, _c, _d;\n return observeParticipantEvents(\n trackRef.participant,\n ParticipantEvent2.TrackMuted,\n ParticipantEvent2.TrackUnmuted,\n ParticipantEvent2.TrackSubscribed,\n ParticipantEvent2.TrackUnsubscribed,\n ParticipantEvent2.LocalTrackPublished,\n ParticipantEvent2.LocalTrackUnpublished\n ).pipe(\n map3((participant) => {\n var _a2, _b2;\n const pub = (_a2 = trackRef.publication) != null ? _a2 : participant.getTrackPublication(trackRef.source);\n return (_b2 = pub == null ? void 0 : pub.isMuted) != null ? _b2 : true;\n }),\n startWith3(\n (_d = (_c = (_a = trackRef.publication) == null ? void 0 : _a.isMuted) != null ? _c : (_b = trackRef.participant.getTrackPublication(trackRef.source)) == null ? void 0 : _b.isMuted) != null ? _d : true\n )\n );\n}\nfunction createIsSpeakingObserver(participant) {\n return participantEventSelector(participant, ParticipantEvent2.IsSpeakingChanged).pipe(\n map3(([isSpeaking]) => isSpeaking)\n );\n}\nfunction connectedParticipantsObserver(room, options = {}) {\n var _a;\n let subscriber;\n const observable = new Observable2((sub) => {\n subscriber = sub;\n return () => listener.unsubscribe();\n }).pipe(startWith3(Array.from(room.remoteParticipants.values())));\n const additionalRoomEvents = (_a = options.additionalRoomEvents) != null ? _a : allParticipantRoomEvents;\n const roomEvents = Array.from(\n /* @__PURE__ */ new Set([\n RoomEvent3.ParticipantConnected,\n RoomEvent3.ParticipantDisconnected,\n RoomEvent3.ConnectionStateChanged,\n ...additionalRoomEvents\n ])\n );\n const listener = observeRoomEvents(room, ...roomEvents).subscribe(\n (r) => subscriber == null ? void 0 : subscriber.next(Array.from(r.remoteParticipants.values()))\n );\n if (room.remoteParticipants.size > 0) {\n subscriber == null ? void 0 : subscriber.next(Array.from(room.remoteParticipants.values()));\n }\n return observable;\n}\nfunction connectedParticipantObserver(room, identity, options = {}) {\n var _a;\n const additionalEvents = (_a = options.additionalEvents) != null ? _a : allParticipantEvents;\n const observable = observeRoomEvents(\n room,\n RoomEvent3.ParticipantConnected,\n RoomEvent3.ParticipantDisconnected,\n RoomEvent3.ConnectionStateChanged\n ).pipe(\n switchMap((r) => {\n const participant = r.getParticipantByIdentity(identity);\n if (participant) {\n return observeParticipantEvents(participant, ...additionalEvents);\n } else {\n return new Observable2((subscribe) => subscribe.next(void 0));\n }\n }),\n startWith3(room.getParticipantByIdentity(identity))\n );\n return observable;\n}\nfunction participantPermissionObserver(participant) {\n const observer = participantEventSelector(\n participant,\n ParticipantEvent2.ParticipantPermissionsChanged\n ).pipe(\n map3(() => participant.permissions),\n startWith3(participant.permissions)\n );\n return observer;\n}\nfunction participantByIdentifierObserver(room, { kind, identity }, options = {}) {\n var _a;\n const additionalEvents = (_a = options.additionalEvents) != null ? _a : allParticipantEvents;\n const matchesIdentifier = (participant) => {\n let isMatch = true;\n if (kind) {\n isMatch = isMatch && participant.kind === kind;\n }\n if (identity) {\n isMatch = isMatch && participant.identity === identity;\n }\n return isMatch;\n };\n const observable = observeRoomEvents(\n room,\n RoomEvent3.ParticipantConnected,\n RoomEvent3.ParticipantDisconnected,\n RoomEvent3.ConnectionStateChanged\n ).pipe(\n switchMap((r) => {\n const participant = Array.from(r.remoteParticipants.values()).find(\n (p) => matchesIdentifier(p)\n );\n if (participant) {\n return observeParticipantEvents(participant, ...additionalEvents);\n } else {\n return new Observable2((subscribe) => subscribe.next(void 0));\n }\n }),\n startWith3(Array.from(room.remoteParticipants.values()).find((p) => matchesIdentifier(p)))\n );\n return observable;\n}\nfunction participantAttributesObserver(participant) {\n if (typeof participant === \"undefined\") {\n return new Observable2();\n }\n return participantEventSelector(participant, ParticipantEvent2.AttributesChanged).pipe(\n map3(([changedAttributes]) => {\n return {\n changed: changedAttributes,\n attributes: participant.attributes\n };\n }),\n startWith3({ changed: participant.attributes, attributes: participant.attributes })\n );\n}\n\n// src/components/mediaToggle.ts\nfunction setupMediaToggle(source, room, options, publishOptions, onError) {\n const { localParticipant } = room;\n const getSourceEnabled = (source2, localParticipant2) => {\n let isEnabled = false;\n switch (source2) {\n case Track7.Source.Camera:\n isEnabled = localParticipant2.isCameraEnabled;\n break;\n case Track7.Source.Microphone:\n isEnabled = localParticipant2.isMicrophoneEnabled;\n break;\n case Track7.Source.ScreenShare:\n isEnabled = localParticipant2.isScreenShareEnabled;\n break;\n default:\n break;\n }\n return isEnabled;\n };\n const enabledObserver = observeParticipantMedia(localParticipant).pipe(\n map4((media) => {\n return getSourceEnabled(source, media.participant);\n }),\n startWith4(getSourceEnabled(source, localParticipant))\n );\n const pendingSubject = new Subject();\n const toggle = (forceState, captureOptions) => __async(this, null, function* () {\n try {\n captureOptions != null ? captureOptions : captureOptions = options;\n pendingSubject.next(true);\n switch (source) {\n case Track7.Source.Camera:\n yield localParticipant.setCameraEnabled(\n forceState != null ? forceState : !localParticipant.isCameraEnabled,\n captureOptions,\n publishOptions\n );\n return localParticipant.isCameraEnabled;\n case Track7.Source.Microphone:\n yield localParticipant.setMicrophoneEnabled(\n forceState != null ? forceState : !localParticipant.isMicrophoneEnabled,\n captureOptions,\n publishOptions\n );\n return localParticipant.isMicrophoneEnabled;\n case Track7.Source.ScreenShare:\n yield localParticipant.setScreenShareEnabled(\n forceState != null ? forceState : !localParticipant.isScreenShareEnabled,\n captureOptions,\n publishOptions\n );\n return localParticipant.isScreenShareEnabled;\n default:\n throw new TypeError(\"Tried to toggle unsupported source\");\n }\n } catch (e) {\n if (onError && e instanceof Error) {\n onError == null ? void 0 : onError(e);\n return void 0;\n } else {\n throw e;\n }\n } finally {\n pendingSubject.next(false);\n }\n });\n const className = prefixClass(\"button\");\n return {\n className,\n toggle,\n enabledObserver,\n pendingObserver: pendingSubject.asObservable()\n };\n}\nfunction setupManualToggle() {\n let state = false;\n const enabledSubject = new Subject();\n const pendingSubject = new Subject();\n const toggle = (forceState) => __async(this, null, function* () {\n pendingSubject.next(true);\n state = forceState != null ? forceState : !state;\n enabledSubject.next(state);\n pendingSubject.next(false);\n });\n const className = prefixClass(\"button\");\n return {\n className,\n toggle,\n enabledObserver: enabledSubject.asObservable(),\n pendingObserver: pendingSubject.asObservable()\n };\n}\n\n// src/components/mediaDeviceSelect.ts\nimport {\n Track as Track8,\n getBrowser\n} from \"livekit-client\";\nimport { BehaviorSubject } from \"rxjs\";\nfunction setupDeviceSelector(kind, room, localTrack) {\n const activeDeviceSubject = new BehaviorSubject(void 0);\n const activeDeviceObservable = createActiveDeviceObservable(room, kind);\n const setActiveMediaDevice = (_0, ..._1) => __async(this, [_0, ..._1], function* (id, options = {}) {\n var _a, _b, _c;\n if (localTrack) {\n yield localTrack.setDeviceId(options.exact ? { exact: id } : id);\n const actualId = yield localTrack.getDeviceId(false);\n activeDeviceSubject.next(\n id === \"default\" && localTrack.mediaStreamTrack.label.startsWith(\"Default\") ? id : actualId\n );\n } else if (room) {\n const browser = getBrowser();\n if (kind === \"audiooutput\" && ((browser == null ? void 0 : browser.name) === \"Safari\" || (browser == null ? void 0 : browser.os) === \"iOS\")) {\n log.warn(`Switching audio output device is not supported on Safari and iOS.`);\n return;\n }\n log.debug(`Switching active device of kind \"${kind}\" with id ${id}.`);\n yield room.switchActiveDevice(kind, id, options.exact);\n const actualDeviceId = (_a = room.getActiveDevice(kind)) != null ? _a : id;\n if (actualDeviceId !== id && id !== \"default\") {\n log.info(\n `We tried to select the device with id (${id}), but the browser decided to select the device with id (${actualDeviceId}) instead.`\n );\n }\n let targetTrack = void 0;\n if (kind === \"audioinput\")\n targetTrack = (_b = room.localParticipant.getTrackPublication(Track8.Source.Microphone)) == null ? void 0 : _b.track;\n else if (kind === \"videoinput\") {\n targetTrack = (_c = room.localParticipant.getTrackPublication(Track8.Source.Camera)) == null ? void 0 : _c.track;\n }\n const useDefault = id === \"default\" && !targetTrack || id === \"default\" && (targetTrack == null ? void 0 : targetTrack.mediaStreamTrack.label.startsWith(\"Default\"));\n activeDeviceSubject.next(useDefault ? id : actualDeviceId);\n }\n });\n const className = prefixClass(\"media-device-select\");\n return {\n className,\n activeDeviceObservable,\n setActiveMediaDevice\n };\n}\n\n// src/components/disconnectButton.ts\nfunction setupDisconnectButton(room) {\n const disconnect = (stopTracks) => {\n room.disconnect(stopTracks);\n };\n const className = prefixClass(\"disconnect-button\");\n return { className, disconnect };\n}\n\n// src/components/connectionQualityIndicator.ts\nfunction setupConnectionQualityIndicator(participant) {\n const className = prefixClass(\"connection-quality\");\n const connectionQualityObserver = createConnectionQualityObserver(participant);\n return { className, connectionQualityObserver };\n}\n\n// src/components/trackMutedIndicator.ts\nimport { Track as Track9 } from \"livekit-client\";\nfunction setupTrackMutedIndicator(trackRef) {\n let classForSource = \"track-muted-indicator-camera\";\n switch (trackRef.source) {\n case Track9.Source.Camera:\n classForSource = \"track-muted-indicator-camera\";\n break;\n case Track9.Source.Microphone:\n classForSource = \"track-muted-indicator-microphone\";\n break;\n default:\n break;\n }\n const className = prefixClass(classForSource);\n const mediaMutedObserver = mutedObserver(trackRef);\n return { className, mediaMutedObserver };\n}\n\n// src/components/participantName.ts\nfunction setupParticipantName(participant) {\n const infoObserver = participantInfoObserver(participant);\n return { className: \"lk-participant-name\", infoObserver };\n}\n\n// src/components/participantTile.ts\nfunction setupParticipantTile() {\n const className = prefixClass(\"participant-tile\");\n return {\n className\n };\n}\n\n// src/components/chat.ts\nimport { compareVersions, RoomEvent as RoomEvent4 } from \"livekit-client\";\nimport {\n BehaviorSubject as BehaviorSubject2,\n Subject as Subject2,\n scan,\n map as map6,\n takeUntil,\n from,\n filter as filter3,\n mergeMap,\n finalize,\n of\n} from \"rxjs\";\n\n// src/observables/dataChannel.ts\nimport { Observable as Observable3, filter as filter2, map as map5 } from \"rxjs\";\nvar DataTopic = {\n CHAT: \"lk.chat\",\n TRANSCRIPTION: \"lk.transcription\"\n};\nvar LegacyDataTopic = {\n CHAT: \"lk-chat-topic\"\n};\nfunction sendMessage(_0, _1) {\n return __async(this, arguments, function* (localParticipant, payload, options = {}) {\n const { reliable, destinationIdentities, topic } = options;\n yield localParticipant.publishData(payload, {\n destinationIdentities,\n topic,\n reliable\n });\n });\n}\nfunction setupDataMessageHandler(room, topic, onMessage) {\n const topics = Array.isArray(topic) ? topic : [topic];\n const messageObservable = createDataObserver(room).pipe(\n filter2(\n ([, , , messageTopic]) => topic === void 0 || messageTopic !== void 0 && topics.includes(messageTopic)\n ),\n map5(([payload, participant, , messageTopic]) => {\n const msg = {\n payload,\n topic: messageTopic,\n from: participant\n };\n onMessage == null ? void 0 : onMessage(msg);\n return msg;\n })\n );\n let isSendingSubscriber;\n const isSendingObservable = new Observable3((subscriber) => {\n isSendingSubscriber = subscriber;\n });\n const send = (_0, ..._1) => __async(this, [_0, ..._1], function* (payload, options = {}) {\n isSendingSubscriber.next(true);\n try {\n yield sendMessage(room.localParticipant, payload, __spreadValues({ topic: topics[0] }, options));\n } finally {\n isSendingSubscriber.next(false);\n }\n });\n return { messageObservable, isSendingObservable, send };\n}\nfunction setupChatMessageHandler(room) {\n const chatObservable = createChatObserver(room);\n const send = (text, options) => __async(this, null, function* () {\n const msg = yield room.localParticipant.sendChatMessage(text, options);\n yield room.localParticipant.sendText(text, options);\n return __spreadProps(__spreadValues({}, msg), {\n type: \"chatMessage\",\n from: room.localParticipant,\n attachedFiles: options.attachments\n });\n });\n const edit = (text, originalMsg) => __async(this, null, function* () {\n const msg = yield room.localParticipant.editChatMessage(text, originalMsg);\n return msg;\n });\n return { chatObservable, send, edit };\n}\n\n// src/helper/future.ts\nvar Future = class {\n constructor(futureBase, onFinally) {\n this._isResolved = false;\n this.onFinally = onFinally;\n this.promise = new Promise((resolve, reject) => __async(this, null, function* () {\n this.resolve = resolve;\n this.reject = reject;\n if (futureBase) {\n yield futureBase(resolve, reject);\n }\n })).finally(() => {\n var _a;\n this._isResolved = true;\n (_a = this.onFinally) == null ? void 0 : _a.call(this);\n });\n }\n get isResolved() {\n return this._isResolved;\n }\n};\n\n// src/components/chat.ts\nvar topicSubjectMap = /* @__PURE__ */ new WeakMap();\nvar streamIdToAttachments = /* @__PURE__ */ new Map();\nfunction isIgnorableChatMessage(msg) {\n return msg.ignoreLegacy == true;\n}\nvar decodeLegacyMsg = (message) => JSON.parse(new TextDecoder().decode(message));\nvar encodeLegacyMsg = (message) => new TextEncoder().encode(JSON.stringify(message));\nfunction setupChat(room, options) {\n var _a, _b, _c, _d, _e, _f;\n const serverSupportsDataStreams = () => {\n var _a2, _b2, _c2;\n return ((_a2 = room.serverInfo) == null ? void 0 : _a2.edition) === 1 || !!((_b2 = room.serverInfo) == null ? void 0 : _b2.version) && compareVersions((_c2 = room.serverInfo) == null ? void 0 : _c2.version, \"1.8.2\") > 0;\n };\n const onDestroyObservable = new Subject2();\n const topic = (_a = options == null ? void 0 : options.channelTopic) != null ? _a : DataTopic.CHAT;\n const legacyTopic = (_b = options == null ? void 0 : options.channelTopic) != null ? _b : LegacyDataTopic.CHAT;\n let needsSetup = false;\n if (!topicSubjectMap.has(room)) {\n needsSetup = true;\n }\n const topicMap = (_c = topicSubjectMap.get(room)) != null ? _c : /* @__PURE__ */ new Map();\n const messageSubject = (_d = topicMap.get(topic)) != null ? _d : new Subject2();\n topicMap.set(topic, messageSubject);\n topicSubjectMap.set(room, topicMap);\n const finalMessageDecoder = (_e = options == null ? void 0 : options.messageDecoder) != null ? _e : decodeLegacyMsg;\n if (needsSetup) {\n room.registerTextStreamHandler(topic, (reader, participantInfo) => __async(this, null, function* () {\n const { id, timestamp, attributes, attachedStreamIds } = reader.info;\n const attachments = new Map(\n (attachedStreamIds != null ? attachedStreamIds : []).map((id2) => [\n id2,\n new Future()\n ])\n );\n streamIdToAttachments.set(id, attachments);\n const streamObservable = from(reader).pipe(\n scan((acc, chunk2) => {\n return acc + chunk2;\n }),\n mergeMap((chunk2) => {\n if (attachments.size === 0) {\n return of({ chunk: chunk2, attachedFiles: [] });\n } else {\n return from(attachments.values()).pipe(\n mergeMap((attachment) => from(attachment.promise)),\n scan(\n (acc, attachment) => [...acc, new File(attachment.buffer, attachment.fileName)],\n []\n ),\n map6((attachedFiles) => ({ chunk: chunk2, attachedFiles }))\n );\n }\n }),\n map6(({ chunk: chunk2, attachedFiles }) => {\n return {\n id,\n timestamp,\n message: chunk2,\n from: room.getParticipantByIdentity(participantInfo.identity),\n type: \"chatMessage\",\n attributes,\n attachedFiles\n // editTimestamp: type === 'update' ? timestamp : undefined,\n };\n }),\n finalize(() => streamIdToAttachments.delete(id))\n );\n streamObservable.subscribe({\n next: (value) => messageSubject.next(value)\n });\n }));\n room.registerByteStreamHandler(topic, (reader) => __async(this, null, function* () {\n var _a2, _b2;\n const { id: attachmentStreamId } = reader.info;\n const foundStreamAttachmentPair = Array.from(streamIdToAttachments).find(\n ([, attachments]) => attachments.has(attachmentStreamId)\n );\n if (!foundStreamAttachmentPair) {\n return;\n }\n const streamId = foundStreamAttachmentPair[0];\n const bufferList = [];\n try {\n for (var iter = __forAwait(reader), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {\n const buffer = temp.value;\n bufferList.push(buffer);\n }\n } catch (temp) {\n error = [temp];\n } finally {\n try {\n more && (temp = iter.return) && (yield temp.call(iter));\n } finally {\n if (error)\n throw error[0];\n }\n }\n const attachment = (_a2 = streamIdToAttachments.get(streamId)) == null ? void 0 : _a2.get(attachmentStreamId);\n if (!attachment) {\n return;\n }\n (_b2 = attachment.resolve) == null ? void 0 : _b2.call(attachment, {\n fileName: reader.info.name,\n buffer: bufferList\n });\n }));\n const { messageObservable } = setupDataMessageHandler(room, [legacyTopic]);\n messageObservable.pipe(\n map6((msg) => {\n const parsedMessage = finalMessageDecoder(msg.payload);\n if (isIgnorableChatMessage(parsedMessage)) {\n return void 0;\n }\n const newMessage = __spreadProps(__spreadValues({}, parsedMessage), {\n type: \"chatMessage\",\n from: msg.from\n });\n return newMessage;\n }),\n filter3((msg) => !!msg),\n takeUntil(onDestroyObservable)\n ).subscribe(messageSubject);\n }\n const messagesObservable = messageSubject.pipe(\n scan((acc, value) => {\n if (\"id\" in value && acc.find((msg) => {\n var _a2, _b2;\n return ((_a2 = msg.from) == null ? void 0 : _a2.identity) === ((_b2 = value.from) == null ? void 0 : _b2.identity) && msg.id === value.id;\n })) {\n const replaceIndex = acc.findIndex((msg) => msg.id === value.id);\n if (replaceIndex > -1) {\n const originalMsg = acc[replaceIndex];\n acc[replaceIndex] = __spreadProps(__spreadValues({}, value), {\n timestamp: originalMsg.timestamp,\n editTimestamp: value.timestamp\n });\n }\n return [...acc];\n }\n return [...acc, value];\n }, []),\n takeUntil(onDestroyObservable)\n );\n const isSending$ = new BehaviorSubject2(false);\n const finalMessageEncoder = (_f = options == null ? void 0 : options.messageEncoder) != null ? _f : encodeLegacyMsg;\n const send = (message, options2) => __async(this, null, function* () {\n var _a2;\n if (!options2) {\n options2 = {};\n }\n (_a2 = options2.topic) != null ? _a2 : options2.topic = topic;\n isSending$.next(true);\n try {\n const info = yield room.localParticipant.sendText(message, options2);\n const legacyChatMsg = {\n id: info.id,\n timestamp: Date.now(),\n message\n };\n const chatMsg = __spreadProps(__spreadValues({}, legacyChatMsg), {\n attachedFiles: options2.attachments\n });\n const receivedChatMsg = __spreadProps(__spreadValues({}, chatMsg), {\n type: \"chatMessage\",\n from: room.localParticipant,\n attributes: options2.attributes\n });\n messageSubject.next(receivedChatMsg);\n const encodedLegacyMsg = finalMessageEncoder(__spreadProps(__spreadValues({}, legacyChatMsg), {\n ignoreLegacy: serverSupportsDataStreams()\n }));\n try {\n yield sendMessage(room.localParticipant, encodedLegacyMsg, {\n reliable: true,\n topic: legacyTopic\n });\n } catch (error) {\n log.info(\"could not send message in legacy chat format\", error);\n }\n return receivedChatMsg;\n } finally {\n isSending$.next(false);\n }\n });\n function destroy() {\n onDestroyObservable.next();\n onDestroyObservable.complete();\n messageSubject.complete();\n topicSubjectMap.delete(room);\n room.unregisterTextStreamHandler(topic);\n room.unregisterByteStreamHandler(topic);\n }\n room.once(RoomEvent4.Disconnected, destroy);\n return {\n messageObservable: messagesObservable,\n isSendingObservable: isSending$,\n send\n };\n}\n\n// src/components/startAudio.ts\nfunction setupStartAudio() {\n const handleStartAudioPlayback = (room) => __async(this, null, function* () {\n log.info(\"Start Audio for room: \", room);\n yield room.startAudio();\n });\n const className = prefixClass(\"start-audio-button\");\n return { className, roomAudioPlaybackAllowedObservable, handleStartAudioPlayback };\n}\n\n// src/components/startVideo.ts\nfunction setupStartVideo() {\n const handleStartVideoPlayback = (room) => __async(this, null, function* () {\n log.info(\"Start Video for room: \", room);\n yield room.startVideo();\n });\n const className = prefixClass(\"start-audio-button\");\n return { className, roomVideoPlaybackAllowedObservable, handleStartVideoPlayback };\n}\n\n// src/components/chatToggle.ts\nfunction setupChatToggle() {\n const className = [prefixClass(\"button\"), prefixClass(\"chat-toggle\")].join(\" \");\n return { className };\n}\n\n// src/components/focusToggle.ts\nfunction setupFocusToggle() {\n const className = [prefixClass(\"button\"), prefixClass(\"focus-toggle-button\")].join(\" \");\n return { className };\n}\n\n// src/components/clearPinButton.ts\nfunction setupClearPinButton() {\n const className = \"lk-clear-pin-button lk-button\";\n return { className };\n}\n\n// src/components/room.ts\nfunction setupLiveKitRoom() {\n const className = \"lk-room-container\";\n return { className };\n}\n\n// src/observables/track.ts\nimport { RoomEvent as RoomEvent5, TrackEvent } from \"livekit-client\";\nimport { map as map7, Observable as Observable4, startWith as startWith5 } from \"rxjs\";\nfunction trackObservable(track) {\n const trackObserver = observeTrackEvents(\n track,\n TrackEvent.Muted,\n TrackEvent.Unmuted,\n TrackEvent.Subscribed,\n TrackEvent.Unsubscribed\n );\n return trackObserver;\n}\nfunction observeTrackEvents(track, ...events) {\n const observable = new Observable4((subscribe) => {\n const onTrackUpdate = () => {\n subscribe.next(track);\n };\n events.forEach((evt) => {\n track.on(evt, onTrackUpdate);\n });\n const unsubscribe = () => {\n events.forEach((evt) => {\n track.off(evt, onTrackUpdate);\n });\n };\n return unsubscribe;\n }).pipe(startWith5(track));\n return observable;\n}\nfunction getTrackReferences(room, sources, onlySubscribedTracks = true) {\n const localParticipant = room.localParticipant;\n const allParticipants = [localParticipant, ...Array.from(room.remoteParticipants.values())];\n const trackReferences = [];\n allParticipants.forEach((participant) => {\n sources.forEach((source) => {\n const sourceReferences = Array.from(\n participant.trackPublications.values()\n ).filter(\n (track) => track.source === source && // either return all or only the ones that are subscribed\n (!onlySubscribedTracks || track.track)\n ).map((track) => {\n return {\n participant,\n publication: track,\n source: track.source\n };\n });\n trackReferences.push(...sourceReferences);\n });\n });\n return { trackReferences, participants: allParticipants };\n}\nfunction getParticipantTrackRefs(participant, identifier, onlySubscribedTracks = false) {\n const { sources, kind, name } = identifier;\n const sourceReferences = Array.from(participant.trackPublications.values()).filter(\n (pub) => (!sources || sources.includes(pub.source)) && (!kind || pub.kind === kind) && (!name || pub.trackName === name) && // either return all or only the ones that are subscribed\n (!onlySubscribedTracks || pub.track)\n ).map((track) => {\n return {\n participant,\n publication: track,\n source: track.source\n };\n });\n return sourceReferences;\n}\nfunction trackReferencesObservable(room, sources, options) {\n var _a, _b;\n const additionalRoomEvents = (_a = options.additionalRoomEvents) != null ? _a : allParticipantRoomEvents;\n const onlySubscribedTracks = (_b = options.onlySubscribed) != null ? _b : true;\n const roomEvents = Array.from(\n (/* @__PURE__ */ new Set([\n RoomEvent5.ParticipantConnected,\n RoomEvent5.ParticipantDisconnected,\n RoomEvent5.ConnectionStateChanged,\n RoomEvent5.LocalTrackPublished,\n RoomEvent5.LocalTrackUnpublished,\n RoomEvent5.TrackPublished,\n RoomEvent5.TrackUnpublished,\n RoomEvent5.TrackSubscriptionStatusChanged,\n ...additionalRoomEvents\n ])).values()\n );\n const observable = observeRoomEvents(room, ...roomEvents).pipe(\n map7((room2) => {\n const data = getTrackReferences(room2, sources, onlySubscribedTracks);\n log.debug(`TrackReference[] was updated. (length ${data.trackReferences.length})`, data);\n return data;\n }),\n startWith5(getTrackReferences(room, sources, onlySubscribedTracks))\n );\n return observable;\n}\nfunction participantTracksObservable(participant, trackIdentifier) {\n const observable = observeParticipantEvents(participant, ...participantTrackEvents).pipe(\n map7((participant2) => {\n const data = getParticipantTrackRefs(participant2, trackIdentifier);\n log.debug(`TrackReference[] was updated. (length ${data.length})`, data);\n return data;\n }),\n startWith5(getParticipantTrackRefs(participant, trackIdentifier))\n );\n return observable;\n}\nfunction trackEventSelector(publication, event) {\n const observable = new Observable4((subscribe) => {\n const update = (...params) => {\n subscribe.next(params);\n };\n publication.on(event, update);\n const unsubscribe = () => {\n publication.off(event, update);\n };\n return unsubscribe;\n });\n return observable;\n}\nfunction trackTranscriptionObserver(publication) {\n return trackEventSelector(publication, TrackEvent.TranscriptionReceived);\n}\nfunction trackSyncTimeObserver(track) {\n return trackEventSelector(track, TrackEvent.TimeSyncUpdate).pipe(\n map7(([timeUpdate]) => timeUpdate)\n );\n}\n\n// src/observables/dom-event.ts\nimport { concat as concat2, distinctUntilChanged, fromEvent, map as map8, of as of2, skipUntil, timeout } from \"rxjs\";\nfunction createInteractingObservable(htmlElement, inactiveAfter = 1e3) {\n if (htmlElement === null) return of2(false);\n const move$ = fromEvent(htmlElement, \"mousemove\", { passive: true }).pipe(map8(() => true));\n const moveAndStop$ = move$.pipe(\n timeout({\n each: inactiveAfter,\n with: () => concat2(of2(false), moveAndStop$.pipe(skipUntil(move$)))\n }),\n distinctUntilChanged()\n );\n return moveAndStop$;\n}\n\n// src/persistent-storage/local-storage-helpers.ts\nfunction saveToLocalStorage(key, value) {\n if (typeof localStorage === \"undefined\") {\n log.error(\"Local storage is not available.\");\n return;\n }\n try {\n if (value) {\n const nonEmptySettings = Object.fromEntries(\n Object.entries(value).filter(([, value2]) => value2 !== \"\")\n );\n localStorage.setItem(key, JSON.stringify(nonEmptySettings));\n }\n } catch (error) {\n log.error(`Error setting item to local storage: ${error}`);\n }\n}\nfunction loadFromLocalStorage(key) {\n if (typeof localStorage === \"undefined\") {\n log.error(\"Local storage is not available.\");\n return void 0;\n }\n try {\n const item = localStorage.getItem(key);\n if (!item) {\n log.warn(`Item with key ${key} does not exist in local storage.`);\n return void 0;\n }\n return JSON.parse(item);\n } catch (error) {\n log.error(`Error getting item from local storage: ${error}`);\n return void 0;\n }\n}\nfunction createLocalStorageInterface(key) {\n return {\n load: () => loadFromLocalStorage(key),\n save: (value) => saveToLocalStorage(key, value)\n };\n}\n\n// src/persistent-storage/user-choices.ts\nvar USER_CHOICES_KEY = `${cssPrefix}-user-choices`;\nvar defaultUserChoices = {\n videoEnabled: true,\n audioEnabled: true,\n videoDeviceId: \"default\",\n audioDeviceId: \"default\",\n username: \"\"\n};\nvar { load, save } = createLocalStorageInterface(USER_CHOICES_KEY);\nfunction saveUserChoices(userChoices, preventSave = false) {\n if (preventSave === true) {\n return;\n }\n save(userChoices);\n}\nfunction loadUserChoices(defaults, preventLoad = false) {\n var _a, _b, _c, _d, _e;\n const fallback = {\n videoEnabled: (_a = defaults == null ? void 0 : defaults.videoEnabled) != null ? _a : defaultUserChoices.videoEnabled,\n audioEnabled: (_b = defaults == null ? void 0 : defaults.audioEnabled) != null ? _b : defaultUserChoices.audioEnabled,\n videoDeviceId: (_c = defaults == null ? void 0 : defaults.videoDeviceId) != null ? _c : defaultUserChoices.videoDeviceId,\n audioDeviceId: (_d = defaults == null ? void 0 : defaults.audioDeviceId) != null ? _d : defaultUserChoices.audioDeviceId,\n username: (_e = defaults == null ? void 0 : defaults.username) != null ? _e : defaultUserChoices.username\n };\n if (preventLoad) {\n return fallback;\n } else {\n const maybeLoadedObject = load();\n const result = __spreadValues(__spreadValues({}, fallback), maybeLoadedObject != null ? maybeLoadedObject : {});\n return result;\n }\n}\n\n// src/components/textStream.ts\nimport { RoomEvent as RoomEvent6 } from \"livekit-client\";\nimport { from as from2, scan as scan2, Subject as Subject3 } from \"rxjs\";\nimport { share, tap } from \"rxjs/operators\";\nvar observableCacheInstance = null;\nvar roomInstanceMapInstance = null;\nvar nextRoomId = 0;\nfunction getObservableCache() {\n if (!observableCacheInstance) {\n observableCacheInstance = /* @__PURE__ */ new Map();\n }\n return observableCacheInstance;\n}\nfunction getRoomInstanceMap() {\n if (!roomInstanceMapInstance) {\n roomInstanceMapInstance = /* @__PURE__ */ new WeakMap();\n }\n return roomInstanceMapInstance;\n}\nfunction getCacheKey(room, topic) {\n const instanceMap = getRoomInstanceMap();\n let roomId = instanceMap.get(room);\n if (!roomId) {\n roomId = `room_${nextRoomId++}`;\n instanceMap.set(room, roomId);\n }\n return `${roomId}:${topic}`;\n}\nfunction setupTextStream(room, topic) {\n const cacheKey = getCacheKey(room, topic);\n const observableCache = getObservableCache();\n const existingObservable = observableCache.get(cacheKey);\n if (existingObservable) {\n return existingObservable;\n }\n const textStreamsSubject = new Subject3();\n let textStreams = [];\n const segmentAttribute = \"lk.segment_id\" /* TranscriptionSegmentId */;\n const sharedObservable = textStreamsSubject.pipe(\n tap({\n subscribe: () => {\n room.registerTextStreamHandler(topic, (reader, participantInfo) => __async(this, null, function* () {\n var _a;\n const streamObservable = from2(reader).pipe(\n scan2((acc, chunk2) => {\n return acc + chunk2;\n }, \"\")\n );\n const isTranscription = !!((_a = reader.info.attributes) == null ? void 0 : _a[segmentAttribute]);\n streamObservable.subscribe((accumulatedText) => {\n const index = textStreams.findIndex(\n (stream) => {\n var _a2, _b;\n return stream.streamInfo.id === reader.info.id || isTranscription && ((_a2 = stream.streamInfo.attributes) == null ? void 0 : _a2[segmentAttribute]) === ((_b = reader.info.attributes) == null ? void 0 : _b[segmentAttribute]);\n }\n );\n if (index !== -1) {\n textStreams[index] = __spreadProps(__spreadValues({}, textStreams[index]), {\n text: accumulatedText\n });\n textStreamsSubject.next([...textStreams]);\n } else {\n textStreams.push({\n text: accumulatedText,\n participantInfo,\n streamInfo: reader.info\n });\n textStreamsSubject.next([...textStreams]);\n }\n });\n }));\n },\n finalize: () => {\n room.unregisterTextStreamHandler(topic);\n }\n }),\n share()\n );\n observableCache.set(cacheKey, sharedObservable);\n room.on(RoomEvent6.Disconnected, () => {\n getObservableCache().delete(cacheKey);\n textStreams = [];\n textStreamsSubject.next([]);\n });\n return sharedObservable;\n}\nexport {\n DataTopic,\n GRID_LAYOUTS,\n LegacyDataTopic,\n PIN_DEFAULT_STATE,\n ParticipantAgentAttributes,\n WIDGET_DEFAULT_STATE,\n activeSpeakerObserver,\n addMediaTimestampToTranscription,\n allParticipantEvents,\n allParticipantRoomEvents,\n allRemoteParticipantEvents,\n allRemoteParticipantRoomEvents,\n attachIfSubscribed,\n computeMenuPosition,\n connectedParticipantObserver,\n connectedParticipantsObserver,\n connectionStateObserver,\n createActiveDeviceObservable,\n createChatObserver,\n createConnectionQualityObserver,\n createDataObserver,\n createDefaultGrammar,\n createEmailRegExp,\n createInteractingObservable,\n createIsSpeakingObserver,\n createMediaDeviceObserver,\n createTrackObserver,\n createUrlRegExp,\n cssPrefix,\n dedupeSegments,\n defaultUserChoices,\n didActiveSegmentsChange,\n encryptionStatusObservable,\n getActiveTranscriptionSegments,\n getScrollBarWidth,\n getTrackByIdentifier,\n getTrackReferenceId,\n getTrackReferenceSource,\n isEqualTrackRef,\n isLocal,\n isMobileBrowser,\n isParticipantTrackReferencePinned,\n isPlaceholderReplacement,\n isRemote,\n isSourceWitOptions,\n isSourcesWithOptions,\n isTrackReference,\n isTrackReferencePinned,\n isTrackReferencePlaceholder,\n isWeb,\n loadUserChoices,\n log,\n mutedObserver,\n observeParticipantEvents,\n observeParticipantMedia,\n observeRoomEvents,\n observeTrackEvents,\n participantAttributesObserver,\n participantByIdentifierObserver,\n participantEventSelector,\n participantInfoObserver,\n participantPermissionObserver,\n participantTrackEvents,\n participantTracksObservable,\n recordingStatusObservable,\n roomAudioPlaybackAllowedObservable,\n roomEventSelector,\n roomInfoObserver,\n roomObserver,\n roomVideoPlaybackAllowedObservable,\n saveUserChoices,\n screenShareObserver,\n selectGridLayout,\n sendMessage,\n setDifference,\n setLogExtension,\n setLogLevel,\n setupChat,\n setupChatMessageHandler,\n setupChatToggle,\n setupClearPinButton,\n setupConnectionQualityIndicator,\n setupDataMessageHandler,\n setupDeviceSelector,\n setupDisconnectButton,\n setupFocusToggle,\n setupLiveKitRoom,\n setupManualToggle,\n setupMediaToggle,\n setupMediaTrack,\n setupParticipantName,\n setupParticipantTile,\n setupStartAudio,\n setupStartVideo,\n setupTextStream,\n setupTrackMutedIndicator,\n sortParticipants,\n sortTrackReferences,\n supportsScreenSharing,\n tokenize,\n trackEventSelector,\n trackObservable,\n trackReferencesObservable,\n trackSyncTimeObserver,\n trackTranscriptionObserver,\n updatePages,\n wasClickOutside\n};\n//# sourceMappingURL=index.mjs.map","/*\nCopyright 2024-2025 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { Subject } from \"rxjs\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nexport interface Controls {\n canEnterPip(): boolean;\n enablePip(): void;\n disablePip(): void;\n onPipMediaOrientationUpdate?: (orientation: \"landscape\" | \"portrait\") => void;\n\n setAvailableAudioDevices(devices: OutputDevice[]): void;\n setAudioDevice(id: string): void;\n onAudioDeviceSelect?: (id: string) => void;\n onAudioPlaybackStarted?: () => void;\n setAudioEnabled(enabled: boolean): void;\n showNativeAudioDevicePicker?: () => void;\n onBackButtonPressed?: () => void;\n\n /** @deprecated use setAvailableAudioDevices instead*/\n setAvailableOutputDevices(devices: OutputDevice[]): void;\n /** @deprecated use setAudioDevice instead*/\n setOutputDevice(id: string): void;\n /** @deprecated use onAudioDeviceSelect instead*/\n onOutputDeviceSelect?: (id: string) => void;\n /** @deprecated use setAudioEnabled instead*/\n setOutputEnabled(enabled: boolean): void;\n /** @deprecated use showNativeAudioDevicePicker instead*/\n showNativeOutputDevicePicker?: () => void;\n}\n\n/**\n * Output Audio device when using the controlled audio output mode (mobile).\n */\nexport interface OutputDevice {\n id: string;\n name: string;\n /**\n * `forEarpiece` in an iOS only flag, that will be set on the default speaker device.\n * The default speaker device will be used for the earpiece mode by\n * using a stereo pan and reducing the volume significantly. (in combination this is similar to a dedicated earpiece mode)\n * - on iOS this is true if output is routed to speaker.\n * In that case then ElementCalls manually appends an earpiece device with id `EARPIECE_CONFIG_ID` and `{ type: \"earpiece\" }`\n * - on Android this is unused.\n */\n forEarpiece?: boolean;\n /**\n * Is the device the OS earpiece audio configuration?\n * - on iOS always undefined\n * - on Android true for the `TYPE_BUILTIN_EARPIECE`\n */\n isEarpiece?: boolean;\n /**\n * Is the device the OS default speaker:\n * - on iOS always true if output is routed to speaker. In other case iOS on declare a `dummy` id device.\n * - on Android true for the `TYPE_BUILTIN_SPEAKER`\n */\n isSpeaker?: boolean;\n /**\n * Is the device the OS default external headset (bluetooth):\n * - on iOS always undefined.\n * - on Android true for the `TYPE_BLUETOOTH_SCO`\n */\n isExternalHeadset?: boolean;\n}\n\n/**\n * If pipMode is enabled, EC will render a adapted call view layout.\n */\nexport const setPipEnabled$ = new Subject<boolean>();\n\n/**\n * Stores the list of available controlled audio output devices.\n * This is set when the native code calls `setAvailableAudioDevices` with the list of available audio output devices.\n */\nexport const availableOutputDevices$ = new Subject<OutputDevice[]>();\n\n/**\n * Stores the current audio output device id.\n * This is set when the native code calls `setAudioDevice`\n */\nexport const outputDevice$ = new Subject<string>();\n\n/**\n * This allows the os to mute the call if the user\n * presses the volume down button when it is at the minimum volume.\n *\n * This should also be used to display a darkened overlay screen letting the user know that audio is muted.\n */\nexport const setAudioEnabled$ = new Subject<boolean>();\n\nlet playbackStartedEmitted = false;\nexport const setPlaybackStarted = (): void => {\n if (!playbackStartedEmitted) {\n playbackStartedEmitted = true;\n window.controls.onAudioPlaybackStarted?.();\n }\n};\n\nwindow.controls = {\n canEnterPip(): boolean {\n return setPipEnabled$.observed;\n },\n enablePip(): void {\n if (!setPipEnabled$.observed) throw new Error(\"No call is running\");\n setPipEnabled$.next(true);\n },\n disablePip(): void {\n if (!setPipEnabled$.observed) throw new Error(\"No call is running\");\n setPipEnabled$.next(false);\n },\n\n /**\n * Reverse engineered:\n *\n * - on iOS:\n * This always a list of one thing. If current route output is speaker it returns\n * the single `{\"id\":\"Speaker\",\"name\":\"Speaker\",\"forEarpiece\":true,\"isSpeaker\":true}` Notice that EC will\n * also manually add a virtual earpiece device with id `EARPIECE_CONFIG_ID` and `{ type: \"earpiece\" }`.\n * If the route output is not speaker then it will be `{id: 'dummy', name: 'dummy'}`\n *\n *\n * - on Android:\n * This is a list of all available output audio devices. The `id` is the Android AudioDeviceInfo.getId()\n * and the `name` is based the Android AudioDeviceInfo.productName (mapped to static strings for known types)\n * The `isEarpiece`, `isSpeaker` and `isExternalHeadset` are set based on the Android AudioDeviceInfo.type\n * matching the corresponding types for earpiece, speaker and bluetooth headset.\n */\n setAvailableAudioDevices(devices: OutputDevice[]): void {\n logger.info(\n \"[MediaDevices controls] setAvailableAudioDevices called from native:\",\n devices,\n );\n availableOutputDevices$.next(devices);\n },\n setAudioDevice(id: string): void {\n logger.info(\n \"[MediaDevices controls] setAudioDevice called from native\",\n id,\n );\n outputDevice$.next(id);\n },\n setAudioEnabled(enabled: boolean): void {\n logger.info(\n \"[MediaDevices controls] setAudioEnabled called from native:\",\n enabled,\n );\n if (!setAudioEnabled$.observed)\n throw new Error(\n \"Output controls are disabled. No setAudioEnabled$ observer\",\n );\n setAudioEnabled$.next(enabled);\n },\n\n // wrappers for the deprecated controls fields\n setOutputEnabled(enabled: boolean): void {\n this.setAudioEnabled(enabled);\n },\n setAvailableOutputDevices(devices: OutputDevice[]): void {\n this.setAvailableAudioDevices(devices);\n },\n setOutputDevice(id: string): void {\n this.setAudioDevice(id);\n },\n};\n","/*\nCopyright 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n BehaviorSubject,\n catchError,\n distinctUntilChanged,\n EMPTY,\n endWith,\n filter,\n map,\n type Observable,\n type OperatorFunction,\n share,\n take,\n takeUntil,\n} from \"rxjs\";\n\nimport { type Behavior } from \"./Behavior\";\n\ntype MonoTypeOperator = <T>(o: Observable<T>) => Observable<T>;\n\ntype SplitBehavior<T> = keyof T extends string | number\n ? { [K in keyof T as `${K}$`]: Behavior<T[K]> }\n : never;\n\nconst nothing = Symbol(\"nothing\");\n\n/**\n * A scope which limits the execution lifetime of its bound Observables.\n */\nexport class ObservableScope {\n private readonly ended$ = new BehaviorSubject(false);\n\n private readonly bindImpl: MonoTypeOperator = takeUntil(\n this.ended$.pipe(filter((ended) => ended)),\n );\n\n /**\n * Binds an Observable to this scope, so that it completes when the scope\n * ends.\n */\n public bind(): MonoTypeOperator {\n return this.bindImpl;\n }\n\n private readonly shareImpl: MonoTypeOperator = share({\n resetOnError: false,\n resetOnComplete: false,\n resetOnRefCountZero: false,\n });\n /**\n * Shares (multicasts) the Observable as a hot Observable.\n */\n public readonly share: MonoTypeOperator = (input$) =>\n input$.pipe(this.bindImpl, this.shareImpl);\n\n /**\n * Converts an Observable to a Behavior. If no initial value is specified, the\n * Observable must synchronously emit an initial value.\n */\n public behavior<T>(\n setValue$: Observable<T>,\n initialValue: T | typeof nothing = nothing,\n ): Behavior<T> {\n const subject$ = new BehaviorSubject(initialValue);\n // Push values from the Observable into the BehaviorSubject.\n // BehaviorSubjects have an undesirable feature where if you call 'complete',\n // they will no longer re-emit their current value upon subscription. We want\n // to support Observables that complete (for example `of({})`), so we have to\n // take care to not propagate the completion event.\n setValue$.pipe(this.bind(), distinctUntilChanged()).subscribe({\n next(value) {\n subject$.next(value);\n },\n error(err: unknown) {\n subject$.error(err);\n },\n });\n if (subject$.value === nothing)\n throw new Error(\"Behavior failed to synchronously emit an initial value\");\n return subject$ as Behavior<T>;\n }\n\n /**\n * Ends the scope, causing any bound Observables to complete.\n */\n public end(): void {\n this.ended$.next(true);\n }\n\n /**\n * Register a callback to be executed when the scope is ended.\n */\n public onEnd(callback: () => void): void {\n this.ended$\n .pipe(\n filter((ended) => ended),\n take(1),\n )\n .subscribe(callback);\n }\n\n /**\n * For the duration of the scope, sync some external state with the value of\n * the provided Behavior by way of an async function which attempts to update\n * (reconcile) the external state. The reconciliation function may return a\n * clean-up callback which will be called and awaited before the next change\n * in value (or the end of the scope).\n *\n * All calls to the function and its clean-up callbacks are serialized. If the\n * value changes faster than the handlers can keep up with, intermediate\n * values may be skipped.\n *\n * Basically, this is like React's useEffect but async and for Behaviors.\n */\n public reconcile<T>(\n value$: Behavior<T>,\n callback: (value: T) => Promise<(() => Promise<void>) | void>,\n ): void {\n let latestValue: T | typeof nothing = nothing;\n let reconcilePromise: Promise<void> | undefined = undefined;\n let cleanUp: (() => Promise<void>) | void = undefined;\n let prevVal: T | typeof nothing = nothing;\n\n // While this loop runs it will process the latest from `value$` until it caught up with the updates.\n // It might skip updates from `value$` and only process the newest value after callback has resolved.\n const reconcileLoop = async (): Promise<void> => {\n while (latestValue !== prevVal) {\n await cleanUp?.(); // Call the previous value's clean-up handler\n prevVal = latestValue;\n\n if (latestValue !== nothing) cleanUp = await callback(latestValue); // Sync current value...\n // `latestValue` might have gotten updated during the `await callback`. That is why we loop here\n }\n };\n\n value$\n .pipe(\n catchError(() => EMPTY), // Ignore errors\n this.bind(), // Limit to the duration of the scope\n endWith(nothing), // Clean up when the scope ends\n )\n .subscribe((value) => {\n // Always track the latest value! The `reconcileLoop` will run until it \"processed\" the \"last\" `latestValue`.\n latestValue = value;\n // There's already an instance of the below 'reconcileLoop' loop running\n // concurrently. So lets let the loop handle it. NEVER instanciate two `reconcileLoop`s.\n if (reconcilePromise) return;\n\n reconcilePromise = reconcileLoop().finally(() => {\n reconcilePromise = undefined;\n });\n });\n }\n\n /**\n * Splits a Behavior of objects with static properties into an object with\n * Behavior properties.\n *\n * For example, splitting a `Behavior<{ name: string; age: number }>` results\n * in an object of type `{ name$: Behavior<string>; age$: Behavior<number> }`.\n */\n public splitBehavior<T extends object>(\n input$: Behavior<T>,\n ): SplitBehavior<T> {\n return Object.fromEntries(\n Object.keys(input$.value).map((key) => [\n `${key}$`,\n this.behavior(input$.pipe(map((input) => input[key as keyof T]))),\n ]),\n ) as SplitBehavior<T>;\n }\n}\n\n/**\n * The global scope, a scope which never ends.\n */\nexport const globalScope = new ObservableScope();\n\n/**\n * `Epoch`'s can be used to create `Behavior`s and `Observable`s which derivitives can be merged\n * with `combinedLatest` without duplicated emissions.\n *\n * This is useful in the following example:\n * ```\n * const rootObs$ = of(\"red\",\"green\",\"blue\");\n * const derivedObs$ = rootObs$.pipe(\n * map((v)=> {red:\"fire\", green:\"grass\", blue:\"water\"}[v])\n * );\n * const otherDerivedObs$ = rootObs$.pipe(\n * map((v)=> {red:\"tomatoes\", green:\"leaves\", blue:\"sky\"}[v])\n * );\n * const mergedObs$ = combineLatest([rootObs$, derivedObs$, otherDerivedObs$]).pipe(\n * map(([color, a,b]) => color + \" like \" + a + \" and \" + b)\n * );\n *\n * ```\n * will result in 6 emissions with mismatching items like \"red like fire and leaves\"\n *\n * # Use Epoch\n * ```\n * const ancestorObs$ = of(1,2,3).pipe(trackEpoch());\n * const derivedObs$ = ancestorObs$.pipe(\n * mapEpoch((v)=> \"this number: \" + v)\n * );\n * const otherDerivedObs$ = ancestorObs$.pipe(\n * mapEpoch((v)=> \"multiplied by: \" + v)\n * );\n * const mergedObs$ = combineLatest([derivedObs$, otherDerivedObs$]).pipe(\n * filter((values) => values.every((v) => v.epoch === values[0].v)),\n * map(([color, a, b]) => color + \" like \" + a + \" and \" + b)\n * );\n *\n * ```\n * will result in 3 emissions all matching (e.g. \"blue like water and sky\")\n */\nexport class Epoch<T> {\n public readonly epoch: number;\n public readonly value: T;\n\n public constructor(value: T, epoch?: number) {\n this.value = value;\n this.epoch = epoch ?? 0;\n }\n /**\n * Maps the value inside the epoch to a new value while keeping the epoch number.\n * # usage\n * ```\n * const myEpoch$ = myObservable$.pipe(\n * map(trackEpoch()),\n * // this is the preferred way using mapEpoch\n * mapEpoch((v)=> v+1)\n * // This is how inner map can be used:\n * map((epoch) => epoch.innerMap((v)=> v+1))\n * // It is equivalent to:\n * map((epoch) => new Epoch(epoch.value + 1, epoch.epoch))\n * )\n * ```\n * See also `Epoch<T>`\n */\n public mapInner<U>(map: (value: T) => U): Epoch<U> {\n return new Epoch<U>(map(this.value), this.epoch);\n }\n}\n\n/**\n * A `pipe` compatible map oparator that keeps the epoch in tact but allows mapping the value.\n * # usage\n * ```\n * const myEpoch$ = myObservable$.pipe(\n * map(trackEpoch()),\n * // this is the preferred way using mapEpoch\n * mapEpoch((v)=> v+1)\n * // This is how inner map can be used:\n * map((epoch) => epoch.innerMap((v)=> v+1))\n * // It is equivalent to:\n * map((epoch) => new Epoch(epoch.value + 1, epoch.epoch))\n * )\n * ```\n * See also `Epoch<T>`\n */\nexport function mapEpoch<T, U>(\n mapFn: (value: T) => U,\n): OperatorFunction<Epoch<T>, Epoch<U>> {\n return map((e) => e.mapInner(mapFn));\n}\n\n/**\n * # usage\n * ```\n * const myEpoch$ = myObservable$.pipe(\n * map(trackEpoch()),\n * map((epoch) => epoch.innerMap((v)=> v+1))\n * )\n * const derived = myEpoch$.pipe(\n * mapEpoch((v)=>v^2)\n * )\n * ```\n * See also `Epoch<T>`\n */\nexport function trackEpoch<T>(): OperatorFunction<T, Epoch<T>> {\n return map<T, Epoch<T>>((value, number) => new Epoch(value, number));\n}\n","/*\nCopyright 2023, 2024 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport {\n type Observable,\n audit,\n combineLatest,\n concat,\n defer,\n filter,\n finalize,\n map,\n of,\n scan,\n startWith,\n takeWhile,\n tap,\n withLatestFrom,\n BehaviorSubject,\n type OperatorFunction,\n distinctUntilChanged,\n} from \"rxjs\";\nimport { logger } from \"matrix-js-sdk/lib/logger\";\n\nimport { type Behavior } from \"../state/Behavior\";\nimport { Epoch, ObservableScope } from \"../state/ObservableScope\";\n\nconst nothing = Symbol(\"nothing\");\n\n/**\n * RxJS operator that invokes a callback when the Observable is finalized,\n * passing the most recently emitted value. If no value was emitted, the\n * callback will not be invoked.\n */\nexport function finalizeValue<T>(callback: (finalValue: T) => void) {\n return (source$: Observable<T>): Observable<T> =>\n defer(() => {\n let finalValue: T | typeof nothing = nothing;\n return source$.pipe(\n tap((value) => (finalValue = value)),\n finalize(() => {\n if (finalValue !== nothing) callback(finalValue);\n }),\n );\n });\n}\n\n/**\n * RxJS operator that accumulates a state from a source of events. This is like\n * scan, except it emits an initial value immediately before any events arrive.\n */\nexport function accumulate<State, Event>(\n initial: State,\n update: (state: State, event: Event) => State,\n) {\n return (events$: Observable<Event>): Observable<State> =>\n events$.pipe(scan(update, initial), startWith(initial));\n}\n\n/**\n * Given a source of toggle events, creates a Behavior whose value toggles\n * between `true` and `false`.\n */\nexport function createToggle$(\n scope: ObservableScope,\n initialValue: boolean,\n toggle$: Observable<void>,\n): Behavior<boolean> {\n return scope.behavior(\n toggle$.pipe(accumulate(initialValue, (state) => !state)),\n );\n}\n\nconst switchSymbol = Symbol(\"switch\");\n\n/**\n * RxJS operator which behaves like the input Observable (A) until it emits a\n * value satisfying the given predicate, then behaves like Observable B.\n *\n * The switch is immediate; the value that triggers the switch will not be\n * present in the output.\n */\nexport function switchWhen<A, B>(\n predicate: (a: A, index: number) => boolean,\n b$: Observable<B>,\n) {\n return (a$: Observable<A>): Observable<A | B> =>\n concat(\n a$.pipe(\n map((a, index) => (predicate(a, index) ? switchSymbol : a)),\n takeWhile((a) => a !== switchSymbol),\n ) as Observable<A>,\n b$,\n );\n}\n\n/**\n * Reads the current value of a state Observable without reacting to future\n * changes.\n *\n * This function exists to help with certain cases of bridging Observables into\n * React, where an initial value is needed. You should never use it to create an\n * Observable derived from another Observable; use reactive operators instead.\n */\nexport function getValue<T>(state$: Observable<T>): T {\n let value: T | typeof nothing = nothing;\n state$.subscribe((x) => (value = x)).unsubscribe();\n if (value === nothing) throw new Error(\"Not a state Observable\");\n return value;\n}\n\n/**\n * Creates an Observable that has a value of true whenever all its inputs are\n * true.\n *\n * @public\n */\nexport function and$(...inputs: Observable<boolean>[]): Observable<boolean> {\n return combineLatest(inputs, (...flags) => flags.every((flag) => flag));\n}\n\n/**\n * RxJS operator that pauses all changes in the input value whenever a Behavior\n * is true. When the Behavior returns to being false, the most recently\n * suppressed change is emitted as the most recent value.\n */\nexport function pauseWhen<T>(pause$: Behavior<boolean>) {\n return (value$: Observable<T>): Observable<T> =>\n value$.pipe(\n withLatestFrom(pause$),\n audit(([, pause]) =>\n pause ? pause$.pipe(filter((pause) => !pause)) : of(null),\n ),\n map(([value]) => value),\n );\n}\n\ninterface ItemHandle<Keys extends unknown[], Data, Item> {\n scope: ObservableScope;\n keys: readonly [...Keys];\n data$: BehaviorSubject<Data>;\n item: Item;\n}\n\n/**\n * Maps a changing input value to a collection of items that each capture some\n * dynamic data and are tied to a key. Items will be automatically created when\n * their key is requested for the first time, reused when the same key is\n * requested at a later time, and destroyed (have their scope ended) when the\n * key is no longer requested.\n *\n * @param name A name for this collection to use in debug logs.\n * @param generator A generator function yielding a tuple of keys and the\n * currently associated data for each item that it wants to exist.\n * @param factory A function constructing an individual item, given the item's key,\n * dynamic data, and an automatically managed ObservableScope for the item.\n */\nexport function generateItems<\n Input,\n Keys extends [unknown, ...unknown[]],\n Data,\n Item,\n>(\n name: string,\n generator: (\n input: Input,\n ) => Iterable<{ keys: readonly [...Keys]; data: Data }, void, void>,\n factory: (\n scope: ObservableScope,\n data$: Behavior<Data>,\n ...keys: Keys\n ) => Item,\n): OperatorFunction<Input, Item[]> {\n return generateItemsInternal(name, generator, factory, (items) => items);\n}\n\n/**\n * Same as generateItems, but preserves epoch data.\n */\nexport function generateItemsWithEpoch<\n Input,\n Keys extends [unknown, ...unknown[]],\n Data,\n Item,\n>(\n name: string,\n generator: (\n input: Input,\n ) => Iterable<{ keys: readonly [...Keys]; data: Data }, void, void>,\n factory: (\n scope: ObservableScope,\n data$: Behavior<Data>,\n ...keys: Keys\n ) => Item,\n): OperatorFunction<Epoch<Input>, Epoch<Item[]>> {\n return generateItemsInternal(\n name,\n function* (input) {\n yield* generator(input.value);\n },\n factory,\n (items, input) => new Epoch(items, input.epoch),\n );\n}\n\n/**\n * Segments a behavior into periods during which its value matches the filter\n * (outputting a behavior with a narrowed type) and periods during which it does\n * not match (outputting null).\n */\nexport function filterBehavior<T, S extends T>(\n predicate: (value: T) => value is S,\n): OperatorFunction<T, Behavior<S> | null> {\n return (input$) =>\n input$.pipe(\n scan<T, BehaviorSubject<S> | null>((acc$, input) => {\n if (predicate(input)) {\n const output$ = acc$ ?? new BehaviorSubject(input);\n output$.next(input);\n return output$;\n }\n return null;\n }, null),\n distinctUntilChanged(),\n );\n}\n\n/**\n * Maps a changing input value to an item whose lifetime is tied to a certain\n * computed key. The item may capture some dynamic data from the input.\n */\nexport function generateItem<\n Input,\n Keys extends [unknown, ...unknown[]],\n Data,\n Item,\n>(\n name: string,\n generator: (input: Input) => { keys: readonly [...Keys]; data: Data },\n factory: (\n scope: ObservableScope,\n data$: Behavior<Data>,\n ...keys: Keys\n ) => Item,\n): OperatorFunction<Input, Item> {\n return (input$) =>\n input$.pipe(\n generateItemsInternal(\n name,\n function* (input) {\n yield generator(input);\n },\n factory,\n (items) => items,\n ),\n map(([item]) => item),\n );\n}\n\nfunction generateItemsInternal<\n Input,\n Keys extends [unknown, ...unknown[]],\n Data,\n Item,\n Output,\n>(\n name: string,\n generator: (\n input: Input,\n ) => Iterable<{ keys: readonly [...Keys]; data: Data }, void, void>,\n factory: (\n scope: ObservableScope,\n data$: Behavior<Data>,\n ...keys: Keys\n ) => Item,\n project: (items: Item[], input: Input) => Output,\n): OperatorFunction<Input, Output> {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n return (input$) =>\n input$.pipe(\n // Keep track of the existing items over time, so they can persist\n scan<\n Input,\n {\n map: Map<any, any>;\n items: Set<ItemHandle<Keys, Data, Item>>;\n input: Input;\n },\n { map: Map<any, any>; items: Set<ItemHandle<Keys, Data, Item>> }\n >(\n ({ map: prevMap, items: prevItems }, input) => {\n const nextMap = new Map();\n const nextItems = new Set<ItemHandle<Keys, Data, Item>>();\n\n for (const { keys, data } of generator(input)) {\n // Disable type checks for a second to grab the item out of a nested map\n let i: any = prevMap;\n for (const key of keys) i = i?.get(key);\n let item = i as ItemHandle<Keys, Data, Item> | undefined;\n\n if (item === undefined) {\n // First time requesting the key; create the item\n const scope = new ObservableScope();\n const data$ = new BehaviorSubject(data);\n logger.debug(\n `[${name}] Creating item with keys ${keys.join(\", \")}`,\n );\n item = {\n scope,\n keys,\n data$,\n item: factory(scope, data$, ...keys),\n };\n } else {\n item.data$.next(data);\n }\n\n // Likewise, disable type checks to insert the item in the nested map\n let m: Map<any, any> = nextMap;\n for (let i = 0; i < keys.length - 1; i++) {\n let inner = m.get(keys[i]);\n if (inner === undefined) {\n inner = new Map();\n m.set(keys[i], inner);\n }\n m = inner;\n }\n const finalKey = keys[keys.length - 1];\n if (m.has(finalKey))\n throw new Error(\n `Keys must be unique (tried to generate multiple items for key ${keys.join(\", \")})`,\n );\n m.set(keys[keys.length - 1], item);\n nextItems.add(item);\n }\n\n // Destroy all items that are no longer being requested\n for (const item of prevItems)\n if (!nextItems.has(item)) {\n logger.debug(\n `[${name}] Destroying item with keys ${item.keys.join(\", \")}`,\n );\n item.scope.end();\n }\n\n return { map: nextMap, items: nextItems, input };\n },\n { map: new Map(), items: new Set() },\n ),\n finalizeValue(({ items }) => {\n // Destroy all remaining items when no longer subscribed\n logger.debug(\n `[${name}] End of scope, destroying all ${items.size} items…`,\n );\n for (const item of items) {\n logger.debug(\n `[${name}] Destroying item with keys ${item.keys.join(\", \")}`,\n );\n item.scope.end();\n }\n }),\n map(({ items, input }) =>\n project(\n [...items].map(({ item }) => item),\n input,\n ),\n ),\n );\n /* eslint-enable @typescript-eslint/no-explicit-any */\n}\n","/*\nCopyright 2025 New Vector Ltd.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { BehaviorSubject } from \"rxjs\";\n\n/**\n * A stateful, read-only reactive value. As an Observable, it is \"hot\" and\n * always replays the current value upon subscription.\n *\n * A Behavior is to BehaviorSubject what Observable is to Subject; it does not\n * provide a way to imperatively set new values. For more info on the\n * distinction between Behaviors and Observables, see\n * https://monoid.dk/post/behaviors-and-streams-why-both/.\n */\nexport type Behavior<T> = Omit<\n BehaviorSubject<T>,\n \"next\" | \"observers\" | \"error\"\n>;\n\n/**\n * Creates a Behavior which never changes in value.\n */\nexport function constant<T>(value: T): Behavior<T> {\n return new BehaviorSubject(value);\n}\n","/*\nCopyright 2026 Element Corp.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\nimport { logger as rootLogger } from \"matrix-js-sdk/lib/logger\";\nimport {\n distinctUntilChanged,\n map,\n merge,\n type Observable,\n scan,\n startWith,\n Subject,\n tap,\n} from \"rxjs\";\n\nimport {\n type AudioOutputDeviceLabel,\n type MediaDevice,\n type SelectedAudioOutputDevice,\n} from \"./MediaDevices.ts\";\nimport type { ObservableScope } from \"./ObservableScope.ts\";\nimport type { RTCCallIntent } from \"matrix-js-sdk/lib/matrixrtc\";\nimport { type Controls, type OutputDevice } from \"../controls.ts\";\nimport { type Behavior } from \"./Behavior.ts\";\n\ntype ControllerState = {\n /**\n * The list of available output devices, ordered by preference order (most preferred first).\n */\n devices: OutputDevice[];\n /**\n * Explicit user preference for the selected device.\n */\n preferredDeviceId: string | undefined;\n /**\n * The effective selected device, always valid against available devices.\n */\n selectedDeviceId: string | undefined;\n};\n\n/**\n * The possible actions that can be performed on the controller,\n * either by the user or by the system.\n */\ntype ControllerAction =\n | { type: \"selectDevice\"; deviceId: string | undefined }\n | { type: \"deviceUpdated\"; devices: OutputDevice[] };\n/**\n * The implementation of the audio output media device for Android when using the controlled audio output mode.\n *\n * In this mode, the hosting application (e.g. Element Mobile) is responsible for providing the list of available audio output devices.\n * There are some android specific logic compared to others:\n * - AndroidControlledAudioOutput is the only one responsible for selecting the best output device.\n * - On android, we don't listen to the selected device from native code (control.setAudioDevice).\n * - If a new device is added or removed, this controller will determine the new selected device based\n * on the available devices (that is ordered by preference order) and the user's selection (if any).\n *\n * Given the differences in how the native code is handling the audio routing on Android compared to iOS,\n * we have this separate implementation. It allows us to have proper testing and avoid side effects\n * from platform specific logic breaking the other platform's implementation.\n */\nexport class AndroidControlledAudioOutput implements MediaDevice<\n AudioOutputDeviceLabel,\n SelectedAudioOutputDevice\n> {\n private logger = rootLogger.getChild(\n \"[MediaDevices AndroidControlledAudioOutput]\",\n );\n\n /**\n * STATE stream: the current state of the controller, including the list of available devices and the selected device.\n */\n private readonly controllerState$: Behavior<ControllerState>;\n\n /**\n * @inheritdoc\n */\n public readonly available$: Behavior<Map<string, AudioOutputDeviceLabel>>;\n\n /**\n * Effective selected device, always valid against available devices.\n *\n * On android, we don't listen to the selected device from native code (control.setAudioDevice).\n * Instead, we determine the selected device ourselves based on the available devices and the user's selection (if any).\n */\n public readonly selected$: Behavior<SelectedAudioOutputDevice | undefined>;\n\n // COMMAND stream: user asks to select a device\n private readonly selectDeviceCommand$ = new Subject<string | undefined>();\n\n public select(id: string): void {\n this.logger.info(`select device: ${id}`);\n this.selectDeviceCommand$.next(id);\n }\n\n /**\n * Creates an instance of AndroidControlledAudioOutput.\n *\n * @constructor\n * @param controlledDevices$ - The list of available output devices coming from the hosting application, ordered by preference order (most preferred first).\n * @param scope - The ObservableScope to create the Behaviors in.\n * @param initialIntent - The initial call intent (e.g. \"audio\" or \"video\") that can be used to determine the default audio routing (e.g. default to earpiece for audio calls and speaker for video calls).\n * @param controls - The controls provided by the hosting application to control the audio routing and notify of user actions.\n */\n public constructor(\n private readonly controlledDevices$: Observable<OutputDevice[]>,\n private readonly scope: ObservableScope,\n private initialIntent: RTCCallIntent | undefined = undefined,\n controls: Controls,\n ) {\n this.controllerState$ = this.startObservingState$();\n\n this.selected$ = this.effectiveSelectionFromState$(this.controllerState$);\n\n this.available$ = scope.behavior(\n this.controllerState$.pipe(\n map((state) => {\n this.logger.info(\"available devices updated:\", state.devices);\n\n return new Map<string, AudioOutputDeviceLabel>(\n state.devices.map((outputDevice) => {\n return [outputDevice.id, mapDeviceToLabel(outputDevice)];\n }),\n );\n }),\n ),\n );\n\n // Effect 1: notify host when effective selection changes\n this.selected$\n // It is a behavior so it has built-in distinct until change\n .pipe(scope.bind())\n .subscribe((device) => {\n // Let the hosting application know which output device has been selected.\n if (device !== undefined) {\n this.logger.info(\"onAudioDeviceSelect called:\", device);\n controls.onAudioDeviceSelect?.(device.id);\n // Also invoke the deprecated callback for backward compatibility\n // TODO: it appears that on Android the hosting application is only using the deprecated callback (onOutputDeviceSelect)\n // and not the new one (onAudioDeviceSelect), we should clean this up and only have one callback for audio device selection.\n controls.onOutputDeviceSelect?.(device.id);\n }\n });\n }\n\n private startObservingState$(): Behavior<ControllerState> {\n const initialState: ControllerState = {\n devices: [],\n preferredDeviceId: undefined,\n selectedDeviceId: undefined,\n };\n\n // Merge the two possible inputs observable as a single\n // stream of actions that will update the state of the controller.\n const actions$: Observable<ControllerAction> = merge(\n this.controlledDevices$.pipe(\n map(\n (devices) =>\n ({ type: \"deviceUpdated\", devices }) satisfies ControllerAction,\n ),\n ),\n this.selectDeviceCommand$.pipe(\n map(\n (deviceId) =>\n ({ type: \"selectDevice\", deviceId }) satisfies ControllerAction,\n ),\n ),\n );\n\n const initialAction: ControllerAction = {\n type: \"deviceUpdated\",\n devices: [],\n };\n\n return this.scope.behavior(\n actions$.pipe(\n startWith(initialAction),\n scan((state, action): ControllerState => {\n switch (action.type) {\n case \"deviceUpdated\": {\n const chosenDevice = this.chooseEffectiveSelection({\n previousDevices: state.devices,\n availableDevices: action.devices,\n currentSelectedId: state.selectedDeviceId,\n preferredDeviceId: state.preferredDeviceId,\n });\n\n return {\n ...state,\n devices: action.devices,\n selectedDeviceId: chosenDevice,\n };\n }\n case \"selectDevice\": {\n const chosenDevice = this.chooseEffectiveSelection({\n previousDevices: state.devices,\n availableDevices: state.devices,\n currentSelectedId: state.selectedDeviceId,\n preferredDeviceId: action.deviceId,\n });\n\n return {\n ...state,\n preferredDeviceId: action.deviceId,\n selectedDeviceId: chosenDevice,\n };\n }\n }\n }, initialState),\n ),\n );\n }\n\n private effectiveSelectionFromState$(\n state$: Observable<ControllerState>,\n ): Behavior<SelectedAudioOutputDevice | undefined> {\n return this.scope.behavior(\n state$\n .pipe(\n map((state) => {\n if (state.selectedDeviceId) {\n return {\n id: state.selectedDeviceId,\n /** This is an iOS thing, always false for android*/\n virtualEarpiece: false,\n };\n }\n return undefined;\n }),\n distinctUntilChanged((a, b) => a?.id === b?.id),\n )\n .pipe(\n tap((selected) => {\n this.logger.debug(`selected device: ${selected?.id}`);\n }),\n ),\n );\n }\n\n private chooseEffectiveSelection(args: {\n previousDevices: OutputDevice[];\n availableDevices: OutputDevice[];\n currentSelectedId: string | undefined;\n preferredDeviceId: string | undefined;\n }): string | undefined {\n const {\n previousDevices,\n availableDevices,\n currentSelectedId,\n preferredDeviceId,\n } = args;\n\n this.logger.debug(`chooseEffectiveSelection with args:`, args);\n\n // Take preferredDeviceId in priority or default to the last effective selection.\n const activeSelectedDeviceId = preferredDeviceId || currentSelectedId;\n const isAvailable = availableDevices.some(\n (device) => device.id === activeSelectedDeviceId,\n );\n\n // If there is no current device, or it is not available anymore,\n // choose the default device selection logic.\n if (activeSelectedDeviceId === undefined || !isAvailable) {\n this.logger.debug(\n `No current device or it is not available, using default selection logic.`,\n );\n // use the default selection logic\n return this.chooseDefaultDeviceId(availableDevices);\n }\n\n // Is there a new added device?\n // If a device is added, we might want to switch to it if it's more preferred than the currently selected device.\n const newDeviceWasAdded = availableDevices.some(\n (device) => !previousDevices.some((d) => d.id === device.id),\n );\n\n if (newDeviceWasAdded) {\n // TODO only want to check from the added device, not all devices.?\n // check if the currently selected device is the most preferred one, if not switch to the most preferred one.\n const mostPreferredDevice = availableDevices[0];\n this.logger.debug(\n `A new device was added, checking if we should switch to it.`,\n mostPreferredDevice,\n );\n if (mostPreferredDevice.id !== activeSelectedDeviceId) {\n // Given this is automatic switching, we want to be careful and only switch to a more private device\n // (e.g. from speaker to a BT headset) but not switch from a more private device to a less private one\n // (e.g. from a BT headset to the speaker), as that can be disruptive for the user if it happens unexpectedly.\n if (mostPreferredDevice.isExternalHeadset == true) {\n this.logger.info(\n `The currently selected device ${mostPreferredDevice.id} is not the most preferred one, switching to the most preferred one ${activeSelectedDeviceId} instead.`,\n );\n // Let's switch as it is a more private device.\n return mostPreferredDevice.id;\n }\n }\n }\n\n // no changes\n return activeSelectedDeviceId;\n }\n\n /**\n * The logic for the default is different based on the call type.\n * For example for a voice call we want to default to the earpiece if it's available,\n * but for a video call we want to default to the speaker.\n * If the user is using a BT headset we want to default to that, as it's likely what they want to use for both video and voice calls.\n *\n * @param available the available audio output devices to choose from, keyed by their id, sorted by likelihood of it being used for communication.\n *\n */\n private chooseDefaultDeviceId(available: OutputDevice[]): string | undefined {\n this.logger.debug(\n `Android routing logic intent: ${this.initialIntent} finding best default...`,\n );\n if (this.initialIntent === \"audio\") {\n const systemProposed = available[0];\n // If no headset is connected, android will route to the speaker by default,\n // but for a voice call we want to route to the earpiece instead,\n // so override the system proposed routing in that case.\n if (systemProposed?.isSpeaker == true) {\n // search for the earpiece\n const earpieceDevice = available.find(\n (device) => device.isEarpiece == true,\n );\n if (earpieceDevice) {\n this.logger.debug(\n `Android routing: Switch to earpiece instead of speaker for voice call`,\n );\n return earpieceDevice.id;\n } else {\n this.logger.debug(\n `Android routing: no earpiece found, cannot switch, use system proposed routing`,\n );\n return systemProposed.id;\n }\n } else {\n this.logger.debug(\n `Android routing: Use system proposed routing `,\n systemProposed,\n );\n return systemProposed?.id;\n }\n } else {\n // Use the system best proposed best routing.\n return available[0]?.id;\n }\n }\n}\n\n// Utilities\nfunction mapDeviceToLabel(device: OutputDevice): AudioOutputDeviceLabel {\n const { name, isEarpiece, isSpeaker } = device;\n if (isEarpiece) return { type: \"earpiece\" };\n else if (isSpeaker) return { type: \"speaker\" };\n else return { type: \"name\", name };\n}\n","/*\nCopyright 2026 Element Corp.\n\nSPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE in the repository root for full details.\n*/\n\nimport { logger as rootLogger } from \"matrix-js-sdk/lib/logger\";\nimport { combineLatest, merge, startWith, Subject, tap } from \"rxjs\";\n\nimport type { RTCCallIntent } from \"matrix-js-sdk/lib/matrixrtc\";\nimport {\n availableOutputDevices$ as controlledAvailableOutputDevices$,\n outputDevice$ as controlledOutputSelection$,\n} from \"../controls.ts\";\nimport type { Behavior } from \"./Behavior.ts\";\nimport type { ObservableScope } from \"./ObservableScope.ts\";\nimport {\n type AudioOutputDeviceLabel,\n availableRawDevices$,\n iosDeviceMenu$,\n type MediaDevice,\n type SelectedAudioOutputDevice,\n} from \"./MediaDevices.ts\";\n\n// This hardcoded id is used in EX ios! It can only be changed in coordination with\n// the ios swift team.\nexport const EARPIECE_CONFIG_ID = \"earpiece-id\";\n\n/**\n * A special implementation of audio output that allows the hosting application\n * to have more control over the device selection process. This is used when the\n * `controlledAudioDevices` URL parameter is set, which is currently only true on mobile.\n */\nexport class IOSControlledAudioOutput implements MediaDevice<\n AudioOutputDeviceLabel,\n SelectedAudioOutputDevice\n> {\n private logger = rootLogger.getChild(\"[MediaDevices ControlledAudioOutput]\");\n // We need to subscribe to the raw devices so that the OS does update the input\n // back to what it was before. otherwise we will switch back to the default\n // whenever we allocate a new stream.\n public readonly availableRaw$ = availableRawDevices$(\n \"audiooutput\",\n this.usingNames$,\n this.scope,\n this.logger,\n );\n\n public readonly available$ = this.scope.behavior(\n combineLatest(\n [controlledAvailableOutputDevices$.pipe(startWith([])), iosDeviceMenu$],\n (availableRaw, iosDeviceMenu) => {\n const available = new Map<string, AudioOutputDeviceLabel>(\n availableRaw.map(\n ({ id, name, isEarpiece, isSpeaker /*,isExternalHeadset*/ }) => {\n let deviceLabel: AudioOutputDeviceLabel;\n // if (isExternalHeadset) // Do we want this?\n if (isEarpiece) deviceLabel = { type: \"earpiece\" };\n else if (isSpeaker) deviceLabel = { type: \"speaker\" };\n else deviceLabel = { type: \"name\", name };\n return [id, deviceLabel];\n },\n ),\n );\n\n // Create a virtual earpiece device in case a non-earpiece device is\n // designated for this purpose\n if (iosDeviceMenu && availableRaw.some((d) => d.forEarpiece)) {\n this.logger.info(\n `IOS Add virtual earpiece device with id ${EARPIECE_CONFIG_ID}`,\n );\n available.set(EARPIECE_CONFIG_ID, { type: \"earpiece\" });\n }\n\n return available;\n },\n ),\n );\n\n private readonly deviceSelection$ = new Subject<string>();\n\n public select(id: string): void {\n this.logger.info(`select device: ${id}`);\n this.deviceSelection$.next(id);\n }\n\n public readonly selected$ = this.scope.behavior(\n combineLatest(\n [\n this.available$,\n merge(\n controlledOutputSelection$.pipe(startWith(undefined)),\n this.deviceSelection$,\n ),\n ],\n (available, preferredId) => {\n const id = preferredId ?? this.chooseDefaultId(available);\n return id === undefined\n ? undefined\n : { id, virtualEarpiece: id === EARPIECE_CONFIG_ID };\n },\n ).pipe(\n tap((selected) => {\n this.logger.debug(`selected device: ${selected?.id}`);\n }),\n ),\n );\n\n /**\n * Chooses the default output device when no explicit selection (from the user\n * or the hosting application) has been made yet.\n *\n * For voice calls (`initialIntent === \"audio\"`) we want to start on the\n * earpiece rather than the speaker, like a regular phone call. We only\n * override when the device that would otherwise be the default is the\n * speaker: if the host already routed to a headset (e.g. Bluetooth) — which\n * is reported as a plain named device, not \"speaker\"/\"earpiece\" — we keep it.\n * This mirrors the Android behaviour in {@link AndroidControlledAudioOutput}.\n */\n private chooseDefaultId(\n available: Map<string, AudioOutputDeviceLabel>,\n ): string | undefined {\n const firstId = available.keys().next().value;\n if (this.initialIntent === \"audio\") {\n const firstLabel =\n firstId !== undefined ? available.get(firstId) : undefined;\n if (firstLabel?.type === \"speaker\") {\n for (const [id, label] of available)\n if (label.type === \"earpiece\") {\n this.logger.info(\n `IOS routing: default to earpiece ${id} instead of speaker for voice call`,\n );\n return id;\n }\n }\n }\n return firstId;\n }\n\n public constructor(\n private readonly usingNames$: Behavior<boolean>,\n private readonly scope: ObservableScope,\n private readonly initialIntent: RTCCallIntent | undefined = undefined,\n ) {\n this.selected$.subscribe((device) => {\n // Let the hosting application know which output device has been selected.\n // This information is probably only of interest if the earpiece mode has\n // been selected - for example, Element X iOS listens to this to determine\n // whether it should enable the proximity sensor.\n if (device !== undefined) {\n this.logger.info(\"onAudioDeviceSelect called:\"