[{"data":1,"prerenderedAt":1414},["ShallowReactive",2],{"docs:/docs/high-level-sdks/chat":3},{"id":4,"title":5,"body":6,"description":17,"extension":1408,"meta":1409,"navigation":257,"path":1410,"seo":1411,"stem":1412,"__hash__":1413},"docs/docs/high-level-sdks/chat.md","Chat SDK",{"type":7,"value":8,"toc":1394},"minimark",[9,14,18,23,40,45,67,71,103,150,154,186,209,213,783,787,790,793,798,964,1056,1060,1174,1177,1183,1255,1259,1390],[10,11,13],"h1",{"id":12},"nolagchat","@nolag/chat",[15,16,17],"p",{},"Multi-room chat with presence, typing indicators, message replay, and user mapping.",[19,20,22],"h2",{"id":21},"overview","Overview",[15,24,25,28,29,32,33,36,37,39],{},[26,27,13],"code",{}," is a high-level SDK that turns any application into a fully-featured chat system. It handles room management, user presence, typing indicators, message history replay, and unread tracking, all on top of ",[26,30,31],{},"@nolag/js-sdk",". Your app owns one core NoLag client and injects it into ",[26,34,35],{},"NoLagChat","; the wrapper attaches its chat behaviour to that connection. You create a ",[26,38,35],{}," instance, wait for it to be ready, join rooms, and start sending messages within minutes.",[41,42,44],"h3",{"id":43},"key-features","Key Features",[46,47,48,52,55,58,61,64],"ul",{},[49,50,51],"li",{},"Multi-room chat with isolated presence per room",[49,53,54],{},"Typing indicators with automatic timeout",[49,56,57],{},"Message replay to catch up on up to 7 days of history after reconnect",[49,59,60],{},"User mapping to attach names, avatars, and metadata to each actor",[49,62,63],{},"Unread message tracking with per-room badge counts",[49,65,66],{},"Automatic reconnection with state restoration",[19,68,70],{"id":69},"how-it-works","How It Works",[15,72,73,75,76,78,79,82,83,86,87,90,91,94,95,98,99,102],{},[26,74,35],{}," attaches to an injected ",[26,77,31],{}," client and manages a lobby for global user presence. When you call ",[26,80,81],{},"joinRoom()",", it returns a ",[26,84,85],{},"ChatRoom"," instance that subscribes to two topics: ",[26,88,89],{},"messages"," for durable chat history and ",[26,92,93],{},"_typing"," for ephemeral typing signals. A ",[26,96,97],{},"MessageStore"," inside each room accumulates messages and replayed history, while a ",[26,100,101],{},"PresenceManager"," tracks who is currently online. The app owns the socket lifecycle; the wrapper never opens or closes it.",[104,105,106,122],"table",{},[107,108,109],"thead",{},[110,111,112,116,119],"tr",{},[113,114,115],"th",{},"Topic",[113,117,118],{},"Purpose",[113,120,121],{},"Replay",[123,124,125,138],"tbody",{},[110,126,127,132,135],{},[128,129,130],"td",{},[26,131,89],{},[128,133,134],{},"Chat messages: text, metadata, sender info",[128,136,137],{},"7 days",[110,139,140,144,147],{},[128,141,142],{},[26,143,93],{},[128,145,146],{},"Typing start/stop signals (ephemeral)",[128,148,149],{},"None",[19,151,153],{"id":152},"installation","Installation",[155,156,157],"code-tabs",{},[158,159,165],"pre",{"className":160,"code":161,"filename":162,"language":163,"meta":164,"style":164},"language-bash shiki shiki-themes github-light github-dark","npm install @nolag/chat @nolag/js-sdk\n","Terminal","bash","",[26,166,167],{"__ignoreMap":164},[168,169,172,176,180,183],"span",{"class":170,"line":171},"line",1,[168,173,175],{"class":174},"sScJk","npm",[168,177,179],{"class":178},"sZZnC"," install",[168,181,182],{"class":178}," @nolag/chat",[168,184,185],{"class":178}," @nolag/js-sdk\n",[187,188,190],"note",{"title":189},"Shared connection",[15,191,192,193,196,197,200,201,204,205,208],{},"One core NoLag client can back several wrapper SDKs at once, for example chat, notify, and a dashboard on a single socket, as long as each wrapper uses a distinct ",[26,194,195],{},"appName",". Each wrapper attaches its handlers on construction and releases them with ",[26,198,199],{},"detach()",", and never touches the socket itself. Your app owns ",[26,202,203],{},"connect()"," and ",[26,206,207],{},"disconnect()",".",[19,210,212],{"id":211},"quick-start","Quick Start",[155,214,215],{},[158,216,221],{"className":217,"code":218,"filename":219,"language":220,"meta":164,"style":164},"language-typescript shiki shiki-themes github-light github-dark","import { NoLag } from '@nolag/js-sdk'\nimport { NoLagChat } from '@nolag/chat'\n\n// The app owns one core client. In a browser, pass a token provider so the\n// SDK can mint fresh short-lived client tokens from your backend.\nconst client = NoLag(async () => (await (await fetch('/api/nolag-token')).json()).token)\n\n// Inject the client into the chat wrapper\nconst chat = new NoLagChat({ client, username: 'Alice', avatar: '/img/alice.png' })\n\nawait client.connect()   // the app owns the connection\nawait chat.ready()       // wrapper setup complete (identity, presence, rooms)\n\n// Join a room\nconst room = chat.joinRoom('general')\n\n// Send a message\nroom.sendMessage('Hello everyone!')\n\n// Listen for messages\nroom.on('message', (msg) => {\n  console.log(`[${msg.username}]: ${msg.text}`)\n  console.log('Sent at:', new Date(msg.timestamp))\n})\n\n// Listen for typing indicators\nroom.on('typing', ({ users }) => {\n  console.log('Typing:', users.map((u) => u.username).join(', '))\n})\n\n// Trigger typing events\nroom.startTyping()\n// ... user stops typing\nroom.stopTyping()\n\n// Get online users in this room\nconst users = room.getUsers()\nconsole.log('Online:', users.length)\n\n// Teardown: the wrapper releases its handlers and topics; the app closes the\n// socket (never the other way around).\nchat.detach()\nclient.disconnect()\n","TypeScript","typescript",[26,222,223,239,252,259,266,272,327,332,338,369,374,391,408,413,419,442,447,453,469,474,480,508,544,568,574,579,585,610,652,657,662,668,679,685,695,700,706,724,744,749,755,761,772],{"__ignoreMap":164},[168,224,225,229,233,236],{"class":170,"line":171},[168,226,228],{"class":227},"szBVR","import",[168,230,232],{"class":231},"sVt8B"," { NoLag } ",[168,234,235],{"class":227},"from",[168,237,238],{"class":178}," '@nolag/js-sdk'\n",[168,240,242,244,247,249],{"class":170,"line":241},2,[168,243,228],{"class":227},[168,245,246],{"class":231}," { NoLagChat } ",[168,248,235],{"class":227},[168,250,251],{"class":178}," '@nolag/chat'\n",[168,253,255],{"class":170,"line":254},3,[168,256,258],{"emptyLinePlaceholder":257},true,"\n",[168,260,262],{"class":170,"line":261},4,[168,263,265],{"class":264},"sJ8bj","// The app owns one core client. In a browser, pass a token provider so the\n",[168,267,269],{"class":170,"line":268},5,[168,270,271],{"class":264},"// SDK can mint fresh short-lived client tokens from your backend.\n",[168,273,275,278,282,285,288,291,294,297,300,303,306,308,310,313,315,318,321,324],{"class":170,"line":274},6,[168,276,277],{"class":227},"const",[168,279,281],{"class":280},"sj4cs"," client",[168,283,284],{"class":227}," =",[168,286,287],{"class":174}," NoLag",[168,289,290],{"class":231},"(",[168,292,293],{"class":227},"async",[168,295,296],{"class":231}," () ",[168,298,299],{"class":227},"=>",[168,301,302],{"class":231}," (",[168,304,305],{"class":227},"await",[168,307,302],{"class":231},[168,309,305],{"class":227},[168,311,312],{"class":174}," fetch",[168,314,290],{"class":231},[168,316,317],{"class":178},"'/api/nolag-token'",[168,319,320],{"class":231},")).",[168,322,323],{"class":174},"json",[168,325,326],{"class":231},"()).token)\n",[168,328,330],{"class":170,"line":329},7,[168,331,258],{"emptyLinePlaceholder":257},[168,333,335],{"class":170,"line":334},8,[168,336,337],{"class":264},"// Inject the client into the chat wrapper\n",[168,339,341,343,346,348,351,354,357,360,363,366],{"class":170,"line":340},9,[168,342,277],{"class":227},[168,344,345],{"class":280}," chat",[168,347,284],{"class":227},[168,349,350],{"class":227}," new",[168,352,353],{"class":174}," NoLagChat",[168,355,356],{"class":231},"({ client, username: ",[168,358,359],{"class":178},"'Alice'",[168,361,362],{"class":231},", avatar: ",[168,364,365],{"class":178},"'/img/alice.png'",[168,367,368],{"class":231}," })\n",[168,370,372],{"class":170,"line":371},10,[168,373,258],{"emptyLinePlaceholder":257},[168,375,377,379,382,385,388],{"class":170,"line":376},11,[168,378,305],{"class":227},[168,380,381],{"class":231}," client.",[168,383,384],{"class":174},"connect",[168,386,387],{"class":231},"()   ",[168,389,390],{"class":264},"// the app owns the connection\n",[168,392,394,396,399,402,405],{"class":170,"line":393},12,[168,395,305],{"class":227},[168,397,398],{"class":231}," chat.",[168,400,401],{"class":174},"ready",[168,403,404],{"class":231},"()       ",[168,406,407],{"class":264},"// wrapper setup complete (identity, presence, rooms)\n",[168,409,411],{"class":170,"line":410},13,[168,412,258],{"emptyLinePlaceholder":257},[168,414,416],{"class":170,"line":415},14,[168,417,418],{"class":264},"// Join a room\n",[168,420,422,424,427,429,431,434,436,439],{"class":170,"line":421},15,[168,423,277],{"class":227},[168,425,426],{"class":280}," room",[168,428,284],{"class":227},[168,430,398],{"class":231},[168,432,433],{"class":174},"joinRoom",[168,435,290],{"class":231},[168,437,438],{"class":178},"'general'",[168,440,441],{"class":231},")\n",[168,443,445],{"class":170,"line":444},16,[168,446,258],{"emptyLinePlaceholder":257},[168,448,450],{"class":170,"line":449},17,[168,451,452],{"class":264},"// Send a message\n",[168,454,456,459,462,464,467],{"class":170,"line":455},18,[168,457,458],{"class":231},"room.",[168,460,461],{"class":174},"sendMessage",[168,463,290],{"class":231},[168,465,466],{"class":178},"'Hello everyone!'",[168,468,441],{"class":231},[168,470,472],{"class":170,"line":471},19,[168,473,258],{"emptyLinePlaceholder":257},[168,475,477],{"class":170,"line":476},20,[168,478,479],{"class":264},"// Listen for messages\n",[168,481,483,485,488,490,493,496,500,503,505],{"class":170,"line":482},21,[168,484,458],{"class":231},[168,486,487],{"class":174},"on",[168,489,290],{"class":231},[168,491,492],{"class":178},"'message'",[168,494,495],{"class":231},", (",[168,497,499],{"class":498},"s4XuR","msg",[168,501,502],{"class":231},") ",[168,504,299],{"class":227},[168,506,507],{"class":231}," {\n",[168,509,511,514,517,519,522,524,526,529,532,534,536,539,542],{"class":170,"line":510},22,[168,512,513],{"class":231},"  console.",[168,515,516],{"class":174},"log",[168,518,290],{"class":231},[168,520,521],{"class":178},"`[${",[168,523,499],{"class":231},[168,525,208],{"class":178},[168,527,528],{"class":231},"username",[168,530,531],{"class":178},"}]: ${",[168,533,499],{"class":231},[168,535,208],{"class":178},[168,537,538],{"class":231},"text",[168,540,541],{"class":178},"}`",[168,543,441],{"class":231},[168,545,547,549,551,553,556,559,562,565],{"class":170,"line":546},23,[168,548,513],{"class":231},[168,550,516],{"class":174},[168,552,290],{"class":231},[168,554,555],{"class":178},"'Sent at:'",[168,557,558],{"class":231},", ",[168,560,561],{"class":227},"new",[168,563,564],{"class":174}," Date",[168,566,567],{"class":231},"(msg.timestamp))\n",[168,569,571],{"class":170,"line":570},24,[168,572,573],{"class":231},"})\n",[168,575,577],{"class":170,"line":576},25,[168,578,258],{"emptyLinePlaceholder":257},[168,580,582],{"class":170,"line":581},26,[168,583,584],{"class":264},"// Listen for typing indicators\n",[168,586,588,590,592,594,597,600,603,606,608],{"class":170,"line":587},27,[168,589,458],{"class":231},[168,591,487],{"class":174},[168,593,290],{"class":231},[168,595,596],{"class":178},"'typing'",[168,598,599],{"class":231},", ({ ",[168,601,602],{"class":498},"users",[168,604,605],{"class":231}," }) ",[168,607,299],{"class":227},[168,609,507],{"class":231},[168,611,613,615,617,619,622,625,628,631,634,636,638,641,644,646,649],{"class":170,"line":612},28,[168,614,513],{"class":231},[168,616,516],{"class":174},[168,618,290],{"class":231},[168,620,621],{"class":178},"'Typing:'",[168,623,624],{"class":231},", users.",[168,626,627],{"class":174},"map",[168,629,630],{"class":231},"((",[168,632,633],{"class":498},"u",[168,635,502],{"class":231},[168,637,299],{"class":227},[168,639,640],{"class":231}," u.username).",[168,642,643],{"class":174},"join",[168,645,290],{"class":231},[168,647,648],{"class":178},"', '",[168,650,651],{"class":231},"))\n",[168,653,655],{"class":170,"line":654},29,[168,656,573],{"class":231},[168,658,660],{"class":170,"line":659},30,[168,661,258],{"emptyLinePlaceholder":257},[168,663,665],{"class":170,"line":664},31,[168,666,667],{"class":264},"// Trigger typing events\n",[168,669,671,673,676],{"class":170,"line":670},32,[168,672,458],{"class":231},[168,674,675],{"class":174},"startTyping",[168,677,678],{"class":231},"()\n",[168,680,682],{"class":170,"line":681},33,[168,683,684],{"class":264},"// ... user stops typing\n",[168,686,688,690,693],{"class":170,"line":687},34,[168,689,458],{"class":231},[168,691,692],{"class":174},"stopTyping",[168,694,678],{"class":231},[168,696,698],{"class":170,"line":697},35,[168,699,258],{"emptyLinePlaceholder":257},[168,701,703],{"class":170,"line":702},36,[168,704,705],{"class":264},"// Get online users in this room\n",[168,707,709,711,714,716,719,722],{"class":170,"line":708},37,[168,710,277],{"class":227},[168,712,713],{"class":280}," users",[168,715,284],{"class":227},[168,717,718],{"class":231}," room.",[168,720,721],{"class":174},"getUsers",[168,723,678],{"class":231},[168,725,727,730,732,734,737,739,742],{"class":170,"line":726},38,[168,728,729],{"class":231},"console.",[168,731,516],{"class":174},[168,733,290],{"class":231},[168,735,736],{"class":178},"'Online:'",[168,738,624],{"class":231},[168,740,741],{"class":280},"length",[168,743,441],{"class":231},[168,745,747],{"class":170,"line":746},39,[168,748,258],{"emptyLinePlaceholder":257},[168,750,752],{"class":170,"line":751},40,[168,753,754],{"class":264},"// Teardown: the wrapper releases its handlers and topics; the app closes the\n",[168,756,758],{"class":170,"line":757},41,[168,759,760],{"class":264},"// socket (never the other way around).\n",[168,762,764,767,770],{"class":170,"line":763},42,[168,765,766],{"class":231},"chat.",[168,768,769],{"class":174},"detach",[168,771,678],{"class":231},[168,773,775,778,781],{"class":170,"line":774},43,[168,776,777],{"class":231},"client.",[168,779,780],{"class":174},"disconnect",[168,782,678],{"class":231},[19,784,786],{"id":785},"api-reference","API Reference",[41,788,35],{"id":789},"nolagchat-1",[15,791,792],{},"The main class. Attaches to the injected core client, manages global user presence, and the room lifecycle.",[794,795,797],"h4",{"id":796},"constructor-options","Constructor Options",[104,799,800,813],{},[107,801,802],{},[110,803,804,807,810],{},[113,805,806],{},"Option",[113,808,809],{},"Type",[113,811,812],{},"Description",[123,814,815,834,850,864,879,896,911,929,946],{},[110,816,817,822,827],{},[128,818,819],{},[26,820,821],{},"client",[128,823,824],{},[26,825,826],{},"NoLagSocket",[128,828,829,833],{},[830,831,832],"strong",{},"Required."," The injected core NoLag client the app owns and connects.",[110,835,836,840,845],{},[128,837,838],{},[26,839,528],{},[128,841,842],{},[26,843,844],{},"string",[128,846,847,849],{},[830,848,832],{}," Display name for this user.",[110,851,852,857,861],{},[128,853,854],{},[26,855,856],{},"avatar",[128,858,859],{},[26,860,844],{},[128,862,863],{},"Optional avatar URL.",[110,865,866,871,876],{},[128,867,868],{},[26,869,870],{},"metadata",[128,872,873],{},[26,874,875],{},"Record\u003Cstring, unknown>",[128,877,878],{},"Optional custom user data attached to presence.",[110,880,881,885,889],{},[128,882,883],{},[26,884,195],{},[128,886,887],{},[26,888,844],{},[128,890,891,892,895],{},"NoLag app for topic prefixes (default ",[26,893,894],{},"'chat'",").",[110,897,898,903,908],{},[128,899,900],{},[26,901,902],{},"rooms",[128,904,905],{},[26,906,907],{},"string[]",[128,909,910],{},"Rooms to auto-join once the wrapper is ready.",[110,912,913,918,923],{},[128,914,915],{},[26,916,917],{},"typingTimeout",[128,919,920],{},[26,921,922],{},"number",[128,924,925,926,895],{},"Ms before a typing indicator auto-clears (default ",[26,927,928],{},"3000",[110,930,931,936,940],{},[128,932,933],{},[26,934,935],{},"maxMessageCache",[128,937,938],{},[26,939,922],{},[128,941,942,943,895],{},"Max messages kept in memory per room (default ",[26,944,945],{},"500",[110,947,948,953,958],{},[128,949,950],{},[26,951,952],{},"debug",[128,954,955],{},[26,956,957],{},"boolean",[128,959,960,961,895],{},"Enable wrapper debug logging (default ",[26,962,963],{},"false",[104,965,966,975],{},[107,967,968],{},[110,969,970,973],{},[113,971,972],{},"Method",[113,974,812],{},[123,976,977,987,996,1009,1019,1029,1046],{},[110,978,979,984],{},[128,980,981],{},[26,982,983],{},"ready()",[128,985,986],{},"Resolves once wrapper setup completed (identity, lobby, configured rooms)",[110,988,989,993],{},[128,990,991],{},[26,992,199],{},[128,994,995],{},"Release this wrapper's handlers and topics; terminal, never closes the socket",[110,997,998,1003],{},[128,999,1000],{},[26,1001,1002],{},"joinRoom(name)",[128,1004,1005,1006,1008],{},"Join a chat room; returns a ",[26,1007,85],{}," instance",[110,1010,1011,1016],{},[128,1012,1013],{},[26,1014,1015],{},"leaveRoom(name)",[128,1017,1018],{},"Leave a room and unsubscribe from its topics",[110,1020,1021,1026],{},[128,1022,1023],{},[26,1024,1025],{},"getOnlineUsers()",[128,1027,1028],{},"Return all users currently online across all rooms",[110,1030,1031,1036],{},[128,1032,1033],{},[26,1034,1035],{},"setStatus(status)",[128,1037,1038,1039,558,1042,1045],{},"Update your own presence status (e.g. ",[26,1040,1041],{},"'away'",[26,1043,1044],{},"'busy'",")",[110,1047,1048,1053],{},[128,1049,1050],{},[26,1051,1052],{},"updateProfile(profile)",[128,1054,1055],{},"Update display name, avatar, or other profile fields broadcast to peers",[41,1057,1059],{"id":1058},"events-nolagchat","Events: NoLagChat",[104,1061,1062,1074],{},[107,1063,1064],{},[110,1065,1066,1069,1072],{},[113,1067,1068],{},"Event",[113,1070,1071],{},"Payload",[113,1073,812],{},[123,1075,1076,1089,1104,1116,1131,1146,1160],{},[110,1077,1078,1083,1086],{},[128,1079,1080],{},[26,1081,1082],{},"connected",[128,1084,1085],{},"none",[128,1087,1088],{},"WebSocket connection established",[110,1090,1091,1096,1101],{},[128,1092,1093],{},[26,1094,1095],{},"disconnected",[128,1097,1098],{},[26,1099,1100],{},"reason: string",[128,1102,1103],{},"Connection closed",[110,1105,1106,1111,1113],{},[128,1107,1108],{},[26,1109,1110],{},"reconnected",[128,1112,1085],{},[128,1114,1115],{},"Reconnection successful; rooms are restored automatically",[110,1117,1118,1123,1128],{},[128,1119,1120],{},[26,1121,1122],{},"error",[128,1124,1125],{},[26,1126,1127],{},"error: Error",[128,1129,1130],{},"Unrecoverable error occurred",[110,1132,1133,1138,1143],{},[128,1134,1135],{},[26,1136,1137],{},"userOnline",[128,1139,1140],{},[26,1141,1142],{},"user: ChatUser",[128,1144,1145],{},"A user has come online in the lobby",[110,1147,1148,1153,1157],{},[128,1149,1150],{},[26,1151,1152],{},"userOffline",[128,1154,1155],{},[26,1156,1142],{},[128,1158,1159],{},"A user has gone offline",[110,1161,1162,1167,1171],{},[128,1163,1164],{},[26,1165,1166],{},"userUpdated",[128,1168,1169],{},[26,1170,1142],{},[128,1172,1173],{},"A user updated their profile or status",[41,1175,85],{"id":1176},"chatroom",[15,1178,1179,1180,1182],{},"Returned by ",[26,1181,81],{},". Scoped to a single room; handles messaging, typing, and per-room presence.",[104,1184,1185,1193],{},[107,1186,1187],{},[110,1188,1189,1191],{},[113,1190,972],{},[113,1192,812],{},[123,1194,1195,1205,1215,1225,1235,1245],{},[110,1196,1197,1202],{},[128,1198,1199],{},[26,1200,1201],{},"sendMessage(text)",[128,1203,1204],{},"Publish a chat message to the room",[110,1206,1207,1212],{},[128,1208,1209],{},[26,1210,1211],{},"getMessages()",[128,1213,1214],{},"Return all messages currently in the local store (including replayed history)",[110,1216,1217,1222],{},[128,1218,1219],{},[26,1220,1221],{},"startTyping()",[128,1223,1224],{},"Broadcast a typing-start signal to other room members",[110,1226,1227,1232],{},[128,1228,1229],{},[26,1230,1231],{},"stopTyping()",[128,1233,1234],{},"Broadcast a typing-stop signal",[110,1236,1237,1242],{},[128,1238,1239],{},[26,1240,1241],{},"getUsers()",[128,1243,1244],{},"Return users currently present in this room",[110,1246,1247,1252],{},[128,1248,1249],{},[26,1250,1251],{},"markRead()",[128,1253,1254],{},"Mark all messages in this room as read, resetting the unread count",[41,1256,1258],{"id":1257},"events-chatroom","Events: ChatRoom",[104,1260,1261,1271],{},[107,1262,1263],{},[110,1264,1265,1267,1269],{},[113,1266,1068],{},[113,1268,1071],{},[113,1270,812],{},[123,1272,1273,1288,1302,1317,1331,1346,1361,1376],{},[110,1274,1275,1280,1285],{},[128,1276,1277],{},[26,1278,1279],{},"message",[128,1281,1282],{},[26,1283,1284],{},"ChatMessage",[128,1286,1287],{},"Incoming message from another user",[110,1289,1290,1295,1299],{},[128,1291,1292],{},[26,1293,1294],{},"messageSent",[128,1296,1297],{},[26,1298,1284],{},[128,1300,1301],{},"Confirmation that your own message was delivered",[110,1303,1304,1309,1314],{},[128,1305,1306],{},[26,1307,1308],{},"userJoined",[128,1310,1311],{},[26,1312,1313],{},"ChatUser",[128,1315,1316],{},"A user joined this room",[110,1318,1319,1324,1328],{},[128,1320,1321],{},[26,1322,1323],{},"userLeft",[128,1325,1326],{},[26,1327,1313],{},[128,1329,1330],{},"A user left this room",[110,1332,1333,1338,1343],{},[128,1334,1335],{},[26,1336,1337],{},"typing",[128,1339,1340],{},[26,1341,1342],{},"{ user: ChatUser, isTyping: boolean }",[128,1344,1345],{},"A user started or stopped typing",[110,1347,1348,1353,1358],{},[128,1349,1350],{},[26,1351,1352],{},"replayStart",[128,1354,1355],{},[26,1356,1357],{},"{ count: number }",[128,1359,1360],{},"Historical message replay is beginning",[110,1362,1363,1368,1373],{},[128,1364,1365],{},[26,1366,1367],{},"replayEnd",[128,1369,1370],{},[26,1371,1372],{},"{ replayed: number }",[128,1374,1375],{},"Historical message replay is complete",[110,1377,1378,1383,1387],{},[128,1379,1380],{},[26,1381,1382],{},"unreadChanged",[128,1384,1385],{},[26,1386,1357],{},[128,1388,1389],{},"The unread message count for this room changed",[1391,1392,1393],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":164,"searchDepth":241,"depth":241,"links":1395},[1396,1399,1400,1401,1402],{"id":21,"depth":241,"text":22,"children":1397},[1398],{"id":43,"depth":254,"text":44},{"id":69,"depth":241,"text":70},{"id":152,"depth":241,"text":153},{"id":211,"depth":241,"text":212},{"id":785,"depth":241,"text":786,"children":1403},[1404,1405,1406,1407],{"id":789,"depth":254,"text":35},{"id":1058,"depth":254,"text":1059},{"id":1176,"depth":254,"text":85},{"id":1257,"depth":254,"text":1258},"md",{},"/docs/high-level-sdks/chat",{"title":5,"description":17},"docs/high-level-sdks/chat","dsEsWGnL8SIDOxDXUM5wWBQP30yxNVGBORahl8heFpk",1788160343643]