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