polfan-server-js-client 0.1.99 → 0.1.992
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +43 -21
- package/build/index.js.map +1 -1
- package/build/types/state-tracker/MessagesManager.d.ts +2 -1
- package/build/types/types/src/schemes/events/FollowedTopics.d.ts +2 -0
- package/package.json +1 -1
- package/src/state-tracker/MessagesManager.ts +31 -16
- package/src/types/dist/schemes/events/FollowedTopics.d.ts +2 -0
- package/src/types/src/schemes/events/FollowedTopics.ts +2 -0
package/build/index.js
CHANGED
|
@@ -722,7 +722,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
722
722
|
key: "cacheSpaceFollowedTopic",
|
|
723
723
|
value: function () {
|
|
724
724
|
var _cacheSpaceFollowedTopic = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(spaceId) {
|
|
725
|
-
var result;
|
|
725
|
+
var roomIds, result;
|
|
726
726
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
727
727
|
while (1) {
|
|
728
728
|
switch (_context2.prev = _context2.next) {
|
|
@@ -737,21 +737,33 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
737
737
|
throw new Error("You are not in space ".concat(spaceId));
|
|
738
738
|
case 4:
|
|
739
739
|
_context2.next = 6;
|
|
740
|
+
return this.tracker.rooms.get();
|
|
741
|
+
case 6:
|
|
742
|
+
roomIds = _context2.sent.findBy('spaceId', spaceId).items.map(function (room) {
|
|
743
|
+
return room.id;
|
|
744
|
+
});
|
|
745
|
+
if (roomIds.length) {
|
|
746
|
+
_context2.next = 9;
|
|
747
|
+
break;
|
|
748
|
+
}
|
|
749
|
+
return _context2.abrupt("return");
|
|
750
|
+
case 9:
|
|
751
|
+
_context2.next = 11;
|
|
740
752
|
return this.tracker.client.send('GetFollowedTopics', {
|
|
741
753
|
location: {
|
|
742
754
|
spaceId: spaceId
|
|
743
755
|
}
|
|
744
756
|
});
|
|
745
|
-
case
|
|
757
|
+
case 11:
|
|
746
758
|
result = _context2.sent;
|
|
747
759
|
if (!result.error) {
|
|
748
|
-
_context2.next =
|
|
760
|
+
_context2.next = 14;
|
|
749
761
|
break;
|
|
750
762
|
}
|
|
751
763
|
throw result.error;
|
|
752
|
-
case
|
|
753
|
-
this.setFollowedTopicsArray(result.data.followedTopics);
|
|
754
|
-
case
|
|
764
|
+
case 14:
|
|
765
|
+
this.setFollowedTopicsArray(roomIds, result.data.followedTopics);
|
|
766
|
+
case 15:
|
|
755
767
|
case "end":
|
|
756
768
|
return _context2.stop();
|
|
757
769
|
}
|
|
@@ -764,7 +776,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
764
776
|
return cacheSpaceFollowedTopic;
|
|
765
777
|
}()
|
|
766
778
|
/**
|
|
767
|
-
* Get
|
|
779
|
+
* Get followed topics for the given room.
|
|
768
780
|
* @return Undefined if you are not in the room, collection otherwise.
|
|
769
781
|
*/
|
|
770
782
|
}, {
|
|
@@ -810,7 +822,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
810
822
|
}
|
|
811
823
|
throw result.error;
|
|
812
824
|
case 5:
|
|
813
|
-
_this2.setFollowedTopicsArray(result.data.followedTopics);
|
|
825
|
+
_this2.setFollowedTopicsArray([roomId], result.data.followedTopics);
|
|
814
826
|
case 6:
|
|
815
827
|
case "end":
|
|
816
828
|
return _context3.stop();
|
|
@@ -1020,7 +1032,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
1020
1032
|
}, {
|
|
1021
1033
|
key: "handleTopicFollowed",
|
|
1022
1034
|
value: function handleTopicFollowed(ev) {
|
|
1023
|
-
this.setFollowedTopicsArray([ev.followedTopic]);
|
|
1035
|
+
this.setFollowedTopicsArray([ev.followedTopic.location.roomId], [ev.followedTopic]);
|
|
1024
1036
|
}
|
|
1025
1037
|
}, {
|
|
1026
1038
|
key: "handleTopicUnfollowed",
|
|
@@ -1031,7 +1043,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
1031
1043
|
}, {
|
|
1032
1044
|
key: "handleRoomDeleted",
|
|
1033
1045
|
value: function handleRoomDeleted(ev) {
|
|
1034
|
-
this.
|
|
1046
|
+
this.clearRoomFollowedTopicsStructures(ev.id);
|
|
1035
1047
|
}
|
|
1036
1048
|
}, {
|
|
1037
1049
|
key: "handleRoomJoin",
|
|
@@ -1039,11 +1051,12 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
1039
1051
|
if (ev.room.defaultTopic) {
|
|
1040
1052
|
this.createHistoryForNewTopic(ev.room.id, ev.room.defaultTopic);
|
|
1041
1053
|
}
|
|
1054
|
+
this.clearRoomFollowedTopicsStructures(ev.room.id);
|
|
1042
1055
|
}
|
|
1043
1056
|
}, {
|
|
1044
1057
|
key: "handleRoomLeft",
|
|
1045
1058
|
value: function handleRoomLeft(ev) {
|
|
1046
|
-
this.
|
|
1059
|
+
this.clearRoomFollowedTopicsStructures(ev.id);
|
|
1047
1060
|
}
|
|
1048
1061
|
}, {
|
|
1049
1062
|
key: "handleNewTopic",
|
|
@@ -1105,7 +1118,7 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
1105
1118
|
value: function updateLocallyFollowedTopicOnNewMessage(ev) {
|
|
1106
1119
|
var _this$tracker$me;
|
|
1107
1120
|
var roomFollowedTopics = this.followedTopics.get(ev.location.roomId);
|
|
1108
|
-
var followedTopic = roomFollowedTopics.get(ev.location.topicId);
|
|
1121
|
+
var followedTopic = roomFollowedTopics === null || roomFollowedTopics === void 0 ? void 0 : roomFollowedTopics.get(ev.location.topicId);
|
|
1109
1122
|
if (!roomFollowedTopics || !followedTopic) {
|
|
1110
1123
|
// Skip if we don't follow this room or targeted topic
|
|
1111
1124
|
return;
|
|
@@ -1130,24 +1143,33 @@ var MessagesManager = /*#__PURE__*/function () {
|
|
|
1130
1143
|
}
|
|
1131
1144
|
}, {
|
|
1132
1145
|
key: "setFollowedTopicsArray",
|
|
1133
|
-
value: function setFollowedTopicsArray(followedTopics) {
|
|
1146
|
+
value: function setFollowedTopicsArray(roomIds, followedTopics) {
|
|
1147
|
+
var _this4 = this;
|
|
1134
1148
|
var roomToTopics = {};
|
|
1135
1149
|
|
|
1136
|
-
// Reassign
|
|
1150
|
+
// Reassign followed topics to limit collection change event emit
|
|
1137
1151
|
followedTopics.forEach(function (followedTopic) {
|
|
1138
1152
|
var _followedTopic$locati, _roomToTopics$_follow;
|
|
1139
1153
|
(_roomToTopics$_follow = roomToTopics[_followedTopic$locati = followedTopic.location.roomId]) !== null && _roomToTopics$_follow !== void 0 ? _roomToTopics$_follow : roomToTopics[_followedTopic$locati] = [];
|
|
1140
1154
|
roomToTopics[followedTopic.location.roomId].push(followedTopic);
|
|
1141
1155
|
});
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
return report.location.topicId;
|
|
1156
|
+
roomIds.forEach(function (roomId) {
|
|
1157
|
+
if (!_this4.followedTopics.has(roomId)) {
|
|
1158
|
+
_this4.followedTopics.set([roomId, new ObservableIndexedObjectCollection(function (followedTopic) {
|
|
1159
|
+
return followedTopic.location.topicId;
|
|
1147
1160
|
})]);
|
|
1148
1161
|
}
|
|
1149
|
-
|
|
1150
|
-
|
|
1162
|
+
if (roomToTopics[roomId]) {
|
|
1163
|
+
var _this4$followedTopics;
|
|
1164
|
+
(_this4$followedTopics = _this4.followedTopics.get(roomId)).set.apply(_this4$followedTopics, MessagesManager_toConsumableArray(roomToTopics[roomId]));
|
|
1165
|
+
}
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
}, {
|
|
1169
|
+
key: "clearRoomFollowedTopicsStructures",
|
|
1170
|
+
value: function clearRoomFollowedTopicsStructures(roomId) {
|
|
1171
|
+
this.followedTopics["delete"](roomId);
|
|
1172
|
+
this.followedTopicsPromises.forget(roomId);
|
|
1151
1173
|
}
|
|
1152
1174
|
}]);
|
|
1153
1175
|
return MessagesManager;
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;UCVA;UACA;;;;;WCDA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACGO,IAAMA,WAAW;EAAA;IAAA;IAAA,gCACoB,IAAIC,GAAG,EAAkC;IAAA,oCACrC,IAAIA,GAAG,EAAkC;EAAA;EAAA;IAAA;IAAA,OAErF,YAAUC,SAAiB,EAAEC,OAA6B,EAAQ;MAC9D,IAAI,CAACC,UAAU,CAAC,IAAI,CAACC,MAAM,EAAEH,SAAS,EAAEC,OAAO,CAAC;MAChD,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,OAED,cAAYD,SAAiB,EAAEC,OAA6B,EAAQ;MAChE,IAAI,CAACC,UAAU,CAAC,IAAI,CAACE,UAAU,EAAEJ,SAAS,EAAEC,OAAO,CAAC;MACpD,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,OAED,aAAWD,SAAiB,EAAEC,OAA6B,EAAQ;MAAA;MAC/D,IAAMI,KAAK,uBAAG,IAAI,CAACF,MAAM,CAACG,GAAG,CAACN,SAAS,CAAC,qDAA1B,iBAA4BO,OAAO,CAACN,OAAO,CAAC;MAC1D,IAAI,CAACI,KAAK,IAAIA,KAAK,GAAG,CAAC,EAAE;QACrB,OAAO,IAAI;MACf;MACA,IAAI,CAACF,MAAM,CAACG,GAAG,CAACN,SAAS,CAAC,CAACQ,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;IAC/C;EAAC;IAAA;IAAA,OAED,cAAYL,SAAiB,EAAES,KAAc,EAAQ;MACjD,IAAI,CAACC,YAAY,CAAC,IAAI,CAACP,MAAM,EAAEH,SAAS,EAAES,KAAK,CAAC;MAChD,IAAI,CAACC,YAAY,CAAC,IAAI,CAACN,UAAU,EAAEJ,SAAS,EAAES,KAAK,CAAC;MACpD,IAAI,CAACL,UAAU,UAAO,CAACJ,SAAS,CAAC;MACjC,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,OAED,oBAAmBW,GAAwB,EAAEX,SAAiB,EAAEC,OAA6B,EAAQ;MAAA;MACjG,IAAMW,QAAQ,eAAGD,GAAG,CAACL,GAAG,CAACN,SAAS,CAAC,+CAAI,EAAE;MACzCY,QAAQ,CAACC,IAAI,CAACZ,OAAO,CAAC;MACtBU,GAAG,CAACG,GAAG,CAACd,SAAS,EAAEY,QAAQ,CAAC;IAChC;EAAC;IAAA;IAAA,OAED,sBAAqBD,GAAwB,EAAEX,SAAiB,EAAES,KAAa,EAAQ;MAAA;MACnF,aAAAE,GAAG,CAACL,GAAG,CAACN,SAAS,CAAC,8CAAlB,UAAoBe,OAAO,CAAC,UAAAC,QAAQ;QAAA,OAAIA,QAAQ,CAACP,KAAK,CAAC;MAAA,EAAC;IAC5D;EAAC;EAAA;AAAA;;;;;;;;;;;;;;;;;;AC0BqC;AAInC,IAAeQ,kBAAkB;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,qFAC+B,IAAIlB,GAAG,EAAmC;IAAA,gFAC7E,CAAC;IAAA;EAAA;EAAA;IAAA;IAAA,OAKjC,YACKC,SAA6B,EAAEC,OAA8C,EAAQ;MACtF,kFAAgBD,SAAS,EAAEC,OAAO;IACtC;EAAC;IAAA;IAAA,OAED,cACKD,SAAoB,EAAEC,OAA8C,EAAQ;MAC7E,oFAAkBD,SAAS,EAAEC,OAAO;IACxC;EAAC;IAAA;IAAA,OAED,wBAAmCiB,IAAY,EAAEC,IAAc,EAAsB;MACjF,OAAO;QACHD,IAAI,EAAJA,IAAI;QAAEC,IAAI,EAAJA,IAAI;QAAEC,GAAG,EAAE,CAAC,EAAE,IAAI,CAACC,WAAW,EAAEC,QAAQ;MAClD,CAAC;IACL;EAAC;IAAA;IAAA,OAED,0CACyCC,QAA4C,EAChC;MAAA;MACjD,OAAO,IAAIC,OAAO,CAAC;QAAA,mCAAIC,IAAI;UAAJA,IAAI;QAAA;QAAA,OACvB,MAAI,CAACC,gBAAgB,CAACZ,GAAG,CAACS,QAAQ,CAACH,GAAG,EAAYK,IAAI,CAAC;MAAA,EAAC;IAChE;EAAC;IAAA;IAAA,OAED,gCAAiCF,QAAkB,EAAQ;MACvD,IAAI,CAAC,IAAI,CAACG,gBAAgB,CAACC,GAAG,CAACJ,QAAQ,CAACH,GAAG,CAAC,EAAE;QAC1C;MACJ;MACA,IAAMQ,OAAO,GAAGL,QAAQ,CAACL,IAAI,KAAK,OAAO;MACzC,IAAI,CAACQ,gBAAgB,CAACpB,GAAG,CAACiB,QAAQ,CAACH,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvCD,IAAI,EAAES,OAAO,GAAG,IAAI,GAAGL,QAAQ,CAACJ,IAAI;QACpCU,KAAK,EAAED,OAAO,GAAGL,QAAQ,CAACJ,IAAI,GAAG;MACrC,CAAC,CAAuB;MACxB,IAAI,CAACO,gBAAgB,UAAO,CAACH,QAAQ,CAACH,GAAG,CAAC;IAC9C;EAAC;IAAA;IAAA,OAED,iCAAkCG,QAAkB,EAAEM,KAAU,EAAQ;MACpE,IAAI,CAAC,IAAI,CAACH,gBAAgB,CAACC,GAAG,CAACJ,QAAQ,CAACH,GAAG,CAAC,EAAE;QAC1C;MACJ;MACA,IAAI,CAACM,gBAAgB,CAACpB,GAAG,CAACiB,QAAQ,CAACH,GAAG,CAAC,CAAC,CAAC,CAAC,CAACS,KAAK,CAAC;MACjD,IAAI,CAACH,gBAAgB,UAAO,CAACH,QAAQ,CAACH,GAAG,CAAC;IAC9C;EAAC;EAAA;AAAA,EAhD4CtB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;AC5EG;AAExD,IAAMgC,iBAAiB;EAG1B,6BAA6D;IAAA,IAA1CC,KAAmC,uEAAG,EAAE;IAAA;IAAA,uDAFrB,IAAIhC,GAAG,EAAE;IAG3C,IAAI,CAACe,GAAG,OAAR,IAAI,qBAAQiB,KAAK,EAAC;EACtB;EAAC;IAAA;IAAA,KAED,eAAsC;MAClC,OAAO,IAAI,CAACC,MAAM;IACtB;EAAC;IAAA;IAAA,KAED,eAA4B;MACxB,OAAO,IAAI,CAACA,MAAM,CAACC,IAAI;IAC3B;EAAC;IAAA;IAAA,OAED,eAA6C;MAAA,kCAA/BF,KAAK;QAALA,KAAK;MAAA;MACf,0BAAmBA,KAAK,4BAAE;QAArB,IAAMG,KAAI;QACX,IAAI,CAACF,MAAM,CAAClB,GAAG,CAACoB,KAAI,CAAC,CAAC,CAAC,EAAEA,KAAI,CAAC,CAAC,CAAC,CAAC;MACrC;IACJ;EAAC;IAAA;IAAA,OAED,aAAWC,EAAQ,EAAsB;MACrC,OAAO,IAAI,CAACJ,KAAK,CAACzB,GAAG,CAAC6B,EAAE,CAAC;IAC7B;EAAC;IAAA;IAAA,OAED,aAAWA,EAAQ,EAAW;MAC1B,OAAO,IAAI,CAACJ,KAAK,CAACJ,GAAG,CAACQ,EAAE,CAAC;IAC7B;EAAC;IAAA;IAAA,OAED,mBAAoC;MAAA,mCAAnBC,GAAG;QAAHA,GAAG;MAAA;MAChB,yBAAiBA,GAAG,4BAAE;QAAjB,IAAMD,GAAE;QACT,IAAI,CAACJ,KAAK,UAAO,CAACI,GAAE,CAAC;MACzB;IACJ;EAAC;IAAA;IAAA,OAED,qBAAyB;MACrB,IAAI,CAACJ,KAAK,CAACM,KAAK,EAAE;IACtB;EAAC;IAAA;IAAA,OAED,gBAAcC,KAAmB,EAAEC,WAAgB,EAAyD;MAAA,IAAvDC,KAAa,uEAAG,IAAI;MACrE,IAAMC,MAAM,GAAG,IAAIX,iBAAiB,EAAgB;MACpD,IAAII,IAAI;MACR,OAAO,CAAC,CAACA,IAAI,GAAG,IAAI,CAACH,KAAK,CAACW,OAAO,EAAE,CAACC,IAAI,EAAE,CAACC,KAAK,EAAEC,IAAI,EAAE;QACrD,IAAIL,KAAK,IAAIC,MAAM,CAACK,MAAM,KAAKN,KAAK,EAAE;UAClC;QACJ;QACA,IAAIN,IAAI,CAAC,CAAC,CAAC,CAACI,KAAK,CAAC,KAAKC,WAAW,EAAE;UAChCE,MAAM,CAAC3B,GAAG,CAACoB,IAAI,CAAC;QACpB;MACJ;MACA,OAAOO,MAAM;IACjB;EAAC;IAAA;IAAA,OAED,aAAuBzB,QAA6C,EAAU;MAC1E,OAAO+B,KAAK,CAACC,IAAI,CAAC,IAAI,CAACjB,KAAK,CAACW,OAAO,EAAE,CAAC,CAAC/B,GAAG,CAAC,UAACsC,KAAK;QAAA,OAAKjC,QAAQ,CAACiC,KAAK,CAAC,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;IACxF;EAAC;EAAA;AAAA;AAGE,IAAMC,uBAAuB;EAGhC,iCACoBf,EAAgC,EAElD;IAAA,IADEJ,KAAU,uEAAG,EAAE;IAAA;IAAA,KADCI,EAAgC,GAAhCA,EAAgC;IAAA;IAGhD,IAAI,CAACH,MAAM,GAAG,IAAIF,iBAAiB,EAAa;IAChD,IAAI,CAAChB,GAAG,OAAR,IAAI,qBAAQiB,KAAK,EAAC;EACtB;EAAC;IAAA;IAAA,KAED,eAAwB;MACpB,OAAOgB,KAAK,CAACC,IAAI,CAAC,IAAI,CAAChB,MAAM,CAACD,KAAK,CAACoB,MAAM,EAAE,CAAC;IACjD;EAAC;IAAA;IAAA,KAED,eAA4B;MACxB,OAAO,IAAI,CAACnB,MAAM,CAACc,MAAM;IAC7B;EAAC;IAAA;IAAA,OAED,eAAgC;MAAA;QAAA;MAAA,mCAAlBf,KAAK;QAALA,KAAK;MAAA;MACf,oBAAI,CAACC,MAAM,EAAClB,GAAG,wCAAKiB,KAAK,CAACpB,GAAG,CAAC,UAAAuB,IAAI;QAAA,OAAI,CAAC,KAAI,CAACkB,KAAK,CAAClB,IAAI,CAAC,EAAEA,IAAI,CAAC;MAAA,CAAe,CAAC,EAAE;IACpF;EAAC;IAAA;IAAA,OAED,aAAWC,EAAO,EAAiB;MAC/B,OAAO,IAAI,CAACH,MAAM,CAAC1B,GAAG,CAAC6B,EAAE,CAAC;IAC9B;EAAC;IAAA;IAAA,OAED,eAAa9B,KAAa,EAAiB;MACvC,OAAO,IAAI,CAAC0B,KAAK,CAAC1B,KAAK,CAAC;IAC5B;EAAC;IAAA;IAAA,OAED,aAAW8B,EAAO,EAAW;MACzB,OAAO,IAAI,CAACH,MAAM,CAACL,GAAG,CAACQ,EAAE,CAAC;IAC9B;EAAC;IAAA;IAAA,OAED,mBAAmC;MAAA;MAC/B,qBAAI,CAACH,MAAM,WAAO,gCAAQ;IAC9B;EAAC;IAAA;IAAA,OAED,qBAAyB;MACrB,IAAI,CAACA,MAAM,CAACqB,SAAS,EAAE;IAC3B;EAAC;IAAA;IAAA,OAED,gBAAcf,KAAc,EAAEC,WAAgB,EAAoD;MAAA,IAAlDC,KAAa,uEAAG,IAAI;MAChE,IAAMC,MAAM,GAAG,IAAIS,uBAAuB,CAAI,IAAI,CAACf,EAAE,CAAC;MAAC,2CACnC,IAAI,CAACJ,KAAK;QAAA;MAAA;QAA9B,oDAAgC;UAAA,IAArBa,MAAK;UACZ,IAAIJ,KAAK,IAAIC,MAAM,CAACK,MAAM,KAAKN,KAAK,EAAE;YAClC;UACJ;UACA,IAAII,MAAK,CAACN,KAAK,CAAC,KAAKC,WAAW,EAAE;YAC9BE,MAAM,CAAC3B,GAAG,CAAC8B,MAAK,CAAC;UACrB;QACJ;MAAC;QAAA;MAAA;QAAA;MAAA;MACD,OAAOH,MAAM;IACjB;EAAC;IAAA;IAAA,OAED,aAAuBzB,QAAsD,EAAU;MACnF,OAAO,IAAI,CAACe,KAAK,CAACpB,GAAG,CAACK,QAAQ,CAAC;IACnC;EAAC;IAAA;IAAA,OAED,eAAgBkB,IAAO,EAAO;MAC1B,OAAO,OAAO,IAAI,CAACC,EAAE,KAAK,UAAU,GAAG,IAAI,CAACA,EAAE,CAACD,IAAI,CAAC,GAAGA,IAAI,CAAC,IAAI,CAACC,EAAE,CAAC;IACxE;EAAC;EAAA;AAAA;AAQE,IAAMmB,2BAA2B;EAAA;EAAA;EAGpC,uCAA6D;IAAA;IAAA;IAAA,IAA1CvB,KAAmC,uEAAG,EAAE;IAAA;IACvD;IAAQ;IACR,OAAKwB,WAAW,GAAG,IAAIzD,WAAW,EAAmC;IACrE,kBAAKgB,GAAG,kCAAIiB,KAAK,EAAC;IAAC;EACvB;EAAC;IAAA;IAAA,OAED,eAAuC;MAAA,mCAAzBA,KAAK;QAALA,KAAK;MAAA;MACf,IAAIA,KAAK,CAACe,MAAM,EAAE;QAAA;QACd,kKAAaf,KAAK;QAClB,IAAI,CAACwB,WAAW,CAACC,IAAI,CAAC,QAAQ,EAAE;UAACC,QAAQ,EAAE1B,KAAK,CAACpB,GAAG,CAAC,UAAAuB,IAAI;YAAA,OAAIA,IAAI,CAAC,CAAC,CAAC;UAAA;QAAC,CAAC,CAAC;MAC3E;IACJ;EAAC;IAAA;IAAA,OAED,mBAA8B;MAAA,mCAAbE,GAAG;QAAHA,GAAG;MAAA;MAChB,IAAIA,GAAG,CAACU,MAAM,EAAE;QAAA;QACZ,qKAAgBV,GAAG;QACnB,IAAI,CAACmB,WAAW,CAACC,IAAI,CAAC,QAAQ,EAAE;UAACE,YAAY,EAAEtB;QAAG,CAAC,CAAC;MACxD;IACJ;EAAC;IAAA;IAAA,OAED,qBAAmB;MACf,IAAI,IAAI,CAACU,MAAM,EAAE;QACb,IAAMV,GAAG,GAAG,IAAI,CAACJ,MAAM,CAAC2B,IAAI,EAAE;QAC9B;QACA,IAAI,CAACJ,WAAW,CAACC,IAAI,CAAC,QAAQ,EAAE;UAACE,YAAY,EAAEX,KAAK,CAACC,IAAI,CAACZ,GAAG;QAAC,CAAC,CAAC;MACpE;IACJ;EAAC;IAAA;IAAA,OAED,YAAUpC,SAAmB,EAAEC,OAAuD,EAAQ;MAC1F,IAAI,CAACsD,WAAW,CAACK,EAAE,CAAC5D,SAAS,EAAEC,OAAO,CAAC;MACvC,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,OAED,cAAYD,SAAmB,EAAEC,OAAuD,EAAQ;MAC5F,IAAI,CAACsD,WAAW,CAACM,IAAI,CAAC7D,SAAS,EAAEC,OAAO,CAAC;MACzC,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,OAED,aAAWD,SAAiB,EAAEC,OAAuD,EAAQ;MACzF,IAAI,CAACsD,WAAW,CAACO,GAAG,CAAC9D,SAAS,EAAEC,OAAO,CAAC;MACxC,OAAO,IAAI;IACf;EAAC;EAAA;AAAA,EA5C0D6B,iBAAiB;AA+CzE,IAAMiC,iCAAiC;EAAA;EAAA;EAG1C,2CACoB5B,EAAmC,EAErD;IAAA;IAAA;IAAA,IADEJ,KAAU,uEAAG,EAAE;IAAA;IAEf,4BAAMI,EAAE;IAAE,OAHMA,EAAmC,GAAnCA,EAAmC;IAAA;IAInD,OAAKoB,WAAW,GAAG,IAAIzD,WAAW,EAAE;IACpC,kBAAKgB,GAAG,kCAAIiB,KAAK,EAAC;IAAC;EACvB;EAAC;IAAA;IAAA,OAED,eAA0B;MAAA;MAAA,mCAAZA,KAAK;QAALA,KAAK;MAAA;MACf,IAAIA,KAAK,CAACe,MAAM,EAAE;QAAA;QACd,wKAAaf,KAAK;QAClB,IAAI,CAACwB,WAAW,CAACC,IAAI,CAAC,QAAQ,EAAE;UAACC,QAAQ,EAAE1B,KAAK,CAACpB,GAAG,CAAC,UAAAuB,IAAI;YAAA,OAAI,MAAI,CAACkB,KAAK,CAAClB,IAAI,CAAC;UAAA;QAAC,CAAC,CAAC;MACpF;IACJ;EAAC;IAAA;IAAA,OAED,mBAAgC;MAAA,mCAAfE,GAAG;QAAHA,GAAG;MAAA;MAChB,IAAIA,GAAG,CAACU,MAAM,EAAE;QAAA;QACZ,2KAAgBV,GAAG;QACnB,IAAI,CAACmB,WAAW,CAACC,IAAI,CAAC,QAAQ,EAAE;UAACE,YAAY,EAAEtB;QAAG,CAAC,CAAC;MACxD;IACJ;EAAC;IAAA;IAAA,OAED,qBAAmB;MACf,IAAI,IAAI,CAACU,MAAM,EAAE;QACb,IAAMV,GAAG,GAAG,IAAI,CAACJ,MAAM,CAACD,KAAK,CAAC4B,IAAI,EAAE;QACpC;QACA,IAAI,CAACJ,WAAW,CAACC,IAAI,CAAC,QAAQ,EAAE;UAACE,YAAY,EAAEX,KAAK,CAACC,IAAI,CAACZ,GAAG;QAAC,CAAC,CAAC;MACpE;IACJ;EAAC;IAAA;IAAA,OAED,YAAUpC,SAAmB,EAAEC,OAAyD,EAAQ;MAC5F,IAAI,CAACsD,WAAW,CAACK,EAAE,CAAC5D,SAAS,EAAEC,OAAO,CAAC;MACvC,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,OAED,cAAYD,SAAmB,EAAEC,OAAyD,EAAQ;MAC9F,IAAI,CAACsD,WAAW,CAACM,IAAI,CAAC7D,SAAS,EAAEC,OAAO,CAAC;MACzC,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,OAED,aAAWD,SAAiB,EAAEC,OAAyD,EAAQ;MAC3F,IAAI,CAACsD,WAAW,CAACO,GAAG,CAAC9D,SAAS,EAAEC,OAAO,CAAC;MACxC,OAAO,IAAI;IACf;EAAC;EAAA;AAAA,EA/CqDiD,uBAAuB;;;;;;;;;ACjLpB;AAEtD,IAAMc,YAAY,uCAIrB,wBAAqB;EAAA;EAAA;EAAA;EAAA;EACjB,IAAI,CAACC,OAAO,GAAG,IAAIzC,OAAO,CAAO,UAAC0C,OAAO;IAAA,OAAK,KAAI,CAACA,OAAO,GAAGA,OAAO;EAAA,EAAC;AACzE,CAAC;AAGE,IAAMC,eAAe;EAAA;IAAA;IAAA,4CACL,IAAIrC,iBAAiB,EAAwB;EAAA;EAAA;IAAA;IAAA,OAEhE,kBAAyBmC,OAAmB,EAAEG,GAAW,EAAQ;MAC7D,IAAI,CAACC,QAAQ,CAACvD,GAAG,CAAC,CAACsD,GAAG,EAAEH,OAAO,CAAC,CAAC;IACrC;EAAC;IAAA;IAAA,OAED,4BAA0BK,EAAsB,EAAEF,GAAW,EAAQ;MACjE,IAAI,CAACG,QAAQ,CAACD,EAAE,EAAE,EAAEF,GAAG,CAAC;IAC5B;EAAC;IAAA;IAAA,OAED,aAAoBA,GAAW,EAA0B;MACrD,OAAO,IAAI,CAACC,QAAQ,CAAC/D,GAAG,CAAC8D,GAAG,CAAC;IACjC;EAAC;IAAA;IAAA,OAED,aAAWA,GAAW,EAAW;MAC7B,OAAO,IAAI,CAACC,QAAQ,CAAC1C,GAAG,CAACyC,GAAG,CAAC;IACjC;EAAC;IAAA;IAAA,OAED,kBAAgBA,GAAW,EAAW;MAClC,OAAO,CAAE,IAAI,CAACzC,GAAG,CAACyC,GAAG,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,kBAAuC;MAAA;MACnC,sBAAI,CAACC,QAAQ,WAAO,iCAAS;IACjC;EAAC;EAAA;AAAA;;;;;;;;;;;;+CCnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBoC;AACS;AAEtC,IAAMG,aAAa,GAAG,SAAhBA,aAAa,CAAIC,QAAsB;EAAA;EAAA,OAAK,qBAACA,QAAQ,CAACC,MAAM,+DAAI,EAAE,0BAAKD,QAAQ,CAACE,OAAO,iEAAI,EAAE,CAAC;AAAA;AAEpG,IAAMC,eAAe;EACxB;;EAKA,yBAA2BC,OAAyB,EAAE;IAAA;IAAA;IAAA,KAA3BA,OAAyB,GAAzBA,OAAyB;IAAA,6CAJ5B,IAAI/C,iBAAiB,EAAsD;IAAA,uDACjE,IAAIA,iBAAiB,EAA4D;IAAA,+DACzE,IAAIqC,eAAe,EAAE;IAG3D,IAAI,CAACU,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,SAAS,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACC,aAAa,CAACD,EAAE,CAAC;IAAA,EAAC;IAC/D,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,YAAY,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACE,cAAc,CAACF,EAAE,CAAC;IAAA,EAAC;IACnE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,UAAU,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACG,cAAc,CAACH,EAAE,CAAC;IAAA,EAAC;IACjE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,sBAAsB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACI,0BAA0B,CAACJ,EAAE,CAAC;IAAA,EAAC;IACzF,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,eAAe,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACK,mBAAmB,CAACL,EAAE,CAAC;IAAA,EAAC;IAC3E,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,iBAAiB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACM,qBAAqB,CAACN,EAAE,CAAC;IAAA,EAAC;IAC/E,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,YAAY,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACO,gBAAgB,CAACP,EAAE,CAAC;IAAA,EAAC;IACrE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACQ,iBAAiB,CAACR,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,UAAU,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACS,cAAc,CAACT,EAAE,CAAC;IAAA,EAAC;IACjE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACU,kBAAkB,CAACV,EAAE,CAAC;IAAA,EAAC;EAC7E;;EAEA;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,sEAGA,iBAAiBN,QAAsB;QAAA;UAAA;YAAA;cAAA;gBAAA,iCAC5B,IAAI,CAACiB,IAAI,CAACpF,GAAG,CAACkE,aAAa,CAACC,QAAQ,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAChD;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;AACA;AACA;EAJI;IAAA;IAAA;MAAA,0FAKA,kBAAqCkB,OAAe;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACnC,IAAI,CAACd,OAAO,CAACe,MAAM,CAACtF,GAAG,EAAE;cAAA;gBAAA,mBAAEqB,GAAG,CAACgE,OAAO;kBAAA;kBAAA;gBAAA;gBAAA,MACzC,IAAIE,KAAK,gCAAyBF,OAAO,EAAG;cAAA;gBAAA;gBAAA,OAIjC,IAAI,CAACd,OAAO,CAACC,MAAM,CAACgB,IAAI,CAAC,mBAAmB,EAAE;kBAACrB,QAAQ,EAAE;oBAACkB,OAAO,EAAPA;kBAAO;gBAAC,CAAC,CAAC;cAAA;gBAAnFlD,MAAM;gBAAA,KAERA,MAAM,CAACZ,KAAK;kBAAA;kBAAA;gBAAA;gBAAA,MACNY,MAAM,CAACZ,KAAK;cAAA;gBAGtB,IAAI,CAACkE,sBAAsB,CAACtD,MAAM,CAACtB,IAAI,CAAC6E,cAAc,CAAC;cAAC;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAC3D;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;AACA;EAHI;IAAA;IAAA;MAAA,wFAIA,kBAAmCtB,MAAc;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAChC,IAAI,CAACG,OAAO,CAACoB,KAAK,CAAC3F,GAAG,EAAE;cAAA;gBAAA,mBAAEqB,GAAG,CAAC+C,MAAM;kBAAA;kBAAA;gBAAA;gBAAA,kCACtCwB,SAAS;cAAA;gBAAA,IAGd,IAAI,CAACF,cAAc,CAACrE,GAAG,CAAC+C,MAAM,CAAC;kBAAA;kBAAA;gBAAA;gBACjC,IAAI,IAAI,CAACyB,sBAAsB,CAACC,QAAQ,CAAC1B,MAAM,CAAC,EAAE;kBAC9C,IAAI,CAACyB,sBAAsB,CAACE,kBAAkB,0EAAC;oBAAA;oBAAA;sBAAA;wBAAA;0BAAA;4BAAA;4BAAA,OACtB,MAAI,CAACxB,OAAO,CAACC,MAAM,CAACgB,IAAI,CAAC,mBAAmB,EAAE;8BAACrB,QAAQ,EAAE;gCAACC,MAAM,EAANA;8BAAM;4BAAC,CAAC,CAAC;0BAAA;4BAAlFjC,MAAM;4BAAA,KAERA,MAAM,CAACZ,KAAK;8BAAA;8BAAA;4BAAA;4BAAA,MACNY,MAAM,CAACZ,KAAK;0BAAA;4BAGtB,MAAI,CAACkE,sBAAsB,CAACtD,MAAM,CAACtB,IAAI,CAAC6E,cAAc,CAAC;0BAAC;0BAAA;4BAAA;wBAAA;sBAAA;oBAAA;kBAAA,CAC3D,IAAEtB,MAAM,CAAC;gBACd;gBAAC;gBAAA,OAEK,IAAI,CAACyB,sBAAsB,CAAC7F,GAAG,CAACoE,MAAM,CAAC;cAAA;gBAAA,kCAG1C,IAAI,CAACsB,cAAc,CAAC1F,GAAG,CAACoE,MAAM,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACzC;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,wFAGA,kBAAmCA,MAAc;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACpB,IAAI,CAAC4B,qBAAqB,CAAC5B,MAAM,CAAC;cAAA;gBAArD6B,UAAU;gBAAA,IAEVA,UAAU;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA,sDAIYA,UAAU,CAACxE,KAAK;gBAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAjCyE,aAAa;gBAAA,KAChBA,aAAa,CAACC,MAAM;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OACd,IAAI,CAAC5B,OAAO,CAACC,MAAM,CAACgB,IAAI,CAAC,KAAK,EAAE;kBAACrB,QAAQ,EAAE+B,aAAa,CAAC/B;gBAAQ,CAAC,CAAC;cAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;gBAAA;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAGpF;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;AACA;EAHI;IAAA;IAAA;MAAA,8FAIA,kBAAyCC,MAAc;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAC1B,IAAI,CAAC4B,qBAAqB,CAAC5B,MAAM,CAAC;cAAA;gBAArD6B,UAAU;gBAAA,IAEVA,UAAU;kBAAA;kBAAA;gBAAA;gBAAA,kCACLL,SAAS;cAAA;gBAGhBO,MAAc,GAAG,CAAC,EAAEC,UAAmB,GAAG,KAAK;gBAAA,uDAEvBH,UAAU,CAACxE,KAAK;gBAAA;kBAA5C,uDAA8C;oBAAnCyE,aAAa;oBACpBC,MAAM,sCAAID,aAAa,CAACC,MAAM,yEAAID,aAAa,CAACG,cAAc,yCAAI,CAAC;oBACnE,IAAIH,aAAa,CAACG,cAAc,EAAE;sBAC9BD,UAAU,GAAG,IAAI;oBACrB;kBACJ;gBAAC;kBAAA;gBAAA;kBAAA;gBAAA;gBAAA,kCAEM;kBAACD,MAAM,EAANA,MAAM;kBAAEC,UAAU,EAAVA;gBAAU,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAC9B;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;AACA;EAHI;IAAA;IAAA,OAIA,2BAAyBhC,MAAc,EAA+B;MAAA;MAAA,kCAA1BkC,QAAQ;QAARA,QAAQ;MAAA;MAChD,kBAAI,CAAClB,IAAI,WAAO,qDAAIkB,QAAQ,CAACjG,GAAG,CAAC,UAAAgE,OAAO;QAAA,OAAIH,aAAa,CAAC;UAACE,MAAM,EAANA,MAAM;UAAEC,OAAO,EAAPA;QAAO,CAAC,CAAC;MAAA,EAAC,EAAC;MAC9E,6BAAI,CAACqB,cAAc,CAAC1F,GAAG,CAACoE,MAAM,CAAC,0DAA/B,+BAAuC,8BAAIkC,QAAQ,CAAC;IACxD;EAAC;IAAA;IAAA,OAED,kCAAiClC,MAAc,EAA+B;MAAA,mCAA1BmC,SAAS;QAATA,SAAS;MAAA;MACzD,8BAAuBA,SAAS,gCAAE;QAA7B,IAAMC,QAAQ;QACf,IAAMC,kBAAkB,GAAGvC,aAAa,CAAC;UAACE,MAAM,EAANA,MAAM;UAAEC,OAAO,EAAEmC,QAAQ,CAAC3E;QAAE,CAAC,CAAC;QAExE,IAAI,CAACuD,IAAI,CAAC5E,GAAG,CAAC,CAACiG,kBAAkB,EAAE,IAAIhD,iCAAiC,CAAU,IAAI,CAAC,CAAC,CAAC;;QAEzF;QACA,IAAI+C,QAAQ,CAACE,UAAU,EAAE;UACrB,IAAMC,kBAAkB,GAAGzC,aAAa,CAAC;YAACE,MAAM,EAANA,MAAM;YAAEC,OAAO,EAAEmC,QAAQ,CAACE,UAAU,CAACrC;UAAO,CAAC,CAAC;UACxF,IAAMuC,gBAAgB,GAAG,IAAI,CAACxB,IAAI,CAACpF,GAAG,CAAC2G,kBAAkB,CAAC;UAC1D,IAAME,UAAU,GAAGD,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAE5G,GAAG,CAACwG,QAAQ,CAACE,UAAU,CAACI,SAAS,CAAC;UAEvE,IAAID,UAAU,EAAE;YACZ;YACAD,gBAAgB,CAACpG,GAAG,iCAAKqG,UAAU;cAAEE,QAAQ,EAAEP,QAAQ,CAAC3E;YAAE,GAAE;UAChE;QACJ;MACJ;IACJ;EAAC;IAAA;IAAA,OAED,0BAAyB4C,EAAc,EAAQ;MAAA;MAC3C,sBAAI,CAACW,IAAI,CAACpF,GAAG,CAACkE,aAAa,CAACO,EAAE,CAACN,QAAQ,CAAC,CAAC,mDAAzC,eAA2C3D,GAAG,CAACiE,EAAE,CAACuC,OAAO,CAAC;MAC1D,IAAI,CAACC,sCAAsC,CAACxC,EAAE,CAAC;IACnD;EAAC;IAAA;IAAA,OAED,oCAAmCA,EAAwB,EAAQ;MAAA;MAC/D,8BAAI,CAACiB,cAAc,CAAC1F,GAAG,CAACyE,EAAE,CAACyB,aAAa,CAAC/B,QAAQ,CAACC,MAAM,CAAC,2DAAzD,uBAA2D5D,GAAG,CAACiE,EAAE,CAACyB,aAAa,CAAC;IACpF;EAAC;IAAA;IAAA,OAED,6BAA4BzB,EAAiB,EAAQ;MACjD,IAAI,CAACgB,sBAAsB,CAAC,CAAChB,EAAE,CAACyB,aAAa,CAAC,CAAC;IACnD;EAAC;IAAA;IAAA,OAED,+BAA8BzB,EAAmB,EAAQ;MAAA;MACrD,8BAAI,CAACiB,cAAc,CAAC1F,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACC,MAAM,CAAC,2DAA3C,gCAAmD,CAACK,EAAE,CAACN,QAAQ,CAACE,OAAO,CAAC;IAC5E;EAAC;IAAA;IAAA,OAED,2BAA0BI,EAAe,EAAQ;MAC7C,IAAI,CAACiB,cAAc,UAAO,CAACjB,EAAE,CAAC5C,EAAE,CAAC;IACrC;EAAC;IAAA;IAAA,OAED,wBAAuB4C,EAAc,EAAQ;MACzC,IAAIA,EAAE,CAACyC,IAAI,CAACC,YAAY,EAAE;QACtB,IAAI,CAACC,wBAAwB,CAAC3C,EAAE,CAACyC,IAAI,CAACrF,EAAE,EAAE4C,EAAE,CAACyC,IAAI,CAACC,YAAY,CAAC;MACnE;IACJ;EAAC;IAAA;IAAA,OAED,wBAAuB1C,EAAY,EAAQ;MACvC,IAAI,CAACiB,cAAc,UAAO,CAACjB,EAAE,CAAC5C,EAAE,CAAC;IACrC;EAAC;IAAA;IAAA;MAAA,iFAED,kBAA6B4C,EAAY;QAAA;QAAA;UAAA;YAAA;cAAA;gBACrC,IAAI,CAAC2C,wBAAwB,CAAC3C,EAAE,CAACL,MAAM,EAAEK,EAAE,CAAC4C,KAAK,CAAC;gBAAC,KAE/C,IAAI,CAAC3B,cAAc,CAACrE,GAAG,CAACoD,EAAE,CAACL,MAAM,CAAC;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAGb,IAAI,CAACG,OAAO,CAACC,MAAM,CAACgB,IAAI,CACzC,mBAAmB,EACnB;kBAACrB,QAAQ,EAAE;oBAACC,MAAM,EAAEK,EAAE,CAACL,MAAM;oBAAEC,OAAO,EAAEI,EAAE,CAAC4C,KAAK,CAACxF;kBAAE;gBAAC,CAAC,CACxD;cAAA;gBAHKM,MAAM;gBAIN+D,aAAa,GAAG/D,MAAM,CAACtB,IAAI,CAAC6E,cAAc,CAAC,CAAC,CAAC;gBACnD,IAAIQ,aAAa,EAAE;kBACf,IAAI,CAACR,cAAc,CAAC1F,GAAG,CAACyE,EAAE,CAACL,MAAM,CAAC,CAAC5D,GAAG,CAAC0F,aAAa,CAAC;gBACzD;cAAC;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAER;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,4BAA2BzB,EAAgB,EAAQ;MAAA;MAC/C,8BAAI,CAACiB,cAAc,CAAC1F,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACC,MAAM,CAAC,2DAA3C,gCAAmD,CAACK,EAAE,CAACN,QAAQ,CAACE,OAAO,CAAC;IAC5E;EAAC;IAAA;IAAA,OAED,uBAAsBI,EAAW,EAAQ;MAAA;MACrCA,EAAE,CAAC6C,KAAK,CAAC3B,KAAK,CAAClF,OAAO,CAAC,UAAAyG,IAAI,EAAI;QAC3B,IAAIA,IAAI,CAACC,YAAY,EAAE;UACnB,MAAI,CAACC,wBAAwB,CAACF,IAAI,CAACrF,EAAE,EAAEqF,IAAI,CAACC,YAAY,CAAC;QAC7D;MACJ,CAAC,CAAC;IACN;EAAC;IAAA;IAAA,OAED,gDAA+C1C,EAAc,EAAQ;MAAA;MACjE,IAAM8C,kBAAkB,GAAG,IAAI,CAAC7B,cAAc,CAAC1F,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACC,MAAM,CAAC;MACtE,IAAM8B,aAAa,GAAGqB,kBAAkB,CAACvH,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACE,OAAO,CAAC;MAEjE,IAAI,CAAEkD,kBAAkB,IAAI,CAAErB,aAAa,EAAE;QACzC;QACA;MACJ;MAEA,IAAMsB,IAAI,GAAG/C,EAAE,CAACuC,OAAO,CAACS,MAAM,CAAC5F,EAAE,0BAAK,IAAI,CAAC0C,OAAO,CAACmD,EAAE,qDAAf,iBAAiB7F,EAAE;MAEzD,IAAI8F,MAA8B;MAElC,IAAIH,IAAI,EAAE;QACN;QACAG,MAAM,GAAG;UAACxB,MAAM,EAAE,CAAC;UAAEE,cAAc,EAAE,IAAI;UAAEuB,gBAAgB,EAAEnD,EAAE,CAACuC,OAAO,CAACnF;QAAE,CAAC;MAC/E,CAAC,MAAM;QACH;QACA8F,MAAM,GAAG;UACLxB,MAAM,EAAED,aAAa,CAACC,MAAM,KAAK,IAAI,GAAG,IAAI,GAAGD,aAAa,CAACC,MAAM,GAAG,CAAC;UACvEE,cAAc,EAAEH,aAAa,CAACG,cAAc,KAAK,IAAI,GAAG,IAAI,GAAGH,aAAa,CAACG;QACjF,CAAC;MACL;MAEAkB,kBAAkB,CAAC/G,GAAG,iCAAK0F,aAAa,GAAKyB,MAAM,EAAE;IACzD;EAAC;IAAA;IAAA,OAED,gCAA+BjC,cAA+B,EAAQ;MAClE,IAAMmC,YAAiD,GAAG,CAAC,CAAC;;MAE5D;MACAnC,cAAc,CAACjF,OAAO,CAAC,UAAAyF,aAAa,EAAI;QAAA;QACpC,yBAAA2B,YAAY,yBAAC3B,aAAa,CAAC/B,QAAQ,CAACC,MAAM,CAAC,yEAA3CyD,YAAY,uBAA+B,GAAK,EAAE;QAClDA,YAAY,CAAC3B,aAAa,CAAC/B,QAAQ,CAACC,MAAM,CAAC,CAAC7D,IAAI,CAAC2F,aAAa,CAAC;MACnE,CAAC,CAAC;MAEF,KAAK,IAAM9B,OAAM,IAAIyD,YAAY,EAAE;QAAA;QAC/B,IAAI,CAAE,IAAI,CAACnC,cAAc,CAACrE,GAAG,CAAC+C,OAAM,CAAC,EAAE;UACnC,IAAI,CAACsB,cAAc,CAAClF,GAAG,CAAC,CACpB4D,OAAM,EACN,IAAIX,iCAAiC,CAAgB,UAAAqE,MAAM;YAAA,OAAIA,MAAM,CAAC3D,QAAQ,CAACE,OAAO;UAAA,EAAC,CAC1F,CAAC;QACN;QACA,8BAAI,CAACqB,cAAc,CAAC1F,GAAG,CAACoE,OAAM,CAAC,EAAC5D,GAAG,iEAAIqH,YAAY,CAACzD,OAAM,CAAC,EAAC;MAChE;IACJ;EAAC;EAAA;AAAA;;;;;;;;;;;;2DC7QL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADgG;AAcrC;AACT;AAE3C,IAAM2D,YAAY;EASrB,sBAA2BxD,OAAyB,EAAE;IAAA;IAAA;IAAA,KAA3BA,OAAyB,GAAzBA,OAAyB;IAAA;IAAA,0CAN5B,IAAId,iCAAiC,CAAO,IAAI,CAAC;IAAA,4CAC/C,IAAIjC,iBAAiB,EAAoD;IAAA,6CACxE,IAAIA,iBAAiB,EAAyD;IAAA,qDACtE,IAAIkC,YAAY,EAAE;IAAA,qDAClB,IAAIG,eAAe,EAAE;IAGpD,IAAI,CAACmE,QAAQ,GAAG,IAAI1D,eAAe,CAACC,OAAO,CAAC;IAE5C,IAAI,CAACA,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,YAAY,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACO,gBAAgB,CAACP,EAAE,CAAC;IAAA,EAAC;IACrE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,UAAU,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACG,cAAc,CAACH,EAAE,CAAC;IAAA,EAAC;IACjE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACU,kBAAkB,CAACV,EAAE,CAAC;IAAA,EAAC;IACzE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,YAAY,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACwD,gBAAgB,CAACxD,EAAE,CAAC;IAAA,EAAC;IACrE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,UAAU,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACS,cAAc,CAACT,EAAE,CAAC;IAAA,EAAC;IACjE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACyD,iBAAiB,CAACzD,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACQ,iBAAiB,CAACR,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,kBAAkB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC0D,sBAAsB,CAAC1D,EAAE,CAAC;IAAA,EAAC;IACjF,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,gBAAgB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC2D,oBAAoB,CAAC3D,EAAE,CAAC;IAAA,EAAC;IAC7E,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC4D,iBAAiB,CAAC5D,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,mBAAmB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC6D,uBAAuB,CAAC7D,EAAE,CAAC;IAAA,EAAC;IACnF,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,iBAAiB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC8D,qBAAqB,CAAC9D,EAAE,CAAC;IAAA,EAAC;IAC/E,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,oBAAoB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC+D,wBAAwB,CAAC/D,EAAE,CAAC;IAAA,EAAC;IACrF,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACgE,kBAAkB,CAAChE,EAAE,CAAC;IAAA,EAAC;IACzE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,WAAW,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACgE,kBAAkB,CAAChE,EAAE,CAAC;IAAA,EAAC;IACtE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACiE,iBAAiB,CAACjE,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,SAAS,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACC,aAAa,CAACD,EAAE,CAAC;IAAA,EAAC;EACnE;;EAEA;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,qGAGA,kBAAwBL,MAAc;QAAA;QAAA;UAAA;YAAA;cAAA;gBAClC,IAAI,IAAI,CAACuE,eAAe,CAAC7C,QAAQ,CAAC1B,MAAM,CAAC,EAAE;kBACvC,IAAI,CAACuE,eAAe,CAAC5C,kBAAkB,kGAAC;oBAAA;oBAAA;sBAAA;wBAAA;0BAAA;4BAAA;4BAAA,OACf,MAAI,CAACxB,OAAO,CAACC,MAAM,CAACgB,IAAI,CAAC,gBAAgB,EAAE;8BAAC3D,EAAE,EAAEuC;4BAAM,CAAC,CAAC;0BAAA;4BAAvEjC,MAAM;4BAAA,KACRA,MAAM,CAACZ,KAAK;8BAAA;8BAAA;4BAAA;4BAAA,MACNY,MAAM,CAACZ,KAAK;0BAAA;4BAEtB,MAAI,CAAC8G,iBAAiB,CAAClG,MAAM,CAACtB,IAAI,CAAC;0BAAC;0BAAA;4BAAA;wBAAA;sBAAA;oBAAA;kBAAA,CACvC,IAAEuD,MAAM,CAAC;gBACd;gBAAC;gBAAA,OAEK,IAAI,CAACuE,eAAe,CAAC3I,GAAG,CAACoE,MAAM,CAAC;cAAA;gBAAA,kCAC/B,IAAI,CAACwE,OAAO,CAAC5I,GAAG,CAACoE,MAAM,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAClC;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,gGAGA,kBAAmBA,MAAc;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACP,IAAI,CAACG,OAAO,CAACsE,KAAK,EAAE;cAAA;gBAApCC,MAAM,kBAAgCjH,EAAE;gBAAA,IAExC,IAAI,CAACuD,IAAI,CAAC/D,GAAG,CAAC+C,MAAM,CAAC;kBAAA;kBAAA;gBAAA;gBAAA,kCAEhBwB,SAAS;cAAA;gBAAA;gBAAA,OAGE,IAAI,CAACmD,UAAU,CAAC3E,MAAM,CAAC;cAAA;gBAAvCwE,OAAO;gBAAA,kCACNA,OAAO,CAACnH,KAAK,CAACuH,IAAI,CAAC,UAAAC,MAAM;kBAAA;kBAAA,OAAI,oCAACA,MAAM,CAACC,IAAI,iDAAX,aAAarH,EAAE,6DAAIoH,MAAM,CAACE,WAAW,CAACD,IAAI,CAACrH,EAAE,MAAMiH,MAAM;gBAAA,EAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAClG;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,8FAGA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACU,IAAI,CAACM,eAAe,CAACzF,OAAO;cAAA;gBAAA,kCAC3B,IAAI,CAACyB,IAAI;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACnB;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,oGAGA,kBAAuBhB,MAAc;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAC3B,IAAI,CAACgF,eAAe,CAACzF,OAAO;cAAA;gBAAA,kCAC3B,IAAI,CAAC0F,MAAM,CAACrJ,GAAG,CAACoE,MAAM,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjC;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,sBAA+C;MAAA;MAAA,kCAAzBkF,OAAO;QAAPA,OAAO;MAAA;MACzB,kBAAI,CAAClE,IAAI,WAAO,mBAAIkE,OAAO,CAAC;MAC5B,qBAAI,CAACV,OAAO,WAAO,sBAAIU,OAAO,CAAC;MAC/B,6BAAI,CAACX,eAAe,EAACY,MAAM,8BAAID,OAAO,CAAC;MAEvC,4BAAqBA,OAAO,8BAAE;QAAA;QAAzB,IAAMlF,MAAM;QACb,IAAMkC,QAAkB,+CAAG,IAAI,CAAC+C,MAAM,CAACrJ,GAAG,CAACoE,MAAM,CAAC,qDAAvB,iBAAyB/D,GAAG,CAAC,UAAAgH,KAAK;UAAA,OAAIA,KAAK,CAACxF,EAAE;QAAA,EAAC,uEAAI,EAAE;QAChF,sBAAI,CAACmG,QAAQ,EAACwB,iBAAiB,wBAACpF,MAAM,wCAAKkC,QAAQ,GAAC;MACxD;MAEA,oBAAI,CAAC+C,MAAM,WAAO,qBAAIC,OAAO,CAAC;IAClC;EAAC;IAAA;IAAA,OAED,8BAA6BjE,OAAe,EAAQ;MAChD,IAAI,CAACoE,UAAU,OAAf,IAAI,iCACG,IAAI,CAACrE,IAAI,CAACsE,MAAM,CAAC,SAAS,EAAErE,OAAO,CAAC,CAAChF,GAAG,CAAC,UAAA6G,IAAI;QAAA,OAAIA,IAAI,CAACrF,EAAE;MAAA,EAAC,EAC/D;IACL;EAAC;IAAA;IAAA,OAED,kCAAiC4C,EAAsB,EAAQ;MAC3D;MAAA,uDACmB,IAAI,CAACW,IAAI,CAACsE,MAAM,CAAC,SAAS,EAAEjF,EAAE,CAACY,OAAO,CAAC,CAAC5D,KAAK;QAAA;MAAA;QAAhE,oDAAkE;UAAA,IAAvDyF,IAAI;UACX,IAAMyC,WAAW,GAAG,IAAI,CAACf,OAAO,CAAC5I,GAAG,CAACkH,IAAI,CAACrF,EAAE,CAAC;UAE7C,IAAI,CAAE8H,WAAW,IAAI,CAAEA,WAAW,CAACtI,GAAG,CAACoD,EAAE,CAACqE,MAAM,CAAC,EAAE;YAC/C;YACA;YACA;UACJ;UAEA,IAAMc,UAAU,GAAGD,WAAW,CAAC3J,GAAG,CAACyE,EAAE,CAACqE,MAAM,CAAC;UAC7C,IAAMI,IAAI,GAAGU,UAAU,CAACT,WAAW,CAACD,IAAI;;UAExC;UACAU,UAAU,CAACT,WAAW,GAAG,wDAAI1E,EAAE,CAACwE,MAAM;YAAEC,IAAI,EAAJA;UAAI,EAAC;UAC7CS,WAAW,CAACnJ,GAAG,CAACoJ,UAAU,CAAC;QAC/B;MAAC;QAAA;MAAA;QAAA;MAAA;IACL;EAAC;IAAA;IAAA,OAED,+BAA8BnF,EAAmB,EAAQ;MAAA;MACrD,IAAI,CAACW,IAAI,CACJsE,MAAM,CAAC,SAAS,EAAEjF,EAAE,CAACY,OAAO,CAAC,CAAC5D,KAAK,CACnChB,OAAO,CAAC,UAAAyG,IAAI;QAAA;QAAA,6BAAI,MAAI,CAAC0B,OAAO,CAAC5I,GAAG,CAACkH,IAAI,CAACrF,EAAE,CAAC,uDAAzB,4BAAiC,CAAC4C,EAAE,CAACqE,MAAM,CAAC;MAAA,EAAC;IACtE;EAAC;IAAA;IAAA,OAED,iCAAgCrE,EAAqB,EAAQ;MAAA;MACzD,IAAI,CAAE,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAACL,MAAM,CAAC,EAAE;QAC/B;QACA;MACJ;MAEA,IAAMwE,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACL,MAAM,CAAC;MAC3C,IAAM6E,MAAM,GAAGL,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACqE,MAAM,CAAC;MACrC,IAAMe,SAAS,GAAGpF,EAAE,CAACwE,MAAM;MAC3B,IAAMC,IAAI,mDAAGD,MAAM,CAACE,WAAW,wDAAlB,oBAAoBD,IAAI,yEAAID,MAAM,CAACC,IAAI;MAEpD,IAAIW,SAAS,CAACV,WAAW,EAAE;QACvBU,SAAS,CAACV,WAAW,CAACD,IAAI,GAAGA,IAAI;MACrC,CAAC,MAAM;QACHW,SAAS,CAACX,IAAI,GAAGA,IAAI;MACzB;MAEAN,OAAO,CAACpI,GAAG,CAACqJ,SAAS,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,4BAA2BpF,EAA4B,EAAQ;MAC3D,IAAI,CAACqF,oBAAoB,CAACrF,EAAE,CAAC5C,EAAE,CAAC;IACpC;EAAC;IAAA;IAAA,OAED,4BAA2B4C,EAAgB,EAAQ;MAAA;MAC/C,IAAMwB,UAAU,GAAG,IAAI,CAACoD,MAAM,CAACrJ,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACC,MAAM,CAAC;MACtD6B,UAAU,UAAO,CAACxB,EAAE,CAACN,QAAQ,CAACE,OAAO,CAAC;MAEtC,IAAM6C,IAAI,GAAG,IAAI,CAAC9B,IAAI,CAACpF,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACC,MAAM,CAAC;MAC9C,IAAI,uBAAA8C,IAAI,CAACC,YAAY,uDAAjB,mBAAmBtF,EAAE,MAAK4C,EAAE,CAACN,QAAQ,CAACE,OAAO,EAAE;QAC/C,IAAI,CAACe,IAAI,CAAC5E,GAAG,CAAC,wDAAI0G,IAAI;UAAEC,YAAY,EAAE;QAAI,GAAE;MAChD;IACJ;EAAC;IAAA;IAAA,OAED,wBAAuB1C,EAAY,EAAQ;MACvC,IAAI,CAACsF,mBAAmB,CAACtF,EAAE,CAACL,MAAM,EAAEK,EAAE,CAAC4C,KAAK,CAAC;IACjD;EAAC;IAAA;IAAA,OAED,6BAA4BjD,MAAc,EAA4B;MAAA,mCAAvBiF,MAAM;QAANA,MAAM;MAAA;MACjD,IAAI,IAAI,CAACA,MAAM,CAAChI,GAAG,CAAC+C,MAAM,CAAC,EAAE;QAAA;QACzB,yBAAI,CAACiF,MAAM,CAACrJ,GAAG,CAACoE,MAAM,CAAC,EAAC5D,GAAG,0BAAI6I,MAAM,CAAC;MAC1C,CAAC,MAAM;QACH,IAAI,CAACA,MAAM,CAAC7I,GAAG,CAAC,CAAC4D,MAAM,EAAE,IAAIX,iCAAiC,CAAQ,IAAI,EAAE4F,MAAM,CAAC,CAAC,CAAC;MACzF;IACJ;EAAC;IAAA;IAAA,OAED,0BAAyB5E,EAAc,EAAQ;MAC3C,IAAI,CAACuF,cAAc,CAACvF,EAAE,CAACyC,IAAI,CAAC;IAChC;EAAC;IAAA;IAAA,OAED,2BAA0BzC,EAAe,EAAQ;MAC7C,IAAI,CAACW,IAAI,CAAC5E,GAAG,CAAC,wDACP,IAAI,CAAC4E,IAAI,CAACpF,GAAG,CAACyE,EAAE,CAACyC,IAAI,CAACrF,EAAE,CAAC;QAC5BoI,IAAI,EAAExF,EAAE,CAACyC,IAAI,CAAC+C,IAAI;QAClBC,WAAW,EAAEzF,EAAE,CAACyC,IAAI,CAACgD;MAAW,GAC1B;IACd;EAAC;IAAA;IAAA,OAED,2BAA0BzF,EAAe,EAAQ;MAC7C,IAAI,CAACgF,UAAU,CAAChF,EAAE,CAAC5C,EAAE,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,0BAA+C;MAAA;MAAA,mCAArB8D,KAAK;QAALA,KAAK;MAAA;MAC3B,2BAAmBA,KAAK,8BAAE;QAArB,IAAMuB,IAAI;QACX,IAAIA,IAAI,CAACC,YAAY,EAAE;UACnB,IAAI,CAAC4C,mBAAmB,CAAC7C,IAAI,CAACrF,EAAE,EAAEqF,IAAI,CAACC,YAAY,CAAC;QACxD;MACJ;MACA,mBAAI,CAAC/B,IAAI,EAAC5E,GAAG,oBAAImF,KAAK,CAAC;IAC3B;EAAC;IAAA;IAAA,OAED,wBAAuBlB,EAAY,EAAQ;MACvC,IAAI,CAACgF,UAAU,CAAChF,EAAE,CAAC5C,EAAE,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,gCAA+B4C,EAAoB,EAAQ;MACvD,IAAI,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAACL,MAAM,CAAC,EAAE;QAC7B,IAAI,CAACwE,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACL,MAAM,CAAC,CAAC5D,GAAG,CAACiE,EAAE,CAACwE,MAAM,CAAC;MAC9C;IACJ;EAAC;IAAA;IAAA,OAED,8BAA6BxE,EAAkB,EAAQ;MACnD,IAAI,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAACL,MAAM,CAAC,EAAE;QAC7B,IAAI,CAACwE,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACL,MAAM,CAAC,UAAO,CAACK,EAAE,CAACqE,MAAM,CAAC;MACjD;IACJ;EAAC;IAAA;IAAA,OAED,2BAA0BrE,EAAe,EAAQ;MAC7C,IAAI,CAAE,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAAC5C,EAAE,CAAC,EAAE;QAC3B,IAAI,CAAC+G,OAAO,CAACpI,GAAG,CAAC,CACbiE,EAAE,CAAC5C,EAAE,EACL,IAAI4B,iCAAiC,CACjC,UAAAwF,MAAM;UAAA;UAAA,4CAAIA,MAAM,CAACC,IAAI,kDAAX,cAAarH,EAAE,+DAAIoH,MAAM,CAACE,WAAW,CAACD,IAAI,CAACrH,EAAE;QAAA,GACvD4C,EAAE,CAACmE,OAAO,CACb,CACJ,CAAC;MACN;IACJ;EAAC;IAAA;IAAA,OAED,uBAAsBnE,EAAW,EAAQ;MACrC,IAAI,CAACW,IAAI,CAACrC,SAAS,EAAE;MACrB,IAAI,CAACsG,MAAM,CAACtG,SAAS,EAAE;MACvB,IAAI,CAAC6F,OAAO,CAAC7F,SAAS,EAAE;MAExB,IAAI,CAACiH,cAAc,OAAnB,IAAI,iCAAmBvF,EAAE,CAAC6C,KAAK,CAAC3B,KAAK,EAAC;MAEtC,IAAI,CAACyD,eAAe,CAACxF,OAAO,EAAE;IAClC;EAAC;IAAA;IAAA,OAED,2BAA0Ba,EAAe,EAAQ;MAC7C,IAAI,CAACmE,OAAO,CAACnH,KAAK,CAAChB,OAAO,CAAC,UAACmI,OAAO,EAAK;QACpC,IAAMK,MAAM,GAAGL,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACyE,IAAI,CAACrH,EAAE,CAAC;QAEtC,IAAI,CAAEoH,MAAM,EAAE;UACV;UACA;QACJ;QAEA,IAAMY,SAAqB,GAAG,8BAAIZ,MAAM,CAAC;QAEzC,IAAIA,MAAM,CAACC,IAAI,EAAE;UACbW,SAAS,CAACX,IAAI,GAAGzE,EAAE,CAACyE,IAAI;QAC5B,CAAC,MAAM;UACHW,SAAS,CAACV,WAAW,CAACD,IAAI,GAAGzE,EAAE,CAACyE,IAAI;QACxC;QAEAN,OAAO,CAACpI,GAAG,CAACqJ,SAAS,CAAC;MAC1B,CAAC,CAAC;IACN;EAAC;IAAA;IAAA,OAED,0BAAyBpF,EAAc,EAAQ;MAC3C,IAAM4E,MAAM,GAAG,IAAI,CAACA,MAAM,CAACrJ,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACC,MAAM,CAAC;MAClD,IAAMiD,KAAK,GAAGgC,MAAM,CAACrJ,GAAG,CAACyE,EAAE,CAACN,QAAQ,CAACE,OAAO,CAAC;MAE7C,IAAIgD,KAAK,EAAE;QACPgC,MAAM,CAAC7I,GAAG,CAAC,wDACJ6G,KAAK;UACR8C,YAAY,EAAE9C,KAAK,CAAC8C,YAAY,GAAG,CAAC;UACpCC,WAAW,EAAE3F,EAAE,CAACuC;QAAO,GACzB;MACN;IACJ;EAAC;EAAA;AAAA;;ACzRE,SAASqD,4BAA4B,CAACC,QAAgB,EAAEC,OAAa,EAAEC,WAAiB,EAAU;EACrG;EACA,IAAMC,SAAS,GAAID,WAAW,CAACE,QAAQ,GAAGH,OAAO,CAACG,QAAQ,GAAI,CAAC;EAC/D,IAAMC,SAAS,GAAG,CAAEF,SAAS;EAC7B,IAAMG,YAAoB,GAAG,EAAE;EAE/BN,QAAQ,CAAC7J,OAAO,CAAC,UAAAoK,IAAI,EAAI;IACrB,IAAIA,IAAI,CAAChJ,EAAE,KAAK2I,WAAW,CAAC3I,EAAE,EAAE;MAC5B;MACA;IACJ;IACA,IAAI4I,SAAS,IAAIF,OAAO,CAACG,QAAQ,IAAIG,IAAI,CAACH,QAAQ,EAAE;MAChDG,IAAI,CAACH,QAAQ,EAAE;MACfE,YAAY,CAACrK,IAAI,CAACsK,IAAI,CAAC;IAC3B;IACA,IAAIF,SAAS,IAAIH,WAAW,CAACE,QAAQ,IAAIG,IAAI,CAACH,QAAQ,EAAE;MACpDG,IAAI,CAACH,QAAQ,EAAE;MACfE,YAAY,CAACrK,IAAI,CAACsK,IAAI,CAAC;IAC3B;EACJ,CAAC,CAAC;EAEF,OAAOD,YAAY;AACvB;;;;;;;;;;;4DCvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgG;AAwBrC;AACF;AAElD,IAAME,aAAa;EAUtB,uBAA2BvG,OAAyB,EAAE;IAAA;IAAA;IAAA,KAA3BA,OAAyB,GAAzBA,OAAyB;IAAA,2CAT5B,IAAId,iCAAiC,CAAQ,IAAI,CAAC;IAAA,4CACjD,IAAIjC,iBAAiB,EAAmD;IAAA,4CACxE,IAAIA,iBAAiB,EAA0D;IAAA,sDACrE,IAAIA,iBAAiB,EAAkB;IAAA,8CAC/C,IAAIA,iBAAiB,EAA0D;IAAA,sDACvE,IAAIkC,YAAY,EAAE;IAAA,oDACpB,IAAIG,eAAe,EAAE;IAAA,sDACnB,IAAIA,eAAe,EAAE;IAGpD,IAAI,CAACU,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,SAAS,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACsG,aAAa,CAACtG,EAAE,CAAC;IAAA,EAAC;IAC/D,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACQ,iBAAiB,CAACR,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACyD,iBAAiB,CAACzD,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACgE,kBAAkB,CAAChE,EAAE,CAAC;IAAA,EAAC;IACzE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACuG,kBAAkB,CAACvG,EAAE,CAAC;IAAA,EAAC;IACzE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACwG,iBAAiB,CAACxG,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,WAAW,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACgE,kBAAkB,CAAChE,EAAE,CAAC;IAAA,EAAC;IACtE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,mBAAmB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACyG,uBAAuB,CAACzG,EAAE,CAAC;IAAA,EAAC;IACnF,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,iBAAiB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC8D,qBAAqB,CAAC9D,EAAE,CAAC;IAAA,EAAC;IAC/E,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC0G,kBAAkB,CAAC1G,EAAE,CAAC;IAAA,EAAC;IACzE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,YAAY,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC2G,gBAAgB,CAAC3G,EAAE,CAAC;IAAA,EAAC;IACrE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,oBAAoB,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC+D,wBAAwB,CAAC/D,EAAE,CAAC;IAAA,EAAC;IACrF,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACiE,iBAAiB,CAACjE,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,SAAS,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC4G,aAAa,CAAC5G,EAAE,CAAC;IAAA,EAAC;IAC/D,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC6G,iBAAiB,CAAC7G,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAAC8G,iBAAiB,CAAC9G,EAAE,CAAC;IAAA,EAAC;IACvE,IAAI,CAACF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,SAAS,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACC,aAAa,CAACD,EAAE,CAAC;IAAA,EAAC;EACnE;;EAEA;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,gGAGA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACU,IAAI,CAAC2E,eAAe,CAACzF,OAAO;cAAA;gBAAA,iCAC3B,IAAI,CAACyB,IAAI;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACnB;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,qGAGA,kBAAsBC,OAAe;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAC3B,IAAI,CAAC+D,eAAe,CAACzF,OAAO;cAAA;gBAAA,kCAC3B,IAAI,CAAC6H,KAAK,CAACxL,GAAG,CAACqF,OAAO,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjC;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,qGAGA,kBAAsBA,OAAe;QAAA;QAAA;UAAA;YAAA;cAAA;gBACjC,IAAI,IAAI,CAACoG,aAAa,CAAC3F,QAAQ,CAACT,OAAO,CAAC,EAAE;kBACtC,IAAI,CAACoG,aAAa,CAAC1F,kBAAkB,oGAAC;oBAAA;oBAAA;sBAAA;wBAAA;0BAAA;4BAAA;4BAAA,OACb,MAAI,CAACxB,OAAO,CAACC,MAAM,CAACgB,IAAI,CAAC,eAAe,EAAE;8BAAC3D,EAAE,EAAEwD;4BAAO,CAAC,CAAC;0BAAA;4BAAvElD,MAAM;4BAAA,KACRA,MAAM,CAACZ,KAAK;8BAAA;8BAAA;4BAAA;4BAAA,MACNY,MAAM,CAACZ,KAAK;0BAAA;4BAEtB,MAAI,CAAC6J,gBAAgB,CAACjJ,MAAM,CAACtB,IAAI,CAAC;0BAAC;0BAAA;4BAAA;wBAAA;sBAAA;oBAAA;kBAAA,CACtC,IAAEwE,OAAO,CAAC;gBACf;gBAAC;gBAAA,OAEK,IAAI,CAACoG,aAAa,CAACzL,GAAG,CAACqF,OAAO,CAAC;cAAA;gBAAA,kCAC9B,IAAI,CAACM,KAAK,CAAC3F,GAAG,CAACqF,OAAO,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjC;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,uGAGA,kBAAwBA,OAAe;QAAA;QAAA;UAAA;YAAA;cAAA;gBACnC,IAAI,IAAI,CAACsD,eAAe,CAAC7C,QAAQ,CAACT,OAAO,CAAC,EAAE;kBACxC,IAAI,CAACsD,eAAe,CAAC5C,kBAAkB,oGAAC;oBAAA;oBAAA;sBAAA;wBAAA;0BAAA;4BAAA;4BAAA,OACf,MAAI,CAACxB,OAAO,CAACC,MAAM,CAACgB,IAAI,CAAC,iBAAiB,EAAE;8BAAC3D,EAAE,EAAEwD;4BAAO,CAAC,CAAC;0BAAA;4BAAzElD,MAAM;4BAAA,KACRA,MAAM,CAACZ,KAAK;8BAAA;8BAAA;4BAAA;4BAAA,MACNY,MAAM,CAACZ,KAAK;0BAAA;4BAEtB,MAAI,CAAC4J,kBAAkB,CAAChJ,MAAM,CAACtB,IAAI,CAAC;0BAAC;0BAAA;4BAAA;wBAAA;sBAAA;oBAAA;kBAAA,CACxC,IAAEwE,OAAO,CAAC;gBACf;gBAAC;gBAAA,OAEK,IAAI,CAACsD,eAAe,CAAC3I,GAAG,CAACqF,OAAO,CAAC;cAAA;gBAAA,kCAChC,IAAI,CAACuD,OAAO,CAAC5I,GAAG,CAACqF,OAAO,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACnC;MAAA;QAAA;MAAA;MAAA;IAAA;IAED;AACJ;AACA;EAFI;IAAA;IAAA;MAAA,kGAGA,kBAAmBA,OAAe;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACR,IAAI,CAACd,OAAO,CAACsE,KAAK,EAAE;cAAA;gBAApCC,MAAM,kBAAgCjH,EAAE;gBAAA,IAExC,IAAI,CAACuD,IAAI,CAAC/D,GAAG,CAACgE,OAAO,CAAC;kBAAA;kBAAA;gBAAA;gBAAA,kCAEjBO,SAAS;cAAA;gBAAA;gBAAA,OAGE,IAAI,CAACmD,UAAU,CAAC1D,OAAO,CAAC;cAAA;gBAAxCuD,OAAO;gBAAA,kCACNA,OAAO,CAACnH,KAAK,CAACuH,IAAI,CAAC,UAAAC,MAAM;kBAAA,OAAIA,MAAM,CAACC,IAAI,CAACrH,EAAE,KAAKiH,MAAM;gBAAA,EAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjE;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,uBAAsBrE,EAAW,EAAQ;MACrC,IAAMwB,UAAU,GAAG,IAAI,CAACuF,KAAK,CAACxL,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC;MAC7CY,UAAU,CAACzF,GAAG,CAACiE,EAAE,CAACoG,IAAI,CAAC;MACvB,IAAI,CAACzF,IAAI,CAACpF,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC,CAACmG,KAAK,GAAGvF,UAAU,CAACxE,KAAK;IACtD;EAAC;IAAA;IAAA,OAED,uBAAsBgD,EAAW,EAAQ;MAAA;MACrC,uBAAI,CAACkB,KAAK,CAAC3F,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC,oDAA1B,gBAA4B7E,GAAG,CAACiE,EAAE,CAACiH,OAAO,CAAC;MAC3C,IAAI,CAACC,eAAe,CAACnL,GAAG,CAAC,CAACiE,EAAE,CAACiH,OAAO,CAAC7J,EAAE,EAAE4C,EAAE,CAACY,OAAO,CAAC,CAAC;IACzD;EAAC;IAAA;IAAA,OAED,2BAA0BZ,EAAe,EAAQ;MAC7C,IAAIA,EAAE,CAACyC,IAAI,CAAC7B,OAAO,IAAI,IAAI,CAACM,KAAK,CAACtE,GAAG,CAACoD,EAAE,CAACyC,IAAI,CAAC7B,OAAO,CAAC,EAAE;QACpD,IAAMM,KAAK,GAAG,IAAI,CAACA,KAAK,CAAC3F,GAAG,CAACyE,EAAE,CAACyC,IAAI,CAAC7B,OAAO,CAAC;QAC7CM,KAAK,CAACnF,GAAG,CAAC,0DACHmF,KAAK,CAAC3F,GAAG,CAACyE,EAAE,CAACyC,IAAI,CAACrF,EAAE,CAAC;UACxBoI,IAAI,EAAExF,EAAE,CAACyC,IAAI,CAAC+C,IAAI;UAClBC,WAAW,EAAEzF,EAAE,CAACyC,IAAI,CAACgD;QAAW,GACnB;MACrB;IACJ;EAAC;IAAA;IAAA;MAAA,8GAED,kBAAgCzF,EAAe;QAAA;QAAA;UAAA;YAAA;cAAA;gBACrCY,OAAO,GAAG,IAAI,CAACsG,eAAe,CAAC3L,GAAG,CAACyE,EAAE,CAAC5C,EAAE,CAAC;gBAE/C,IAAIwD,OAAO,IAAI,IAAI,CAACM,KAAK,CAACtE,GAAG,CAACgE,OAAO,CAAC,EAAE;kBACpC,IAAI,CAACM,KAAK,CAAC3F,GAAG,CAACqF,OAAO,CAAC,UAAO,CAACZ,EAAE,CAAC5C,EAAE,CAAC;gBACzC;cAAC;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACJ;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,2BAA0B4C,EAAe,EAAQ;MAC7C,IAAMwB,UAAU,GAAG,IAAI,CAACuF,KAAK,CAACxL,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC;MAC7CY,UAAU,UAAO,CAACxB,EAAE,CAAC5C,EAAE,CAAC;MACxB,IAAI,CAACuD,IAAI,CAACpF,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC,CAACmG,KAAK,GAAGvF,UAAU,CAACxE,KAAK;IACtD;EAAC;IAAA;IAAA,OAED,4BAA2BgD,EAAgB,EAAQ;MAC/C,IAAI,CAACW,IAAI,CAAC5E,GAAG,CAAC,0DACP,IAAI,CAAC4E,IAAI,CAACpF,GAAG,CAACyE,EAAE,CAACmH,KAAK,CAAC/J,EAAE,CAAC;QAC7BoI,IAAI,EAAExF,EAAE,CAACmH,KAAK,CAAC3B;MAAI,GACZ;IACf;EAAC;IAAA;IAAA,OAED,4BAA2BxF,EAA4B,EAAQ;MAAA;MAC3D,IAAM6E,OAAO,8CAAG,IAAI,CAAC3D,KAAK,CAAC3F,GAAG,CAACyE,EAAE,CAAC5C,EAAE,CAAC,qDAArB,iBAAuBxB,GAAG,CAAC,UAAAuB,IAAI;QAAA,OAAIA,IAAI,CAACC,EAAE;MAAA,EAAC,qEAAI,EAAE;MACjE,6BAAI,CAAC8J,eAAe,WAAO,8DAAIrC,OAAO,EAAC;MAEvC,IAAI,CAACkC,KAAK,UAAO,CAAC/G,EAAE,CAAC5C,EAAE,CAAC;MACxB,IAAI,CAAC+G,OAAO,UAAO,CAACnE,EAAE,CAAC5C,EAAE,CAAC;MAC1B,IAAI,CAAC8G,eAAe,CAACY,MAAM,CAAC9E,EAAE,CAAC5C,EAAE,CAAC;MAClC,IAAI,CAAC8D,KAAK,UAAO,CAAClB,EAAE,CAAC5C,EAAE,CAAC;MACxB,IAAI,CAAC4J,aAAa,CAAClC,MAAM,CAAC9E,EAAE,CAAC5C,EAAE,CAAC;MAChC,IAAI,CAACuD,IAAI,UAAO,CAACX,EAAE,CAAC5C,EAAE,CAAC;IAC3B;EAAC;IAAA;IAAA,OAED,2BAA0B4C,EAAe,EAAQ;MAC7C,IAAI,CAACoH,eAAe,CAACpH,EAAE,CAACmH,KAAK,CAAC;IAClC;EAAC;IAAA;IAAA,OAED,2BAAkD;MAAA;MAAA,kCAAvBtG,MAAM;QAANA,MAAM;MAAA;MAC7B,mBAAI,CAACkG,KAAK,EAAChL,GAAG,oDAAK8E,MAAM,CAACjF,GAAG,CAAC,UAAAuL,KAAK;QAAA,OAAI,CACnCA,KAAK,CAAC/J,EAAE,EACR,IAAI4B,iCAAiC,CAAO,IAAI,EAAEmI,KAAK,CAACJ,KAAK,CAAC,CACjE;MAAA,EAAC,EAAyD;MAC3D,kBAAI,CAACpG,IAAI,EAAC5E,GAAG,mBAAI8E,MAAM,CAAC;IAC5B;EAAC;IAAA;IAAA,OAED,iCAAgCb,EAAqB,EAAQ;MACzD,IAAI,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAACY,OAAO,CAAC,EAAE;QAC9B,IAAI,CAACuD,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC,CAAC7E,GAAG,CAACiE,EAAE,CAACwE,MAAM,CAAC;MAC/C;IACJ;EAAC;IAAA;IAAA,OAED,+BAA8BxE,EAAmB,EAAQ;MACrD,IAAI,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAACY,OAAO,CAAC,EAAE;QAC9B,IAAI,CAACuD,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC,UAAO,CAACZ,EAAE,CAACqE,MAAM,CAAC;MAClD;IACJ;EAAC;IAAA;IAAA,OAED,4BAA2BrE,EAAgB,EAAQ;MAC/C,IAAI,CAAE,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAAC5C,EAAE,CAAC,EAAE;QAC3B,IAAI,CAAC+G,OAAO,CAACpI,GAAG,CAAC,CACbiE,EAAE,CAAC5C,EAAE,EACL,IAAI4B,iCAAiC,CAAC,UAAAwF,MAAM;UAAA,OAAIA,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEC,IAAI,CAACrH,EAAE;QAAA,GAAE4C,EAAE,CAACmE,OAAO,CAAC,CAC/E,CAAC;MACN;IACJ;EAAC;IAAA;IAAA,OAED,0BAAyBnE,EAAc,EAAQ;MAC3C,IAAI,CAAE,IAAI,CAACkB,KAAK,CAACtE,GAAG,CAACoD,EAAE,CAAC5C,EAAE,CAAC,EAAE;QACzB,IAAI,CAAC8D,KAAK,CAACnF,GAAG,CAAC,CAACiE,EAAE,CAAC5C,EAAE,EAAE,IAAI4B,iCAAiC,CAAC,IAAI,EAAEgB,EAAE,CAACqH,SAAS,CAAC,CAAC,CAAC;MACtF;IACJ;EAAC;IAAA;IAAA,OAED,kCAAiCrH,EAAsB,EAAQ;MAC3D,IAAI,IAAI,CAACmE,OAAO,CAACvH,GAAG,CAACoD,EAAE,CAACY,OAAO,CAAC,EAAE;QAC9B,IAAMuD,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC;QAC5C,IAAM4D,MAAM,GAAGL,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACqE,MAAM,CAAC;QACrCF,OAAO,CAACpI,GAAG,CAAC,0DAAIiE,EAAE,CAACwE,MAAM;UAAEC,IAAI,EAAED,MAAM,CAACC;QAAI,GAAE;MAClD;IACJ;EAAC;IAAA;IAAA,OAED,2BAA0BzE,EAAe,EAAQ;MAAA;MAC7C,IAAM+G,KAAK,GAAG,IAAI,CAACA,KAAK,CAACxL,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC;MACxC,IAAMkF,OAAO,GAAGiB,KAAK,CAACxL,GAAG,CAACyE,EAAE,CAACoG,IAAI,CAAChJ,EAAE,CAAC;MACrC,IAAMkK,OAAO,GAAGtH,EAAE,CAACoG,IAAI;MACvB,IAAMmB,aAAa,GAAG,CAACD,OAAO,CAAC;MAE/B,IAAIxB,OAAO,CAACG,QAAQ,KAAKqB,OAAO,CAACrB,QAAQ,EAAE;QACvCsB,aAAa,CAACzL,IAAI,OAAlByL,aAAa,kCACN3B,4BAA4B,CAACmB,KAAK,CAAC/J,KAAK,EAAE8I,OAAO,EAAEwB,OAAO,CAAC,EACjE;MACL;MAEA,uBAAI,CAACP,KAAK,CAACxL,GAAG,CAACyE,EAAE,CAACY,OAAO,CAAC,EAAC7E,GAAG,wBAAIwL,aAAa,CAAC;IACpD;EAAC;IAAA;IAAA,OAED,uBAAsBvH,EAAW,EAAQ;MACrC,IAAI,CAACW,IAAI,CAACrC,SAAS,EAAE;MACrB,IAAI,CAACyI,KAAK,CAACzI,SAAS,EAAE;MACtB,IAAI,CAAC4C,KAAK,CAAC5C,SAAS,EAAE;MACtB,IAAI,CAAC6F,OAAO,CAAC7F,SAAS,EAAE;MACxB,IAAI,CAAC4I,eAAe,CAAC5I,SAAS,EAAE;MAEhC,IAAI,CAAC8I,eAAe,OAApB,IAAI,kCAAoBpH,EAAE,CAAC6C,KAAK,CAAChC,MAAM,EAAC;MAExC,IAAI,CAAC8D,eAAe,CAACxF,OAAO,EAAE;IAClC;EAAC;IAAA;IAAA,OAED,2BAA0Ba,EAAe,EAAQ;MAC7C,IAAI,CAACmE,OAAO,CAACnH,KAAK,CAAChB,OAAO,CAAC,UAACmI,OAAO,EAAK;QACpC,IAAMK,MAAM,GAAGL,OAAO,CAAC5I,GAAG,CAACyE,EAAE,CAACyE,IAAI,CAACrH,EAAE,CAAC;QAEtC,IAAI,CAAEoH,MAAM,EAAE;UACV;UACA;QACJ;QAEAL,OAAO,CAACpI,GAAG,CAAC,0DAAIyI,MAAM;UAAEC,IAAI,EAAEzE,EAAE,CAACyE;QAAI,GAAE;MAC3C,CAAC,CAAC;IACN;EAAC;EAAA;AAAA;;;;;;;;;ACzQE,IAAK+C,KAAK;AAKhB,WALWA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;AAAA,GAALA,KAAK,KAALA,KAAK;AAOV,IAAMC,oBAAoB;EAAA;EAAA;EAAA;AAAA;AAK1B,IAAMC,WAAW;EAAA;IAAA;EAAA;EAAA;IAAA;IAAA,OAiBpB,oBAAqD;MACjD,OAAOC,MAAM,CAAC/I,IAAI,CAAC,IAAI,CAAC+B,IAAI,CAAC;IACjC;EAAC;IAAA;IAAA,OAED,mBAAwB6E,IAA4B,EAAoC;MACpF,OAAO,IAAI,CAAC7E,IAAI,CAAC6E,IAAI,CAAC;IAC1B;EAAC;IAAA;IAAA,OAED,6BAAkCoC,cAAsC,EAAEC,KAAY,EAAW;MAC7F,IAAMC,GAAG,GAAG,IAAI,CAACC,SAAS,CAACH,cAAc,CAAC;MAE1C,IAAI,CAAEE,GAAG,EAAE;QACP,MAAM,IAAIhH,KAAK,oCAA6B8G,cAAc,EAAG;MACjE;MAEA,OAAOC,KAAK,IAAI,IAAI,CAACE,SAAS,CAACH,cAAc,CAAC,CAACI,QAAQ;IAC3D;EAAC;EAAA;AAAA;AACJ,2BAlCYN,WAAW,UACU;EAC1BO,IAAI,EAAE;IAACpK,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACU;EAAI,CAAC;EAC3CC,YAAY,EAAE;IAACtK,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACY;EAAM,CAAC;EACrDC,WAAW,EAAE;IAACxK,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACc;EAAK,CAAC;EACnDC,gBAAgB,EAAE;IAAC1K,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACc;EAAK,CAAC;EACxDE,UAAU,EAAE;IAAC3K,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACU;EAAI,CAAC;EACjDO,YAAY,EAAE;IAAC5K,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACU;EAAI,CAAC;EACnDQ,WAAW,EAAE;IAAC7K,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACmB;EAAK,CAAC;EACnDC,kBAAkB,EAAE;IAAC/K,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACc;EAAK,CAAC;EAC1DO,iBAAiB,EAAE;IAAChL,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACU;EAAI,CAAC;EACxDY,cAAc,EAAE;IAACjL,KAAK,EAAE,CAAC,IAAI,CAAC;IAAEmK,QAAQ,EAAER,KAAK,CAACmB;EAAK,CAAC;EACtDI,iBAAiB,EAAE;IAAClL,KAAK,EAAE,CAAC,IAAI,EAAE;IAAEmK,QAAQ,EAAER,KAAK,CAACmB;EAAK,CAAC;EAC1DK,gBAAgB,EAAE;IAACnL,KAAK,EAAE,CAAC,IAAI,EAAE;IAAEmK,QAAQ,EAAER,KAAK,CAACc;EAAK,CAAC;EACzDW,gBAAgB,EAAE;IAACpL,KAAK,EAAE,CAAC,IAAI,EAAE;IAAEmK,QAAQ,EAAER,KAAK,CAACc;EAAK;AAC5D,CAAC;;;;;;;;;;;;;;iEC1BL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAayD;AACI;AAClB;AACE;AAE7C,IAAMY,OAAO,GAAG,SAAVA,OAAO,CACTxJ,QAAsB,EACtByJ,MAAuC,EACvCC,QAA2C;EAAA;EAAA,OAC1C,sBAAC1J,QAAQ,CAACkB,OAAO,iEAAI,EAAE,yBAAKlB,QAAQ,CAACC,MAAM,+DAAI,EAAE,CAAC,yBAAID,QAAQ,CAACE,OAAO,iEAAI,EAAE,CAAC,IAAIuJ,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,CAAC,IAAIC,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,EAAE,CAAC;AAAA;AAEtH,IAAMC,eAAe,GAAG,SAAlBA,eAAe,CAAIC,UAA8D;EAAA,OAAaJ,OAAO,CACvGI,UAAU,CAAC5J,QAAQ,EAAE4J,UAAU,CAACH,MAAM,EAAEG,UAAU,CAACF,QAAQ,CAC9D;AAAA;AAYM,IAAMG,kBAAkB;EAAA;EAAA;EAI3B,4BAA2BzJ,OAAyB,EAAE;IAAA;IAAA;IAClD;IAAQ,MADeA,OAAyB,GAAzBA,OAAyB;IAAA,iGAHtB,IAAI/C,iBAAiB,EAAgC;IAAA,yGAC7C,IAAIqC,eAAe,EAAE;IAIvD,MAAKU,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,sBAAsB,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAKwJ,0BAA0B,CAACxJ,EAAE,CAAC;IAAA,EAAC;IACzF,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,6BAA6B,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAKwJ,0BAA0B,CAACxJ,EAAE,CAAC;IAAA,EAAC;IAChG,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAKgE,kBAAkB,CAAChE,EAAE,CAAC;IAAA,EAAC;IACzE,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,WAAW,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAKgE,kBAAkB,CAAChE,EAAE,CAAC;IAAA,EAAC;IACtE,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAKQ,iBAAiB,CAACR,EAAE,CAAC;IAAA,EAAC;IACvE,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,UAAU,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAKQ,iBAAiB,CAACR,EAAE,CAAC;IAAA,EAAC;IACpE,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,cAAc,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAKU,kBAAkB,CAACV,EAAE,CAAC;IAAA,EAAC;IACzE,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,aAAa,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAK6G,iBAAiB,CAAC7G,EAAE,CAAC;IAAA,EAAC;IACvE,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,oBAAoB,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAK+D,wBAAwB,CAAC/D,EAAE,CAAC;IAAA,EAAC;IACrF,MAAKF,OAAO,CAACC,MAAM,CAAClB,EAAE,CAAC,mBAAmB,EAAE,UAAAmB,EAAE;MAAA,OAAI,MAAK6D,uBAAuB,CAAC7D,EAAE,CAAC;IAAA,EAAC;IAAC;EACxF;EAAC;IAAA;IAAA;MAAA,oHAED,kBACIN,QAAsB,EACtByJ,MAAsC,EACtCC,QAA0C;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAE1C,IAAI,CAACK,gBAAgB,CAAC/J,QAAQ,CAAC;gBAEzBtC,EAAE,GAAG8L,OAAO,CAACxJ,QAAQ,EAAEyJ,MAAM,EAAEC,QAAQ,CAAC;gBAE9C,IAAI,IAAI,CAACM,kBAAkB,CAACrI,QAAQ,CAACjE,EAAE,CAAC,EAAE;kBACtC,IAAI,CAACsM,kBAAkB,CAACpI,kBAAkB,8GAAC;oBAAA;oBAAA;sBAAA;wBAAA;0BAAA;4BAAA;4BAAA,OAClB,MAAI,CAACxB,OAAO,CAACC,MAAM,CAACgB,IAAI,CACzC,yBAAyB,EACzB;8BAACrB,QAAQ,EAARA,QAAQ;8BAAEyJ,MAAM,EAANA,MAAM;8BAAEC,QAAQ,EAARA;4BAAQ,CAAC,CAC/B;0BAAA;4BAHK1L,MAAM;4BAAA,KAIRA,MAAM,CAACZ,KAAK;8BAAA;8BAAA;4BAAA;4BAAA,MACNY,MAAM,CAACZ,KAAK;0BAAA;4BAEtB,MAAI,CAAC0M,0BAA0B,CAAC9L,MAAM,CAACtB,IAAI,CAAC;0BAAC;0BAAA;4BAAA;wBAAA;sBAAA;oBAAA;kBAAA,CAChD,IAAEgB,EAAE,CAAC;gBACV;gBAAC;gBAAA,OAEK,IAAI,CAACsM,kBAAkB,CAACnO,GAAG,CAAC6B,EAAE,CAAC;cAAA;gBAAA,kCAC9B,IAAI,CAACkM,UAAU,CAAC/N,GAAG,CAAC6B,EAAE,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjC;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,YAAUnC,SAAmB,EAAEC,OAA0B,EAAQ;MAC7D,OAAO,+GAASD,SAAS,EAAEC,OAAO;IACtC;EAAC;IAAA;IAAA;MAAA,4GAED,kBACIyO,eAAkD,EAClDjK,QAAsB;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA,IAEhBiK,eAAe,CAAC5L,MAAM;kBAAA;kBAAA;gBAAA;gBAAA,MAClB,IAAI+C,KAAK,CAAC,wCAAwC,CAAC;cAAA;gBAAA;gBAAA,OAG9B,IAAI,CAAC8I,oBAAoB,CAAClK,QAAQ,CAAC;cAAA;gBAA5DmK,gBAAgB;gBAChBC,OAAiB,GAAG,EAAE;gBAE5BH,eAAe,CAAC3N,OAAO,CAAC,UAAAwJ,IAAI,EAAI;kBAC5B,IAAI,CAAEqE,gBAAgB,GAAGnC,qBAAqB,CAAClC,IAAI,CAAC,CAAC3H,KAAK,EAAE;oBACxDiM,OAAO,CAAChO,IAAI,CAAC0J,IAAI,CAAW;kBAChC;gBACJ,CAAC,CAAC;gBAAC,kCAEI;kBACHuE,EAAE,EAAED,OAAO,CAAC/L,MAAM,KAAK,CAAC;kBACxBiM,MAAM,EAAEF,OAAO,CAAC/L,MAAM,KAAK,CAAC;kBAC5BkM,MAAM,EAAEH,OAAO,CAAC/L,MAAM,GAAG4L,eAAe,CAAC5L,MAAM;kBAC/C+L,OAAO,EAAPA;gBACJ,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACJ;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,2HAED,kBAAkCpK,QAAsB;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBACpD,IAAI,CAAC+J,gBAAgB,CAAC/J,QAAQ,CAAC;gBAAC;gBAAA,OAEV,IAAI,CAACI,OAAO,CAACsE,KAAK,EAAE;cAAA;gBAApCC,MAAM,kBAAgCjH,EAAE;gBAAA;gBAAA,OACN,IAAI,CAAC8M,kBAAkB,CAACxK,QAAQ,CAAC;cAAA;gBAAA;gBAAA;gBAAlEgF,WAAW;gBAAES,UAAU;gBACxBgF,SAAmB,wEAAQzF,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEqC,KAAK,mEAAI,EAAE,GAAG,0DAAI5B,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE4B,KAAK,iEAAI,EAAE;gBACjFzH,QAA8C,GAAG;gBACnD;gBACA,IAAI,CAAC8K,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE/F,MAAM,CAAC,CAACgG,IAAI,CAAC,UAAAC,CAAC;kBAAA,OAAIA,CAAC,CAAChB,UAAU;gBAAA,EAAC,CACjE;gBAAA,eAEG5J,QAAQ,CAACkB,OAAO;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAAW,IAAI,CAACd,OAAO,CAACe,MAAM,CAACtF,GAAG,EAAE;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA,eAAhC,sBAAmCqB,GAAG,CAAC8C,QAAQ,CAACkB,OAAO,CAAC;cAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBACtE2J,cAA4B,GAAG;kBAAC3J,OAAO,EAAElB,QAAQ,CAACkB;gBAAO,CAAC;gBAChEtB,QAAQ,CAACxD,IAAI,CAAC,IAAI,CAAC0O,qBAAqB,CAACD,cAAc,EAAEJ,SAAS,CAAC,CAAC;gBACpE7K,QAAQ,CAACxD,IAAI,CAAC,IAAI,CAACsO,aAAa,CAACG,cAAc,EAAE,MAAM,EAAElG,MAAM,CAAC,CAACgG,IAAI,CAAC,UAAAC,CAAC;kBAAA,OAAIA,CAAC,CAAChB,UAAU;gBAAA,EAAC,CAAC;cAAC;gBAAA,eAG1F5J,QAAQ,CAACC,MAAM;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAAW,IAAI,CAACG,OAAO,CAACoB,KAAK,CAAC3F,GAAG,EAAE;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA,eAA/B,sBAAkCqB,GAAG,CAAC8C,QAAQ,CAACC,MAAM,CAAC;cAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBACnE4K,eAA4B,GAAG;kBAAC3J,OAAO,EAAElB,QAAQ,CAACkB,OAAO;kBAAEjB,MAAM,EAAED,QAAQ,CAACC;gBAAM,CAAC;gBACzF,IAAIwK,SAAS,CAACpM,MAAM,EAAE;kBAClBuB,QAAQ,CAACxD,IAAI,CAAC,IAAI,CAAC0O,qBAAqB,CAACD,eAAc,EAAEJ,SAAS,CAAC,CAAC;gBACxE;gBACA7K,QAAQ,CAACxD,IAAI,CAAC,IAAI,CAACsO,aAAa,CAACG,eAAc,EAAE,MAAM,EAAElG,MAAM,CAAC,CAACgG,IAAI,CAAC,UAAAC,CAAC;kBAAA,OAAIA,CAAC,CAAChB,UAAU;gBAAA,EAAC,CAAC;cAAC;gBAAA,eAG1F5J,QAAQ,CAACE,OAAO;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAAW,IAAI,CAACE,OAAO,CAACoB,KAAK,CAACuJ,SAAS,CAAC/K,QAAQ,CAACC,MAAM,CAAC;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA,eAApD,uBAAuD/C,GAAG,CAAC8C,QAAQ,CAACE,OAAO,CAAC;cAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAChG,IAAIuK,SAAS,CAACpM,MAAM,EAAE;kBAClBuB,QAAQ,CAACxD,IAAI,CAAC,IAAI,CAAC0O,qBAAqB,CAAC9K,QAAQ,EAAEyK,SAAS,CAAC,CAAC;gBAClE;gBACA7K,QAAQ,CAACxD,IAAI,CAAC,IAAI,CAACsO,aAAa,CAAC1K,QAAQ,EAAE,MAAM,EAAE2E,MAAM,CAAC,CAACgG,IAAI,CAAC,UAAAC,CAAC;kBAAA,OAAIA,CAAC,CAAChB,UAAU;gBAAA,EAAC,CAAC;cAAC;gBAAA,gBAGjF,IAAI;gBAAA;gBAAA,OAAkC7M,OAAO,CAACiO,GAAG,CAACpL,QAAQ,CAAC;cAAA;gBAAA;gBAAA,gDAAtDqL,0BAA0B;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACzC;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,oCAAmC3K,EAAsD,EAAQ;MAC7F,IAAI,CAACsJ,UAAU,CAACvN,GAAG,CAAC,CAACsN,eAAe,CAACrJ,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC;MAC9C,IAAI,CAACvB,IAAI,CAAC,QAAQ,CAAC;IACvB;EAAC;IAAA;IAAA,OAED,4BAA2BuB,EAA4B,EAAQ;MAAA;MAC3D,IAAM3C,GAAG,GAAG,IAAI,CAACuN,0BAA0B,CAAC1B,OAAO,CAAC;QAACtI,OAAO,EAAEZ,EAAE,CAAC5C;MAAE,CAAC,CAAC,CAAC;MACtE,6BAAI,CAACsM,kBAAkB,EAAC5E,MAAM,mEAAIzH,GAAG,EAAC;IAC1C;EAAC;IAAA;IAAA;MAAA,wHAED,kBAAgC2C,EAA0B;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAClC,IAAI,CAACF,OAAO,CAACoB,KAAK,CAAC3F,GAAG,EAAE;cAAA;gBAAtCkH,IAAI,kBAAoClH,GAAG,CAACyE,EAAE,CAAC5C,EAAE;gBACvD,IAAIqF,IAAI,EAAE;kBACApF,GAAG,GAAG,IAAI,CAACuN,0BAA0B,CAAC1B,OAAO,CAAC;oBAACtI,OAAO,EAAE6B,IAAI,CAAC7B,OAAO;oBAAEjB,MAAM,EAAE8C,IAAI,CAACrF;kBAAE,CAAC,CAAC,CAAC;kBAC9F,8BAAI,CAACsM,kBAAkB,EAAC5E,MAAM,oEAAIzH,GAAG,EAAC;gBAC1C;cAAC;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACJ;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,4BAA2B2C,EAAgB,EAAQ;MAAA;MAC/C,IAAM3C,GAAG,GAAG,IAAI,CAACuN,0BAA0B,CAAC1B,OAAO,CAAClJ,EAAE,CAACN,QAAQ,CAAC,CAAC;MACjE,8BAAI,CAACgK,kBAAkB,EAAC5E,MAAM,oEAAIzH,GAAG,EAAC;IAC1C;EAAC;IAAA;IAAA,OAED,2BAA0B2C,EAAe,EAAQ;MAAA;MAC7C,IAAM3C,GAAG,GAAG,IAAI,CAACuN,0BAA0B,CAAC1B,OAAO,CAAC;QAACtI,OAAO,EAAEZ,EAAE,CAACY;MAAO,CAAC,EAAE,MAAM,EAAEZ,EAAE,CAAC5C,EAAE,CAAC,CAAC;MAC1F,8BAAI,CAACsM,kBAAkB,EAAC5E,MAAM,oEAAIzH,GAAG,EAAC;IAC1C;EAAC;IAAA;IAAA,OAED,kCAAiC2C,EAAsB,EAAQ;MAAA;MAC3D,IAAIA,EAAE,CAACqE,MAAM,0BAAK,IAAI,CAACvE,OAAO,CAACmD,EAAE,qDAAf,iBAAiB7F,EAAE,GAAE;QACnC;QACA,IAAI,CAACqB,IAAI,CAAC,QAAQ,CAAC;MACvB;IACJ;EAAC;IAAA;IAAA,OAED,iCAAgCuB,EAAqB,EAAQ;MAAA;MACzD,IAAIA,EAAE,CAACqE,MAAM,2BAAK,IAAI,CAACvE,OAAO,CAACmD,EAAE,sDAAf,kBAAiB7F,EAAE,GAAE;QACnC;QACA,IAAI,CAACqB,IAAI,CAAC,QAAQ,CAAC;MACvB;IACJ;;IAEA;AACJ;AACA;EAFI;IAAA;IAAA,OAGA,oCAAmCoM,MAAc,EAAY;MAAA;MACzD,IAAMxN,GAAa,GAAG,EAAE;MACxB,IAAI,CAACiM,UAAU,CAACtM,KAAK,CAAChB,OAAO,CAAC,UAACsN,UAAU,EAAK;QAC1C,IAAMlM,EAAE,GAAGiM,eAAe,CAACC,UAAU,CAAC;QACtC,IAAIlM,EAAE,CAAC0N,UAAU,CAACD,MAAM,CAAC,EAAE;UACvBxN,GAAG,CAACvB,IAAI,CAACsB,EAAE,CAAC;UACZ,MAAI,CAACkM,UAAU,UAAO,CAAClM,EAAE,CAAC;QAC9B;MACJ,CAAC,CAAC;MACF,OAAOC,GAAG;IACd;EAAC;IAAA;IAAA;MAAA,4HAED,kBACIqC,QAAsB,EACtByK,SAAmB;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAEU1N,OAAO,CAACiO,GAAG,CAACP,SAAS,CAACvO,GAAG,CAClD,UAAAmP,MAAM;kBAAA,OAAI,MAAI,CAACX,aAAa,CAAC1K,QAAQ,EAAE,MAAM,EAAEqL,MAAM,CAAC;gBAAA,EACzD,CAAC;cAAA;gBAFIC,cAAc;gBAAA,kCAIb,IAAI,CAACC,iCAAiC,CAACvL,QAAQ,CAACkB,OAAO,EAAEoK,cAAc,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAClF;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,wIAED,kBACIpK,OAAe,EACf0I,UAAkC;QAAA;QAAA;UAAA;YAAA;cAAA;gBAE9B4B,MAAM,GAAG,CAAC,EAAEC,MAAM,GAAG,CAAC;gBAAA;gBAAA,OACN,IAAI,CAACrL,OAAO,CAACe,MAAM,CAACuK,QAAQ,CAACxK,OAAO,CAAC;cAAA;gBAAnDmG,KAAK;gBACLsE,gBAAgB,GAAG/B,UAAU,CAACgC,IAAI,CACpC,UAACC,CAAC,EAAEC,CAAC;kBAAA,OACDzE,KAAK,CAACxL,GAAG,CAACgQ,CAAC,CAACnC,QAAQ,CAAC,CAACnD,QAAQ,GAAGc,KAAK,CAACxL,GAAG,CAACiQ,CAAC,CAACpC,QAAQ,CAAC,CAACnD,QAAQ;gBAAA,EACtE,EAED;gBACMwF,iBAAiB,GAAGnC,UAAU,CAACoC,MAAM,CACvC,UAACC,aAAqB,EAAEC,YAAkC;kBAAA;kBAAA,OACtDC,IAAI,CAACC,GAAG,CACJH,aAAa,qDACbC,YAAY,CAACtC,UAAU,CAACyC,KAAK,2DAA7B,uBAA+BxP,QAAQ,CAAC,CAAC,CAAC,CAACwB,MAAM,yEAAI,CAAC,sDACtD6N,YAAY,CAACtC,UAAU,CAAC0C,IAAI,2DAA5B,uBAA8BzP,QAAQ,CAAC,CAAC,CAAC,CAACwB,MAAM,2EAAI,CAAC,CACxD;gBAAA,GACL,CAAC,CACJ;gBAEDsN,gBAAgB,CAACrP,OAAO,CAAC,UAAAiQ,cAAc,EAAI;kBAAA;kBACvC,IAAM3C,UAAU,GAAG2C,cAAc,CAAC3C,UAAU;kBAC5C,IAAM4C,YAAY,gDAAG5C,UAAU,CAAC0C,IAAI,qDAAf,iBAAiBzP,QAAQ,CAAC,CAAC,CAAC,CAAC4P,KAAK,CAAC,EAAE,CAAC,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,EAAE,CAAC,yEAAI,EAAE;kBACpF,IAAMC,YAAY,iDAAGhD,UAAU,CAACyC,KAAK,sDAAhB,kBAAkBxP,QAAQ,CAAC,CAAC,CAAC,CAAC4P,KAAK,CAAC,EAAE,CAAC,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,EAAE,CAAC,yEAAI,EAAE;kBAErF,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,iBAAiB,EAAEc,CAAC,EAAE,EAAE;oBAAA;oBACxC,IAAMP,IAAI,GAAGQ,QAAQ,oBAACN,YAAY,CAACK,CAAC,CAAC,6DAAI,GAAG,CAAC;oBAC7C,IAAMR,KAAK,GAAGS,QAAQ,oBAACF,YAAY,CAACC,CAAC,CAAC,6DAAI,GAAG,CAAC;oBAE9C,IAAIP,IAAI,EAAE;sBACNb,MAAM,IAAI,CAAC,IAAIoB,CAAC;oBACpB;oBAEA,IAAIR,KAAK,EAAE;sBACPb,MAAM,IAAI,CAAC,IAAIqB,CAAC;oBACpB;kBACJ;gBACJ,CAAC,CAAC;gBAAC,kCAEI;kBAACR,KAAK,EAAEb,MAAM;kBAAEc,IAAI,EAAEb;gBAAM,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACvC;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,oCAAmCsB,0BAAuD,EAAU;MAChG,IAAI/O,MAAM,GAAG,CAAC;MAAC,6DAEK+O,0BAA0B;QAAA;MAAA;QAA9C,oDAAgD;UAAA,IAArC5O,KAAK;UACZ,IAAIA,KAAK,CAACkO,KAAK,GAAGrE,qBAAqB,CAAC,MAAM,CAAC,CAAC7J,KAAK,EAAE;YACnD,OAAO,IAAI,CAAC6O,kBAAkB,EAAE;UACpC;UAEAhP,MAAM,GAAIA,MAAM,GAAG,CAACG,KAAK,CAACmO,IAAI,GAAInO,KAAK,CAACkO,KAAK;QACjD;MAAC;QAAA;MAAA;QAAA;MAAA;MAED,OAAOrO,MAAM;IACjB;EAAC;IAAA;IAAA,OAED,8BAAqC;MACjC,IAAIA,MAAM,GAAG,CAAC;MAAC,8DAEIgK,oBAAoB,EAAE;QAAA;MAAA;QAAzC,uDAA2C;UAAA,IAAhClC,IAAI;UACX9H,MAAM,IAAIgK,qBAAqB,CAAClC,IAAI,CAAC,CAAC3H,KAAK;QAC/C;MAAC;QAAA;MAAA;QAAA;MAAA;MAED,OAAOH,MAAM;IACjB;EAAC;IAAA;IAAA;MAAA,yHAED,kBAAiCgC,QAAsB;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAC7BjD,OAAO,CAACiO,GAAG,CAAC,CAC9BhL,QAAQ,CAACkB,OAAO,GAAG,IAAI,CAACd,OAAO,CAACe,MAAM,CAACuD,KAAK,CAAC1E,QAAQ,CAACkB,OAAO,CAAC,GAAG,IAAI,EACrElB,QAAQ,CAACC,MAAM,GAAG,IAAI,CAACG,OAAO,CAACoB,KAAK,CAACkD,KAAK,CAAC1E,QAAQ,CAACC,MAAM,CAAC,GAAG,IAAI,CACrE,CAAC;cAAA;gBAHIiN,OAAO;gBAKPC,SAAS,GAAGnN,QAAQ,CAACkB,OAAO,IAAI,CAAEgM,OAAO,CAAC,CAAC,CAAC;gBAC5CE,QAAQ,GAAGpN,QAAQ,CAACC,MAAM,IAAI,CAAEiN,OAAO,CAAC,CAAC,CAAC;gBAAA,MAE5CC,SAAS,IAAIC,QAAQ;kBAAA;kBAAA;gBAAA;gBACfjF,KAAK,GAAGgF,SAAS,oBAAanN,QAAQ,CAACkB,OAAO,yBAAelB,QAAQ,CAACC,MAAM,MAAG;gBAAA,MAC/E,IAAImB,KAAK,qDAA8C+G,KAAK,uCAAoC;cAAA;gBAAA,kCAGnG+E,OAAO;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjB;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,0BAAyBlN,QAAsB,EAAQ;MACnD,IAAIA,QAAQ,CAACE,OAAO,IAAI,CAAEF,QAAQ,CAACC,MAAM,EAAE;QACvC,MAAM,IAAImB,KAAK,CAAC,+BAA+B,CAAC;MACpD;IACJ;EAAC;EAAA;AAAA,EAzQmC/F,WAAW;;;+DCtCnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC4C;AACE;AACU;AACd;AAEnC,IAAMgS,gBAAgB;EACzB;AACJ;AACA;;EAEI;AACJ;AACA;;EAEI;AACJ;AACA;;EAMI,0BAAmChN,MAA2B,EAAE;IAAA;IAAA;IAAA,KAA7BA,MAA2B,GAA3BA,MAA2B;IAAA,qDAbhC,IAAIwJ,kBAAkB,CAAC,IAAI,CAAC;IAAA,+CAIpB,IAAIjG,YAAY,CAAC,IAAI,CAAC;IAAA,gDAInC,IAAI+C,aAAa,CAAC,IAAI,CAAC;IAAA,6CAE5B,IAAI;IAAA,yDACW,IAAIpH,YAAY,EAAE;IAGjD,IAAI,CAACc,MAAM,CAAClB,EAAE,CAAC,SAAS,EAAE,UAAAmB,EAAE;MAAA,OAAI,KAAI,CAACC,aAAa,CAACD,EAAE,CAAC;IAAA,EAAC;EAC3D;EAAC;IAAA;IAAA,KAED,eAA6B;MACzB,OAAO,IAAI,CAACgN,GAAG;IACnB;EAAC;IAAA;IAAA;MAAA,wGAED;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACU,IAAI,CAACrI,eAAe,CAACzF,OAAO;cAAA;gBAAA,iCAC3B,IAAI,CAAC8N,GAAG;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAClB;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,uBAAsBhN,EAAW,EAAQ;MACrC,IAAI,CAACgN,GAAG,GAAGhN,EAAE,CAACyE,IAAI;MAClB,IAAI,CAACE,eAAe,CAACxF,OAAO,EAAE;IAClC;EAAC;EAAA;AAAA;;;;;;;;;kECvCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoF;AAClB;AAAA,IAY7D8N,wBAAwB;AAAA,WAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;AAAA,GAAxBA,wBAAwB,KAAxBA,wBAAwB;AAOtB,IAAMC,mBAAmB;EAAA;EAAA;EAU5B,6BAAoCC,OAA+B,EAAE;IAAA;IAAA;IAAA;IACjE;IAAQ,MADwBA,OAA+B,GAA/BA,OAA+B;IAAA,8FAT3CF,wBAAwB;IAAA;IAAA,2FAGjB,IAAI;IAAA,kGACyC,EAAE;IAAA;IAAA;IAAA;IAO1E,IAAI,CAAC,MAAKE,OAAO,CAACC,KAAK,IAAI,CAAC,MAAKD,OAAO,CAACE,aAAa,EAAE;MACpD,MAAM,IAAIvM,KAAK,CAAC,qCAAqC,CAAC;IAC1D;IACA,6BAAI,MAAKqM,OAAO,CAACG,aAAa,yEAAI,IAAI,EAAE;MACpC,MAAKzK,KAAK,GAAG,IAAIkK,gBAAgB,CAAC,iDAAK;IAC3C;IAAC;EACL;EAAC;IAAA;IAAA;MAAA,gHAED;QAAA;UAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBACUQ,UAAU,GAAG,IAAI,CAACJ,OAAO,CAACC,KAAK,mBAAY,IAAI,CAACD,OAAO,CAACC,KAAK,mBAAa,IAAI,CAACD,OAAO,CAACE,aAAa,CAAE;gBAC5G,IAAI,CAACG,EAAE,GAAG,IAAIC,SAAS,WAAI,IAAI,CAACN,OAAO,CAACO,GAAG,cAAIH,UAAU,EAAG;gBAC5D,IAAI,CAACC,EAAE,CAACG,OAAO,GAAG,UAAA3N,EAAE;kBAAA,OAAI,MAAI,CAAC4N,OAAO,CAAC5N,EAAE,CAAC;gBAAA;gBACxC,IAAI,CAACwN,EAAE,CAACK,SAAS,GAAG,UAAA7N,EAAE;kBAAA,OAAI,MAAI,CAAC8N,SAAS,CAAC9N,EAAE,CAAC;gBAAA;gBAC5C,IAAI,CAAC+N,mBAAmB,GAAGC,UAAU,CACjC;kBAAA,OAAM,MAAI,CAACC,wBAAwB,EAAE;gBAAA,4BACrC,IAAI,CAACd,OAAO,CAACe,mBAAmB,yEAAI,KAAK,CAC5C;gBACD,IAAI,CAACC,aAAa,GAAG,KAAK;gBAAC,iCACpB,IAAI1R,OAAO,CAAC;kBAAA,kCAAIC,IAAI;oBAAJA,IAAI;kBAAA;kBAAA,OAAK,MAAI,CAAC0R,sBAAsB,GAAG1R,IAAI;gBAAA,EAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACtE;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,sBAA0B;MAAA;MACtB,IAAI,CAAC2R,SAAS,GAAG,EAAE;MACnB,gBAAI,CAACb,EAAE,6CAAP,SAASc,KAAK,EAAE;MAChB,IAAI,CAACd,EAAE,GAAG,IAAI;IAClB;EAAC;IAAA;IAAA;MAAA,6GAED,kBAAyDe,WAAwB,EAAEC,WAAwC;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA,MAEnH,CAAC,IAAI,CAAChB,EAAE,IAAI,CAAC,IAAI,CAACA,EAAE,CAACiB,MAAM,EAAE,IAAI,CAACjB,EAAE,CAACkB,OAAO,CAAC,CAACC,QAAQ,CAAC,IAAI,CAACnB,EAAE,CAACoB,UAAU,CAAC;kBAAA;kBAAA;gBAAA;gBAAA,MACpE,IAAI9N,KAAK,CAAC,gDAAgD,CAAC;cAAA;gBAAA,MAGjE,IAAI,CAAC0M,EAAE,CAACoB,UAAU,KAAK,IAAI,CAACpB,EAAE,CAACqB,UAAU,IAAI,CAAC,IAAI,CAACV,aAAa;kBAAA;kBAAA;gBAAA;gBAChE,IAAI,CAACE,SAAS,CAACvS,IAAI,CAAC,CAACyS,WAAW,EAAEC,WAAW,CAAC,CAAQ;gBAAC;cAAA;gBAAA,MAIvD,IAAI,CAAChB,EAAE,CAACoB,UAAU,KAAK,IAAI,CAACpB,EAAE,CAACsB,IAAI;kBAAA;kBAAA;gBAAA;gBAAA,MAC7B,IAAIhO,KAAK,mCAA4B,IAAI,CAAC0M,EAAE,CAACoB,UAAU,EAAG;cAAA;gBAG9DpS,QAAQ,GAAG,IAAI,CAACuS,cAAc,CAA8BR,WAAW,EAAEC,WAAW,CAAC;gBAC3F,IAAI,CAAChB,EAAE,CAACzM,IAAI,CAACiO,IAAI,CAACC,SAAS,CAACzS,QAAQ,CAAC,CAAC;gBAAC,kCAChC,IAAI,CAAC0S,gCAAgC,CAAc1S,QAAQ,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACtE;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,mBAAkBd,KAAmB,EAAQ;MACzC,IAAMc,QAAkB,GAAGwS,IAAI,CAACG,KAAK,CAACzT,KAAK,CAACU,IAAI,CAAC;MACjD,IAAI,CAACgT,sBAAsB,CAAC5S,QAAQ,CAAC;MACrC,IAAI,CAACiC,IAAI,CAACjC,QAAQ,CAACL,IAAI,EAAEK,QAAQ,CAACJ,IAAI,CAAC;MACvC,IAAI,CAACqC,IAAI,CAAC,IAAI,CAAC4Q,KAAK,CAAC9M,OAAO,EAAE/F,QAAQ,CAAC;;MAEvC;MACA,IAAI,CAAC,IAAI,CAAC2R,aAAa,EAAE;QACrB,IAAMmB,eAAe,GAAG9S,QAAQ,CAACL,IAAI,KAAK,OAAO;QACjD,IAAI,CAACgS,aAAa,GAAGmB,eAAe;QACpC,IAAIA,eAAe,EAAE;UACjB,IAAI,CAAClB,sBAAsB,CAAC,CAAC,CAAC,EAAE;UAChC,IAAI,CAAC3P,IAAI,CAAC,IAAI,CAAC4Q,KAAK,CAACE,OAAO,CAAC;UAC7B,IAAI,CAACC,aAAa,EAAE;QACxB,CAAC,MAAM;UACH,IAAI,CAACpB,sBAAsB,CAAC,CAAC,CAAC,CAAC5R,QAAQ,CAACJ,IAAI,CAAC;QACjD;MACJ;IACJ;EAAC;IAAA;IAAA,OAED,iBAAgBV,KAAiB,EAAQ;MACrC+T,YAAY,CAAC,IAAI,CAAC1B,mBAAmB,CAAC;MACtC,IAAM2B,SAAS,GAAGhU,KAAK,CAACiU,IAAI,KAAK,IAAI,CAAC,CAAC;MACvC,IAAID,SAAS,EAAE;QACX,IAAI,CAACH,OAAO,EAAE;MAClB;MACA,IAAI,CAAC9Q,IAAI,CAAC,IAAI,CAAC4Q,KAAK,CAACO,UAAU,EAAEF,SAAS,CAAC;IAC/C;EAAC;IAAA;IAAA,OAED,yBAA8B;MAAA;MAC1B;MACA,IAAIG,SAAS,GAAG,CAAC;MAAC,2BACPC,SAAS;QAAA;QAChB,IAAM1T,IAAI,GAAG,MAAI,CAACiS,SAAS,CAACyB,SAAS,CAAC;QACtC9B,UAAU,CAAC;UAAA,OAAM,MAAI,CAACjN,IAAI,OAAT,MAAI,wCAAS3E,IAAI,EAAC;QAAA,GAAEyT,SAAS,CAAC;QAC/CA,SAAS,6BAAI,MAAI,CAAC1C,OAAO,CAAC4C,qBAAqB,yEAAI,GAAG;MAAC;MAH3D,KAAK,IAAMD,SAAS,IAAI,IAAI,CAACzB,SAAS,EAAE;QAAA,MAA7ByB,SAAS;MAIpB;MACA,IAAI,CAACzB,SAAS,GAAG,EAAE;MACnBoB,YAAY,CAAC,IAAI,CAAC1B,mBAAmB,CAAC;IAC1C;EAAC;IAAA;IAAA,OAED,oCAAyC;MACrC,IAAI,CAAC6B,UAAU,EAAE;MACjB,IAAI,CAACnR,IAAI,CAAC,IAAI,CAAC4Q,KAAK,CAACvS,KAAK,EAAE,IAAIgE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAChE;EAAC;EAAA;AAAA,EAvGoC5E,kBAAkB;;;+DCpB3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADoF;AAAA,IAY/E8T,qBAAqB;AAAA,WAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;EAArBA,qBAAqB;AAAA,GAArBA,qBAAqB,KAArBA,qBAAqB;AAMnB,IAAMC,gBAAgB;EAAA;EAAA;EAKzB,0BAAoC9C,OAAgC,EAAE;IAAA;IAAA;IAClE;IAAQ,MADwBA,OAAgC,GAAhCA,OAAgC;IAAA,wFAJ5C6C,qBAAqB;IAAA;IAMzC,IAAI,CAAC,MAAK7C,OAAO,CAACC,KAAK,IAAI,CAAC,MAAKD,OAAO,CAACE,aAAa,EAAE;MACpD,MAAM,IAAIvM,KAAK,CAAC,qCAAqC,CAAC;IAC1D;IAAC;EACL;EAAC;IAAA;IAAA;MAAA,uGAED,iBAAyDyN,WAAwB,EAAEC,WAAwC;QAAA;QAAA;UAAA;YAAA;cAAA;gBAEjHhS,QAAQ,GAAG,IAAI,CAACuS,cAAc,CAACR,WAAW,EAAEC,WAAW,CAAC;gBAC9D,IAAI,CAAC0B,SAAS,CAACpU,IAAI,CAAC;kBAACM,IAAI,EAAEI,QAAQ;kBAAE2T,QAAQ,EAAE,CAAC;kBAAEC,aAAa,EAAE;gBAAI,CAAC,CAAC;gBACvE,IAAI,CAACC,WAAW,CAAC,IAAI,CAACH,SAAS,CAACnS,MAAM,GAAG,CAAC,CAAC;gBAAC,iCACrC,IAAI,CAACmR,gCAAgC,CAAC1S,QAAQ,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACzD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,mBAAuB;MAAA;MACnB;MACA,IAAI,CAAC0T,SAAS,CAAClU,OAAO,CAAC,UAAAmB,IAAI,EAAI;QAC3B,IAAIA,IAAI,CAACiT,aAAa,EAAE;UACpBX,YAAY,CAACtS,IAAI,CAACiT,aAAa,CAAC;QACpC;QACA,MAAI,CAACzT,gBAAgB,UAAO,CAACQ,IAAI,CAACf,IAAI,CAACC,GAAG,CAAC;MAC/C,CAAC,CAAC;MACF,IAAI,CAAC6T,SAAS,GAAG,EAAE;MACnB,IAAI,CAACzR,IAAI,CAAC,IAAI,CAAC4Q,KAAK,CAACiB,OAAO,EAAE,KAAK,CAAC;IACxC;EAAC;IAAA;IAAA;MAAA,4GAED,kBAA0BC,KAAa,EAAEC,QAAkB;QAAA;QAAA;UAAA;YAAA;cAAA;gBACvD,IAAI,CAACN,SAAS,CAACzU,MAAM,CAAC8U,KAAK,EAAE,CAAC,CAAC;gBAAC;gBAAA,OACCC,QAAQ,CAACC,IAAI,EAAE;cAAA;gBAA1CjU,QAAkB;gBACxB,IAAI,CAAC4S,sBAAsB,CAAC5S,QAAQ,CAAC;gBACrC,IAAI,CAACiC,IAAI,CAACjC,QAAQ,CAACL,IAAI,EAAEK,QAAQ,CAACJ,IAAI,CAAC;gBACvC,IAAI,CAACqC,IAAI,CAAC,IAAI,CAAC4Q,KAAK,CAAC9M,OAAO,EAAE/F,QAAQ,CAAC;cAAC;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAC3C;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,iBAAkB+T,KAAa,EAAEG,IAAY,EAAQ;MAAA;QAAA;QAAA;MACjD,IAAI,IAAI,CAACR,SAAS,CAACK,KAAK,CAAC,CAACJ,QAAQ,8BAAK,IAAI,CAAChD,OAAO,CAACwD,cAAc,yEAAI,EAAE,CAAC,EAAE;QACvE,IAAI,CAACT,SAAS,CAACzU,MAAM,CAAC8U,KAAK,EAAE,CAAC,CAAC;QAC/B,IAAI,CAACK,uBAAuB,CAAC,IAAI,CAACV,SAAS,CAACK,KAAK,CAAC,CAACnU,IAAI,EAAE,IAAI0E,KAAK,uBAC/C4P,IAAI,6DACtB,CAAC;QACF;MACJ;MACA,IAAI,CAACR,SAAS,CAACK,KAAK,CAAC,CAACH,aAAa,GAAGpC,UAAU,CAC5C;QAAA,OAAM,MAAI,CAACqC,WAAW,CAACE,KAAK,CAAC;MAAA,6BAC7B,IAAI,CAACpD,OAAO,CAAC0D,cAAc,2EAAI,IAAI,CACtC;IACL;EAAC;IAAA;IAAA,OAED,qBAAsBN,KAAa,EAAQ;MAAA;MACvC,IAAI,CAACL,SAAS,CAACK,KAAK,CAAC,CAACJ,QAAQ,EAAE;MAChC,IAAMW,QAAQ,GAAG9B,IAAI,CAACC,SAAS,CAAC,IAAI,CAACiB,SAAS,CAACK,KAAK,CAAC,CAACnU,IAAI,CAAC;MAC3D,IAAM2U,OAAY,GAAG;QACjB,cAAc,EAAE,kBAAkB;QAClCC,MAAM,EAAE;MACZ,CAAC;MAED,IAAI,IAAI,CAAC7D,OAAO,CAACC,KAAK,EAAE;QACpB2D,OAAO,CAACE,aAAa,oBAAa,IAAI,CAAC9D,OAAO,CAACC,KAAK,CAAE;MAC1D,CAAC,MAAM,IAAI,IAAI,CAACD,OAAO,CAACE,aAAa,EAAE;QACnC0D,OAAO,CAACE,aAAa,kBAAW,IAAI,CAAC9D,OAAO,CAACE,aAAa,CAAE;MAChE;MAEA6D,KAAK,CAAC,IAAI,CAAC/D,OAAO,CAACO,GAAG,EAAE;QACpBqD,OAAO,EAAPA,OAAO;QACPL,IAAI,EAAEI,QAAQ;QACdK,MAAM,EAAE;MACZ,CAAC,CAAC,CACG9G,IAAI,CAAC,UAAAmG,QAAQ;QAAA,OAAI,MAAI,CAAC1C,SAAS,CAACyC,KAAK,EAAEC,QAAQ,CAAC;MAAA,EAAC,SAC5C,CAAC;QAAA,OAAM,MAAI,CAACY,OAAO,CAACb,KAAK,EAAEO,QAAQ,CAAC;MAAA,EAAC;IACnD;EAAC;EAAA;AAAA,EA3EiC5U,kBAAkB;;;iECjBxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYO,IAAemV,kBAAkB;EAGpC,4BACqBlE,OAA0B,EAC7C;IAAA;IAAA,KADmBA,OAA0B,GAA1BA,OAA0B;IAAA;EAC5C;EAAC;IAAA;IAAA;MAAA,2GAEJ,iBACIgE,MAAkB,EAClBG,GAAW;QAAA;QAAA;UAAA;UAAA;UAAA;UAAA;UAAA;QAAA;UAAA;YAAA;cAAA;gBACXlV,IAAS,2DAAG+E,SAAS;gBAEf4P,OAAY,GAAG;kBACjB,cAAc,EAAE,kBAAkB;kBAClCC,MAAM,EAAE;gBACZ,CAAC;gBAED,IAAI,IAAI,CAAC7D,OAAO,CAACC,KAAK,EAAE;kBACpB2D,OAAO,CAACE,aAAa,oBAAa,IAAI,CAAC9D,OAAO,CAACC,KAAK,CAAE;gBAC1D;gBAEIM,GAAG,GAAG,IAAI,CAAC6D,MAAM,CAACD,GAAG,CAAC;gBACtBZ,IAAI,GAAGvP,SAAS;gBAEpB,IAAI/E,IAAI,EAAE;kBACN,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAACuS,QAAQ,CAACwC,MAAM,CAAC,EAAE;oBACpCzD,GAAG,IAAI,IAAI8D,eAAe,CAACpV,IAAI,CAAC,CAACG,QAAQ,EAAE;kBAC/C,CAAC,MAAM;oBACHmU,IAAI,GAAG1B,IAAI,CAACC,SAAS,CAAC7S,IAAI,CAAC;kBAC/B;gBACJ;gBAAC;gBAAA,OAEoB8U,KAAK,CAACxD,GAAG,EAAE;kBAACyD,MAAM,EAANA,MAAM;kBAAET,IAAI,EAAJA,IAAI;kBAAEK,OAAO,EAAPA;gBAAO,CAAC,CAAC;cAAA;gBAAlDrT,MAAM;gBAAA,cAGJA,MAAM,CAACqM,EAAE;gBAAA,cACLrM,MAAM,CAAC+T,MAAM;gBAAA,6BACf/T,MAAM,CAACqT,OAAO,CAACxV,GAAG,CAAC,cAAc,CAAC,gDAAlC,oBAAoCoT,QAAQ,CAAC,MAAM,CAAC;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAASjR,MAAM,CAAC+S,IAAI,EAAE;cAAA;gBAAA;gBAAA;gBAAA;cAAA;gBAAA;gBAAA,OAAS/S,MAAM,CAACgU,IAAI,EAAE;cAAA;gBAAA;cAAA;gBAAA;gBAAA;kBAFtG3H,EAAE;kBACF0H,MAAM;kBACNrV,IAAI;gBAAA;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAEX;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,gBAAiBkV,GAAW,EAAU;MAAA;MAClC,OAAO,IAAI,CAACK,iBAAiB,sBAAC,IAAI,CAACxE,OAAO,CAACO,GAAG,iEAAI,IAAI,CAACkE,UAAU,CAAC,GAAG,GAAG,GAAG,IAAI,CAACC,mBAAmB,CAACP,GAAG,CAAC;IAC5G;EAAC;IAAA;IAAA,OAED,6BAA4BI,IAAY,EAAU;MAC9C,OAAOA,IAAI,CAACI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACnC;EAAC;IAAA;IAAA,OAED,2BAA0BJ,IAAY,EAAU;MAC5C,OAAOA,IAAI,CAACI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACnC;EAAC;EAAA;AAAA;;;yDC/DL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADwD;AAajD,IAAMC,UAAU;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,iFACY,kCAAkC;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,kGAgBjE,iBAAyB3E,KAAa;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACX,IAAI,CAACrM,IAAI,CAAC,QAAQ,wBAAiBqM,KAAK,EAAG;cAAA;gBAA5DoD,QAAQ;gBAAA,IACTA,QAAQ,CAACzG,EAAE;kBAAA;kBAAA;gBAAA;gBAAA,MACN,IAAIjJ,KAAK,uCAAgC0P,QAAQ,CAACpU,IAAI,CAAC4V,MAAM,CAAC,CAAC,CAAC,EAAG;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAEhF;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,4FAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAC2B,IAAI,CAACjR,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;cAAA;gBAA5CyP,QAAQ;gBAAA,KACVA,QAAQ,CAACzG,EAAE;kBAAA;kBAAA;gBAAA;gBACXyG,QAAQ,CAACpU,IAAI,CAACgB,EAAE,GAAGoT,QAAQ,CAACpU,IAAI,CAACgB,EAAE,CAACb,QAAQ,EAAE;gBAAC,kCACxCiU,QAAQ,CAACpU,IAAI;cAAA;gBAAA,MAElB,IAAI0E,KAAK,4CAAqC0P,QAAQ,CAACpU,IAAI,CAAC4V,MAAM,CAAC,CAAC,CAAC,EAAG;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjF;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,kGA5BD,kBACIC,KAAa,EACbC,QAAgB;QAAA;UAAA;UAAA;QAAA;UAAA;YAAA;cAAA;gBAChBC,UAAkB,8DAAG,iBAAiB;gBAAA;gBAAA,OAEf,IAAIJ,UAAU,CAAC;kBAAC3E,KAAK,EAAE;gBAAI,CAAC,CAAC,CAACrM,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE;kBAC7EkR,KAAK,EAALA,KAAK;kBAAEC,QAAQ,EAARA,QAAQ;kBAAEE,WAAW,EAAED;gBAClC,CAAC,CAAC;cAAA;gBAFI3B,QAAQ;gBAAA,KAGVA,QAAQ,CAACzG,EAAE;kBAAA;kBAAA;gBAAA;gBAAA,kCACJyG,QAAQ,CAACpU,IAAI;cAAA;gBAAA,MAElB,IAAI0E,KAAK,qCAA8B0P,QAAQ,CAACpU,IAAI,CAAC4V,MAAM,CAAC,CAAC,CAAC,EAAG;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAC1E;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EAf2BX,kBAAkB;;ACbQ;AACN;AAMjB;AACO;AAC+B","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/state-tracker/AsyncUtils.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.ts","webpack://PServ/./src/state-tracker/functions.ts","webpack://PServ/./src/state-tracker/SpacesManager.ts","webpack://PServ/./src/Permissions.ts","webpack://PServ/./src/state-tracker/PermissionsManager.ts","webpack://PServ/./src/state-tracker/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\r\n Bye,\r\n GetSession,\r\n JoinSpace,\r\n Session,\r\n SpaceJoined,\r\n Error as ErrorType,\r\n SpaceLeft,\r\n SpaceMemberJoined,\r\n SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n SpaceDeleted,\r\n SpaceMembers,\r\n SpaceRooms,\r\n NewRole,\r\n RoomDeleted,\r\n RoomJoined,\r\n RoomLeft,\r\n RoomMemberLeft,\r\n RoomMemberJoined,\r\n RoomMembers,\r\n NewRoom,\r\n NewTopic,\r\n TopicDeleted,\r\n NewMessage,\r\n GetPermissionOverwrites,\r\n GetComputedPermissions,\r\n LeaveSpace,\r\n CreateSpace,\r\n DeleteSpace,\r\n GetSpaceMembers,\r\n GetSpaceRooms,\r\n CreateRole,\r\n DeleteRole,\r\n AssignRole,\r\n DeassignRole,\r\n SetPermissionOverwrites,\r\n JoinRoom,\r\n LeaveRoom,\r\n CreateRoom,\r\n DeleteRoom,\r\n GetRoomMembers,\r\n CreateTopic,\r\n DeleteTopic,\r\n CreateMessage,\r\n Envelope,\r\n PermissionOverwrites,\r\n PermissionOverwritesUpdated,\r\n RoomMemberUpdated,\r\n UpdateRole,\r\n RoleUpdated,\r\n Ack,\r\n UserUpdated,\r\n UpdateRoom,\r\n RoomUpdated,\r\n UpdateSpace,\r\n SpaceUpdated,\r\n PermissionOverwriteTargets,\r\n GetPermissionOverwriteTargets,\r\n Owners,\r\n Ok,\r\n GetOwners,\r\n CreateOwner,\r\n RoleDeleted,\r\n FollowedTopicUpdated,\r\n TopicFollowed,\r\n TopicUnfollowed,\r\n FollowedTopics,\r\n FollowTopic,\r\n UnfollowTopic,\r\n GetFollowedTopics,\r\n} from \"./types/src/index\";\r\nimport {EventTarget} from \"./EventTarget\";\r\n\r\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\r\n\r\nexport abstract class AbstractChatClient extends EventTarget {\r\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\r\n protected sentCounter: number = 0;\r\n\r\n public abstract send<CommandType extends keyof CommandsMap>\r\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\r\n\r\n public on<EventName extends keyof EventsMap>\r\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public once<EventName extends keyof EventsMap>\r\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\r\n return super.once(eventName, handler);\r\n }\r\n\r\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\r\n return {\r\n type, data, ref: (++this.sentCounter).toString()\r\n };\r\n }\r\n\r\n protected createPromiseFromCommandEnvelope\r\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\r\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\r\n return new Promise((...args) =>\r\n this.awaitingResponse.set(envelope.ref as string, args));\r\n }\r\n\r\n protected handleIncomingEnvelope(envelope: Envelope): void {\r\n if (!this.awaitingResponse.has(envelope.ref)) {\r\n return;\r\n }\r\n const isError = envelope.type === 'Error';\r\n this.awaitingResponse.get(envelope.ref)[0]({\r\n data: isError ? null : envelope.data,\r\n error: isError ? envelope.data : null,\r\n } as CommandResult<any>);\r\n this.awaitingResponse.delete(envelope.ref);\r\n }\r\n\r\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\r\n if (!this.awaitingResponse.has(envelope.ref)) {\r\n return;\r\n }\r\n this.awaitingResponse.get(envelope.ref)[0](error);\r\n this.awaitingResponse.delete(envelope.ref);\r\n }\r\n}\r\n\r\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\r\n\r\n/**\r\n * Map of incoming events.\r\n */\r\nexport type EventsMap = {\r\n // General Events\r\n Bye: Bye,\r\n Ok: Ok,\r\n Error: ErrorType,\r\n Session: Session,\r\n Permissions: Permissions,\r\n PermissionOverwrites: PermissionOverwrites,\r\n PermissionOverwritesUpdated: PermissionOverwritesUpdated,\r\n PermissionOverwriteTargets: PermissionOverwriteTargets,\r\n Owners: Owners,\r\n // Space events\r\n SpaceJoined: SpaceJoined,\r\n SpaceLeft: SpaceLeft,\r\n SpaceMemberJoined: SpaceMemberJoined,\r\n SpaceMemberLeft: SpaceMemberLeft,\r\n SpaceMemberUpdated: SpaceMemberUpdated,\r\n SpaceUpdated: SpaceUpdated,\r\n SpaceDeleted: SpaceDeleted,\r\n SpaceMembers: SpaceMembers,\r\n SpaceRooms: SpaceRooms,\r\n NewRole: NewRole,\r\n RoleDeleted: RoleDeleted,\r\n RoleUpdated: RoleUpdated,\r\n // Room events\r\n RoomJoined: RoomJoined,\r\n RoomLeft: RoomLeft,\r\n RoomMemberJoined: RoomMemberJoined,\r\n RoomMemberLeft: RoomMemberLeft,\r\n RoomMemberUpdated: RoomMemberUpdated,\r\n RoomMembers: RoomMembers,\r\n NewRoom: NewRoom,\r\n RoomDeleted: RoomDeleted,\r\n RoomUpdated: RoomUpdated,\r\n // Topic events\r\n NewTopic: NewTopic,\r\n TopicDeleted: TopicDeleted,\r\n NewMessage: NewMessage,\r\n UserUpdated: UserUpdated,\r\n TopicFollowed: TopicFollowed,\r\n TopicUnfollowed: TopicUnfollowed,\r\n FollowedTopics: FollowedTopics,\r\n FollowedTopicUpdated: FollowedTopicUpdated,\r\n};\r\n\r\n/**\r\n * Map of commands and their corresponding events.\r\n */\r\nexport type CommandsMap = {\r\n // General commands\r\n GetSession: [GetSession, EventsMap['Session']],\r\n SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']],\r\n GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],\r\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\r\n GetPermissionOverwriteTargets: [GetPermissionOverwriteTargets, EventsMap['PermissionOverwriteTargets']],\r\n GetOwners: [GetOwners, EventsMap['Owners']],\r\n CreateOwner: [CreateOwner, EventsMap['Owners']],\r\n DeleteOwner: [CreateOwner, EventsMap['Owners']],\r\n // Space commands\r\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\r\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\r\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\r\n UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']],\r\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\r\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\r\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\r\n CreateRole: [CreateRole, EventsMap['NewRole']],\r\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\r\n UpdateRole: [UpdateRole, EventsMap['RoleUpdated']],\r\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\r\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\r\n // Room commands\r\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\r\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\r\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\r\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\r\n UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']],\r\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\r\n // Topic commands\r\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\r\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\r\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\r\n Ack: [Ack, EventsMap['FollowedTopicUpdated'] | EventsMap['Ok']],\r\n FollowTopic: [FollowTopic, EventsMap['TopicFollowed']],\r\n UnfollowTopic: [UnfollowTopic, EventsMap['TopicUnfollowed']],\r\n GetFollowedTopics: [GetFollowedTopics, EventsMap['FollowedTopics']],\r\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | undefined {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | undefined {\n return this._items.get(id);\n }\n\n public getAt(index: number): T | undefined {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {IndexedCollection} from \"../IndexedObjectCollection\";\r\n\r\nexport class DeferredTask {\r\n public readonly promise: Promise<void>;\r\n public resolve: () => void;\r\n\r\n public constructor() {\r\n this.promise = new Promise<void>((resolve) => this.resolve = resolve);\r\n }\r\n}\r\n\r\nexport class PromiseRegistry {\r\n private promises = new IndexedCollection<string, Promise<any>>();\r\n\r\n public register<T = any>(promise: Promise<T>, key: string): void {\r\n this.promises.set([key, promise]);\r\n }\r\n\r\n public registerByFunction(fn: () => Promise<any>, key: string): void {\r\n this.register(fn(), key);\r\n }\r\n\r\n public get<T = any>(key: string): Promise<T> | undefined {\r\n return this.promises.get(key);\r\n }\r\n\r\n public has(key: string): boolean {\r\n return this.promises.has(key);\r\n }\r\n\r\n public notExist(key: string): boolean {\r\n return ! this.has(key);\r\n }\r\n\r\n public forget(...keys: string[]): void {\r\n this.promises.delete(...keys);\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n ChatLocation,\r\n Message,\r\n NewMessage,\r\n Topic,\r\n FollowedTopic,\r\n TopicFollowed,\r\n TopicUnfollowed,\r\n RoomDeleted,\r\n RoomLeft,\r\n TopicDeleted,\r\n FollowedTopicUpdated, RoomJoined, NewTopic, Session,\r\n} from \"../types/src\";\r\nimport {\r\n IndexedCollection,\r\n ObservableIndexedObjectCollection\r\n} from \"../IndexedObjectCollection\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nexport const getCombinedId = (location: ChatLocation) => (location.roomId ?? '') + (location.topicId ?? '');\r\n\r\nexport class MessagesManager {\r\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\r\n private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\r\n private readonly followedTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<FollowedTopic>>();\r\n private readonly followedTopicsPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoin(ev));\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('FollowedTopicUpdated', ev => this.handleFollowedTopicUpdated(ev));\r\n this.tracker.client.on('TopicFollowed', ev => this.handleTopicFollowed(ev));\r\n this.tracker.client.on('TopicUnfollowed', ev => this.handleTopicUnfollowed(ev));\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n }\r\n\r\n /**\r\n * Get collection of the messages written in topic.\r\n */\r\n public async get(location: ChatLocation): Promise<ObservableIndexedObjectCollection<Message> | undefined> {\r\n return this.list.get(getCombinedId(location));\r\n }\r\n\r\n /**\r\n * Cache followed topics for all joined rooms in a space and fetch them in bulk if necessary.\r\n * Then you can get them using getRoomFollowedTopics().\r\n * @see getRoomFollowedTopics\r\n */\r\n public async cacheSpaceFollowedTopic(spaceId: string): Promise<void> {\r\n if (! (await this.tracker.spaces.get()).has(spaceId)) {\r\n throw new Error(`You are not in space ${spaceId}`);\r\n }\r\n\r\n // If we don't have ack reports for all rooms in space, fetch them\r\n const result = await this.tracker.client.send('GetFollowedTopics', {location: {spaceId}});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.setFollowedTopicsArray(result.data.followedTopics);\r\n }\r\n\r\n /**\r\n * Get ack reports for the given room.\r\n * @return Undefined if you are not in the room, collection otherwise.\r\n */\r\n public async getRoomFollowedTopics(roomId: string): Promise<ObservableIndexedObjectCollection<FollowedTopic> | undefined> {\r\n if (! (await this.tracker.rooms.get()).has(roomId)) {\r\n return undefined;\r\n }\r\n\r\n if (! this.followedTopics.has(roomId)) {\r\n if (this.followedTopicsPromises.notExist(roomId)) {\r\n this.followedTopicsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetFollowedTopics', {location: {roomId}});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.setFollowedTopicsArray(result.data.followedTopics);\r\n }, roomId);\r\n }\r\n\r\n await this.followedTopicsPromises.get(roomId);\r\n }\r\n\r\n return this.followedTopics.get(roomId);\r\n }\r\n\r\n /**\r\n * Batch acknowledge all missed messages from any topics in given room.\r\n */\r\n public async ackRoomFollowedTopics(roomId: string): Promise<void> {\r\n const collection = await this.getRoomFollowedTopics(roomId);\r\n\r\n if (! collection) {\r\n return;\r\n }\r\n\r\n for (const followedTopic of collection.items) {\r\n if (followedTopic.missed) {\r\n await this.tracker.client.send('Ack', {location: followedTopic.location});\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Calculate missed messages from any topic in given room.\r\n * @return Undefined if you are not in room, stats object otherwise.\r\n */\r\n public async calculateRoomMissedMessages(roomId: string): Promise<{missed: number, missedMore: boolean} | undefined> {\r\n const collection = await this.getRoomFollowedTopics(roomId);\r\n\r\n if (! collection) {\r\n return undefined;\r\n }\r\n\r\n let missed: number = 0, missedMore: boolean = false;\r\n\r\n for (const followedTopic of collection.items) {\r\n missed += followedTopic.missed ?? followedTopic.missedMoreThan ?? 0;\r\n if (followedTopic.missedMoreThan) {\r\n missedMore = true;\r\n }\r\n }\r\n\r\n return {missed, missedMore};\r\n }\r\n\r\n /**\r\n * For internal use. If you want to delete the message, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {\r\n this.list.delete(...topicIds.map(topicId => getCombinedId({roomId, topicId})));\r\n this.followedTopics.get(roomId)?.delete(...topicIds);\r\n }\r\n\r\n private createHistoryForNewTopic(roomId: string, ...newTopics: Topic[]): void {\r\n for (const newTopic of newTopics) {\r\n const newTopicCombinedId = getCombinedId({roomId, topicId: newTopic.id});\r\n\r\n this.list.set([newTopicCombinedId, new ObservableIndexedObjectCollection<Message>('id')]);\r\n\r\n // If new topic refers to some message from this room, update other structures\r\n if (newTopic.messageRef) {\r\n const refTopicCombinedId = getCombinedId({roomId, topicId: newTopic.messageRef.topicId});\r\n const refTopicMessages = this.list.get(refTopicCombinedId);\r\n const refMessage = refTopicMessages?.get(newTopic.messageRef.messageId);\r\n\r\n if (refMessage) {\r\n // Update referenced topic ID in message\r\n refTopicMessages.set({...refMessage, topicRef: newTopic.id});\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n this.list.get(getCombinedId(ev.location))?.set(ev.message);\r\n this.updateLocallyFollowedTopicOnNewMessage(ev);\r\n }\r\n\r\n private handleFollowedTopicUpdated(ev: FollowedTopicUpdated): void {\r\n this.followedTopics.get(ev.followedTopic.location.roomId)?.set(ev.followedTopic);\r\n }\r\n\r\n private handleTopicFollowed(ev: TopicFollowed): void {\r\n this.setFollowedTopicsArray([ev.followedTopic]);\r\n }\r\n\r\n private handleTopicUnfollowed(ev: TopicUnfollowed): void {\r\n this.followedTopics.get(ev.location.roomId)?.delete(ev.location.topicId);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.followedTopics.delete(ev.id);\r\n }\r\n\r\n private handleRoomJoin(ev: RoomJoined): void {\r\n if (ev.room.defaultTopic) {\r\n this.createHistoryForNewTopic(ev.room.id, ev.room.defaultTopic)\r\n }\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.followedTopics.delete(ev.id);\r\n }\r\n\r\n private async handleNewTopic(ev: NewTopic): Promise<void> {\r\n this.createHistoryForNewTopic(ev.roomId, ev.topic);\r\n\r\n if (this.followedTopics.has(ev.roomId)) {\r\n // Check if the new topic is followed by user\r\n // only if client asked for followed topics list before for this room\r\n const result = await this.tracker.client.send(\r\n 'GetFollowedTopics',\r\n {location: {roomId: ev.roomId, topicId: ev.topic.id}},\r\n );\r\n const followedTopic = result.data.followedTopics[0];\r\n if (followedTopic) {\r\n this.followedTopics.get(ev.roomId).set(followedTopic);\r\n }\r\n }\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n this.followedTopics.get(ev.location.roomId)?.delete(ev.location.topicId);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n ev.state.rooms.forEach(room => {\r\n if (room.defaultTopic) {\r\n this.createHistoryForNewTopic(room.id, room.defaultTopic);\r\n }\r\n });\r\n }\r\n\r\n private updateLocallyFollowedTopicOnNewMessage(ev: NewMessage): void {\r\n const roomFollowedTopics = this.followedTopics.get(ev.location.roomId);\r\n const followedTopic = roomFollowedTopics.get(ev.location.topicId);\r\n\r\n if (! roomFollowedTopics || ! followedTopic) {\r\n // Skip if we don't follow this room or targeted topic\r\n return;\r\n }\r\n\r\n const isMe = ev.message.author.id === this.tracker.me?.id;\r\n\r\n let update: Partial<FollowedTopic>;\r\n\r\n if (isMe) {\r\n // Reset missed messages count if new message is authored by me\r\n update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};\r\n } else {\r\n // ...add 1 otherwise\r\n update = {\r\n missed: followedTopic.missed === null ? null : followedTopic.missed + 1,\r\n missedMoreThan: followedTopic.missedMoreThan === null ? null : followedTopic.missedMoreThan,\r\n };\r\n }\r\n\r\n roomFollowedTopics.set({...followedTopic, ...update});\r\n }\r\n\r\n private setFollowedTopicsArray(followedTopics: FollowedTopic[]): void {\r\n const roomToTopics: {[roomId: string]: FollowedTopic[]} = {};\r\n\r\n // Reassign reports to limit collection change event emit\r\n followedTopics.forEach(followedTopic => {\r\n roomToTopics[followedTopic.location.roomId] ??= [];\r\n roomToTopics[followedTopic.location.roomId].push(followedTopic);\r\n });\r\n\r\n for (const roomId in roomToTopics) {\r\n if (! this.followedTopics.has(roomId)) {\r\n this.followedTopics.set([\r\n roomId,\r\n new ObservableIndexedObjectCollection<FollowedTopic>(report => report.location.topicId),\r\n ]);\r\n }\r\n this.followedTopics.get(roomId).set(...roomToTopics[roomId]);\r\n }\r\n }\r\n}","import {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewMessage,\r\n NewTopic,\r\n Room, RoomDeleted,\r\n RoomJoined, RoomLeft,\r\n RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,\r\n RoomMemberUpdated, RoomUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n Topic,\r\n TopicDeleted,\r\n UserUpdated,\r\n} from \"../types/src\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {MessagesManager} from \"./MessagesManager\";\r\n\r\nexport class RoomsManager {\r\n public readonly messages: MessagesManager;\r\n\r\n private readonly list = new ObservableIndexedObjectCollection<Room>('id');\r\n private readonly topics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.messages = new MessagesManager(tracker);\r\n\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\r\n this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\r\n this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of room members.\r\n */\r\n public async getMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | undefined> {\r\n if (this.membersPromises.notExist(roomId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleRoomMembers(result.data);\r\n }, roomId);\r\n }\r\n\r\n await this.membersPromises.get(roomId);\r\n return this.members.get(roomId);\r\n }\r\n\r\n /**\r\n * Get a room member representing the current user.\r\n */\r\n public async getMe(roomId: string): Promise<RoomMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n if (! this.list.has(roomId)) {\r\n // User is not in passed room.\r\n return undefined;\r\n }\r\n\r\n const members = await this.getMembers(roomId);\r\n return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);\r\n }\r\n\r\n /**\r\n * Get collection of all the rooms you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Room>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of room topics.\r\n */\r\n public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.topics.get(roomId);\r\n }\r\n\r\n private deleteRoom(...roomIds: string[]): void {\r\n this.list.delete(...roomIds);\r\n this.members.delete(...roomIds);\r\n this.membersPromises.forget(...roomIds);\r\n\r\n for (const roomId of roomIds) {\r\n const topicIds: string[] = this.topics.get(roomId)?.map(topic => topic.id) ?? [];\r\n this.messages._deleteByTopicIds(roomId, ...topicIds);\r\n }\r\n\r\n this.topics.delete(...roomIds);\r\n }\r\n\r\n private deleteRoomsBySpaceId(spaceId: string): void {\r\n this.deleteRoom(\r\n ...this.list.findBy('spaceId', spaceId).map(room => room.id)\r\n );\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', ev.spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers || ! roomMembers.has(ev.userId)) {\r\n // Skip update if member list for this room is not loaded\r\n // or user is not in room\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(ev.userId);\r\n const user = roomMember.spaceMember.user;\r\n\r\n // Update space member but first fill user object (it's null in event object)\r\n roomMember.spaceMember = {...ev.member, user};\r\n roomMembers.set(roomMember);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n this.list\r\n .findBy('spaceId', ev.spaceId).items\r\n .forEach(room => this.members.get(room.id)?.delete(ev.userId));\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (! this.members.has(ev.roomId)) {\r\n // We do not track member list for this room.\r\n return;\r\n }\r\n\r\n const members = this.members.get(ev.roomId);\r\n const member = members.get(ev.userId);\r\n const newMember = ev.member;\r\n const user = member.spaceMember?.user ?? member.user;\r\n\r\n if (newMember.spaceMember) {\r\n newMember.spaceMember.user = user;\r\n } else {\r\n newMember.user = user;\r\n }\r\n\r\n members.set(newMember);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.deleteRoomsBySpaceId(ev.id);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const collection = this.topics.get(ev.location.roomId);\r\n collection.delete(ev.location.topicId);\r\n\r\n const room = this.list.get(ev.location.roomId);\r\n if (room.defaultTopic?.id === ev.location.topicId) {\r\n this.list.set({...room, defaultTopic: null});\r\n }\r\n }\r\n\r\n private handleNewTopic(ev: NewTopic): void {\r\n this.addJoinedRoomTopics(ev.roomId, ev.topic);\r\n }\r\n\r\n private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {\r\n if (this.topics.has(roomId)) {\r\n this.topics.get(roomId).set(...topics);\r\n } else {\r\n this.topics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);\r\n }\r\n }\r\n\r\n private handleRoomJoined(ev: RoomJoined): void {\r\n this.addJoinedRooms(ev.room);\r\n }\r\n\r\n private handleRoomUpdated(ev: RoomUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as Room);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private addJoinedRooms(...rooms: Room[]): void {\r\n for (const room of rooms) {\r\n if (room.defaultTopic) {\r\n this.addJoinedRoomTopics(room.id, room.defaultTopic);\r\n }\r\n }\r\n this.list.set(...rooms);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleRoomMembers(ev: RoomMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(\r\n member => member.user?.id ?? member.spaceMember.user.id,\r\n ev.members,\r\n )\r\n ]);\r\n }\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.topics.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedRooms(...ev.state.rooms);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip room; updated user is not here\r\n return;\r\n }\r\n\r\n const newMember: RoomMember = {...member};\r\n\r\n if (member.user) {\r\n newMember.user = ev.user;\r\n } else {\r\n newMember.spaceMember.user = ev.user;\r\n }\r\n\r\n members.set(newMember);\r\n });\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n const topics = this.topics.get(ev.location.roomId);\r\n const topic = topics.get(ev.location.topicId);\r\n\r\n if (topic) {\r\n topics.set({\r\n ...topic,\r\n messageCount: topic.messageCount + 1,\r\n lastMessage: ev.message,\r\n });\r\n }\r\n }\r\n}","import {Role} from \"../types/src\";\r\n\r\nexport function reorderRolesOnPriorityUpdate(allRoles: Role[], oldRole: Role, updatedRole: Role): Role[] {\r\n // If the priority has changed, adjust the rest of roles\r\n const increased = (updatedRole.priority - oldRole.priority) > 0;\r\n const decreased = ! increased;\r\n const changedRoles: Role[] = [];\r\n\r\n allRoles.forEach(role => {\r\n if (role.id === updatedRole.id) {\r\n // Skip the updated role\r\n return;\r\n }\r\n if (increased && oldRole.priority <= role.priority) {\r\n role.priority--;\r\n changedRoles.push(role);\r\n }\r\n if (decreased && updatedRole.priority <= role.priority) {\r\n role.priority++;\r\n changedRoles.push(role);\r\n }\r\n });\r\n\r\n return changedRoles;\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewRole,\r\n NewRoom,\r\n Role,\r\n RoleDeleted,\r\n RoleUpdated,\r\n RoomDeleted,\r\n RoomSummary,\r\n RoomUpdated,\r\n Session,\r\n Space,\r\n SpaceDeleted,\r\n SpaceJoined,\r\n SpaceLeft,\r\n SpaceMember,\r\n SpaceMemberJoined,\r\n SpaceMemberLeft,\r\n SpaceMembers,\r\n SpaceMemberUpdated,\r\n SpaceRooms,\r\n SpaceUpdated,\r\n UserUpdated\r\n} from \"../types/src\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {reorderRolesOnPriorityUpdate} from \"./functions\";\r\n\r\nexport class SpacesManager {\r\n private readonly list = new ObservableIndexedObjectCollection<Space>('id');\r\n private readonly roles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\r\n private readonly rooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\r\n private readonly roomIdToSpaceId = new IndexedCollection<string, string>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly roomsPromises = new PromiseRegistry();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceUpdated', ev => this.handleSpaceUpdated(ev));\r\n this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\r\n this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of all the spaces you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Space>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of space roles.\r\n */\r\n public async getRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.roles.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of the all available rooms inside given space.\r\n */\r\n public async getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {\r\n if (this.roomsPromises.notExist(spaceId)) {\r\n this.roomsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceRooms(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.roomsPromises.get(spaceId);\r\n return this.rooms.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of space members.\r\n */\r\n public async getMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | undefined> {\r\n if (this.membersPromises.notExist(spaceId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceMembers(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.membersPromises.get(spaceId);\r\n return this.members.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get a space member representing the current user.\r\n */\r\n public async getMe(spaceId: string): Promise<SpaceMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n if (! this.list.has(spaceId)) {\r\n // User is not in passed space.\r\n return undefined;\r\n }\r\n\r\n const members = await this.getMembers(spaceId);\r\n return members.items.find(member => member.user.id === userId);\r\n }\r\n\r\n private handleNewRole(ev: NewRole): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.set(ev.role);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleNewRoom(ev: NewRoom): void {\r\n this.rooms.get(ev.spaceId)?.set(ev.summary);\r\n this.roomIdToSpaceId.set([ev.summary.id, ev.spaceId]);\r\n }\r\n\r\n private handleRoomUpdated(ev: RoomUpdated): void {\r\n if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {\r\n const rooms = this.rooms.get(ev.room.spaceId);\r\n rooms.set({\r\n ...rooms.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as RoomSummary);\r\n }\r\n }\r\n\r\n private async handleRoomDeleted(ev: RoomDeleted): Promise<void> {\r\n const spaceId = this.roomIdToSpaceId.get(ev.id);\r\n\r\n if (spaceId && this.rooms.has(spaceId)) {\r\n this.rooms.get(spaceId).delete(ev.id);\r\n }\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleSpaceUpdated(ev: SpaceUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.space.id),\r\n name: ev.space.name,\r\n } as Space);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const roomIds = this.rooms.get(ev.id)?.map(item => item.id) ?? [];\r\n this.roomIdToSpaceId.delete(...roomIds);\r\n\r\n this.roles.delete(ev.id);\r\n this.members.delete(ev.id);\r\n this.membersPromises.forget(ev.id);\r\n this.rooms.delete(ev.id);\r\n this.roomsPromises.forget(ev.id);\r\n this.list.delete(ev.id);\r\n }\r\n\r\n private handleSpaceJoined(ev: SpaceJoined): void {\r\n this.addJoinedSpaces(ev.space);\r\n }\r\n\r\n private addJoinedSpaces(...spaces: Space[]): void {\r\n this.roles.set(...(spaces.map(space => [\r\n space.id,\r\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\r\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\r\n this.list.set(...spaces);\r\n }\r\n\r\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleSpaceMembers(ev: SpaceMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\r\n ]);\r\n }\r\n }\r\n\r\n private handleSpaceRooms(ev: SpaceRooms): void {\r\n if (! this.rooms.has(ev.id)) {\r\n this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\r\n }\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (this.members.has(ev.spaceId)) {\r\n const members = this.members.get(ev.spaceId);\r\n const member = members.get(ev.userId);\r\n members.set({...ev.member, user: member.user});\r\n }\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n const roles = this.roles.get(ev.spaceId);\r\n const oldRole = roles.get(ev.role.id);\r\n const newRole = ev.role;\r\n const rolesToUpdate = [newRole];\r\n\r\n if (oldRole.priority !== newRole.priority) {\r\n rolesToUpdate.push(\r\n ...reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)\r\n );\r\n }\r\n\r\n this.roles.get(ev.spaceId).set(...rolesToUpdate);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.roles.deleteAll();\r\n this.rooms.deleteAll();\r\n this.members.deleteAll();\r\n this.roomIdToSpaceId.deleteAll();\r\n\r\n this.addJoinedSpaces(...ev.state.spaces);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip space; updated user is not here\r\n return;\r\n }\r\n\r\n members.set({...member, user: ev.user});\r\n });\r\n }\r\n}","export enum Layer {\r\n Global,\r\n Space,\r\n Room,\r\n Topic,\r\n}\r\n\r\nexport class PermissionDefinition {\r\n value: number;\r\n maxLayer: Layer;\r\n}\r\n\r\nexport class Permissions {\r\n public static readonly list = {\r\n Root: {value: 1 << 0, maxLayer: Layer.Room},\r\n CreateSpaces: {value: 1 << 1, maxLayer: Layer.Global},\r\n ManageSpace: {value: 1 << 2, maxLayer: Layer.Space},\r\n ManageSpaceRoles: {value: 1 << 3, maxLayer: Layer.Space},\r\n ManageRoom: {value: 1 << 4, maxLayer: Layer.Room},\r\n CreateTopics: {value: 1 << 5, maxLayer: Layer.Room},\r\n ManageTopic: {value: 1 << 6, maxLayer: Layer.Topic},\r\n ManageSpaceMembers: {value: 1 << 7, maxLayer: Layer.Space},\r\n ManageRoomMembers: {value: 1 << 8, maxLayer: Layer.Room},\r\n CreateMessages: {value: 1 << 9, maxLayer: Layer.Topic},\r\n ManagePermissions: {value: 1 << 10, maxLayer: Layer.Topic},\r\n CreateSpaceRooms: {value: 1 << 11, maxLayer: Layer.Space},\r\n ManageSpaceRooms: {value: 1 << 12, maxLayer: Layer.Space},\r\n };\r\n\r\n public static getNames(): (keyof typeof this.list)[] {\r\n return Object.keys(this.list) as any;\r\n }\r\n\r\n public static getByName(name: keyof typeof this.list): PermissionDefinition | undefined {\r\n return this.list[name];\r\n }\r\n\r\n public static canBeDefinedOnLayer(permissionName: keyof typeof this.list, layer: Layer): boolean {\r\n const def = this.getByName(permissionName);\r\n\r\n if (! def) {\r\n throw new Error(`Invalid permission name: ${permissionName}`);\r\n }\r\n\r\n return layer <= this.getByName(permissionName).maxLayer;\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n ChatLocation,\r\n PermissionOverwrites,\r\n PermissionOverwritesUpdated,\r\n PermissionOverwritesValue,\r\n RoleDeleted,\r\n RoomDeleted,\r\n RoomLeft, RoomMember, RoomMemberUpdated,\r\n SpaceDeleted,\r\n SpaceLeft, SpaceMember,\r\n SpaceMemberUpdated,\r\n TopicDeleted,\r\n} from \"../types/src\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permissions} from \"../Permissions\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nconst getOvId = (\r\n location: ChatLocation,\r\n target?: PermissionOverwrites['target'],\r\n targetId?: PermissionOverwrites['targetId'],\r\n) => (location.spaceId ?? '') + (location.roomId ?? '') + (location.topicId ?? '') + (target ?? '') + (targetId ?? '');\r\n\r\nconst getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesUpdated): string => getOvId(\r\n overwrites.location, overwrites.target, overwrites.targetId\r\n);\r\n\r\ninterface CheckPermissionsResult {\r\n /**\r\n * @deprecated Use `hasAll` instead.\r\n */\r\n ok: boolean;\r\n hasAll: boolean;\r\n hasAny: boolean;\r\n missing: string[];\r\n}\r\n\r\nexport class PermissionsManager extends EventTarget {\r\n private readonly overwrites = new IndexedCollection<string, PermissionOverwrites>();\r\n private readonly overwritesPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n super();\r\n this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('PermissionOverwritesUpdated', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n }\r\n\r\n public async getOverwrites(\r\n location: ChatLocation,\r\n target: PermissionOverwrites['target'],\r\n targetId: PermissionOverwrites['targetId'],\r\n ): Promise<PermissionOverwrites | undefined> {\r\n this.validateLocation(location);\r\n\r\n const id = getOvId(location, target, targetId);\r\n\r\n if (this.overwritesPromises.notExist(id)) {\r\n this.overwritesPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {location, target, targetId},\r\n );\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handlePermissionOverwrites(result.data);\r\n }, id);\r\n }\r\n\r\n await this.overwritesPromises.get(id);\r\n return this.overwrites.get(id);\r\n }\r\n\r\n public on(eventName: 'change', handler: EventHandler<any>): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public async check(\r\n permissionNames: (keyof typeof Permissions.list)[],\r\n location: ChatLocation,\r\n ): Promise<CheckPermissionsResult> {\r\n if (! permissionNames.length) {\r\n throw new Error('Permission names array cannot be empty');\r\n }\r\n\r\n const ownedPermissions = await this.calculatePermissions(location);\r\n const missing: string[] = [];\r\n\r\n permissionNames.forEach(name => {\r\n if (~ ownedPermissions & Permissions.getByName(name).value) {\r\n missing.push(name as string);\r\n }\r\n });\r\n\r\n return {\r\n ok: missing.length === 0,\r\n hasAll: missing.length === 0,\r\n hasAny: missing.length < permissionNames.length,\r\n missing,\r\n };\r\n }\r\n\r\n public async calculatePermissions(location: ChatLocation): Promise<number> {\r\n this.validateLocation(location);\r\n\r\n const userId = (await this.tracker.getMe()).id;\r\n const [spaceMember, roomMember] = await this.fetchMembersOrFail(location);\r\n const userRoles: string[] = [...(spaceMember?.roles ?? []), ...(roomMember?.roles ?? [])];\r\n const promises: Promise<PermissionOverwritesValue>[] = [\r\n // Global user overwrites\r\n this.getOverwrites({}, 'User', userId).then(v => v.overwrites),\r\n ];\r\n\r\n if (location.spaceId && (await this.tracker.spaces.get())?.has(location.spaceId)) {\r\n const filterLocation: ChatLocation = {spaceId: location.spaceId};\r\n promises.push(this.collectRoleOverwrites(filterLocation, userRoles));\r\n promises.push(this.getOverwrites(filterLocation, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (location.roomId && (await this.tracker.rooms.get())?.has(location.roomId)) {\r\n const filterLocation: ChatLocation = {spaceId: location.spaceId, roomId: location.roomId};\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(filterLocation, userRoles));\r\n }\r\n promises.push(this.getOverwrites(filterLocation, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (location.topicId && (await this.tracker.rooms.getTopics(location.roomId))?.has(location.topicId)) {\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(location, userRoles));\r\n }\r\n promises.push(this.getOverwrites(location, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n return this.resolveOverwritesHierarchy(await Promise.all(promises));\r\n }\r\n\r\n private handlePermissionOverwrites(ev: PermissionOverwritesUpdated | PermissionOverwrites): void {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: ev.id}));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private async handleRoomDeleted(ev: RoomDeleted | RoomLeft): Promise<void> {\r\n const room = (await this.tracker.rooms.get()).get(ev.id);\r\n if (room) {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: room.spaceId, roomId: room.id}));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId(ev.location));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: ev.spaceId}, 'Role', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (ev.userId === this.tracker.me?.id) {\r\n // User roles in space could potentially have changed\r\n this.emit('change');\r\n }\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (ev.userId === this.tracker.me?.id) {\r\n // User roles in room could potentially have changed\r\n this.emit('change');\r\n }\r\n }\r\n\r\n /**\r\n * @return Matched and deleted ids\r\n */\r\n private deleteOverwritesByIdPrefix(prefix: string): string[] {\r\n const ids: string[] = [];\r\n this.overwrites.items.forEach((overwrites) => {\r\n const id = getOvIdByObject(overwrites);\r\n if (id.startsWith(prefix)) {\r\n ids.push(id);\r\n this.overwrites.delete(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n private async collectRoleOverwrites(\r\n location: ChatLocation,\r\n userRoles: string[],\r\n ): Promise<PermissionOverwritesValue> {\r\n const roleOverwrites = await Promise.all(userRoles.map(\r\n roleId => this.getOverwrites(location, 'Role', roleId)\r\n ));\r\n\r\n return this.resolveOverwritesFromRolesByOrder(location.spaceId, roleOverwrites);\r\n }\r\n\r\n private async resolveOverwritesFromRolesByOrder(\r\n spaceId: string,\r\n overwrites: PermissionOverwrites[],\r\n ): Promise<PermissionOverwritesValue> {\r\n let allows = 0, denies = 0;\r\n const roles = await this.tracker.spaces.getRoles(spaceId);\r\n const sortedOverwrites = overwrites.sort(\r\n (a, b) =>\r\n roles.get(a.targetId).priority - roles.get(b.targetId).priority\r\n );\r\n\r\n // Max length of bit word\r\n const permissionsLength = overwrites.reduce(\r\n (previousValue: number, currentValue: PermissionOverwrites) =>\r\n Math.max(\r\n previousValue,\r\n currentValue.overwrites.allow?.toString(2).length ?? 0,\r\n currentValue.overwrites.deny?.toString(2).length ?? 0,\r\n ),\r\n 0,\r\n );\r\n\r\n sortedOverwrites.forEach(overwriteEvent => {\r\n const overwrites = overwriteEvent.overwrites;\r\n const revDecDenies = overwrites.deny?.toString(2).split('').reverse().join('') ?? '';\r\n const revDecAllows = overwrites.allow?.toString(2).split('').reverse().join('') ?? '';\r\n\r\n for (let i = 0; i < permissionsLength; i++) {\r\n const deny = parseInt(revDecDenies[i] ?? '0');\r\n const allow = parseInt(revDecAllows[i] ?? '0');\r\n\r\n if (deny) {\r\n denies |= 1 << i;\r\n }\r\n\r\n if (allow) {\r\n allows |= 1 << i;\r\n }\r\n }\r\n });\r\n\r\n return {allow: allows, deny: denies};\r\n }\r\n\r\n private resolveOverwritesHierarchy(permissionOverwritesValues: PermissionOverwritesValue[]): number {\r\n let result = 0;\r\n\r\n for (const value of permissionOverwritesValues) {\r\n if (value.allow & Permissions.getByName('Root').value) {\r\n return this.getRootAccessValue();\r\n }\r\n\r\n result = (result & ~value.deny) | value.allow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getRootAccessValue(): number {\r\n let result = 0;\r\n\r\n for (const name of Permissions.getNames()) {\r\n result |= Permissions.getByName(name).value;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private async fetchMembersOrFail(location: ChatLocation): Promise<[SpaceMember | null, RoomMember | null]> {\r\n const results = await Promise.all([\r\n location.spaceId ? this.tracker.spaces.getMe(location.spaceId) : null,\r\n location.roomId ? this.tracker.rooms.getMe(location.roomId) : null,\r\n ]);\r\n\r\n const spaceFail = location.spaceId && ! results[0];\r\n const roomFail = location.roomId && ! results[1];\r\n\r\n if (spaceFail || roomFail) {\r\n const layer = spaceFail ? `space (${location.spaceId})` : `room (${location.roomId})`;\r\n throw new Error(`Attempting to calculate permissions for a ${layer} that the user does not belong to`);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n private validateLocation(location: ChatLocation): void {\r\n if (location.topicId && ! location.roomId) {\r\n throw new Error('Corrupted arguments hierarchy');\r\n }\r\n }\r\n}","import {WebSocketChatClient} from \"../WebSocketChatClient\";\nimport {Session, User} from \"../types/src\";\nimport {RoomsManager} from \"./RoomsManager\";\nimport {SpacesManager} from \"./SpacesManager\";\nimport {PermissionsManager} from \"./PermissionsManager\";\nimport {DeferredTask} from \"./AsyncUtils\";\n\nexport class ChatStateTracker {\n /**\n * State of your permissions.\n */\n public readonly permissions = new PermissionsManager(this);\n /**\n * State of the rooms you are in.\n */\n public readonly rooms: RoomsManager = new RoomsManager(this);\n /**\n * State of the spaces you are in.\n */\n public readonly spaces = new SpacesManager(this);\n\n private _me: User = null;\n private readonly deferredSession = new DeferredTask();\n\n public constructor(public readonly client: WebSocketChatClient) {\n this.client.on('Session', ev => this.handleSession(ev));\n }\n\n public get me(): User | null {\n return this._me;\n }\n\n public async getMe(): Promise<User> {\n await this.deferredSession.promise;\n return this._me;\n }\n\n private handleSession(ev: Session): void {\n this._me = ev.user;\n this.deferredSession.resolve();\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ChatStateTracker} from \"./state-tracker/ChatStateTracker\";\nimport {Envelope} from \"./types/src\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketChatClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebSocketChatClientEvent;\n public readonly state?: ChatStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new ChatStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n\n // Login successfully\n if (!this.authenticated) {\n const isAuthenticated = envelope.type !== 'Error';\n this.authenticated = isAuthenticated;\n if (isAuthenticated) {\n this.authenticatedResolvers[0]();\n this.emit(this.Event.connect);\n this.sendFromQueue();\n } else {\n this.authenticatedResolvers[1](envelope.data);\n }\n }\n }\n\n private onClose(event: CloseEvent): void {\n clearTimeout(this.connectingTimeoutId);\n const reconnect = event.code !== 1000; // Connection was closed because of error\n if (reconnect) {\n this.connect();\n }\n this.emit(this.Event.disconnect, reconnect);\n }\n\n private sendFromQueue(): void {\n // Send awaiting data to server\n let lastDelay = 0;\n for (const dataIndex in this.sendQueue) {\n const data = this.sendQueue[dataIndex];\n setTimeout(() => this.send(...data), lastDelay);\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\n }\n this.sendQueue = [];\n clearTimeout(this.connectingTimeoutId);\n }\n\n private triggerConnectionTimeout(): void {\n this.disconnect();\n this.emit(this.Event.error, new Error('Connection timeout'));\n }\n}","import {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"./types/src\";\n\nexport interface WebApiChatClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiChatClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebApiChatClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiChatClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n const envelope = this.createEnvelope(commandType, commandData);\n this.sendStack.push({data: envelope, attempts: 0, lastTimeoutId: null});\n this.makeApiCall(this.sendStack.length - 1);\n return this.createPromiseFromCommandEnvelope(envelope);\n }\n\n public destroy(): void {\n // Cancel all awaiting requests\n this.sendStack.forEach(item => {\n if (item.lastTimeoutId) {\n clearTimeout(item.lastTimeoutId);\n }\n this.awaitingResponse.delete(item.data.ref);\n });\n this.sendStack = [];\n this.emit(this.Event.destroy, false);\n }\n\n protected async onMessage(reqId: number, response: Response): Promise<void> {\n this.sendStack.splice(reqId, 1);\n const envelope: Envelope = await response.json();\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}","export interface RestClientOptions {\r\n url?: string;\r\n token: string;\r\n}\r\n\r\nexport interface RestClientResponse<T> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\nexport abstract class AbstractRestClient {\r\n protected abstract defaultUrl: string;\r\n\r\n public constructor(\r\n private readonly options: RestClientOptions,\r\n ) {}\r\n\r\n protected async send<ResponseT = any>(\r\n method: HttpMethod,\r\n uri: string,\r\n data: any = undefined\r\n ): Promise<RestClientResponse<ResponseT>> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n let url = this.getUrl(uri);\r\n let body = undefined;\r\n\r\n if (data) {\r\n if (['GET', 'DELETE'].includes(method)) {\r\n url += new URLSearchParams(data).toString()\r\n } else {\r\n body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n const result = await fetch(url, {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\nimport { Permissions, PermissionDefinition, Layer } from \"./Permissions\";\nimport * as ChatTypes from './types/src';\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n Permissions, PermissionDefinition, Layer,\n WebSocketChatClient, WebApiChatClient,\n AuthClient,\n};\n\nexport type {ChatTypes};"],"names":["EventTarget","Map","eventName","handler","addHandler","events","onceEvents","index","get","indexOf","splice","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractChatClient","type","data","ref","sentCounter","toString","envelope","Promise","args","awaitingResponse","has","isError","error","IndexedCollection","items","_items","size","item","id","ids","clear","field","valueToFind","limit","result","entries","next","value","done","length","Array","from","entry","IndexedObjectCollection","values","getId","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","off","ObservableIndexedObjectCollection","DeferredTask","promise","resolve","PromiseRegistry","key","promises","fn","register","getCombinedId","location","roomId","topicId","MessagesManager","tracker","client","ev","handleSession","handleRoomJoin","handleNewTopic","handleFollowedTopicUpdated","handleTopicFollowed","handleTopicUnfollowed","handleNewMessage","handleRoomDeleted","handleRoomLeft","handleTopicDeleted","list","spaceId","spaces","Error","send","setFollowedTopicsArray","followedTopics","rooms","undefined","followedTopicsPromises","notExist","registerByFunction","getRoomFollowedTopics","collection","followedTopic","missed","missedMore","missedMoreThan","topicIds","newTopics","newTopic","newTopicCombinedId","messageRef","refTopicCombinedId","refTopicMessages","refMessage","messageId","topicRef","message","updateLocallyFollowedTopicOnNewMessage","room","defaultTopic","createHistoryForNewTopic","topic","state","roomFollowedTopics","isMe","author","me","update","lastAckMessageId","roomToTopics","report","RoomsManager","messages","handleRoomJoined","handleRoomUpdated","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleRoomMemberUpdated","handleSpaceMemberLeft","handleSpaceMemberUpdated","handleSpaceDeleted","handleUserUpdated","membersPromises","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","topics","roomIds","forget","_deleteByTopicIds","deleteRoom","findBy","roomMembers","roomMember","newMember","deleteRoomsBySpaceId","addJoinedRoomTopics","addJoinedRooms","name","description","messageCount","lastMessage","reorderRolesOnPriorityUpdate","allRoles","oldRole","updatedRole","increased","priority","decreased","changedRoles","role","SpacesManager","handleNewRoom","handleSpaceUpdated","handleSpaceJoined","handleSpaceMemberJoined","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","roomsPromises","summary","roomIdToSpaceId","space","addJoinedSpaces","summaries","newRole","rolesToUpdate","Layer","PermissionDefinition","Permissions","Object","permissionName","layer","def","getByName","maxLayer","Root","Room","CreateSpaces","Global","ManageSpace","Space","ManageSpaceRoles","ManageRoom","CreateTopics","ManageTopic","Topic","ManageSpaceMembers","ManageRoomMembers","CreateMessages","ManagePermissions","CreateSpaceRooms","ManageSpaceRooms","getOvId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","validateLocation","overwritesPromises","permissionNames","calculatePermissions","ownedPermissions","missing","ok","hasAll","hasAny","fetchMembersOrFail","userRoles","getOverwrites","then","v","filterLocation","collectRoleOverwrites","getTopics","all","resolveOverwritesHierarchy","deleteOverwritesByIdPrefix","prefix","startsWith","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","join","revDecAllows","i","parseInt","permissionOverwritesValues","getRootAccessValue","getNames","results","spaceFail","roomFail","ChatStateTracker","_me","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","Event","isAuthenticated","connect","sendFromQueue","clearTimeout","reconnect","code","disconnect","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","onError","AbstractRestClient","uri","getUrl","URLSearchParams","status","text","removeEndingSlash","defaultUrl","removeStartingSlash","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/state-tracker/AsyncUtils.ts","webpack://PServ/./src/state-tracker/MessagesManager.ts","webpack://PServ/./src/state-tracker/RoomsManager.ts","webpack://PServ/./src/state-tracker/functions.ts","webpack://PServ/./src/state-tracker/SpacesManager.ts","webpack://PServ/./src/Permissions.ts","webpack://PServ/./src/state-tracker/PermissionsManager.ts","webpack://PServ/./src/state-tracker/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts","webpack://PServ/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PServ\"] = factory();\n\telse\n\t\troot[\"PServ\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export type EventHandler<EventT> = (ev?: EventT) => void;\ntype HandlersMap<EventT> = Map<string, EventHandler<EventT>[]>;\n\nexport interface ObservableInterface<EventT = any> {\n on(eventName: string, handler: EventHandler<EventT>): this;\n once(eventName: string, handler: EventHandler<EventT>): this;\n off(eventName: string, handler: EventHandler<EventT>): this;\n}\n\nexport class EventTarget<EventT = any> implements ObservableInterface<EventT> {\n protected events: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n protected onceEvents: HandlersMap<EventT> = new Map<string, EventHandler<EventT>[]>();\n\n public on(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.events, eventName, handler);\n return this;\n }\n\n public once(eventName: string, handler: EventHandler<EventT>): this {\n this.addHandler(this.onceEvents, eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: EventHandler<EventT>): this {\n const index = this.events.get(eventName)?.indexOf(handler);\n if (!index || index < 0) {\n return this;\n }\n this.events.get(eventName).splice(index, 1);\n }\n\n public emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\r\n Bye,\r\n GetSession,\r\n JoinSpace,\r\n Session,\r\n SpaceJoined,\r\n Error as ErrorType,\r\n SpaceLeft,\r\n SpaceMemberJoined,\r\n SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n SpaceDeleted,\r\n SpaceMembers,\r\n SpaceRooms,\r\n NewRole,\r\n RoomDeleted,\r\n RoomJoined,\r\n RoomLeft,\r\n RoomMemberLeft,\r\n RoomMemberJoined,\r\n RoomMembers,\r\n NewRoom,\r\n NewTopic,\r\n TopicDeleted,\r\n NewMessage,\r\n GetPermissionOverwrites,\r\n GetComputedPermissions,\r\n LeaveSpace,\r\n CreateSpace,\r\n DeleteSpace,\r\n GetSpaceMembers,\r\n GetSpaceRooms,\r\n CreateRole,\r\n DeleteRole,\r\n AssignRole,\r\n DeassignRole,\r\n SetPermissionOverwrites,\r\n JoinRoom,\r\n LeaveRoom,\r\n CreateRoom,\r\n DeleteRoom,\r\n GetRoomMembers,\r\n CreateTopic,\r\n DeleteTopic,\r\n CreateMessage,\r\n Envelope,\r\n PermissionOverwrites,\r\n PermissionOverwritesUpdated,\r\n RoomMemberUpdated,\r\n UpdateRole,\r\n RoleUpdated,\r\n Ack,\r\n UserUpdated,\r\n UpdateRoom,\r\n RoomUpdated,\r\n UpdateSpace,\r\n SpaceUpdated,\r\n PermissionOverwriteTargets,\r\n GetPermissionOverwriteTargets,\r\n Owners,\r\n Ok,\r\n GetOwners,\r\n CreateOwner,\r\n RoleDeleted,\r\n FollowedTopicUpdated,\r\n TopicFollowed,\r\n TopicUnfollowed,\r\n FollowedTopics,\r\n FollowTopic,\r\n UnfollowTopic,\r\n GetFollowedTopics,\r\n} from \"./types/src/index\";\r\nimport {EventTarget} from \"./EventTarget\";\r\n\r\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\r\n\r\nexport abstract class AbstractChatClient extends EventTarget {\r\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\r\n protected sentCounter: number = 0;\r\n\r\n public abstract send<CommandType extends keyof CommandsMap>\r\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\r\n\r\n public on<EventName extends keyof EventsMap>\r\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public once<EventName extends keyof EventsMap>\r\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\r\n return super.once(eventName, handler);\r\n }\r\n\r\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\r\n return {\r\n type, data, ref: (++this.sentCounter).toString()\r\n };\r\n }\r\n\r\n protected createPromiseFromCommandEnvelope\r\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\r\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\r\n return new Promise((...args) =>\r\n this.awaitingResponse.set(envelope.ref as string, args));\r\n }\r\n\r\n protected handleIncomingEnvelope(envelope: Envelope): void {\r\n if (!this.awaitingResponse.has(envelope.ref)) {\r\n return;\r\n }\r\n const isError = envelope.type === 'Error';\r\n this.awaitingResponse.get(envelope.ref)[0]({\r\n data: isError ? null : envelope.data,\r\n error: isError ? envelope.data : null,\r\n } as CommandResult<any>);\r\n this.awaitingResponse.delete(envelope.ref);\r\n }\r\n\r\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\r\n if (!this.awaitingResponse.has(envelope.ref)) {\r\n return;\r\n }\r\n this.awaitingResponse.get(envelope.ref)[0](error);\r\n this.awaitingResponse.delete(envelope.ref);\r\n }\r\n}\r\n\r\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\r\n\r\n/**\r\n * Map of incoming events.\r\n */\r\nexport type EventsMap = {\r\n // General Events\r\n Bye: Bye,\r\n Ok: Ok,\r\n Error: ErrorType,\r\n Session: Session,\r\n Permissions: Permissions,\r\n PermissionOverwrites: PermissionOverwrites,\r\n PermissionOverwritesUpdated: PermissionOverwritesUpdated,\r\n PermissionOverwriteTargets: PermissionOverwriteTargets,\r\n Owners: Owners,\r\n // Space events\r\n SpaceJoined: SpaceJoined,\r\n SpaceLeft: SpaceLeft,\r\n SpaceMemberJoined: SpaceMemberJoined,\r\n SpaceMemberLeft: SpaceMemberLeft,\r\n SpaceMemberUpdated: SpaceMemberUpdated,\r\n SpaceUpdated: SpaceUpdated,\r\n SpaceDeleted: SpaceDeleted,\r\n SpaceMembers: SpaceMembers,\r\n SpaceRooms: SpaceRooms,\r\n NewRole: NewRole,\r\n RoleDeleted: RoleDeleted,\r\n RoleUpdated: RoleUpdated,\r\n // Room events\r\n RoomJoined: RoomJoined,\r\n RoomLeft: RoomLeft,\r\n RoomMemberJoined: RoomMemberJoined,\r\n RoomMemberLeft: RoomMemberLeft,\r\n RoomMemberUpdated: RoomMemberUpdated,\r\n RoomMembers: RoomMembers,\r\n NewRoom: NewRoom,\r\n RoomDeleted: RoomDeleted,\r\n RoomUpdated: RoomUpdated,\r\n // Topic events\r\n NewTopic: NewTopic,\r\n TopicDeleted: TopicDeleted,\r\n NewMessage: NewMessage,\r\n UserUpdated: UserUpdated,\r\n TopicFollowed: TopicFollowed,\r\n TopicUnfollowed: TopicUnfollowed,\r\n FollowedTopics: FollowedTopics,\r\n FollowedTopicUpdated: FollowedTopicUpdated,\r\n};\r\n\r\n/**\r\n * Map of commands and their corresponding events.\r\n */\r\nexport type CommandsMap = {\r\n // General commands\r\n GetSession: [GetSession, EventsMap['Session']],\r\n SetPermissionOverwrites: [SetPermissionOverwrites, EventsMap['PermissionOverwritesUpdated']],\r\n GetPermissionOverwrites: [GetPermissionOverwrites, EventsMap['PermissionOverwrites']],\r\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\r\n GetPermissionOverwriteTargets: [GetPermissionOverwriteTargets, EventsMap['PermissionOverwriteTargets']],\r\n GetOwners: [GetOwners, EventsMap['Owners']],\r\n CreateOwner: [CreateOwner, EventsMap['Owners']],\r\n DeleteOwner: [CreateOwner, EventsMap['Owners']],\r\n // Space commands\r\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\r\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\r\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\r\n UpdateSpace: [UpdateSpace, EventsMap['SpaceUpdated']],\r\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\r\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\r\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\r\n CreateRole: [CreateRole, EventsMap['NewRole']],\r\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\r\n UpdateRole: [UpdateRole, EventsMap['RoleUpdated']],\r\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\r\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdated'] | EventsMap['RoomMemberUpdated']],\r\n // Room commands\r\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\r\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\r\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\r\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\r\n UpdateRoom: [UpdateRoom, EventsMap['RoomUpdated']],\r\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\r\n // Topic commands\r\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\r\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\r\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\r\n Ack: [Ack, EventsMap['FollowedTopicUpdated'] | EventsMap['Ok']],\r\n FollowTopic: [FollowTopic, EventsMap['TopicFollowed']],\r\n UnfollowTopic: [UnfollowTopic, EventsMap['TopicUnfollowed']],\r\n GetFollowedTopics: [GetFollowedTopics, EventsMap['FollowedTopics']],\r\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | undefined {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | undefined {\n return this._items.get(id);\n }\n\n public getAt(index: number): T | undefined {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n super();\n this.eventTarget = new EventTarget<ObservableCollectionEvent<KeyT>>();\n this.set(...items);\n }\n\n public set(...items: [KeyT, ValueT][]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => item[0])});\n }\n }\n\n public delete(...ids: KeyT[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<KeyT>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}\n\nexport class ObservableIndexedObjectCollection<T> extends IndexedObjectCollection<T> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<string>>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => string),\n items: T[] = [],\n ) {\n super(id);\n this.eventTarget = new EventTarget();\n this.set(...items);\n }\n\n public set(...items: T[]) {\n if (items.length) {\n super.set(...items);\n this.eventTarget.emit('change', {setItems: items.map(item => this.getId(item))});\n }\n }\n\n public delete(...ids: string[]) {\n if (ids.length) {\n super.delete(...ids);\n this.eventTarget.emit('change', {deletedItems: ids});\n }\n }\n\n public deleteAll() {\n if (this.length) {\n const ids = this._items.items.keys();\n super.deleteAll();\n this.eventTarget.emit('change', {deletedItems: Array.from(ids)});\n }\n }\n\n public on(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.on(eventName, handler);\n return this;\n }\n\n public once(eventName: 'change', handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.once(eventName, handler);\n return this;\n }\n\n public off(eventName: string, handler: (ev?: ObservableCollectionEvent<string>) => void): this {\n this.eventTarget.off(eventName, handler);\n return this;\n }\n}","import {IndexedCollection} from \"../IndexedObjectCollection\";\r\n\r\nexport class DeferredTask {\r\n public readonly promise: Promise<void>;\r\n public resolve: () => void;\r\n\r\n public constructor() {\r\n this.promise = new Promise<void>((resolve) => this.resolve = resolve);\r\n }\r\n}\r\n\r\nexport class PromiseRegistry {\r\n private promises = new IndexedCollection<string, Promise<any>>();\r\n\r\n public register<T = any>(promise: Promise<T>, key: string): void {\r\n this.promises.set([key, promise]);\r\n }\r\n\r\n public registerByFunction(fn: () => Promise<any>, key: string): void {\r\n this.register(fn(), key);\r\n }\r\n\r\n public get<T = any>(key: string): Promise<T> | undefined {\r\n return this.promises.get(key);\r\n }\r\n\r\n public has(key: string): boolean {\r\n return this.promises.has(key);\r\n }\r\n\r\n public notExist(key: string): boolean {\r\n return ! this.has(key);\r\n }\r\n\r\n public forget(...keys: string[]): void {\r\n this.promises.delete(...keys);\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n ChatLocation,\r\n Message,\r\n NewMessage,\r\n Topic,\r\n FollowedTopic,\r\n TopicFollowed,\r\n TopicUnfollowed,\r\n RoomDeleted,\r\n RoomLeft,\r\n TopicDeleted,\r\n FollowedTopicUpdated, RoomJoined, NewTopic, Session,\r\n} from \"../types/src\";\r\nimport {\r\n IndexedCollection,\r\n ObservableIndexedObjectCollection\r\n} from \"../IndexedObjectCollection\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nexport const getCombinedId = (location: ChatLocation) => (location.roomId ?? '') + (location.topicId ?? '');\r\n\r\nexport class MessagesManager {\r\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\r\n private readonly list = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\r\n private readonly followedTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<FollowedTopic>>();\r\n private readonly followedTopicsPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoin(ev));\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('FollowedTopicUpdated', ev => this.handleFollowedTopicUpdated(ev));\r\n this.tracker.client.on('TopicFollowed', ev => this.handleTopicFollowed(ev));\r\n this.tracker.client.on('TopicUnfollowed', ev => this.handleTopicUnfollowed(ev));\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n }\r\n\r\n /**\r\n * Get collection of the messages written in topic.\r\n */\r\n public async get(location: ChatLocation): Promise<ObservableIndexedObjectCollection<Message> | undefined> {\r\n return this.list.get(getCombinedId(location));\r\n }\r\n\r\n /**\r\n * Cache followed topics for all joined rooms in a space and fetch them in bulk if necessary.\r\n * Then you can get them using getRoomFollowedTopics().\r\n * @see getRoomFollowedTopics\r\n */\r\n public async cacheSpaceFollowedTopic(spaceId: string): Promise<void> {\r\n if (! (await this.tracker.spaces.get()).has(spaceId)) {\r\n throw new Error(`You are not in space ${spaceId}`);\r\n }\r\n\r\n const roomIds = (await this.tracker.rooms.get()).findBy('spaceId', spaceId).items.map(room => room.id);\r\n\r\n if (! roomIds.length) {\r\n // We don't need to ping server for followed topics for this space, if user has no joined rooms\r\n return;\r\n }\r\n\r\n // If we don't have ack reports for all rooms in space, fetch them\r\n const result = await this.tracker.client.send('GetFollowedTopics', {location: {spaceId}});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.setFollowedTopicsArray(roomIds, result.data.followedTopics);\r\n }\r\n\r\n /**\r\n * Get followed topics for the given room.\r\n * @return Undefined if you are not in the room, collection otherwise.\r\n */\r\n public async getRoomFollowedTopics(roomId: string): Promise<ObservableIndexedObjectCollection<FollowedTopic> | undefined> {\r\n if (! (await this.tracker.rooms.get()).has(roomId)) {\r\n return undefined;\r\n }\r\n\r\n if (! this.followedTopics.has(roomId)) {\r\n if (this.followedTopicsPromises.notExist(roomId)) {\r\n this.followedTopicsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetFollowedTopics', {location: {roomId}});\r\n\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n\r\n this.setFollowedTopicsArray([roomId], result.data.followedTopics);\r\n }, roomId);\r\n }\r\n\r\n await this.followedTopicsPromises.get(roomId);\r\n }\r\n\r\n return this.followedTopics.get(roomId);\r\n }\r\n\r\n /**\r\n * Batch acknowledge all missed messages from any topics in given room.\r\n */\r\n public async ackRoomFollowedTopics(roomId: string): Promise<void> {\r\n const collection = await this.getRoomFollowedTopics(roomId);\r\n\r\n if (! collection) {\r\n return;\r\n }\r\n\r\n for (const followedTopic of collection.items) {\r\n if (followedTopic.missed) {\r\n await this.tracker.client.send('Ack', {location: followedTopic.location});\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Calculate missed messages from any topic in given room.\r\n * @return Undefined if you are not in room, stats object otherwise.\r\n */\r\n public async calculateRoomMissedMessages(roomId: string): Promise<{missed: number, missedMore: boolean} | undefined> {\r\n const collection = await this.getRoomFollowedTopics(roomId);\r\n\r\n if (! collection) {\r\n return undefined;\r\n }\r\n\r\n let missed: number = 0, missedMore: boolean = false;\r\n\r\n for (const followedTopic of collection.items) {\r\n missed += followedTopic.missed ?? followedTopic.missedMoreThan ?? 0;\r\n if (followedTopic.missedMoreThan) {\r\n missedMore = true;\r\n }\r\n }\r\n\r\n return {missed, missedMore};\r\n }\r\n\r\n /**\r\n * For internal use. If you want to delete the message, execute a proper command on client object.\r\n * @internal\r\n */\r\n public _deleteByTopicIds(roomId: string, ...topicIds: string[]): void {\r\n this.list.delete(...topicIds.map(topicId => getCombinedId({roomId, topicId})));\r\n this.followedTopics.get(roomId)?.delete(...topicIds);\r\n }\r\n\r\n private createHistoryForNewTopic(roomId: string, ...newTopics: Topic[]): void {\r\n for (const newTopic of newTopics) {\r\n const newTopicCombinedId = getCombinedId({roomId, topicId: newTopic.id});\r\n\r\n this.list.set([newTopicCombinedId, new ObservableIndexedObjectCollection<Message>('id')]);\r\n\r\n // If new topic refers to some message from this room, update other structures\r\n if (newTopic.messageRef) {\r\n const refTopicCombinedId = getCombinedId({roomId, topicId: newTopic.messageRef.topicId});\r\n const refTopicMessages = this.list.get(refTopicCombinedId);\r\n const refMessage = refTopicMessages?.get(newTopic.messageRef.messageId);\r\n\r\n if (refMessage) {\r\n // Update referenced topic ID in message\r\n refTopicMessages.set({...refMessage, topicRef: newTopic.id});\r\n }\r\n }\r\n }\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n this.list.get(getCombinedId(ev.location))?.set(ev.message);\r\n this.updateLocallyFollowedTopicOnNewMessage(ev);\r\n }\r\n\r\n private handleFollowedTopicUpdated(ev: FollowedTopicUpdated): void {\r\n this.followedTopics.get(ev.followedTopic.location.roomId)?.set(ev.followedTopic);\r\n }\r\n\r\n private handleTopicFollowed(ev: TopicFollowed): void {\r\n this.setFollowedTopicsArray([ev.followedTopic.location.roomId], [ev.followedTopic]);\r\n }\r\n\r\n private handleTopicUnfollowed(ev: TopicUnfollowed): void {\r\n this.followedTopics.get(ev.location.roomId)?.delete(ev.location.topicId);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.clearRoomFollowedTopicsStructures(ev.id);\r\n }\r\n\r\n private handleRoomJoin(ev: RoomJoined): void {\r\n if (ev.room.defaultTopic) {\r\n this.createHistoryForNewTopic(ev.room.id, ev.room.defaultTopic)\r\n }\r\n this.clearRoomFollowedTopicsStructures(ev.room.id);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.clearRoomFollowedTopicsStructures(ev.id);\r\n }\r\n\r\n private async handleNewTopic(ev: NewTopic): Promise<void> {\r\n this.createHistoryForNewTopic(ev.roomId, ev.topic);\r\n\r\n if (this.followedTopics.has(ev.roomId)) {\r\n // Check if the new topic is followed by user\r\n // only if client asked for followed topics list before for this room\r\n const result = await this.tracker.client.send(\r\n 'GetFollowedTopics',\r\n {location: {roomId: ev.roomId, topicId: ev.topic.id}},\r\n );\r\n const followedTopic = result.data.followedTopics[0];\r\n if (followedTopic) {\r\n this.followedTopics.get(ev.roomId).set(followedTopic);\r\n }\r\n }\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n this.followedTopics.get(ev.location.roomId)?.delete(ev.location.topicId);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n ev.state.rooms.forEach(room => {\r\n if (room.defaultTopic) {\r\n this.createHistoryForNewTopic(room.id, room.defaultTopic);\r\n }\r\n });\r\n }\r\n\r\n private updateLocallyFollowedTopicOnNewMessage(ev: NewMessage): void {\r\n const roomFollowedTopics = this.followedTopics.get(ev.location.roomId);\r\n const followedTopic = roomFollowedTopics?.get(ev.location.topicId);\r\n\r\n if (! roomFollowedTopics || ! followedTopic) {\r\n // Skip if we don't follow this room or targeted topic\r\n return;\r\n }\r\n\r\n const isMe = ev.message.author.id === this.tracker.me?.id;\r\n\r\n let update: Partial<FollowedTopic>;\r\n\r\n if (isMe) {\r\n // Reset missed messages count if new message is authored by me\r\n update = {missed: 0, missedMoreThan: null, lastAckMessageId: ev.message.id};\r\n } else {\r\n // ...add 1 otherwise\r\n update = {\r\n missed: followedTopic.missed === null ? null : followedTopic.missed + 1,\r\n missedMoreThan: followedTopic.missedMoreThan === null ? null : followedTopic.missedMoreThan,\r\n };\r\n }\r\n\r\n roomFollowedTopics.set({...followedTopic, ...update});\r\n }\r\n\r\n private setFollowedTopicsArray(roomIds: string[], followedTopics: FollowedTopic[]): void {\r\n const roomToTopics: {[roomId: string]: FollowedTopic[]} = {};\r\n\r\n // Reassign followed topics to limit collection change event emit\r\n followedTopics.forEach(followedTopic => {\r\n roomToTopics[followedTopic.location.roomId] ??= [];\r\n roomToTopics[followedTopic.location.roomId].push(followedTopic);\r\n });\r\n\r\n roomIds.forEach(roomId => {\r\n if (! this.followedTopics.has(roomId)) {\r\n this.followedTopics.set([roomId, new ObservableIndexedObjectCollection<FollowedTopic>(\r\n followedTopic => followedTopic.location.topicId\r\n )]);\r\n }\r\n\r\n if (roomToTopics[roomId]) {\r\n this.followedTopics.get(roomId).set(...roomToTopics[roomId]);\r\n }\r\n });\r\n }\r\n\r\n private clearRoomFollowedTopicsStructures(roomId: string): void {\r\n this.followedTopics.delete(roomId);\r\n this.followedTopicsPromises.forget(roomId);\r\n }\r\n}","import {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewMessage,\r\n NewTopic,\r\n Room, RoomDeleted,\r\n RoomJoined, RoomLeft,\r\n RoomMember, RoomMemberJoined, RoomMemberLeft, RoomMembers,\r\n RoomMemberUpdated, RoomUpdated, Session, SpaceDeleted, SpaceLeft, SpaceMemberLeft,\r\n SpaceMemberUpdated,\r\n Topic,\r\n TopicDeleted,\r\n UserUpdated,\r\n} from \"../types/src\";\r\nimport {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {MessagesManager} from \"./MessagesManager\";\r\n\r\nexport class RoomsManager {\r\n public readonly messages: MessagesManager;\r\n\r\n private readonly list = new ObservableIndexedObjectCollection<Room>('id');\r\n private readonly topics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.messages = new MessagesManager(tracker);\r\n\r\n this.tracker.client.on('NewMessage', ev => this.handleNewMessage(ev));\r\n this.tracker.client.on('NewTopic', ev => this.handleNewTopic(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\r\n this.tracker.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\r\n this.tracker.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of room members.\r\n */\r\n public async getMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | undefined> {\r\n if (this.membersPromises.notExist(roomId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetRoomMembers', {id: roomId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleRoomMembers(result.data);\r\n }, roomId);\r\n }\r\n\r\n await this.membersPromises.get(roomId);\r\n return this.members.get(roomId);\r\n }\r\n\r\n /**\r\n * Get a room member representing the current user.\r\n */\r\n public async getMe(roomId: string): Promise<RoomMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n if (! this.list.has(roomId)) {\r\n // User is not in passed room.\r\n return undefined;\r\n }\r\n\r\n const members = await this.getMembers(roomId);\r\n return members.items.find(member => (member.user?.id ?? member.spaceMember.user.id) === userId);\r\n }\r\n\r\n /**\r\n * Get collection of all the rooms you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Room>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of room topics.\r\n */\r\n public async getTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.topics.get(roomId);\r\n }\r\n\r\n private deleteRoom(...roomIds: string[]): void {\r\n this.list.delete(...roomIds);\r\n this.members.delete(...roomIds);\r\n this.membersPromises.forget(...roomIds);\r\n\r\n for (const roomId of roomIds) {\r\n const topicIds: string[] = this.topics.get(roomId)?.map(topic => topic.id) ?? [];\r\n this.messages._deleteByTopicIds(roomId, ...topicIds);\r\n }\r\n\r\n this.topics.delete(...roomIds);\r\n }\r\n\r\n private deleteRoomsBySpaceId(spaceId: string): void {\r\n this.deleteRoom(\r\n ...this.list.findBy('spaceId', spaceId).map(room => room.id)\r\n );\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n // Update members of rooms related to this space\r\n for (const room of this.list.findBy('spaceId', ev.spaceId).items) {\r\n const roomMembers = this.members.get(room.id);\r\n\r\n if (! roomMembers || ! roomMembers.has(ev.userId)) {\r\n // Skip update if member list for this room is not loaded\r\n // or user is not in room\r\n continue;\r\n }\r\n\r\n const roomMember = roomMembers.get(ev.userId);\r\n const user = roomMember.spaceMember.user;\r\n\r\n // Update space member but first fill user object (it's null in event object)\r\n roomMember.spaceMember = {...ev.member, user};\r\n roomMembers.set(roomMember);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n this.list\r\n .findBy('spaceId', ev.spaceId).items\r\n .forEach(room => this.members.get(room.id)?.delete(ev.userId));\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (! this.members.has(ev.roomId)) {\r\n // We do not track member list for this room.\r\n return;\r\n }\r\n\r\n const members = this.members.get(ev.roomId);\r\n const member = members.get(ev.userId);\r\n const newMember = ev.member;\r\n const user = member.spaceMember?.user ?? member.user;\r\n\r\n if (newMember.spaceMember) {\r\n newMember.spaceMember.user = user;\r\n } else {\r\n newMember.user = user;\r\n }\r\n\r\n members.set(newMember);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n this.deleteRoomsBySpaceId(ev.id);\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const collection = this.topics.get(ev.location.roomId);\r\n collection.delete(ev.location.topicId);\r\n\r\n const room = this.list.get(ev.location.roomId);\r\n if (room.defaultTopic?.id === ev.location.topicId) {\r\n this.list.set({...room, defaultTopic: null});\r\n }\r\n }\r\n\r\n private handleNewTopic(ev: NewTopic): void {\r\n this.addJoinedRoomTopics(ev.roomId, ev.topic);\r\n }\r\n\r\n private addJoinedRoomTopics(roomId: string, ...topics: Topic[]): void {\r\n if (this.topics.has(roomId)) {\r\n this.topics.get(roomId).set(...topics);\r\n } else {\r\n this.topics.set([roomId, new ObservableIndexedObjectCollection<Topic>('id', topics)]);\r\n }\r\n }\r\n\r\n private handleRoomJoined(ev: RoomJoined): void {\r\n this.addJoinedRooms(ev.room);\r\n }\r\n\r\n private handleRoomUpdated(ev: RoomUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as Room);\r\n }\r\n\r\n private handleRoomDeleted(ev: RoomDeleted): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private addJoinedRooms(...rooms: Room[]): void {\r\n for (const room of rooms) {\r\n if (room.defaultTopic) {\r\n this.addJoinedRoomTopics(room.id, room.defaultTopic);\r\n }\r\n }\r\n this.list.set(...rooms);\r\n }\r\n\r\n private handleRoomLeft(ev: RoomLeft): void {\r\n this.deleteRoom(ev.id);\r\n }\r\n\r\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\r\n if (this.members.has(ev.roomId)) {\r\n this.members.get(ev.roomId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleRoomMembers(ev: RoomMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(\r\n member => member.user?.id ?? member.spaceMember.user.id,\r\n ev.members,\r\n )\r\n ]);\r\n }\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.topics.deleteAll();\r\n this.members.deleteAll();\r\n\r\n this.addJoinedRooms(...ev.state.rooms);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip room; updated user is not here\r\n return;\r\n }\r\n\r\n const newMember: RoomMember = {...member};\r\n\r\n if (member.user) {\r\n newMember.user = ev.user;\r\n } else {\r\n newMember.spaceMember.user = ev.user;\r\n }\r\n\r\n members.set(newMember);\r\n });\r\n }\r\n\r\n private handleNewMessage(ev: NewMessage): void {\r\n const topics = this.topics.get(ev.location.roomId);\r\n const topic = topics.get(ev.location.topicId);\r\n\r\n if (topic) {\r\n topics.set({\r\n ...topic,\r\n messageCount: topic.messageCount + 1,\r\n lastMessage: ev.message,\r\n });\r\n }\r\n }\r\n}","import {Role} from \"../types/src\";\r\n\r\nexport function reorderRolesOnPriorityUpdate(allRoles: Role[], oldRole: Role, updatedRole: Role): Role[] {\r\n // If the priority has changed, adjust the rest of roles\r\n const increased = (updatedRole.priority - oldRole.priority) > 0;\r\n const decreased = ! increased;\r\n const changedRoles: Role[] = [];\r\n\r\n allRoles.forEach(role => {\r\n if (role.id === updatedRole.id) {\r\n // Skip the updated role\r\n return;\r\n }\r\n if (increased && oldRole.priority <= role.priority) {\r\n role.priority--;\r\n changedRoles.push(role);\r\n }\r\n if (decreased && updatedRole.priority <= role.priority) {\r\n role.priority++;\r\n changedRoles.push(role);\r\n }\r\n });\r\n\r\n return changedRoles;\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"../IndexedObjectCollection\";\r\nimport {\r\n NewRole,\r\n NewRoom,\r\n Role,\r\n RoleDeleted,\r\n RoleUpdated,\r\n RoomDeleted,\r\n RoomSummary,\r\n RoomUpdated,\r\n Session,\r\n Space,\r\n SpaceDeleted,\r\n SpaceJoined,\r\n SpaceLeft,\r\n SpaceMember,\r\n SpaceMemberJoined,\r\n SpaceMemberLeft,\r\n SpaceMembers,\r\n SpaceMemberUpdated,\r\n SpaceRooms,\r\n SpaceUpdated,\r\n UserUpdated\r\n} from \"../types/src\";\r\nimport {DeferredTask, PromiseRegistry} from \"./AsyncUtils\";\r\nimport {reorderRolesOnPriorityUpdate} from \"./functions\";\r\n\r\nexport class SpacesManager {\r\n private readonly list = new ObservableIndexedObjectCollection<Space>('id');\r\n private readonly roles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\r\n private readonly rooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\r\n private readonly roomIdToSpaceId = new IndexedCollection<string, string>();\r\n private readonly members = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\r\n private readonly deferredSession = new DeferredTask();\r\n private readonly roomsPromises = new PromiseRegistry();\r\n private readonly membersPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n this.tracker.client.on('NewRoom', ev => this.handleNewRoom(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomUpdated', ev => this.handleRoomUpdated(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceUpdated', ev => this.handleSpaceUpdated(ev));\r\n this.tracker.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\r\n this.tracker.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\r\n this.tracker.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\r\n this.tracker.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('UserUpdated', ev => this.handleUserUpdated(ev));\r\n this.tracker.client.on('NewRole', ev => this.handleNewRole(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('RoleUpdated', ev => this.handleRoleUpdated(ev));\r\n this.tracker.client.on('Session', ev => this.handleSession(ev));\r\n }\r\n\r\n /**\r\n * Get collection of all the spaces you are in.\r\n */\r\n public async get(): Promise<ObservableIndexedObjectCollection<Space>> {\r\n await this.deferredSession.promise;\r\n return this.list;\r\n }\r\n\r\n /**\r\n * Get collection of space roles.\r\n */\r\n public async getRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | undefined> {\r\n await this.deferredSession.promise;\r\n return this.roles.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of the all available rooms inside given space.\r\n */\r\n public async getRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | undefined> {\r\n if (this.roomsPromises.notExist(spaceId)) {\r\n this.roomsPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceRooms', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceRooms(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.roomsPromises.get(spaceId);\r\n return this.rooms.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get collection of space members.\r\n */\r\n public async getMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | undefined> {\r\n if (this.membersPromises.notExist(spaceId)) {\r\n this.membersPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send('GetSpaceMembers', {id: spaceId});\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handleSpaceMembers(result.data);\r\n }, spaceId);\r\n }\r\n\r\n await this.membersPromises.get(spaceId);\r\n return this.members.get(spaceId);\r\n }\r\n\r\n /**\r\n * Get a space member representing the current user.\r\n */\r\n public async getMe(spaceId: string): Promise<SpaceMember | undefined> {\r\n const userId = (await this.tracker.getMe()).id;\r\n\r\n if (! this.list.has(spaceId)) {\r\n // User is not in passed space.\r\n return undefined;\r\n }\r\n\r\n const members = await this.getMembers(spaceId);\r\n return members.items.find(member => member.user.id === userId);\r\n }\r\n\r\n private handleNewRole(ev: NewRole): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.set(ev.role);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleNewRoom(ev: NewRoom): void {\r\n this.rooms.get(ev.spaceId)?.set(ev.summary);\r\n this.roomIdToSpaceId.set([ev.summary.id, ev.spaceId]);\r\n }\r\n\r\n private handleRoomUpdated(ev: RoomUpdated): void {\r\n if (ev.room.spaceId && this.rooms.has(ev.room.spaceId)) {\r\n const rooms = this.rooms.get(ev.room.spaceId);\r\n rooms.set({\r\n ...rooms.get(ev.room.id),\r\n name: ev.room.name,\r\n description: ev.room.description,\r\n } as RoomSummary);\r\n }\r\n }\r\n\r\n private async handleRoomDeleted(ev: RoomDeleted): Promise<void> {\r\n const spaceId = this.roomIdToSpaceId.get(ev.id);\r\n\r\n if (spaceId && this.rooms.has(spaceId)) {\r\n this.rooms.get(spaceId).delete(ev.id);\r\n }\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const collection = this.roles.get(ev.spaceId);\r\n collection.delete(ev.id);\r\n this.list.get(ev.spaceId).roles = collection.items;\r\n }\r\n\r\n private handleSpaceUpdated(ev: SpaceUpdated): void {\r\n this.list.set({\r\n ...this.list.get(ev.space.id),\r\n name: ev.space.name,\r\n } as Space);\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const roomIds = this.rooms.get(ev.id)?.map(item => item.id) ?? [];\r\n this.roomIdToSpaceId.delete(...roomIds);\r\n\r\n this.roles.delete(ev.id);\r\n this.members.delete(ev.id);\r\n this.membersPromises.forget(ev.id);\r\n this.rooms.delete(ev.id);\r\n this.roomsPromises.forget(ev.id);\r\n this.list.delete(ev.id);\r\n }\r\n\r\n private handleSpaceJoined(ev: SpaceJoined): void {\r\n this.addJoinedSpaces(ev.space);\r\n }\r\n\r\n private addJoinedSpaces(...spaces: Space[]): void {\r\n this.roles.set(...(spaces.map(space => [\r\n space.id,\r\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\r\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\r\n this.list.set(...spaces);\r\n }\r\n\r\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).set(ev.member);\r\n }\r\n }\r\n\r\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\r\n if (this.members.has(ev.spaceId)) {\r\n this.members.get(ev.spaceId).delete(ev.userId);\r\n }\r\n }\r\n\r\n private handleSpaceMembers(ev: SpaceMembers): void {\r\n if (! this.members.has(ev.id)) {\r\n this.members.set([\r\n ev.id,\r\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\r\n ]);\r\n }\r\n }\r\n\r\n private handleSpaceRooms(ev: SpaceRooms): void {\r\n if (! this.rooms.has(ev.id)) {\r\n this.rooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\r\n }\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (this.members.has(ev.spaceId)) {\r\n const members = this.members.get(ev.spaceId);\r\n const member = members.get(ev.userId);\r\n members.set({...ev.member, user: member.user});\r\n }\r\n }\r\n\r\n private handleRoleUpdated(ev: RoleUpdated): void {\r\n const roles = this.roles.get(ev.spaceId);\r\n const oldRole = roles.get(ev.role.id);\r\n const newRole = ev.role;\r\n const rolesToUpdate = [newRole];\r\n\r\n if (oldRole.priority !== newRole.priority) {\r\n rolesToUpdate.push(\r\n ...reorderRolesOnPriorityUpdate(roles.items, oldRole, newRole)\r\n );\r\n }\r\n\r\n this.roles.get(ev.spaceId).set(...rolesToUpdate);\r\n }\r\n\r\n private handleSession(ev: Session): void {\r\n this.list.deleteAll();\r\n this.roles.deleteAll();\r\n this.rooms.deleteAll();\r\n this.members.deleteAll();\r\n this.roomIdToSpaceId.deleteAll();\r\n\r\n this.addJoinedSpaces(...ev.state.spaces);\r\n\r\n this.deferredSession.resolve();\r\n }\r\n\r\n private handleUserUpdated(ev: UserUpdated): void {\r\n this.members.items.forEach((members) => {\r\n const member = members.get(ev.user.id);\r\n\r\n if (! member) {\r\n // Skip space; updated user is not here\r\n return;\r\n }\r\n\r\n members.set({...member, user: ev.user});\r\n });\r\n }\r\n}","export enum Layer {\r\n Global,\r\n Space,\r\n Room,\r\n Topic,\r\n}\r\n\r\nexport class PermissionDefinition {\r\n value: number;\r\n maxLayer: Layer;\r\n}\r\n\r\nexport class Permissions {\r\n public static readonly list = {\r\n Root: {value: 1 << 0, maxLayer: Layer.Room},\r\n CreateSpaces: {value: 1 << 1, maxLayer: Layer.Global},\r\n ManageSpace: {value: 1 << 2, maxLayer: Layer.Space},\r\n ManageSpaceRoles: {value: 1 << 3, maxLayer: Layer.Space},\r\n ManageRoom: {value: 1 << 4, maxLayer: Layer.Room},\r\n CreateTopics: {value: 1 << 5, maxLayer: Layer.Room},\r\n ManageTopic: {value: 1 << 6, maxLayer: Layer.Topic},\r\n ManageSpaceMembers: {value: 1 << 7, maxLayer: Layer.Space},\r\n ManageRoomMembers: {value: 1 << 8, maxLayer: Layer.Room},\r\n CreateMessages: {value: 1 << 9, maxLayer: Layer.Topic},\r\n ManagePermissions: {value: 1 << 10, maxLayer: Layer.Topic},\r\n CreateSpaceRooms: {value: 1 << 11, maxLayer: Layer.Space},\r\n ManageSpaceRooms: {value: 1 << 12, maxLayer: Layer.Space},\r\n };\r\n\r\n public static getNames(): (keyof typeof this.list)[] {\r\n return Object.keys(this.list) as any;\r\n }\r\n\r\n public static getByName(name: keyof typeof this.list): PermissionDefinition | undefined {\r\n return this.list[name];\r\n }\r\n\r\n public static canBeDefinedOnLayer(permissionName: keyof typeof this.list, layer: Layer): boolean {\r\n const def = this.getByName(permissionName);\r\n\r\n if (! def) {\r\n throw new Error(`Invalid permission name: ${permissionName}`);\r\n }\r\n\r\n return layer <= this.getByName(permissionName).maxLayer;\r\n }\r\n}","import {ChatStateTracker} from \"./ChatStateTracker\";\r\nimport {\r\n ChatLocation,\r\n PermissionOverwrites,\r\n PermissionOverwritesUpdated,\r\n PermissionOverwritesValue,\r\n RoleDeleted,\r\n RoomDeleted,\r\n RoomLeft, RoomMember, RoomMemberUpdated,\r\n SpaceDeleted,\r\n SpaceLeft, SpaceMember,\r\n SpaceMemberUpdated,\r\n TopicDeleted,\r\n} from \"../types/src\";\r\nimport {EventHandler, EventTarget} from \"../EventTarget\";\r\nimport {IndexedCollection} from \"../IndexedObjectCollection\";\r\nimport {Permissions} from \"../Permissions\";\r\nimport {PromiseRegistry} from \"./AsyncUtils\";\r\n\r\nconst getOvId = (\r\n location: ChatLocation,\r\n target?: PermissionOverwrites['target'],\r\n targetId?: PermissionOverwrites['targetId'],\r\n) => (location.spaceId ?? '') + (location.roomId ?? '') + (location.topicId ?? '') + (target ?? '') + (targetId ?? '');\r\n\r\nconst getOvIdByObject = (overwrites: PermissionOverwrites | PermissionOverwritesUpdated): string => getOvId(\r\n overwrites.location, overwrites.target, overwrites.targetId\r\n);\r\n\r\ninterface CheckPermissionsResult {\r\n /**\r\n * @deprecated Use `hasAll` instead.\r\n */\r\n ok: boolean;\r\n hasAll: boolean;\r\n hasAny: boolean;\r\n missing: string[];\r\n}\r\n\r\nexport class PermissionsManager extends EventTarget {\r\n private readonly overwrites = new IndexedCollection<string, PermissionOverwrites>();\r\n private readonly overwritesPromises = new PromiseRegistry();\r\n\r\n public constructor(private tracker: ChatStateTracker) {\r\n super();\r\n this.tracker.client.on('PermissionOverwrites', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('PermissionOverwritesUpdated', ev => this.handlePermissionOverwrites(ev));\r\n this.tracker.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('SpaceLeft', ev => this.handleSpaceDeleted(ev));\r\n this.tracker.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('RoomLeft', ev => this.handleRoomDeleted(ev));\r\n this.tracker.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\r\n this.tracker.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\r\n this.tracker.client.on('SpaceMemberUpdated', ev => this.handleSpaceMemberUpdated(ev));\r\n this.tracker.client.on('RoomMemberUpdated', ev => this.handleRoomMemberUpdated(ev));\r\n }\r\n\r\n public async getOverwrites(\r\n location: ChatLocation,\r\n target: PermissionOverwrites['target'],\r\n targetId: PermissionOverwrites['targetId'],\r\n ): Promise<PermissionOverwrites | undefined> {\r\n this.validateLocation(location);\r\n\r\n const id = getOvId(location, target, targetId);\r\n\r\n if (this.overwritesPromises.notExist(id)) {\r\n this.overwritesPromises.registerByFunction(async () => {\r\n const result = await this.tracker.client.send(\r\n 'GetPermissionOverwrites',\r\n {location, target, targetId},\r\n );\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n this.handlePermissionOverwrites(result.data);\r\n }, id);\r\n }\r\n\r\n await this.overwritesPromises.get(id);\r\n return this.overwrites.get(id);\r\n }\r\n\r\n public on(eventName: 'change', handler: EventHandler<any>): this {\r\n return super.on(eventName, handler);\r\n }\r\n\r\n public async check(\r\n permissionNames: (keyof typeof Permissions.list)[],\r\n location: ChatLocation,\r\n ): Promise<CheckPermissionsResult> {\r\n if (! permissionNames.length) {\r\n throw new Error('Permission names array cannot be empty');\r\n }\r\n\r\n const ownedPermissions = await this.calculatePermissions(location);\r\n const missing: string[] = [];\r\n\r\n permissionNames.forEach(name => {\r\n if (~ ownedPermissions & Permissions.getByName(name).value) {\r\n missing.push(name as string);\r\n }\r\n });\r\n\r\n return {\r\n ok: missing.length === 0,\r\n hasAll: missing.length === 0,\r\n hasAny: missing.length < permissionNames.length,\r\n missing,\r\n };\r\n }\r\n\r\n public async calculatePermissions(location: ChatLocation): Promise<number> {\r\n this.validateLocation(location);\r\n\r\n const userId = (await this.tracker.getMe()).id;\r\n const [spaceMember, roomMember] = await this.fetchMembersOrFail(location);\r\n const userRoles: string[] = [...(spaceMember?.roles ?? []), ...(roomMember?.roles ?? [])];\r\n const promises: Promise<PermissionOverwritesValue>[] = [\r\n // Global user overwrites\r\n this.getOverwrites({}, 'User', userId).then(v => v.overwrites),\r\n ];\r\n\r\n if (location.spaceId && (await this.tracker.spaces.get())?.has(location.spaceId)) {\r\n const filterLocation: ChatLocation = {spaceId: location.spaceId};\r\n promises.push(this.collectRoleOverwrites(filterLocation, userRoles));\r\n promises.push(this.getOverwrites(filterLocation, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (location.roomId && (await this.tracker.rooms.get())?.has(location.roomId)) {\r\n const filterLocation: ChatLocation = {spaceId: location.spaceId, roomId: location.roomId};\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(filterLocation, userRoles));\r\n }\r\n promises.push(this.getOverwrites(filterLocation, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n if (location.topicId && (await this.tracker.rooms.getTopics(location.roomId))?.has(location.topicId)) {\r\n if (userRoles.length) {\r\n promises.push(this.collectRoleOverwrites(location, userRoles));\r\n }\r\n promises.push(this.getOverwrites(location, 'User', userId).then(v => v.overwrites));\r\n }\r\n\r\n return this.resolveOverwritesHierarchy(await Promise.all(promises));\r\n }\r\n\r\n private handlePermissionOverwrites(ev: PermissionOverwritesUpdated | PermissionOverwrites): void {\r\n this.overwrites.set([getOvIdByObject(ev), ev]);\r\n this.emit('change');\r\n }\r\n\r\n private handleSpaceDeleted(ev: SpaceDeleted | SpaceLeft): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: ev.id}));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private async handleRoomDeleted(ev: RoomDeleted | RoomLeft): Promise<void> {\r\n const room = (await this.tracker.rooms.get()).get(ev.id);\r\n if (room) {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: room.spaceId, roomId: room.id}));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n }\r\n\r\n private handleTopicDeleted(ev: TopicDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId(ev.location));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleRoleDeleted(ev: RoleDeleted): void {\r\n const ids = this.deleteOverwritesByIdPrefix(getOvId({spaceId: ev.spaceId}, 'Role', ev.id));\r\n this.overwritesPromises.forget(...ids);\r\n }\r\n\r\n private handleSpaceMemberUpdated(ev: SpaceMemberUpdated): void {\r\n if (ev.userId === this.tracker.me?.id) {\r\n // User roles in space could potentially have changed\r\n this.emit('change');\r\n }\r\n }\r\n\r\n private handleRoomMemberUpdated(ev: RoomMemberUpdated): void {\r\n if (ev.userId === this.tracker.me?.id) {\r\n // User roles in room could potentially have changed\r\n this.emit('change');\r\n }\r\n }\r\n\r\n /**\r\n * @return Matched and deleted ids\r\n */\r\n private deleteOverwritesByIdPrefix(prefix: string): string[] {\r\n const ids: string[] = [];\r\n this.overwrites.items.forEach((overwrites) => {\r\n const id = getOvIdByObject(overwrites);\r\n if (id.startsWith(prefix)) {\r\n ids.push(id);\r\n this.overwrites.delete(id);\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n private async collectRoleOverwrites(\r\n location: ChatLocation,\r\n userRoles: string[],\r\n ): Promise<PermissionOverwritesValue> {\r\n const roleOverwrites = await Promise.all(userRoles.map(\r\n roleId => this.getOverwrites(location, 'Role', roleId)\r\n ));\r\n\r\n return this.resolveOverwritesFromRolesByOrder(location.spaceId, roleOverwrites);\r\n }\r\n\r\n private async resolveOverwritesFromRolesByOrder(\r\n spaceId: string,\r\n overwrites: PermissionOverwrites[],\r\n ): Promise<PermissionOverwritesValue> {\r\n let allows = 0, denies = 0;\r\n const roles = await this.tracker.spaces.getRoles(spaceId);\r\n const sortedOverwrites = overwrites.sort(\r\n (a, b) =>\r\n roles.get(a.targetId).priority - roles.get(b.targetId).priority\r\n );\r\n\r\n // Max length of bit word\r\n const permissionsLength = overwrites.reduce(\r\n (previousValue: number, currentValue: PermissionOverwrites) =>\r\n Math.max(\r\n previousValue,\r\n currentValue.overwrites.allow?.toString(2).length ?? 0,\r\n currentValue.overwrites.deny?.toString(2).length ?? 0,\r\n ),\r\n 0,\r\n );\r\n\r\n sortedOverwrites.forEach(overwriteEvent => {\r\n const overwrites = overwriteEvent.overwrites;\r\n const revDecDenies = overwrites.deny?.toString(2).split('').reverse().join('') ?? '';\r\n const revDecAllows = overwrites.allow?.toString(2).split('').reverse().join('') ?? '';\r\n\r\n for (let i = 0; i < permissionsLength; i++) {\r\n const deny = parseInt(revDecDenies[i] ?? '0');\r\n const allow = parseInt(revDecAllows[i] ?? '0');\r\n\r\n if (deny) {\r\n denies |= 1 << i;\r\n }\r\n\r\n if (allow) {\r\n allows |= 1 << i;\r\n }\r\n }\r\n });\r\n\r\n return {allow: allows, deny: denies};\r\n }\r\n\r\n private resolveOverwritesHierarchy(permissionOverwritesValues: PermissionOverwritesValue[]): number {\r\n let result = 0;\r\n\r\n for (const value of permissionOverwritesValues) {\r\n if (value.allow & Permissions.getByName('Root').value) {\r\n return this.getRootAccessValue();\r\n }\r\n\r\n result = (result & ~value.deny) | value.allow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getRootAccessValue(): number {\r\n let result = 0;\r\n\r\n for (const name of Permissions.getNames()) {\r\n result |= Permissions.getByName(name).value;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private async fetchMembersOrFail(location: ChatLocation): Promise<[SpaceMember | null, RoomMember | null]> {\r\n const results = await Promise.all([\r\n location.spaceId ? this.tracker.spaces.getMe(location.spaceId) : null,\r\n location.roomId ? this.tracker.rooms.getMe(location.roomId) : null,\r\n ]);\r\n\r\n const spaceFail = location.spaceId && ! results[0];\r\n const roomFail = location.roomId && ! results[1];\r\n\r\n if (spaceFail || roomFail) {\r\n const layer = spaceFail ? `space (${location.spaceId})` : `room (${location.roomId})`;\r\n throw new Error(`Attempting to calculate permissions for a ${layer} that the user does not belong to`);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n private validateLocation(location: ChatLocation): void {\r\n if (location.topicId && ! location.roomId) {\r\n throw new Error('Corrupted arguments hierarchy');\r\n }\r\n }\r\n}","import {WebSocketChatClient} from \"../WebSocketChatClient\";\nimport {Session, User} from \"../types/src\";\nimport {RoomsManager} from \"./RoomsManager\";\nimport {SpacesManager} from \"./SpacesManager\";\nimport {PermissionsManager} from \"./PermissionsManager\";\nimport {DeferredTask} from \"./AsyncUtils\";\n\nexport class ChatStateTracker {\n /**\n * State of your permissions.\n */\n public readonly permissions = new PermissionsManager(this);\n /**\n * State of the rooms you are in.\n */\n public readonly rooms: RoomsManager = new RoomsManager(this);\n /**\n * State of the spaces you are in.\n */\n public readonly spaces = new SpacesManager(this);\n\n private _me: User = null;\n private readonly deferredSession = new DeferredTask();\n\n public constructor(public readonly client: WebSocketChatClient) {\n this.client.on('Session', ev => this.handleSession(ev));\n }\n\n public get me(): User | null {\n return this._me;\n }\n\n public async getMe(): Promise<User> {\n await this.deferredSession.promise;\n return this._me;\n }\n\n private handleSession(ev: Session): void {\n this._me = ev.user;\n this.deferredSession.resolve();\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ChatStateTracker} from \"./state-tracker/ChatStateTracker\";\nimport {Envelope} from \"./types/src\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketChatClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebSocketChatClientEvent;\n public readonly state?: ChatStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new ChatStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n\n // Login successfully\n if (!this.authenticated) {\n const isAuthenticated = envelope.type !== 'Error';\n this.authenticated = isAuthenticated;\n if (isAuthenticated) {\n this.authenticatedResolvers[0]();\n this.emit(this.Event.connect);\n this.sendFromQueue();\n } else {\n this.authenticatedResolvers[1](envelope.data);\n }\n }\n }\n\n private onClose(event: CloseEvent): void {\n clearTimeout(this.connectingTimeoutId);\n const reconnect = event.code !== 1000; // Connection was closed because of error\n if (reconnect) {\n this.connect();\n }\n this.emit(this.Event.disconnect, reconnect);\n }\n\n private sendFromQueue(): void {\n // Send awaiting data to server\n let lastDelay = 0;\n for (const dataIndex in this.sendQueue) {\n const data = this.sendQueue[dataIndex];\n setTimeout(() => this.send(...data), lastDelay);\n lastDelay += this.options.awaitQueueSendDelayMs ?? 500;\n }\n this.sendQueue = [];\n clearTimeout(this.connectingTimeoutId);\n }\n\n private triggerConnectionTimeout(): void {\n this.disconnect();\n this.emit(this.Event.error, new Error('Connection timeout'));\n }\n}","import {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"./types/src\";\n\nexport interface WebApiChatClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiChatClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebApiChatClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiChatClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n const envelope = this.createEnvelope(commandType, commandData);\n this.sendStack.push({data: envelope, attempts: 0, lastTimeoutId: null});\n this.makeApiCall(this.sendStack.length - 1);\n return this.createPromiseFromCommandEnvelope(envelope);\n }\n\n public destroy(): void {\n // Cancel all awaiting requests\n this.sendStack.forEach(item => {\n if (item.lastTimeoutId) {\n clearTimeout(item.lastTimeoutId);\n }\n this.awaitingResponse.delete(item.data.ref);\n });\n this.sendStack = [];\n this.emit(this.Event.destroy, false);\n }\n\n protected async onMessage(reqId: number, response: Response): Promise<void> {\n this.sendStack.splice(reqId, 1);\n const envelope: Envelope = await response.json();\n this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope.data);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}","export interface RestClientOptions {\r\n url?: string;\r\n token: string;\r\n}\r\n\r\nexport interface RestClientResponse<T> {\r\n ok: boolean;\r\n status: number;\r\n data: T;\r\n}\r\n\r\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n\r\nexport abstract class AbstractRestClient {\r\n protected abstract defaultUrl: string;\r\n\r\n public constructor(\r\n private readonly options: RestClientOptions,\r\n ) {}\r\n\r\n protected async send<ResponseT = any>(\r\n method: HttpMethod,\r\n uri: string,\r\n data: any = undefined\r\n ): Promise<RestClientResponse<ResponseT>> {\r\n const headers: any = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n if (this.options.token) {\r\n headers.Authorization = `Bearer ${this.options.token}`;\r\n }\r\n\r\n let url = this.getUrl(uri);\r\n let body = undefined;\r\n\r\n if (data) {\r\n if (['GET', 'DELETE'].includes(method)) {\r\n url += new URLSearchParams(data).toString()\r\n } else {\r\n body = JSON.stringify(data);\r\n }\r\n }\r\n\r\n const result = await fetch(url, {method, body, headers});\r\n\r\n return {\r\n ok: result.ok,\r\n status: result.status,\r\n data: result.headers.get('content-type')?.includes('json') ? await result.json() : await result.text(),\r\n };\r\n }\r\n\r\n protected getUrl(uri: string): string {\r\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\r\n }\r\n\r\n private removeStartingSlash(text: string): string {\r\n return text.replace(/^\\/+/, '');\r\n }\r\n\r\n private removeEndingSlash(text: string): string {\r\n return text.replace(/\\/+$/, '');\r\n }\r\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice/api';\n\n public static async createToken(\n login: string,\n password: string,\n clientName: string = 'pserv-js-client'\n ): Promise<TokenInterface> {\n const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {\n login, password, client_name: clientName\n });\n if (response.ok) {\n return response.data;\n }\n throw new Error(`Cannot create user token: ${response.data.errors[0]}`);\n }\n\n public async deleteToken(token: string): Promise<void> {\n const response = await this.send('DELETE', `auth/tokens/${token}`);\n if (!response.ok) {\n throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);\n }\n }\n\n public async getMe(): Promise<MyAccountInterface> {\n const response = await this.send('GET', 'auth/me');\n if (response.ok) {\n response.data.id = response.data.id.toString();\n return response.data;\n }\n throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);\n }\n}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {WebApiChatClient} from \"./WebApiChatClient\";\nimport {\n IndexedCollection,\n IndexedObjectCollection,\n ObservableIndexedCollection,\n ObservableIndexedObjectCollection\n} from \"./IndexedObjectCollection\";\nimport { AuthClient } from \"./AuthClient\";\nimport { Permissions, PermissionDefinition, Layer } from \"./Permissions\";\nimport * as ChatTypes from './types/src';\n\nexport {\n IndexedCollection, ObservableIndexedCollection,\n IndexedObjectCollection, ObservableIndexedObjectCollection,\n Permissions, PermissionDefinition, Layer,\n WebSocketChatClient, WebApiChatClient,\n AuthClient,\n};\n\nexport type {ChatTypes};"],"names":["EventTarget","Map","eventName","handler","addHandler","events","onceEvents","index","get","indexOf","splice","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractChatClient","type","data","ref","sentCounter","toString","envelope","Promise","args","awaitingResponse","has","isError","error","IndexedCollection","items","_items","size","item","id","ids","clear","field","valueToFind","limit","result","entries","next","value","done","length","Array","from","entry","IndexedObjectCollection","values","getId","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","off","ObservableIndexedObjectCollection","DeferredTask","promise","resolve","PromiseRegistry","key","promises","fn","register","getCombinedId","location","roomId","topicId","MessagesManager","tracker","client","ev","handleSession","handleRoomJoin","handleNewTopic","handleFollowedTopicUpdated","handleTopicFollowed","handleTopicUnfollowed","handleNewMessage","handleRoomDeleted","handleRoomLeft","handleTopicDeleted","list","spaceId","spaces","Error","rooms","roomIds","findBy","room","send","setFollowedTopicsArray","followedTopics","undefined","followedTopicsPromises","notExist","registerByFunction","getRoomFollowedTopics","collection","followedTopic","missed","missedMore","missedMoreThan","topicIds","newTopics","newTopic","newTopicCombinedId","messageRef","refTopicCombinedId","refTopicMessages","refMessage","messageId","topicRef","message","updateLocallyFollowedTopicOnNewMessage","clearRoomFollowedTopicsStructures","defaultTopic","createHistoryForNewTopic","topic","state","roomFollowedTopics","isMe","author","me","update","lastAckMessageId","roomToTopics","forget","RoomsManager","messages","handleRoomJoined","handleRoomUpdated","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleRoomMemberUpdated","handleSpaceMemberLeft","handleSpaceMemberUpdated","handleSpaceDeleted","handleUserUpdated","membersPromises","members","getMe","userId","getMembers","find","member","user","spaceMember","deferredSession","topics","_deleteByTopicIds","deleteRoom","roomMembers","roomMember","newMember","deleteRoomsBySpaceId","addJoinedRoomTopics","addJoinedRooms","name","description","messageCount","lastMessage","reorderRolesOnPriorityUpdate","allRoles","oldRole","updatedRole","increased","priority","decreased","changedRoles","role","SpacesManager","handleNewRoom","handleSpaceUpdated","handleSpaceJoined","handleSpaceMemberJoined","handleSpaceMembers","handleSpaceRooms","handleNewRole","handleRoleDeleted","handleRoleUpdated","roles","roomsPromises","summary","roomIdToSpaceId","space","addJoinedSpaces","summaries","newRole","rolesToUpdate","Layer","PermissionDefinition","Permissions","Object","permissionName","layer","def","getByName","maxLayer","Root","Room","CreateSpaces","Global","ManageSpace","Space","ManageSpaceRoles","ManageRoom","CreateTopics","ManageTopic","Topic","ManageSpaceMembers","ManageRoomMembers","CreateMessages","ManagePermissions","CreateSpaceRooms","ManageSpaceRooms","getOvId","target","targetId","getOvIdByObject","overwrites","PermissionsManager","handlePermissionOverwrites","validateLocation","overwritesPromises","permissionNames","calculatePermissions","ownedPermissions","missing","ok","hasAll","hasAny","fetchMembersOrFail","userRoles","getOverwrites","then","v","filterLocation","collectRoleOverwrites","getTopics","all","resolveOverwritesHierarchy","deleteOverwritesByIdPrefix","prefix","startsWith","roleId","roleOverwrites","resolveOverwritesFromRolesByOrder","allows","denies","getRoles","sortedOverwrites","sort","a","b","permissionsLength","reduce","previousValue","currentValue","Math","max","allow","deny","overwriteEvent","revDecDenies","split","reverse","join","revDecAllows","i","parseInt","permissionOverwritesValues","getRootAccessValue","getNames","results","spaceFail","roomFail","ChatStateTracker","_me","WebSocketChatClientEvent","WebSocketChatClient","options","token","temporaryNick","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","handleIncomingEnvelope","Event","isAuthenticated","connect","sendFromQueue","clearTimeout","reconnect","code","disconnect","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClientEvent","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","onError","AbstractRestClient","uri","getUrl","URLSearchParams","status","text","removeEndingSlash","defaultUrl","removeStartingSlash","replace","AuthClient","errors","login","password","clientName","client_name"],"sourceRoot":""}
|
|
@@ -19,7 +19,7 @@ export declare class MessagesManager {
|
|
|
19
19
|
*/
|
|
20
20
|
cacheSpaceFollowedTopic(spaceId: string): Promise<void>;
|
|
21
21
|
/**
|
|
22
|
-
* Get
|
|
22
|
+
* Get followed topics for the given room.
|
|
23
23
|
* @return Undefined if you are not in the room, collection otherwise.
|
|
24
24
|
*/
|
|
25
25
|
getRoomFollowedTopics(roomId: string): Promise<ObservableIndexedObjectCollection<FollowedTopic> | undefined>;
|
|
@@ -53,4 +53,5 @@ export declare class MessagesManager {
|
|
|
53
53
|
private handleSession;
|
|
54
54
|
private updateLocallyFollowedTopicOnNewMessage;
|
|
55
55
|
private setFollowedTopicsArray;
|
|
56
|
+
private clearRoomFollowedTopicsStructures;
|
|
56
57
|
}
|
package/package.json
CHANGED
|
@@ -56,6 +56,13 @@ export class MessagesManager {
|
|
|
56
56
|
throw new Error(`You are not in space ${spaceId}`);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
const roomIds = (await this.tracker.rooms.get()).findBy('spaceId', spaceId).items.map(room => room.id);
|
|
60
|
+
|
|
61
|
+
if (! roomIds.length) {
|
|
62
|
+
// We don't need to ping server for followed topics for this space, if user has no joined rooms
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
59
66
|
// If we don't have ack reports for all rooms in space, fetch them
|
|
60
67
|
const result = await this.tracker.client.send('GetFollowedTopics', {location: {spaceId}});
|
|
61
68
|
|
|
@@ -63,11 +70,11 @@ export class MessagesManager {
|
|
|
63
70
|
throw result.error;
|
|
64
71
|
}
|
|
65
72
|
|
|
66
|
-
this.setFollowedTopicsArray(result.data.followedTopics);
|
|
73
|
+
this.setFollowedTopicsArray(roomIds, result.data.followedTopics);
|
|
67
74
|
}
|
|
68
75
|
|
|
69
76
|
/**
|
|
70
|
-
* Get
|
|
77
|
+
* Get followed topics for the given room.
|
|
71
78
|
* @return Undefined if you are not in the room, collection otherwise.
|
|
72
79
|
*/
|
|
73
80
|
public async getRoomFollowedTopics(roomId: string): Promise<ObservableIndexedObjectCollection<FollowedTopic> | undefined> {
|
|
@@ -84,7 +91,7 @@ export class MessagesManager {
|
|
|
84
91
|
throw result.error;
|
|
85
92
|
}
|
|
86
93
|
|
|
87
|
-
this.setFollowedTopicsArray(result.data.followedTopics);
|
|
94
|
+
this.setFollowedTopicsArray([roomId], result.data.followedTopics);
|
|
88
95
|
}, roomId);
|
|
89
96
|
}
|
|
90
97
|
|
|
@@ -173,7 +180,7 @@ export class MessagesManager {
|
|
|
173
180
|
}
|
|
174
181
|
|
|
175
182
|
private handleTopicFollowed(ev: TopicFollowed): void {
|
|
176
|
-
this.setFollowedTopicsArray([ev.followedTopic]);
|
|
183
|
+
this.setFollowedTopicsArray([ev.followedTopic.location.roomId], [ev.followedTopic]);
|
|
177
184
|
}
|
|
178
185
|
|
|
179
186
|
private handleTopicUnfollowed(ev: TopicUnfollowed): void {
|
|
@@ -181,17 +188,18 @@ export class MessagesManager {
|
|
|
181
188
|
}
|
|
182
189
|
|
|
183
190
|
private handleRoomDeleted(ev: RoomDeleted): void {
|
|
184
|
-
this.
|
|
191
|
+
this.clearRoomFollowedTopicsStructures(ev.id);
|
|
185
192
|
}
|
|
186
193
|
|
|
187
194
|
private handleRoomJoin(ev: RoomJoined): void {
|
|
188
195
|
if (ev.room.defaultTopic) {
|
|
189
196
|
this.createHistoryForNewTopic(ev.room.id, ev.room.defaultTopic)
|
|
190
197
|
}
|
|
198
|
+
this.clearRoomFollowedTopicsStructures(ev.room.id);
|
|
191
199
|
}
|
|
192
200
|
|
|
193
201
|
private handleRoomLeft(ev: RoomLeft): void {
|
|
194
|
-
this.
|
|
202
|
+
this.clearRoomFollowedTopicsStructures(ev.id);
|
|
195
203
|
}
|
|
196
204
|
|
|
197
205
|
private async handleNewTopic(ev: NewTopic): Promise<void> {
|
|
@@ -225,7 +233,7 @@ export class MessagesManager {
|
|
|
225
233
|
|
|
226
234
|
private updateLocallyFollowedTopicOnNewMessage(ev: NewMessage): void {
|
|
227
235
|
const roomFollowedTopics = this.followedTopics.get(ev.location.roomId);
|
|
228
|
-
const followedTopic = roomFollowedTopics
|
|
236
|
+
const followedTopic = roomFollowedTopics?.get(ev.location.topicId);
|
|
229
237
|
|
|
230
238
|
if (! roomFollowedTopics || ! followedTopic) {
|
|
231
239
|
// Skip if we don't follow this room or targeted topic
|
|
@@ -250,23 +258,30 @@ export class MessagesManager {
|
|
|
250
258
|
roomFollowedTopics.set({...followedTopic, ...update});
|
|
251
259
|
}
|
|
252
260
|
|
|
253
|
-
private setFollowedTopicsArray(followedTopics: FollowedTopic[]): void {
|
|
261
|
+
private setFollowedTopicsArray(roomIds: string[], followedTopics: FollowedTopic[]): void {
|
|
254
262
|
const roomToTopics: {[roomId: string]: FollowedTopic[]} = {};
|
|
255
263
|
|
|
256
|
-
// Reassign
|
|
264
|
+
// Reassign followed topics to limit collection change event emit
|
|
257
265
|
followedTopics.forEach(followedTopic => {
|
|
258
266
|
roomToTopics[followedTopic.location.roomId] ??= [];
|
|
259
267
|
roomToTopics[followedTopic.location.roomId].push(followedTopic);
|
|
260
268
|
});
|
|
261
269
|
|
|
262
|
-
|
|
270
|
+
roomIds.forEach(roomId => {
|
|
263
271
|
if (! this.followedTopics.has(roomId)) {
|
|
264
|
-
this.followedTopics.set([
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
]);
|
|
272
|
+
this.followedTopics.set([roomId, new ObservableIndexedObjectCollection<FollowedTopic>(
|
|
273
|
+
followedTopic => followedTopic.location.topicId
|
|
274
|
+
)]);
|
|
268
275
|
}
|
|
269
|
-
|
|
270
|
-
|
|
276
|
+
|
|
277
|
+
if (roomToTopics[roomId]) {
|
|
278
|
+
this.followedTopics.get(roomId).set(...roomToTopics[roomId]);
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
private clearRoomFollowedTopicsStructures(roomId: string): void {
|
|
284
|
+
this.followedTopics.delete(roomId);
|
|
285
|
+
this.followedTopicsPromises.forget(roomId);
|
|
271
286
|
}
|
|
272
287
|
}
|