@vserifsaglam/chat-react-client 1.0.2 → 1.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","../src/api/chatApi.ts","../src/types.ts","../src/utils/Logger.ts","../src/connection/ConnectionManager.ts","../src/context/ConnectionContext.tsx","../src/context/ChatContext.tsx","../src/hooks/useRealtime.ts","../src/hooks/useConversations.ts","../src/hooks/useConnection.ts","../src/hooks/useQueue.ts","../src/hooks/useClientProfile.ts","../src/hooks/useMessages.ts","../src/hooks/useFiles.ts","../src/hooks/useConversationDetails.ts","../src/hooks/useConversationManagements.ts","../src/hooks/useBans.ts","../src/hooks/useMessageManagements.ts","../src/hooks/useCustomEvents.ts","../src/hooks/useLogging.ts","../src/index.tsx"],"sourcesContent":["// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport {\n AuthConfig,\n Conversation,\n ConversationSearchResult,\n MessagesResponse,\n SendMessageRequest,\n SendMessageResponse,\n MarkConversationReadResponse,\n UpdateMessageRequest,\n UpdateMessageResponse,\n DeleteMessageResponse,\n FileUploadResponse,\n ApiResponse,\n BanClientRequest,\n UnbanClientRequest,\n AdminBanClientRequest,\n AdminUnbanClientRequest,\n BanStatusResponse,\n ClientProfileResponse,\n ClientPreferencesResponse,\n UpdatePreferencesRequest,\n UpdatePreferencesResponse\n} from '../types'\n\n/**\n * Chat API client for making requests to the chat backend\n */\nexport class ChatApi {\n private client: AxiosInstance\n\n /**\n * Create a new ChatApi instance\n * @param config Authentication configuration\n */\n constructor(config: AuthConfig) {\n this.client = axios.create({\n baseURL: config.baseUrl,\n headers: {\n Authorization: `Bearer ${config.token}`,\n 'Content-Type': 'application/json',\n 'x-requesting-client-id': config.client_id\n }\n })\n }\n\n /**\n * Check if the API is running\n * @returns A promise that resolves to \"OK\" if the API is running\n */\n async healthCheck(): Promise<string> {\n const response = await this.client.get('/api/health')\n return response.data\n }\n\n // Conversation endpoints\n\n /**\n * Get a list of conversations\n * @param archived Whether to include archived conversations\n * @param clientId Filter conversations by client ID\n * @returns A promise that resolves to an array of conversations\n */\n async listConversations(\n archived?: boolean,\n clientIds?: string\n ): Promise<Conversation[]> {\n const params: Record<string, string> = {}\n if (archived !== undefined) params.archived = String(archived)\n if (clientIds) params.client_ids = clientIds\n\n const response = await this.client.get('/api/chat/conversations', {\n params\n })\n return response.data\n }\n\n /**\n * Delete a conversation\n * @param conversationUid The UID of the conversation to delete\n * @returns A promise that resolves to an API response\n */\n async deleteConversation(conversationUid: string): Promise<ApiResponse> {\n const response = await this.client.delete(\n `/api/chat/conversations/${conversationUid}/delete`\n )\n return response.data\n }\n\n /**\n * Archive a conversation\n * @param conversationUid The UID of the conversation to archive\n * @returns A promise that resolves to an API response\n */\n async archiveConversation(conversationUid: string): Promise<ApiResponse> {\n const response = await this.client.post(\n `/api/chat/conversations/${conversationUid}/archive`\n )\n return response.data\n }\n\n /**\n * Unarchive a conversation\n * @param conversationUid The UID of the conversation to unarchive\n * @returns A promise that resolves to an API response\n */\n async unarchiveConversation(conversationUid: string): Promise<ApiResponse> {\n const response = await this.client.post(\n `/api/chat/conversations/${conversationUid}/unarchive`\n )\n return response.data\n }\n\n /**\n * Get details about a conversation\n * @param conversationUid The UID of the conversation\n * @returns A promise that resolves to conversation details\n */\n async getConversationDetails(conversationUid: string): Promise<Conversation> {\n const response = await this.client.get(\n `/api/chat/conversations/${conversationUid}/details`\n )\n return response.data\n }\n\n /**\n * Get conversation details with a specific receiver\n * @param receiverId The ID of the receiver\n * @returns A promise that resolves to conversation details\n */\n async getConversationWithReceiver(receiverId: string): Promise<Conversation> {\n const response = await this.client.get(\n `/api/chat/conversations/with/${receiverId}`\n )\n return response.data\n }\n\n /**\n * Search for messages in a conversation\n * @param conversationUid The UID of the conversation\n * @param term The search term\n * @returns A promise that resolves to search results\n */\n async searchConversation(\n conversationUid: string,\n term: string\n ): Promise<ConversationSearchResult> {\n const response = await this.client.get(\n `/api/chat/conversations/${conversationUid}/search`,\n {\n params: { term }\n }\n )\n return response.data\n }\n\n // Message endpoints\n\n /**\n * Get messages for a conversation\n * @param conversationUid The UID of the conversation\n * @param page The page number\n * @param pageSize The number of messages per page\n * @returns A promise that resolves to a messages response\n */\n async getMessages(\n conversationUid: string,\n page = 1,\n pageSize = 20\n ): Promise<MessagesResponse> {\n const response = await this.client.get(\n `/api/messages/${conversationUid}/list`,\n {\n params: { page, page_size: pageSize }\n }\n )\n return response.data\n }\n\n /**\n * Mark a message as read\n * @param messageId The ID of the message\n * @returns A promise that resolves to an API response\n */\n async markMessageAsRead(messageId: number): Promise<ApiResponse> {\n const response = await this.client.post(`/api/messages/${messageId}/read`)\n return response.data\n }\n\n /**\n * Send a message\n * @param message The message to send\n * @returns A promise that resolves to a send message response\n */\n async sendMessage(message: SendMessageRequest): Promise<SendMessageResponse> {\n const response = await this.client.post(\n '/api/messages/send-message',\n message\n )\n return response.data\n }\n\n /**\n * Mark all messages in a conversation as read\n * @param conversationUid The UID of the conversation\n * @returns A promise that resolves to a mark conversation read response\n */\n async markConversationAsRead(\n conversationUid: string\n ): Promise<MarkConversationReadResponse> {\n const response = await this.client.post(\n `/api/messages/conversation/${conversationUid}/read`\n )\n return response.data\n }\n\n /**\n * Update a message\n * @param messageId The ID of the message\n * @param update The update to apply\n * @returns A promise that resolves to an update message response\n */\n async updateMessage(\n messageId: number,\n update: UpdateMessageRequest\n ): Promise<UpdateMessageResponse> {\n const response = await this.client.put(`/api/messages/${messageId}`, update)\n return response.data\n }\n\n /**\n * Delete a message\n * @param messageId The ID of the message\n * @returns A promise that resolves to a delete message response\n */\n async deleteMessage(messageId: number): Promise<DeleteMessageResponse> {\n const response = await this.client.delete(`/api/messages/${messageId}`)\n return response.data\n }\n\n // File endpoints\n\n /**\n * Upload a file\n * @param file The file to upload\n * @returns A promise that resolves to a file upload response\n */\n async uploadFile(file: File): Promise<FileUploadResponse> {\n const formData = new FormData()\n formData.append('file', file)\n\n const config: AxiosRequestConfig = {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n\n const response = await this.client.post(\n '/api/files/upload',\n formData,\n config\n )\n return response.data\n }\n\n // Ban endpoints\n\n /**\n * Ban a client from communicating with the requesting client\n * @param request The ban client request\n * @returns A promise that resolves to an API response\n */\n async banClient(request: BanClientRequest): Promise<ApiResponse> {\n const response = await this.client.post('/api/bans/client', request)\n return response.data\n }\n\n /**\n * Unban a client that was previously banned by the requesting client\n * @param request The unban client request\n * @returns A promise that resolves to an API response\n */\n async unbanClient(request: UnbanClientRequest): Promise<ApiResponse> {\n const response = await this.client.delete('/api/bans/client', {\n data: request\n })\n return response.data\n }\n\n /**\n * Ban a client as an admin\n * @param request The admin ban client request\n * @returns A promise that resolves to an API response\n */\n async adminBanClient(request: AdminBanClientRequest): Promise<ApiResponse> {\n const response = await this.client.post('/api/bans/admin', request)\n return response.data\n }\n\n /**\n * Unban a client that was previously banned by an admin\n * @param request The admin unban client request\n * @returns A promise that resolves to an API response\n */\n async adminUnbanClient(\n request: AdminUnbanClientRequest\n ): Promise<ApiResponse> {\n const response = await this.client.delete('/api/bans/admin', {\n data: request\n })\n return response.data\n }\n\n /**\n * Check if a client is banned by the requesting client or by an admin\n * @param clientId The client ID to check the ban status for\n * @returns A promise that resolves to a ban status response\n */\n async checkBanStatus(clientId: string): Promise<BanStatusResponse> {\n const response = await this.client.get(`/api/bans/status/${clientId}`)\n return response.data\n }\n\n /**\n * Get the profile information of the authenticated client\n * @returns A promise that resolves to a client profile response\n */\n async getClientProfile(): Promise<ClientProfileResponse> {\n const response = await this.client.get('/api/clients/profile')\n return response.data\n }\n\n async getClientPreferences(): Promise<ClientPreferencesResponse> {\n const response = await this.client.get('/api/clients/preferences')\n return response.data\n }\n\n async updateClientPreferences(\n request: UpdatePreferencesRequest\n ): Promise<UpdatePreferencesResponse> {\n const response = await this.client.put('/api/clients/preferences', request)\n return response.data\n }\n\n\n}\n","/**\n * Type definitions for the Chat API\n */\n\nimport { LoggerConfig } from './utils/Logger'\n\n// Connection Types\nexport enum ConnectionType {\n WebSocket = 'websocket',\n LongPolling = 'longpolling'\n}\n\nexport enum ConnectionStatus {\n Connected = 'connected',\n Connecting = 'connecting',\n Disconnected = 'disconnected',\n Error = 'error'\n}\n\nexport interface ConnectionConfig {\n type: ConnectionType\n autoReconnect: boolean\n reconnectAttempts: number\n reconnectDelay: number\n logging?: Partial<LoggerConfig>\n onlyLongpolling?: boolean\n // When enabled, after N websocket failures we degrade to long-polling for TTL\n degradeWsOnFailure?: boolean\n // Number of websocket upgrade/connect failures before degrading\n wsFailureThreshold?: number\n // Time to remain in degraded (polling-only) mode in ms\n wsDegradeTTLms?: number\n // If true, always try websocket regardless of degradation\n forceWebSocket?: boolean\n}\n\nexport interface ConnectionOptions {\n connectionType?: ConnectionType\n autoReconnect?: boolean\n reconnectAttempts?: number\n reconnectDelay?: number\n logging?: Partial<LoggerConfig>\n onlyLongpolling?: boolean\n degradeWsOnFailure?: boolean\n wsFailureThreshold?: number\n wsDegradeTTLms?: number\n forceWebSocket?: boolean\n}\n\n// Realtime Event Types\nexport enum EventType {\n MessageSent = 'message_sent',\n MessageEdited = 'message_edited',\n MessageDeleted = 'message_deleted',\n MessageReceived = 'message_received',\n MessageRead = 'message_read',\n ConversationRead = 'conversation_read'\n}\n\nexport interface RealtimeEvent<T = any> {\n type: EventType\n data: T\n}\n\nexport interface MessageSentEvent {\n id: number\n content: string\n sender_client_id: string\n receiver_client_id: string\n sent_at: string\n is_read: boolean\n attachments?: Attachment[]\n conversation_uid?: string\n}\n\nexport interface MessageEditedEvent {\n msg_id: number\n new_content: string\n new_attachments?: Attachment[]\n conversation_uid?: string\n}\n\nexport interface MessageDeletedEvent {\n msg_id: number\n conversation_uid?: string\n}\n\nexport interface MessageReadEvent {\n message_id: number\n reader_client_id: string\n conversation_uid: string\n sender_client_id?: string\n}\n\nexport interface ConversationReadEvent {\n conversation_uid: string\n reader_client_id: string\n message_ids: number[]\n other_client_id?: string\n}\n\nexport interface PollResponse {\n events: RealtimeEvent[]\n}\n\n// Message Queue Types\nexport interface QueuedMessage {\n id: string\n message: SendMessageRequest\n attempts: number\n maxAttempts: number\n timestamp: number\n}\n\n// Authentication\nexport interface AuthConfig {\n token: string\n baseUrl: string\n socketBaseUrl: string\n client_id: string\n}\n\n// Conversation Types\nexport interface User {\n id: string\n client_id: string\n name: string\n avatar: string\n is_admin: boolean\n attributes: Record<string, any>\n file_storage_provider: string\n owner_client_id: string\n}\n\nexport interface Conversation {\n id: string\n conversation_uid: string\n status: string\n user: User\n isArchived: boolean\n isCallCenter:boolean;\n lastMessage: Message\n unreadCount: number\n}\n\nexport interface ConversationSearchResult {\n conversation_uid: string\n search_term: string\n matching_messages: Message[]\n count: number\n}\n\n// Message Types\nexport interface Attachment {\n id: number\n filename: string\n mime_type: string\n size_bytes: number\n url: string\n uploaded_at: string\n message_id?: number\n}\n\nexport interface SenderReceiverUser {\n id: string\n client_id: string\n name: string\n avatar: string\n}\n\nexport interface Message {\n id: number\n message: string\n sender: SenderReceiverUser\n receiver: SenderReceiverUser\n sender_client_id: string\n receiver_client_id: string\n edited: boolean;\n conversation_uid: string\n sent_at: string\n status: string\n is_read: boolean\n attachments?: Attachment[]\n}\n\nexport interface MessagesPagination {\n page: number\n page_size: number\n total_pages: number\n total_items: number\n}\n\nexport interface MessagesResponse {\n messages: Message[]\n pagination: MessagesPagination\n}\n\n// Request Types\nexport interface SendMessageRequest {\n receiver_client_id: string\n content?: string\n attachments?: number[]\n conversation_uid?: string\n}\n\nexport interface UpdateMessageRequest {\n content: string\n attachments?: number[]\n}\n\n// Response Types\nexport interface ApiResponse {\n message: string\n}\n\nexport interface ClientProfileResponse {\n id: string\n client_id: string\n name: string\n avatar: string\n is_admin: boolean\n attributes: Record<string, any>\n file_storage_provider: string | null\n owner_client_id: string | null\n private_key?: string\n}\n\nexport interface SendMessageResponse {\n message: Message\n}\n\nexport interface MarkConversationReadResponse extends ApiResponse {\n marked_messages: number[]\n count: number\n}\n\nexport interface UpdateMessageResponse {\n message: Message\n}\n\nexport interface DeleteMessageResponse extends ApiResponse {\n message_id: number\n}\n\n// File Upload\nexport interface FileUploadResponse extends ApiResponse {\n file_id: number\n filename: string\n storage_path: string\n mime_type: string\n size_bytes: number\n url: string\n uploaded_at: string\n}\n\n// Ban Types\nexport interface BanClientRequest {\n client_id: string\n}\n\nexport interface UnbanClientRequest {\n client_id: string\n}\n\nexport interface AdminBanClientRequest {\n client_id: string\n reason?: string\n duration_days?: number\n}\n\nexport interface AdminUnbanClientRequest {\n client_id: string\n}\n\nexport interface AdminBanInfo {\n reason?: string\n expires_at?: string\n is_permanent: boolean\n}\n\nexport interface BanStatusResponse {\n is_banned_by_you: boolean\n is_banned_by_admin: boolean\n admin_ban?: AdminBanInfo\n}\n\nexport interface ClientPreferences {\n enable_read: boolean\n}\n\nexport interface ClientPreferencesResponse {\n preferences: ClientPreferences\n client_id: number\n}\n\nexport interface UpdatePreferencesRequest {\n preferences: Partial<ClientPreferences>\n}\n\nexport interface UpdatePreferencesResponse {\n message: string\n preferences: ClientPreferences\n updated_at: string\n}\n","/**\n * Logger utility for detailed websocket connection logging\n */\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4\n}\n\nexport interface LoggerConfig {\n enabled: boolean\n level: LogLevel\n prefix?: string\n timestamp?: boolean\n includeData?: boolean\n prettyPrint?: boolean\n}\n\nexport class Logger {\n private config: LoggerConfig\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n enabled: false,\n level: LogLevel.INFO,\n prefix: '[ChatWS]',\n timestamp: true,\n includeData: true,\n prettyPrint: true,\n ...config\n }\n }\n\n private shouldLog(level: LogLevel): boolean {\n return this.config.enabled && level >= this.config.level\n }\n\n private formatMessage(level: string, message: string): string {\n const parts: string[] = []\n\n if (this.config.timestamp) {\n parts.push(`[${new Date().toISOString()}]`)\n }\n\n if (this.config.prefix) {\n parts.push(this.config.prefix)\n }\n\n parts.push(`[${level}]`)\n parts.push(message)\n\n return parts.join(' ')\n }\n\n private formatData(data: any): any {\n if (!this.config.includeData || !data) return undefined\n\n try {\n // Clone to avoid modifying original data\n const cloned = JSON.parse(JSON.stringify(data))\n\n // Mask sensitive data\n this.maskSensitiveData(cloned)\n\n return this.config.prettyPrint ? cloned : JSON.stringify(cloned)\n } catch (err) {\n // If circular reference or other error, return simplified version\n return `[Object: ${data?.constructor?.name || typeof data}]`\n }\n }\n\n private maskSensitiveData(obj: any): void {\n if (!obj || typeof obj !== 'object') return\n\n const sensitiveKeys = [\n 'token',\n 'password',\n 'auth',\n 'authorization',\n 'api_key',\n 'apiKey',\n 'secret'\n ]\n\n for (const key in obj) {\n const lowerKey = key.toLowerCase()\n\n if (sensitiveKeys.some((sensitive) => lowerKey.includes(sensitive))) {\n obj[key] = '***MASKED***'\n } else if (typeof obj[key] === 'object') {\n this.maskSensitiveData(obj[key])\n }\n }\n }\n\n debug(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.DEBUG)) return\n\n const formatted = this.formatMessage('DEBUG', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.log(formatted, formattedData)\n } else {\n console.log(formatted)\n }\n }\n\n info(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.INFO)) return\n\n const formatted = this.formatMessage('INFO', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.info(formatted, formattedData)\n } else {\n console.info(formatted)\n }\n }\n\n warn(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.WARN)) return\n\n const formatted = this.formatMessage('WARN', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.warn(formatted, formattedData)\n } else {\n console.warn(formatted)\n }\n }\n\n error(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.ERROR)) return\n\n const formatted = this.formatMessage('ERROR', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.error(formatted, formattedData)\n } else {\n console.error(formatted)\n }\n }\n\n group(label: string): void {\n if (!this.config.enabled) return\n console.group(this.formatMessage('GROUP', label))\n }\n\n groupEnd(): void {\n if (!this.config.enabled) return\n console.groupEnd()\n }\n\n time(label: string): void {\n if (!this.config.enabled) return\n console.time(`${this.config.prefix} ${label}`)\n }\n\n timeEnd(label: string): void {\n if (!this.config.enabled) return\n console.timeEnd(`${this.config.prefix} ${label}`)\n }\n\n updateConfig(config: Partial<LoggerConfig>): void {\n this.config = { ...this.config, ...config }\n }\n\n getConfig(): LoggerConfig {\n return { ...this.config }\n }\n}\n\nexport default Logger\n","/**\n * ConnectionManager handles realtime connections using WebSocket\n */\nimport { io, Socket, SocketOptions } from 'socket.io-client'\nimport { ChatApi } from '../api/chatApi'\nimport {\n AuthConfig,\n ConnectionConfig,\n ConnectionStatus,\n ConnectionType,\n EventType,\n Message,\n QueuedMessage,\n RealtimeEvent,\n SendMessageRequest\n} from '../types'\nimport { Logger, LogLevel, LoggerConfig } from '../utils/Logger'\n\n/* -------------------------------------------------------------------------- */\n/* Default */\n/* -------------------------------------------------------------------------- */\n\nconst DEFAULT_CONFIG: ConnectionConfig = {\n type: ConnectionType.WebSocket,\n autoReconnect: true,\n reconnectAttempts: 5,\n reconnectDelay: 3_000,\n logging: {\n enabled: false,\n level: LogLevel.INFO\n },\n onlyLongpolling: false,\n degradeWsOnFailure: true,\n wsFailureThreshold: 3,\n wsDegradeTTLms: 24 * 60 * 60 * 1000,\n forceWebSocket: false\n}\n\nconst QUEUE_KEY = 'chat_queue'\n\n/* -------------------------------------------------------------------------- */\n/* Extra typings */\n\n/* -------------------------------------------------------------------------- */\n\nexport interface ExtendedConnectionOptions extends Partial<ConnectionConfig> {\n /** Extra HTTP headers – used when the runtime supports them (Node/RN) */\n headers?: Record<string, string>\n /** Extra values to send via auth/query in the browser (simulates headers) */\n extraAuth?: Record<string, unknown>\n}\n\ntype EventCallback = (e: RealtimeEvent) => void\ntype StatusCallback = (s: ConnectionStatus) => void\n\ninterface ClientToServerEvents {\n 'message-received': (message: Message) => void\n} // keep for future emits\n\ninterface ServerToClientEvents {\n 'message-sent': (arg: string) => void\n 'message-received': (arg: string) => void\n}\n\n/* -------------------------------------------------------------------------- */\n\nexport class ConnectionManager {\n private static instance: ConnectionManager | null = null\n\n public static getInstance(\n auth: AuthConfig,\n api: ChatApi,\n options: ExtendedConnectionOptions = {}\n ): ConnectionManager {\n if (!ConnectionManager.instance) {\n ConnectionManager.instance = new ConnectionManager(auth, api, options)\n }\n return ConnectionManager.instance\n }\n\n public static resetInstance(): void {\n if (ConnectionManager.instance) {\n ConnectionManager.instance.disconnect()\n ConnectionManager.instance = null\n }\n }\n\n private readonly cfg: ConnectionConfig & ExtendedConnectionOptions\n private readonly auth: AuthConfig\n private readonly api: ChatApi\n private readonly logger: Logger\n\n private socket: Socket<ClientToServerEvents, ServerToClientEvents> | null =\n null\n\n private status: ConnectionStatus = ConnectionStatus.Disconnected\n\n private eventListeners = new Map<EventType, EventCallback[]>()\n private statusListeners: StatusCallback[] = []\n private errorListeners: ((err: any) => void)[] = []\n\n private readonly queue: QueuedMessage[] = []\n private processingQueue = false\n\n // Lock to prevent multiple simultaneous connection attempts\n private connecting = false\n\n private reconnectCount = 0\n private wsFailCount = 0\n private isDegraded = false\n\n private constructor(\n auth: AuthConfig,\n api: ChatApi,\n options: ExtendedConnectionOptions = {}\n ) {\n this.auth = auth\n this.api = api\n this.cfg = { ...DEFAULT_CONFIG, ...options }\n \n // Initialize logger with configuration\n this.logger = new Logger(this.cfg.logging || {})\n this.logger.info('ConnectionManager initialized', {\n config: {\n type: this.cfg.type,\n autoReconnect: this.cfg.autoReconnect,\n reconnectAttempts: this.cfg.reconnectAttempts,\n reconnectDelay: this.cfg.reconnectDelay,\n loggingEnabled: this.cfg.logging?.enabled\n }\n })\n\n if (typeof window !== 'undefined') {\n const saved = sessionStorage.getItem(QUEUE_KEY)\n if (saved) {\n try {\n const parsed: QueuedMessage[] = JSON.parse(saved)\n this.queue.push(...parsed)\n this.logger.debug('Loaded queued messages from session storage', {\n count: parsed.length\n })\n } catch (err) {\n this.logger.warn('Failed to parse queued messages from session storage', err)\n }\n }\n\n // Initialize degradation state from localStorage (browser-only persistence)\n const degradeUntil = this.getDegradeUntil()\n if (degradeUntil && Date.now() < degradeUntil && !this.cfg.forceWebSocket) {\n this.isDegraded = true\n this.logger.info('WebSocket degraded mode active from persisted state', {\n degradeUntil\n })\n } else if (degradeUntil && Date.now() >= degradeUntil) {\n // Expired, clear\n this.clearDegradation()\n }\n\n // Load fail count for diagnostics (not strictly required)\n this.wsFailCount = this.getFailCount()\n }\n }\n\n /* ---------------------------- Public API -------------------------------- */\n\n public connect(): void {\n // If already connected or connecting, don't try to connect again\n if (\n this.status === ConnectionStatus.Connected ||\n this.status === ConnectionStatus.Connecting ||\n this.connecting\n ) {\n this.logger.debug('Connect called but already connected/connecting', {\n status: this.status,\n connecting: this.connecting\n })\n return\n }\n\n this.logger.info('Initiating connection', {\n socketUrl: this.auth.socketBaseUrl\n })\n\n // Set lock to prevent multiple connection attempts\n this.connecting = true\n this.setStatus(ConnectionStatus.Connecting)\n this.connectWS()\n }\n\n public disconnect(): void {\n this.logger.info('Disconnecting from websocket')\n this.clearTimers()\n // eslint-disable-next-line no-unused-expressions\n this.socket?.disconnect()\n this.socket = null\n this.connecting = false\n this.setStatus(ConnectionStatus.Disconnected)\n this.logger.info('Disconnected successfully')\n }\n\n public getStatus(): ConnectionStatus {\n return this.status\n }\n\n public queueMessage(msg: SendMessageRequest, maxAttempts = 3): string {\n const id =\n typeof crypto !== 'undefined' && (crypto as any).randomUUID\n ? (crypto as any).randomUUID()\n : (Date.now() + Math.random()).toString(36)\n \n const queuedMessage = {\n id,\n message: msg,\n attempts: 0,\n maxAttempts,\n timestamp: Date.now()\n }\n \n this.logger.debug('Queueing message', {\n messageId: id,\n receiver: msg.receiver_client_id,\n hasContent: !!msg.content,\n hasAttachments: !!(msg.attachments && msg.attachments.length > 0),\n maxAttempts\n })\n \n this.queue.push(queuedMessage)\n this.saveQueue()\n this.processQueue()\n return id\n }\n\n public on(evt: EventType, cb: EventCallback): void {\n this.add(this.eventListeners, evt, cb)\n }\n\n public off(evt: EventType, cb: EventCallback): void {\n this.remove(this.eventListeners, evt, cb)\n }\n\n public emit(evt: any, ...args: any[]): void {\n this.logger.debug('Emitting event', {\n event: evt,\n args: args.length > 0 ? args : undefined\n })\n this.socket!.emit(evt, ...args)\n }\n\n public onStatusChange(cb: StatusCallback): void {\n this.statusListeners.push(cb)\n }\n\n public offStatusChange(cb: StatusCallback): void {\n const i = this.statusListeners.indexOf(cb)\n if (i !== -1) this.statusListeners.splice(i, 1)\n }\n\n public onError(cb: (err: any) => void): void {\n this.errorListeners.push(cb)\n }\n\n public offError(cb: (err: any) => void): void {\n const i = this.errorListeners.indexOf(cb)\n if (i !== -1) this.errorListeners.splice(i, 1)\n }\n\n public updateLogging(config: Partial<LoggerConfig>): void {\n this.logger.updateConfig(config)\n this.logger.info('Logging configuration updated', config)\n }\n\n public getLoggingConfig(): LoggerConfig {\n return this.logger.getConfig()\n }\n\n /* ------------------------ WebSocket connection -------------------------- */\n\n private connectWS(): void {\n try {\n this.logger.debug('Starting WebSocket connection', {\n url: this.auth.socketBaseUrl,\n hasExistingSocket: !!this.socket,\n degraded: this.isDegraded\n })\n \n if (this.socket) {\n this.logger.debug('Cleaning up existing socket connection')\n ;(this.socket as any).removeAllListeners()\n this.socket.disconnect()\n }\n \n const socketOpts = this.buildSocketOpts()\n this.logger.debug('Creating socket with options', socketOpts)\n \n this.socket = io(this.auth.socketBaseUrl, socketOpts)\n\n // Wire engine.io upgrade events to track websocket upgrade success/failures\n try {\n const manager = (this.socket as any).io\n const engine = manager?.engine\n if (engine && typeof engine.on === 'function') {\n engine.on('upgrade', (transport: any) => {\n const name = transport?.name || transport\n this.logger.info('Engine.io upgrade success', { transport: name })\n if (name === 'websocket') {\n this.resetWsFailures()\n // Exit degraded mode if any\n if (this.isDegraded) {\n this.logger.info('Exiting degraded mode after successful websocket upgrade')\n this.clearDegradation()\n this.isDegraded = false\n }\n }\n })\n engine.on('upgradeError', (err: any) => {\n this.logger.warn('Engine.io upgrade error', { error: err?.message || err })\n this.onWsFailure()\n })\n }\n } catch (wiringErr) {\n this.logger.debug('Unable to wire engine.io upgrade listeners', { error: (wiringErr as any)?.message || wiringErr })\n }\n \n // @ts-ignore\n this.socket.on('connect', () => {\n this.logger.info('WebSocket connected successfully', {\n socketId: (this.socket as any).id,\n reconnectCount: this.reconnectCount\n })\n this.connecting = false\n this.reconnectCount = 0\n this.setStatus(ConnectionStatus.Connected)\n this.processQueue()\n })\n \n // @ts-ignore\n this.socket.on('connect_error', (err) => {\n this.logger.error('WebSocket connection error', {\n error: err.message,\n type: (err as any).type || 'unknown',\n reconnectCount: this.reconnectCount\n })\n this.connecting = false\n // Count as a failure if websocket is among the desired transports and we are not already degraded\n if (!this.isDegraded && !this.cfg.onlyLongpolling && !this.cfg.forceWebSocket) {\n this.onWsFailure()\n }\n this.handleConnError(err)\n })\n \n // @ts-ignore\n this.socket.on('disconnect', (reason) => {\n this.logger.info('WebSocket disconnected', {\n reason,\n willReconnect: this.cfg.autoReconnect\n })\n this.connecting = false\n this.setStatus(ConnectionStatus.Disconnected)\n this.scheduleReconnect()\n })\n\n // Log all socket.io internal events in debug mode\n if (this.logger.getConfig().level <= LogLevel.DEBUG) {\n // @ts-ignore\n this.socket.on('ping', () => {\n this.logger.debug('Socket.io ping sent')\n })\n // @ts-ignore\n this.socket.on('pong', (latency: number) => {\n this.logger.debug('Socket.io pong received', { latency })\n })\n }\n\n /* Forward all realtime events */\n Object.values(EventType).forEach((evt) => {\n // @ts-ignore\n this.socket!.on(evt as any, (data: any) => {\n this.logger.debug('Received realtime event', {\n event: evt,\n data\n })\n this.handleEvent({ type: evt as EventType, data })\n })\n })\n \n this.logger.debug('WebSocket event listeners registered', {\n events: Object.values(EventType)\n })\n } catch (err) {\n this.logger.error('WebSocket initialization failed', err)\n this.connecting = false\n this.handleConnError(err)\n }\n }\n\n private buildSocketOpts(): Partial<SocketOptions & { transports: string[]; upgrade: boolean; rememberUpgrade: boolean }> {\n const isBrowser = typeof window !== 'undefined'\n const headers = {\n ...this.cfg.headers,\n Authorization: `Bearer ${this.auth.token}`\n }\n\n // Determine transports based on configuration\n let transports: string[] = ['websocket'];\n const degraded = this.isDegraded && !this.cfg.forceWebSocket\n if (this.cfg.onlyLongpolling || degraded) {\n transports = ['polling'];\n } else if (this.cfg.type === ConnectionType.LongPolling) {\n transports = ['polling', 'websocket'];\n } else {\n transports = ['websocket', 'polling'];\n }\n\n const opts: Partial<SocketOptions & { transports: string[]; upgrade: boolean; rememberUpgrade: boolean }> = {\n // @ts-ignore\n reconnection: false,\n rememberUpgrade: !this.cfg.onlyLongpolling && !degraded,\n timeout: 20000,\n auth: { token: this.auth.token, ...(this.cfg.extraAuth || {}) },\n transports: transports,\n upgrade: !this.cfg.onlyLongpolling && !degraded\n }\n\n if (!isBrowser) {\n // Node / RN / Electron main\n // @ts-ignore\n opts.transportOptions = {\n polling: { extraHeaders: headers },\n websocket: { extraHeaders: headers }\n }\n } else if (this.cfg.type === ConnectionType.LongPolling || this.cfg.onlyLongpolling) {\n // For browser environments with long polling, we need to pass auth in query\n // since we can't set custom headers\n const query: Record<string, string> = {};\n if (this.cfg.extraAuth) {\n Object.entries(this.cfg.extraAuth).forEach(([key, value]) => {\n query[key] = String(value);\n });\n }\n (opts as any).query = query;\n }\n\n this.logger.debug('Socket options built', {\n isBrowser,\n hasExtraAuth: !!this.cfg.extraAuth,\n hasHeaders: !!this.cfg.headers,\n timeout: (opts as any).timeout,\n transports: (opts as any).transports,\n onlyLongpolling: this.cfg.onlyLongpolling,\n degraded,\n rememberUpgrade: (opts as any).rememberUpgrade,\n upgrade: (opts as any).upgrade\n })\n\n return opts\n }\n\n /* --------------------------- Error / reconnect -------------------------- */\n\n private handleConnError(err?: any): void {\n this.logger.error('Connection error occurred', {\n error: err?.message || err,\n errorType: err?.type || 'unknown',\n willReconnect: this.cfg.autoReconnect && this.reconnectCount < this.cfg.reconnectAttempts\n })\n \n this.setStatus(ConnectionStatus.Error)\n this.errorListeners.forEach((cb) => {\n try {\n cb(err)\n } catch (listenerErr) {\n this.logger.warn('Error in error listener', listenerErr)\n }\n })\n this.clearTimers()\n this.scheduleReconnect()\n }\n\n /* ---------------------------- Queue logic ------------------------------ */\n\n private async processQueue(): Promise<void> {\n if (this.processingQueue || this.status !== ConnectionStatus.Connected) {\n this.logger.debug('Skipping queue processing', {\n processingQueue: this.processingQueue,\n status: this.status,\n queueLength: this.queue.length\n })\n return\n }\n \n if (this.queue.length === 0) {\n this.logger.debug('Queue is empty, nothing to process')\n return\n }\n\n this.logger.debug('Starting queue processing', {\n queueLength: this.queue.length\n })\n \n this.processingQueue = true\n while (this.queue.length && this.status === ConnectionStatus.Connected) {\n const q = this.queue[0]\n q.attempts += 1\n\n this.logger.debug('Processing queued message', {\n messageId: q.id,\n attempt: q.attempts,\n maxAttempts: q.maxAttempts,\n age: Date.now() - q.timestamp\n })\n\n try {\n await this.sendMessageHttp(q.message)\n this.logger.info('Queued message sent successfully', {\n messageId: q.id,\n attempts: q.attempts\n })\n this.queue.shift() // success – remove\n this.saveQueue()\n } catch (err) {\n this.logger.error(`Failed to send queued message (attempt ${q.attempts}/${q.maxAttempts})`, {\n messageId: q.id,\n error: err\n })\n if (q.attempts >= q.maxAttempts) {\n this.logger.warn('Message exceeded max attempts, removing from queue', {\n messageId: q.id\n })\n this.queue.shift()\n }\n this.saveQueue()\n break // leave loop until next tick\n }\n }\n this.processingQueue = false\n \n if (this.queue.length) {\n this.logger.debug('Queue still has messages, scheduling next processing', {\n remainingMessages: this.queue.length\n })\n setTimeout(() => this.processQueue(), 100)\n }\n }\n\n private async sendMessageHttp(msg: SendMessageRequest): Promise<void> {\n this.logger.debug('Sending message via HTTP', {\n receiver: msg.receiver_client_id,\n hasContent: !!msg.content,\n hasAttachments: !!(msg.attachments && msg.attachments.length > 0)\n })\n \n this.logger.time('sendMessage')\n try {\n await this.api.sendMessage(msg)\n this.logger.timeEnd('sendMessage')\n this.logger.debug('Message sent successfully via HTTP')\n } catch (err) {\n this.logger.timeEnd('sendMessage')\n this.logger.error('Failed to send message via HTTP', err)\n throw err\n }\n }\n\n /* ----------------------------- Utilities ------------------------------- */\n\n private handleEvent(evt: RealtimeEvent): void {\n const listeners = this.eventListeners.get(evt.type) || []\n \n this.logger.debug('Handling event', {\n type: evt.type,\n listenerCount: listeners.length,\n hasData: !!evt.data\n })\n \n listeners.forEach((cb, index) => {\n try {\n cb(evt)\n } catch (err) {\n this.logger.error(`Event listener error for ${evt.type}`, {\n listenerIndex: index,\n error: err\n })\n }\n })\n }\n\n private setStatus(s: ConnectionStatus): void {\n if (this.status === s) {\n this.logger.debug('Status unchanged', { status: s })\n return\n }\n \n const oldStatus = this.status\n this.status = s\n \n this.logger.info('Connection status changed', {\n from: oldStatus,\n to: s,\n listenerCount: this.statusListeners.length\n })\n \n this.statusListeners.forEach((cb, index) => {\n try {\n cb(s)\n } catch (e) {\n this.logger.error('Status listener error', {\n listenerIndex: index,\n error: e\n })\n }\n })\n }\n\n private scheduleReconnect(): void {\n if (!this.cfg.autoReconnect) {\n this.logger.debug('Auto-reconnect disabled, not scheduling reconnect')\n return\n }\n \n if (this.reconnectCount >= this.cfg.reconnectAttempts) {\n this.logger.warn('Max reconnect attempts reached', {\n reconnectCount: this.reconnectCount,\n maxAttempts: this.cfg.reconnectAttempts\n })\n return\n }\n \n this.reconnectCount += 1\n \n this.logger.info('Scheduling reconnect', {\n attempt: this.reconnectCount,\n maxAttempts: this.cfg.reconnectAttempts,\n delayMs: this.cfg.reconnectDelay\n })\n \n setTimeout(() => {\n this.logger.debug('Executing scheduled reconnect', {\n attempt: this.reconnectCount\n })\n this.connect()\n }, this.cfg.reconnectDelay)\n }\n\n private clearTimers(): void {}\n\n private saveQueue(): void {\n if (typeof window === 'undefined') return\n try {\n sessionStorage.setItem(QUEUE_KEY, JSON.stringify(this.queue))\n this.logger.debug('Queue saved to session storage', {\n count: this.queue.length\n })\n } catch (err) {\n this.logger.warn('Failed to save queue to session storage', err)\n }\n }\n\n private add<K, CB>(m: Map<K, CB[]>, k: K, cb: CB) {\n if (!m.has(k)) m.set(k, [])\n m.get(k)!.push(cb)\n }\n\n private remove<K, CB>(m: Map<K, CB[]>, k: K, cb: CB) {\n const arr = m.get(k)\n if (!arr) return\n const i = arr.indexOf(cb)\n if (i !== -1) arr.splice(i, 1)\n }\n\n /* -------------------- WebSocket degradation helpers -------------------- */\n private storageAvailable(): boolean {\n try {\n if (typeof window === 'undefined') return false\n const testKey = '__wsdeg__'\n window.localStorage.setItem(testKey, '1')\n window.localStorage.removeItem(testKey)\n return true\n } catch {\n return false\n }\n }\n\n private failKey(): string {\n return `WS_FAIL_COUNT::${this.auth.socketBaseUrl}`\n }\n\n private untilKey(): string {\n return `WS_DEGRADE_UNTIL::${this.auth.socketBaseUrl}`\n }\n\n private getFailCount(): number {\n if (!this.storageAvailable()) return this.wsFailCount\n const v = window.localStorage.getItem(this.failKey())\n return v ? parseInt(v, 10) || 0 : 0\n }\n\n private setFailCount(n: number): void {\n this.wsFailCount = n\n if (!this.storageAvailable()) return\n try {\n window.localStorage.setItem(this.failKey(), String(n))\n } catch {}\n }\n\n private resetWsFailures(): void {\n if (!this.cfg.degradeWsOnFailure) return\n this.setFailCount(0)\n }\n\n private getDegradeUntil(): number | null {\n if (!this.storageAvailable()) return null\n const v = window.localStorage.getItem(this.untilKey())\n return v ? parseInt(v, 10) || null : null\n }\n\n private setDegradeUntil(ts: number): void {\n if (!this.storageAvailable()) return\n try {\n window.localStorage.setItem(this.untilKey(), String(ts))\n } catch {}\n }\n\n private clearDegradation(): void {\n if (!this.storageAvailable()) return\n try {\n window.localStorage.removeItem(this.untilKey())\n window.localStorage.removeItem(this.failKey())\n } catch {}\n }\n\n private onWsFailure(): void {\n if (!this.cfg.degradeWsOnFailure || this.cfg.forceWebSocket) return\n // Do not count failures when already degraded or when longpolling forced\n if (this.isDegraded || this.cfg.onlyLongpolling) return\n\n const current = this.getFailCount() + 1\n this.setFailCount(current)\n this.logger.warn('WebSocket failure counted', {\n count: current,\n threshold: this.cfg.wsFailureThreshold\n })\n\n if (current >= (this.cfg.wsFailureThreshold || 3)) {\n // Enter degraded mode for TTL\n const ttl = this.cfg.wsDegradeTTLms || 24 * 60 * 60 * 1000\n const until = Date.now() + ttl\n this.isDegraded = true\n this.setDegradeUntil(until)\n this.setFailCount(0)\n this.logger.error('Entering degraded mode: polling-only', {\n until\n })\n\n // Reconnect with polling-only\n try {\n this.disconnect()\n } finally {\n this.connect()\n }\n }\n }\n}\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n ReactNode,\n useCallback,\n useMemo\n} from 'react'\nimport { ConnectionManager } from '../connection/ConnectionManager'\nimport { ChatApi } from '../api/chatApi'\nimport {\n AuthConfig,\n ConnectionOptions,\n ConnectionStatus,\n EventType,\n RealtimeEvent,\n SendMessageRequest\n} from '../types'\nimport { LoggerConfig } from '../utils/Logger'\n\ninterface ConnectionContextType {\n connection: ConnectionManager | null\n status: ConnectionStatus\n connect: () => void\n disconnect: () => void\n sendMessage: (\n message: SendMessageRequest,\n maxAttempts?: number\n ) => string | null\n on: (eventType: EventType, callback: (event: RealtimeEvent) => void) => void\n off: (eventType: EventType, callback: (event: RealtimeEvent) => void) => void\n onError: (cb: (err: any) => void) => void\n offError: (cb: (err: any) => void) => void\n updateLogging: (config: Partial<LoggerConfig>) => void\n getLoggingConfig: () => LoggerConfig | null\n}\n\nconst defaultContext: ConnectionContextType = {\n connection: null,\n status: ConnectionStatus.Disconnected,\n connect: () => {},\n disconnect: () => {},\n sendMessage: () => null,\n on: () => {},\n off: () => {},\n onError: () => {},\n offError: () => {},\n updateLogging: () => {},\n getLoggingConfig: () => null\n}\n\nconst ConnectionContext = createContext<ConnectionContextType>(defaultContext)\n\ninterface ConnectionProviderProps {\n children: ReactNode\n authConfig?: AuthConfig\n api?: ChatApi\n connectionOptions?: ConnectionOptions\n autoConnect?: boolean\n}\n\nexport const ConnectionProvider: React.FC<ConnectionProviderProps> = ({\n children,\n authConfig,\n api,\n connectionOptions,\n autoConnect = true\n}) => {\n const [connection, setConnection] = useState<ConnectionManager | null>(null)\n const [status, setStatus] = useState<ConnectionStatus>(\n ConnectionStatus.Disconnected\n )\n\n // Initialize connection manager when auth config changes\n useEffect(() => {\n if (!authConfig || !api) {\n if (connection) {\n connection.disconnect()\n setConnection(null)\n setStatus(ConnectionStatus.Disconnected)\n }\n return\n }\n const newConnection = ConnectionManager.getInstance(\n authConfig,\n api!,\n connectionOptions\n )\n\n // Listen for status changes\n newConnection.onStatusChange(setStatus)\n\n setConnection(newConnection)\n\n // Auto-connect if enabled\n if (autoConnect) {\n newConnection.connect()\n }\n\n // Clean up on unmount\n return () => {\n newConnection.disconnect()\n ConnectionManager.resetInstance()\n }\n }, [authConfig, connectionOptions, autoConnect, api])\n\n const connect = useCallback(() => {\n if (connection) {\n connection.connect()\n }\n }, [connection])\n\n const disconnect = useCallback(() => {\n if (connection) {\n connection.disconnect()\n }\n }, [connection])\n\n const sendMessage = useCallback(\n (message: SendMessageRequest, maxAttempts = 3): string | null => {\n if (!connection) {\n return null\n }\n return connection.queueMessage(message, maxAttempts)\n },\n [connection]\n )\n\n const on = useCallback(\n (eventType: EventType, callback: (event: RealtimeEvent) => void) => {\n if (connection) {\n connection.on(eventType, callback)\n }\n },\n [connection]\n )\n\n const off = useCallback(\n (eventType: EventType, callback: (event: RealtimeEvent) => void) => {\n if (connection) {\n connection.off(eventType, callback)\n }\n },\n [connection]\n )\n\n const onError = useCallback(\n (cb: (err: any) => void) => {\n if (connection) {\n connection.onError(cb)\n }\n },\n [connection]\n )\n\n const offError = useCallback(\n (cb: (err: any) => void) => {\n if (connection) {\n connection.offError(cb)\n }\n },\n [connection]\n )\n\n const updateLogging = useCallback(\n (config: Partial<LoggerConfig>) => {\n if (connection) {\n connection.updateLogging(config)\n }\n },\n [connection]\n )\n\n const getLoggingConfig = useCallback((): LoggerConfig | null => {\n if (connection) {\n return connection.getLoggingConfig()\n }\n return null\n }, [connection])\n\n const value = useMemo(\n () => ({\n connection,\n status,\n connect,\n disconnect,\n sendMessage,\n on,\n off,\n onError,\n offError,\n updateLogging,\n getLoggingConfig\n }),\n [\n connection,\n status,\n connect,\n disconnect,\n sendMessage,\n on,\n off,\n onError,\n offError,\n updateLogging,\n getLoggingConfig\n ]\n )\n\n return (\n <ConnectionContext.Provider value={value}>\n {children}\n </ConnectionContext.Provider>\n )\n}\n\nexport const useConnectionContext = () => useContext(ConnectionContext)\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n ReactNode,\n Dispatch,\n SetStateAction,\n useCallback, useMemo\n} from 'react'\nimport { ChatApi } from '../api/chatApi'\nimport { AuthConfig, Conversation, ConnectionOptions } from '../types'\nimport { ConnectionProvider } from './ConnectionContext'\n\ninterface ChatContextType {\n api: ChatApi | null\n isInitialized: boolean\n isAuthenticated: boolean\n initialize: (config: AuthConfig) => void\n conversations: Conversation[]\n refreshConversations: (\n archived?: boolean,\n clientIds?: string\n ) => Promise<Conversation[]>\n setConversations: Dispatch<SetStateAction<Conversation[]>>\n}\n\nconst defaultContext: ChatContextType = {\n api: null,\n isInitialized: false,\n isAuthenticated: false,\n initialize: () => {},\n conversations: [],\n refreshConversations: async (): Promise<Conversation[]> => {\n return Promise.resolve([])\n },\n setConversations: () => {}\n}\n\nconst ChatContext = createContext<ChatContextType>(defaultContext)\n\ninterface ChatProviderProps {\n children: ReactNode\n config?: AuthConfig\n connectionOptions?: ConnectionOptions\n}\n\nexport const ChatProvider: React.FC<ChatProviderProps> = ({\n children,\n config,\n connectionOptions\n}) => {\n const [api, setApi] = useState<ChatApi | null>(null)\n const [isInitialized, setIsInitialized] = useState(false)\n const [isAuthenticated, setIsAuthenticated] = useState(false)\n const [conversations, setConversations] = useState<Conversation[]>([])\n\n const initialize = useCallback((config: AuthConfig) => {\n const chatApi = new ChatApi(config)\n setApi(chatApi)\n setIsInitialized(true)\n setIsAuthenticated(true)\n }, [])\n\n const refreshConversations = useCallback(\n async (archived?: boolean, clientIds?: string): Promise<Conversation[]> => {\n if (!api) return []\n try {\n const data = await api.listConversations(archived, clientIds)\n setConversations(data)\n return data\n } catch (error) {\n console.error('Failed to fetch conversations:', error)\n }\n return []\n },\n [api]\n )\n\n useEffect(() => {\n if (config) {\n initialize(config)\n }\n }, [config])\n\n useEffect(() => {\n if (isAuthenticated) {\n refreshConversations()\n }\n }, [isAuthenticated])\n\n const value = useMemo(() => {\n return {\n api,\n isInitialized,\n isAuthenticated,\n initialize,\n conversations,\n refreshConversations,\n setConversations\n }\n }, [api, isInitialized, isAuthenticated, conversations, refreshConversations])\n\n return (\n <ChatContext.Provider value={value}>\n <ConnectionProvider\n authConfig={config}\n api={api || undefined}\n connectionOptions={connectionOptions}\n autoConnect={isAuthenticated}\n >\n {children}\n </ConnectionProvider>\n </ChatContext.Provider>\n )\n}\n\nexport const useChatContext = () => useContext(ChatContext)\n","import { useState, useEffect, useCallback } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport {\n EventType,\n RealtimeEvent,\n MessageSentEvent,\n MessageEditedEvent,\n MessageDeletedEvent,\n MessageReadEvent,\n ConversationReadEvent\n} from '../types'\n\n/**\n * Hook for subscribing to realtime events\n * @param eventType The event type to subscribe to\n */\nexport function useRealtime<T = any>(\n eventType: EventType\n): {\n event: RealtimeEvent<T> | null\n clearEvent: () => void\n} {\n const { on, off } = useConnectionContext()\n const [event, setEvent] = useState<RealtimeEvent<T> | null>(null)\n\n // Event handler\n const handleEvent = useCallback((newEvent: RealtimeEvent<T>) => {\n setEvent(newEvent)\n }, [])\n\n // Subscribe to events\n useEffect(() => {\n on(eventType, handleEvent)\n\n return () => {\n off(eventType, handleEvent)\n }\n }, [eventType, on, off, handleEvent])\n\n // Clear the current event\n const clearEvent = useCallback(() => {\n setEvent(null)\n }, [])\n\n return { event, clearEvent }\n}\n\n/**\n * Hook for subscribing to message sent events\n */\nexport function useMessageSentEvents(): {\n event: RealtimeEvent<MessageSentEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageSentEvent>(EventType.MessageSent)\n}\n\n/**\n * Hook for subscribing to message edited events\n */\nexport function useMessageEditedEvents(): {\n event: RealtimeEvent<MessageEditedEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageEditedEvent>(EventType.MessageEdited)\n}\n\n/**\n * Hook for subscribing to message deleted events\n */\nexport function useMessageDeletedEvents(): {\n event: RealtimeEvent<MessageDeletedEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageDeletedEvent>(EventType.MessageDeleted)\n}\n\n/**\n * Hook for subscribing to message read events\n */\nexport function useMessageReadEvents(): {\n event: RealtimeEvent<MessageReadEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageReadEvent>(EventType.MessageRead)\n}\n\n/**\n * Hook for subscribing to conversation read events\n */\nexport function useConversationReadEvents(): {\n event: RealtimeEvent<ConversationReadEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<ConversationReadEvent>(EventType.ConversationRead)\n}\n\n/**\n * Hook for subscribing to all message events\n * @param callback Optional callback function that will be called when any message event is received\n */\nexport function useAllMessageEvents(\n callback?: (eventType: EventType, data: any) => void\n): {\n messageSent: RealtimeEvent<MessageSentEvent> | null\n messageEdited: RealtimeEvent<MessageEditedEvent> | null\n messageDeleted: RealtimeEvent<MessageDeletedEvent> | null\n messageRead: RealtimeEvent<MessageReadEvent> | null\n conversationRead: RealtimeEvent<ConversationReadEvent> | null\n clearEvents: () => void\n} {\n const { event: messageSent, clearEvent: clearMessageSent } =\n useMessageSentEvents()\n const { event: messageEdited, clearEvent: clearMessageEdited } =\n useMessageEditedEvents()\n const { event: messageDeleted, clearEvent: clearMessageDeleted } =\n useMessageDeletedEvents()\n const { event: messageRead, clearEvent: clearMessageRead } =\n useMessageReadEvents()\n const { event: conversationRead, clearEvent: clearConversationRead } =\n useConversationReadEvents()\n\n const clearEvents = useCallback(() => {\n clearMessageSent()\n clearMessageEdited()\n clearMessageDeleted()\n clearMessageRead()\n clearConversationRead()\n }, [\n clearMessageSent,\n clearMessageEdited,\n clearMessageDeleted,\n clearMessageRead,\n clearConversationRead\n ])\n\n // Call the callback when any event is received\n useEffect(() => {\n if (messageSent && callback) {\n callback(EventType.MessageSent, messageSent.data)\n }\n }, [messageSent, callback])\n\n useEffect(() => {\n if (messageEdited && callback) {\n callback(EventType.MessageEdited, messageEdited.data)\n }\n }, [messageEdited, callback])\n\n useEffect(() => {\n if (messageDeleted && callback) {\n callback(EventType.MessageDeleted, messageDeleted.data)\n }\n }, [messageDeleted, callback])\n\n useEffect(() => {\n if (messageRead && callback) {\n callback(EventType.MessageRead, messageRead.data)\n }\n }, [messageRead, callback])\n\n useEffect(() => {\n if (conversationRead && callback) {\n callback(EventType.ConversationRead, conversationRead.data)\n }\n }, [conversationRead, callback])\n\n return {\n messageSent,\n messageEdited,\n messageDeleted,\n messageRead,\n conversationRead,\n clearEvents\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { useAllMessageEvents } from './useRealtime'\nimport type { ConversationSearchResult, ApiResponse, Conversation } from '../types'\n\n/**\n * Hook for managing conversations\n */\nexport const useConversations = () => {\n const { api, conversations, refreshConversations, setConversations } =\n useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n // Event handler for message events\n const eventProcessorPipeline = useCallback(() => {\n console.log('Message event received')\n // Just refresh conversations when any message event is received\n refreshConversations()\n }, [])\n\n // Subscribe to all message events\n useAllMessageEvents(eventProcessorPipeline)\n\n /**\n * Get a list of conversations\n * @param archived Whether to include archived conversations\n * @param clientId Filter conversations by client ID\n */\n const getConversations = useCallback(\n async (archived?: boolean, clientIds?: string,) => {\n if (!api) {\n setError(new Error('API not initialized'))\n return []\n }\n\n setLoading(true)\n setError(null)\n try {\n return await refreshConversations(archived, clientIds)\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to get conversations')\n setError(error)\n return []\n } finally {\n setLoading(false)\n }\n },\n [refreshConversations, api]\n )\n\n /**\n * Delete a conversation\n * @param conversationUid The UID of the conversation to delete\n */\n const deleteConversation = useCallback(\n async (conversationUid: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.deleteConversation(conversationUid)\n await refreshConversations()\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to delete conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, refreshConversations]\n )\n\n /**\n * Archive a conversation\n * @param conversationUid The UID of the conversation to archive\n */\n const archiveConversation = useCallback(\n async (conversationUid: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.archiveConversation(conversationUid)\n await refreshConversations()\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to archive conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, refreshConversations]\n )\n\n /**\n * Unarchive a conversation\n * @param conversationUid The UID of the conversation to unarchive\n */\n const unarchiveConversation = useCallback(\n async (conversationUid: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.unarchiveConversation(conversationUid)\n await refreshConversations()\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to unarchive conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, refreshConversations]\n )\n\n /**\n * Get details about a conversation\n * @param conversationUid The UID of the conversation\n */\n const getConversationDetails = useCallback(\n async (conversationUid: string): Promise<Conversation | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n return await api.getConversationDetails(conversationUid)\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to get conversation details')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Search for messages in a conversation\n * @param conversationUid The UID of the conversation\n * @param term The search term\n */\n const searchConversation = useCallback(\n async (\n conversationUid: string,\n term: string\n ): Promise<ConversationSearchResult | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n return await api.searchConversation(conversationUid, term)\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to search conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n conversations,\n loading,\n error,\n getConversations,\n deleteConversation,\n archiveConversation,\n unarchiveConversation,\n getConversationDetails,\n searchConversation,\n setConversations\n }\n}\n","import { useCallback } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport { ConnectionStatus, SendMessageRequest } from '../types'\n\n/**\n * Hook for managing the realtime connection\n */\nexport const useConnection = () => {\n const {\n status,\n connect,\n disconnect,\n connection,\n sendMessage: queueMessage\n } = useConnectionContext()\n\n /**\n * Connect to the server\n */\n const connectToServer = useCallback(() => {\n connect()\n }, [connect])\n\n /**\n * Disconnect from the server\n */\n const disconnectFromServer = useCallback(() => {\n disconnect()\n }, [disconnect])\n\n /**\n * Send a message\n * @param message The message to send\n * @param maxAttempts Maximum number of retry attempts\n * @returns A unique ID for the queued message, or null if the connection is not available\n */\n const sendMessage = useCallback(\n (message: SendMessageRequest, maxAttempts = 3): string | null => {\n return queueMessage(message, maxAttempts)\n },\n [queueMessage]\n )\n\n /**\n * Check if the connection is active\n */\n const isConnected = status === ConnectionStatus.Connected\n\n /**\n * Check if the connection is in progress\n */\n const isConnecting = status === ConnectionStatus.Connecting\n\n /**\n * Check if the connection has an error\n */\n const hasError = status === ConnectionStatus.Error\n\n return {\n status,\n isConnected,\n isConnecting,\n hasError,\n connect: connectToServer,\n disconnect: disconnectFromServer,\n sendMessage,\n connection\n }\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { ChatApi } from '../api/chatApi'\nimport {\n QueuedMessage,\n SendMessageRequest,\n SendMessageResponse\n} from '../types'\n\n// Constants\nconst QUEUE_STORAGE_KEY = 'message_queue'\nconst MAX_RETRY_TIME = 60 * 1000 // 1 minute in milliseconds\nconst DEFAULT_MAX_ATTEMPTS = 3\nconst RETRY_DELAY = 2000 // 2 seconds\n\n/**\n * Hook for managing a message queue with retry functionality\n * @param api The ChatApi instance\n */\nexport const useQueue = (api: ChatApi | null) => {\n const [queue, setQueue] = useState<QueuedMessage[]>([])\n const [isProcessing, setIsProcessing] = useState(false)\n\n // Load queue from localStorage on initialization\n useEffect(() => {\n try {\n const storedQueue = localStorage.getItem(QUEUE_STORAGE_KEY)\n if (storedQueue) {\n const parsedQueue: QueuedMessage[] = JSON.parse(storedQueue)\n\n // Filter out messages that have been in the queue for more than MAX_RETRY_TIME\n const now = Date.now()\n const validQueue = parsedQueue.filter(\n (item) => now - item.timestamp <= MAX_RETRY_TIME\n )\n\n setQueue(validQueue)\n }\n } catch (error) {\n console.error('Failed to load message queue from localStorage:', error)\n }\n }, [])\n\n // Save queue to localStorage whenever it changes\n useEffect(() => {\n try {\n localStorage.setItem(QUEUE_STORAGE_KEY, JSON.stringify(queue))\n } catch (error) {\n console.error('Failed to save message queue to localStorage:', error)\n }\n }, [queue])\n\n // Add a message to the queue\n const enqueueMessage = useCallback((message: SendMessageRequest): string => {\n const id = `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n const queuedMessage: QueuedMessage = {\n id,\n message,\n attempts: 0,\n maxAttempts: DEFAULT_MAX_ATTEMPTS,\n timestamp: Date.now()\n }\n\n setQueue((prevQueue) => [...prevQueue, queuedMessage])\n return id\n }, [])\n\n // Process the queue\n const processQueue = useCallback(async (): Promise<void> => {\n if (!api || isProcessing || queue.length === 0) {\n return\n }\n\n setIsProcessing(true)\n\n // Process one message at a time\n const [currentMessage, ...remainingMessages] = queue\n const now = Date.now()\n\n // Skip if message is too old (more than MAX_RETRY_TIME)\n if (now - currentMessage.timestamp > MAX_RETRY_TIME) {\n setQueue(remainingMessages)\n setIsProcessing(false)\n return\n }\n\n try {\n // Attempt to send the message\n await api.sendMessage(currentMessage.message)\n\n // If successful, remove from queue\n setQueue(remainingMessages)\n } catch (error) {\n // If failed, increment attempts and move to the end of the queue if under max attempts\n if (currentMessage.attempts < currentMessage.maxAttempts) {\n const updatedMessage = {\n ...currentMessage,\n attempts: currentMessage.attempts + 1\n }\n setQueue([...remainingMessages, updatedMessage])\n } else {\n // If max attempts reached, remove from queue\n setQueue(remainingMessages)\n }\n } finally {\n setIsProcessing(false)\n\n // If there are more messages, schedule the next processing after a delay\n if (remainingMessages.length > 0) {\n setTimeout(() => processQueue(), RETRY_DELAY)\n }\n }\n }, [api, isProcessing, queue])\n\n // Start processing the queue whenever a new message is added or when the API becomes available\n useEffect(() => {\n if (queue.length > 0 && api && !isProcessing) {\n processQueue()\n }\n }, [queue, api, isProcessing, processQueue])\n\n // Send a message with queue and retry support\n const sendMessageWithRetry = useCallback(\n async (\n message: SendMessageRequest\n ): Promise<SendMessageResponse | null> => {\n if (!api) {\n // If API is not available, just enqueue the message\n enqueueMessage(message)\n return null\n }\n\n try {\n // Try to send immediately\n const response = await api.sendMessage(message)\n return response\n } catch (error) {\n // If sending fails, add to queue for retry\n enqueueMessage(message)\n return null\n }\n },\n [api, enqueueMessage]\n )\n\n return {\n enqueueMessage,\n sendMessageWithRetry,\n queueLength: queue.length,\n isProcessing\n }\n}\n","import { useState, useCallback, useEffect } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { ClientProfileResponse } from '../types'\n\n/**\n * Hook for accessing client profile information\n */\nexport const useClientProfile = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [profile, setProfile] = useState<ClientProfileResponse | null>(null)\n\n /**\n * Fetch the client profile information\n */\n const fetchProfile =\n useCallback(async (): Promise<ClientProfileResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const response = await api.getClientProfile()\n setProfile(response)\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to fetch client profile')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n }, [api])\n\n // Fetch profile on mount\n useEffect(() => {\n if (api) {\n fetchProfile()\n }\n }, [api, fetchProfile])\n\n return {\n loading,\n error,\n profile,\n fetchProfile\n }\n}\n","import { useState, useCallback, useEffect } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { useAllMessageEvents } from './useRealtime'\nimport { useConnection } from './useConnection'\nimport { useQueue } from './useQueue'\nimport {\n MessagesResponse,\n SendMessageRequest,\n SendMessageResponse,\n MarkConversationReadResponse,\n UpdateMessageRequest,\n UpdateMessageResponse,\n DeleteMessageResponse,\n ApiResponse,\n EventType,\n MessageSentEvent,\n MessageEditedEvent,\n MessageDeletedEvent,\n MessageReadEvent,\n ConversationReadEvent,\n Message,\n RealtimeEvent, ClientPreferences\n} from '../types'\nimport { useClientProfile } from './useClientProfile'\n\n/**\n * Hook for managing messages\n */\nexport const useMessages = (conversationUid?: string) => {\n const { api } = useChatContext()\n const { profile } = useClientProfile()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [messages, setMessages] = useState<MessagesResponse | null>(null)\n const [preferences, setPreferences] = useState<ClientPreferences | null>(null)\n\n // Get realtime connection status\n const { isConnected, connection } = useConnection()\n\n // Initialize the queue service\n const { sendMessageWithRetry, queueLength } = useQueue(api)\n\n useEffect(() => {\n const fetchPreferences = async () => {\n if (!api) {\n setError(new Error('API not initialized'))\n return\n }\n try {\n const response = await api.getClientPreferences()\n setPreferences(response.preferences)\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to fetch preferences')\n setError(error)\n }\n }\n fetchPreferences()\n }, [api])\n\n const clearDuplicateMessages = useCallback(\n (messages: Message[]): Message[] => {\n const uniqueMessages = new Map<number, Message>()\n\n // Keep only the latest version of each message by id\n messages.forEach((message) => {\n uniqueMessages.set(message.id, message)\n })\n\n // Convert the Map values back to an array\n return Array.from(uniqueMessages.values())\n },\n []\n )\n /**\n * Get messages for a conversation\n * @param page The page number\n * @param pageSize The number of messages per page\n */\n const getMessages = useCallback(\n async (\n conversationId = conversationUid,\n page = 1,\n pageSize = 20\n ): Promise<MessagesResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n if (!conversationId) {\n setError(new Error('Conversation ID is required'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.getMessages(conversationId, page, pageSize)\n if (page === 1) setMessages(response)\n else\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: clearDuplicateMessages([\n ...prev.messages,\n ...response?.messages\n ]),\n pagination: response.pagination\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to get messages')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [conversationUid]\n )\n\n /**\n * Mark a message as read\n * @param messageId The ID of the message\n */\n const markMessageAsRead = useCallback(\n async (messageId: number): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n return await api.markMessageAsRead(messageId)\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to mark message as read')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n []\n )\n\n /**\n * Send a message\n * @param message The message to send\n */\n const sendMessage = useCallback(\n async (\n message: Omit<SendMessageRequest, 'conversation_uid'> & {\n conversation_uid?: string\n }\n ): Promise<SendMessageResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n const messageWithConversation: SendMessageRequest = {\n ...message,\n conversation_uid: message.conversation_uid || conversationUid\n }\n\n setLoading(true)\n setError(null)\n try {\n // Use the queue service to send the message with retry support\n const response = await sendMessageWithRetry(messageWithConversation)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to send message')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [conversationUid, sendMessageWithRetry]\n )\n\n /**\n * Mark all messages in a conversation as read\n * @param conversationId The ID of the conversation\n */\n const markConversationAsRead = useCallback(\n async (\n conversationId = conversationUid\n ): Promise<MarkConversationReadResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n if (!conversationId) {\n setError(new Error('Conversation ID is required'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.markConversationAsRead(conversationId)\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: prev?.messages?.map((item) => ({\n ...item,\n is_read: true\n }))\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to mark conversation as read')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, conversationUid]\n )\n\n /**\n * Update a message\n * @param messageId The ID of the message\n * @param update The update to apply\n */\n const updateMessage = useCallback(\n async (\n messageId: number,\n update: UpdateMessageRequest\n ): Promise<UpdateMessageResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.updateMessage(messageId, update)\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: prev.messages.map((item) =>\n item.id === messageId\n ? { ...item, ...response.message }\n : item\n )\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to update message')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, conversationUid]\n )\n\n /**\n * Delete a message\n * @param messageId The ID of the message\n */\n const deleteMessage = useCallback(\n async (messageId: number): Promise<DeleteMessageResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.deleteMessage(messageId)\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: prev.messages.filter((item) => item.id !== messageId)\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to delete message')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, conversationUid]\n )\n\n const updatePreferences = useCallback(\n async (enableRead: boolean): Promise<boolean> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return false\n }\n\n setError(null)\n try {\n const response = await api.updateClientPreferences({\n preferences: { enable_read: enableRead }\n })\n setPreferences(response.preferences)\n return true\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to update preferences')\n setError(error)\n return false\n }\n },\n [api]\n )\n\n // Refresh messages when connection is established\n useEffect(() => {\n if (conversationUid) {\n getMessages()\n }\n }, [isConnected, conversationUid])\n\n // Handle realtime message events\n const handleMessageEvent = useCallback(\n (eventType: EventType, data: any) => {\n // Only process events for the current conversation\n if (\n !conversationUid ||\n (data.conversation_uid && data.conversation_uid !== conversationUid)\n ) {\n return\n }\n\n setMessages((prev) => {\n if (!prev) return prev\n\n switch (eventType) {\n case EventType.MessageSent: {\n const sentEvent = data as MessageSentEvent\n // Create a new message object from the event data\n\n // Check if the message already exists\n const messageExists = prev.messages.some(\n (msg) => msg.id === sentEvent.id\n )\n if (messageExists) {\n return prev\n }\n\n console.log('arrived event', eventType)\n\n // Add the new message to the state and sort by sent_at (latest first)\n return {\n ...prev,\n messages: [\n ...prev.messages,\n sentEvent as unknown as Message\n ].sort(\n (a, b) =>\n new Date(b.sent_at).getTime() - new Date(a.sent_at).getTime()\n )\n }\n }\n\n case EventType.MessageEdited: {\n const editEvent = data as MessageEditedEvent\n // Update the existing message with new content\n return {\n ...prev,\n messages: prev.messages.map((msg) =>\n msg.id === editEvent.msg_id\n ? {\n ...msg,\n message: editEvent.new_content,\n attachments: editEvent.new_attachments || msg.attachments\n }\n : msg\n )\n }\n }\n\n case EventType.MessageDeleted: {\n const deleteEvent = data as MessageDeletedEvent\n // Remove the deleted message from the state\n return {\n ...prev,\n messages: prev.messages.filter(\n (msg) => msg.id !== deleteEvent.msg_id\n )\n }\n }\n\n case EventType.MessageRead: {\n const readEvent = data as MessageReadEvent\n // Update the is_read status of the specific message\n return {\n ...prev,\n messages: prev.messages.map((msg) =>\n msg.id === readEvent.message_id\n ? { ...msg, is_read: true }\n : msg\n )\n }\n }\n\n case EventType.ConversationRead: {\n const conversationReadEvent = data as ConversationReadEvent\n // Update the is_read status of all messages in the message_ids array\n return {\n ...prev,\n messages: prev.messages.map((msg) =>\n conversationReadEvent.message_ids.includes(msg.id)\n ? { ...msg, is_read: true }\n : msg\n )\n }\n }\n\n default:\n return prev\n }\n })\n },\n [conversationUid, profile]\n )\n\n const sendReceivedEvent = useCallback(\n (eventType: EventType, data: any) => {\n if (eventType === EventType.MessageSent) {\n const messageReceivedEvent: RealtimeEvent = {\n type: EventType.MessageReceived,\n data: data\n }\n\n connection!.emit(messageReceivedEvent.type, messageReceivedEvent.data)\n }\n },\n [connection]\n )\n const eventProcessorPipeline = useCallback(\n (eventType: EventType, data: any) => {\n markConversationAsRead(conversationUid);\n handleMessageEvent(eventType, data)\n // sendReceivedEvent(eventType, data)\n },\n [handleMessageEvent, conversationUid, sendReceivedEvent,preferences]\n )\n\n // Subscribe to all message events\n useAllMessageEvents(eventProcessorPipeline)\n\n return {\n messages: messages?.messages || [],\n pagination: messages?.pagination,\n loading,\n error,\n queueLength,\n getMessages,\n markMessageAsRead,\n sendMessage,\n markConversationAsRead,\n updateMessage,\n deleteMessage,\n setMessages,\n updatePreferences,\n preferences\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { FileUploadResponse } from '../types'\n\n/**\n * Hook for managing file uploads\n */\nexport const useFiles = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [uploadProgress, setUploadProgress] = useState<number>(0)\n\n /**\n * Upload a file\n * @param file The file to upload\n */\n const uploadFile = useCallback(\n async (file: File): Promise<FileUploadResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n setUploadProgress(0)\n\n try {\n // In a real implementation, we would use axios's progress event\n // to track upload progress, but for simplicity we'll just simulate it\n const simulateProgress = () => {\n let progress = 0\n const interval = setInterval(() => {\n progress += 10\n if (progress > 90) {\n clearInterval(interval)\n } else {\n setUploadProgress(progress)\n }\n }, 300)\n\n return () => clearInterval(interval)\n }\n\n const cleanup = simulateProgress()\n\n const response = await api.uploadFile(file)\n\n // Clean up the progress simulation\n cleanup()\n\n // Set to 100% when done\n setUploadProgress(100)\n\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to upload file')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n loading,\n error,\n uploadProgress,\n uploadFile\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport type { Conversation } from '../types'\n\n/**\n * Hook to get conversation details with a specific receiver\n * @returns Functions and state for working with conversation details\n */\nexport const useConversationDetails = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [conversationDetails, setConversationDetails] = useState<Conversation | null>(null)\n const [receiverId, setReceiverId] = useState<string | null>(null)\n\n /**\n * Get conversation details with a specific receiver\n * @param receiverId The ID of the receiver\n * @returns A promise that resolves to conversation details and receiver ID\n */\n const getConversationWithReceiver = useCallback(\n async (receiverId: string): Promise<{ details: Conversation | null; receiverId: string }> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return { details: null, receiverId }\n }\n\n setLoading(true)\n setError(null)\n try {\n const details = await api.getConversationWithReceiver(receiverId)\n setConversationDetails(details)\n setReceiverId(receiverId)\n return { details, receiverId }\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to get conversation details')\n setError(error)\n return { details: null, receiverId }\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n conversationDetails,\n receiverId,\n loading,\n error,\n getConversationWithReceiver\n }\n}\n\n","import { useState, useEffect, useMemo, useCallback } from 'react'\nimport { useConversations } from './useConversations'\nimport { Conversation } from '../types'\n\nexport function useConversationManagement() {\n const [selectedConversationId, setSelectedConversationId] =\n useState<string>('')\n\n const {\n conversations,\n loading: conversationsLoading,\n getConversations,\n deleteConversation,\n unarchiveConversation,\n archiveConversation,\n setConversations\n } = useConversations()\n\n // Selected conversation\n const selectedConversation = useMemo(() => {\n return conversations.find(\n (conversation) => conversation.id === selectedConversationId\n )\n }, [conversations, selectedConversationId])\n\n // Load conversations on hook initialization\n useEffect(() => {\n getConversations()\n }, [getConversations])\n\n // Handle conversation selection\n const handleSelectConversation = useCallback(\n (conversation: Conversation | null) => {\n if (conversation === null) {\n setSelectedConversationId('');\n return;\n }\n setSelectedConversationId(conversation.id)\n setConversations((prevState: Conversation[]) =>\n prevState.map((item) =>\n item.id === conversation.id\n ? {\n ...conversation,\n unreadCount: 0\n }\n : item\n )\n )\n },\n [setConversations]\n )\n\n return {\n conversations,\n conversationsLoading,\n selectedConversationId,\n selectedConversation,\n deleteConversation,\n archiveConversation,\n unarchiveConversation,\n handleSelectConversation,\n getConversations\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport {\n ApiResponse,\n BanClientRequest,\n UnbanClientRequest,\n AdminBanClientRequest,\n AdminUnbanClientRequest,\n BanStatusResponse\n} from '../types'\n\n/**\n * Hook for managing client bans\n */\nexport const useBans = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [banStatus, setBanStatus] = useState<BanStatusResponse | null>(null)\n\n /**\n * Ban a client from communicating with the requesting client\n * @param clientId The client ID of the client to ban\n */\n const banClient = useCallback(\n async (clientId: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: BanClientRequest = { client_id: clientId }\n const response = await api.banClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to ban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Unban a client that was previously banned by the requesting client\n * @param clientId The client ID of the client to unban\n */\n const unbanClient = useCallback(\n async (clientId: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: UnbanClientRequest = { client_id: clientId }\n const response = await api.unbanClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to unban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Ban a client as an admin\n * @param clientId The client ID of the client to ban\n * @param reason The reason for the ban (optional)\n * @param durationDays The duration of the ban in days (optional)\n */\n const adminBanClient = useCallback(\n async (\n clientId: string,\n reason?: string,\n durationDays?: number\n ): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: AdminBanClientRequest = {\n client_id: clientId,\n reason,\n duration_days: durationDays\n }\n const response = await api.adminBanClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to admin ban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Unban a client that was previously banned by an admin\n * @param clientId The client ID of the client to unban\n */\n const adminUnbanClient = useCallback(\n async (clientId: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: AdminUnbanClientRequest = { client_id: clientId }\n const response = await api.adminUnbanClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to admin unban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Check if a client is banned by the requesting client or by an admin\n * @param clientId The client ID to check the ban status for\n */\n const checkBanStatus = useCallback(\n async (clientId: string): Promise<BanStatusResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.checkBanStatus(clientId)\n setBanStatus(response)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to check ban status')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n loading,\n error,\n banStatus,\n banClient,\n unbanClient,\n adminBanClient,\n adminUnbanClient,\n checkBanStatus\n }\n}\n","import { useEffect, useState, useCallback } from 'react'\nimport { useMessages } from './useMessages'\nimport {\n Message,\n SenderReceiverUser,\n useAllMessageEvents,\n useClientProfile,\n useFiles\n} from '../index'\n\nexport function useMessageManagement(selectedConversationId: string) {\n const [page, setPage] = useState(1)\n const [hasMore, setHasMore] = useState(true)\n const { profile } = useClientProfile()\n const {\n messages,\n loading: messagesLoading,\n sendMessage,\n getMessages,\n markConversationAsRead,\n deleteMessage,\n updateMessage,\n setMessages,\n preferences,\n updatePreferences\n } = useMessages(selectedConversationId)\n\n const { messageSent, messageEdited, messageDeleted, clearEvents } =\n useAllMessageEvents()\n\n const { uploadFile, loading: fileLoading, uploadProgress } = useFiles()\n\n // Reset pagination when conversation changes\n useEffect(() => {\n setPage(1)\n setHasMore(true)\n }, [selectedConversationId])\n\n // Mark conversation as read when conversation changes\n useEffect(() => {\n if (selectedConversationId) {\n markConversationAsRead()\n }\n }, [selectedConversationId, markConversationAsRead])\n\n // Handle real-time message events\n useEffect(() => {\n if (messageSent || messageEdited || messageDeleted) {\n // Refresh messages when events occur\n clearEvents()\n }\n }, [messageSent, messageEdited, messageDeleted, clearEvents])\n\n // Function to load more messages (previous messages)\n const loadMoreMessages = useCallback(async () => {\n if (messagesLoading || !hasMore) return\n\n try {\n const nextPage = page + 1\n // Assuming getMessages accepts pagination parameters\n const result = await getMessages(selectedConversationId, nextPage)\n // If no more messages or empty result, set hasMore to false\n if (!result || result.messages.length === 0) {\n setHasMore(false)\n } else {\n setPage(nextPage)\n }\n } catch (error) {\n console.error('Failed to load more messages:', error)\n setHasMore(false)\n }\n }, [messagesLoading, hasMore, getMessages, page, selectedConversationId])\n\n // Function to send a text message\n const handleSendMessage = useCallback(\n async (content: string, receiver: SenderReceiverUser) => {\n if (!content.trim() || !selectedConversationId || !profile) return\n\n const tempMessageId = `temp-${Date.now()}`\n const newMessage = {\n attachments: [],\n conversation_uid: tempMessageId,\n sent_at: new Date().toISOString().replace('Z', '000'),\n message: content.trim(),\n messageType: 0,\n sender: profile! as SenderReceiverUser,\n receiver: receiver,\n is_read: false,\n status: 'sending'\n } as unknown as Message\n\n setMessages((prevMessages: any) => {\n const prevMessageArray = prevMessages?.messages || []\n return {\n ...prevMessages,\n messages: [newMessage, ...prevMessageArray]\n }\n })\n\n try {\n const success = await sendMessage({\n receiver_client_id: receiver.id,\n content: content,\n conversation_uid: selectedConversationId\n })\n\n if (!success) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? { ...msg, status: 'failed' }\n : msg\n )\n }))\n return false\n } else {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? {\n ...msg,\n status: 'sent',\n id: success.message.id,\n is_read: success.message.is_read\n }\n : msg\n )\n }))\n return true\n }\n } catch (error) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).filter(\n (msg: any) => msg.conversation_uid !== tempMessageId\n )\n }))\n console.error('Failed to send message:', error)\n return false\n }\n },\n [sendMessage, selectedConversationId, profile?.id, setMessages]\n )\n\n // Function to send a file message\n const handleSendFileMessage = useCallback(\n async (\n content: string,\n fileId: number,\n receiver: SenderReceiverUser,\n filename?: string,\n url?: string\n ) => {\n if (!selectedConversationId) return\n\n const tempMessageId = `temp-file-${Date.now()}`\n\n const newMessage = {\n attachments: [{ filename, url, id: fileId }],\n conversation_uid: tempMessageId,\n sent_at: new Date().toISOString().replace('Z', '000'),\n message: content,\n messageType: 0,\n sender: profile,\n receiver: receiver,\n is_read: false,\n status: 'sending'\n }\n\n setMessages((prevMessages: any) => {\n const prevMessageArray = prevMessages?.messages || []\n return {\n ...prevMessages,\n messages: [newMessage, ...prevMessageArray]\n }\n })\n\n try {\n const success = await sendMessage({\n receiver_client_id: receiver.id,\n content: content,\n attachments: [fileId],\n conversation_uid: selectedConversationId\n })\n\n if (success) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? {\n ...msg,\n status: 'sent',\n id: success.message.id,\n is_read: success.message.is_read\n }\n : msg\n )\n }))\n return true\n } else {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? { ...msg, status: 'failed' }\n : msg\n )\n }))\n return false\n }\n } catch (error) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).filter(\n (msg: any) => msg.conversation_uid !== tempMessageId\n )\n }))\n console.error('Failed to send file message:', error)\n return false\n }\n },\n [sendMessage, selectedConversationId, profile?.id, setMessages]\n )\n\n return {\n messages,\n messagesLoading,\n fileLoading,\n uploadProgress,\n uploadFile,\n handleSendMessage,\n handleSendFileMessage,\n deleteMessage,\n updateMessage,\n getMessages,\n loadMoreMessages,\n hasMore,\n setMessages,\n preferences,\n updatePreferences\n }\n}\n","import { useCallback, useRef } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport { EventType, RealtimeEvent } from '../types'\n\n// Type for custom event listeners\ntype CustomEventListener<T = any> = (data: T) => void\n\n// Type for the custom events map\ntype CustomEventsMap = Map<string, CustomEventListener[]>\n\n/**\n * Hook for managing custom events\n * \n * @returns Object with methods to register, unregister, and emit custom events\n */\nexport function useCustomEvents() {\n const { on, off, connection } = useConnectionContext()\n const customEventsRef = useRef<CustomEventsMap>(new Map())\n \n // Register a custom event listener\n const registerCustomEventListener = useCallback(\n <T = any>(key: string, eventType: EventType, callback: CustomEventListener<T>) => {\n // Store the callback in our custom events map\n if (!customEventsRef.current.has(key)) {\n customEventsRef.current.set(key, [])\n }\n customEventsRef.current.get(key)!.push(callback as CustomEventListener)\n \n // Register with the connection manager\n const eventHandler = (event: RealtimeEvent<T>) => {\n const listeners = customEventsRef.current.get(key)\n if (listeners) {\n listeners.forEach(listener => {\n try {\n listener(event.data)\n } catch (err) {\n console.error(`Error in custom event listener ${key}:`, err)\n }\n })\n }\n }\n \n on(eventType, eventHandler as (event: RealtimeEvent) => void)\n \n // Return unregister function\n return () => {\n // Remove from our custom events map\n const listeners = customEventsRef.current.get(key)\n if (listeners) {\n const index = listeners.indexOf(callback as CustomEventListener)\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n \n // Unregister from connection manager\n off(eventType, eventHandler as (event: RealtimeEvent) => void)\n }\n },\n [on, off]\n )\n \n // Unregister a specific custom event listener\n const unregisterCustomEventListener = useCallback(\n (key: string, callback: CustomEventListener) => {\n const listeners = customEventsRef.current.get(key)\n if (listeners) {\n const index = listeners.indexOf(callback)\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n },\n []\n )\n \n // Unregister all custom event listeners for a key\n const unregisterAllCustomEventListeners = useCallback(\n (key: string) => {\n customEventsRef.current.delete(key)\n },\n []\n )\n \n // Emit a custom event\n const emitCustomEvent = useCallback(\n (eventType: EventType, data: any) => {\n if (connection) {\n connection.emit(eventType, data)\n }\n },\n [connection]\n )\n \n return {\n registerCustomEventListener,\n unregisterCustomEventListener,\n unregisterAllCustomEventListeners,\n emitCustomEvent\n }\n}\n","import { useCallback } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport { LogLevel, LoggerConfig } from '../utils/Logger'\n\nexport interface UseLoggingReturn {\n enableLogging: (level?: LogLevel) => void\n disableLogging: () => void\n setLogLevel: (level: LogLevel) => void\n updateLoggingConfig: (config: Partial<LoggerConfig>) => void\n getLoggingConfig: () => LoggerConfig | null\n}\n\nexport function useLogging(): UseLoggingReturn {\n const { updateLogging, getLoggingConfig } = useConnectionContext()\n\n const enableLogging = useCallback(\n (level: LogLevel = LogLevel.INFO) => {\n updateLogging({\n enabled: true,\n level\n })\n },\n [updateLogging]\n )\n\n const disableLogging = useCallback(() => {\n updateLogging({\n enabled: false\n })\n }, [updateLogging])\n\n const setLogLevel = useCallback(\n (level: LogLevel) => {\n updateLogging({\n level\n })\n },\n [updateLogging]\n )\n\n const updateLoggingConfig = useCallback(\n (config: Partial<LoggerConfig>) => {\n updateLogging(config)\n },\n [updateLogging]\n )\n\n return {\n enableLogging,\n disableLogging,\n setLogLevel,\n updateLoggingConfig,\n getLoggingConfig\n }\n}","import * as React from 'react'\nimport { ChatProvider } from './context/ChatContext'\nimport { ConnectionOptions } from './types'\nimport { useAllMessageEvents as useAllMessageEventsHook } from './hooks/useRealtime'\n\n// Export types\nexport * from './types'\n\n// Export logging utilities\nexport { LogLevel } from './utils/Logger'\nexport type { LoggerConfig } from './utils/Logger'\n\n// Export API client\nexport { ChatApi } from './api/chatApi'\n\n// Export context\nexport { ChatProvider, useChatContext } from './context/ChatContext'\n\n// Export hooks\nexport { useConversations } from './hooks/useConversations'\nexport { useMessages } from './hooks/useMessages'\nexport { useFiles } from './hooks/useFiles'\nexport { useConnection } from './hooks/useConnection'\nexport { useClientProfile } from './hooks/useClientProfile'\nexport { useConversationDetails } from './hooks/useConversationDetails'\nexport type {\n Message,\n Conversation,\n MessagesPagination,\n MessagesResponse,\n ConnectionOptions,\n ClientProfileResponse\n} from './types'\nexport {\n useRealtime,\n useMessageSentEvents,\n useMessageEditedEvents,\n useMessageDeletedEvents\n} from './hooks/useRealtime'\n\nexport { useConversationManagement } from './hooks/useConversationManagements'\nexport {useBans} from './hooks/useBans'\nexport { useMessageManagement } from './hooks/useMessageManagements'\nexport { useCustomEvents } from './hooks/useCustomEvents'\nexport { useLogging } from './hooks/useLogging'\n// Export useAllMessageEvents directly\nexport const useAllMessageEvents = useAllMessageEventsHook\n\n// Main component that wraps the ChatProvider\ninterface ChatClientProps {\n children: React.ReactNode\n token?: string\n baseUrl?: string\n socketBaseUrl?: string\n connectionOptions?: ConnectionOptions\n client_id: string\n}\n\nexport const ChatClient: React.FC<ChatClientProps> = ({\n children,\n token,\n client_id,\n baseUrl = 'https://api.example.com',\n socketBaseUrl = 'wss://api.example.com',\n connectionOptions\n}) => {\n const config = React.useMemo(() => {\n if (token) {\n return { token, baseUrl, client_id, socketBaseUrl }\n }\n return undefined\n }, [token, baseUrl, client_id])\n\n return (\n <ChatProvider config={config} connectionOptions={connectionOptions}>\n {children}\n </ChatProvider>\n )\n}\n"],"names":["ChatApi","config","client","axios","create","baseURL","baseUrl","headers","Authorization","token","client_id","_proto","prototype","healthCheck","Promise","resolve","_this","get","then","response","data","e","reject","listConversations","archived","clientIds","params","undefined","String","client_ids","_this2","deleteConversation","conversationUid","_this3","archiveConversation","_this4","post","unarchiveConversation","_this5","getConversationDetails","_this6","getConversationWithReceiver","receiverId","_this7","searchConversation","term","_this8","getMessages","page","pageSize","_this9","page_size","markMessageAsRead","messageId","_this0","sendMessage","message","_this1","markConversationAsRead","_this10","updateMessage","update","_this11","put","deleteMessage","_this12","uploadFile","file","formData","FormData","append","_this13","banClient","request","_this14","unbanClient","_this15","adminBanClient","_this16","adminUnbanClient","_this17","checkBanStatus","clientId","_this18","getClientProfile","_this19","getClientPreferences","_this20","updateClientPreferences","_this21","ConnectionType","ConnectionStatus","EventType","LogLevel","Logger","_extends","enabled","level","INFO","prefix","timestamp","includeData","prettyPrint","shouldLog","formatMessage","parts","push","Date","toISOString","join","formatData","cloned","JSON","parse","stringify","maskSensitiveData","err","_data$constructor","constructor","name","obj","sensitiveKeys","_loop","lowerKey","key","toLowerCase","some","sensitive","includes","debug","DEBUG","formatted","formattedData","console","log","info","warn","WARN","error","ERROR","group","label","groupEnd","time","timeEnd","updateConfig","getConfig","DEFAULT_CONFIG","type","WebSocket","autoReconnect","reconnectAttempts","reconnectDelay","logging","onlyLongpolling","degradeWsOnFailure","wsFailureThreshold","wsDegradeTTLms","forceWebSocket","QUEUE_KEY","ConnectionManager","auth","api","options","Disconnected","Map","cfg","logger","loggingEnabled","_this$cfg$logging","window","saved","sessionStorage","getItem","_this$queue","parsed","queue","apply","count","length","degradeUntil","getDegradeUntil","now","isDegraded","clearDegradation","wsFailCount","getFailCount","getInstance","instance","resetInstance","disconnect","connect","status","Connected","Connecting","connecting","socketUrl","socketBaseUrl","setStatus","connectWS","clearTimers","_this$socket","socket","getStatus","queueMessage","msg","maxAttempts","id","crypto","randomUUID","Math","random","toString","queuedMessage","attempts","receiver","receiver_client_id","hasContent","content","hasAttachments","attachments","saveQueue","processQueue","on","evt","cb","add","eventListeners","off","remove","emit","args","Array","_len","_key","arguments","event","_this$socket2","concat","onStatusChange","statusListeners","offStatusChange","i","indexOf","splice","onError","errorListeners","offError","updateLogging","getLoggingConfig","url","hasExistingSocket","degraded","removeAllListeners","socketOpts","buildSocketOpts","io","manager","engine","transport","resetWsFailures","onWsFailure","wiringErr","socketId","reconnectCount","handleConnError","reason","willReconnect","scheduleReconnect","latency","Object","values","forEach","handleEvent","events","isBrowser","transports","LongPolling","opts","reconnection","rememberUpgrade","timeout","extraAuth","upgrade","transportOptions","polling","extraHeaders","websocket","query","entries","_ref","value","hasExtraAuth","hasHeaders","errorType","Error","listenerErr","processingQueue","remainingMessages","setTimeout","_interrupt","queueLength","_temp2","_for","q","attempt","age","_temp","_catch","sendMessageHttp","shift","_temp3","listeners","listenerCount","hasData","index","listenerIndex","s","oldStatus","from","to","delayMs","setItem","m","k","has","set","arr","storageAvailable","testKey","localStorage","removeItem","_unused","failKey","untilKey","v","parseInt","setFailCount","n","_unused2","setDegradeUntil","ts","_unused3","_unused4","current","threshold","ttl","until","defaultContext","connection","ConnectionContext","createContext","ConnectionProvider","children","authConfig","connectionOptions","_ref$autoConnect","autoConnect","_useState","useState","setConnection","_useState2","useEffect","newConnection","useCallback","eventType","callback","useMemo","React","Provider","useConnectionContext","useContext","isInitialized","isAuthenticated","initialize","conversations","refreshConversations","setConversations","ChatContext","ChatProvider","setApi","setIsInitialized","_useState3","setIsAuthenticated","_useState4","chatApi","_exit","useChatContext","useRealtime","_useConnectionContext","setEvent","newEvent","clearEvent","useMessageSentEvents","MessageSent","useMessageEditedEvents","MessageEdited","useMessageDeletedEvents","MessageDeleted","useMessageReadEvents","MessageRead","useConversationReadEvents","ConversationRead","useAllMessageEvents","_useMessageSentEvents","messageSent","clearMessageSent","_useMessageEditedEven","messageEdited","clearMessageEdited","_useMessageDeletedEve","messageDeleted","clearMessageDeleted","_useMessageReadEvents","messageRead","clearMessageRead","_useConversationReadE","conversationRead","clearConversationRead","clearEvents","useConversations","_useChatContext","loading","setLoading","setError","eventProcessorPipeline","getConversations","_finallyRethrows","_wasThrown","_result","_wasThrown2","_result2","_wasThrown3","_result3","_wasThrown4","_result4","_wasThrown5","_result5","_wasThrown6","_result6","useConnection","connectToServer","disconnectFromServer","isConnected","isConnecting","hasError","QUEUE_STORAGE_KEY","MAX_RETRY_TIME","DEFAULT_MAX_ATTEMPTS","RETRY_DELAY","useQueue","setQueue","isProcessing","setIsProcessing","storedQueue","parsedQueue","validQueue","filter","item","enqueueMessage","substr","prevQueue","currentMessage","slice","updatedMessage","sendMessageWithRetry","useClientProfile","profile","setProfile","fetchProfile","useMessages","_useClientProfile","messages","setMessages","preferences","setPreferences","_useConnection","_useQueue","fetchPreferences","clearDuplicateMessages","uniqueMessages","conversationId","prev","pagination","messageWithConversation","conversation_uid","_prev$messages","map","is_read","updatePreferences","enableRead","enable_read","handleMessageEvent","sentEvent","messageExists","sort","a","b","sent_at","getTime","editEvent","msg_id","new_content","new_attachments","deleteEvent","readEvent","message_id","conversationReadEvent","message_ids","sendReceivedEvent","messageReceivedEvent","MessageReceived","useFiles","uploadProgress","setUploadProgress","simulateProgress","progress","interval","setInterval","clearInterval","cleanup","useConversationDetails","conversationDetails","setConversationDetails","setReceiverId","details","useConversationManagement","selectedConversationId","setSelectedConversationId","_useConversations","conversationsLoading","selectedConversation","find","conversation","handleSelectConversation","prevState","unreadCount","useBans","banStatus","setBanStatus","durationDays","duration_days","useMessageManagement","setPage","hasMore","setHasMore","_useMessages","messagesLoading","_useAllMessageEvents","_useFiles","fileLoading","loadMoreMessages","nextPage","result","handleSendMessage","trim","tempMessageId","newMessage","replace","messageType","sender","prevMessages","prevMessageArray","success","handleSendFileMessage","fileId","filename","useCustomEvents","customEventsRef","useRef","registerCustomEventListener","eventHandler","listener","unregisterCustomEventListener","unregisterAllCustomEventListeners","emitCustomEvent","useLogging","enableLogging","disableLogging","setLogLevel","updateLoggingConfig","useAllMessageEventsHook","ChatClient","_ref$baseUrl","_ref$socketBaseUrl"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","../src/api/chatApi.ts","../src/types.ts","../src/utils/Logger.ts","../src/connection/ConnectionManager.ts","../src/context/ConnectionContext.tsx","../src/context/ChatContext.tsx","../src/hooks/useRealtime.ts","../src/hooks/useConversations.ts","../src/hooks/useConnection.ts","../src/hooks/useQueue.ts","../src/hooks/useClientProfile.ts","../src/hooks/useMessages.ts","../src/hooks/useFiles.ts","../src/hooks/useConversationDetails.ts","../src/hooks/useConversationManagements.ts","../src/hooks/useBans.ts","../src/hooks/useMessageManagements.ts","../src/hooks/useCustomEvents.ts","../src/hooks/useLogging.ts","../src/index.tsx"],"sourcesContent":["// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport {\n AuthConfig,\n Conversation,\n ConversationSearchResult,\n MessagesResponse,\n SendMessageRequest,\n SendMessageResponse,\n MarkConversationReadResponse,\n UpdateMessageRequest,\n UpdateMessageResponse,\n DeleteMessageResponse,\n FileUploadResponse,\n ApiResponse,\n BanClientRequest,\n UnbanClientRequest,\n AdminBanClientRequest,\n AdminUnbanClientRequest,\n BanStatusResponse,\n ClientProfileResponse,\n ClientPreferencesResponse,\n UpdatePreferencesRequest,\n UpdatePreferencesResponse,\n RemainingLimitResponse\n} from '../types'\n\n/**\n * Chat API client for making requests to the chat backend\n */\nexport class ChatApi {\n private client: AxiosInstance\n\n /**\n * Create a new ChatApi instance\n * @param config Authentication configuration\n */\n constructor(config: AuthConfig) {\n this.client = axios.create({\n baseURL: config.baseUrl,\n headers: {\n Authorization: `Bearer ${config.token}`,\n 'Content-Type': 'application/json',\n 'x-requesting-client-id': config.client_id\n }\n })\n }\n\n /**\n * Check if the API is running\n * @returns A promise that resolves to \"OK\" if the API is running\n */\n async healthCheck(): Promise<string> {\n const response = await this.client.get('/api/health')\n return response.data\n }\n\n // Conversation endpoints\n\n /**\n * Get a list of conversations\n * @param archived Whether to include archived conversations\n * @param clientId Filter conversations by client ID\n * @returns A promise that resolves to an array of conversations\n */\n async listConversations(\n archived?: boolean,\n clientIds?: string\n ): Promise<Conversation[]> {\n const params: Record<string, string> = {}\n if (archived !== undefined) params.archived = String(archived)\n if (clientIds) params.client_ids = clientIds\n\n const response = await this.client.get('/api/chat/conversations', {\n params\n })\n return response.data\n }\n\n /**\n * Delete a conversation\n * @param conversationUid The UID of the conversation to delete\n * @returns A promise that resolves to an API response\n */\n async deleteConversation(conversationUid: string): Promise<ApiResponse> {\n const response = await this.client.delete(\n `/api/chat/conversations/${conversationUid}/delete`\n )\n return response.data\n }\n\n /**\n * Archive a conversation\n * @param conversationUid The UID of the conversation to archive\n * @returns A promise that resolves to an API response\n */\n async archiveConversation(conversationUid: string): Promise<ApiResponse> {\n const response = await this.client.post(\n `/api/chat/conversations/${conversationUid}/archive`\n )\n return response.data\n }\n\n /**\n * Unarchive a conversation\n * @param conversationUid The UID of the conversation to unarchive\n * @returns A promise that resolves to an API response\n */\n async unarchiveConversation(conversationUid: string): Promise<ApiResponse> {\n const response = await this.client.post(\n `/api/chat/conversations/${conversationUid}/unarchive`\n )\n return response.data\n }\n\n /**\n * Get details about a conversation\n * @param conversationUid The UID of the conversation\n * @returns A promise that resolves to conversation details\n */\n async getConversationDetails(conversationUid: string): Promise<Conversation> {\n const response = await this.client.get(\n `/api/chat/conversations/${conversationUid}/details`\n )\n return response.data\n }\n\n /**\n * Get conversation details with a specific receiver\n * @param receiverId The ID of the receiver\n * @returns A promise that resolves to conversation details\n */\n async getConversationWithReceiver(receiverId: string): Promise<Conversation> {\n const response = await this.client.get(\n `/api/chat/conversations/with/${receiverId}`\n )\n return response.data\n }\n\n /**\n * Search for messages in a conversation\n * @param conversationUid The UID of the conversation\n * @param term The search term\n * @returns A promise that resolves to search results\n */\n async searchConversation(\n conversationUid: string,\n term: string\n ): Promise<ConversationSearchResult> {\n const response = await this.client.get(\n `/api/chat/conversations/${conversationUid}/search`,\n {\n params: { term }\n }\n )\n return response.data\n }\n\n // Message endpoints\n\n /**\n * Get messages for a conversation\n * @param conversationUid The UID of the conversation\n * @param page The page number\n * @param pageSize The number of messages per page\n * @returns A promise that resolves to a messages response\n */\n async getMessages(\n conversationUid: string,\n page = 1,\n pageSize = 20\n ): Promise<MessagesResponse> {\n const response = await this.client.get(\n `/api/messages/${conversationUid}/list`,\n {\n params: { page, page_size: pageSize }\n }\n )\n return response.data\n }\n\n /**\n * Mark a message as read\n * @param messageId The ID of the message\n * @returns A promise that resolves to an API response\n */\n async markMessageAsRead(messageId: number): Promise<ApiResponse> {\n const response = await this.client.post(`/api/messages/${messageId}/read`)\n return response.data\n }\n\n /**\n * Send a message\n * @param message The message to send\n * @returns A promise that resolves to a send message response\n */\n async sendMessage(message: SendMessageRequest): Promise<SendMessageResponse> {\n const config: AxiosRequestConfig = {}\n\n if (message.isAppointment) {\n config.headers = {\n 'x-disable-limit': true\n }\n }\n\n const response = await this.client.post(\n '/api/messages/send-message',\n message,\n config\n )\n return response.data\n }\n\n /**\n * Mark all messages in a conversation as read\n * @param conversationUid The UID of the conversation\n * @returns A promise that resolves to a mark conversation read response\n */\n async markConversationAsRead(\n conversationUid: string\n ): Promise<MarkConversationReadResponse> {\n const response = await this.client.post(\n `/api/messages/conversation/${conversationUid}/read`\n )\n return response.data\n }\n\n /**\n * Update a message\n * @param messageId The ID of the message\n * @param update The update to apply\n * @returns A promise that resolves to an update message response\n */\n async updateMessage(\n messageId: number,\n update: UpdateMessageRequest\n ): Promise<UpdateMessageResponse> {\n const response = await this.client.put(`/api/messages/${messageId}`, update)\n return response.data\n }\n\n /**\n * Delete a message\n * @param messageId The ID of the message\n * @returns A promise that resolves to a delete message response\n */\n async deleteMessage(messageId: number): Promise<DeleteMessageResponse> {\n const response = await this.client.delete(`/api/messages/${messageId}`)\n return response.data\n }\n\n /**\n * Get remaining message limit\n * @param params Query with receiver_client_id or conversation_uid\n * @returns A promise that resolves to a remaining limit response\n */\n async getRemainingLimit(params: {\n receiver_client_id?: string\n conversation_uid?: string\n }): Promise<RemainingLimitResponse> {\n const response = await this.client.get('/api/messages/remaining-limit', {\n params\n })\n return response.data\n }\n\n /**\n * Upload a file\n * @param file The file to upload\n * @returns A promise that resolves to a file upload response\n */\n async uploadFile(file: File): Promise<FileUploadResponse> {\n const formData = new FormData()\n formData.append('file', file)\n\n const config: AxiosRequestConfig = {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n\n const response = await this.client.post(\n '/api/files/upload',\n formData,\n config\n )\n return response.data\n }\n\n /**\n * Ban a client from communicating with the requesting client\n * @param request The ban client request\n * @returns A promise that resolves to an API response\n */\n async banClient(request: BanClientRequest): Promise<ApiResponse> {\n const response = await this.client.post('/api/bans/client', request)\n return response.data\n }\n\n /**\n * Unban a client that was previously banned by the requesting client\n * @param request The unban client request\n * @returns A promise that resolves to an API response\n */\n async unbanClient(request: UnbanClientRequest): Promise<ApiResponse> {\n const response = await this.client.delete('/api/bans/client', {\n data: request\n })\n return response.data\n }\n\n /**\n * Ban a client as an admin\n * @param request The admin ban client request\n * @returns A promise that resolves to an API response\n */\n async adminBanClient(request: AdminBanClientRequest): Promise<ApiResponse> {\n const response = await this.client.post('/api/bans/admin', request)\n return response.data\n }\n\n /**\n * Unban a client that was previously banned by an admin\n * @param request The admin unban client request\n * @returns A promise that resolves to an API response\n */\n async adminUnbanClient(\n request: AdminUnbanClientRequest\n ): Promise<ApiResponse> {\n const response = await this.client.delete('/api/bans/admin', {\n data: request\n })\n return response.data\n }\n\n\n /**\n * Check if a client is banned by the requesting client or by an admin\n * @param clientId The client ID to check the ban status for\n * @returns A promise that resolves to a ban status response\n */\n async checkBanStatus(clientId: string): Promise<BanStatusResponse> {\n const response = await this.client.get(`/api/bans/status/${clientId}`)\n return response.data\n }\n\n /**\n * Get the profile information of the authenticated client\n * @returns A promise that resolves to a client profile response\n */\n async getClientProfile(): Promise<ClientProfileResponse> {\n const response = await this.client.get('/api/clients/profile')\n return response.data\n }\n\n /**\n * Get the preferences of the authenticated client\n * @returns A promise that resolves to a client preferences response\n */\n async getClientPreferences(): Promise<ClientPreferencesResponse> {\n const response = await this.client.get('/api/clients/preferences')\n return response.data\n }\n\n /**\n * Update client preferences\n * @param request The update preferences request\n * @returns A promise that resolves to an update preferences response\n */\n async updateClientPreferences(\n request: UpdatePreferencesRequest\n ): Promise<UpdatePreferencesResponse> {\n const response = await this.client.put('/api/clients/preferences', request)\n return response.data\n }\n\n\n}\n","/**\n * Type definitions for the Chat API\n */\n\nimport { LoggerConfig } from './utils/Logger'\n\n// Connection Types\nexport enum ConnectionType {\n WebSocket = 'websocket',\n LongPolling = 'longpolling'\n}\n\nexport enum ConnectionStatus {\n Connected = 'connected',\n Connecting = 'connecting',\n Disconnected = 'disconnected',\n Error = 'error'\n}\n\nexport interface ConnectionConfig {\n type: ConnectionType\n autoReconnect: boolean\n reconnectAttempts: number\n reconnectDelay: number\n logging?: Partial<LoggerConfig>\n onlyLongpolling?: boolean\n // When enabled, after N websocket failures we degrade to long-polling for TTL\n degradeWsOnFailure?: boolean\n // Number of websocket upgrade/connect failures before degrading\n wsFailureThreshold?: number\n // Time to remain in degraded (polling-only) mode in ms\n wsDegradeTTLms?: number\n // If true, always try websocket regardless of degradation\n forceWebSocket?: boolean\n}\n\nexport interface ConnectionOptions {\n connectionType?: ConnectionType\n autoReconnect?: boolean\n reconnectAttempts?: number\n reconnectDelay?: number\n logging?: Partial<LoggerConfig>\n onlyLongpolling?: boolean\n degradeWsOnFailure?: boolean\n wsFailureThreshold?: number\n wsDegradeTTLms?: number\n forceWebSocket?: boolean\n}\n\n// Realtime Event Types\nexport enum EventType {\n MessageSent = 'message_sent',\n MessageEdited = 'message_edited',\n MessageDeleted = 'message_deleted',\n MessageReceived = 'message_received',\n MessageRead = 'message_read',\n ConversationRead = 'conversation_read'\n}\n\nexport interface RealtimeEvent<T = any> {\n type: EventType\n data: T\n}\n\nexport interface MessageSentEvent {\n id: number\n content: string\n sender_client_id: string\n receiver_client_id: string\n sent_at: string\n is_read: boolean\n attachments?: Attachment[]\n conversation_uid?: string\n}\n\nexport interface MessageEditedEvent {\n msg_id: number\n new_content: string\n new_attachments?: Attachment[]\n conversation_uid?: string\n}\n\nexport interface MessageDeletedEvent {\n msg_id: number\n conversation_uid?: string\n}\n\nexport interface MessageReadEvent {\n message_id: number\n reader_client_id: string\n conversation_uid: string\n sender_client_id?: string\n}\n\nexport interface ConversationReadEvent {\n conversation_uid: string\n reader_client_id: string\n message_ids: number[]\n other_client_id?: string\n}\n\nexport interface PollResponse {\n events: RealtimeEvent[]\n}\n\n// Message Queue Types\nexport interface QueuedMessage {\n id: string\n message: SendMessageRequest\n attempts: number\n maxAttempts: number\n timestamp: number\n}\n\n// Authentication\nexport interface AuthConfig {\n token: string\n baseUrl: string\n socketBaseUrl: string\n client_id: string\n}\n\n// Conversation Types\nexport interface User {\n id: string\n client_id: string\n name: string\n avatar: string\n is_admin: boolean\n attributes: Record<string, any>\n file_storage_provider: string\n owner_client_id: string\n}\n\nexport interface Conversation {\n id: string\n conversation_uid: string\n status: string\n user: User\n isArchived: boolean\n isCallCenter:boolean;\n lastMessage: Message\n unreadCount: number\n}\n\nexport interface ConversationSearchResult {\n conversation_uid: string\n search_term: string\n matching_messages: Message[]\n count: number\n}\n\n// Message Types\nexport interface Attachment {\n id: number\n filename: string\n mime_type: string\n size_bytes: number\n url: string\n uploaded_at: string\n message_id?: number\n}\n\nexport interface SenderReceiverUser {\n id: string\n client_id: string\n name: string\n avatar: string\n}\n\nexport interface Message {\n id: number\n message: string\n sender: SenderReceiverUser\n receiver: SenderReceiverUser\n sender_client_id: string\n receiver_client_id: string\n edited: boolean;\n conversation_uid: string\n sent_at: string\n status: string\n is_read: boolean\n attachments?: Attachment[]\n}\n\nexport interface MessagesPagination {\n page: number\n page_size: number\n total_pages: number\n total_items: number\n}\n\nexport interface MessagesResponse {\n messages: Message[]\n pagination: MessagesPagination\n}\n\n// Request Types\nexport interface SendMessageRequest {\n receiver_client_id: string\n content?: string\n attachments?: number[]\n conversation_uid?: string\n isAppointment?: boolean\n}\n\nexport interface UpdateMessageRequest {\n content: string\n attachments?: number[]\n}\n\n// Response Types\nexport interface ApiResponse {\n message: string\n}\n\nexport interface ClientProfileResponse {\n id: string\n client_id: string\n name: string\n avatar: string\n is_admin: boolean\n attributes: Record<string, any>\n file_storage_provider: string | null\n owner_client_id: string | null\n private_key?: string\n}\n\nexport interface SendMessageResponse {\n message: Message\n}\n\nexport interface MarkConversationReadResponse extends ApiResponse {\n marked_messages: number[]\n count: number\n}\n\nexport interface UpdateMessageResponse {\n message: Message\n}\n\nexport interface DeleteMessageResponse extends ApiResponse {\n message_id: number\n}\n\nexport interface RemainingLimitResponse {\n conversation_found: boolean\n conversation_id?: number\n conversation_uid?: string\n enabled: boolean\n limit: number\n receiver_client_id: string\n remaining: number\n sender_client_id: string\n sent_since_last_reply: number\n window_start: string\n}\n\n// File Upload\nexport interface FileUploadResponse extends ApiResponse {\n file_id: number\n filename: string\n storage_path: string\n mime_type: string\n size_bytes: number\n url: string\n uploaded_at: string\n}\n\n// Ban Types\nexport interface BanClientRequest {\n client_id: string\n}\n\nexport interface UnbanClientRequest {\n client_id: string\n}\n\nexport interface AdminBanClientRequest {\n client_id: string\n reason?: string\n duration_days?: number\n}\n\nexport interface AdminUnbanClientRequest {\n client_id: string\n}\n\nexport interface AdminBanInfo {\n reason?: string\n expires_at?: string\n is_permanent: boolean\n}\n\nexport interface BanStatusResponse {\n is_banned_by_you: boolean\n is_banned_by_admin: boolean\n admin_ban?: AdminBanInfo\n}\n\nexport interface ClientPreferences {\n enable_read: boolean\n}\n\nexport interface ClientPreferencesResponse {\n preferences: ClientPreferences\n client_id: number\n}\n\nexport interface UpdatePreferencesRequest {\n preferences: Partial<ClientPreferences>\n}\n\nexport interface UpdatePreferencesResponse {\n message: string\n preferences: ClientPreferences\n updated_at: string\n}\n","/**\n * Logger utility for detailed websocket connection logging\n */\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4\n}\n\nexport interface LoggerConfig {\n enabled: boolean\n level: LogLevel\n prefix?: string\n timestamp?: boolean\n includeData?: boolean\n prettyPrint?: boolean\n}\n\nexport class Logger {\n private config: LoggerConfig\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n enabled: false,\n level: LogLevel.INFO,\n prefix: '[ChatWS]',\n timestamp: true,\n includeData: true,\n prettyPrint: true,\n ...config\n }\n }\n\n private shouldLog(level: LogLevel): boolean {\n return this.config.enabled && level >= this.config.level\n }\n\n private formatMessage(level: string, message: string): string {\n const parts: string[] = []\n\n if (this.config.timestamp) {\n parts.push(`[${new Date().toISOString()}]`)\n }\n\n if (this.config.prefix) {\n parts.push(this.config.prefix)\n }\n\n parts.push(`[${level}]`)\n parts.push(message)\n\n return parts.join(' ')\n }\n\n private formatData(data: any): any {\n if (!this.config.includeData || !data) return undefined\n\n try {\n // Clone to avoid modifying original data\n const cloned = JSON.parse(JSON.stringify(data))\n\n // Mask sensitive data\n this.maskSensitiveData(cloned)\n\n return this.config.prettyPrint ? cloned : JSON.stringify(cloned)\n } catch (err) {\n // If circular reference or other error, return simplified version\n return `[Object: ${data?.constructor?.name || typeof data}]`\n }\n }\n\n private maskSensitiveData(obj: any): void {\n if (!obj || typeof obj !== 'object') return\n\n const sensitiveKeys = [\n 'token',\n 'password',\n 'auth',\n 'authorization',\n 'api_key',\n 'apiKey',\n 'secret'\n ]\n\n for (const key in obj) {\n const lowerKey = key.toLowerCase()\n\n if (sensitiveKeys.some((sensitive) => lowerKey.includes(sensitive))) {\n obj[key] = '***MASKED***'\n } else if (typeof obj[key] === 'object') {\n this.maskSensitiveData(obj[key])\n }\n }\n }\n\n debug(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.DEBUG)) return\n\n const formatted = this.formatMessage('DEBUG', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.log(formatted, formattedData)\n } else {\n console.log(formatted)\n }\n }\n\n info(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.INFO)) return\n\n const formatted = this.formatMessage('INFO', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.info(formatted, formattedData)\n } else {\n console.info(formatted)\n }\n }\n\n warn(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.WARN)) return\n\n const formatted = this.formatMessage('WARN', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.warn(formatted, formattedData)\n } else {\n console.warn(formatted)\n }\n }\n\n error(message: string, data?: any): void {\n if (!this.shouldLog(LogLevel.ERROR)) return\n\n const formatted = this.formatMessage('ERROR', message)\n const formattedData = this.formatData(data)\n\n if (formattedData !== undefined) {\n console.error(formatted, formattedData)\n } else {\n console.error(formatted)\n }\n }\n\n group(label: string): void {\n if (!this.config.enabled) return\n console.group(this.formatMessage('GROUP', label))\n }\n\n groupEnd(): void {\n if (!this.config.enabled) return\n console.groupEnd()\n }\n\n time(label: string): void {\n if (!this.config.enabled) return\n console.time(`${this.config.prefix} ${label}`)\n }\n\n timeEnd(label: string): void {\n if (!this.config.enabled) return\n console.timeEnd(`${this.config.prefix} ${label}`)\n }\n\n updateConfig(config: Partial<LoggerConfig>): void {\n this.config = { ...this.config, ...config }\n }\n\n getConfig(): LoggerConfig {\n return { ...this.config }\n }\n}\n\nexport default Logger\n","/**\n * ConnectionManager handles realtime connections using WebSocket\n */\nimport { io, Socket, SocketOptions } from 'socket.io-client'\nimport { ChatApi } from '../api/chatApi'\nimport {\n AuthConfig,\n ConnectionConfig,\n ConnectionStatus,\n ConnectionType,\n EventType,\n Message,\n QueuedMessage,\n RealtimeEvent,\n SendMessageRequest\n} from '../types'\nimport { Logger, LogLevel, LoggerConfig } from '../utils/Logger'\n\n/* -------------------------------------------------------------------------- */\n/* Default */\n/* -------------------------------------------------------------------------- */\n\nconst DEFAULT_CONFIG: ConnectionConfig = {\n type: ConnectionType.WebSocket,\n autoReconnect: true,\n reconnectAttempts: 5,\n reconnectDelay: 3_000,\n logging: {\n enabled: false,\n level: LogLevel.INFO\n },\n onlyLongpolling: false,\n degradeWsOnFailure: true,\n wsFailureThreshold: 3,\n wsDegradeTTLms: 24 * 60 * 60 * 1000,\n forceWebSocket: false\n}\n\nconst QUEUE_KEY = 'chat_queue'\n\n/* -------------------------------------------------------------------------- */\n/* Extra typings */\n\n/* -------------------------------------------------------------------------- */\n\nexport interface ExtendedConnectionOptions extends Partial<ConnectionConfig> {\n /** Extra HTTP headers – used when the runtime supports them (Node/RN) */\n headers?: Record<string, string>\n /** Extra values to send via auth/query in the browser (simulates headers) */\n extraAuth?: Record<string, unknown>\n}\n\ntype EventCallback = (e: RealtimeEvent) => void\ntype StatusCallback = (s: ConnectionStatus) => void\n\ninterface ClientToServerEvents {\n 'message-received': (message: Message) => void\n} // keep for future emits\n\ninterface ServerToClientEvents {\n 'message-sent': (arg: string) => void\n 'message-received': (arg: string) => void\n}\n\n/* -------------------------------------------------------------------------- */\n\nexport class ConnectionManager {\n private static instance: ConnectionManager | null = null\n\n public static getInstance(\n auth: AuthConfig,\n api: ChatApi,\n options: ExtendedConnectionOptions = {}\n ): ConnectionManager {\n if (!ConnectionManager.instance) {\n ConnectionManager.instance = new ConnectionManager(auth, api, options)\n }\n return ConnectionManager.instance\n }\n\n public static resetInstance(): void {\n if (ConnectionManager.instance) {\n ConnectionManager.instance.disconnect()\n ConnectionManager.instance = null\n }\n }\n\n private readonly cfg: ConnectionConfig & ExtendedConnectionOptions\n private readonly auth: AuthConfig\n private readonly api: ChatApi\n private readonly logger: Logger\n\n private socket: Socket<ClientToServerEvents, ServerToClientEvents> | null =\n null\n\n private status: ConnectionStatus = ConnectionStatus.Disconnected\n\n private eventListeners = new Map<EventType, EventCallback[]>()\n private statusListeners: StatusCallback[] = []\n private errorListeners: ((err: any) => void)[] = []\n\n private readonly queue: QueuedMessage[] = []\n private processingQueue = false\n\n // Lock to prevent multiple simultaneous connection attempts\n private connecting = false\n\n private reconnectCount = 0\n private wsFailCount = 0\n private isDegraded = false\n\n private constructor(\n auth: AuthConfig,\n api: ChatApi,\n options: ExtendedConnectionOptions = {}\n ) {\n this.auth = auth\n this.api = api\n this.cfg = { ...DEFAULT_CONFIG, ...options }\n \n // Initialize logger with configuration\n this.logger = new Logger(this.cfg.logging || {})\n this.logger.info('ConnectionManager initialized', {\n config: {\n type: this.cfg.type,\n autoReconnect: this.cfg.autoReconnect,\n reconnectAttempts: this.cfg.reconnectAttempts,\n reconnectDelay: this.cfg.reconnectDelay,\n loggingEnabled: this.cfg.logging?.enabled\n }\n })\n\n if (typeof window !== 'undefined') {\n const saved = sessionStorage.getItem(QUEUE_KEY)\n if (saved) {\n try {\n const parsed: QueuedMessage[] = JSON.parse(saved)\n this.queue.push(...parsed)\n this.logger.debug('Loaded queued messages from session storage', {\n count: parsed.length\n })\n } catch (err) {\n this.logger.warn('Failed to parse queued messages from session storage', err)\n }\n }\n\n // Initialize degradation state from localStorage (browser-only persistence)\n const degradeUntil = this.getDegradeUntil()\n if (degradeUntil && Date.now() < degradeUntil && !this.cfg.forceWebSocket) {\n this.isDegraded = true\n this.logger.info('WebSocket degraded mode active from persisted state', {\n degradeUntil\n })\n } else if (degradeUntil && Date.now() >= degradeUntil) {\n // Expired, clear\n this.clearDegradation()\n }\n\n // Load fail count for diagnostics (not strictly required)\n this.wsFailCount = this.getFailCount()\n }\n }\n\n /* ---------------------------- Public API -------------------------------- */\n\n public connect(): void {\n // If already connected or connecting, don't try to connect again\n if (\n this.status === ConnectionStatus.Connected ||\n this.status === ConnectionStatus.Connecting ||\n this.connecting\n ) {\n this.logger.debug('Connect called but already connected/connecting', {\n status: this.status,\n connecting: this.connecting\n })\n return\n }\n\n this.logger.info('Initiating connection', {\n socketUrl: this.auth.socketBaseUrl\n })\n\n // Set lock to prevent multiple connection attempts\n this.connecting = true\n this.setStatus(ConnectionStatus.Connecting)\n this.connectWS()\n }\n\n public disconnect(): void {\n this.logger.info('Disconnecting from websocket')\n this.clearTimers()\n // eslint-disable-next-line no-unused-expressions\n this.socket?.disconnect()\n this.socket = null\n this.connecting = false\n this.setStatus(ConnectionStatus.Disconnected)\n this.logger.info('Disconnected successfully')\n }\n\n public getStatus(): ConnectionStatus {\n return this.status\n }\n\n public queueMessage(msg: SendMessageRequest, maxAttempts = 3): string {\n const id =\n typeof crypto !== 'undefined' && (crypto as any).randomUUID\n ? (crypto as any).randomUUID()\n : (Date.now() + Math.random()).toString(36)\n \n const queuedMessage = {\n id,\n message: msg,\n attempts: 0,\n maxAttempts,\n timestamp: Date.now()\n }\n \n this.logger.debug('Queueing message', {\n messageId: id,\n receiver: msg.receiver_client_id,\n hasContent: !!msg.content,\n hasAttachments: !!(msg.attachments && msg.attachments.length > 0),\n maxAttempts\n })\n \n this.queue.push(queuedMessage)\n this.saveQueue()\n this.processQueue()\n return id\n }\n\n public on(evt: EventType, cb: EventCallback): void {\n this.add(this.eventListeners, evt, cb)\n }\n\n public off(evt: EventType, cb: EventCallback): void {\n this.remove(this.eventListeners, evt, cb)\n }\n\n public emit(evt: any, ...args: any[]): void {\n this.logger.debug('Emitting event', {\n event: evt,\n args: args.length > 0 ? args : undefined\n })\n this.socket!.emit(evt, ...args)\n }\n\n public onStatusChange(cb: StatusCallback): void {\n this.statusListeners.push(cb)\n }\n\n public offStatusChange(cb: StatusCallback): void {\n const i = this.statusListeners.indexOf(cb)\n if (i !== -1) this.statusListeners.splice(i, 1)\n }\n\n public onError(cb: (err: any) => void): void {\n this.errorListeners.push(cb)\n }\n\n public offError(cb: (err: any) => void): void {\n const i = this.errorListeners.indexOf(cb)\n if (i !== -1) this.errorListeners.splice(i, 1)\n }\n\n public updateLogging(config: Partial<LoggerConfig>): void {\n this.logger.updateConfig(config)\n this.logger.info('Logging configuration updated', config)\n }\n\n public getLoggingConfig(): LoggerConfig {\n return this.logger.getConfig()\n }\n\n /* ------------------------ WebSocket connection -------------------------- */\n\n private connectWS(): void {\n try {\n this.logger.debug('Starting WebSocket connection', {\n url: this.auth.socketBaseUrl,\n hasExistingSocket: !!this.socket,\n degraded: this.isDegraded\n })\n \n if (this.socket) {\n this.logger.debug('Cleaning up existing socket connection')\n ;(this.socket as any).removeAllListeners()\n this.socket.disconnect()\n }\n \n const socketOpts = this.buildSocketOpts()\n this.logger.debug('Creating socket with options', socketOpts)\n \n this.socket = io(this.auth.socketBaseUrl, socketOpts)\n\n // Wire engine.io upgrade events to track websocket upgrade success/failures\n try {\n const manager = (this.socket as any).io\n const engine = manager?.engine\n if (engine && typeof engine.on === 'function') {\n engine.on('upgrade', (transport: any) => {\n const name = transport?.name || transport\n this.logger.info('Engine.io upgrade success', { transport: name })\n if (name === 'websocket') {\n this.resetWsFailures()\n // Exit degraded mode if any\n if (this.isDegraded) {\n this.logger.info('Exiting degraded mode after successful websocket upgrade')\n this.clearDegradation()\n this.isDegraded = false\n }\n }\n })\n engine.on('upgradeError', (err: any) => {\n this.logger.warn('Engine.io upgrade error', { error: err?.message || err })\n this.onWsFailure()\n })\n }\n } catch (wiringErr) {\n this.logger.debug('Unable to wire engine.io upgrade listeners', { error: (wiringErr as any)?.message || wiringErr })\n }\n \n // @ts-ignore\n this.socket.on('connect', () => {\n this.logger.info('WebSocket connected successfully', {\n socketId: (this.socket as any).id,\n reconnectCount: this.reconnectCount\n })\n this.connecting = false\n this.reconnectCount = 0\n this.setStatus(ConnectionStatus.Connected)\n this.processQueue()\n })\n \n // @ts-ignore\n this.socket.on('connect_error', (err) => {\n this.logger.error('WebSocket connection error', {\n error: err.message,\n type: (err as any).type || 'unknown',\n reconnectCount: this.reconnectCount\n })\n this.connecting = false\n // Count as a failure if websocket is among the desired transports and we are not already degraded\n if (!this.isDegraded && !this.cfg.onlyLongpolling && !this.cfg.forceWebSocket) {\n this.onWsFailure()\n }\n this.handleConnError(err)\n })\n \n // @ts-ignore\n this.socket.on('disconnect', (reason) => {\n this.logger.info('WebSocket disconnected', {\n reason,\n willReconnect: this.cfg.autoReconnect\n })\n this.connecting = false\n this.setStatus(ConnectionStatus.Disconnected)\n this.scheduleReconnect()\n })\n\n // Log all socket.io internal events in debug mode\n if (this.logger.getConfig().level <= LogLevel.DEBUG) {\n // @ts-ignore\n this.socket.on('ping', () => {\n this.logger.debug('Socket.io ping sent')\n })\n // @ts-ignore\n this.socket.on('pong', (latency: number) => {\n this.logger.debug('Socket.io pong received', { latency })\n })\n }\n\n /* Forward all realtime events */\n Object.values(EventType).forEach((evt) => {\n // @ts-ignore\n this.socket!.on(evt as any, (data: any) => {\n this.logger.debug('Received realtime event', {\n event: evt,\n data\n })\n this.handleEvent({ type: evt as EventType, data })\n })\n })\n \n this.logger.debug('WebSocket event listeners registered', {\n events: Object.values(EventType)\n })\n } catch (err) {\n this.logger.error('WebSocket initialization failed', err)\n this.connecting = false\n this.handleConnError(err)\n }\n }\n\n private buildSocketOpts(): Partial<SocketOptions & { transports: string[]; upgrade: boolean; rememberUpgrade: boolean }> {\n const isBrowser = typeof window !== 'undefined'\n const headers = {\n ...this.cfg.headers,\n Authorization: `Bearer ${this.auth.token}`\n }\n\n // Determine transports based on configuration\n let transports: string[] = ['websocket'];\n const degraded = this.isDegraded && !this.cfg.forceWebSocket\n if (this.cfg.onlyLongpolling || degraded) {\n transports = ['polling'];\n } else if (this.cfg.type === ConnectionType.LongPolling) {\n transports = ['polling', 'websocket'];\n } else {\n transports = ['websocket', 'polling'];\n }\n\n const opts: Partial<SocketOptions & { transports: string[]; upgrade: boolean; rememberUpgrade: boolean }> = {\n // @ts-ignore\n reconnection: false,\n rememberUpgrade: !this.cfg.onlyLongpolling && !degraded,\n timeout: 20000,\n auth: { token: this.auth.token, ...(this.cfg.extraAuth || {}) },\n transports: transports,\n upgrade: !this.cfg.onlyLongpolling && !degraded\n }\n\n if (!isBrowser) {\n // Node / RN / Electron main\n // @ts-ignore\n opts.transportOptions = {\n polling: { extraHeaders: headers },\n websocket: { extraHeaders: headers }\n }\n } else if (this.cfg.type === ConnectionType.LongPolling || this.cfg.onlyLongpolling) {\n // For browser environments with long polling, we need to pass auth in query\n // since we can't set custom headers\n const query: Record<string, string> = {};\n if (this.cfg.extraAuth) {\n Object.entries(this.cfg.extraAuth).forEach(([key, value]) => {\n query[key] = String(value);\n });\n }\n (opts as any).query = query;\n }\n\n this.logger.debug('Socket options built', {\n isBrowser,\n hasExtraAuth: !!this.cfg.extraAuth,\n hasHeaders: !!this.cfg.headers,\n timeout: (opts as any).timeout,\n transports: (opts as any).transports,\n onlyLongpolling: this.cfg.onlyLongpolling,\n degraded,\n rememberUpgrade: (opts as any).rememberUpgrade,\n upgrade: (opts as any).upgrade\n })\n\n return opts\n }\n\n /* --------------------------- Error / reconnect -------------------------- */\n\n private handleConnError(err?: any): void {\n this.logger.error('Connection error occurred', {\n error: err?.message || err,\n errorType: err?.type || 'unknown',\n willReconnect: this.cfg.autoReconnect && this.reconnectCount < this.cfg.reconnectAttempts\n })\n \n this.setStatus(ConnectionStatus.Error)\n this.errorListeners.forEach((cb) => {\n try {\n cb(err)\n } catch (listenerErr) {\n this.logger.warn('Error in error listener', listenerErr)\n }\n })\n this.clearTimers()\n this.scheduleReconnect()\n }\n\n /* ---------------------------- Queue logic ------------------------------ */\n\n private async processQueue(): Promise<void> {\n if (this.processingQueue || this.status !== ConnectionStatus.Connected) {\n this.logger.debug('Skipping queue processing', {\n processingQueue: this.processingQueue,\n status: this.status,\n queueLength: this.queue.length\n })\n return\n }\n \n if (this.queue.length === 0) {\n this.logger.debug('Queue is empty, nothing to process')\n return\n }\n\n this.logger.debug('Starting queue processing', {\n queueLength: this.queue.length\n })\n \n this.processingQueue = true\n while (this.queue.length && this.status === ConnectionStatus.Connected) {\n const q = this.queue[0]\n q.attempts += 1\n\n this.logger.debug('Processing queued message', {\n messageId: q.id,\n attempt: q.attempts,\n maxAttempts: q.maxAttempts,\n age: Date.now() - q.timestamp\n })\n\n try {\n await this.sendMessageHttp(q.message)\n this.logger.info('Queued message sent successfully', {\n messageId: q.id,\n attempts: q.attempts\n })\n this.queue.shift() // success – remove\n this.saveQueue()\n } catch (err) {\n this.logger.error(`Failed to send queued message (attempt ${q.attempts}/${q.maxAttempts})`, {\n messageId: q.id,\n error: err\n })\n if (q.attempts >= q.maxAttempts) {\n this.logger.warn('Message exceeded max attempts, removing from queue', {\n messageId: q.id\n })\n this.queue.shift()\n }\n this.saveQueue()\n break // leave loop until next tick\n }\n }\n this.processingQueue = false\n \n if (this.queue.length) {\n this.logger.debug('Queue still has messages, scheduling next processing', {\n remainingMessages: this.queue.length\n })\n setTimeout(() => this.processQueue(), 100)\n }\n }\n\n private async sendMessageHttp(msg: SendMessageRequest): Promise<void> {\n this.logger.debug('Sending message via HTTP', {\n receiver: msg.receiver_client_id,\n hasContent: !!msg.content,\n hasAttachments: !!(msg.attachments && msg.attachments.length > 0)\n })\n \n this.logger.time('sendMessage')\n try {\n await this.api.sendMessage(msg)\n this.logger.timeEnd('sendMessage')\n this.logger.debug('Message sent successfully via HTTP')\n } catch (err) {\n this.logger.timeEnd('sendMessage')\n this.logger.error('Failed to send message via HTTP', err)\n throw err\n }\n }\n\n /* ----------------------------- Utilities ------------------------------- */\n\n private handleEvent(evt: RealtimeEvent): void {\n const listeners = this.eventListeners.get(evt.type) || []\n \n this.logger.debug('Handling event', {\n type: evt.type,\n listenerCount: listeners.length,\n hasData: !!evt.data\n })\n \n listeners.forEach((cb, index) => {\n try {\n cb(evt)\n } catch (err) {\n this.logger.error(`Event listener error for ${evt.type}`, {\n listenerIndex: index,\n error: err\n })\n }\n })\n }\n\n private setStatus(s: ConnectionStatus): void {\n if (this.status === s) {\n this.logger.debug('Status unchanged', { status: s })\n return\n }\n \n const oldStatus = this.status\n this.status = s\n \n this.logger.info('Connection status changed', {\n from: oldStatus,\n to: s,\n listenerCount: this.statusListeners.length\n })\n \n this.statusListeners.forEach((cb, index) => {\n try {\n cb(s)\n } catch (e) {\n this.logger.error('Status listener error', {\n listenerIndex: index,\n error: e\n })\n }\n })\n }\n\n private scheduleReconnect(): void {\n if (!this.cfg.autoReconnect) {\n this.logger.debug('Auto-reconnect disabled, not scheduling reconnect')\n return\n }\n \n if (this.reconnectCount >= this.cfg.reconnectAttempts) {\n this.logger.warn('Max reconnect attempts reached', {\n reconnectCount: this.reconnectCount,\n maxAttempts: this.cfg.reconnectAttempts\n })\n return\n }\n \n this.reconnectCount += 1\n \n this.logger.info('Scheduling reconnect', {\n attempt: this.reconnectCount,\n maxAttempts: this.cfg.reconnectAttempts,\n delayMs: this.cfg.reconnectDelay\n })\n \n setTimeout(() => {\n this.logger.debug('Executing scheduled reconnect', {\n attempt: this.reconnectCount\n })\n this.connect()\n }, this.cfg.reconnectDelay)\n }\n\n private clearTimers(): void {}\n\n private saveQueue(): void {\n if (typeof window === 'undefined') return\n try {\n sessionStorage.setItem(QUEUE_KEY, JSON.stringify(this.queue))\n this.logger.debug('Queue saved to session storage', {\n count: this.queue.length\n })\n } catch (err) {\n this.logger.warn('Failed to save queue to session storage', err)\n }\n }\n\n private add<K, CB>(m: Map<K, CB[]>, k: K, cb: CB) {\n if (!m.has(k)) m.set(k, [])\n m.get(k)!.push(cb)\n }\n\n private remove<K, CB>(m: Map<K, CB[]>, k: K, cb: CB) {\n const arr = m.get(k)\n if (!arr) return\n const i = arr.indexOf(cb)\n if (i !== -1) arr.splice(i, 1)\n }\n\n /* -------------------- WebSocket degradation helpers -------------------- */\n private storageAvailable(): boolean {\n try {\n if (typeof window === 'undefined') return false\n const testKey = '__wsdeg__'\n window.localStorage.setItem(testKey, '1')\n window.localStorage.removeItem(testKey)\n return true\n } catch {\n return false\n }\n }\n\n private failKey(): string {\n return `WS_FAIL_COUNT::${this.auth.socketBaseUrl}`\n }\n\n private untilKey(): string {\n return `WS_DEGRADE_UNTIL::${this.auth.socketBaseUrl}`\n }\n\n private getFailCount(): number {\n if (!this.storageAvailable()) return this.wsFailCount\n const v = window.localStorage.getItem(this.failKey())\n return v ? parseInt(v, 10) || 0 : 0\n }\n\n private setFailCount(n: number): void {\n this.wsFailCount = n\n if (!this.storageAvailable()) return\n try {\n window.localStorage.setItem(this.failKey(), String(n))\n } catch {}\n }\n\n private resetWsFailures(): void {\n if (!this.cfg.degradeWsOnFailure) return\n this.setFailCount(0)\n }\n\n private getDegradeUntil(): number | null {\n if (!this.storageAvailable()) return null\n const v = window.localStorage.getItem(this.untilKey())\n return v ? parseInt(v, 10) || null : null\n }\n\n private setDegradeUntil(ts: number): void {\n if (!this.storageAvailable()) return\n try {\n window.localStorage.setItem(this.untilKey(), String(ts))\n } catch {}\n }\n\n private clearDegradation(): void {\n if (!this.storageAvailable()) return\n try {\n window.localStorage.removeItem(this.untilKey())\n window.localStorage.removeItem(this.failKey())\n } catch {}\n }\n\n private onWsFailure(): void {\n if (!this.cfg.degradeWsOnFailure || this.cfg.forceWebSocket) return\n // Do not count failures when already degraded or when longpolling forced\n if (this.isDegraded || this.cfg.onlyLongpolling) return\n\n const current = this.getFailCount() + 1\n this.setFailCount(current)\n this.logger.warn('WebSocket failure counted', {\n count: current,\n threshold: this.cfg.wsFailureThreshold\n })\n\n if (current >= (this.cfg.wsFailureThreshold || 3)) {\n // Enter degraded mode for TTL\n const ttl = this.cfg.wsDegradeTTLms || 24 * 60 * 60 * 1000\n const until = Date.now() + ttl\n this.isDegraded = true\n this.setDegradeUntil(until)\n this.setFailCount(0)\n this.logger.error('Entering degraded mode: polling-only', {\n until\n })\n\n // Reconnect with polling-only\n try {\n this.disconnect()\n } finally {\n this.connect()\n }\n }\n }\n}\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n ReactNode,\n useCallback,\n useMemo\n} from 'react'\nimport { ConnectionManager } from '../connection/ConnectionManager'\nimport { ChatApi } from '../api/chatApi'\nimport {\n AuthConfig,\n ConnectionOptions,\n ConnectionStatus,\n EventType,\n RealtimeEvent,\n SendMessageRequest\n} from '../types'\nimport { LoggerConfig } from '../utils/Logger'\n\ninterface ConnectionContextType {\n connection: ConnectionManager | null\n status: ConnectionStatus\n connect: () => void\n disconnect: () => void\n sendMessage: (\n message: SendMessageRequest,\n maxAttempts?: number\n ) => string | null\n on: (eventType: EventType, callback: (event: RealtimeEvent) => void) => void\n off: (eventType: EventType, callback: (event: RealtimeEvent) => void) => void\n onError: (cb: (err: any) => void) => void\n offError: (cb: (err: any) => void) => void\n updateLogging: (config: Partial<LoggerConfig>) => void\n getLoggingConfig: () => LoggerConfig | null\n}\n\nconst defaultContext: ConnectionContextType = {\n connection: null,\n status: ConnectionStatus.Disconnected,\n connect: () => {},\n disconnect: () => {},\n sendMessage: () => null,\n on: () => {},\n off: () => {},\n onError: () => {},\n offError: () => {},\n updateLogging: () => {},\n getLoggingConfig: () => null\n}\n\nconst ConnectionContext = createContext<ConnectionContextType>(defaultContext)\n\ninterface ConnectionProviderProps {\n children: ReactNode\n authConfig?: AuthConfig\n api?: ChatApi\n connectionOptions?: ConnectionOptions\n autoConnect?: boolean\n}\n\nexport const ConnectionProvider: React.FC<ConnectionProviderProps> = ({\n children,\n authConfig,\n api,\n connectionOptions,\n autoConnect = true\n}) => {\n const [connection, setConnection] = useState<ConnectionManager | null>(null)\n const [status, setStatus] = useState<ConnectionStatus>(\n ConnectionStatus.Disconnected\n )\n\n // Initialize connection manager when auth config changes\n useEffect(() => {\n if (!authConfig || !api) {\n if (connection) {\n connection.disconnect()\n setConnection(null)\n setStatus(ConnectionStatus.Disconnected)\n }\n return\n }\n const newConnection = ConnectionManager.getInstance(\n authConfig,\n api!,\n connectionOptions\n )\n\n // Listen for status changes\n newConnection.onStatusChange(setStatus)\n\n setConnection(newConnection)\n\n // Auto-connect if enabled\n if (autoConnect) {\n newConnection.connect()\n }\n\n // Clean up on unmount\n return () => {\n newConnection.disconnect()\n ConnectionManager.resetInstance()\n }\n }, [authConfig, connectionOptions, autoConnect, api])\n\n const connect = useCallback(() => {\n if (connection) {\n connection.connect()\n }\n }, [connection])\n\n const disconnect = useCallback(() => {\n if (connection) {\n connection.disconnect()\n }\n }, [connection])\n\n const sendMessage = useCallback(\n (message: SendMessageRequest, maxAttempts = 3): string | null => {\n if (!connection) {\n return null\n }\n return connection.queueMessage(message, maxAttempts)\n },\n [connection]\n )\n\n const on = useCallback(\n (eventType: EventType, callback: (event: RealtimeEvent) => void) => {\n if (connection) {\n connection.on(eventType, callback)\n }\n },\n [connection]\n )\n\n const off = useCallback(\n (eventType: EventType, callback: (event: RealtimeEvent) => void) => {\n if (connection) {\n connection.off(eventType, callback)\n }\n },\n [connection]\n )\n\n const onError = useCallback(\n (cb: (err: any) => void) => {\n if (connection) {\n connection.onError(cb)\n }\n },\n [connection]\n )\n\n const offError = useCallback(\n (cb: (err: any) => void) => {\n if (connection) {\n connection.offError(cb)\n }\n },\n [connection]\n )\n\n const updateLogging = useCallback(\n (config: Partial<LoggerConfig>) => {\n if (connection) {\n connection.updateLogging(config)\n }\n },\n [connection]\n )\n\n const getLoggingConfig = useCallback((): LoggerConfig | null => {\n if (connection) {\n return connection.getLoggingConfig()\n }\n return null\n }, [connection])\n\n const value = useMemo(\n () => ({\n connection,\n status,\n connect,\n disconnect,\n sendMessage,\n on,\n off,\n onError,\n offError,\n updateLogging,\n getLoggingConfig\n }),\n [\n connection,\n status,\n connect,\n disconnect,\n sendMessage,\n on,\n off,\n onError,\n offError,\n updateLogging,\n getLoggingConfig\n ]\n )\n\n return (\n <ConnectionContext.Provider value={value}>\n {children}\n </ConnectionContext.Provider>\n )\n}\n\nexport const useConnectionContext = () => useContext(ConnectionContext)\n","import React, {\n createContext,\n useContext,\n useState,\n useEffect,\n ReactNode,\n Dispatch,\n SetStateAction,\n useCallback, useMemo\n} from 'react'\nimport { ChatApi } from '../api/chatApi'\nimport { AuthConfig, Conversation, ConnectionOptions } from '../types'\nimport { ConnectionProvider } from './ConnectionContext'\n\ninterface ChatContextType {\n api: ChatApi | null\n isInitialized: boolean\n isAuthenticated: boolean\n initialize: (config: AuthConfig) => void\n conversations: Conversation[]\n refreshConversations: (\n archived?: boolean,\n clientIds?: string\n ) => Promise<Conversation[]>\n setConversations: Dispatch<SetStateAction<Conversation[]>>\n}\n\nconst defaultContext: ChatContextType = {\n api: null,\n isInitialized: false,\n isAuthenticated: false,\n initialize: () => {},\n conversations: [],\n refreshConversations: async (): Promise<Conversation[]> => {\n return Promise.resolve([])\n },\n setConversations: () => {}\n}\n\nconst ChatContext = createContext<ChatContextType>(defaultContext)\n\ninterface ChatProviderProps {\n children: ReactNode\n config?: AuthConfig\n connectionOptions?: ConnectionOptions\n}\n\nexport const ChatProvider: React.FC<ChatProviderProps> = ({\n children,\n config,\n connectionOptions\n}) => {\n const [api, setApi] = useState<ChatApi | null>(null)\n const [isInitialized, setIsInitialized] = useState(false)\n const [isAuthenticated, setIsAuthenticated] = useState(false)\n const [conversations, setConversations] = useState<Conversation[]>([])\n\n const initialize = useCallback((config: AuthConfig) => {\n const chatApi = new ChatApi(config)\n setApi(chatApi)\n setIsInitialized(true)\n setIsAuthenticated(true)\n }, [])\n\n const refreshConversations = useCallback(\n async (archived?: boolean, clientIds?: string): Promise<Conversation[]> => {\n if (!api) return []\n try {\n const data = await api.listConversations(archived, clientIds)\n setConversations(data)\n return data\n } catch (error) {\n console.error('Failed to fetch conversations:', error)\n }\n return []\n },\n [api]\n )\n\n useEffect(() => {\n if (config) {\n initialize(config)\n }\n }, [config])\n\n useEffect(() => {\n if (isAuthenticated) {\n refreshConversations()\n }\n }, [isAuthenticated])\n\n const value = useMemo(() => {\n return {\n api,\n isInitialized,\n isAuthenticated,\n initialize,\n conversations,\n refreshConversations,\n setConversations\n }\n }, [api, isInitialized, isAuthenticated, conversations, refreshConversations])\n\n return (\n <ChatContext.Provider value={value}>\n <ConnectionProvider\n authConfig={config}\n api={api || undefined}\n connectionOptions={connectionOptions}\n autoConnect={isAuthenticated}\n >\n {children}\n </ConnectionProvider>\n </ChatContext.Provider>\n )\n}\n\nexport const useChatContext = () => useContext(ChatContext)\n","import { useState, useEffect, useCallback } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport {\n EventType,\n RealtimeEvent,\n MessageSentEvent,\n MessageEditedEvent,\n MessageDeletedEvent,\n MessageReadEvent,\n ConversationReadEvent\n} from '../types'\n\n/**\n * Hook for subscribing to realtime events\n * @param eventType The event type to subscribe to\n */\nexport function useRealtime<T = any>(\n eventType: EventType\n): {\n event: RealtimeEvent<T> | null\n clearEvent: () => void\n} {\n const { on, off } = useConnectionContext()\n const [event, setEvent] = useState<RealtimeEvent<T> | null>(null)\n\n // Event handler\n const handleEvent = useCallback((newEvent: RealtimeEvent<T>) => {\n setEvent(newEvent)\n }, [])\n\n // Subscribe to events\n useEffect(() => {\n on(eventType, handleEvent)\n\n return () => {\n off(eventType, handleEvent)\n }\n }, [eventType, on, off, handleEvent])\n\n // Clear the current event\n const clearEvent = useCallback(() => {\n setEvent(null)\n }, [])\n\n return { event, clearEvent }\n}\n\n/**\n * Hook for subscribing to message sent events\n */\nexport function useMessageSentEvents(): {\n event: RealtimeEvent<MessageSentEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageSentEvent>(EventType.MessageSent)\n}\n\n/**\n * Hook for subscribing to message edited events\n */\nexport function useMessageEditedEvents(): {\n event: RealtimeEvent<MessageEditedEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageEditedEvent>(EventType.MessageEdited)\n}\n\n/**\n * Hook for subscribing to message deleted events\n */\nexport function useMessageDeletedEvents(): {\n event: RealtimeEvent<MessageDeletedEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageDeletedEvent>(EventType.MessageDeleted)\n}\n\n/**\n * Hook for subscribing to message read events\n */\nexport function useMessageReadEvents(): {\n event: RealtimeEvent<MessageReadEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<MessageReadEvent>(EventType.MessageRead)\n}\n\n/**\n * Hook for subscribing to conversation read events\n */\nexport function useConversationReadEvents(): {\n event: RealtimeEvent<ConversationReadEvent> | null\n clearEvent: () => void\n} {\n return useRealtime<ConversationReadEvent>(EventType.ConversationRead)\n}\n\n/**\n * Hook for subscribing to all message events\n * @param callback Optional callback function that will be called when any message event is received\n */\nexport function useAllMessageEvents(\n callback?: (eventType: EventType, data: any) => void\n): {\n messageSent: RealtimeEvent<MessageSentEvent> | null\n messageEdited: RealtimeEvent<MessageEditedEvent> | null\n messageDeleted: RealtimeEvent<MessageDeletedEvent> | null\n messageRead: RealtimeEvent<MessageReadEvent> | null\n conversationRead: RealtimeEvent<ConversationReadEvent> | null\n clearEvents: () => void\n} {\n const { event: messageSent, clearEvent: clearMessageSent } =\n useMessageSentEvents()\n const { event: messageEdited, clearEvent: clearMessageEdited } =\n useMessageEditedEvents()\n const { event: messageDeleted, clearEvent: clearMessageDeleted } =\n useMessageDeletedEvents()\n const { event: messageRead, clearEvent: clearMessageRead } =\n useMessageReadEvents()\n const { event: conversationRead, clearEvent: clearConversationRead } =\n useConversationReadEvents()\n\n const clearEvents = useCallback(() => {\n clearMessageSent()\n clearMessageEdited()\n clearMessageDeleted()\n clearMessageRead()\n clearConversationRead()\n }, [\n clearMessageSent,\n clearMessageEdited,\n clearMessageDeleted,\n clearMessageRead,\n clearConversationRead\n ])\n\n // Call the callback when any event is received\n useEffect(() => {\n if (messageSent && callback) {\n callback(EventType.MessageSent, messageSent.data)\n }\n }, [messageSent, callback])\n\n useEffect(() => {\n if (messageEdited && callback) {\n callback(EventType.MessageEdited, messageEdited.data)\n }\n }, [messageEdited, callback])\n\n useEffect(() => {\n if (messageDeleted && callback) {\n callback(EventType.MessageDeleted, messageDeleted.data)\n }\n }, [messageDeleted, callback])\n\n useEffect(() => {\n if (messageRead && callback) {\n callback(EventType.MessageRead, messageRead.data)\n }\n }, [messageRead, callback])\n\n useEffect(() => {\n if (conversationRead && callback) {\n callback(EventType.ConversationRead, conversationRead.data)\n }\n }, [conversationRead, callback])\n\n return {\n messageSent,\n messageEdited,\n messageDeleted,\n messageRead,\n conversationRead,\n clearEvents\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { useAllMessageEvents } from './useRealtime'\nimport type { ConversationSearchResult, ApiResponse, Conversation } from '../types'\n\n/**\n * Hook for managing conversations\n */\nexport const useConversations = () => {\n const { api, conversations, refreshConversations, setConversations } =\n useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n // Event handler for message events\n const eventProcessorPipeline = useCallback(() => {\n console.log('Message event received')\n // Just refresh conversations when any message event is received\n refreshConversations()\n }, [])\n\n // Subscribe to all message events\n useAllMessageEvents(eventProcessorPipeline)\n\n /**\n * Get a list of conversations\n * @param archived Whether to include archived conversations\n * @param clientId Filter conversations by client ID\n */\n const getConversations = useCallback(\n async (archived?: boolean, clientIds?: string,) => {\n if (!api) {\n setError(new Error('API not initialized'))\n return []\n }\n\n setLoading(true)\n setError(null)\n try {\n return await refreshConversations(archived, clientIds)\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to get conversations')\n setError(error)\n return []\n } finally {\n setLoading(false)\n }\n },\n [refreshConversations, api]\n )\n\n /**\n * Delete a conversation\n * @param conversationUid The UID of the conversation to delete\n */\n const deleteConversation = useCallback(\n async (conversationUid: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.deleteConversation(conversationUid)\n await refreshConversations()\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to delete conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, refreshConversations]\n )\n\n /**\n * Archive a conversation\n * @param conversationUid The UID of the conversation to archive\n */\n const archiveConversation = useCallback(\n async (conversationUid: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.archiveConversation(conversationUid)\n await refreshConversations()\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to archive conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, refreshConversations]\n )\n\n /**\n * Unarchive a conversation\n * @param conversationUid The UID of the conversation to unarchive\n */\n const unarchiveConversation = useCallback(\n async (conversationUid: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.unarchiveConversation(conversationUid)\n await refreshConversations()\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to unarchive conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, refreshConversations]\n )\n\n /**\n * Get details about a conversation\n * @param conversationUid The UID of the conversation\n */\n const getConversationDetails = useCallback(\n async (conversationUid: string): Promise<Conversation | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n return await api.getConversationDetails(conversationUid)\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to get conversation details')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Search for messages in a conversation\n * @param conversationUid The UID of the conversation\n * @param term The search term\n */\n const searchConversation = useCallback(\n async (\n conversationUid: string,\n term: string\n ): Promise<ConversationSearchResult | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n return await api.searchConversation(conversationUid, term)\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to search conversation')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n conversations,\n loading,\n error,\n getConversations,\n deleteConversation,\n archiveConversation,\n unarchiveConversation,\n getConversationDetails,\n searchConversation,\n setConversations\n }\n}\n","import { useCallback } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport { ConnectionStatus, SendMessageRequest } from '../types'\n\n/**\n * Hook for managing the realtime connection\n */\nexport const useConnection = () => {\n const {\n status,\n connect,\n disconnect,\n connection,\n sendMessage: queueMessage\n } = useConnectionContext()\n\n /**\n * Connect to the server\n */\n const connectToServer = useCallback(() => {\n connect()\n }, [connect])\n\n /**\n * Disconnect from the server\n */\n const disconnectFromServer = useCallback(() => {\n disconnect()\n }, [disconnect])\n\n /**\n * Send a message\n * @param message The message to send\n * @param maxAttempts Maximum number of retry attempts\n * @returns A unique ID for the queued message, or null if the connection is not available\n */\n const sendMessage = useCallback(\n (message: SendMessageRequest, maxAttempts = 3): string | null => {\n return queueMessage(message, maxAttempts)\n },\n [queueMessage]\n )\n\n /**\n * Check if the connection is active\n */\n const isConnected = status === ConnectionStatus.Connected\n\n /**\n * Check if the connection is in progress\n */\n const isConnecting = status === ConnectionStatus.Connecting\n\n /**\n * Check if the connection has an error\n */\n const hasError = status === ConnectionStatus.Error\n\n return {\n status,\n isConnected,\n isConnecting,\n hasError,\n connect: connectToServer,\n disconnect: disconnectFromServer,\n sendMessage,\n connection\n }\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { ChatApi } from '../api/chatApi'\nimport {\n QueuedMessage,\n SendMessageRequest,\n SendMessageResponse\n} from '../types'\n\n// Constants\nconst QUEUE_STORAGE_KEY = 'message_queue'\nconst MAX_RETRY_TIME = 60 * 1000 // 1 minute in milliseconds\nconst DEFAULT_MAX_ATTEMPTS = 3\nconst RETRY_DELAY = 2000 // 2 seconds\n\n/**\n * Hook for managing a message queue with retry functionality\n * @param api The ChatApi instance\n */\nexport const useQueue = (api: ChatApi | null) => {\n const [queue, setQueue] = useState<QueuedMessage[]>([])\n const [isProcessing, setIsProcessing] = useState(false)\n\n // Load queue from localStorage on initialization\n useEffect(() => {\n try {\n const storedQueue = localStorage.getItem(QUEUE_STORAGE_KEY)\n if (storedQueue) {\n const parsedQueue: QueuedMessage[] = JSON.parse(storedQueue)\n\n // Filter out messages that have been in the queue for more than MAX_RETRY_TIME\n const now = Date.now()\n const validQueue = parsedQueue.filter(\n (item) => now - item.timestamp <= MAX_RETRY_TIME\n )\n\n setQueue(validQueue)\n }\n } catch (error) {\n console.error('Failed to load message queue from localStorage:', error)\n }\n }, [])\n\n // Save queue to localStorage whenever it changes\n useEffect(() => {\n try {\n localStorage.setItem(QUEUE_STORAGE_KEY, JSON.stringify(queue))\n } catch (error) {\n console.error('Failed to save message queue to localStorage:', error)\n }\n }, [queue])\n\n // Add a message to the queue\n const enqueueMessage = useCallback((message: SendMessageRequest): string => {\n const id = `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n const queuedMessage: QueuedMessage = {\n id,\n message,\n attempts: 0,\n maxAttempts: DEFAULT_MAX_ATTEMPTS,\n timestamp: Date.now()\n }\n\n setQueue((prevQueue) => [...prevQueue, queuedMessage])\n return id\n }, [])\n\n // Process the queue\n const processQueue = useCallback(async (): Promise<void> => {\n if (!api || isProcessing || queue.length === 0) {\n return\n }\n\n setIsProcessing(true)\n\n // Process one message at a time\n const [currentMessage, ...remainingMessages] = queue\n const now = Date.now()\n\n // Skip if message is too old (more than MAX_RETRY_TIME)\n if (now - currentMessage.timestamp > MAX_RETRY_TIME) {\n setQueue(remainingMessages)\n setIsProcessing(false)\n return\n }\n\n try {\n // Attempt to send the message\n await api.sendMessage(currentMessage.message)\n\n // If successful, remove from queue\n setQueue(remainingMessages)\n } catch (error) {\n // If failed, increment attempts and move to the end of the queue if under max attempts\n if (currentMessage.attempts < currentMessage.maxAttempts) {\n const updatedMessage = {\n ...currentMessage,\n attempts: currentMessage.attempts + 1\n }\n setQueue([...remainingMessages, updatedMessage])\n } else {\n // If max attempts reached, remove from queue\n setQueue(remainingMessages)\n }\n } finally {\n setIsProcessing(false)\n\n // If there are more messages, schedule the next processing after a delay\n if (remainingMessages.length > 0) {\n setTimeout(() => processQueue(), RETRY_DELAY)\n }\n }\n }, [api, isProcessing, queue])\n\n // Start processing the queue whenever a new message is added or when the API becomes available\n useEffect(() => {\n if (queue.length > 0 && api && !isProcessing) {\n processQueue()\n }\n }, [queue, api, isProcessing, processQueue])\n\n // Send a message with queue and retry support\n const sendMessageWithRetry = useCallback(\n async (\n message: SendMessageRequest\n ): Promise<SendMessageResponse | null> => {\n if (!api) {\n // If API is not available, just enqueue the message\n enqueueMessage(message)\n return null\n }\n\n try {\n // Try to send immediately\n const response = await api.sendMessage(message)\n return response\n } catch (error) {\n // If sending fails, add to queue for retry\n enqueueMessage(message)\n return null\n }\n },\n [api, enqueueMessage]\n )\n\n return {\n enqueueMessage,\n sendMessageWithRetry,\n queueLength: queue.length,\n isProcessing\n }\n}\n","import { useState, useCallback, useEffect } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { ClientProfileResponse } from '../types'\n\n/**\n * Hook for accessing client profile information\n */\nexport const useClientProfile = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [profile, setProfile] = useState<ClientProfileResponse | null>(null)\n\n /**\n * Fetch the client profile information\n */\n const fetchProfile =\n useCallback(async (): Promise<ClientProfileResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const response = await api.getClientProfile()\n setProfile(response)\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to fetch client profile')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n }, [api])\n\n // Fetch profile on mount\n useEffect(() => {\n if (api) {\n fetchProfile()\n }\n }, [api, fetchProfile])\n\n return {\n loading,\n error,\n profile,\n fetchProfile\n }\n}\n","import { useState, useCallback, useEffect } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { useAllMessageEvents } from './useRealtime'\nimport { useConnection } from './useConnection'\nimport { useQueue } from './useQueue'\nimport {\n MessagesResponse,\n SendMessageRequest,\n SendMessageResponse,\n MarkConversationReadResponse,\n UpdateMessageRequest,\n UpdateMessageResponse,\n DeleteMessageResponse,\n ApiResponse,\n EventType,\n MessageSentEvent,\n MessageEditedEvent,\n MessageDeletedEvent,\n MessageReadEvent,\n ConversationReadEvent,\n Message,\n RealtimeEvent, ClientPreferences, RemainingLimitResponse\n} from '../types'\nimport { useClientProfile } from './useClientProfile'\n\n/**\n * Hook for managing messages\n */\nexport const useMessages = (conversationUid?: string) => {\n const { api } = useChatContext()\n const { profile } = useClientProfile()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [messages, setMessages] = useState<MessagesResponse | null>(null)\n const [preferences, setPreferences] = useState<ClientPreferences | null>(null)\n\n // Get realtime connection status\n const { isConnected, connection } = useConnection()\n\n // Initialize the queue service\n const { sendMessageWithRetry, queueLength } = useQueue(api)\n\n useEffect(() => {\n const fetchPreferences = async () => {\n if (!api) {\n setError(new Error('API not initialized'))\n return\n }\n try {\n const response = await api.getClientPreferences()\n setPreferences(response.preferences)\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to fetch preferences')\n setError(error)\n }\n }\n fetchPreferences()\n }, [api])\n\n const clearDuplicateMessages = useCallback(\n (messages: Message[]): Message[] => {\n const uniqueMessages = new Map<number, Message>()\n\n // Keep only the latest version of each message by id\n messages.forEach((message) => {\n uniqueMessages.set(message.id, message)\n })\n\n // Convert the Map values back to an array\n return Array.from(uniqueMessages.values())\n },\n []\n )\n /**\n * Get messages for a conversation\n * @param page The page number\n * @param pageSize The number of messages per page\n */\n const getMessages = useCallback(\n async (\n conversationId = conversationUid,\n page = 1,\n pageSize = 20\n ): Promise<MessagesResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n if (!conversationId) {\n setError(new Error('Conversation ID is required'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.getMessages(conversationId, page, pageSize)\n if (page === 1) setMessages(response)\n else\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: clearDuplicateMessages([\n ...prev.messages,\n ...response?.messages\n ]),\n pagination: response.pagination\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to get messages')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [conversationUid]\n )\n\n const getRemainingLimit = useCallback(\n async (\n receiverClientId?: string,\n conversationId = conversationUid\n ): Promise<RemainingLimitResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n setLoading(true)\n setError(null)\n try {\n const response = await api.getRemainingLimit({\n receiver_client_id: receiverClientId,\n conversation_uid: conversationId\n })\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to get remaining limit')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, conversationUid]\n )\n\n /**\n * Mark a message as read\n * @param messageId The ID of the message\n */\n const markMessageAsRead = useCallback(\n async (messageId: number): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n return await api.markMessageAsRead(messageId)\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to mark message as read')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n []\n )\n\n /**\n * Send a message\n * @param message The message to send\n */\n const sendMessage = useCallback(\n async (\n message: Omit<SendMessageRequest, 'conversation_uid'> & {\n conversation_uid?: string\n }\n ): Promise<SendMessageResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n const messageWithConversation: SendMessageRequest = {\n ...message,\n conversation_uid: message.conversation_uid || conversationUid\n }\n\n setLoading(true)\n setError(null)\n try {\n // Use the queue service to send the message with retry support\n const response = await sendMessageWithRetry(messageWithConversation)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to send message')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [conversationUid, sendMessageWithRetry]\n )\n\n /**\n * Mark all messages in a conversation as read\n * @param conversationId The ID of the conversation\n */\n const markConversationAsRead = useCallback(\n async (\n conversationId = conversationUid\n ): Promise<MarkConversationReadResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n if (!conversationId) {\n setError(new Error('Conversation ID is required'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.markConversationAsRead(conversationId)\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: prev?.messages?.map((item) => ({\n ...item,\n is_read: true\n }))\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to mark conversation as read')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, conversationUid]\n )\n\n /**\n * Update a message\n * @param messageId The ID of the message\n * @param update The update to apply\n */\n const updateMessage = useCallback(\n async (\n messageId: number,\n update: UpdateMessageRequest\n ): Promise<UpdateMessageResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.updateMessage(messageId, update)\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: prev.messages.map((item) =>\n item.id === messageId\n ? { ...item, ...response.message }\n : item\n )\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to update message')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, conversationUid]\n )\n\n /**\n * Delete a message\n * @param messageId The ID of the message\n */\n const deleteMessage = useCallback(\n async (messageId: number): Promise<DeleteMessageResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.deleteMessage(messageId)\n setMessages((prev) =>\n prev\n ? {\n ...prev,\n messages: prev.messages.filter((item) => item.id !== messageId)\n }\n : null\n )\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to delete message')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api, conversationUid]\n )\n\n const updatePreferences = useCallback(\n async (enableRead: boolean): Promise<boolean> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return false\n }\n\n setError(null)\n try {\n const response = await api.updateClientPreferences({\n preferences: { enable_read: enableRead }\n })\n setPreferences(response.preferences)\n return true\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to update preferences')\n setError(error)\n return false\n }\n },\n [api]\n )\n\n // Refresh messages when connection is established\n useEffect(() => {\n if (conversationUid) {\n getMessages()\n }\n }, [isConnected, conversationUid])\n\n // Handle realtime message events\n const handleMessageEvent = useCallback(\n (eventType: EventType, data: any) => {\n // Only process events for the current conversation\n if (\n !conversationUid ||\n (data.conversation_uid && data.conversation_uid !== conversationUid)\n ) {\n return\n }\n\n setMessages((prev) => {\n if (!prev) return prev\n\n switch (eventType) {\n case EventType.MessageSent: {\n const sentEvent = data as MessageSentEvent\n // Create a new message object from the event data\n\n // Check if the message already exists\n const messageExists = prev.messages.some(\n (msg) => msg.id === sentEvent.id\n )\n if (messageExists) {\n return prev\n }\n\n console.log('arrived event', eventType)\n\n // Add the new message to the state and sort by sent_at (latest first)\n return {\n ...prev,\n messages: [\n ...prev.messages,\n sentEvent as unknown as Message\n ].sort(\n (a, b) =>\n new Date(b.sent_at).getTime() - new Date(a.sent_at).getTime()\n )\n }\n }\n\n case EventType.MessageEdited: {\n const editEvent = data as MessageEditedEvent\n // Update the existing message with new content\n return {\n ...prev,\n messages: prev.messages.map((msg) =>\n msg.id === editEvent.msg_id\n ? {\n ...msg,\n message: editEvent.new_content,\n attachments: editEvent.new_attachments || msg.attachments\n }\n : msg\n )\n }\n }\n\n case EventType.MessageDeleted: {\n const deleteEvent = data as MessageDeletedEvent\n // Remove the deleted message from the state\n return {\n ...prev,\n messages: prev.messages.filter(\n (msg) => msg.id !== deleteEvent.msg_id\n )\n }\n }\n\n case EventType.MessageRead: {\n const readEvent = data as MessageReadEvent\n // Update the is_read status of the specific message\n return {\n ...prev,\n messages: prev.messages.map((msg) =>\n msg.id === readEvent.message_id\n ? { ...msg, is_read: true }\n : msg\n )\n }\n }\n\n case EventType.ConversationRead: {\n const conversationReadEvent = data as ConversationReadEvent\n // Update the is_read status of all messages in the message_ids array\n return {\n ...prev,\n messages: prev.messages.map((msg) =>\n conversationReadEvent.message_ids.includes(msg.id)\n ? { ...msg, is_read: true }\n : msg\n )\n }\n }\n\n default:\n return prev\n }\n })\n },\n [conversationUid, profile]\n )\n\n const sendReceivedEvent = useCallback(\n (eventType: EventType, data: any) => {\n if (eventType === EventType.MessageSent) {\n const messageReceivedEvent: RealtimeEvent = {\n type: EventType.MessageReceived,\n data: data\n }\n\n connection!.emit(messageReceivedEvent.type, messageReceivedEvent.data)\n }\n },\n [connection]\n )\n const eventProcessorPipeline = useCallback(\n (eventType: EventType, data: any) => {\n markConversationAsRead(conversationUid);\n handleMessageEvent(eventType, data)\n // sendReceivedEvent(eventType, data)\n },\n [handleMessageEvent, conversationUid, sendReceivedEvent,preferences]\n )\n\n // Subscribe to all message events\n useAllMessageEvents(eventProcessorPipeline)\n\n return {\n messages: messages?.messages || [],\n pagination: messages?.pagination,\n loading,\n error,\n queueLength,\n getMessages,\n markMessageAsRead,\n sendMessage,\n markConversationAsRead,\n updateMessage,\n deleteMessage,\n setMessages,\n updatePreferences,\n preferences,\n getRemainingLimit\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport { FileUploadResponse } from '../types'\n\n/**\n * Hook for managing file uploads\n */\nexport const useFiles = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [uploadProgress, setUploadProgress] = useState<number>(0)\n\n /**\n * Upload a file\n * @param file The file to upload\n */\n const uploadFile = useCallback(\n async (file: File): Promise<FileUploadResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n setUploadProgress(0)\n\n try {\n // In a real implementation, we would use axios's progress event\n // to track upload progress, but for simplicity we'll just simulate it\n const simulateProgress = () => {\n let progress = 0\n const interval = setInterval(() => {\n progress += 10\n if (progress > 90) {\n clearInterval(interval)\n } else {\n setUploadProgress(progress)\n }\n }, 300)\n\n return () => clearInterval(interval)\n }\n\n const cleanup = simulateProgress()\n\n const response = await api.uploadFile(file)\n\n // Clean up the progress simulation\n cleanup()\n\n // Set to 100% when done\n setUploadProgress(100)\n\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to upload file')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n loading,\n error,\n uploadProgress,\n uploadFile\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport type { Conversation } from '../types'\n\n/**\n * Hook to get conversation details with a specific receiver\n * @returns Functions and state for working with conversation details\n */\nexport const useConversationDetails = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [conversationDetails, setConversationDetails] = useState<Conversation | null>(null)\n const [receiverId, setReceiverId] = useState<string | null>(null)\n\n /**\n * Get conversation details with a specific receiver\n * @param receiverId The ID of the receiver\n * @returns A promise that resolves to conversation details and receiver ID\n */\n const getConversationWithReceiver = useCallback(\n async (receiverId: string): Promise<{ details: Conversation | null; receiverId: string }> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return { details: null, receiverId }\n }\n\n setLoading(true)\n setError(null)\n try {\n const details = await api.getConversationWithReceiver(receiverId)\n setConversationDetails(details)\n setReceiverId(receiverId)\n return { details, receiverId }\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error('Failed to get conversation details')\n setError(error)\n return { details: null, receiverId }\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n conversationDetails,\n receiverId,\n loading,\n error,\n getConversationWithReceiver\n }\n}\n\n","import { useState, useEffect, useMemo, useCallback } from 'react'\nimport { useConversations } from './useConversations'\nimport { Conversation } from '../types'\n\nexport function useConversationManagement() {\n const [selectedConversationId, setSelectedConversationId] =\n useState<string>('')\n\n const {\n conversations,\n loading: conversationsLoading,\n getConversations,\n deleteConversation,\n unarchiveConversation,\n archiveConversation,\n setConversations\n } = useConversations()\n\n // Selected conversation\n const selectedConversation = useMemo(() => {\n return conversations.find(\n (conversation) => conversation.id === selectedConversationId\n )\n }, [conversations, selectedConversationId])\n\n // Load conversations on hook initialization\n useEffect(() => {\n getConversations()\n }, [getConversations])\n\n // Handle conversation selection\n const handleSelectConversation = useCallback(\n (conversation: Conversation | null) => {\n if (conversation === null) {\n setSelectedConversationId('');\n return;\n }\n setSelectedConversationId(conversation.id)\n setConversations((prevState: Conversation[]) =>\n prevState.map((item) =>\n item.id === conversation.id\n ? {\n ...conversation,\n unreadCount: 0\n }\n : item\n )\n )\n },\n [setConversations]\n )\n\n return {\n conversations,\n conversationsLoading,\n selectedConversationId,\n selectedConversation,\n deleteConversation,\n archiveConversation,\n unarchiveConversation,\n handleSelectConversation,\n getConversations\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useChatContext } from '../context/ChatContext'\nimport {\n ApiResponse,\n BanClientRequest,\n UnbanClientRequest,\n AdminBanClientRequest,\n AdminUnbanClientRequest,\n BanStatusResponse\n} from '../types'\n\n/**\n * Hook for managing client bans\n */\nexport const useBans = () => {\n const { api } = useChatContext()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [banStatus, setBanStatus] = useState<BanStatusResponse | null>(null)\n\n /**\n * Ban a client from communicating with the requesting client\n * @param clientId The client ID of the client to ban\n */\n const banClient = useCallback(\n async (clientId: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: BanClientRequest = { client_id: clientId }\n const response = await api.banClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to ban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Unban a client that was previously banned by the requesting client\n * @param clientId The client ID of the client to unban\n */\n const unbanClient = useCallback(\n async (clientId: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: UnbanClientRequest = { client_id: clientId }\n const response = await api.unbanClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to unban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Ban a client as an admin\n * @param clientId The client ID of the client to ban\n * @param reason The reason for the ban (optional)\n * @param durationDays The duration of the ban in days (optional)\n */\n const adminBanClient = useCallback(\n async (\n clientId: string,\n reason?: string,\n durationDays?: number\n ): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: AdminBanClientRequest = {\n client_id: clientId,\n reason,\n duration_days: durationDays\n }\n const response = await api.adminBanClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to admin ban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Unban a client that was previously banned by an admin\n * @param clientId The client ID of the client to unban\n */\n const adminUnbanClient = useCallback(\n async (clientId: string): Promise<ApiResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const request: AdminUnbanClientRequest = { client_id: clientId }\n const response = await api.adminUnbanClient(request)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to admin unban client')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n /**\n * Check if a client is banned by the requesting client or by an admin\n * @param clientId The client ID to check the ban status for\n */\n const checkBanStatus = useCallback(\n async (clientId: string): Promise<BanStatusResponse | null> => {\n if (!api) {\n setError(new Error('API not initialized'))\n return null\n }\n\n setLoading(true)\n setError(null)\n try {\n const response = await api.checkBanStatus(clientId)\n setBanStatus(response)\n return response\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Failed to check ban status')\n setError(error)\n return null\n } finally {\n setLoading(false)\n }\n },\n [api]\n )\n\n return {\n loading,\n error,\n banStatus,\n banClient,\n unbanClient,\n adminBanClient,\n adminUnbanClient,\n checkBanStatus\n }\n}\n","import { useEffect, useState, useCallback } from 'react'\nimport { useMessages } from './useMessages'\nimport {\n Message,\n SenderReceiverUser,\n useAllMessageEvents,\n useClientProfile,\n useFiles\n} from '../index'\n\nexport function useMessageManagement(selectedConversationId: string) {\n const [page, setPage] = useState(1)\n const [hasMore, setHasMore] = useState(true)\n const { profile } = useClientProfile()\n const {\n messages,\n loading: messagesLoading,\n sendMessage,\n getMessages,\n markConversationAsRead,\n deleteMessage,\n updateMessage,\n setMessages,\n preferences,\n updatePreferences,\n getRemainingLimit\n } = useMessages(selectedConversationId)\n\n const { messageSent, messageEdited, messageDeleted, clearEvents } =\n useAllMessageEvents()\n\n const { uploadFile, loading: fileLoading, uploadProgress } = useFiles()\n\n // Reset pagination when conversation changes\n useEffect(() => {\n setPage(1)\n setHasMore(true)\n }, [selectedConversationId])\n\n // Mark conversation as read when conversation changes\n useEffect(() => {\n if (selectedConversationId) {\n markConversationAsRead()\n }\n }, [selectedConversationId, markConversationAsRead])\n\n // Handle real-time message events\n useEffect(() => {\n if (messageSent || messageEdited || messageDeleted) {\n // Refresh messages when events occur\n clearEvents()\n }\n }, [messageSent, messageEdited, messageDeleted, clearEvents])\n\n // Function to load more messages (previous messages)\n const loadMoreMessages = useCallback(async () => {\n if (messagesLoading || !hasMore) return\n\n try {\n const nextPage = page + 1\n // Assuming getMessages accepts pagination parameters\n const result = await getMessages(selectedConversationId, nextPage)\n // If no more messages or empty result, set hasMore to false\n if (!result || result.messages.length === 0) {\n setHasMore(false)\n } else {\n setPage(nextPage)\n }\n } catch (error) {\n console.error('Failed to load more messages:', error)\n setHasMore(false)\n }\n }, [messagesLoading, hasMore, getMessages, page, selectedConversationId])\n\n // Function to send a text message\n const handleSendMessage = useCallback(\n async (content: string, receiver: SenderReceiverUser, isAppointment?: boolean) => {\n if (!content.trim() || !selectedConversationId || !profile) return\n\n const tempMessageId = `temp-${Date.now()}`\n const newMessage = {\n attachments: [],\n conversation_uid: tempMessageId,\n sent_at: new Date().toISOString().replace('Z', '000'),\n message: content.trim(),\n messageType: 0,\n sender: profile! as SenderReceiverUser,\n receiver: receiver,\n is_read: false,\n status: 'sending'\n } as unknown as Message\n\n setMessages((prevMessages: any) => {\n const prevMessageArray = prevMessages?.messages || []\n return {\n ...prevMessages,\n messages: [newMessage, ...prevMessageArray]\n }\n })\n\n try {\n const success = await sendMessage({\n receiver_client_id: receiver.id,\n content: content,\n conversation_uid: selectedConversationId,\n isAppointment\n })\n\n if (!success) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? { ...msg, status: 'failed' }\n : msg\n )\n }))\n return success\n } else {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? {\n ...msg,\n status: 'sent',\n id: success.message.id,\n is_read: success.message.is_read\n }\n : msg\n )\n }))\n return success\n }\n } catch (error) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).filter(\n (msg: any) => msg.conversation_uid !== tempMessageId\n )\n }))\n return error?.response?.data ?? { message: 'Unknown error' }\n }\n },\n [sendMessage, selectedConversationId, profile?.id, setMessages]\n )\n\n // Function to send a file message\n const handleSendFileMessage = useCallback(\n async (\n content: string,\n fileId: number,\n receiver: SenderReceiverUser,\n filename?: string,\n url?: string,\n isAppointment?: boolean\n ) => {\n if (!selectedConversationId) return\n\n const tempMessageId = `temp-file-${Date.now()}`\n\n const newMessage = {\n attachments: [{ filename, url, id: fileId }],\n conversation_uid: tempMessageId,\n sent_at: new Date().toISOString().replace('Z', '000'),\n message: content,\n messageType: 0,\n sender: profile,\n receiver: receiver,\n is_read: false,\n status: 'sending'\n }\n\n setMessages((prevMessages: any) => {\n const prevMessageArray = prevMessages?.messages || []\n return {\n ...prevMessages,\n messages: [newMessage, ...prevMessageArray]\n }\n })\n\n try {\n const success = await sendMessage({\n receiver_client_id: receiver.id,\n content: content,\n attachments: [fileId],\n conversation_uid: selectedConversationId,\n isAppointment\n })\n\n if (success) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? {\n ...msg,\n status: 'sent',\n id: success.message.id,\n is_read: success.message.is_read\n }\n : msg\n )\n }))\n return true\n } else {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).map((msg: any) =>\n msg.conversation_uid === tempMessageId\n ? { ...msg, status: 'failed' }\n : msg\n )\n }))\n return false\n }\n } catch (error) {\n setMessages((prevMessages: any) => ({\n ...prevMessages,\n messages: (prevMessages?.messages || []).filter(\n (msg: any) => msg.conversation_uid !== tempMessageId\n )\n }))\n console.error('Failed to send file message:', error)\n return false\n }\n },\n [sendMessage, selectedConversationId, profile?.id, setMessages]\n )\n\n return {\n messages,\n messagesLoading,\n fileLoading,\n uploadProgress,\n uploadFile,\n handleSendMessage,\n handleSendFileMessage,\n deleteMessage,\n updateMessage,\n getMessages,\n loadMoreMessages,\n hasMore,\n setMessages,\n preferences,\n updatePreferences,\n getRemainingLimit\n }\n}\n","import { useCallback, useRef } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport { EventType, RealtimeEvent } from '../types'\n\n// Type for custom event listeners\ntype CustomEventListener<T = any> = (data: T) => void\n\n// Type for the custom events map\ntype CustomEventsMap = Map<string, CustomEventListener[]>\n\n/**\n * Hook for managing custom events\n * \n * @returns Object with methods to register, unregister, and emit custom events\n */\nexport function useCustomEvents() {\n const { on, off, connection } = useConnectionContext()\n const customEventsRef = useRef<CustomEventsMap>(new Map())\n \n // Register a custom event listener\n const registerCustomEventListener = useCallback(\n <T = any>(key: string, eventType: EventType, callback: CustomEventListener<T>) => {\n // Store the callback in our custom events map\n if (!customEventsRef.current.has(key)) {\n customEventsRef.current.set(key, [])\n }\n customEventsRef.current.get(key)!.push(callback as CustomEventListener)\n \n // Register with the connection manager\n const eventHandler = (event: RealtimeEvent<T>) => {\n const listeners = customEventsRef.current.get(key)\n if (listeners) {\n listeners.forEach(listener => {\n try {\n listener(event.data)\n } catch (err) {\n console.error(`Error in custom event listener ${key}:`, err)\n }\n })\n }\n }\n \n on(eventType, eventHandler as (event: RealtimeEvent) => void)\n \n // Return unregister function\n return () => {\n // Remove from our custom events map\n const listeners = customEventsRef.current.get(key)\n if (listeners) {\n const index = listeners.indexOf(callback as CustomEventListener)\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n \n // Unregister from connection manager\n off(eventType, eventHandler as (event: RealtimeEvent) => void)\n }\n },\n [on, off]\n )\n \n // Unregister a specific custom event listener\n const unregisterCustomEventListener = useCallback(\n (key: string, callback: CustomEventListener) => {\n const listeners = customEventsRef.current.get(key)\n if (listeners) {\n const index = listeners.indexOf(callback)\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n },\n []\n )\n \n // Unregister all custom event listeners for a key\n const unregisterAllCustomEventListeners = useCallback(\n (key: string) => {\n customEventsRef.current.delete(key)\n },\n []\n )\n \n // Emit a custom event\n const emitCustomEvent = useCallback(\n (eventType: EventType, data: any) => {\n if (connection) {\n connection.emit(eventType, data)\n }\n },\n [connection]\n )\n \n return {\n registerCustomEventListener,\n unregisterCustomEventListener,\n unregisterAllCustomEventListeners,\n emitCustomEvent\n }\n}\n","import { useCallback } from 'react'\nimport { useConnectionContext } from '../context/ConnectionContext'\nimport { LogLevel, LoggerConfig } from '../utils/Logger'\n\nexport interface UseLoggingReturn {\n enableLogging: (level?: LogLevel) => void\n disableLogging: () => void\n setLogLevel: (level: LogLevel) => void\n updateLoggingConfig: (config: Partial<LoggerConfig>) => void\n getLoggingConfig: () => LoggerConfig | null\n}\n\nexport function useLogging(): UseLoggingReturn {\n const { updateLogging, getLoggingConfig } = useConnectionContext()\n\n const enableLogging = useCallback(\n (level: LogLevel = LogLevel.INFO) => {\n updateLogging({\n enabled: true,\n level\n })\n },\n [updateLogging]\n )\n\n const disableLogging = useCallback(() => {\n updateLogging({\n enabled: false\n })\n }, [updateLogging])\n\n const setLogLevel = useCallback(\n (level: LogLevel) => {\n updateLogging({\n level\n })\n },\n [updateLogging]\n )\n\n const updateLoggingConfig = useCallback(\n (config: Partial<LoggerConfig>) => {\n updateLogging(config)\n },\n [updateLogging]\n )\n\n return {\n enableLogging,\n disableLogging,\n setLogLevel,\n updateLoggingConfig,\n getLoggingConfig\n }\n}","import * as React from 'react'\nimport { ChatProvider } from './context/ChatContext'\nimport { ConnectionOptions } from './types'\nimport { useAllMessageEvents as useAllMessageEventsHook } from './hooks/useRealtime'\n\n// Export types\nexport * from './types'\n\n// Export logging utilities\nexport { LogLevel } from './utils/Logger'\nexport type { LoggerConfig } from './utils/Logger'\n\n// Export API client\nexport { ChatApi } from './api/chatApi'\n\n// Export context\nexport { ChatProvider, useChatContext } from './context/ChatContext'\n\n// Export hooks\nexport { useConversations } from './hooks/useConversations'\nexport { useMessages } from './hooks/useMessages'\nexport { useFiles } from './hooks/useFiles'\nexport { useConnection } from './hooks/useConnection'\nexport { useClientProfile } from './hooks/useClientProfile'\nexport { useConversationDetails } from './hooks/useConversationDetails'\nexport type {\n Message,\n Conversation,\n MessagesPagination,\n MessagesResponse,\n ConnectionOptions,\n ClientProfileResponse\n} from './types'\nexport {\n useRealtime,\n useMessageSentEvents,\n useMessageEditedEvents,\n useMessageDeletedEvents\n} from './hooks/useRealtime'\n\nexport { useConversationManagement } from './hooks/useConversationManagements'\nexport {useBans} from './hooks/useBans'\nexport { useMessageManagement } from './hooks/useMessageManagements'\nexport { useCustomEvents } from './hooks/useCustomEvents'\nexport { useLogging } from './hooks/useLogging'\n// Export useAllMessageEvents directly\nexport const useAllMessageEvents = useAllMessageEventsHook\n\n// Main component that wraps the ChatProvider\ninterface ChatClientProps {\n children: React.ReactNode\n token?: string\n baseUrl?: string\n socketBaseUrl?: string\n connectionOptions?: ConnectionOptions\n client_id: string\n}\n\nexport const ChatClient: React.FC<ChatClientProps> = ({\n children,\n token,\n client_id,\n baseUrl = 'https://api.example.com',\n socketBaseUrl = 'wss://api.example.com',\n connectionOptions\n}) => {\n const config = React.useMemo(() => {\n if (token) {\n return { token, baseUrl, client_id, socketBaseUrl }\n }\n return undefined\n }, [token, baseUrl, client_id])\n\n return (\n <ChatProvider config={config} connectionOptions={connectionOptions}>\n {children}\n </ChatProvider>\n )\n}\n"],"names":["ChatApi","config","client","axios","create","baseURL","baseUrl","headers","Authorization","token","client_id","_proto","prototype","healthCheck","Promise","resolve","_this","get","then","response","data","e","reject","listConversations","archived","clientIds","params","undefined","String","client_ids","_this2","deleteConversation","conversationUid","_this3","archiveConversation","_this4","post","unarchiveConversation","_this5","getConversationDetails","_this6","getConversationWithReceiver","receiverId","_this7","searchConversation","term","_this8","getMessages","page","pageSize","_this9","page_size","markMessageAsRead","messageId","_this0","sendMessage","message","isAppointment","_this1","markConversationAsRead","_this10","updateMessage","update","_this11","put","deleteMessage","_this12","getRemainingLimit","_this13","uploadFile","file","formData","FormData","append","_this14","banClient","request","_this15","unbanClient","_this16","adminBanClient","_this17","adminUnbanClient","_this18","checkBanStatus","clientId","_this19","getClientProfile","_this20","getClientPreferences","_this21","updateClientPreferences","_this22","ConnectionType","ConnectionStatus","EventType","LogLevel","Logger","_extends","enabled","level","INFO","prefix","timestamp","includeData","prettyPrint","shouldLog","formatMessage","parts","push","Date","toISOString","join","formatData","cloned","JSON","parse","stringify","maskSensitiveData","err","_data$constructor","constructor","name","obj","sensitiveKeys","_loop","lowerKey","key","toLowerCase","some","sensitive","includes","debug","DEBUG","formatted","formattedData","console","log","info","warn","WARN","error","ERROR","group","label","groupEnd","time","timeEnd","updateConfig","getConfig","DEFAULT_CONFIG","type","WebSocket","autoReconnect","reconnectAttempts","reconnectDelay","logging","onlyLongpolling","degradeWsOnFailure","wsFailureThreshold","wsDegradeTTLms","forceWebSocket","QUEUE_KEY","ConnectionManager","auth","api","options","Disconnected","Map","cfg","logger","loggingEnabled","_this$cfg$logging","window","saved","sessionStorage","getItem","_this$queue","parsed","queue","apply","count","length","degradeUntil","getDegradeUntil","now","isDegraded","clearDegradation","wsFailCount","getFailCount","getInstance","instance","resetInstance","disconnect","connect","status","Connected","Connecting","connecting","socketUrl","socketBaseUrl","setStatus","connectWS","clearTimers","_this$socket","socket","getStatus","queueMessage","msg","maxAttempts","id","crypto","randomUUID","Math","random","toString","queuedMessage","attempts","receiver","receiver_client_id","hasContent","content","hasAttachments","attachments","saveQueue","processQueue","on","evt","cb","add","eventListeners","off","remove","emit","args","Array","_len","_key","arguments","event","_this$socket2","concat","onStatusChange","statusListeners","offStatusChange","i","indexOf","splice","onError","errorListeners","offError","updateLogging","getLoggingConfig","url","hasExistingSocket","degraded","removeAllListeners","socketOpts","buildSocketOpts","io","manager","engine","transport","resetWsFailures","onWsFailure","wiringErr","socketId","reconnectCount","handleConnError","reason","willReconnect","scheduleReconnect","latency","Object","values","forEach","handleEvent","events","isBrowser","transports","LongPolling","opts","reconnection","rememberUpgrade","timeout","extraAuth","upgrade","transportOptions","polling","extraHeaders","websocket","query","entries","_ref","value","hasExtraAuth","hasHeaders","errorType","Error","listenerErr","processingQueue","remainingMessages","setTimeout","_interrupt","queueLength","_temp2","_for","q","attempt","age","_temp","_catch","sendMessageHttp","shift","_temp3","listeners","listenerCount","hasData","index","listenerIndex","s","oldStatus","from","to","delayMs","setItem","m","k","has","set","arr","storageAvailable","testKey","localStorage","removeItem","_unused","failKey","untilKey","v","parseInt","setFailCount","n","_unused2","setDegradeUntil","ts","_unused3","_unused4","current","threshold","ttl","until","defaultContext","connection","ConnectionContext","createContext","ConnectionProvider","children","authConfig","connectionOptions","_ref$autoConnect","autoConnect","_useState","useState","setConnection","_useState2","useEffect","newConnection","useCallback","eventType","callback","useMemo","React","Provider","useConnectionContext","useContext","isInitialized","isAuthenticated","initialize","conversations","refreshConversations","setConversations","ChatContext","ChatProvider","setApi","setIsInitialized","_useState3","setIsAuthenticated","_useState4","chatApi","_exit","useChatContext","useRealtime","_useConnectionContext","setEvent","newEvent","clearEvent","useMessageSentEvents","MessageSent","useMessageEditedEvents","MessageEdited","useMessageDeletedEvents","MessageDeleted","useMessageReadEvents","MessageRead","useConversationReadEvents","ConversationRead","useAllMessageEvents","_useMessageSentEvents","messageSent","clearMessageSent","_useMessageEditedEven","messageEdited","clearMessageEdited","_useMessageDeletedEve","messageDeleted","clearMessageDeleted","_useMessageReadEvents","messageRead","clearMessageRead","_useConversationReadE","conversationRead","clearConversationRead","clearEvents","useConversations","_useChatContext","loading","setLoading","setError","eventProcessorPipeline","getConversations","_finallyRethrows","_wasThrown","_result","_wasThrown2","_result2","_wasThrown3","_result3","_wasThrown4","_result4","_wasThrown5","_result5","_wasThrown6","_result6","useConnection","connectToServer","disconnectFromServer","isConnected","isConnecting","hasError","QUEUE_STORAGE_KEY","MAX_RETRY_TIME","DEFAULT_MAX_ATTEMPTS","RETRY_DELAY","useQueue","setQueue","isProcessing","setIsProcessing","storedQueue","parsedQueue","validQueue","filter","item","enqueueMessage","substr","prevQueue","currentMessage","slice","updatedMessage","sendMessageWithRetry","useClientProfile","profile","setProfile","fetchProfile","useMessages","_useClientProfile","messages","setMessages","preferences","setPreferences","_useConnection","_useQueue","fetchPreferences","clearDuplicateMessages","uniqueMessages","conversationId","prev","pagination","receiverClientId","conversation_uid","messageWithConversation","_prev$messages","map","is_read","_wasThrown7","_result7","updatePreferences","enableRead","enable_read","handleMessageEvent","sentEvent","messageExists","sort","a","b","sent_at","getTime","editEvent","msg_id","new_content","new_attachments","deleteEvent","readEvent","message_id","conversationReadEvent","message_ids","sendReceivedEvent","messageReceivedEvent","MessageReceived","useFiles","uploadProgress","setUploadProgress","simulateProgress","progress","interval","setInterval","clearInterval","cleanup","useConversationDetails","conversationDetails","setConversationDetails","setReceiverId","details","useConversationManagement","selectedConversationId","setSelectedConversationId","_useConversations","conversationsLoading","selectedConversation","find","conversation","handleSelectConversation","prevState","unreadCount","useBans","banStatus","setBanStatus","durationDays","duration_days","useMessageManagement","setPage","hasMore","setHasMore","_useMessages","messagesLoading","_useAllMessageEvents","_useFiles","fileLoading","loadMoreMessages","nextPage","result","handleSendMessage","trim","tempMessageId","newMessage","replace","messageType","sender","prevMessages","prevMessageArray","success","_error$response$data","_error$response","handleSendFileMessage","fileId","filename","useCustomEvents","customEventsRef","useRef","registerCustomEventListener","eventHandler","listener","unregisterCustomEventListener","unregisterAllCustomEventListeners","emitCustomEvent","useLogging","enableLogging","disableLogging","setLogLevel","updateLoggingConfig","useAllMessageEventsHook","ChatClient","_ref$baseUrl","_ref$socketBaseUrl"],"mappings":";;;;AAAA;AACO,MAAM,KAAK,gBAAgB,CAAC,WAAW;AAC9C,CAAC,SAAS,KAAK,GAAG,EAAE;AACpB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,WAAW,EAAE,UAAU,EAAE;AAC1D,EAAE,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;AAC7B,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACvB,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,WAAW,GAAG,UAAU,CAAC;AACzD,GAAG,IAAI,QAAQ,EAAE;AACjB,IAAI,IAAI;AACR,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,IAAI,MAAM;AACV,IAAI,OAAO,IAAI,CAAC;AAChB,IAAI;AACJ,GAAG;AACH,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,KAAK,EAAE;AAC3B,GAAG,IAAI;AACP,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC1B,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;AACrB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAClE,KAAK,MAAM,IAAI,UAAU,EAAE;AAC3B,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,KAAK,MAAM;AACX,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL,IAAI,CAAC,OAAO,CAAC,EAAE;AACf,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,IAAI;AACJ,GAAG,CAAC;AACJ,EAAE,OAAO,MAAM,CAAC;AAChB,GAAE;AACF,CAAC,OAAO,KAAK,CAAC;AACd,CAAC,GAAG,CAAC;AACL;AACA;AACO,SAAS,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC5C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AACd,EAAE,IAAI,KAAK,YAAY,KAAK,EAAE;AAC9B,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE;AAChB,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE;AACnB,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,KAAK;AACL,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM;AACV,IAAI,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9C,IAAI,OAAO;AACX,IAAI;AACJ,GAAG;AACH,EAAE,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;AAC3B,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,GAAG,OAAO;AACV,GAAG;AACH,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACjB,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACjB,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1B,EAAE,IAAI,QAAQ,EAAE;AAChB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClB,GAAG;AACH,EAAE;AACF,CAAC;AACD;AACO,SAAS,cAAc,CAAC,QAAQ,EAAE;AACzC,CAAC,OAAO,QAAQ,YAAY,KAAK,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAgGD;AACO,MAAM,eAAe,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,YAAY,CAAC;AA4D/J;AACO,MAAM,oBAAoB,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,iBAAiB,CAAC;AA4BxL;AACA;AACO,SAAS,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACzC,CAAC,IAAI,KAAK,CAAC;AACX,CAAC,SAAS;AACV,EAAE,IAAI,cAAc,GAAG,IAAI,EAAE,CAAC;AAC9B,EAAE,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE;AACtC,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC;AACrC,GAAG;AACH,EAAE,IAAI,CAAC,cAAc,EAAE;AACvB,GAAG,OAAO,MAAM,CAAC;AACjB,GAAG;AACH,EAAE,IAAI,cAAc,CAAC,IAAI,EAAE;AAC3B,GAAG,KAAK,GAAG,CAAC,CAAC;AACb,GAAG,MAAM;AACT,GAAG;AACH,EAAE,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;AACtB,EAAE,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC7B,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;AAC/B,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AACtB,IAAI,MAAM;AACV,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,IAAI,MAAM;AACV,IAAI;AACJ,GAAG;AACH,EAAE,IAAI,MAAM,EAAE;AACd,GAAG,IAAI,WAAW,GAAG,MAAM,EAAE,CAAC;AAC9B,GAAG,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AACxE,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,IAAI,MAAM;AACV,IAAI;AACJ,GAAG;AACH,EAAE;AACF,CAAC,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;AACxB,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AACjK,CAAC,OAAO,IAAI,CAAC;AACb,CAAC,SAAS,gBAAgB,CAAC,KAAK,EAAE;AAClC,EAAE,MAAM,GAAG,KAAK,CAAC;AACjB,EAAE,GAAG;AACL,GAAG,IAAI,MAAM,EAAE;AACf,IAAI,WAAW,GAAG,MAAM,EAAE,CAAC;AAC3B,IAAI,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AACzE,KAAK,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,KAAK,OAAO;AACZ,KAAK;AACL,IAAI;AACJ,GAAG,cAAc,GAAG,IAAI,EAAE,CAAC;AAC3B,GAAG,IAAI,CAAC,cAAc,KAAK,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AACjF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC7B,IAAI,OAAO;AACX,IAAI;AACJ,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE;AAC5B,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,IAAI,OAAO;AACX,IAAI;AACJ,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;AACnB,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;AAC/B,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AACtB,IAAI;AACJ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpC,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,EAAE;AACF,CAAC,SAAS,gBAAgB,CAAC,cAAc,EAAE;AAC3C,EAAE,IAAI,cAAc,EAAE;AACtB,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;AACnB,GAAG,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AACvD,IAAI,MAAM;AACV,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC7B,IAAI;AACJ,GAAG,MAAM;AACT,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC5B,GAAG;AACH,EAAE;AACF,CAAC,SAAS,kBAAkB,GAAG;AAC/B,EAAE,IAAI,cAAc,GAAG,IAAI,EAAE,EAAE;AAC/B,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE;AAC5B,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,IAAI,MAAM;AACV,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACrC,IAAI;AACJ,GAAG,MAAM;AACT,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC5B,GAAG;AACH,EAAE;AACF,CAAC;AA6ND;AACA;AACO,SAAS,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;AACtC,CAAC,IAAI;AACL,EAAE,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;AACtB,EAAE,CAAC,MAAM,CAAC,EAAE;AACZ,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,EAAE;AACF,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC5B,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACtC,EAAE;AACF,CAAC,OAAO,MAAM,CAAC;AACf,CAAC;AACD;AACA;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE;AAClD,CAAC,IAAI;AACL,EAAE,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;AACtB,EAAE,CAAC,OAAO,CAAC,EAAE;AACb,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5B,EAAE;AACF,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC5B,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9E,EAAE;AACF,CAAC,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjC;;IC5iBaA,OAAO;EAOlB,SAAAA,QAAYC,MAAkB;IAC5B,IAAI,CAACC,MAAM,GAAGC,KAAK,CAACC,MAAM,CAAC;MACzBC,OAAO,EAAEJ,MAAM,CAACK,OAAO;MACvBC,OAAO,EAAE;QACPC,aAAa,cAAYP,MAAM,CAACQ,KAAO;QACvC,cAAc,EAAE,kBAAkB;QAClC,wBAAwB,EAAER,MAAM,CAACS;;KAEpC,CAAC;;EACH,IAAAC,MAAA,GAAAX,OAAA,CAAAY,SAAA;EAAAD,MAAA,CAMKE,WAAW,YAAXA,WAAWA;IAAA;kBACQ,IAAI;MAAA,OAAAC,OAAA,CAAAC,OAAA,CAAJC,KAAA,CAAKd,MAAM,CAACe,GAAG,CAAC,aAAa,CAAC,EAAAC,IAAA,WAA/CC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAUKY,iBAAiB,YAAjBA,iBAAiBA,CACrBC,QAAkB,EAClBC,SAAkB;IAAA;mBAMK,IAAI;MAJ3B,IAAMC,MAAM,GAA2B,EAAE;MACzC,IAAIF,QAAQ,KAAKG,SAAS,EAAED,MAAM,CAACF,QAAQ,GAAGI,MAAM,CAACJ,QAAQ,CAAC;MAC9D,IAAIC,SAAS,EAAEC,MAAM,CAACG,UAAU,GAAGJ,SAAS;MAAA,OAAAX,OAAA,CAAAC,OAAA,CAErBe,MAAA,CAAK5B,MAAM,CAACe,GAAG,CAAC,yBAAyB,EAAE;QAChES,MAAM,EAANA;OACD,CAAC,EAAAR,IAAA,WAFIC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKoB,kBAAkB,YAAlBA,kBAAkBA,CAACC,eAAuB;IAAA;mBACvB,IAAI;MAAA,OAAAlB,OAAA,CAAAC,OAAA,CAAJkB,MAAA,CAAK/B,MAAM,UAAO,8BACZ8B,eAAe,YAAS,CACpD,EAAAd,IAAA,WAFKC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKuB,mBAAmB,YAAnBA,mBAAmBA,CAACF,eAAuB;IAAA;mBACxB,IAAI;MAAA,OAAAlB,OAAA,CAAAC,OAAA,CAAJoB,MAAA,CAAKjC,MAAM,CAACkC,IAAI,8BACVJ,eAAe,aAAU,CACrD,EAAAd,IAAA,WAFKC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOK0B,qBAAqB,YAArBA,qBAAqBA,CAACL,eAAuB;IAAA;mBAC1B,IAAI;MAAA,OAAAlB,OAAA,CAAAC,OAAA,CAAJuB,MAAA,CAAKpC,MAAM,CAACkC,IAAI,8BACVJ,eAAe,eAAY,CACvD,EAAAd,IAAA,WAFKC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOK4B,sBAAsB,YAAtBA,sBAAsBA,CAACP,eAAuB;IAAA;mBAC3B,IAAI;MAAA,OAAAlB,OAAA,CAAAC,OAAA,CAAJyB,MAAA,CAAKtC,MAAM,CAACe,GAAG,8BACTe,eAAe,aAAU,CACrD,EAAAd,IAAA,WAFKC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOK8B,2BAA2B,YAA3BA,2BAA2BA,CAACC,UAAkB;IAAA;mBAC3B,IAAI;MAAA,OAAA5B,OAAA,CAAAC,OAAA,CAAJ4B,MAAA,CAAKzC,MAAM,CAACe,GAAG,mCACJyB,UAAY,CAC7C,EAAAxB,IAAA,WAFKC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAQKiC,kBAAkB,YAAlBA,kBAAkBA,CACtBZ,eAAuB,EACvBa,IAAY;IAAA;mBAEW,IAAI;MAAA,OAAA/B,OAAA,CAAAC,OAAA,CAAJ+B,MAAA,CAAK5C,MAAM,CAACe,GAAG,8BACTe,eAAe,cAC1C;QACEN,MAAM,EAAE;UAAEmB,IAAI,EAAJA;;OACX,CACF,EAAA3B,IAAA,WALKC,QAAQ;QAMd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAWKoC,WAAW,YAAXA,WAAWA,CACff,eAAuB,EACvBgB,IAAI,EACJC,QAAQ;IAAA,IADRD,IAAI;MAAJA,IAAI,GAAG,CAAC;;IAAA,IACRC,QAAQ;MAARA,QAAQ,GAAG,EAAE;;IAAA;mBAEU,IAAI;MAAA,OAAAnC,OAAA,CAAAC,OAAA,CAAJmC,MAAA,CAAKhD,MAAM,CAACe,GAAG,oBACnBe,eAAe,YAChC;QACEN,MAAM,EAAE;UAAEsB,IAAI,EAAJA,IAAI;UAAEG,SAAS,EAAEF;;OAC5B,CACF,EAAA/B,IAAA,WALKC,QAAQ;QAMd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKyC,iBAAiB,YAAjBA,iBAAiBA,CAACC,SAAiB;IAAA;mBAChB,IAAI;MAAA,OAAAvC,OAAA,CAAAC,OAAA,CAAJuC,MAAA,CAAKpD,MAAM,CAACkC,IAAI,oBAAkBiB,SAAS,UAAO,CAAC,EAAAnC,IAAA,WAApEC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOK4C,WAAW,YAAXA,WAAWA,CAACC,OAA2B;IAAA;mBASpB,IAAI;MAR3B,IAAMvD,MAAM,GAAuB,EAAE;MAErC,IAAIuD,OAAO,CAACC,aAAa,EAAE;QACzBxD,MAAM,CAACM,OAAO,GAAG;UACf,iBAAiB,EAAE;SACpB;;MACF,OAAAO,OAAA,CAAAC,OAAA,CAEsB2C,MAAA,CAAKxD,MAAM,CAACkC,IAAI,CACrC,4BAA4B,EAC5BoB,OAAO,EACPvD,MAAM,CACP,EAAAiB,IAAA,WAJKC,QAAQ;QAKd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKgD,sBAAsB,YAAtBA,sBAAsBA,CAC1B3B,eAAuB;IAAA;oBAEA,IAAI;MAAA,OAAAlB,OAAA,CAAAC,OAAA,CAAJ6C,OAAA,CAAK1D,MAAM,CAACkC,IAAI,iCACPJ,eAAe,UAAO,CACrD,EAAAd,IAAA,WAFKC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAQKkD,aAAa,YAAbA,aAAaA,CACjBR,SAAiB,EACjBS,MAA4B;IAAA;oBAEL,IAAI;MAAA,OAAAhD,OAAA,CAAAC,OAAA,CAAJgD,OAAA,CAAK7D,MAAM,CAAC8D,GAAG,oBAAkBX,SAAS,EAAIS,MAAM,CAAC,EAAA5C,IAAA,WAAtEC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKsD,aAAa,YAAbA,aAAaA,CAACZ,SAAiB;IAAA;oBACZ,IAAI;MAAA,OAAAvC,OAAA,CAAAC,OAAA,CAAJmD,OAAA,CAAKhE,MAAM,UAAO,oBAAkBmD,SAAW,CAAC,EAAAnC,IAAA,WAAjEC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKwD,iBAAiB,YAAjBA,iBAAiBA,CAACzC,MAGvB;IAAA;oBACwB,IAAI;MAAA,OAAAZ,OAAA,CAAAC,OAAA,CAAJqD,OAAA,CAAKlE,MAAM,CAACe,GAAG,CAAC,+BAA+B,EAAE;QACtES,MAAM,EAANA;OACD,CAAC,EAAAR,IAAA,WAFIC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOK0D,UAAU,YAAVA,UAAUA,CAACC,IAAU;IAAA;oBAUF,IAAI;MAT3B,IAAMC,QAAQ,GAAG,IAAIC,QAAQ,EAAE;MAC/BD,QAAQ,CAACE,MAAM,CAAC,MAAM,EAAEH,IAAI,CAAC;MAE7B,IAAMrE,MAAM,GAAuB;QACjCM,OAAO,EAAE;UACP,cAAc,EAAE;;OAEnB;MAAA,OAAAO,OAAA,CAAAC,OAAA,CAEsB2D,OAAA,CAAKxE,MAAM,CAACkC,IAAI,CACrC,mBAAmB,EACnBmC,QAAQ,EACRtE,MAAM,CACP,EAAAiB,IAAA,WAJKC,QAAQ;QAKd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKgE,SAAS,YAATA,SAASA,CAACC,OAAyB;IAAA;oBAChB,IAAI;MAAA,OAAA9D,OAAA,CAAAC,OAAA,CAAJ8D,OAAA,CAAK3E,MAAM,CAACkC,IAAI,CAAC,kBAAkB,EAAEwC,OAAO,CAAC,EAAA1D,IAAA,WAA9DC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKmE,WAAW,YAAXA,WAAWA,CAACF,OAA2B;IAAA;oBACpB,IAAI;MAAA,OAAA9D,OAAA,CAAAC,OAAA,CAAJgE,OAAA,CAAK7E,MAAM,UAAO,CAAC,kBAAkB,EAAE;QAC5DkB,IAAI,EAAEwD;OACP,CAAC,EAAA1D,IAAA,WAFIC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKqE,cAAc,YAAdA,cAAcA,CAACJ,OAA8B;IAAA;oBAC1B,IAAI;MAAA,OAAA9D,OAAA,CAAAC,OAAA,CAAJkE,OAAA,CAAK/E,MAAM,CAACkC,IAAI,CAAC,iBAAiB,EAAEwC,OAAO,CAAC,EAAA1D,IAAA,WAA7DC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKuE,gBAAgB,YAAhBA,gBAAgBA,CACpBN,OAAgC;IAAA;oBAET,IAAI;MAAA,OAAA9D,OAAA,CAAAC,OAAA,CAAJoE,OAAA,CAAKjF,MAAM,UAAO,CAAC,iBAAiB,EAAE;QAC3DkB,IAAI,EAAEwD;OACP,CAAC,EAAA1D,IAAA,WAFIC,QAAQ;QAGd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAQKyE,cAAc,YAAdA,cAAcA,CAACC,QAAgB;IAAA;oBACZ,IAAI;MAAA,OAAAvE,OAAA,CAAAC,OAAA,CAAJuE,OAAA,CAAKpF,MAAM,CAACe,GAAG,uBAAqBoE,QAAU,CAAC,EAAAnE,IAAA,WAAhEC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAMK4E,gBAAgB,YAAhBA,gBAAgBA;IAAA;oBACG,IAAI;MAAA,OAAAzE,OAAA,CAAAC,OAAA,CAAJyE,OAAA,CAAKtF,MAAM,CAACe,GAAG,CAAC,sBAAsB,CAAC,EAAAC,IAAA,WAAxDC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAMK8E,oBAAoB,YAApBA,oBAAoBA;IAAA;oBACD,IAAI;MAAA,OAAA3E,OAAA,CAAAC,OAAA,CAAJ2E,OAAA,CAAKxF,MAAM,CAACe,GAAG,CAAC,0BAA0B,CAAC,EAAAC,IAAA,WAA5DC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAOKgF,uBAAuB,YAAvBA,uBAAuBA,CAC3Bf,OAAiC;IAAA;oBAEV,IAAI;MAAA,OAAA9D,OAAA,CAAAC,OAAA,CAAJ6E,OAAA,CAAK1F,MAAM,CAAC8D,GAAG,CAAC,0BAA0B,EAAEY,OAAO,CAAC,EAAA1D,IAAA,WAArEC,QAAQ;QACd,OAAOA,QAAQ,CAACC,IAAI;;KACrB,QAAAC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAA,OAAArB,OAAA;AAAA;;;;;;;;;;;;IC9WS6F,cAGX;AAHD,WAAYA,cAAc;EACxBA,yCAAuB;EACvBA,6CAA2B;AAC7B,CAAC,EAHWA,cAAc,KAAdA,cAAc;AAK1B,IAAYC,gBAKX;AALD,WAAYA,gBAAgB;EAC1BA,2CAAuB;EACvBA,6CAAyB;EACzBA,iDAA6B;EAC7BA,mCAAe;AACjB,CAAC,EALWA,gBAAgB,KAAhBA,gBAAgB;AAsC5B,IAAYC,SAOX;AAPD,WAAYA,SAAS;EACnBA,yCAA4B;EAC5BA,6CAAgC;EAChCA,+CAAkC;EAClCA,iDAAoC;EACpCA,yCAA4B;EAC5BA,mDAAsC;AACxC,CAAC,EAPWA,SAAS,KAATA,SAAS;;IC9CTC,QAMX;AAND,WAAYA,QAAQ;EAClBA,yCAAS;EACTA,uCAAQ;EACRA,uCAAQ;EACRA,yCAAS;EACTA,uCAAQ;AACV,CAAC,EANWA,QAAQ,KAARA,QAAQ;AAiBpB,IAAaC,MAAM;EAGjB,SAAAA,OAAYhG;QAAAA;MAAAA,SAAgC,EAAE;;IAC5C,IAAI,CAACA,MAAM,GAAAiG,QAAA;MACTC,OAAO,EAAE,KAAK;MACdC,KAAK,EAAEJ,QAAQ,CAACK,IAAI;MACpBC,MAAM,EAAE,UAAU;MAClBC,SAAS,EAAE,IAAI;MACfC,WAAW,EAAE,IAAI;MACjBC,WAAW,EAAE;OACVxG,MAAM,CACV;;EACF,IAAAU,MAAA,GAAAsF,MAAA,CAAArF,SAAA;EAAAD,MAAA,CAEO+F,SAAS,GAAT,SAAAA,SAASA,CAACN,KAAe;IAC/B,OAAO,IAAI,CAACnG,MAAM,CAACkG,OAAO,IAAIC,KAAK,IAAI,IAAI,CAACnG,MAAM,CAACmG,KAAK;GACzD;EAAAzF,MAAA,CAEOgG,aAAa,GAAb,SAAAA,aAAaA,CAACP,KAAa,EAAE5C,OAAe;IAClD,IAAMoD,KAAK,GAAa,EAAE;IAE1B,IAAI,IAAI,CAAC3G,MAAM,CAACsG,SAAS,EAAE;MACzBK,KAAK,CAACC,IAAI,OAAK,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAE,MAAG,CAAC;;IAG7C,IAAI,IAAI,CAAC9G,MAAM,CAACqG,MAAM,EAAE;MACtBM,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC5G,MAAM,CAACqG,MAAM,CAAC;;IAGhCM,KAAK,CAACC,IAAI,OAAKT,KAAK,MAAG,CAAC;IACxBQ,KAAK,CAACC,IAAI,CAACrD,OAAO,CAAC;IAEnB,OAAOoD,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC;GACvB;EAAArG,MAAA,CAEOsG,UAAU,GAAV,SAAAA,UAAUA,CAAC7F,IAAS;IAC1B,IAAI,CAAC,IAAI,CAACnB,MAAM,CAACuG,WAAW,IAAI,CAACpF,IAAI,EAAE,OAAOO,SAAS;IAEvD,IAAI;MAEF,IAAMuF,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACjG,IAAI,CAAC,CAAC;MAG/C,IAAI,CAACkG,iBAAiB,CAACJ,MAAM,CAAC;MAE9B,OAAO,IAAI,CAACjH,MAAM,CAACwG,WAAW,GAAGS,MAAM,GAAGC,IAAI,CAACE,SAAS,CAACH,MAAM,CAAC;KACjE,CAAC,OAAOK,GAAG,EAAE;MAAA,IAAAC,iBAAA;MAEZ,sBAAmB,CAAApG,IAAI,aAAJA,IAAI,wBAAAoG,iBAAA,GAAJpG,IAAI,CAAEqG,WAAW,cAAAD,iBAAA,uBAAjBA,iBAAA,CAAmBE,IAAI,KAAI,OAAOtG,IAAI;;GAE5D;EAAAT,MAAA,CAEO2G,iBAAiB,GAAjB,SAAAA,iBAAiBA,CAACK,GAAQ;;IAChC,IAAI,CAACA,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IAErC,IAAMC,aAAa,GAAG,CACpB,OAAO,EACP,UAAU,EACV,MAAM,EACN,eAAe,EACf,SAAS,EACT,QAAQ,EACR,QAAQ,CACT;IAAA,IAAAC,KAAA,YAAAA,QAEsB;MACrB,IAAMC,QAAQ,GAAGC,GAAG,CAACC,WAAW,EAAE;MAElC,IAAIJ,aAAa,CAACK,IAAI,CAAC,UAACC,SAAS;QAAA,OAAKJ,QAAQ,CAACK,QAAQ,CAACD,SAAS,CAAC;QAAC,EAAE;QACnEP,GAAG,CAACI,GAAG,CAAC,GAAG,cAAc;OAC1B,MAAM,IAAI,OAAOJ,GAAG,CAACI,GAAG,CAAC,KAAK,QAAQ,EAAE;QACvC/G,KAAI,CAACsG,iBAAiB,CAACK,GAAG,CAACI,GAAG,CAAC,CAAC;;KAEnC;IARD,KAAK,IAAMA,GAAG,IAAIJ,GAAG;MAAAE,KAAA;;GAStB;EAAAlH,MAAA,CAEDyH,KAAK,GAAL,SAAAA,KAAKA,CAAC5E,OAAe,EAAEpC,IAAU;IAC/B,IAAI,CAAC,IAAI,CAACsF,SAAS,CAACV,QAAQ,CAACqC,KAAK,CAAC,EAAE;IAErC,IAAMC,SAAS,GAAG,IAAI,CAAC3B,aAAa,CAAC,OAAO,EAAEnD,OAAO,CAAC;IACtD,IAAM+E,aAAa,GAAG,IAAI,CAACtB,UAAU,CAAC7F,IAAI,CAAC;IAE3C,IAAImH,aAAa,KAAK5G,SAAS,EAAE;MAC/B6G,OAAO,CAACC,GAAG,CAACH,SAAS,EAAEC,aAAa,CAAC;KACtC,MAAM;MACLC,OAAO,CAACC,GAAG,CAACH,SAAS,CAAC;;GAEzB;EAAA3H,MAAA,CAED+H,IAAI,GAAJ,SAAAA,IAAIA,CAAClF,OAAe,EAAEpC,IAAU;IAC9B,IAAI,CAAC,IAAI,CAACsF,SAAS,CAACV,QAAQ,CAACK,IAAI,CAAC,EAAE;IAEpC,IAAMiC,SAAS,GAAG,IAAI,CAAC3B,aAAa,CAAC,MAAM,EAAEnD,OAAO,CAAC;IACrD,IAAM+E,aAAa,GAAG,IAAI,CAACtB,UAAU,CAAC7F,IAAI,CAAC;IAE3C,IAAImH,aAAa,KAAK5G,SAAS,EAAE;MAC/B6G,OAAO,CAACE,IAAI,CAACJ,SAAS,EAAEC,aAAa,CAAC;KACvC,MAAM;MACLC,OAAO,CAACE,IAAI,CAACJ,SAAS,CAAC;;GAE1B;EAAA3H,MAAA,CAEDgI,IAAI,GAAJ,SAAAA,IAAIA,CAACnF,OAAe,EAAEpC,IAAU;IAC9B,IAAI,CAAC,IAAI,CAACsF,SAAS,CAACV,QAAQ,CAAC4C,IAAI,CAAC,EAAE;IAEpC,IAAMN,SAAS,GAAG,IAAI,CAAC3B,aAAa,CAAC,MAAM,EAAEnD,OAAO,CAAC;IACrD,IAAM+E,aAAa,GAAG,IAAI,CAACtB,UAAU,CAAC7F,IAAI,CAAC;IAE3C,IAAImH,aAAa,KAAK5G,SAAS,EAAE;MAC/B6G,OAAO,CAACG,IAAI,CAACL,SAAS,EAAEC,aAAa,CAAC;KACvC,MAAM;MACLC,OAAO,CAACG,IAAI,CAACL,SAAS,CAAC;;GAE1B;EAAA3H,MAAA,CAEDkI,KAAK,GAAL,SAAAA,KAAKA,CAACrF,OAAe,EAAEpC,IAAU;IAC/B,IAAI,CAAC,IAAI,CAACsF,SAAS,CAACV,QAAQ,CAAC8C,KAAK,CAAC,EAAE;IAErC,IAAMR,SAAS,GAAG,IAAI,CAAC3B,aAAa,CAAC,OAAO,EAAEnD,OAAO,CAAC;IACtD,IAAM+E,aAAa,GAAG,IAAI,CAACtB,UAAU,CAAC7F,IAAI,CAAC;IAE3C,IAAImH,aAAa,KAAK5G,SAAS,EAAE;MAC/B6G,OAAO,CAACK,KAAK,CAACP,SAAS,EAAEC,aAAa,CAAC;KACxC,MAAM;MACLC,OAAO,CAACK,KAAK,CAACP,SAAS,CAAC;;GAE3B;EAAA3H,MAAA,CAEDoI,KAAK,GAAL,SAAAA,KAAKA,CAACC,KAAa;IACjB,IAAI,CAAC,IAAI,CAAC/I,MAAM,CAACkG,OAAO,EAAE;IAC1BqC,OAAO,CAACO,KAAK,CAAC,IAAI,CAACpC,aAAa,CAAC,OAAO,EAAEqC,KAAK,CAAC,CAAC;GAClD;EAAArI,MAAA,CAEDsI,QAAQ,GAAR,SAAAA,QAAQA;IACN,IAAI,CAAC,IAAI,CAAChJ,MAAM,CAACkG,OAAO,EAAE;IAC1BqC,OAAO,CAACS,QAAQ,EAAE;GACnB;EAAAtI,MAAA,CAEDuI,IAAI,GAAJ,SAAAA,IAAIA,CAACF,KAAa;IAChB,IAAI,CAAC,IAAI,CAAC/I,MAAM,CAACkG,OAAO,EAAE;IAC1BqC,OAAO,CAACU,IAAI,CAAI,IAAI,CAACjJ,MAAM,CAACqG,MAAM,SAAI0C,KAAO,CAAC;GAC/C;EAAArI,MAAA,CAEDwI,OAAO,GAAP,SAAAA,OAAOA,CAACH,KAAa;IACnB,IAAI,CAAC,IAAI,CAAC/I,MAAM,CAACkG,OAAO,EAAE;IAC1BqC,OAAO,CAACW,OAAO,CAAI,IAAI,CAAClJ,MAAM,CAACqG,MAAM,SAAI0C,KAAO,CAAC;GAClD;EAAArI,MAAA,CAEDyI,YAAY,GAAZ,SAAAA,YAAYA,CAACnJ,MAA6B;IACxC,IAAI,CAACA,MAAM,GAAAiG,QAAA,KAAQ,IAAI,CAACjG,MAAM,EAAKA,MAAM,CAAE;GAC5C;EAAAU,MAAA,CAED0I,SAAS,GAAT,SAAAA,SAASA;IACP,OAAAnD,QAAA,KAAY,IAAI,CAACjG,MAAM;GACxB;EAAA,OAAAgG,MAAA;AAAA;;AC1JH,IAAMqD,cAAc,GAAqB;EACvCC,IAAI,EAAE1D,cAAc,CAAC2D,SAAS;EAC9BC,aAAa,EAAE,IAAI;EACnBC,iBAAiB,EAAE,CAAC;EACpBC,cAAc,EAAE,IAAK;EACrBC,OAAO,EAAE;IACPzD,OAAO,EAAE,KAAK;IACdC,KAAK,EAAEJ,QAAQ,CAACK;GACjB;EACDwD,eAAe,EAAE,KAAK;EACtBC,kBAAkB,EAAE,IAAI;EACxBC,kBAAkB,EAAE,CAAC;EACrBC,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACnCC,cAAc,EAAE;CACjB;AAED,IAAMC,SAAS,GAAG,YAAY;AA4B9B,IAAaC,iBAAiB;EA6C5B,SAAAA,kBACEC,IAAgB,EAChBC,GAAY,EACZC;;QAAAA;MAAAA,UAAqC,EAAE;;IAtBjC,WAAM,GACZ,IAAI;IAEE,WAAM,GAAqBxE,gBAAgB,CAACyE,YAAY;IAExD,mBAAc,GAAG,IAAIC,GAAG,EAA8B;IACtD,oBAAe,GAAqB,EAAE;IACtC,mBAAc,GAA2B,EAAE;IAElC,UAAK,GAAoB,EAAE;IACpC,oBAAe,GAAG,KAAK;IAGvB,eAAU,GAAG,KAAK;IAElB,mBAAc,GAAG,CAAC;IAClB,gBAAW,GAAG,CAAC;IACf,eAAU,GAAG,KAAK;IAOxB,IAAI,CAACJ,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,GAAG,GAAGA,GAAG;IACd,IAAI,CAACI,GAAG,GAAAvE,QAAA,KAAQoD,cAAc,EAAKgB,OAAO,CAAE;IAG5C,IAAI,CAACI,MAAM,GAAG,IAAIzE,MAAM,CAAC,IAAI,CAACwE,GAAG,CAACb,OAAO,IAAI,EAAE,CAAC;IAChD,IAAI,CAACc,MAAM,CAAChC,IAAI,CAAC,+BAA+B,EAAE;MAChDzI,MAAM,EAAE;QACNsJ,IAAI,EAAE,IAAI,CAACkB,GAAG,CAAClB,IAAI;QACnBE,aAAa,EAAE,IAAI,CAACgB,GAAG,CAAChB,aAAa;QACrCC,iBAAiB,EAAE,IAAI,CAACe,GAAG,CAACf,iBAAiB;QAC7CC,cAAc,EAAE,IAAI,CAACc,GAAG,CAACd,cAAc;QACvCgB,cAAc,GAAAC,iBAAA,GAAE,IAAI,CAACH,GAAG,CAACb,OAAO,cAAAgB,iBAAA,uBAAhBA,iBAAA,CAAkBzE;;KAErC,CAAC;IAEF,IAAI,OAAO0E,MAAM,KAAK,WAAW,EAAE;MACjC,IAAMC,KAAK,GAAGC,cAAc,CAACC,OAAO,CAACd,SAAS,CAAC;MAC/C,IAAIY,KAAK,EAAE;QACT,IAAI;UAAA,IAAAG,WAAA;UACF,IAAMC,MAAM,GAAoB/D,IAAI,CAACC,KAAK,CAAC0D,KAAK,CAAC;UACjD,CAAAG,WAAA,OAAI,CAACE,KAAK,EAACtE,IAAI,CAAAuE,KAAA,CAAAH,WAAA,EAAIC,MAAM,CAAC;UAC1B,IAAI,CAACR,MAAM,CAACtC,KAAK,CAAC,6CAA6C,EAAE;YAC/DiD,KAAK,EAAEH,MAAM,CAACI;WACf,CAAC;SACH,CAAC,OAAO/D,GAAG,EAAE;UACZ,IAAI,CAACmD,MAAM,CAAC/B,IAAI,CAAC,sDAAsD,EAAEpB,GAAG,CAAC;;;MAKjF,IAAMgE,YAAY,GAAG,IAAI,CAACC,eAAe,EAAE;MAC3C,IAAID,YAAY,IAAIzE,IAAI,CAAC2E,GAAG,EAAE,GAAGF,YAAY,IAAI,CAAC,IAAI,CAACd,GAAG,CAACR,cAAc,EAAE;QACzE,IAAI,CAACyB,UAAU,GAAG,IAAI;QACtB,IAAI,CAAChB,MAAM,CAAChC,IAAI,CAAC,qDAAqD,EAAE;UACtE6C,YAAY,EAAZA;SACD,CAAC;OACH,MAAM,IAAIA,YAAY,IAAIzE,IAAI,CAAC2E,GAAG,EAAE,IAAIF,YAAY,EAAE;QAErD,IAAI,CAACI,gBAAgB,EAAE;;MAIzB,IAAI,CAACC,WAAW,GAAG,IAAI,CAACC,YAAY,EAAE;;;EAEzC1B,iBAAA,CA5Fa2B,WAAW,GAAlB,SAAOA,WAAWA,CACvB1B,IAAgB,EAChBC,GAAY,EACZC;QAAAA;MAAAA,UAAqC,EAAE;;IAEvC,IAAI,CAACH,iBAAiB,CAAC4B,QAAQ,EAAE;MAC/B5B,iBAAiB,CAAC4B,QAAQ,GAAG,IAAI5B,iBAAiB,CAACC,IAAI,EAAEC,GAAG,EAAEC,OAAO,CAAC;;IAExE,OAAOH,iBAAiB,CAAC4B,QAAQ;GAClC;EAAA5B,iBAAA,CAEa6B,aAAa,GAApB,SAAOA,aAAaA;IACzB,IAAI7B,iBAAiB,CAAC4B,QAAQ,EAAE;MAC9B5B,iBAAiB,CAAC4B,QAAQ,CAACE,UAAU,EAAE;MACvC9B,iBAAiB,CAAC4B,QAAQ,GAAG,IAAI;;GAEpC;EAAA,IAAApL,MAAA,GAAAwJ,iBAAA,CAAAvJ,SAAA;EAAAD,MAAA,CAgFMuL,OAAO,GAAP,SAAAA,OAAOA;IAEZ,IACE,IAAI,CAACC,MAAM,KAAKrG,gBAAgB,CAACsG,SAAS,IAC1C,IAAI,CAACD,MAAM,KAAKrG,gBAAgB,CAACuG,UAAU,IAC3C,IAAI,CAACC,UAAU,EACf;MACA,IAAI,CAAC5B,MAAM,CAACtC,KAAK,CAAC,iDAAiD,EAAE;QACnE+D,MAAM,EAAE,IAAI,CAACA,MAAM;QACnBG,UAAU,EAAE,IAAI,CAACA;OAClB,CAAC;MACF;;IAGF,IAAI,CAAC5B,MAAM,CAAChC,IAAI,CAAC,uBAAuB,EAAE;MACxC6D,SAAS,EAAE,IAAI,CAACnC,IAAI,CAACoC;KACtB,CAAC;IAGF,IAAI,CAACF,UAAU,GAAG,IAAI;IACtB,IAAI,CAACG,SAAS,CAAC3G,gBAAgB,CAACuG,UAAU,CAAC;IAC3C,IAAI,CAACK,SAAS,EAAE;GACjB;EAAA/L,MAAA,CAEMsL,UAAU,GAAV,SAAAA,UAAUA;;IACf,IAAI,CAACvB,MAAM,CAAChC,IAAI,CAAC,8BAA8B,CAAC;IAChD,IAAI,CAACiE,WAAW,EAAE;IAElB,CAAAC,YAAA,OAAI,CAACC,MAAM,cAAAD,YAAA,uBAAXA,YAAA,CAAaX,UAAU,EAAE;IACzB,IAAI,CAACY,MAAM,GAAG,IAAI;IAClB,IAAI,CAACP,UAAU,GAAG,KAAK;IACvB,IAAI,CAACG,SAAS,CAAC3G,gBAAgB,CAACyE,YAAY,CAAC;IAC7C,IAAI,CAACG,MAAM,CAAChC,IAAI,CAAC,2BAA2B,CAAC;GAC9C;EAAA/H,MAAA,CAEMmM,SAAS,GAAT,SAAAA,SAASA;IACd,OAAO,IAAI,CAACX,MAAM;GACnB;EAAAxL,MAAA,CAEMoM,YAAY,GAAZ,SAAAA,YAAYA,CAACC,GAAuB,EAAEC,WAAW;QAAXA,WAAW;MAAXA,WAAW,GAAG,CAAC;;IAC1D,IAAMC,EAAE,GACN,OAAOC,MAAM,KAAK,WAAW,IAAKA,MAAc,CAACC,UAAU,GACtDD,MAAc,CAACC,UAAU,EAAE,GAC5B,CAACtG,IAAI,CAAC2E,GAAG,EAAE,GAAG4B,IAAI,CAACC,MAAM,EAAE,EAAEC,QAAQ,CAAC,EAAE,CAAC;IAE/C,IAAMC,aAAa,GAAG;MACpBN,EAAE,EAAFA,EAAE;MACF1J,OAAO,EAAEwJ,GAAG;MACZS,QAAQ,EAAE,CAAC;MACXR,WAAW,EAAXA,WAAW;MACX1G,SAAS,EAAEO,IAAI,CAAC2E,GAAG;KACpB;IAED,IAAI,CAACf,MAAM,CAACtC,KAAK,CAAC,kBAAkB,EAAE;MACpC/E,SAAS,EAAE6J,EAAE;MACbQ,QAAQ,EAAEV,GAAG,CAACW,kBAAkB;MAChCC,UAAU,EAAE,CAAC,CAACZ,GAAG,CAACa,OAAO;MACzBC,cAAc,EAAE,CAAC,EAAEd,GAAG,CAACe,WAAW,IAAIf,GAAG,CAACe,WAAW,CAACzC,MAAM,GAAG,CAAC,CAAC;MACjE2B,WAAW,EAAXA;KACD,CAAC;IAEF,IAAI,CAAC9B,KAAK,CAACtE,IAAI,CAAC2G,aAAa,CAAC;IAC9B,IAAI,CAACQ,SAAS,EAAE;IAChB,IAAI,CAACC,YAAY,EAAE;IACnB,OAAOf,EAAE;GACV;EAAAvM,MAAA,CAEMuN,EAAE,GAAF,SAAAA,EAAEA,CAACC,GAAc,EAAEC,EAAiB;IACzC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACC,cAAc,EAAEH,GAAG,EAAEC,EAAE,CAAC;GACvC;EAAAzN,MAAA,CAEM4N,GAAG,GAAH,SAAAA,GAAGA,CAACJ,GAAc,EAAEC,EAAiB;IAC1C,IAAI,CAACI,MAAM,CAAC,IAAI,CAACF,cAAc,EAAEH,GAAG,EAAEC,EAAE,CAAC;GAC1C;EAAAzN,MAAA,CAEM8N,IAAI,GAAJ,SAAAA,IAAIA,CAACN,GAAQ;;sCAAKO,IAAW,OAAAC,KAAA,CAAAC,IAAA,OAAAA,IAAA,WAAAC,IAAA,MAAAA,IAAA,GAAAD,IAAA,EAAAC,IAAA;MAAXH,IAAW,CAAAG,IAAA,QAAAC,SAAA,CAAAD,IAAA;;IAClC,IAAI,CAACnE,MAAM,CAACtC,KAAK,CAAC,gBAAgB,EAAE;MAClC2G,KAAK,EAAEZ,GAAG;MACVO,IAAI,EAAEA,IAAI,CAACpD,MAAM,GAAG,CAAC,GAAGoD,IAAI,GAAG/M;KAChC,CAAC;IACF,CAAAqN,aAAA,OAAI,CAACnC,MAAO,EAAC4B,IAAI,CAAArD,KAAA,CAAA4D,aAAA,GAACb,GAAG,EAAAc,MAAA,CAAKP,IAAI,EAAC;GAChC;EAAA/N,MAAA,CAEMuO,cAAc,GAAd,SAAAA,cAAcA,CAACd,EAAkB;IACtC,IAAI,CAACe,eAAe,CAACtI,IAAI,CAACuH,EAAE,CAAC;GAC9B;EAAAzN,MAAA,CAEMyO,eAAe,GAAf,SAAAA,eAAeA,CAAChB,EAAkB;IACvC,IAAMiB,CAAC,GAAG,IAAI,CAACF,eAAe,CAACG,OAAO,CAAClB,EAAE,CAAC;IAC1C,IAAIiB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAACF,eAAe,CAACI,MAAM,CAACF,CAAC,EAAE,CAAC,CAAC;GAChD;EAAA1O,MAAA,CAEM6O,OAAO,GAAP,SAAAA,OAAOA,CAACpB,EAAsB;IACnC,IAAI,CAACqB,cAAc,CAAC5I,IAAI,CAACuH,EAAE,CAAC;GAC7B;EAAAzN,MAAA,CAEM+O,QAAQ,GAAR,SAAAA,QAAQA,CAACtB,EAAsB;IACpC,IAAMiB,CAAC,GAAG,IAAI,CAACI,cAAc,CAACH,OAAO,CAAClB,EAAE,CAAC;IACzC,IAAIiB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAACI,cAAc,CAACF,MAAM,CAACF,CAAC,EAAE,CAAC,CAAC;GAC/C;EAAA1O,MAAA,CAEMgP,aAAa,GAAb,SAAAA,aAAaA,CAAC1P,MAA6B;IAChD,IAAI,CAACyK,MAAM,CAACtB,YAAY,CAACnJ,MAAM,CAAC;IAChC,IAAI,CAACyK,MAAM,CAAChC,IAAI,CAAC,+BAA+B,EAAEzI,MAAM,CAAC;GAC1D;EAAAU,MAAA,CAEMiP,gBAAgB,GAAhB,SAAAA,gBAAgBA;IACrB,OAAO,IAAI,CAAClF,MAAM,CAACrB,SAAS,EAAE;GAC/B;EAAA1I,MAAA,CAIO+L,SAAS,GAAT,SAAAA,SAASA;;IACf,IAAI;MACF,IAAI,CAAChC,MAAM,CAACtC,KAAK,CAAC,+BAA+B,EAAE;QACjDyH,GAAG,EAAE,IAAI,CAACzF,IAAI,CAACoC,aAAa;QAC5BsD,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAACjD,MAAM;QAChCkD,QAAQ,EAAE,IAAI,CAACrE;OAChB,CAAC;MAEF,IAAI,IAAI,CAACmB,MAAM,EAAE;QACf,IAAI,CAACnC,MAAM,CAACtC,KAAK,CAAC,wCAAwC,CAAC;QACzD,IAAI,CAACyE,MAAc,CAACmD,kBAAkB,EAAE;QAC1C,IAAI,CAACnD,MAAM,CAACZ,UAAU,EAAE;;MAG1B,IAAMgE,UAAU,GAAG,IAAI,CAACC,eAAe,EAAE;MACzC,IAAI,CAACxF,MAAM,CAACtC,KAAK,CAAC,8BAA8B,EAAE6H,UAAU,CAAC;MAE7D,IAAI,CAACpD,MAAM,GAAGsD,EAAE,CAAC,IAAI,CAAC/F,IAAI,CAACoC,aAAa,EAAEyD,UAAU,CAAC;MAGrD,IAAI;QACF,IAAMG,OAAO,GAAI,IAAI,CAACvD,MAAc,CAACsD,EAAE;QACvC,IAAME,MAAM,GAAGD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,MAAM;QAC9B,IAAIA,MAAM,IAAI,OAAOA,MAAM,CAACnC,EAAE,KAAK,UAAU,EAAE;UAC7CmC,MAAM,CAACnC,EAAE,CAAC,SAAS,EAAE,UAACoC,SAAc;YAClC,IAAM5I,IAAI,GAAG,CAAA4I,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE5I,IAAI,KAAI4I,SAAS;YACzCtP,KAAI,CAAC0J,MAAM,CAAChC,IAAI,CAAC,2BAA2B,EAAE;cAAE4H,SAAS,EAAE5I;aAAM,CAAC;YAClE,IAAIA,IAAI,KAAK,WAAW,EAAE;cACxB1G,KAAI,CAACuP,eAAe,EAAE;cAEtB,IAAIvP,KAAI,CAAC0K,UAAU,EAAE;gBACnB1K,KAAI,CAAC0J,MAAM,CAAChC,IAAI,CAAC,0DAA0D,CAAC;gBAC5E1H,KAAI,CAAC2K,gBAAgB,EAAE;gBACvB3K,KAAI,CAAC0K,UAAU,GAAG,KAAK;;;WAG5B,CAAC;UACF2E,MAAM,CAACnC,EAAE,CAAC,cAAc,EAAE,UAAC3G,GAAQ;YACjCvG,KAAI,CAAC0J,MAAM,CAAC/B,IAAI,CAAC,yBAAyB,EAAE;cAAEE,KAAK,EAAE,CAAAtB,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAE/D,OAAO,KAAI+D;aAAK,CAAC;YAC3EvG,KAAI,CAACwP,WAAW,EAAE;WACnB,CAAC;;OAEL,CAAC,OAAOC,SAAS,EAAE;QAClB,IAAI,CAAC/F,MAAM,CAACtC,KAAK,CAAC,4CAA4C,EAAE;UAAES,KAAK,EAAG,CAAA4H,SAAiB,aAAjBA,SAAiB,uBAAjBA,SAAiB,CAAEjN,OAAO,KAAIiN;SAAW,CAAC;;MAItH,IAAI,CAAC5D,MAAM,CAACqB,EAAE,CAAC,SAAS,EAAE;QACxBlN,KAAI,CAAC0J,MAAM,CAAChC,IAAI,CAAC,kCAAkC,EAAE;UACnDgI,QAAQ,EAAG1P,KAAI,CAAC6L,MAAc,CAACK,EAAE;UACjCyD,cAAc,EAAE3P,KAAI,CAAC2P;SACtB,CAAC;QACF3P,KAAI,CAACsL,UAAU,GAAG,KAAK;QACvBtL,KAAI,CAAC2P,cAAc,GAAG,CAAC;QACvB3P,KAAI,CAACyL,SAAS,CAAC3G,gBAAgB,CAACsG,SAAS,CAAC;QAC1CpL,KAAI,CAACiN,YAAY,EAAE;OACpB,CAAC;MAGF,IAAI,CAACpB,MAAM,CAACqB,EAAE,CAAC,eAAe,EAAE,UAAC3G,GAAG;QAClCvG,KAAI,CAAC0J,MAAM,CAAC7B,KAAK,CAAC,4BAA4B,EAAE;UAC9CA,KAAK,EAAEtB,GAAG,CAAC/D,OAAO;UAClB+F,IAAI,EAAGhC,GAAW,CAACgC,IAAI,IAAI,SAAS;UACpCoH,cAAc,EAAE3P,KAAI,CAAC2P;SACtB,CAAC;QACF3P,KAAI,CAACsL,UAAU,GAAG,KAAK;QAEvB,IAAI,CAACtL,KAAI,CAAC0K,UAAU,IAAI,CAAC1K,KAAI,CAACyJ,GAAG,CAACZ,eAAe,IAAI,CAAC7I,KAAI,CAACyJ,GAAG,CAACR,cAAc,EAAE;UAC7EjJ,KAAI,CAACwP,WAAW,EAAE;;QAEpBxP,KAAI,CAAC4P,eAAe,CAACrJ,GAAG,CAAC;OAC1B,CAAC;MAGF,IAAI,CAACsF,MAAM,CAACqB,EAAE,CAAC,YAAY,EAAE,UAAC2C,MAAM;QAClC7P,KAAI,CAAC0J,MAAM,CAAChC,IAAI,CAAC,wBAAwB,EAAE;UACzCmI,MAAM,EAANA,MAAM;UACNC,aAAa,EAAE9P,KAAI,CAACyJ,GAAG,CAAChB;SACzB,CAAC;QACFzI,KAAI,CAACsL,UAAU,GAAG,KAAK;QACvBtL,KAAI,CAACyL,SAAS,CAAC3G,gBAAgB,CAACyE,YAAY,CAAC;QAC7CvJ,KAAI,CAAC+P,iBAAiB,EAAE;OACzB,CAAC;MAGF,IAAI,IAAI,CAACrG,MAAM,CAACrB,SAAS,EAAE,CAACjD,KAAK,IAAIJ,QAAQ,CAACqC,KAAK,EAAE;QAEnD,IAAI,CAACwE,MAAM,CAACqB,EAAE,CAAC,MAAM,EAAE;UACrBlN,KAAI,CAAC0J,MAAM,CAACtC,KAAK,CAAC,qBAAqB,CAAC;SACzC,CAAC;QAEF,IAAI,CAACyE,MAAM,CAACqB,EAAE,CAAC,MAAM,EAAE,UAAC8C,OAAe;UACrChQ,KAAI,CAAC0J,MAAM,CAACtC,KAAK,CAAC,yBAAyB,EAAE;YAAE4I,OAAO,EAAPA;WAAS,CAAC;SAC1D,CAAC;;MAIJC,MAAM,CAACC,MAAM,CAACnL,SAAS,CAAC,CAACoL,OAAO,CAAC,UAAChD,GAAG;QAEnCnN,KAAI,CAAC6L,MAAO,CAACqB,EAAE,CAACC,GAAU,EAAE,UAAC/M,IAAS;UACpCJ,KAAI,CAAC0J,MAAM,CAACtC,KAAK,CAAC,yBAAyB,EAAE;YAC3C2G,KAAK,EAAEZ,GAAG;YACV/M,IAAI,EAAJA;WACD,CAAC;UACFJ,KAAI,CAACoQ,WAAW,CAAC;YAAE7H,IAAI,EAAE4E,GAAgB;YAAE/M,IAAI,EAAJA;WAAM,CAAC;SACnD,CAAC;OACH,CAAC;MAEF,IAAI,CAACsJ,MAAM,CAACtC,KAAK,CAAC,sCAAsC,EAAE;QACxDiJ,MAAM,EAAEJ,MAAM,CAACC,MAAM,CAACnL,SAAS;OAChC,CAAC;KACH,CAAC,OAAOwB,GAAG,EAAE;MACZ,IAAI,CAACmD,MAAM,CAAC7B,KAAK,CAAC,iCAAiC,EAAEtB,GAAG,CAAC;MACzD,IAAI,CAAC+E,UAAU,GAAG,KAAK;MACvB,IAAI,CAACsE,eAAe,CAACrJ,GAAG,CAAC;;GAE5B;EAAA5G,MAAA,CAEOuP,eAAe,GAAf,SAAAA,eAAeA;IACrB,IAAMoB,SAAS,GAAG,OAAOzG,MAAM,KAAK,WAAW;IAC/C,IAAMtK,OAAO,GAAA2F,QAAA,KACR,IAAI,CAACuE,GAAG,CAAClK,OAAO;MACnBC,aAAa,cAAY,IAAI,CAAC4J,IAAI,CAAC3J;MACpC;IAGD,IAAI8Q,UAAU,GAAa,CAAC,WAAW,CAAC;IACxC,IAAMxB,QAAQ,GAAG,IAAI,CAACrE,UAAU,IAAI,CAAC,IAAI,CAACjB,GAAG,CAACR,cAAc;IAC5D,IAAI,IAAI,CAACQ,GAAG,CAACZ,eAAe,IAAIkG,QAAQ,EAAE;MACxCwB,UAAU,GAAG,CAAC,SAAS,CAAC;KACzB,MAAM,IAAI,IAAI,CAAC9G,GAAG,CAAClB,IAAI,KAAK1D,cAAc,CAAC2L,WAAW,EAAE;MACvDD,UAAU,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;KACtC,MAAM;MACLA,UAAU,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;;IAGvC,IAAME,IAAI,GAAkG;MAE1GC,YAAY,EAAE,KAAK;MACnBC,eAAe,EAAE,CAAC,IAAI,CAAClH,GAAG,CAACZ,eAAe,IAAI,CAACkG,QAAQ;MACvD6B,OAAO,EAAE,KAAK;MACdxH,IAAI,EAAAlE,QAAA;QAAIzF,KAAK,EAAE,IAAI,CAAC2J,IAAI,CAAC3J;SAAW,IAAI,CAACgK,GAAG,CAACoH,SAAS,IAAI,EAAE,CAAG;MAC/DN,UAAU,EAAEA,UAAU;MACtBO,OAAO,EAAE,CAAC,IAAI,CAACrH,GAAG,CAACZ,eAAe,IAAI,CAACkG;KACxC;IAED,IAAI,CAACuB,SAAS,EAAE;MAGdG,IAAI,CAACM,gBAAgB,GAAG;QACtBC,OAAO,EAAE;UAAEC,YAAY,EAAE1R;SAAS;QAClC2R,SAAS,EAAE;UAAED,YAAY,EAAE1R;;OAC5B;KACF,MAAM,IAAI,IAAI,CAACkK,GAAG,CAAClB,IAAI,KAAK1D,cAAc,CAAC2L,WAAW,IAAI,IAAI,CAAC/G,GAAG,CAACZ,eAAe,EAAE;MAGnF,IAAMsI,KAAK,GAA2B,EAAE;MACxC,IAAI,IAAI,CAAC1H,GAAG,CAACoH,SAAS,EAAE;QACtBZ,MAAM,CAACmB,OAAO,CAAC,IAAI,CAAC3H,GAAG,CAACoH,SAAS,CAAC,CAACV,OAAO,CAAC,UAAAkB,IAAA;cAAEtK,GAAG,GAAAsK,IAAA;YAAEC,KAAK,GAAAD,IAAA;UACrDF,KAAK,CAACpK,GAAG,CAAC,GAAGnG,MAAM,CAAC0Q,KAAK,CAAC;SAC3B,CAAC;;MAEHb,IAAY,CAACU,KAAK,GAAGA,KAAK;;IAG7B,IAAI,CAACzH,MAAM,CAACtC,KAAK,CAAC,sBAAsB,EAAE;MACxCkJ,SAAS,EAATA,SAAS;MACTiB,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC9H,GAAG,CAACoH,SAAS;MAClCW,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC/H,GAAG,CAAClK,OAAO;MAC9BqR,OAAO,EAAGH,IAAY,CAACG,OAAO;MAC9BL,UAAU,EAAGE,IAAY,CAACF,UAAU;MACpC1H,eAAe,EAAE,IAAI,CAACY,GAAG,CAACZ,eAAe;MACzCkG,QAAQ,EAARA,QAAQ;MACR4B,eAAe,EAAGF,IAAY,CAACE,eAAe;MAC9CG,OAAO,EAAGL,IAAY,CAACK;KACxB,CAAC;IAEF,OAAOL,IAAI;GACZ;EAAA9Q,MAAA,CAIOiQ,eAAe,GAAf,SAAAA,eAAeA,CAACrJ,GAAS;;IAC/B,IAAI,CAACmD,MAAM,CAAC7B,KAAK,CAAC,2BAA2B,EAAE;MAC7CA,KAAK,EAAE,CAAAtB,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAE/D,OAAO,KAAI+D,GAAG;MAC1BkL,SAAS,EAAE,CAAAlL,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEgC,IAAI,KAAI,SAAS;MACjCuH,aAAa,EAAE,IAAI,CAACrG,GAAG,CAAChB,aAAa,IAAI,IAAI,CAACkH,cAAc,GAAG,IAAI,CAAClG,GAAG,CAACf;KACzE,CAAC;IAEF,IAAI,CAAC+C,SAAS,CAAC3G,gBAAgB,CAAC4M,KAAK,CAAC;IACtC,IAAI,CAACjD,cAAc,CAAC0B,OAAO,CAAC,UAAC/C,EAAE;MAC7B,IAAI;QACFA,EAAE,CAAC7G,GAAG,CAAC;OACR,CAAC,OAAOoL,WAAW,EAAE;QACpB7Q,MAAI,CAAC4I,MAAM,CAAC/B,IAAI,CAAC,yBAAyB,EAAEgK,WAAW,CAAC;;KAE3D,CAAC;IACF,IAAI,CAAChG,WAAW,EAAE;IAClB,IAAI,CAACoE,iBAAiB,EAAE;GACzB;EAAApQ,MAAA,CAIasN,YAAY,YAAZA,YAAYA;IAAA;;QAsDxBhM,MAAA,CAAK2Q,eAAe,GAAG,KAAK;QAAA,IAExB3Q,MAAA,CAAKkJ,KAAK,CAACG,MAAM;UACnBrJ,MAAA,CAAKyI,MAAM,CAACtC,KAAK,CAAC,sDAAsD,EAAE;YACxEyK,iBAAiB,EAAE5Q,MAAA,CAAKkJ,KAAK,CAACG;WAC/B,CAAC;UACFwH,UAAU,CAAC;YAAA,OAAM7Q,MAAA,CAAKgM,YAAY,EAAE;aAAE,GAAG,CAAC;;;MAAA,IAAA8E,UAAA;MAAA,IAAA9Q,MAAA,GA3DxC,IAAI;MAAR,IAAIA,MAAA,CAAK2Q,eAAe,IAAI3Q,MAAA,CAAKkK,MAAM,KAAKrG,gBAAgB,CAACsG,SAAS,EAAE;QACtEnK,MAAA,CAAKyI,MAAM,CAACtC,KAAK,CAAC,2BAA2B,EAAE;UAC7CwK,eAAe,EAAE3Q,MAAA,CAAK2Q,eAAe;UACrCzG,MAAM,EAAElK,MAAA,CAAKkK,MAAM;UACnB6G,WAAW,EAAE/Q,MAAA,CAAKkJ,KAAK,CAACG;SACzB,CAAC;QACF,OAAAxK,OAAA,CAAAC,OAAA;;MAGF,IAAIkB,MAAA,CAAKkJ,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;QAC3BrJ,MAAA,CAAKyI,MAAM,CAACtC,KAAK,CAAC,oCAAoC,CAAC;QACvD,OAAAtH,OAAA,CAAAC,OAAA;;MAGFkB,MAAA,CAAKyI,MAAM,CAACtC,KAAK,CAAC,2BAA2B,EAAE;QAC7C4K,WAAW,EAAE/Q,MAAA,CAAKkJ,KAAK,CAACG;OACzB,CAAC;MAEFrJ,MAAA,CAAK2Q,eAAe,GAAG,IAAI;MAAA,IAAAK,MAAA,GAAAC,IAAA;QAAA,QAAAH,UAAA,IACpB,EAAA9Q,MAAA,CAAKkJ,KAAK,CAACG,MAAM,IAAIrJ,MAAA,CAAKkK,MAAM,KAAKrG,gBAAgB,CAACsG,SAAS;6BAAE;QACtE,IAAM+G,CAAC,GAAGlR,MAAA,CAAKkJ,KAAK,CAAC,CAAC,CAAC;QACvBgI,CAAC,CAAC1F,QAAQ,IAAI,CAAC;QAEfxL,MAAA,CAAKyI,MAAM,CAACtC,KAAK,CAAC,2BAA2B,EAAE;UAC7C/E,SAAS,EAAE8P,CAAC,CAACjG,EAAE;UACfkG,OAAO,EAAED,CAAC,CAAC1F,QAAQ;UACnBR,WAAW,EAAEkG,CAAC,CAAClG,WAAW;UAC1BoG,GAAG,EAAEvM,IAAI,CAAC2E,GAAG,EAAE,GAAG0H,CAAC,CAAC5M;SACrB,CAAC;QAAA,IAAA+M,KAAA,GAAAC,MAAA,aAEE;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACIkB,MAAA,CAAKuR,eAAe,CAACL,CAAC,CAAC3P,OAAO,CAAC,EAAAtC,IAAA;YACrCe,MAAA,CAAKyI,MAAM,CAAChC,IAAI,CAAC,kCAAkC,EAAE;cACnDrF,SAAS,EAAE8P,CAAC,CAACjG,EAAE;cACfO,QAAQ,EAAE0F,CAAC,CAAC1F;aACb,CAAC;YACFxL,MAAA,CAAKkJ,KAAK,CAACsI,KAAK,EAAE;YAClBxR,MAAA,CAAK+L,SAAS,EAAE;;SACjB,YAAQzG,GAAG,EAAE;UACZtF,MAAA,CAAKyI,MAAM,CAAC7B,KAAK,6CAA2CsK,CAAC,CAAC1F,QAAQ,SAAI0F,CAAC,CAAClG,WAAW,QAAK;YAC1F5J,SAAS,EAAE8P,CAAC,CAACjG,EAAE;YACfrE,KAAK,EAAEtB;WACR,CAAC;UACF,IAAI4L,CAAC,CAAC1F,QAAQ,IAAI0F,CAAC,CAAClG,WAAW,EAAE;YAC/BhL,MAAA,CAAKyI,MAAM,CAAC/B,IAAI,CAAC,oDAAoD,EAAE;cACrEtF,SAAS,EAAE8P,CAAC,CAACjG;aACd,CAAC;YACFjL,MAAA,CAAKkJ,KAAK,CAACsI,KAAK,EAAE;;UAEpBxR,MAAA,CAAK+L,SAAS,EAAE;UAAA+E,UAAA;SAEjB;QAAA,IAAAO,KAAA,IAAAA,KAAA,CAAApS,IAAA,SAAAoS,KAAA,CAAApS,IAAA;OACF;MAAA,OAAAJ,OAAA,CAAAC,OAAA,CAAAkS,MAAA,IAAAA,MAAA,CAAA/R,IAAA,GAAA+R,MAAA,CAAA/R,IAAA,CAAAwS,MAAA,IAAAA,MAAA,CAAAT,MAAA;KASF,QAAA5R,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAEa6S,eAAe,YAAfA,eAAeA,CAACxG,GAAuB;IAAA;mBACnD,IAAI;MAAJ7K,MAAA,CAAKuI,MAAM,CAACtC,KAAK,CAAC,0BAA0B,EAAE;QAC5CsF,QAAQ,EAAEV,GAAG,CAACW,kBAAkB;QAChCC,UAAU,EAAE,CAAC,CAACZ,GAAG,CAACa,OAAO;QACzBC,cAAc,EAAE,CAAC,EAAEd,GAAG,CAACe,WAAW,IAAIf,GAAG,CAACe,WAAW,CAACzC,MAAM,GAAG,CAAC;OACjE,CAAC;MAEFnJ,MAAA,CAAKuI,MAAM,CAACxB,IAAI,CAAC,aAAa,CAAC;MAAA,OAAApI,OAAA,CAAAC,OAAA,CAAAwS,MAAA,aAC3B;QAAA,OAAAzS,OAAA,CAAAC,OAAA,CACIoB,MAAA,CAAKkI,GAAG,CAAC9G,WAAW,CAACyJ,GAAG,CAAC,EAAA9L,IAAA;UAC/BiB,MAAA,CAAKuI,MAAM,CAACvB,OAAO,CAAC,aAAa,CAAC;UAClChH,MAAA,CAAKuI,MAAM,CAACtC,KAAK,CAAC,oCAAoC,CAAC;;OACxD,YAAQb,GAAG,EAAE;QACZpF,MAAA,CAAKuI,MAAM,CAACvB,OAAO,CAAC,aAAa,CAAC;QAClChH,MAAA,CAAKuI,MAAM,CAAC7B,KAAK,CAAC,iCAAiC,EAAEtB,GAAG,CAAC;QACzD,MAAMA,GAAG;OACV;KACF,QAAAlG,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EAAAV,MAAA,CAIOyQ,WAAW,GAAX,SAAAA,WAAWA,CAACjD,GAAkB;;IACpC,IAAMwF,SAAS,GAAG,IAAI,CAACrF,cAAc,CAACrN,GAAG,CAACkN,GAAG,CAAC5E,IAAI,CAAC,IAAI,EAAE;IAEzD,IAAI,CAACmB,MAAM,CAACtC,KAAK,CAAC,gBAAgB,EAAE;MAClCmB,IAAI,EAAE4E,GAAG,CAAC5E,IAAI;MACdqK,aAAa,EAAED,SAAS,CAACrI,MAAM;MAC/BuI,OAAO,EAAE,CAAC,CAAC1F,GAAG,CAAC/M;KAChB,CAAC;IAEFuS,SAAS,CAACxC,OAAO,CAAC,UAAC/C,EAAE,EAAE0F,KAAK;MAC1B,IAAI;QACF1F,EAAE,CAACD,GAAG,CAAC;OACR,CAAC,OAAO5G,GAAG,EAAE;QACZjF,MAAI,CAACoI,MAAM,CAAC7B,KAAK,+BAA6BsF,GAAG,CAAC5E,IAAI,EAAI;UACxDwK,aAAa,EAAED,KAAK;UACpBjL,KAAK,EAAEtB;SACR,CAAC;;KAEL,CAAC;GACH;EAAA5G,MAAA,CAEO8L,SAAS,GAAT,SAAAA,SAASA,CAACuH,CAAmB;;IACnC,IAAI,IAAI,CAAC7H,MAAM,KAAK6H,CAAC,EAAE;MACrB,IAAI,CAACtJ,MAAM,CAACtC,KAAK,CAAC,kBAAkB,EAAE;QAAE+D,MAAM,EAAE6H;OAAG,CAAC;MACpD;;IAGF,IAAMC,SAAS,GAAG,IAAI,CAAC9H,MAAM;IAC7B,IAAI,CAACA,MAAM,GAAG6H,CAAC;IAEf,IAAI,CAACtJ,MAAM,CAAChC,IAAI,CAAC,2BAA2B,EAAE;MAC5CwL,IAAI,EAAED,SAAS;MACfE,EAAE,EAAEH,CAAC;MACLJ,aAAa,EAAE,IAAI,CAACzE,eAAe,CAAC7D;KACrC,CAAC;IAEF,IAAI,CAAC6D,eAAe,CAACgC,OAAO,CAAC,UAAC/C,EAAE,EAAE0F,KAAK;MACrC,IAAI;QACF1F,EAAE,CAAC4F,CAAC,CAAC;OACN,CAAC,OAAO3S,CAAC,EAAE;QACVmB,MAAI,CAACkI,MAAM,CAAC7B,KAAK,CAAC,uBAAuB,EAAE;UACzCkL,aAAa,EAAED,KAAK;UACpBjL,KAAK,EAAExH;SACR,CAAC;;KAEL,CAAC;GACH;EAAAV,MAAA,CAEOoQ,iBAAiB,GAAjB,SAAAA,iBAAiBA;;IACvB,IAAI,CAAC,IAAI,CAACtG,GAAG,CAAChB,aAAa,EAAE;MAC3B,IAAI,CAACiB,MAAM,CAACtC,KAAK,CAAC,mDAAmD,CAAC;MACtE;;IAGF,IAAI,IAAI,CAACuI,cAAc,IAAI,IAAI,CAAClG,GAAG,CAACf,iBAAiB,EAAE;MACrD,IAAI,CAACgB,MAAM,CAAC/B,IAAI,CAAC,gCAAgC,EAAE;QACjDgI,cAAc,EAAE,IAAI,CAACA,cAAc;QACnC1D,WAAW,EAAE,IAAI,CAACxC,GAAG,CAACf;OACvB,CAAC;MACF;;IAGF,IAAI,CAACiH,cAAc,IAAI,CAAC;IAExB,IAAI,CAACjG,MAAM,CAAChC,IAAI,CAAC,sBAAsB,EAAE;MACvC0K,OAAO,EAAE,IAAI,CAACzC,cAAc;MAC5B1D,WAAW,EAAE,IAAI,CAACxC,GAAG,CAACf,iBAAiB;MACvC0K,OAAO,EAAE,IAAI,CAAC3J,GAAG,CAACd;KACnB,CAAC;IAEFmJ,UAAU,CAAC;MACTnQ,MAAI,CAAC+H,MAAM,CAACtC,KAAK,CAAC,+BAA+B,EAAE;QACjDgL,OAAO,EAAEzQ,MAAI,CAACgO;OACf,CAAC;MACFhO,MAAI,CAACuJ,OAAO,EAAE;KACf,EAAE,IAAI,CAACzB,GAAG,CAACd,cAAc,CAAC;GAC5B;EAAAhJ,MAAA,CAEOgM,WAAW,GAAX,SAAAA,WAAWA,KAAW;EAAAhM,MAAA,CAEtBqN,SAAS,GAAT,SAAAA,SAASA;IACf,IAAI,OAAOnD,MAAM,KAAK,WAAW,EAAE;IACnC,IAAI;MACFE,cAAc,CAACsJ,OAAO,CAACnK,SAAS,EAAE/C,IAAI,CAACE,SAAS,CAAC,IAAI,CAAC8D,KAAK,CAAC,CAAC;MAC7D,IAAI,CAACT,MAAM,CAACtC,KAAK,CAAC,gCAAgC,EAAE;QAClDiD,KAAK,EAAE,IAAI,CAACF,KAAK,CAACG;OACnB,CAAC;KACH,CAAC,OAAO/D,GAAG,EAAE;MACZ,IAAI,CAACmD,MAAM,CAAC/B,IAAI,CAAC,yCAAyC,EAAEpB,GAAG,CAAC;;GAEnE;EAAA5G,MAAA,CAEO0N,GAAG,GAAH,SAAAA,GAAGA,CAAQiG,CAAe,EAAEC,CAAI,EAAEnG,EAAM;IAC9C,IAAI,CAACkG,CAAC,CAACE,GAAG,CAACD,CAAC,CAAC,EAAED,CAAC,CAACG,GAAG,CAACF,CAAC,EAAE,EAAE,CAAC;IAC3BD,CAAC,CAACrT,GAAG,CAACsT,CAAC,CAAE,CAAC1N,IAAI,CAACuH,EAAE,CAAC;GACnB;EAAAzN,MAAA,CAEO6N,MAAM,GAAN,SAAAA,MAAMA,CAAQ8F,CAAe,EAAEC,CAAI,EAAEnG,EAAM;IACjD,IAAMsG,GAAG,GAAGJ,CAAC,CAACrT,GAAG,CAACsT,CAAC,CAAC;IACpB,IAAI,CAACG,GAAG,EAAE;IACV,IAAMrF,CAAC,GAAGqF,GAAG,CAACpF,OAAO,CAAClB,EAAE,CAAC;IACzB,IAAIiB,CAAC,KAAK,CAAC,CAAC,EAAEqF,GAAG,CAACnF,MAAM,CAACF,CAAC,EAAE,CAAC,CAAC;GAC/B;EAAA1O,MAAA,CAGOgU,gBAAgB,GAAhB,SAAAA,gBAAgBA;IACtB,IAAI;MACF,IAAI,OAAO9J,MAAM,KAAK,WAAW,EAAE,OAAO,KAAK;MAC/C,IAAM+J,OAAO,GAAG,WAAW;MAC3B/J,MAAM,CAACgK,YAAY,CAACR,OAAO,CAACO,OAAO,EAAE,GAAG,CAAC;MACzC/J,MAAM,CAACgK,YAAY,CAACC,UAAU,CAACF,OAAO,CAAC;MACvC,OAAO,IAAI;KACZ,CAAC,OAAAG,OAAA,EAAM;MACN,OAAO,KAAK;;GAEf;EAAApU,MAAA,CAEOqU,OAAO,GAAP,SAAAA,OAAOA;IACb,2BAAyB,IAAI,CAAC5K,IAAI,CAACoC,aAAa;GACjD;EAAA7L,MAAA,CAEOsU,QAAQ,GAAR,SAAAA,QAAQA;IACd,8BAA4B,IAAI,CAAC7K,IAAI,CAACoC,aAAa;GACpD;EAAA7L,MAAA,CAEOkL,YAAY,GAAZ,SAAAA,YAAYA;IAClB,IAAI,CAAC,IAAI,CAAC8I,gBAAgB,EAAE,EAAE,OAAO,IAAI,CAAC/I,WAAW;IACrD,IAAMsJ,CAAC,GAAGrK,MAAM,CAACgK,YAAY,CAAC7J,OAAO,CAAC,IAAI,CAACgK,OAAO,EAAE,CAAC;IACrD,OAAOE,CAAC,GAAGC,QAAQ,CAACD,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;GACpC;EAAAvU,MAAA,CAEOyU,YAAY,GAAZ,SAAAA,YAAYA,CAACC,CAAS;IAC5B,IAAI,CAACzJ,WAAW,GAAGyJ,CAAC;IACpB,IAAI,CAAC,IAAI,CAACV,gBAAgB,EAAE,EAAE;IAC9B,IAAI;MACF9J,MAAM,CAACgK,YAAY,CAACR,OAAO,CAAC,IAAI,CAACW,OAAO,EAAE,EAAEpT,MAAM,CAACyT,CAAC,CAAC,CAAC;KACvD,CAAC,OAAAC,QAAA,EAAM;GACT;EAAA3U,MAAA,CAEO4P,eAAe,GAAf,SAAAA,eAAeA;IACrB,IAAI,CAAC,IAAI,CAAC9F,GAAG,CAACX,kBAAkB,EAAE;IAClC,IAAI,CAACsL,YAAY,CAAC,CAAC,CAAC;GACrB;EAAAzU,MAAA,CAEO6K,eAAe,GAAf,SAAAA,eAAeA;IACrB,IAAI,CAAC,IAAI,CAACmJ,gBAAgB,EAAE,EAAE,OAAO,IAAI;IACzC,IAAMO,CAAC,GAAGrK,MAAM,CAACgK,YAAY,CAAC7J,OAAO,CAAC,IAAI,CAACiK,QAAQ,EAAE,CAAC;IACtD,OAAOC,CAAC,GAAGC,QAAQ,CAACD,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,IAAI;GAC1C;EAAAvU,MAAA,CAEO4U,eAAe,GAAf,SAAAA,eAAeA,CAACC,EAAU;IAChC,IAAI,CAAC,IAAI,CAACb,gBAAgB,EAAE,EAAE;IAC9B,IAAI;MACF9J,MAAM,CAACgK,YAAY,CAACR,OAAO,CAAC,IAAI,CAACY,QAAQ,EAAE,EAAErT,MAAM,CAAC4T,EAAE,CAAC,CAAC;KACzD,CAAC,OAAAC,QAAA,EAAM;GACT;EAAA9U,MAAA,CAEOgL,gBAAgB,GAAhB,SAAAA,gBAAgBA;IACtB,IAAI,CAAC,IAAI,CAACgJ,gBAAgB,EAAE,EAAE;IAC9B,IAAI;MACF9J,MAAM,CAACgK,YAAY,CAACC,UAAU,CAAC,IAAI,CAACG,QAAQ,EAAE,CAAC;MAC/CpK,MAAM,CAACgK,YAAY,CAACC,UAAU,CAAC,IAAI,CAACE,OAAO,EAAE,CAAC;KAC/C,CAAC,OAAAU,QAAA,EAAM;GACT;EAAA/U,MAAA,CAEO6P,WAAW,GAAX,SAAAA,WAAWA;IACjB,IAAI,CAAC,IAAI,CAAC/F,GAAG,CAACX,kBAAkB,IAAI,IAAI,CAACW,GAAG,CAACR,cAAc,EAAE;IAE7D,IAAI,IAAI,CAACyB,UAAU,IAAI,IAAI,CAACjB,GAAG,CAACZ,eAAe,EAAE;IAEjD,IAAM8L,OAAO,GAAG,IAAI,CAAC9J,YAAY,EAAE,GAAG,CAAC;IACvC,IAAI,CAACuJ,YAAY,CAACO,OAAO,CAAC;IAC1B,IAAI,CAACjL,MAAM,CAAC/B,IAAI,CAAC,2BAA2B,EAAE;MAC5C0C,KAAK,EAAEsK,OAAO;MACdC,SAAS,EAAE,IAAI,CAACnL,GAAG,CAACV;KACrB,CAAC;IAEF,IAAI4L,OAAO,KAAK,IAAI,CAAClL,GAAG,CAACV,kBAAkB,IAAI,CAAC,CAAC,EAAE;MAEjD,IAAM8L,GAAG,GAAG,IAAI,CAACpL,GAAG,CAACT,cAAc,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;MAC1D,IAAM8L,KAAK,GAAGhP,IAAI,CAAC2E,GAAG,EAAE,GAAGoK,GAAG;MAC9B,IAAI,CAACnK,UAAU,GAAG,IAAI;MACtB,IAAI,CAAC6J,eAAe,CAACO,KAAK,CAAC;MAC3B,IAAI,CAACV,YAAY,CAAC,CAAC,CAAC;MACpB,IAAI,CAAC1K,MAAM,CAAC7B,KAAK,CAAC,sCAAsC,EAAE;QACxDiN,KAAK,EAALA;OACD,CAAC;MAGF,IAAI;QACF,IAAI,CAAC7J,UAAU,EAAE;OAClB,SAAS;QACR,IAAI,CAACC,OAAO,EAAE;;;GAGnB;EAAA,OAAA/B,iBAAA;AAAA;AArrBcA,0BAAQ,GAA6B,IAAI;;AC7B1D,IAAM4L,cAAc,GAA0B;EAC5CC,UAAU,EAAE,IAAI;EAChB7J,MAAM,EAAErG,gBAAgB,CAACyE,YAAY;EACrC2B,OAAO,EAAE,SAATA,OAAOA,KAAU;EACjBD,UAAU,EAAE,SAAZA,UAAUA,KAAU;EACpB1I,WAAW,EAAE,SAAbA,WAAWA;IAAA,OAAQ,IAAI;;EACvB2K,EAAE,EAAE,SAAJA,EAAEA,KAAU;EACZK,GAAG,EAAE,SAALA,GAAGA,KAAU;EACbiB,OAAO,EAAE,SAATA,OAAOA,KAAU;EACjBE,QAAQ,EAAE,SAAVA,QAAQA,KAAU;EAClBC,aAAa,EAAE,SAAfA,aAAaA,KAAU;EACvBC,gBAAgB,EAAE,SAAlBA,gBAAgBA;IAAA,OAAQ,IAAI;;CAC7B;AAED,IAAMqG,iBAAiB,GAAGC,aAAa,CAAwBH,cAAc,CAAC;AAU9E,AAAO,IAAMI,kBAAkB,GAAsC,SAAxDA,kBAAkBA,CAAA9D,IAAA;MAC7B+D,QAAQ,GAAA/D,IAAA,CAAR+D,QAAQ;IACRC,UAAU,GAAAhE,IAAA,CAAVgE,UAAU;IACVhM,GAAG,GAAAgI,IAAA,CAAHhI,GAAG;IACHiM,iBAAiB,GAAAjE,IAAA,CAAjBiE,iBAAiB;IAAAC,gBAAA,GAAAlE,IAAA,CACjBmE,WAAW;IAAXA,WAAW,GAAAD,gBAAA,cAAG,IAAI,GAAAA,gBAAA;EAElB,IAAAE,SAAA,GAAoCC,QAAQ,CAA2B,IAAI,CAAC;IAArEV,UAAU,GAAAS,SAAA;IAAEE,aAAa,GAAAF,SAAA;EAChC,IAAAG,UAAA,GAA4BF,QAAQ,CAClC5Q,gBAAgB,CAACyE,YAAY,CAC9B;IAFM4B,MAAM,GAAAyK,UAAA;IAAEnK,SAAS,GAAAmK,UAAA;EAKxBC,SAAS,CAAC;IACR,IAAI,CAACR,UAAU,IAAI,CAAChM,GAAG,EAAE;MACvB,IAAI2L,UAAU,EAAE;QACdA,UAAU,CAAC/J,UAAU,EAAE;QACvB0K,aAAa,CAAC,IAAI,CAAC;QACnBlK,SAAS,CAAC3G,gBAAgB,CAACyE,YAAY,CAAC;;MAE1C;;IAEF,IAAMuM,aAAa,GAAG3M,iBAAiB,CAAC2B,WAAW,CACjDuK,UAAU,EACVhM,GAAI,EACJiM,iBAAiB,CAClB;IAGDQ,aAAa,CAAC5H,cAAc,CAACzC,SAAS,CAAC;IAEvCkK,aAAa,CAACG,aAAa,CAAC;IAG5B,IAAIN,WAAW,EAAE;MACfM,aAAa,CAAC5K,OAAO,EAAE;;IAIzB,OAAO;MACL4K,aAAa,CAAC7K,UAAU,EAAE;MAC1B9B,iBAAiB,CAAC6B,aAAa,EAAE;KAClC;GACF,EAAE,CAACqK,UAAU,EAAEC,iBAAiB,EAAEE,WAAW,EAAEnM,GAAG,CAAC,CAAC;EAErD,IAAM6B,OAAO,GAAG6K,WAAW,CAAC;IAC1B,IAAIf,UAAU,EAAE;MACdA,UAAU,CAAC9J,OAAO,EAAE;;GAEvB,EAAE,CAAC8J,UAAU,CAAC,CAAC;EAEhB,IAAM/J,UAAU,GAAG8K,WAAW,CAAC;IAC7B,IAAIf,UAAU,EAAE;MACdA,UAAU,CAAC/J,UAAU,EAAE;;GAE1B,EAAE,CAAC+J,UAAU,CAAC,CAAC;EAEhB,IAAMzS,WAAW,GAAGwT,WAAW,CAC7B,UAACvT,OAA2B,EAAEyJ,WAAW;QAAXA,WAAW;MAAXA,WAAW,GAAG,CAAC;;IAC3C,IAAI,CAAC+I,UAAU,EAAE;MACf,OAAO,IAAI;;IAEb,OAAOA,UAAU,CAACjJ,YAAY,CAACvJ,OAAO,EAAEyJ,WAAW,CAAC;GACrD,EACD,CAAC+I,UAAU,CAAC,CACb;EAED,IAAM9H,EAAE,GAAG6I,WAAW,CACpB,UAACC,SAAoB,EAAEC,QAAwC;IAC7D,IAAIjB,UAAU,EAAE;MACdA,UAAU,CAAC9H,EAAE,CAAC8I,SAAS,EAAEC,QAAQ,CAAC;;GAErC,EACD,CAACjB,UAAU,CAAC,CACb;EAED,IAAMzH,GAAG,GAAGwI,WAAW,CACrB,UAACC,SAAoB,EAAEC,QAAwC;IAC7D,IAAIjB,UAAU,EAAE;MACdA,UAAU,CAACzH,GAAG,CAACyI,SAAS,EAAEC,QAAQ,CAAC;;GAEtC,EACD,CAACjB,UAAU,CAAC,CACb;EAED,IAAMxG,OAAO,GAAGuH,WAAW,CACzB,UAAC3I,EAAsB;IACrB,IAAI4H,UAAU,EAAE;MACdA,UAAU,CAACxG,OAAO,CAACpB,EAAE,CAAC;;GAEzB,EACD,CAAC4H,UAAU,CAAC,CACb;EAED,IAAMtG,QAAQ,GAAGqH,WAAW,CAC1B,UAAC3I,EAAsB;IACrB,IAAI4H,UAAU,EAAE;MACdA,UAAU,CAACtG,QAAQ,CAACtB,EAAE,CAAC;;GAE1B,EACD,CAAC4H,UAAU,CAAC,CACb;EAED,IAAMrG,aAAa,GAAGoH,WAAW,CAC/B,UAAC9W,MAA6B;IAC5B,IAAI+V,UAAU,EAAE;MACdA,UAAU,CAACrG,aAAa,CAAC1P,MAAM,CAAC;;GAEnC,EACD,CAAC+V,UAAU,CAAC,CACb;EAED,IAAMpG,gBAAgB,GAAGmH,WAAW,CAAC;IACnC,IAAIf,UAAU,EAAE;MACd,OAAOA,UAAU,CAACpG,gBAAgB,EAAE;;IAEtC,OAAO,IAAI;GACZ,EAAE,CAACoG,UAAU,CAAC,CAAC;EAEhB,IAAM1D,KAAK,GAAG4E,OAAO,CACnB;IAAA,OAAO;MACLlB,UAAU,EAAVA,UAAU;MACV7J,MAAM,EAANA,MAAM;MACND,OAAO,EAAPA,OAAO;MACPD,UAAU,EAAVA,UAAU;MACV1I,WAAW,EAAXA,WAAW;MACX2K,EAAE,EAAFA,EAAE;MACFK,GAAG,EAAHA,GAAG;MACHiB,OAAO,EAAPA,OAAO;MACPE,QAAQ,EAARA,QAAQ;MACRC,aAAa,EAAbA,aAAa;MACbC,gBAAgB,EAAhBA;KACD;GAAC,EACF,CACEoG,UAAU,EACV7J,MAAM,EACND,OAAO,EACPD,UAAU,EACV1I,WAAW,EACX2K,EAAE,EACFK,GAAG,EACHiB,OAAO,EACPE,QAAQ,EACRC,aAAa,EACbC,gBAAgB,CACjB,CACF;EAED,OACEuH,6BAAClB,iBAAiB,CAACmB,QAAQ;IAAC9E,KAAK,EAAEA;KAChC8D,QAAQ,CACkB;AAEjC,CAAC;AAED,AAAO,IAAMiB,oBAAoB,GAAG,SAAvBA,oBAAoBA;EAAA,OAASC,UAAU,CAACrB,iBAAiB,CAAC;AAAA;;AC9LvE,IAAMF,gBAAc,GAAoB;EACtC1L,GAAG,EAAE,IAAI;EACTkN,aAAa,EAAE,KAAK;EACpBC,eAAe,EAAE,KAAK;EACtBC,UAAU,EAAE,SAAZA,UAAUA,KAAU;EACpBC,aAAa,EAAE,EAAE;EACjBC,oBAAoB;IAAA;MAClB,OAAO7W,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;KAC3B,QAAAM,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;EACDuW,gBAAgB,EAAE,SAAlBA,gBAAgBA;CACjB;AAED,IAAMC,WAAW,GAAG3B,aAAa,CAAkBH,gBAAc,CAAC;AAQlE,IAAa+B,YAAY,GAAgC,SAA5CA,YAAYA,CAAAzF,IAAA;MACvB+D,QAAQ,GAAA/D,IAAA,CAAR+D,QAAQ;IACRnW,MAAM,GAAAoS,IAAA,CAANpS,MAAM;IACNqW,iBAAiB,GAAAjE,IAAA,CAAjBiE,iBAAiB;EAEjB,IAAAG,SAAA,GAAsBC,QAAQ,CAAiB,IAAI,CAAC;IAA7CrM,GAAG,GAAAoM,SAAA;IAAEsB,MAAM,GAAAtB,SAAA;EAClB,IAAAG,UAAA,GAA0CF,QAAQ,CAAC,KAAK,CAAC;IAAlDa,aAAa,GAAAX,UAAA;IAAEoB,gBAAgB,GAAApB,UAAA;EACtC,IAAAqB,UAAA,GAA8CvB,QAAQ,CAAC,KAAK,CAAC;IAAtDc,eAAe,GAAAS,UAAA;IAAEC,kBAAkB,GAAAD,UAAA;EAC1C,IAAAE,UAAA,GAA0CzB,QAAQ,CAAiB,EAAE,CAAC;IAA/DgB,aAAa,GAAAS,UAAA;IAAEP,gBAAgB,GAAAO,UAAA;EAEtC,IAAMV,UAAU,GAAGV,WAAW,CAAC,UAAC9W,MAAkB;IAChD,IAAMmY,OAAO,GAAG,IAAIpY,OAAO,CAACC,MAAM,CAAC;IACnC8X,MAAM,CAACK,OAAO,CAAC;IACfJ,gBAAgB,CAAC,IAAI,CAAC;IACtBE,kBAAkB,CAAC,IAAI,CAAC;GACzB,EAAE,EAAE,CAAC;EAEN,IAAMP,oBAAoB,GAAGZ,WAAW,WAC/BvV,QAAkB,EAAEC,SAAkB;IAAA;;iCASpC,EAAE;;MAAA,IAAA4W,KAAA;MART,IAAI,CAAChO,GAAG,EAAE,OAAAvJ,OAAA,CAAAC,OAAA,CAAO,EAAE;MAAA,IAAAuS,KAAA,GAAAC,MAAA,aACf;QAAA,OAAAzS,OAAA,CAAAC,OAAA,CACiBsJ,GAAG,CAAC9I,iBAAiB,CAACC,QAAQ,EAAEC,SAAS,CAAC,EAAAP,IAAA,WAAvDE,IAAI;UACVwW,gBAAgB,CAACxW,IAAI,CAAC;UAAAiX,KAAA;UAAA,OACfjX,IAAI;;OACZ,YAAQyH,KAAK,EAAE;QACdL,OAAO,CAACK,KAAK,CAAC,gCAAgC,EAAEA,KAAK,CAAC;OACvD;MAAA,OAAA/H,OAAA,CAAAC,OAAA,CAAAuS,KAAA,IAAAA,KAAA,CAAApS,IAAA,GAAAoS,KAAA,CAAApS,IAAA,CAAA+R,MAAA,IAAAA,MAAA,CAAAK,KAAA;KAEF,QAAAjS,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAEDwM,SAAS,CAAC;IACR,IAAI5W,MAAM,EAAE;MACVwX,UAAU,CAACxX,MAAM,CAAC;;GAErB,EAAE,CAACA,MAAM,CAAC,CAAC;EAEZ4W,SAAS,CAAC;IACR,IAAIW,eAAe,EAAE;MACnBG,oBAAoB,EAAE;;GAEzB,EAAE,CAACH,eAAe,CAAC,CAAC;EAErB,IAAMlF,KAAK,GAAG4E,OAAO,CAAC;IACpB,OAAO;MACL7M,GAAG,EAAHA,GAAG;MACHkN,aAAa,EAAbA,aAAa;MACbC,eAAe,EAAfA,eAAe;MACfC,UAAU,EAAVA,UAAU;MACVC,aAAa,EAAbA,aAAa;MACbC,oBAAoB,EAApBA,oBAAoB;MACpBC,gBAAgB,EAAhBA;KACD;GACF,EAAE,CAACvN,GAAG,EAAEkN,aAAa,EAAEC,eAAe,EAAEE,aAAa,EAAEC,oBAAoB,CAAC,CAAC;EAE9E,OACER,6BAACU,WAAW,CAACT,QAAQ;IAAC9E,KAAK,EAAEA;KAC3B6E,6BAAChB,kBAAkB;IACjBE,UAAU,EAAEpW,MAAM;IAClBoK,GAAG,EAAEA,GAAG,IAAI1I,SAAS;IACrB2U,iBAAiB,EAAEA,iBAAiB;IACpCE,WAAW,EAAEgB;KAEZpB,QAAQ,CACU,CACA;AAE3B,CAAC;AAED,IAAakC,cAAc,GAAG,SAAjBA,cAAcA;EAAA,OAAShB,UAAU,CAACO,WAAW,CAAC;AAAA;;SCrG3CU,WAAWA,CACzBvB,SAAoB;EAKpB,IAAAwB,qBAAA,GAAoBnB,oBAAoB,EAAE;IAAlCnJ,EAAE,GAAAsK,qBAAA,CAAFtK,EAAE;IAAEK,GAAG,GAAAiK,qBAAA,CAAHjK,GAAG;EACf,IAAAkI,SAAA,GAA0BC,QAAQ,CAA0B,IAAI,CAAC;IAA1D3H,KAAK,GAAA0H,SAAA;IAAEgC,QAAQ,GAAAhC,SAAA;EAGtB,IAAMrF,WAAW,GAAG2F,WAAW,CAAC,UAAC2B,QAA0B;IACzDD,QAAQ,CAACC,QAAQ,CAAC;GACnB,EAAE,EAAE,CAAC;EAGN7B,SAAS,CAAC;IACR3I,EAAE,CAAC8I,SAAS,EAAE5F,WAAW,CAAC;IAE1B,OAAO;MACL7C,GAAG,CAACyI,SAAS,EAAE5F,WAAW,CAAC;KAC5B;GACF,EAAE,CAAC4F,SAAS,EAAE9I,EAAE,EAAEK,GAAG,EAAE6C,WAAW,CAAC,CAAC;EAGrC,IAAMuH,UAAU,GAAG5B,WAAW,CAAC;IAC7B0B,QAAQ,CAAC,IAAI,CAAC;GACf,EAAE,EAAE,CAAC;EAEN,OAAO;IAAE1J,KAAK,EAALA,KAAK;IAAE4J,UAAU,EAAVA;GAAY;AAC9B;AAKA,SAAgBC,oBAAoBA;EAIlC,OAAOL,WAAW,CAAmBxS,SAAS,CAAC8S,WAAW,CAAC;AAC7D;AAKA,SAAgBC,sBAAsBA;EAIpC,OAAOP,WAAW,CAAqBxS,SAAS,CAACgT,aAAa,CAAC;AACjE;AAKA,SAAgBC,uBAAuBA;EAIrC,OAAOT,WAAW,CAAsBxS,SAAS,CAACkT,cAAc,CAAC;AACnE;AAKA,SAAgBC,oBAAoBA;EAIlC,OAAOX,WAAW,CAAmBxS,SAAS,CAACoT,WAAW,CAAC;AAC7D;AAKA,SAAgBC,yBAAyBA;EAIvC,OAAOb,WAAW,CAAwBxS,SAAS,CAACsT,gBAAgB,CAAC;AACvE;AAMA,SAAgBC,mBAAmBA,CACjCrC,QAAoD;EASpD,IAAAsC,qBAAA,GACEX,oBAAoB,EAAE;IADTY,WAAW,GAAAD,qBAAA,CAAlBxK,KAAK;IAA2B0K,gBAAgB,GAAAF,qBAAA,CAA5BZ,UAAU;EAEtC,IAAAe,qBAAA,GACEZ,sBAAsB,EAAE;IADXa,aAAa,GAAAD,qBAAA,CAApB3K,KAAK;IAA6B6K,kBAAkB,GAAAF,qBAAA,CAA9Bf,UAAU;EAExC,IAAAkB,qBAAA,GACEb,uBAAuB,EAAE;IADZc,cAAc,GAAAD,qBAAA,CAArB9K,KAAK;IAA8BgL,mBAAmB,GAAAF,qBAAA,CAA/BlB,UAAU;EAEzC,IAAAqB,qBAAA,GACEd,oBAAoB,EAAE;IADTe,WAAW,GAAAD,qBAAA,CAAlBjL,KAAK;IAA2BmL,gBAAgB,GAAAF,qBAAA,CAA5BrB,UAAU;EAEtC,IAAAwB,qBAAA,GACEf,yBAAyB,EAAE;IADdgB,gBAAgB,GAAAD,qBAAA,CAAvBpL,KAAK;IAAgCsL,qBAAqB,GAAAF,qBAAA,CAAjCxB,UAAU;EAG3C,IAAM2B,WAAW,GAAGvD,WAAW,CAAC;IAC9B0C,gBAAgB,EAAE;IAClBG,kBAAkB,EAAE;IACpBG,mBAAmB,EAAE;IACrBG,gBAAgB,EAAE;IAClBG,qBAAqB,EAAE;GACxB,EAAE,CACDZ,gBAAgB,EAChBG,kBAAkB,EAClBG,mBAAmB,EACnBG,gBAAgB,EAChBG,qBAAqB,CACtB,CAAC;EAGFxD,SAAS,CAAC;IACR,IAAI2C,WAAW,IAAIvC,QAAQ,EAAE;MAC3BA,QAAQ,CAAClR,SAAS,CAAC8S,WAAW,EAAEW,WAAW,CAACpY,IAAI,CAAC;;GAEpD,EAAE,CAACoY,WAAW,EAAEvC,QAAQ,CAAC,CAAC;EAE3BJ,SAAS,CAAC;IACR,IAAI8C,aAAa,IAAI1C,QAAQ,EAAE;MAC7BA,QAAQ,CAAClR,SAAS,CAACgT,aAAa,EAAEY,aAAa,CAACvY,IAAI,CAAC;;GAExD,EAAE,CAACuY,aAAa,EAAE1C,QAAQ,CAAC,CAAC;EAE7BJ,SAAS,CAAC;IACR,IAAIiD,cAAc,IAAI7C,QAAQ,EAAE;MAC9BA,QAAQ,CAAClR,SAAS,CAACkT,cAAc,EAAEa,cAAc,CAAC1Y,IAAI,CAAC;;GAE1D,EAAE,CAAC0Y,cAAc,EAAE7C,QAAQ,CAAC,CAAC;EAE9BJ,SAAS,CAAC;IACR,IAAIoD,WAAW,IAAIhD,QAAQ,EAAE;MAC3BA,QAAQ,CAAClR,SAAS,CAACoT,WAAW,EAAEc,WAAW,CAAC7Y,IAAI,CAAC;;GAEpD,EAAE,CAAC6Y,WAAW,EAAEhD,QAAQ,CAAC,CAAC;EAE3BJ,SAAS,CAAC;IACR,IAAIuD,gBAAgB,IAAInD,QAAQ,EAAE;MAChCA,QAAQ,CAAClR,SAAS,CAACsT,gBAAgB,EAAEe,gBAAgB,CAAChZ,IAAI,CAAC;;GAE9D,EAAE,CAACgZ,gBAAgB,EAAEnD,QAAQ,CAAC,CAAC;EAEhC,OAAO;IACLuC,WAAW,EAAXA,WAAW;IACXG,aAAa,EAAbA,aAAa;IACbG,cAAc,EAAdA,cAAc;IACdG,WAAW,EAAXA,WAAW;IACXG,gBAAgB,EAAhBA,gBAAgB;IAChBE,WAAW,EAAXA;GACD;AACH;;ICvKaC,gBAAgB,GAAG,SAAnBA,gBAAgBA;EAC3B,IAAAC,eAAA,GACElC,cAAc,EAAE;IADVjO,GAAG,GAAAmQ,eAAA,CAAHnQ,GAAG;IAAEqN,aAAa,GAAA8C,eAAA,CAAb9C,aAAa;IAAEC,oBAAoB,GAAA6C,eAAA,CAApB7C,oBAAoB;IAAEC,gBAAgB,GAAA4C,eAAA,CAAhB5C,gBAAgB;EAElE,IAAAnB,SAAA,GAA8BC,QAAQ,CAAC,KAAK,CAAC;IAAtC+D,OAAO,GAAAhE,SAAA;IAAEiE,UAAU,GAAAjE,SAAA;EAC1B,IAAAG,UAAA,GAA0BF,QAAQ,CAAe,IAAI,CAAC;IAA/C7N,KAAK,GAAA+N,UAAA;IAAE+D,QAAQ,GAAA/D,UAAA;EAGtB,IAAMgE,sBAAsB,GAAG7D,WAAW,CAAC;IACzCvO,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC;IAErCkP,oBAAoB,EAAE;GACvB,EAAE,EAAE,CAAC;EAGN2B,mBAAmB,CAACsB,sBAAsB,CAAC;EAO3C,IAAMC,gBAAgB,GAAG9D,WAAW,WAC3BvV,QAAkB,EAAEC,SAAkB;IAAA;MAC3C,IAAI,CAAC4I,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,EAAE;;MAGX2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACW4W,oBAAoB,CAACnW,QAAQ,EAAEC,SAAS,CAAC;SACvD,YAAQ8F,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,6BAA6B,CAAC;UACvEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,EAAE;SACV;mBAAAkS,UAAA,EAAAC,OAAA;QACCN,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAK,UAAA,QAAAC,OAAA;QAAA,OAAAA,OAAA;;KAEpB,QAAA3Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACsW,oBAAoB,EAAEtN,GAAG,CAAC,CAC5B;EAMD,IAAMtI,kBAAkB,GAAGgV,WAAW,WAC7B/U,eAAuB;IAAA;MAC5B,IAAI,CAACqI,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAACtI,kBAAkB,CAACC,eAAe,CAAC,EAAAd,IAAA,WAAxDC,QAAQ;YAAA,OAAAL,OAAA,CAAAC,OAAA,CACR4W,oBAAoB,EAAE,EAAAzW,IAAA;cAC5B,OAAOC,QAAQ;;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,+BAA+B,CAAC;UAChDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAoS,WAAA,EAAAC,QAAA;QACCR,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAO,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAA7Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAEsN,oBAAoB,CAAC,CAC5B;EAMD,IAAMzV,mBAAmB,GAAG6U,WAAW,WAC9B/U,eAAuB;IAAA;MAC5B,IAAI,CAACqI,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAACnI,mBAAmB,CAACF,eAAe,CAAC,EAAAd,IAAA,WAAzDC,QAAQ;YAAA,OAAAL,OAAA,CAAAC,OAAA,CACR4W,oBAAoB,EAAE,EAAAzW,IAAA;cAC5B,OAAOC,QAAQ;;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,gCAAgC,CAAC;UACjDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAsS,WAAA,EAAAC,QAAA;QACCV,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAS,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAA/Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAEsN,oBAAoB,CAAC,CAC5B;EAMD,IAAMtV,qBAAqB,GAAG0U,WAAW,WAChC/U,eAAuB;IAAA;MAC5B,IAAI,CAACqI,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAAChI,qBAAqB,CAACL,eAAe,CAAC,EAAAd,IAAA,WAA3DC,QAAQ;YAAA,OAAAL,OAAA,CAAAC,OAAA,CACR4W,oBAAoB,EAAE,EAAAzW,IAAA;cAC5B,OAAOC,QAAQ;;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,kCAAkC,CAAC;UACnDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAwS,WAAA,EAAAC,QAAA;QACCZ,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAW,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAja,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAEsN,oBAAoB,CAAC,CAC5B;EAMD,IAAMpV,sBAAsB,GAAGwU,WAAW,WACjC/U,eAAuB;IAAA;MAC5B,IAAI,CAACqI,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACWsJ,GAAG,CAAC9H,sBAAsB,CAACP,eAAe,CAAC;SACzD,YAAQuF,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,oCAAoC,CAAC;UACrDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAA0S,WAAA,EAAAC,QAAA;QACCd,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAa,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAna,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAOD,IAAMzH,kBAAkB,GAAGmU,WAAW,WAElC/U,eAAuB,EACvBa,IAAY;IAAA;MAEZ,IAAI,CAACwH,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACWsJ,GAAG,CAACzH,kBAAkB,CAACZ,eAAe,EAAEa,IAAI,CAAC;SAC3D,YAAQ0E,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,+BAA+B,CAAC;UAChDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAA4S,WAAA,EAAAC,QAAA;QACChB,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAe,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAra,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAED,OAAO;IACLqN,aAAa,EAAbA,aAAa;IACb+C,OAAO,EAAPA,OAAO;IACP5R,KAAK,EAALA,KAAK;IACLgS,gBAAgB,EAAhBA,gBAAgB;IAChB9Y,kBAAkB,EAAlBA,kBAAkB;IAClBG,mBAAmB,EAAnBA,mBAAmB;IACnBG,qBAAqB,EAArBA,qBAAqB;IACrBE,sBAAsB,EAAtBA,sBAAsB;IACtBK,kBAAkB,EAAlBA,kBAAkB;IAClBgV,gBAAgB,EAAhBA;GACD;AACH,CAAC;;ICpNY+D,aAAa,GAAG,SAAhBA,aAAaA;EACxB,IAAAnD,qBAAA,GAMInB,oBAAoB,EAAE;IALxBlL,MAAM,GAAAqM,qBAAA,CAANrM,MAAM;IACND,OAAO,GAAAsM,qBAAA,CAAPtM,OAAO;IACPD,UAAU,GAAAuM,qBAAA,CAAVvM,UAAU;IACV+J,UAAU,GAAAwC,qBAAA,CAAVxC,UAAU;IACGjJ,YAAY,GAAAyL,qBAAA,CAAzBjV,WAAW;EAMb,IAAMqY,eAAe,GAAG7E,WAAW,CAAC;IAClC7K,OAAO,EAAE;GACV,EAAE,CAACA,OAAO,CAAC,CAAC;EAKb,IAAM2P,oBAAoB,GAAG9E,WAAW,CAAC;IACvC9K,UAAU,EAAE;GACb,EAAE,CAACA,UAAU,CAAC,CAAC;EAQhB,IAAM1I,WAAW,GAAGwT,WAAW,CAC7B,UAACvT,OAA2B,EAAEyJ,WAAW;QAAXA,WAAW;MAAXA,WAAW,GAAG,CAAC;;IAC3C,OAAOF,YAAY,CAACvJ,OAAO,EAAEyJ,WAAW,CAAC;GAC1C,EACD,CAACF,YAAY,CAAC,CACf;EAKD,IAAM+O,WAAW,GAAG3P,MAAM,KAAKrG,gBAAgB,CAACsG,SAAS;EAKzD,IAAM2P,YAAY,GAAG5P,MAAM,KAAKrG,gBAAgB,CAACuG,UAAU;EAK3D,IAAM2P,QAAQ,GAAG7P,MAAM,KAAKrG,gBAAgB,CAAC4M,KAAK;EAElD,OAAO;IACLvG,MAAM,EAANA,MAAM;IACN2P,WAAW,EAAXA,WAAW;IACXC,YAAY,EAAZA,YAAY;IACZC,QAAQ,EAARA,QAAQ;IACR9P,OAAO,EAAE0P,eAAe;IACxB3P,UAAU,EAAE4P,oBAAoB;IAChCtY,WAAW,EAAXA,WAAW;IACXyS,UAAU,EAAVA;GACD;AACH,CAAC;;AC3DD,IAAMiG,iBAAiB,GAAG,eAAe;AACzC,IAAMC,cAAc,GAAG,EAAE,GAAG,IAAI;AAChC,IAAMC,oBAAoB,GAAG,CAAC;AAC9B,IAAMC,WAAW,GAAG,IAAI;AAMxB,AAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAIhS,GAAmB;EAC1C,IAAAoM,SAAA,GAA0BC,QAAQ,CAAkB,EAAE,CAAC;IAAhDvL,KAAK,GAAAsL,SAAA;IAAE6F,QAAQ,GAAA7F,SAAA;EACtB,IAAAG,UAAA,GAAwCF,QAAQ,CAAC,KAAK,CAAC;IAAhD6F,YAAY,GAAA3F,UAAA;IAAE4F,eAAe,GAAA5F,UAAA;EAGpCC,SAAS,CAAC;IACR,IAAI;MACF,IAAM4F,WAAW,GAAG5H,YAAY,CAAC7J,OAAO,CAACiR,iBAAiB,CAAC;MAC3D,IAAIQ,WAAW,EAAE;QACf,IAAMC,WAAW,GAAoBvV,IAAI,CAACC,KAAK,CAACqV,WAAW,CAAC;QAG5D,IAAMhR,GAAG,GAAG3E,IAAI,CAAC2E,GAAG,EAAE;QACtB,IAAMkR,UAAU,GAAGD,WAAW,CAACE,MAAM,CACnC,UAACC,IAAI;UAAA,OAAKpR,GAAG,GAAGoR,IAAI,CAACtW,SAAS,IAAI2V,cAAc;UACjD;QAEDI,QAAQ,CAACK,UAAU,CAAC;;KAEvB,CAAC,OAAO9T,KAAK,EAAE;MACdL,OAAO,CAACK,KAAK,CAAC,iDAAiD,EAAEA,KAAK,CAAC;;GAE1E,EAAE,EAAE,CAAC;EAGNgO,SAAS,CAAC;IACR,IAAI;MACFhC,YAAY,CAACR,OAAO,CAAC4H,iBAAiB,EAAE9U,IAAI,CAACE,SAAS,CAAC8D,KAAK,CAAC,CAAC;KAC/D,CAAC,OAAOtC,KAAK,EAAE;MACdL,OAAO,CAACK,KAAK,CAAC,+CAA+C,EAAEA,KAAK,CAAC;;GAExE,EAAE,CAACsC,KAAK,CAAC,CAAC;EAGX,IAAM2R,cAAc,GAAG/F,WAAW,CAAC,UAACvT,OAA2B;IAC7D,IAAM0J,EAAE,YAAUpG,IAAI,CAAC2E,GAAG,EAAE,SAAI4B,IAAI,CAACC,MAAM,EAAE,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACwP,MAAM,CAAC,CAAC,EAAE,CAAC,CAAG;IACzE,IAAMvP,aAAa,GAAkB;MACnCN,EAAE,EAAFA,EAAE;MACF1J,OAAO,EAAPA,OAAO;MACPiK,QAAQ,EAAE,CAAC;MACXR,WAAW,EAAEkP,oBAAoB;MACjC5V,SAAS,EAAEO,IAAI,CAAC2E,GAAG;KACpB;IAED6Q,QAAQ,CAAC,UAACU,SAAS;MAAA,UAAA/N,MAAA,CAAS+N,SAAS,GAAExP,aAAa;KAAC,CAAC;IACtD,OAAON,EAAE;GACV,EAAE,EAAE,CAAC;EAGN,IAAMe,YAAY,GAAG8I,WAAW;IAAA;MAC9B,IAAI,CAAC1M,GAAG,IAAIkS,YAAY,IAAIpR,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;QAC9C,OAAAxK,OAAA,CAAAC,OAAA;;MAGFyb,eAAe,CAAC,IAAI,CAAC;MAGrB,IAAOS,cAAc,GAA0B9R,KAAK;QAA1B0H,iBAAiB,GAAI1H,KAAK,CAAA+R,KAAA;MACpD,IAAMzR,GAAG,GAAG3E,IAAI,CAAC2E,GAAG,EAAE;MAGtB,IAAIA,GAAG,GAAGwR,cAAc,CAAC1W,SAAS,GAAG2V,cAAc,EAAE;QACnDI,QAAQ,CAACzJ,iBAAiB,CAAC;QAC3B2J,eAAe,CAAC,KAAK,CAAC;QACtB,OAAA1b,OAAA,CAAAC,OAAA;;MACD,IAAAuS,KAAA,GAAAwH,gBAAA;QAAA,OAAAvH,MAAA,aAEG;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CAEIsJ,GAAG,CAAC9G,WAAW,CAAC0Z,cAAc,CAACzZ,OAAO,CAAC,EAAAtC,IAAA;YAG7Cob,QAAQ,CAACzJ,iBAAiB,CAAC;;SAC5B,cAAe;UAAA,IAEVoK,cAAc,CAACxP,QAAQ,GAAGwP,cAAc,CAAChQ,WAAW;YACtD,IAAMkQ,cAAc,GAAAjX,QAAA,KACf+W,cAAc;cACjBxP,QAAQ,EAAEwP,cAAc,CAACxP,QAAQ,GAAG;cACrC;YACD6O,QAAQ,IAAArN,MAAA,CAAK4D,iBAAiB,GAAEsK,cAAc,EAAC,CAAC;;YAGhDb,QAAQ,CAACzJ,iBAAiB,CAAC;;SAE9B;mBAAAkI,UAAA,EAAAC,OAAA;QACCwB,eAAe,CAAC,KAAK,CAAC;QAGtB,IAAI3J,iBAAiB,CAACvH,MAAM,GAAG,CAAC,EAAE;UAChCwH,UAAU,CAAC;YAAA,OAAM7E,YAAY,EAAE;aAAEmO,WAAW,CAAC;;QAC9C,IAAArB,UAAA,QAAAC,OAAA;QAAA,OAAAA,OAAA;;MAAA,OAAAla,OAAA,CAAAC,OAAA,CAAAuS,KAAA,IAAAA,KAAA,CAAApS,IAAA,GAAAoS,KAAA,CAAApS,IAAA;KAEJ,QAAAG,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KAAE,CAACgJ,GAAG,EAAEkS,YAAY,EAAEpR,KAAK,CAAC,CAAC;EAG9B0L,SAAS,CAAC;IACR,IAAI1L,KAAK,CAACG,MAAM,GAAG,CAAC,IAAIjB,GAAG,IAAI,CAACkS,YAAY,EAAE;MAC5CtO,YAAY,EAAE;;GAEjB,EAAE,CAAC9C,KAAK,EAAEd,GAAG,EAAEkS,YAAY,EAAEtO,YAAY,CAAC,CAAC;EAG5C,IAAMmP,oBAAoB,GAAGrG,WAAW,WAEpCvT,OAA2B;IAAA;MAE3B,IAAI,CAAC6G,GAAG,EAAE;QAERyS,cAAc,CAACtZ,OAAO,CAAC;QACvB,OAAA1C,OAAA,CAAAC,OAAA,CAAO,IAAI;;MACZ,OAAAD,OAAA,CAAAC,OAAA,CAAAwS,MAAA,aAEG;QAAA,OAAAzS,OAAA,CAAAC,OAAA,CAEqBsJ,GAAG,CAAC9G,WAAW,CAACC,OAAO,CAAC;OAEhD,cAAe;QAEdsZ,cAAc,CAACtZ,OAAO,CAAC;QACvB,OAAO,IAAI;OACZ;KACF,QAAAnC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAEyS,cAAc,CAAC,CACtB;EAED,OAAO;IACLA,cAAc,EAAdA,cAAc;IACdM,oBAAoB,EAApBA,oBAAoB;IACpBpK,WAAW,EAAE7H,KAAK,CAACG,MAAM;IACzBiR,YAAY,EAAZA;GACD;AACH,CAAC;;IC/IYc,gBAAgB,GAAG,SAAnBA,gBAAgBA;EAC3B,IAAA7C,eAAA,GAAgBlC,cAAc,EAAE;IAAxBjO,GAAG,GAAAmQ,eAAA,CAAHnQ,GAAG;EACX,IAAAoM,SAAA,GAA8BC,QAAQ,CAAC,KAAK,CAAC;IAAtC+D,OAAO,GAAAhE,SAAA;IAAEiE,UAAU,GAAAjE,SAAA;EAC1B,IAAAG,UAAA,GAA0BF,QAAQ,CAAe,IAAI,CAAC;IAA/C7N,KAAK,GAAA+N,UAAA;IAAE+D,QAAQ,GAAA/D,UAAA;EACtB,IAAAqB,UAAA,GAA8BvB,QAAQ,CAA+B,IAAI,CAAC;IAAnE4G,OAAO,GAAArF,UAAA;IAAEsF,UAAU,GAAAtF,UAAA;EAK1B,IAAMuF,YAAY,GAChBzG,WAAW;IAAA;MACT,IAAI,CAAC1M,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aAEV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAAC9E,gBAAgB,EAAE,EAAArE,IAAA,WAAvCC,QAAQ;YACdoc,UAAU,CAACpc,QAAQ,CAAC;YACpB,OAAOA,QAAQ;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,gCAAgC,CAAC;UACjDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAkS,UAAA,EAAAC,OAAA;QACCN,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAK,UAAA,QAAAC,OAAA;QAAA,OAAAA,OAAA;;KAEpB,QAAA3Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KAAE,CAACgJ,GAAG,CAAC,CAAC;EAGXwM,SAAS,CAAC;IACR,IAAIxM,GAAG,EAAE;MACPmT,YAAY,EAAE;;GAEjB,EAAE,CAACnT,GAAG,EAAEmT,YAAY,CAAC,CAAC;EAEvB,OAAO;IACL/C,OAAO,EAAPA,OAAO;IACP5R,KAAK,EAALA,KAAK;IACLyU,OAAO,EAAPA,OAAO;IACPE,YAAY,EAAZA;GACD;AACH,CAAC;;IC3BYC,WAAW,GAAG,SAAdA,WAAWA,CAAIzb,eAAwB;EAClD,IAAAwY,eAAA,GAAgBlC,cAAc,EAAE;IAAxBjO,GAAG,GAAAmQ,eAAA,CAAHnQ,GAAG;EACX,IAAAqT,iBAAA,GAAoBL,gBAAgB,EAAE;IAA9BC,OAAO,GAAAI,iBAAA,CAAPJ,OAAO;EACf,IAAA7G,SAAA,GAA8BC,QAAQ,CAAC,KAAK,CAAC;IAAtC+D,OAAO,GAAAhE,SAAA;IAAEiE,UAAU,GAAAjE,SAAA;EAC1B,IAAAG,UAAA,GAA0BF,QAAQ,CAAe,IAAI,CAAC;IAA/C7N,KAAK,GAAA+N,UAAA;IAAE+D,QAAQ,GAAA/D,UAAA;EACtB,IAAAqB,UAAA,GAAgCvB,QAAQ,CAA0B,IAAI,CAAC;IAAhEiH,QAAQ,GAAA1F,UAAA;IAAE2F,WAAW,GAAA3F,UAAA;EAC5B,IAAAE,UAAA,GAAsCzB,QAAQ,CAA2B,IAAI,CAAC;IAAvEmH,WAAW,GAAA1F,UAAA;IAAE2F,cAAc,GAAA3F,UAAA;EAGlC,IAAA4F,cAAA,GAAoCpC,aAAa,EAAE;IAA3CG,WAAW,GAAAiC,cAAA,CAAXjC,WAAW;IAAE9F,UAAU,GAAA+H,cAAA,CAAV/H,UAAU;EAG/B,IAAAgI,SAAA,GAA8C3B,QAAQ,CAAChS,GAAG,CAAC;IAAnD+S,oBAAoB,GAAAY,SAAA,CAApBZ,oBAAoB;IAAEpK,WAAW,GAAAgL,SAAA,CAAXhL,WAAW;EAEzC6D,SAAS,CAAC;IACR,IAAMoH,gBAAgB,YAAhBA,gBAAgBA;MAAA;QACpB,IAAI,CAAC5T,GAAG,EAAE;UACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;UAC1C,OAAA5R,OAAA,CAAAC,OAAA;;QACD,IAAAuS,KAAA,GAAAC,MAAA,aACG;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAAC5E,oBAAoB,EAAE,EAAAvE,IAAA,WAA3CC,QAAQ;YACd2c,cAAc,CAAC3c,QAAQ,CAAC0c,WAAW,CAAC;;SACrC,YAAQtW,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,6BAA6B,CAAC;UACvEiI,QAAQ,CAAC9R,KAAK,CAAC;SAChB;QAAA,OAAA/H,OAAA,CAAAC,OAAA,CAAAuS,KAAA,IAAAA,KAAA,CAAApS,IAAA,GAAAoS,KAAA,CAAApS,IAAA;OACF,QAAAG,CAAA;QAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;;IACD4c,gBAAgB,EAAE;GACnB,EAAE,CAAC5T,GAAG,CAAC,CAAC;EAET,IAAM6T,sBAAsB,GAAGnH,WAAW,CACxC,UAAC4G,QAAmB;IAClB,IAAMQ,cAAc,GAAG,IAAI3T,GAAG,EAAmB;IAGjDmT,QAAQ,CAACxM,OAAO,CAAC,UAAC3N,OAAO;MACvB2a,cAAc,CAAC1J,GAAG,CAACjR,OAAO,CAAC0J,EAAE,EAAE1J,OAAO,CAAC;KACxC,CAAC;IAGF,OAAOmL,KAAK,CAACuF,IAAI,CAACiK,cAAc,CAACjN,MAAM,EAAE,CAAC;GAC3C,EACD,EAAE,CACH;EAMD,IAAMnO,WAAW,GAAGgU,WAAW,WAE3BqH,cAAc,EACdpb,IAAI,EACJC,QAAQ;IAAA,IAFRmb,cAAc;MAAdA,cAAc,GAAGpc,eAAe;;IAAA,IAChCgB,IAAI;MAAJA,IAAI,GAAG,CAAC;;IAAA,IACRC,QAAQ;MAARA,QAAQ,GAAG,EAAE;;IAAA;MAEb,IAAI,CAACoH,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb,IAAI,CAACqd,cAAc,EAAE;QACnBzD,QAAQ,CAAC,IAAIjI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAClD,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAACtH,WAAW,CAACqb,cAAc,EAAEpb,IAAI,EAAEC,QAAQ,CAAC,EAAA/B,IAAA,WAAhEC,QAAQ;YACd,IAAI6B,IAAI,KAAK,CAAC,EAAE4a,WAAW,CAACzc,QAAQ,CAAC,CAAA,KAEnCyc,WAAW,CAAC,UAACS,IAAI;cAAA,OACfA,IAAI,GAAAnY,QAAA,KAEKmY,IAAI;gBACPV,QAAQ,EAAEO,sBAAsB,IAAAjP,MAAA,CAC3BoP,IAAI,CAACV,QAAQ,EACbxc,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEwc,QAAQ,CACtB,CAAC;gBACFW,UAAU,EAAEnd,QAAQ,CAACmd;mBAEvB,IAAI;cACT;YACH,OAAOnd,QAAQ;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,wBAAwB,CAAC;UAClEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAkS,UAAA,EAAAC,OAAA;QACCN,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAK,UAAA,QAAAC,OAAA;QAAA,OAAAA,OAAA;;KAEpB,QAAA3Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACW,eAAe,CAAC,CAClB;EAED,IAAMmC,iBAAiB,GAAG4S,WAAW,WAEjCwH,gBAAyB,EACzBH,cAAc;IAAA,IAAdA,cAAc;MAAdA,cAAc,GAAGpc,eAAe;;IAAA;MAEhC,IAAI,CAACqI,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAEb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAAClG,iBAAiB,CAAC;YAC3CwJ,kBAAkB,EAAE4Q,gBAAgB;YACpCC,gBAAgB,EAAEJ;WACnB,CAAC;SAEH,YAAQ7W,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,+BAA+B,CAAC;UAChDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAoS,WAAA,EAAAC,QAAA;QACCR,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAO,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAA7Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAErI,eAAe,CAAC,CACvB;EAMD,IAAMoB,iBAAiB,GAAG2T,WAAW,WAC5B1T,SAAiB;IAAA;MACtB,IAAI,CAACgH,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACWsJ,GAAG,CAACjH,iBAAiB,CAACC,SAAS,CAAC;SAC9C,YAAQkE,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,gCAAgC,CAAC;UACjDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAsS,WAAA,EAAAC,QAAA;QACCV,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAS,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAA/Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,EAAE,CACH;EAMD,IAAMkC,WAAW,GAAGwT,WAAW,WAE3BvT,OAEC;IAAA;MAED,IAAI,CAAC6G,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb,IAAM0d,uBAAuB,GAAAvY,QAAA,KACxB1C,OAAO;QACVgb,gBAAgB,EAAEhb,OAAO,CAACgb,gBAAgB,IAAIxc;QAC/C;MAED0Y,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CAEqBqc,oBAAoB,CAACqB,uBAAuB,CAAC;SAErE,YAAQlX,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,wBAAwB,CAAC;UAClEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAwS,WAAA,EAAAC,QAAA;QACCZ,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAW,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAja,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACW,eAAe,EAAEob,oBAAoB,CAAC,CACxC;EAMD,IAAMzZ,sBAAsB,GAAGoT,WAAW,WAEtCqH,cAAc;IAAA,IAAdA,cAAc;MAAdA,cAAc,GAAGpc,eAAe;;IAAA;MAEhC,IAAI,CAACqI,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb,IAAI,CAACqd,cAAc,EAAE;QACnBzD,QAAQ,CAAC,IAAIjI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAClD,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAAC1G,sBAAsB,CAACya,cAAc,CAAC,EAAAld,IAAA,WAA3DC,QAAQ;YACZyc,WAAW,CAAC,UAACS,IAAI;cAAA,IAAAK,cAAA;cAAA,OACfL,IAAI,GAAAnY,QAAA,KAEGmY,IAAI;gBACPV,QAAQ,EAAEU,IAAI,aAAJA,IAAI,wBAAAK,cAAA,GAAJL,IAAI,CAAEV,QAAQ,cAAAe,cAAA,uBAAdA,cAAA,CAAgBC,GAAG,CAAC,UAAC9B,IAAI;kBAAA,OAAA3W,QAAA,KAC9B2W,IAAI;oBACP+B,OAAO,EAAE;;iBACT;mBAEF,IAAI;cACT;YACH,OAAOzd,QAAQ;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,qCAAqC,CAAC;UACtDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAA0S,WAAA,EAAAC,QAAA;QACCd,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAa,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAna,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAErI,eAAe,CAAC,CACvB;EAOD,IAAM6B,aAAa,GAAGkT,WAAW,WAE7B1T,SAAiB,EACjBS,MAA4B;IAAA;MAE5B,IAAI,CAACuG,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAACxG,aAAa,CAACR,SAAS,EAAES,MAAM,CAAC,EAAA5C,IAAA,WAArDC,QAAQ;YACdyc,WAAW,CAAC,UAACS,IAAI;cAAA,OACfA,IAAI,GAAAnY,QAAA,KAEKmY,IAAI;gBACPV,QAAQ,EAAEU,IAAI,CAACV,QAAQ,CAACgB,GAAG,CAAC,UAAC9B,IAAI;kBAAA,OAC/BA,IAAI,CAAC3P,EAAE,KAAK7J,SAAS,GAAA6C,QAAA,KACZ2W,IAAI,EAAK1b,QAAQ,CAACqC,OAAO,IAC9BqZ,IAAI;;mBAGZ,IAAI;cACT;YACD,OAAO1b,QAAQ;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,0BAA0B,CAAC;UACpEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAA4S,WAAA,EAAAC,QAAA;QACChB,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAe,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAra,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAErI,eAAe,CAAC,CACvB;EAMD,IAAMiC,aAAa,GAAG8S,WAAW,WACxB1T,SAAiB;IAAA;MACtB,IAAI,CAACgH,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAACpG,aAAa,CAACZ,SAAS,CAAC,EAAAnC,IAAA,WAA7CC,QAAQ;YACdyc,WAAW,CAAC,UAACS,IAAI;cAAA,OACfA,IAAI,GAAAnY,QAAA,KAEKmY,IAAI;gBACPV,QAAQ,EAAEU,IAAI,CAACV,QAAQ,CAACf,MAAM,CAAC,UAACC,IAAI;kBAAA,OAAKA,IAAI,CAAC3P,EAAE,KAAK7J,SAAS;;mBAEhE,IAAI;cACT;YACD,OAAOlC,QAAQ;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,0BAA0B,CAAC;UACpEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAgW,WAAA,EAAAC,QAAA;QACCpE,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAmE,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAzd,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,EAAErI,eAAe,CAAC,CACvB;EAED,IAAM+c,iBAAiB,GAAGhI,WAAW,WAC5BiI,UAAmB;IAAA;MACxB,IAAI,CAAC3U,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,KAAK;;MAGd4Z,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAAwS,MAAA,aACV;QAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAAC1E,uBAAuB,CAAC;UACjDkY,WAAW,EAAE;YAAEoB,WAAW,EAAED;;SAC7B,CAAC,EAAA9d,IAAA,WAFIC,QAAQ;UAGd2c,cAAc,CAAC3c,QAAQ,CAAC0c,WAAW,CAAC;UACpC,OAAO,IAAI;;OACZ,YAAQtW,GAAG,EAAE;QACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,8BAA8B,CAAC;QACxEiI,QAAQ,CAAC9R,KAAK,CAAC;QACf,OAAO,KAAK;OACb;KACF,QAAAxH,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAGDwM,SAAS,CAAC;IACR,IAAI7U,eAAe,EAAE;MACnBe,WAAW,EAAE;;GAEhB,EAAE,CAAC+Y,WAAW,EAAE9Z,eAAe,CAAC,CAAC;EAGlC,IAAMkd,kBAAkB,GAAGnI,WAAW,CACpC,UAACC,SAAoB,EAAE5V,IAAS;IAE9B,IACE,CAACY,eAAe,IACfZ,IAAI,CAACod,gBAAgB,IAAIpd,IAAI,CAACod,gBAAgB,KAAKxc,eAAgB,EACpE;MACA;;IAGF4b,WAAW,CAAC,UAACS,IAAI;MACf,IAAI,CAACA,IAAI,EAAE,OAAOA,IAAI;MAEtB,QAAQrH,SAAS;QACf,KAAKjR,SAAS,CAAC8S,WAAW;UAAE;YAC1B,IAAMsG,SAAS,GAAG/d,IAAwB;YAI1C,IAAMge,aAAa,GAAGf,IAAI,CAACV,QAAQ,CAAC1V,IAAI,CACtC,UAAC+E,GAAG;cAAA,OAAKA,GAAG,CAACE,EAAE,KAAKiS,SAAS,CAACjS,EAAE;cACjC;YACD,IAAIkS,aAAa,EAAE;cACjB,OAAOf,IAAI;;YAGb7V,OAAO,CAACC,GAAG,CAAC,eAAe,EAAEuO,SAAS,CAAC;YAGvC,OAAA9Q,QAAA,KACKmY,IAAI;cACPV,QAAQ,EAAE,GAAA1O,MAAA,CACLoP,IAAI,CAACV,QAAQ,GAChBwB,SAA+B,GAC/BE,IAAI,CACJ,UAACC,CAAC,EAAEC,CAAC;gBAAA,OACH,IAAIzY,IAAI,CAACyY,CAAC,CAACC,OAAO,CAAC,CAACC,OAAO,EAAE,GAAG,IAAI3Y,IAAI,CAACwY,CAAC,CAACE,OAAO,CAAC,CAACC,OAAO,EAAE;;;;QAKrE,KAAK1Z,SAAS,CAACgT,aAAa;UAAE;YAC5B,IAAM2G,SAAS,GAAGte,IAA0B;YAE5C,OAAA8E,QAAA,KACKmY,IAAI;cACPV,QAAQ,EAAEU,IAAI,CAACV,QAAQ,CAACgB,GAAG,CAAC,UAAC3R,GAAG;gBAAA,OAC9BA,GAAG,CAACE,EAAE,KAAKwS,SAAS,CAACC,MAAM,GAAAzZ,QAAA,KAElB8G,GAAG;kBACNxJ,OAAO,EAAEkc,SAAS,CAACE,WAAW;kBAC9B7R,WAAW,EAAE2R,SAAS,CAACG,eAAe,IAAI7S,GAAG,CAACe;qBAEhDf,GAAG;;;;QAKb,KAAKjH,SAAS,CAACkT,cAAc;UAAE;YAC7B,IAAM6G,WAAW,GAAG1e,IAA2B;YAE/C,OAAA8E,QAAA,KACKmY,IAAI;cACPV,QAAQ,EAAEU,IAAI,CAACV,QAAQ,CAACf,MAAM,CAC5B,UAAC5P,GAAG;gBAAA,OAAKA,GAAG,CAACE,EAAE,KAAK4S,WAAW,CAACH,MAAM;;;;QAK5C,KAAK5Z,SAAS,CAACoT,WAAW;UAAE;YAC1B,IAAM4G,SAAS,GAAG3e,IAAwB;YAE1C,OAAA8E,QAAA,KACKmY,IAAI;cACPV,QAAQ,EAAEU,IAAI,CAACV,QAAQ,CAACgB,GAAG,CAAC,UAAC3R,GAAG;gBAAA,OAC9BA,GAAG,CAACE,EAAE,KAAK6S,SAAS,CAACC,UAAU,GAAA9Z,QAAA,KACtB8G,GAAG;kBAAE4R,OAAO,EAAE;qBACnB5R,GAAG;;;;QAKb,KAAKjH,SAAS,CAACsT,gBAAgB;UAAE;YAC/B,IAAM4G,qBAAqB,GAAG7e,IAA6B;YAE3D,OAAA8E,QAAA,KACKmY,IAAI;cACPV,QAAQ,EAAEU,IAAI,CAACV,QAAQ,CAACgB,GAAG,CAAC,UAAC3R,GAAG;gBAAA,OAC9BiT,qBAAqB,CAACC,WAAW,CAAC/X,QAAQ,CAAC6E,GAAG,CAACE,EAAE,CAAC,GAAAhH,QAAA,KACzC8G,GAAG;kBAAE4R,OAAO,EAAE;qBACnB5R,GAAG;;;;QAKb;UACE,OAAOqR,IAAI;;KAEhB,CAAC;GACH,EACD,CAACrc,eAAe,EAAEsb,OAAO,CAAC,CAC3B;EAED,IAAM6C,iBAAiB,GAAGpJ,WAAW,CACnC,UAACC,SAAoB,EAAE5V,IAAS;IAC9B,IAAI4V,SAAS,KAAKjR,SAAS,CAAC8S,WAAW,EAAE;MACvC,IAAMuH,oBAAoB,GAAkB;QAC1C7W,IAAI,EAAExD,SAAS,CAACsa,eAAe;QAC/Bjf,IAAI,EAAEA;OACP;MAED4U,UAAW,CAACvH,IAAI,CAAC2R,oBAAoB,CAAC7W,IAAI,EAAE6W,oBAAoB,CAAChf,IAAI,CAAC;;GAEzE,EACD,CAAC4U,UAAU,CAAC,CACb;EACD,IAAM4E,sBAAsB,GAAG7D,WAAW,CACxC,UAACC,SAAoB,EAAE5V,IAAS;IAC5BuC,sBAAsB,CAAC3B,eAAe,CAAC;IACzCkd,kBAAkB,CAAClI,SAAS,EAAE5V,IAAI,CAAC;GAEpC,EACD,CAAC8d,kBAAkB,EAAEld,eAAe,EAAEme,iBAAiB,EAACtC,WAAW,CAAC,CACrE;EAGDvE,mBAAmB,CAACsB,sBAAsB,CAAC;EAE3C,OAAO;IACL+C,QAAQ,EAAE,CAAAA,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEA,QAAQ,KAAI,EAAE;IAClCW,UAAU,EAAEX,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEW,UAAU;IAChC7D,OAAO,EAAPA,OAAO;IACP5R,KAAK,EAALA,KAAK;IACLmK,WAAW,EAAXA,WAAW;IACXjQ,WAAW,EAAXA,WAAW;IACXK,iBAAiB,EAAjBA,iBAAiB;IACjBG,WAAW,EAAXA,WAAW;IACXI,sBAAsB,EAAtBA,sBAAsB;IACtBE,aAAa,EAAbA,aAAa;IACbI,aAAa,EAAbA,aAAa;IACb2Z,WAAW,EAAXA,WAAW;IACXmB,iBAAiB,EAAjBA,iBAAiB;IACjBlB,WAAW,EAAXA,WAAW;IACX1Z,iBAAiB,EAAjBA;GACD;AACH,CAAC;;IC1gBYmc,QAAQ,GAAG,SAAXA,QAAQA;EACnB,IAAA9F,eAAA,GAAgBlC,cAAc,EAAE;IAAxBjO,GAAG,GAAAmQ,eAAA,CAAHnQ,GAAG;EACX,IAAAoM,SAAA,GAA8BC,QAAQ,CAAC,KAAK,CAAC;IAAtC+D,OAAO,GAAAhE,SAAA;IAAEiE,UAAU,GAAAjE,SAAA;EAC1B,IAAAG,UAAA,GAA0BF,QAAQ,CAAe,IAAI,CAAC;IAA/C7N,KAAK,GAAA+N,UAAA;IAAE+D,QAAQ,GAAA/D,UAAA;EACtB,IAAAqB,UAAA,GAA4CvB,QAAQ,CAAS,CAAC,CAAC;IAAxD6J,cAAc,GAAAtI,UAAA;IAAEuI,iBAAiB,GAAAvI,UAAA;EAMxC,IAAM5T,UAAU,GAAG0S,WAAW,WACrBzS,IAAU;IAAA;MACf,IAAI,CAAC+F,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MACd6F,iBAAiB,CAAC,CAAC,CAAC;MAAA,OAAA1f,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aAEhB;UAGF,IAAMkN,gBAAgB,GAAG,SAAnBA,gBAAgBA;YACpB,IAAIC,QAAQ,GAAG,CAAC;YAChB,IAAMC,QAAQ,GAAGC,WAAW,CAAC;cAC3BF,QAAQ,IAAI,EAAE;cACd,IAAIA,QAAQ,GAAG,EAAE,EAAE;gBACjBG,aAAa,CAACF,QAAQ,CAAC;eACxB,MAAM;gBACLH,iBAAiB,CAACE,QAAQ,CAAC;;aAE9B,EAAE,GAAG,CAAC;YAEP,OAAO;cAAA,OAAMG,aAAa,CAACF,QAAQ,CAAC;;WACrC;UAED,IAAMG,OAAO,GAAGL,gBAAgB,EAAE;UAAA,OAAA3f,OAAA,CAAAC,OAAA,CAEXsJ,GAAG,CAAChG,UAAU,CAACC,IAAI,CAAC,EAAApD,IAAA,WAArCC,QAAQ;YAGd2f,OAAO,EAAE;YAGTN,iBAAiB,CAAC,GAAG,CAAC;YAEtB,OAAOrf,QAAQ;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,uBAAuB,CAAC;UACjEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAkS,UAAA,EAAAC,OAAA;QACCN,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAK,UAAA,QAAAC,OAAA;QAAA,OAAAA,OAAA;;KAEpB,QAAA3Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAED,OAAO;IACLoQ,OAAO,EAAPA,OAAO;IACP5R,KAAK,EAALA,KAAK;IACL0X,cAAc,EAAdA,cAAc;IACdlc,UAAU,EAAVA;GACD;AACH,CAAC;;IClEY0c,sBAAsB,GAAG,SAAzBA,sBAAsBA;EACjC,IAAAvG,eAAA,GAAgBlC,cAAc,EAAE;IAAxBjO,GAAG,GAAAmQ,eAAA,CAAHnQ,GAAG;EACX,IAAAoM,SAAA,GAA8BC,QAAQ,CAAC,KAAK,CAAC;IAAtC+D,OAAO,GAAAhE,SAAA;IAAEiE,UAAU,GAAAjE,SAAA;EAC1B,IAAAG,UAAA,GAA0BF,QAAQ,CAAe,IAAI,CAAC;IAA/C7N,KAAK,GAAA+N,UAAA;IAAE+D,QAAQ,GAAA/D,UAAA;EACtB,IAAAqB,UAAA,GAAsDvB,QAAQ,CAAsB,IAAI,CAAC;IAAlFsK,mBAAmB,GAAA/I,UAAA;IAAEgJ,sBAAsB,GAAAhJ,UAAA;EAClD,IAAAE,UAAA,GAAoCzB,QAAQ,CAAgB,IAAI,CAAC;IAA1DhU,UAAU,GAAAyV,UAAA;IAAE+I,aAAa,GAAA/I,UAAA;EAOhC,IAAM1V,2BAA2B,GAAGsU,WAAW,WACtCrU,UAAkB;IAAA;MACvB,IAAI,CAAC2H,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO;UAAEogB,OAAO,EAAE,IAAI;UAAEze,UAAU,EAAVA;SAAY;;MAGtCgY,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACoBsJ,GAAG,CAAC5H,2BAA2B,CAACC,UAAU,CAAC,EAAAxB,IAAA,WAA3DigB,OAAO;YACbF,sBAAsB,CAACE,OAAO,CAAC;YAC/BD,aAAa,CAACxe,UAAU,CAAC;YACzB,OAAO;cAAEye,OAAO,EAAPA,OAAO;cAAEze,UAAU,EAAVA;aAAY;;SAC/B,YAAQ6E,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAChBnL,GAAG,GACH,IAAImL,KAAK,CAAC,oCAAoC,CAAC;UACrDiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO;YAAEsY,OAAO,EAAE,IAAI;YAAEze,UAAU,EAAVA;WAAY;SACrC;mBAAAqY,UAAA,EAAAC,OAAA;QACCN,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAK,UAAA,QAAAC,OAAA;QAAA,OAAAA,OAAA;;KAEpB,QAAA3Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAED,OAAO;IACL2W,mBAAmB,EAAnBA,mBAAmB;IACnBte,UAAU,EAAVA,UAAU;IACV+X,OAAO,EAAPA,OAAO;IACP5R,KAAK,EAALA,KAAK;IACLpG,2BAA2B,EAA3BA;GACD;AACH,CAAC;;SCnDe2e,yBAAyBA;EACvC,IAAA3K,SAAA,GACEC,QAAQ,CAAS,EAAE,CAAC;IADf2K,sBAAsB,GAAA5K,SAAA;IAAE6K,yBAAyB,GAAA7K,SAAA;EAGxD,IAAA8K,iBAAA,GAQIhH,gBAAgB,EAAE;IAPpB7C,aAAa,GAAA6J,iBAAA,CAAb7J,aAAa;IACJ8J,oBAAoB,GAAAD,iBAAA,CAA7B9G,OAAO;IACPI,gBAAgB,GAAA0G,iBAAA,CAAhB1G,gBAAgB;IAChB9Y,kBAAkB,GAAAwf,iBAAA,CAAlBxf,kBAAkB;IAClBM,qBAAqB,GAAAkf,iBAAA,CAArBlf,qBAAqB;IACrBH,mBAAmB,GAAAqf,iBAAA,CAAnBrf,mBAAmB;IACnB0V,gBAAgB,GAAA2J,iBAAA,CAAhB3J,gBAAgB;EAIlB,IAAM6J,oBAAoB,GAAGvK,OAAO,CAAC;IACnC,OAAOQ,aAAa,CAACgK,IAAI,CACvB,UAACC,YAAY;MAAA,OAAKA,YAAY,CAACzU,EAAE,KAAKmU,sBAAsB;MAC7D;GACF,EAAE,CAAC3J,aAAa,EAAE2J,sBAAsB,CAAC,CAAC;EAG3CxK,SAAS,CAAC;IACRgE,gBAAgB,EAAE;GACnB,EAAE,CAACA,gBAAgB,CAAC,CAAC;EAGtB,IAAM+G,wBAAwB,GAAG7K,WAAW,CAC1C,UAAC4K,YAAiC;IAChC,IAAIA,YAAY,KAAK,IAAI,EAAE;MACzBL,yBAAyB,CAAC,EAAE,CAAC;MAC7B;;IAEFA,yBAAyB,CAACK,YAAY,CAACzU,EAAE,CAAC;IAC1C0K,gBAAgB,CAAC,UAACiK,SAAyB;MAAA,OACzCA,SAAS,CAAClD,GAAG,CAAC,UAAC9B,IAAI;QAAA,OACjBA,IAAI,CAAC3P,EAAE,KAAKyU,YAAY,CAACzU,EAAE,GAAAhH,QAAA,KAElByb,YAAY;UACfG,WAAW,EAAE;aAEfjF,IAAI;QACT;MACF;GACF,EACD,CAACjF,gBAAgB,CAAC,CACnB;EAED,OAAO;IACLF,aAAa,EAAbA,aAAa;IACb8J,oBAAoB,EAApBA,oBAAoB;IACpBH,sBAAsB,EAAtBA,sBAAsB;IACtBI,oBAAoB,EAApBA,oBAAoB;IACpB1f,kBAAkB,EAAlBA,kBAAkB;IAClBG,mBAAmB,EAAnBA,mBAAmB;IACnBG,qBAAqB,EAArBA,qBAAqB;IACrBuf,wBAAwB,EAAxBA,wBAAwB;IACxB/G,gBAAgB,EAAhBA;GACD;AACH;;ICjDakH,OAAO,GAAG,SAAVA,OAAOA;EAClB,IAAAvH,eAAA,GAAgBlC,cAAc,EAAE;IAAxBjO,GAAG,GAAAmQ,eAAA,CAAHnQ,GAAG;EACX,IAAAoM,SAAA,GAA8BC,QAAQ,CAAC,KAAK,CAAC;IAAtC+D,OAAO,GAAAhE,SAAA;IAAEiE,UAAU,GAAAjE,SAAA;EAC1B,IAAAG,UAAA,GAA0BF,QAAQ,CAAe,IAAI,CAAC;IAA/C7N,KAAK,GAAA+N,UAAA;IAAE+D,QAAQ,GAAA/D,UAAA;EACtB,IAAAqB,UAAA,GAAkCvB,QAAQ,CAA2B,IAAI,CAAC;IAAnEsL,SAAS,GAAA/J,UAAA;IAAEgK,YAAY,GAAAhK,UAAA;EAM9B,IAAMtT,SAAS,GAAGoS,WAAW,WACpB1R,QAAgB;IAAA;MACrB,IAAI,CAACgF,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UACF,IAAM3O,OAAO,GAAqB;YAAElE,SAAS,EAAE2E;WAAU;UAAA,OAAAvE,OAAA,CAAAC,OAAA,CAClCsJ,GAAG,CAAC1F,SAAS,CAACC,OAAO,CAAC;SAE9C,YAAQ2C,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,sBAAsB,CAAC;UAChEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAkS,UAAA,EAAAC,OAAA;QACCN,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAK,UAAA,QAAAC,OAAA;QAAA,OAAAA,OAAA;;KAEpB,QAAA3Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAMD,IAAMvF,WAAW,GAAGiS,WAAW,WACtB1R,QAAgB;IAAA;MACrB,IAAI,CAACgF,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UACF,IAAM3O,OAAO,GAAuB;YAAElE,SAAS,EAAE2E;WAAU;UAAA,OAAAvE,OAAA,CAAAC,OAAA,CACpCsJ,GAAG,CAACvF,WAAW,CAACF,OAAO,CAAC;SAEhD,YAAQ2C,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,wBAAwB,CAAC;UAClEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAoS,WAAA,EAAAC,QAAA;QACCR,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAO,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAA7Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAQD,IAAMrF,cAAc,GAAG+R,WAAW,WAE9B1R,QAAgB,EAChBwL,MAAe,EACfqR,YAAqB;IAAA;MAErB,IAAI,CAAC7X,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UACF,IAAM3O,OAAO,GAA0B;YACrClE,SAAS,EAAE2E,QAAQ;YACnBwL,MAAM,EAANA,MAAM;YACNsR,aAAa,EAAED;WAChB;UAAA,OAAAphB,OAAA,CAAAC,OAAA,CACsBsJ,GAAG,CAACrF,cAAc,CAACJ,OAAO,CAAC;SAEnD,YAAQ2C,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,4BAA4B,CAAC;UACtEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAsS,WAAA,EAAAC,QAAA;QACCV,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAS,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAA/Z,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAMD,IAAMnF,gBAAgB,GAAG6R,WAAW,WAC3B1R,QAAgB;IAAA;MACrB,IAAI,CAACgF,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UACF,IAAM3O,OAAO,GAA4B;YAAElE,SAAS,EAAE2E;WAAU;UAAA,OAAAvE,OAAA,CAAAC,OAAA,CACzCsJ,GAAG,CAACnF,gBAAgB,CAACN,OAAO,CAAC;SAErD,YAAQ2C,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,8BAA8B,CAAC;UACxEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAAwS,WAAA,EAAAC,QAAA;QACCZ,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAW,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAja,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAMD,IAAMjF,cAAc,GAAG2R,WAAW,WACzB1R,QAAgB;IAAA;MACrB,IAAI,CAACgF,GAAG,EAAE;QACRsQ,QAAQ,CAAC,IAAIjI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1C,OAAA5R,OAAA,CAAAC,OAAA,CAAO,IAAI;;MAGb2Z,UAAU,CAAC,IAAI,CAAC;MAChBC,QAAQ,CAAC,IAAI,CAAC;MAAA,OAAA7Z,OAAA,CAAAC,OAAA,CAAA+Z,gBAAA;QAAA,OAAAvH,MAAA,aACV;UAAA,OAAAzS,OAAA,CAAAC,OAAA,CACqBsJ,GAAG,CAACjF,cAAc,CAACC,QAAQ,CAAC,EAAAnE,IAAA,WAA7CC,QAAQ;YACd8gB,YAAY,CAAC9gB,QAAQ,CAAC;YACtB,OAAOA,QAAQ;;SAChB,YAAQoG,GAAG,EAAE;UACZ,IAAMsB,KAAK,GACTtB,GAAG,YAAYmL,KAAK,GAAGnL,GAAG,GAAG,IAAImL,KAAK,CAAC,4BAA4B,CAAC;UACtEiI,QAAQ,CAAC9R,KAAK,CAAC;UACf,OAAO,IAAI;SACZ;mBAAA0S,WAAA,EAAAC,QAAA;QACCd,UAAU,CAAC,KAAK,CAAC;QAAA,IAAAa,WAAA,QAAAC,QAAA;QAAA,OAAAA,QAAA;;KAEpB,QAAAna,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACgJ,GAAG,CAAC,CACN;EAED,OAAO;IACLoQ,OAAO,EAAPA,OAAO;IACP5R,KAAK,EAALA,KAAK;IACLmZ,SAAS,EAATA,SAAS;IACTrd,SAAS,EAATA,SAAS;IACTG,WAAW,EAAXA,WAAW;IACXE,cAAc,EAAdA,cAAc;IACdE,gBAAgB,EAAhBA,gBAAgB;IAChBE,cAAc,EAAdA;GACD;AACH,CAAC;;SC/Kegd,oBAAoBA,CAACf,sBAA8B;EACjE,IAAA5K,SAAA,GAAwBC,QAAQ,CAAC,CAAC,CAAC;IAA5B1T,IAAI,GAAAyT,SAAA;IAAE4L,OAAO,GAAA5L,SAAA;EACpB,IAAAG,UAAA,GAA8BF,QAAQ,CAAC,IAAI,CAAC;IAArC4L,OAAO,GAAA1L,UAAA;IAAE2L,UAAU,GAAA3L,UAAA;EAC1B,IAAA8G,iBAAA,GAAoBL,gBAAgB,EAAE;IAA9BC,OAAO,GAAAI,iBAAA,CAAPJ,OAAO;EACf,IAAAkF,YAAA,GAYI/E,WAAW,CAAC4D,sBAAsB,CAAC;IAXrC1D,QAAQ,GAAA6E,YAAA,CAAR7E,QAAQ;IACC8E,eAAe,GAAAD,YAAA,CAAxB/H,OAAO;IACPlX,WAAW,GAAAif,YAAA,CAAXjf,WAAW;IACXR,WAAW,GAAAyf,YAAA,CAAXzf,WAAW;IACXY,sBAAsB,GAAA6e,YAAA,CAAtB7e,sBAAsB;IACtBM,aAAa,GAAAue,YAAA,CAAbve,aAAa;IACbJ,aAAa,GAAA2e,YAAA,CAAb3e,aAAa;IACb+Z,WAAW,GAAA4E,YAAA,CAAX5E,WAAW;IACXC,WAAW,GAAA2E,YAAA,CAAX3E,WAAW;IACXkB,iBAAiB,GAAAyD,YAAA,CAAjBzD,iBAAiB;IACjB5a,iBAAiB,GAAAqe,YAAA,CAAjBre,iBAAiB;EAGnB,IAAAue,oBAAA,GACEpJ,qBAAmB,EAAE;IADfE,WAAW,GAAAkJ,oBAAA,CAAXlJ,WAAW;IAAEG,aAAa,GAAA+I,oBAAA,CAAb/I,aAAa;IAAEG,cAAc,GAAA4I,oBAAA,CAAd5I,cAAc;IAAEQ,WAAW,GAAAoI,oBAAA,CAAXpI,WAAW;EAG/D,IAAAqI,SAAA,GAA6DrC,QAAQ,EAAE;IAA/Djc,UAAU,GAAAse,SAAA,CAAVte,UAAU;IAAWue,WAAW,GAAAD,SAAA,CAApBlI,OAAO;IAAe8F,cAAc,GAAAoC,SAAA,CAAdpC,cAAc;EAGxD1J,SAAS,CAAC;IACRwL,OAAO,CAAC,CAAC,CAAC;IACVE,UAAU,CAAC,IAAI,CAAC;GACjB,EAAE,CAAClB,sBAAsB,CAAC,CAAC;EAG5BxK,SAAS,CAAC;IACR,IAAIwK,sBAAsB,EAAE;MAC1B1d,sBAAsB,EAAE;;GAE3B,EAAE,CAAC0d,sBAAsB,EAAE1d,sBAAsB,CAAC,CAAC;EAGpDkT,SAAS,CAAC;IACR,IAAI2C,WAAW,IAAIG,aAAa,IAAIG,cAAc,EAAE;MAElDQ,WAAW,EAAE;;GAEhB,EAAE,CAACd,WAAW,EAAEG,aAAa,EAAEG,cAAc,EAAEQ,WAAW,CAAC,CAAC;EAG7D,IAAMuI,gBAAgB,GAAG9L,WAAW;IAAA;MAClC,IAAI0L,eAAe,IAAI,CAACH,OAAO,EAAE,OAAAxhB,OAAA,CAAAC,OAAA;MAAM,IAAAuS,KAAA,GAAAC,MAAA,aAEnC;QACF,IAAMuP,QAAQ,GAAG9f,IAAI,GAAG,CAAC;QAAA,OAAAlC,OAAA,CAAAC,OAAA,CAEJgC,WAAW,CAACse,sBAAsB,EAAEyB,QAAQ,CAAC,EAAA5hB,IAAA,WAA5D6hB,MAAM;UAAA,IAER,CAACA,MAAM,IAAIA,MAAM,CAACpF,QAAQ,CAACrS,MAAM,KAAK,CAAC;YACzCiX,UAAU,CAAC,KAAK,CAAC;;YAEjBF,OAAO,CAACS,QAAQ,CAAC;;;OAEpB,YAAQja,KAAK,EAAE;QACdL,OAAO,CAACK,KAAK,CAAC,+BAA+B,EAAEA,KAAK,CAAC;QACrD0Z,UAAU,CAAC,KAAK,CAAC;OAClB;MAAA,OAAAzhB,OAAA,CAAAC,OAAA,CAAAuS,KAAA,IAAAA,KAAA,CAAApS,IAAA,GAAAoS,KAAA,CAAApS,IAAA;KACF,QAAAG,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KAAE,CAACohB,eAAe,EAAEH,OAAO,EAAEvf,WAAW,EAAEC,IAAI,EAAEqe,sBAAsB,CAAC,CAAC;EAGzE,IAAM2B,iBAAiB,GAAGjM,WAAW,WAC5BlJ,OAAe,EAAEH,QAA4B,EAAEjK,aAAuB;IAAA;MAC3E,IAAI,CAACoK,OAAO,CAACoV,IAAI,EAAE,IAAI,CAAC5B,sBAAsB,IAAI,CAAC/D,OAAO,EAAE,OAAAxc,OAAA,CAAAC,OAAA;MAE5D,IAAMmiB,aAAa,aAAWpc,IAAI,CAAC2E,GAAG,EAAI;MAC1C,IAAM0X,UAAU,GAAG;QACjBpV,WAAW,EAAE,EAAE;QACfyQ,gBAAgB,EAAE0E,aAAa;QAC/B1D,OAAO,EAAE,IAAI1Y,IAAI,EAAE,CAACC,WAAW,EAAE,CAACqc,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QACrD5f,OAAO,EAAEqK,OAAO,CAACoV,IAAI,EAAE;QACvBI,WAAW,EAAE,CAAC;QACdC,MAAM,EAAEhG,OAA8B;QACtC5P,QAAQ,EAAEA,QAAQ;QAClBkR,OAAO,EAAE,KAAK;QACdzS,MAAM,EAAE;OACa;MAEvByR,WAAW,CAAC,UAAC2F,YAAiB;QAC5B,IAAMC,gBAAgB,GAAG,CAAAD,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE;QACrD,OAAAzX,QAAA,KACKqd,YAAY;UACf5F,QAAQ,GAAGwF,UAAU,EAAAlU,MAAA,CAAKuU,gBAAgB;;OAE7C,CAAC;MAAA,OAAA1iB,OAAA,CAAAC,OAAA,CAAAwS,MAAA,aAEE;QAAA,OAAAzS,OAAA,CAAAC,OAAA,CACoBwC,WAAW,CAAC;UAChCoK,kBAAkB,EAAED,QAAQ,CAACR,EAAE;UAC/BW,OAAO,EAAEA,OAAO;UAChB2Q,gBAAgB,EAAE6C,sBAAsB;UACxC5d,aAAa,EAAbA;SACD,CAAC,EAAAvC,IAAA,WALIuiB,OAAO;UAAA,IAOT,CAACA,OAAO;YACV7F,WAAW,CAAC,UAAC2F,YAAiB;cAAA,OAAArd,QAAA,KACzBqd,YAAY;gBACf5F,QAAQ,EAAE,CAAC,CAAA4F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE,EAAEgB,GAAG,CAAC,UAAC3R,GAAQ;kBAAA,OACpDA,GAAG,CAACwR,gBAAgB,KAAK0E,aAAa,GAAAhd,QAAA,KAC7B8G,GAAG;oBAAEb,MAAM,EAAE;uBAClBa,GAAG;;;aAET,CAAC;YACH,OAAOyW,OAAO;;YAEd7F,WAAW,CAAC,UAAC2F,YAAiB;cAAA,OAAArd,QAAA,KACzBqd,YAAY;gBACf5F,QAAQ,EAAE,CAAC,CAAA4F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE,EAAEgB,GAAG,CAAC,UAAC3R,GAAQ;kBAAA,OACpDA,GAAG,CAACwR,gBAAgB,KAAK0E,aAAa,GAAAhd,QAAA,KAE7B8G,GAAG;oBACNb,MAAM,EAAE,MAAM;oBACde,EAAE,EAAEuW,OAAO,CAACjgB,OAAO,CAAC0J,EAAE;oBACtB0R,OAAO,EAAE6E,OAAO,CAACjgB,OAAO,CAACob;uBAE3B5R,GAAG;;;aAET,CAAC;YACH,OAAOyW,OAAO;;;OAEjB,YAAQ5a,KAAK,EAAE;QAAA,IAAA6a,oBAAA,EAAAC,eAAA;QACd/F,WAAW,CAAC,UAAC2F,YAAiB;UAAA,OAAArd,QAAA,KACzBqd,YAAY;YACf5F,QAAQ,EAAE,CAAC,CAAA4F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE,EAAEf,MAAM,CAC7C,UAAC5P,GAAQ;cAAA,OAAKA,GAAG,CAACwR,gBAAgB,KAAK0E,aAAa;;;SAEtD,CAAC;QACH,QAAAQ,oBAAA,GAAO7a,KAAK,aAALA,KAAK,wBAAA8a,eAAA,GAAL9a,KAAK,CAAE1H,QAAQ,cAAAwiB,eAAA,uBAAfA,eAAA,CAAiBviB,IAAI,YAAAsiB,oBAAA,GAAI;UAAElgB,OAAO,EAAE;SAAiB;OAC7D;KACF,QAAAnC,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACkC,WAAW,EAAE8d,sBAAsB,EAAE/D,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEpQ,EAAE,EAAE0Q,WAAW,CAAC,CAChE;EAGD,IAAMgG,qBAAqB,GAAG7M,WAAW,WAErClJ,OAAe,EACfgW,MAAc,EACdnW,QAA4B,EAC5BoW,QAAiB,EACjBjU,GAAY,EACZpM,aAAuB;IAAA;MAEvB,IAAI,CAAC4d,sBAAsB,EAAE,OAAAvgB,OAAA,CAAAC,OAAA;MAE7B,IAAMmiB,aAAa,kBAAgBpc,IAAI,CAAC2E,GAAG,EAAI;MAE/C,IAAM0X,UAAU,GAAG;QACjBpV,WAAW,EAAE,CAAC;UAAE+V,QAAQ,EAARA,QAAQ;UAAEjU,GAAG,EAAHA,GAAG;UAAE3C,EAAE,EAAE2W;SAAQ,CAAC;QAC5CrF,gBAAgB,EAAE0E,aAAa;QAC/B1D,OAAO,EAAE,IAAI1Y,IAAI,EAAE,CAACC,WAAW,EAAE,CAACqc,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QACrD5f,OAAO,EAAEqK,OAAO;QAChBwV,WAAW,EAAE,CAAC;QACdC,MAAM,EAAEhG,OAAO;QACf5P,QAAQ,EAAEA,QAAQ;QAClBkR,OAAO,EAAE,KAAK;QACdzS,MAAM,EAAE;OACT;MAEDyR,WAAW,CAAC,UAAC2F,YAAiB;QAC5B,IAAMC,gBAAgB,GAAG,CAAAD,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE;QACrD,OAAAzX,QAAA,KACKqd,YAAY;UACf5F,QAAQ,GAAGwF,UAAU,EAAAlU,MAAA,CAAKuU,gBAAgB;;OAE7C,CAAC;MAAA,OAAA1iB,OAAA,CAAAC,OAAA,CAAAwS,MAAA,aAEE;QAAA,OAAAzS,OAAA,CAAAC,OAAA,CACoBwC,WAAW,CAAC;UAChCoK,kBAAkB,EAAED,QAAQ,CAACR,EAAE;UAC/BW,OAAO,EAAEA,OAAO;UAChBE,WAAW,EAAE,CAAC8V,MAAM,CAAC;UACrBrF,gBAAgB,EAAE6C,sBAAsB;UACxC5d,aAAa,EAAbA;SACD,CAAC,EAAAvC,IAAA,WANIuiB,OAAO;UAAA,IAQTA,OAAO;YACT7F,WAAW,CAAC,UAAC2F,YAAiB;cAAA,OAAArd,QAAA,KACzBqd,YAAY;gBACf5F,QAAQ,EAAE,CAAC,CAAA4F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE,EAAEgB,GAAG,CAAC,UAAC3R,GAAQ;kBAAA,OACpDA,GAAG,CAACwR,gBAAgB,KAAK0E,aAAa,GAAAhd,QAAA,KAE7B8G,GAAG;oBACNb,MAAM,EAAE,MAAM;oBACde,EAAE,EAAEuW,OAAO,CAACjgB,OAAO,CAAC0J,EAAE;oBACtB0R,OAAO,EAAE6E,OAAO,CAACjgB,OAAO,CAACob;uBAE3B5R,GAAG;;;aAET,CAAC;YACH,OAAO,IAAI;;YAEX4Q,WAAW,CAAC,UAAC2F,YAAiB;cAAA,OAAArd,QAAA,KACzBqd,YAAY;gBACf5F,QAAQ,EAAE,CAAC,CAAA4F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE,EAAEgB,GAAG,CAAC,UAAC3R,GAAQ;kBAAA,OACpDA,GAAG,CAACwR,gBAAgB,KAAK0E,aAAa,GAAAhd,QAAA,KAC7B8G,GAAG;oBAAEb,MAAM,EAAE;uBAClBa,GAAG;;;aAET,CAAC;YACH,OAAO,KAAK;;;OAEf,YAAQnE,KAAK,EAAE;QACd+U,WAAW,CAAC,UAAC2F,YAAiB;UAAA,OAAArd,QAAA,KACzBqd,YAAY;YACf5F,QAAQ,EAAE,CAAC,CAAA4F,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE5F,QAAQ,KAAI,EAAE,EAAEf,MAAM,CAC7C,UAAC5P,GAAQ;cAAA,OAAKA,GAAG,CAACwR,gBAAgB,KAAK0E,aAAa;;;SAEtD,CAAC;QACH1a,OAAO,CAACK,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC;QACpD,OAAO,KAAK;OACb;KACF,QAAAxH,CAAA;MAAA,OAAAP,OAAA,CAAAQ,MAAA,CAAAD,CAAA;;KACD,CAACkC,WAAW,EAAE8d,sBAAsB,EAAE/D,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEpQ,EAAE,EAAE0Q,WAAW,CAAC,CAChE;EAED,OAAO;IACLD,QAAQ,EAARA,QAAQ;IACR8E,eAAe,EAAfA,eAAe;IACfG,WAAW,EAAXA,WAAW;IACXrC,cAAc,EAAdA,cAAc;IACdlc,UAAU,EAAVA,UAAU;IACV2e,iBAAiB,EAAjBA,iBAAiB;IACjBY,qBAAqB,EAArBA,qBAAqB;IACrB3f,aAAa,EAAbA,aAAa;IACbJ,aAAa,EAAbA,aAAa;IACbd,WAAW,EAAXA,WAAW;IACX8f,gBAAgB,EAAhBA,gBAAgB;IAChBP,OAAO,EAAPA,OAAO;IACP1E,WAAW,EAAXA,WAAW;IACXC,WAAW,EAAXA,WAAW;IACXkB,iBAAiB,EAAjBA,iBAAiB;IACjB5a,iBAAiB,EAAjBA;GACD;AACH;;SCzOgB4f,eAAeA;EAC7B,IAAAvL,qBAAA,GAAgCnB,oBAAoB,EAAE;IAA9CnJ,EAAE,GAAAsK,qBAAA,CAAFtK,EAAE;IAAEK,GAAG,GAAAiK,qBAAA,CAAHjK,GAAG;IAAEyH,UAAU,GAAAwC,qBAAA,CAAVxC,UAAU;EAC3B,IAAMgO,eAAe,GAAGC,MAAM,CAAkB,IAAIzZ,GAAG,EAAE,CAAC;EAG1D,IAAM0Z,2BAA2B,GAAGnN,WAAW,CAC7C,UAAUhP,GAAW,EAAEiP,SAAoB,EAAEC,QAAgC;IAE3E,IAAI,CAAC+M,eAAe,CAACrO,OAAO,CAACnB,GAAG,CAACzM,GAAG,CAAC,EAAE;MACrCic,eAAe,CAACrO,OAAO,CAAClB,GAAG,CAAC1M,GAAG,EAAE,EAAE,CAAC;;IAEtCic,eAAe,CAACrO,OAAO,CAAC1U,GAAG,CAAC8G,GAAG,CAAE,CAAClB,IAAI,CAACoQ,QAA+B,CAAC;IAGvE,IAAMkN,YAAY,GAAG,SAAfA,YAAYA,CAAIpV,KAAuB;MAC3C,IAAM4E,SAAS,GAAGqQ,eAAe,CAACrO,OAAO,CAAC1U,GAAG,CAAC8G,GAAG,CAAC;MAClD,IAAI4L,SAAS,EAAE;QACbA,SAAS,CAACxC,OAAO,CAAC,UAAAiT,QAAQ;UACxB,IAAI;YACFA,QAAQ,CAACrV,KAAK,CAAC3N,IAAI,CAAC;WACrB,CAAC,OAAOmG,GAAG,EAAE;YACZiB,OAAO,CAACK,KAAK,qCAAmCd,GAAG,QAAKR,GAAG,CAAC;;SAE/D,CAAC;;KAEL;IAED2G,EAAE,CAAC8I,SAAS,EAAEmN,YAA8C,CAAC;IAG7D,OAAO;MAEL,IAAMxQ,SAAS,GAAGqQ,eAAe,CAACrO,OAAO,CAAC1U,GAAG,CAAC8G,GAAG,CAAC;MAClD,IAAI4L,SAAS,EAAE;QACb,IAAMG,KAAK,GAAGH,SAAS,CAACrE,OAAO,CAAC2H,QAA+B,CAAC;QAChE,IAAInD,KAAK,KAAK,CAAC,CAAC,EAAE;UAChBH,SAAS,CAACpE,MAAM,CAACuE,KAAK,EAAE,CAAC,CAAC;;;MAK9BvF,GAAG,CAACyI,SAAS,EAAEmN,YAA8C,CAAC;KAC/D;GACF,EACD,CAACjW,EAAE,EAAEK,GAAG,CAAC,CACV;EAGD,IAAM8V,6BAA6B,GAAGtN,WAAW,CAC/C,UAAChP,GAAW,EAAEkP,QAA6B;IACzC,IAAMtD,SAAS,GAAGqQ,eAAe,CAACrO,OAAO,CAAC1U,GAAG,CAAC8G,GAAG,CAAC;IAClD,IAAI4L,SAAS,EAAE;MACb,IAAMG,KAAK,GAAGH,SAAS,CAACrE,OAAO,CAAC2H,QAAQ,CAAC;MACzC,IAAInD,KAAK,KAAK,CAAC,CAAC,EAAE;QAChBH,SAAS,CAACpE,MAAM,CAACuE,KAAK,EAAE,CAAC,CAAC;;;GAG/B,EACD,EAAE,CACH;EAGD,IAAMwQ,iCAAiC,GAAGvN,WAAW,CACnD,UAAChP,GAAW;IACVic,eAAe,CAACrO,OAAO,UAAO,CAAC5N,GAAG,CAAC;GACpC,EACD,EAAE,CACH;EAGD,IAAMwc,eAAe,GAAGxN,WAAW,CACjC,UAACC,SAAoB,EAAE5V,IAAS;IAC9B,IAAI4U,UAAU,EAAE;MACdA,UAAU,CAACvH,IAAI,CAACuI,SAAS,EAAE5V,IAAI,CAAC;;GAEnC,EACD,CAAC4U,UAAU,CAAC,CACb;EAED,OAAO;IACLkO,2BAA2B,EAA3BA,2BAA2B;IAC3BG,6BAA6B,EAA7BA,6BAA6B;IAC7BC,iCAAiC,EAAjCA,iCAAiC;IACjCC,eAAe,EAAfA;GACD;AACH;;SCxFgBC,UAAUA;EACxB,IAAAhM,qBAAA,GAA4CnB,oBAAoB,EAAE;IAA1D1H,aAAa,GAAA6I,qBAAA,CAAb7I,aAAa;IAAEC,gBAAgB,GAAA4I,qBAAA,CAAhB5I,gBAAgB;EAEvC,IAAM6U,aAAa,GAAG1N,WAAW,CAC/B,UAAC3Q;QAAAA;MAAAA,QAAkBJ,QAAQ,CAACK,IAAI;;IAC9BsJ,aAAa,CAAC;MACZxJ,OAAO,EAAE,IAAI;MACbC,KAAK,EAALA;KACD,CAAC;GACH,EACD,CAACuJ,aAAa,CAAC,CAChB;EAED,IAAM+U,cAAc,GAAG3N,WAAW,CAAC;IACjCpH,aAAa,CAAC;MACZxJ,OAAO,EAAE;KACV,CAAC;GACH,EAAE,CAACwJ,aAAa,CAAC,CAAC;EAEnB,IAAMgV,WAAW,GAAG5N,WAAW,CAC7B,UAAC3Q,KAAe;IACduJ,aAAa,CAAC;MACZvJ,KAAK,EAALA;KACD,CAAC;GACH,EACD,CAACuJ,aAAa,CAAC,CAChB;EAED,IAAMiV,mBAAmB,GAAG7N,WAAW,CACrC,UAAC9W,MAA6B;IAC5B0P,aAAa,CAAC1P,MAAM,CAAC;GACtB,EACD,CAAC0P,aAAa,CAAC,CAChB;EAED,OAAO;IACL8U,aAAa,EAAbA,aAAa;IACbC,cAAc,EAAdA,cAAc;IACdC,WAAW,EAAXA,WAAW;IACXC,mBAAmB,EAAnBA,mBAAmB;IACnBhV,gBAAgB,EAAhBA;GACD;AACH;;ICRa0J,qBAAmB,GAAGuL;AAYnC,IAAaC,UAAU,GAA8B,SAAxCA,UAAUA,CAAAzS,IAAA;MACrB+D,QAAQ,GAAA/D,IAAA,CAAR+D,QAAQ;IACR3V,KAAK,GAAA4R,IAAA,CAAL5R,KAAK;IACLC,SAAS,GAAA2R,IAAA,CAAT3R,SAAS;IAAAqkB,YAAA,GAAA1S,IAAA,CACT/R,OAAO;IAAPA,OAAO,GAAAykB,YAAA,cAAG,yBAAyB,GAAAA,YAAA;IAAAC,kBAAA,GAAA3S,IAAA,CACnC7F,aAAa;IAAbA,aAAa,GAAAwY,kBAAA,cAAG,uBAAuB,GAAAA,kBAAA;IACvC1O,iBAAiB,GAAAjE,IAAA,CAAjBiE,iBAAiB;EAEjB,IAAMrW,MAAM,GAAGkX,OAAa,CAAC;IAC3B,IAAI1W,KAAK,EAAE;MACT,OAAO;QAAEA,KAAK,EAALA,KAAK;QAAEH,OAAO,EAAPA,OAAO;QAAEI,SAAS,EAATA,SAAS;QAAE8L,aAAa,EAAbA;OAAe;;IAErD,OAAO7K,SAAS;GACjB,EAAE,CAAClB,KAAK,EAAEH,OAAO,EAAEI,SAAS,CAAC,CAAC;EAE/B,OACEyW,cAACW,YAAY;IAAC7X,MAAM,EAAEA,MAAM;IAAEqW,iBAAiB,EAAEA;KAC9CF,QAAQ,CACI;AAEnB,CAAC;;;;"}