[{"data":1,"prerenderedAt":5212},["ShallowReactive",2],{"docs:/docs/sdks/javascript":3},{"id":4,"title":5,"body":6,"description":5205,"extension":5206,"meta":5207,"navigation":64,"path":5208,"seo":5209,"stem":5210,"__hash__":5211},"docs/docs/sdks/javascript.md","JavaScript SDK",{"type":7,"value":8,"toc":5179},"minimark",[9,13,17,22,104,108,316,320,329,447,462,465,469,690,694,812,816,1228,1232,1440,1444,1709,1713,1943,1947,1950,2291,2295,2298,2588,2604,2608,2611,2788,2792,2872,2876,2879,3030,3035,3038,3235,3243,3247,3358,3362,3365,3459,3463,3466,3985,3989,3992,4223,4227,4479,4483,4633,4637,5135,5139,5175],[10,11,5],"h1",{"id":12},"javascript-sdk",[14,15,16],"p",{},"The official NoLag SDK for JavaScript and TypeScript. Full TypeScript support\nwith comprehensive type definitions.",[18,19,21],"h2",{"id":20},"installation","Installation",[23,24,25],"code-tabs",{},[26,27,33],"pre",{"className":28,"code":29,"filename":30,"language":31,"meta":32,"style":32},"language-bash shiki shiki-themes github-light github-dark","# npm\nnpm install @nolag/js-sdk\n\n# yarn\nyarn add @nolag/js-sdk\n\n# pnpm\npnpm add @nolag/js-sdk\n","Terminal","bash","",[34,35,36,45,59,66,72,83,88,94],"code",{"__ignoreMap":32},[37,38,41],"span",{"class":39,"line":40},"line",1,[37,42,44],{"class":43},"sJ8bj","# npm\n",[37,46,48,52,56],{"class":39,"line":47},2,[37,49,51],{"class":50},"sScJk","npm",[37,53,55],{"class":54},"sZZnC"," install",[37,57,58],{"class":54}," @nolag/js-sdk\n",[37,60,62],{"class":39,"line":61},3,[37,63,65],{"emptyLinePlaceholder":64},true,"\n",[37,67,69],{"class":39,"line":68},4,[37,70,71],{"class":43},"# yarn\n",[37,73,75,78,81],{"class":39,"line":74},5,[37,76,77],{"class":50},"yarn",[37,79,80],{"class":54}," add",[37,82,58],{"class":54},[37,84,86],{"class":39,"line":85},6,[37,87,65],{"emptyLinePlaceholder":64},[37,89,91],{"class":39,"line":90},7,[37,92,93],{"class":43},"# pnpm\n",[37,95,97,100,102],{"class":39,"line":96},8,[37,98,99],{"class":50},"pnpm",[37,101,80],{"class":54},[37,103,58],{"class":54},[18,105,107],{"id":106},"quick-start","Quick Start",[23,109,110],{},[26,111,116],{"className":112,"code":113,"filename":114,"language":115,"meta":32,"style":32},"language-typescript shiki shiki-themes github-light github-dark","import { NoLag } from '@nolag/js-sdk'\n\n// Create client with access token\nconst client = NoLag('your-access-token')\n\n// Connect to NoLag\nawait client.connect()\n\n// Subscribe to a topic\nclient.subscribe('chat/room-1')\n\n// Listen for messages\nclient.on('chat/room-1', (data, meta) => {\n  console.log('Received:', data)\n})\n\n// Publish a message\nclient.emit('chat/room-1', { text: 'Hello!' })\n","TypeScript","typescript",[34,117,118,134,138,143,167,171,176,190,194,200,216,221,227,261,278,284,289,295],{"__ignoreMap":32},[37,119,120,124,128,131],{"class":39,"line":40},[37,121,123],{"class":122},"szBVR","import",[37,125,127],{"class":126},"sVt8B"," { NoLag } ",[37,129,130],{"class":122},"from",[37,132,133],{"class":54}," '@nolag/js-sdk'\n",[37,135,136],{"class":39,"line":47},[37,137,65],{"emptyLinePlaceholder":64},[37,139,140],{"class":39,"line":61},[37,141,142],{"class":43},"// Create client with access token\n",[37,144,145,148,152,155,158,161,164],{"class":39,"line":68},[37,146,147],{"class":122},"const",[37,149,151],{"class":150},"sj4cs"," client",[37,153,154],{"class":122}," =",[37,156,157],{"class":50}," NoLag",[37,159,160],{"class":126},"(",[37,162,163],{"class":54},"'your-access-token'",[37,165,166],{"class":126},")\n",[37,168,169],{"class":39,"line":74},[37,170,65],{"emptyLinePlaceholder":64},[37,172,173],{"class":39,"line":85},[37,174,175],{"class":43},"// Connect to NoLag\n",[37,177,178,181,184,187],{"class":39,"line":90},[37,179,180],{"class":122},"await",[37,182,183],{"class":126}," client.",[37,185,186],{"class":50},"connect",[37,188,189],{"class":126},"()\n",[37,191,192],{"class":39,"line":96},[37,193,65],{"emptyLinePlaceholder":64},[37,195,197],{"class":39,"line":196},9,[37,198,199],{"class":43},"// Subscribe to a topic\n",[37,201,203,206,209,211,214],{"class":39,"line":202},10,[37,204,205],{"class":126},"client.",[37,207,208],{"class":50},"subscribe",[37,210,160],{"class":126},[37,212,213],{"class":54},"'chat/room-1'",[37,215,166],{"class":126},[37,217,219],{"class":39,"line":218},11,[37,220,65],{"emptyLinePlaceholder":64},[37,222,224],{"class":39,"line":223},12,[37,225,226],{"class":43},"// Listen for messages\n",[37,228,230,232,235,237,239,242,246,249,252,255,258],{"class":39,"line":229},13,[37,231,205],{"class":126},[37,233,234],{"class":50},"on",[37,236,160],{"class":126},[37,238,213],{"class":54},[37,240,241],{"class":126},", (",[37,243,245],{"class":244},"s4XuR","data",[37,247,248],{"class":126},", ",[37,250,251],{"class":244},"meta",[37,253,254],{"class":126},") ",[37,256,257],{"class":122},"=>",[37,259,260],{"class":126}," {\n",[37,262,264,267,270,272,275],{"class":39,"line":263},14,[37,265,266],{"class":126},"  console.",[37,268,269],{"class":50},"log",[37,271,160],{"class":126},[37,273,274],{"class":54},"'Received:'",[37,276,277],{"class":126},", data)\n",[37,279,281],{"class":39,"line":280},15,[37,282,283],{"class":126},"})\n",[37,285,287],{"class":39,"line":286},16,[37,288,65],{"emptyLinePlaceholder":64},[37,290,292],{"class":39,"line":291},17,[37,293,294],{"class":43},"// Publish a message\n",[37,296,298,300,303,305,307,310,313],{"class":39,"line":297},18,[37,299,205],{"class":126},[37,301,302],{"class":50},"emit",[37,304,160],{"class":126},[37,306,213],{"class":54},[37,308,309],{"class":126},", { text: ",[37,311,312],{"class":54},"'Hello!'",[37,314,315],{"class":126}," })\n",[18,317,319],{"id":318},"browser-authentication-token-provider","Browser Authentication (Token Provider)",[14,321,322,323,328],{},"In a browser, pass an async token provider instead of an access token string. The SDK calls it on every connect and reconnect, so each attempt authenticates with a fresh short-lived ",[324,325,327],"a",{"href":326},"/docs/client-tokens","client token"," minted by your backend:",[23,330,331],{},[26,332,334],{"className":112,"code":333,"filename":114,"language":115,"meta":32,"style":32},"import { NoLag } from '@nolag/js-sdk'\n\nconst client = NoLag(async () => {\n  const res = await fetch('/api/nolag-token')\n  const { token } = await res.json()\n  return token\n})\n\nawait client.connect()\n",[34,335,336,346,350,372,395,421,429,433,437],{"__ignoreMap":32},[37,337,338,340,342,344],{"class":39,"line":40},[37,339,123],{"class":122},[37,341,127],{"class":126},[37,343,130],{"class":122},[37,345,133],{"class":54},[37,347,348],{"class":39,"line":47},[37,349,65],{"emptyLinePlaceholder":64},[37,351,352,354,356,358,360,362,365,368,370],{"class":39,"line":61},[37,353,147],{"class":122},[37,355,151],{"class":150},[37,357,154],{"class":122},[37,359,157],{"class":50},[37,361,160],{"class":126},[37,363,364],{"class":122},"async",[37,366,367],{"class":126}," () ",[37,369,257],{"class":122},[37,371,260],{"class":126},[37,373,374,377,380,382,385,388,390,393],{"class":39,"line":68},[37,375,376],{"class":122},"  const",[37,378,379],{"class":150}," res",[37,381,154],{"class":122},[37,383,384],{"class":122}," await",[37,386,387],{"class":50}," fetch",[37,389,160],{"class":126},[37,391,392],{"class":54},"'/api/nolag-token'",[37,394,166],{"class":126},[37,396,397,399,402,405,408,411,413,416,419],{"class":39,"line":74},[37,398,376],{"class":122},[37,400,401],{"class":126}," { ",[37,403,404],{"class":150},"token",[37,406,407],{"class":126}," } ",[37,409,410],{"class":122},"=",[37,412,384],{"class":122},[37,414,415],{"class":126}," res.",[37,417,418],{"class":50},"json",[37,420,189],{"class":126},[37,422,423,426],{"class":39,"line":85},[37,424,425],{"class":122},"  return",[37,427,428],{"class":126}," token\n",[37,430,431],{"class":39,"line":90},[37,432,283],{"class":126},[37,434,435],{"class":39,"line":96},[37,436,65],{"emptyLinePlaceholder":64},[37,438,439,441,443,445],{"class":39,"line":196},[37,440,180],{"class":122},[37,442,183],{"class":126},[37,444,186],{"class":50},[37,446,189],{"class":126},[14,448,449,450,453,454,457,458,461],{},"Import from ",[34,451,452],{},"@nolag/js-sdk",", the same entry point you use on the server. The package\ndeclares a ",[34,455,456],{},"browser"," export condition, so bundlers such as Vite, webpack, Next.js,\nand Rollup resolve the browser build automatically. There is no ",[34,459,460],{},"@nolag/js-sdk/browser","\nsubpath to import.",[14,463,464],{},"When the resolved token is a JWT, the SDK renews it in place shortly before expiry: a fresh token is minted by your provider and applied over the live connection, so nothing disconnects and token rotation is invisible to your application code. Older brokers fall back to a quick reconnect with server-side subscription restore.",[18,466,468],{"id":467},"connection-options","Connection Options",[23,470,471],{},[26,472,474],{"className":112,"code":473,"filename":114,"language":115,"meta":32,"style":32},"const client = NoLag('your-access-token', {\n  // Connection\n  url: 'wss://broker.nolag.app/ws',  // WebSocket URL (default)\n  reconnect: true,                    // Auto-reconnect (default: true)\n  reconnectInterval: 5000,            // Initial reconnect delay ms (default: 5000)\n\n  // Messaging\n  qos: 1,                             // Default QoS level: 0, 1, or 2 (default: 1)\n\n  // Load Balancing\n  loadBalance: false,                 // Enable load balancing (default: false)\n  loadBalanceGroup: 'worker-pool',    // Load balance group name\n\n  // Worker identity (agent and orchestrator actors only)\n  clientId: 'worker-1',               // Names this client instance\n\n  // Browser-specific\n  disconnectOnHidden: false,          // Disconnect when tab hidden (default: false)\n  heartbeatInterval: 30000,           // Heartbeat interval ms (default: 30000)\n\n  // Debugging\n  debug: false,                       // Enable debug logging (default: false)\n})\n",[34,475,476,493,498,512,526,540,544,549,563,567,572,586,600,604,609,623,627,632,645,660,665,671,685],{"__ignoreMap":32},[37,477,478,480,482,484,486,488,490],{"class":39,"line":40},[37,479,147],{"class":122},[37,481,151],{"class":150},[37,483,154],{"class":122},[37,485,157],{"class":50},[37,487,160],{"class":126},[37,489,163],{"class":54},[37,491,492],{"class":126},", {\n",[37,494,495],{"class":39,"line":47},[37,496,497],{"class":43},"  // Connection\n",[37,499,500,503,506,509],{"class":39,"line":61},[37,501,502],{"class":126},"  url: ",[37,504,505],{"class":54},"'wss://broker.nolag.app/ws'",[37,507,508],{"class":126},",  ",[37,510,511],{"class":43},"// WebSocket URL (default)\n",[37,513,514,517,520,523],{"class":39,"line":68},[37,515,516],{"class":126},"  reconnect: ",[37,518,519],{"class":150},"true",[37,521,522],{"class":126},",                    ",[37,524,525],{"class":43},"// Auto-reconnect (default: true)\n",[37,527,528,531,534,537],{"class":39,"line":74},[37,529,530],{"class":126},"  reconnectInterval: ",[37,532,533],{"class":150},"5000",[37,535,536],{"class":126},",            ",[37,538,539],{"class":43},"// Initial reconnect delay ms (default: 5000)\n",[37,541,542],{"class":39,"line":85},[37,543,65],{"emptyLinePlaceholder":64},[37,545,546],{"class":39,"line":90},[37,547,548],{"class":43},"  // Messaging\n",[37,550,551,554,557,560],{"class":39,"line":96},[37,552,553],{"class":126},"  qos: ",[37,555,556],{"class":150},"1",[37,558,559],{"class":126},",                             ",[37,561,562],{"class":43},"// Default QoS level: 0, 1, or 2 (default: 1)\n",[37,564,565],{"class":39,"line":196},[37,566,65],{"emptyLinePlaceholder":64},[37,568,569],{"class":39,"line":202},[37,570,571],{"class":43},"  // Load Balancing\n",[37,573,574,577,580,583],{"class":39,"line":218},[37,575,576],{"class":126},"  loadBalance: ",[37,578,579],{"class":150},"false",[37,581,582],{"class":126},",                 ",[37,584,585],{"class":43},"// Enable load balancing (default: false)\n",[37,587,588,591,594,597],{"class":39,"line":223},[37,589,590],{"class":126},"  loadBalanceGroup: ",[37,592,593],{"class":54},"'worker-pool'",[37,595,596],{"class":126},",    ",[37,598,599],{"class":43},"// Load balance group name\n",[37,601,602],{"class":39,"line":229},[37,603,65],{"emptyLinePlaceholder":64},[37,605,606],{"class":39,"line":263},[37,607,608],{"class":43},"  // Worker identity (agent and orchestrator actors only)\n",[37,610,611,614,617,620],{"class":39,"line":280},[37,612,613],{"class":126},"  clientId: ",[37,615,616],{"class":54},"'worker-1'",[37,618,619],{"class":126},",               ",[37,621,622],{"class":43},"// Names this client instance\n",[37,624,625],{"class":39,"line":286},[37,626,65],{"emptyLinePlaceholder":64},[37,628,629],{"class":39,"line":291},[37,630,631],{"class":43},"  // Browser-specific\n",[37,633,634,637,639,642],{"class":39,"line":297},[37,635,636],{"class":126},"  disconnectOnHidden: ",[37,638,579],{"class":150},[37,640,641],{"class":126},",          ",[37,643,644],{"class":43},"// Disconnect when tab hidden (default: false)\n",[37,646,648,651,654,657],{"class":39,"line":647},19,[37,649,650],{"class":126},"  heartbeatInterval: ",[37,652,653],{"class":150},"30000",[37,655,656],{"class":126},",           ",[37,658,659],{"class":43},"// Heartbeat interval ms (default: 30000)\n",[37,661,663],{"class":39,"line":662},20,[37,664,65],{"emptyLinePlaceholder":64},[37,666,668],{"class":39,"line":667},21,[37,669,670],{"class":43},"  // Debugging\n",[37,672,674,677,679,682],{"class":39,"line":673},22,[37,675,676],{"class":126},"  debug: ",[37,678,579],{"class":150},[37,680,681],{"class":126},",                       ",[37,683,684],{"class":43},"// Enable debug logging (default: false)\n",[37,686,688],{"class":39,"line":687},23,[37,689,283],{"class":126},[18,691,693],{"id":692},"connection-management","Connection Management",[23,695,696],{},[26,697,699],{"className":112,"code":698,"filename":114,"language":115,"meta":32,"style":32},"// Connect to NoLag\nawait client.connect()\n\n// Check connection status\nconsole.log(client.status)     // 'disconnected' | 'connecting' | 'connected' | 'reconnecting'\nconsole.log(client.connected)  // true or false\n\n// Disconnect (prevents auto-reconnect)\nclient.disconnect()\n\n// Access client info (available after connect)\nconsole.log(client.actorId)    // Your actor token ID\nconsole.log(client.actorType)  // 'device' | 'user' | 'server'\nconsole.log(client.projectId)  // Project ID\n",[34,700,701,705,715,719,724,737,749,753,758,767,771,776,788,800],{"__ignoreMap":32},[37,702,703],{"class":39,"line":40},[37,704,175],{"class":43},[37,706,707,709,711,713],{"class":39,"line":47},[37,708,180],{"class":122},[37,710,183],{"class":126},[37,712,186],{"class":50},[37,714,189],{"class":126},[37,716,717],{"class":39,"line":61},[37,718,65],{"emptyLinePlaceholder":64},[37,720,721],{"class":39,"line":68},[37,722,723],{"class":43},"// Check connection status\n",[37,725,726,729,731,734],{"class":39,"line":74},[37,727,728],{"class":126},"console.",[37,730,269],{"class":50},[37,732,733],{"class":126},"(client.status)     ",[37,735,736],{"class":43},"// 'disconnected' | 'connecting' | 'connected' | 'reconnecting'\n",[37,738,739,741,743,746],{"class":39,"line":85},[37,740,728],{"class":126},[37,742,269],{"class":50},[37,744,745],{"class":126},"(client.connected)  ",[37,747,748],{"class":43},"// true or false\n",[37,750,751],{"class":39,"line":90},[37,752,65],{"emptyLinePlaceholder":64},[37,754,755],{"class":39,"line":96},[37,756,757],{"class":43},"// Disconnect (prevents auto-reconnect)\n",[37,759,760,762,765],{"class":39,"line":196},[37,761,205],{"class":126},[37,763,764],{"class":50},"disconnect",[37,766,189],{"class":126},[37,768,769],{"class":39,"line":202},[37,770,65],{"emptyLinePlaceholder":64},[37,772,773],{"class":39,"line":218},[37,774,775],{"class":43},"// Access client info (available after connect)\n",[37,777,778,780,782,785],{"class":39,"line":223},[37,779,728],{"class":126},[37,781,269],{"class":50},[37,783,784],{"class":126},"(client.actorId)    ",[37,786,787],{"class":43},"// Your actor token ID\n",[37,789,790,792,794,797],{"class":39,"line":229},[37,791,728],{"class":126},[37,793,269],{"class":50},[37,795,796],{"class":126},"(client.actorType)  ",[37,798,799],{"class":43},"// 'device' | 'user' | 'server'\n",[37,801,802,804,806,809],{"class":39,"line":263},[37,803,728],{"class":126},[37,805,269],{"class":50},[37,807,808],{"class":126},"(client.projectId)  ",[37,810,811],{"class":43},"// Project ID\n",[18,813,815],{"id":814},"client-events","Client Events",[23,817,818],{},[26,819,821],{"className":112,"code":820,"filename":114,"language":115,"meta":32,"style":32},"// Connection established\nclient.on('connect', () => {\n  console.log('Connected to NoLag')\n})\n\n// Connection lost\nclient.on('disconnect', (reason) => {\n  console.log('Disconnected:', reason)\n})\n\n// Reconnection starting\nclient.on('reconnect', () => {\n  console.log('Attempting to reconnect...')\n})\n\n// Error occurred\nclient.on('error', (error) => {\n  console.error('Error:', error)\n})\n\n// Replay events: fired when missed messages are replayed on reconnect\nclient.on('replay:start', (event) => {\n  // event: { count, oldestTimestamp?, newestTimestamp? }\n  console.log(`Replaying ${event.count} missed messages...`)\n})\n\nclient.on('replay:end', (event) => {\n  // event: { replayed }\n  console.log(`Replay complete: ${event.replayed} messages`)\n})\n\n// During replay, individual messages have meta.isReplay = true\nclient.on('chat/room-1', (data, meta) => {\n  if (meta.isReplay) {\n    console.log('Replayed message:', data)\n  } else {\n    console.log('Live message:', data)\n  }\n})\n",[34,822,823,828,846,859,863,867,872,894,908,912,916,921,938,951,955,959,964,986,1000,1004,1008,1013,1035,1040,1065,1070,1075,1097,1103,1127,1132,1137,1143,1168,1177,1192,1203,1217,1223],{"__ignoreMap":32},[37,824,825],{"class":39,"line":40},[37,826,827],{"class":43},"// Connection established\n",[37,829,830,832,834,836,839,842,844],{"class":39,"line":47},[37,831,205],{"class":126},[37,833,234],{"class":50},[37,835,160],{"class":126},[37,837,838],{"class":54},"'connect'",[37,840,841],{"class":126},", () ",[37,843,257],{"class":122},[37,845,260],{"class":126},[37,847,848,850,852,854,857],{"class":39,"line":61},[37,849,266],{"class":126},[37,851,269],{"class":50},[37,853,160],{"class":126},[37,855,856],{"class":54},"'Connected to NoLag'",[37,858,166],{"class":126},[37,860,861],{"class":39,"line":68},[37,862,283],{"class":126},[37,864,865],{"class":39,"line":74},[37,866,65],{"emptyLinePlaceholder":64},[37,868,869],{"class":39,"line":85},[37,870,871],{"class":43},"// Connection lost\n",[37,873,874,876,878,880,883,885,888,890,892],{"class":39,"line":90},[37,875,205],{"class":126},[37,877,234],{"class":50},[37,879,160],{"class":126},[37,881,882],{"class":54},"'disconnect'",[37,884,241],{"class":126},[37,886,887],{"class":244},"reason",[37,889,254],{"class":126},[37,891,257],{"class":122},[37,893,260],{"class":126},[37,895,896,898,900,902,905],{"class":39,"line":96},[37,897,266],{"class":126},[37,899,269],{"class":50},[37,901,160],{"class":126},[37,903,904],{"class":54},"'Disconnected:'",[37,906,907],{"class":126},", reason)\n",[37,909,910],{"class":39,"line":196},[37,911,283],{"class":126},[37,913,914],{"class":39,"line":202},[37,915,65],{"emptyLinePlaceholder":64},[37,917,918],{"class":39,"line":218},[37,919,920],{"class":43},"// Reconnection starting\n",[37,922,923,925,927,929,932,934,936],{"class":39,"line":223},[37,924,205],{"class":126},[37,926,234],{"class":50},[37,928,160],{"class":126},[37,930,931],{"class":54},"'reconnect'",[37,933,841],{"class":126},[37,935,257],{"class":122},[37,937,260],{"class":126},[37,939,940,942,944,946,949],{"class":39,"line":229},[37,941,266],{"class":126},[37,943,269],{"class":50},[37,945,160],{"class":126},[37,947,948],{"class":54},"'Attempting to reconnect...'",[37,950,166],{"class":126},[37,952,953],{"class":39,"line":263},[37,954,283],{"class":126},[37,956,957],{"class":39,"line":280},[37,958,65],{"emptyLinePlaceholder":64},[37,960,961],{"class":39,"line":286},[37,962,963],{"class":43},"// Error occurred\n",[37,965,966,968,970,972,975,977,980,982,984],{"class":39,"line":291},[37,967,205],{"class":126},[37,969,234],{"class":50},[37,971,160],{"class":126},[37,973,974],{"class":54},"'error'",[37,976,241],{"class":126},[37,978,979],{"class":244},"error",[37,981,254],{"class":126},[37,983,257],{"class":122},[37,985,260],{"class":126},[37,987,988,990,992,994,997],{"class":39,"line":297},[37,989,266],{"class":126},[37,991,979],{"class":50},[37,993,160],{"class":126},[37,995,996],{"class":54},"'Error:'",[37,998,999],{"class":126},", error)\n",[37,1001,1002],{"class":39,"line":647},[37,1003,283],{"class":126},[37,1005,1006],{"class":39,"line":662},[37,1007,65],{"emptyLinePlaceholder":64},[37,1009,1010],{"class":39,"line":667},[37,1011,1012],{"class":43},"// Replay events: fired when missed messages are replayed on reconnect\n",[37,1014,1015,1017,1019,1021,1024,1026,1029,1031,1033],{"class":39,"line":673},[37,1016,205],{"class":126},[37,1018,234],{"class":50},[37,1020,160],{"class":126},[37,1022,1023],{"class":54},"'replay:start'",[37,1025,241],{"class":126},[37,1027,1028],{"class":244},"event",[37,1030,254],{"class":126},[37,1032,257],{"class":122},[37,1034,260],{"class":126},[37,1036,1037],{"class":39,"line":687},[37,1038,1039],{"class":43},"  // event: { count, oldestTimestamp?, newestTimestamp? }\n",[37,1041,1043,1045,1047,1049,1052,1054,1057,1060,1063],{"class":39,"line":1042},24,[37,1044,266],{"class":126},[37,1046,269],{"class":50},[37,1048,160],{"class":126},[37,1050,1051],{"class":54},"`Replaying ${",[37,1053,1028],{"class":126},[37,1055,1056],{"class":54},".",[37,1058,1059],{"class":126},"count",[37,1061,1062],{"class":54},"} missed messages...`",[37,1064,166],{"class":126},[37,1066,1068],{"class":39,"line":1067},25,[37,1069,283],{"class":126},[37,1071,1073],{"class":39,"line":1072},26,[37,1074,65],{"emptyLinePlaceholder":64},[37,1076,1078,1080,1082,1084,1087,1089,1091,1093,1095],{"class":39,"line":1077},27,[37,1079,205],{"class":126},[37,1081,234],{"class":50},[37,1083,160],{"class":126},[37,1085,1086],{"class":54},"'replay:end'",[37,1088,241],{"class":126},[37,1090,1028],{"class":244},[37,1092,254],{"class":126},[37,1094,257],{"class":122},[37,1096,260],{"class":126},[37,1098,1100],{"class":39,"line":1099},28,[37,1101,1102],{"class":43},"  // event: { replayed }\n",[37,1104,1106,1108,1110,1112,1115,1117,1119,1122,1125],{"class":39,"line":1105},29,[37,1107,266],{"class":126},[37,1109,269],{"class":50},[37,1111,160],{"class":126},[37,1113,1114],{"class":54},"`Replay complete: ${",[37,1116,1028],{"class":126},[37,1118,1056],{"class":54},[37,1120,1121],{"class":126},"replayed",[37,1123,1124],{"class":54},"} messages`",[37,1126,166],{"class":126},[37,1128,1130],{"class":39,"line":1129},30,[37,1131,283],{"class":126},[37,1133,1135],{"class":39,"line":1134},31,[37,1136,65],{"emptyLinePlaceholder":64},[37,1138,1140],{"class":39,"line":1139},32,[37,1141,1142],{"class":43},"// During replay, individual messages have meta.isReplay = true\n",[37,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166],{"class":39,"line":1145},33,[37,1147,205],{"class":126},[37,1149,234],{"class":50},[37,1151,160],{"class":126},[37,1153,213],{"class":54},[37,1155,241],{"class":126},[37,1157,245],{"class":244},[37,1159,248],{"class":126},[37,1161,251],{"class":244},[37,1163,254],{"class":126},[37,1165,257],{"class":122},[37,1167,260],{"class":126},[37,1169,1171,1174],{"class":39,"line":1170},34,[37,1172,1173],{"class":122},"  if",[37,1175,1176],{"class":126}," (meta.isReplay) {\n",[37,1178,1180,1183,1185,1187,1190],{"class":39,"line":1179},35,[37,1181,1182],{"class":126},"    console.",[37,1184,269],{"class":50},[37,1186,160],{"class":126},[37,1188,1189],{"class":54},"'Replayed message:'",[37,1191,277],{"class":126},[37,1193,1195,1198,1201],{"class":39,"line":1194},36,[37,1196,1197],{"class":126},"  } ",[37,1199,1200],{"class":122},"else",[37,1202,260],{"class":126},[37,1204,1206,1208,1210,1212,1215],{"class":39,"line":1205},37,[37,1207,1182],{"class":126},[37,1209,269],{"class":50},[37,1211,160],{"class":126},[37,1213,1214],{"class":54},"'Live message:'",[37,1216,277],{"class":126},[37,1218,1220],{"class":39,"line":1219},38,[37,1221,1222],{"class":126},"  }\n",[37,1224,1226],{"class":39,"line":1225},39,[37,1227,283],{"class":126},[18,1229,1231],{"id":1230},"subscribing-to-topics","Subscribing to Topics",[23,1233,1234],{},[26,1235,1237],{"className":112,"code":1236,"filename":114,"language":115,"meta":32,"style":32},"// Basic subscription\nclient.subscribe('chat/room-1')\n\n// With options\nclient.subscribe('chat/room-1', {\n  qos: 2,                        // Override default QoS\n  loadBalance: true,             // Enable load balancing for this topic\n  loadBalanceGroup: 'workers',   // Specific load balance group\n})\n\n// With acknowledgment callback\nclient.subscribe('chat/room-1', (error) => {\n  if (error) {\n    console.error('Subscribe failed:', error)\n  } else {\n    console.log('Subscribed successfully')\n  }\n})\n\n// Wildcard subscriptions\nclient.subscribe('chat/+/messages')  // Single level (+)\nclient.subscribe('users/123/#')      // Multi level (#)\n",[34,1238,1239,1244,1256,1260,1265,1277,1290,1302,1315,1319,1323,1328,1348,1355,1368,1376,1389,1393,1397,1401,1406,1423],{"__ignoreMap":32},[37,1240,1241],{"class":39,"line":40},[37,1242,1243],{"class":43},"// Basic subscription\n",[37,1245,1246,1248,1250,1252,1254],{"class":39,"line":47},[37,1247,205],{"class":126},[37,1249,208],{"class":50},[37,1251,160],{"class":126},[37,1253,213],{"class":54},[37,1255,166],{"class":126},[37,1257,1258],{"class":39,"line":61},[37,1259,65],{"emptyLinePlaceholder":64},[37,1261,1262],{"class":39,"line":68},[37,1263,1264],{"class":43},"// With options\n",[37,1266,1267,1269,1271,1273,1275],{"class":39,"line":74},[37,1268,205],{"class":126},[37,1270,208],{"class":50},[37,1272,160],{"class":126},[37,1274,213],{"class":54},[37,1276,492],{"class":126},[37,1278,1279,1281,1284,1287],{"class":39,"line":85},[37,1280,553],{"class":126},[37,1282,1283],{"class":150},"2",[37,1285,1286],{"class":126},",                        ",[37,1288,1289],{"class":43},"// Override default QoS\n",[37,1291,1292,1294,1296,1299],{"class":39,"line":90},[37,1293,576],{"class":126},[37,1295,519],{"class":150},[37,1297,1298],{"class":126},",             ",[37,1300,1301],{"class":43},"// Enable load balancing for this topic\n",[37,1303,1304,1306,1309,1312],{"class":39,"line":96},[37,1305,590],{"class":126},[37,1307,1308],{"class":54},"'workers'",[37,1310,1311],{"class":126},",   ",[37,1313,1314],{"class":43},"// Specific load balance group\n",[37,1316,1317],{"class":39,"line":196},[37,1318,283],{"class":126},[37,1320,1321],{"class":39,"line":202},[37,1322,65],{"emptyLinePlaceholder":64},[37,1324,1325],{"class":39,"line":218},[37,1326,1327],{"class":43},"// With acknowledgment callback\n",[37,1329,1330,1332,1334,1336,1338,1340,1342,1344,1346],{"class":39,"line":223},[37,1331,205],{"class":126},[37,1333,208],{"class":50},[37,1335,160],{"class":126},[37,1337,213],{"class":54},[37,1339,241],{"class":126},[37,1341,979],{"class":244},[37,1343,254],{"class":126},[37,1345,257],{"class":122},[37,1347,260],{"class":126},[37,1349,1350,1352],{"class":39,"line":229},[37,1351,1173],{"class":122},[37,1353,1354],{"class":126}," (error) {\n",[37,1356,1357,1359,1361,1363,1366],{"class":39,"line":263},[37,1358,1182],{"class":126},[37,1360,979],{"class":50},[37,1362,160],{"class":126},[37,1364,1365],{"class":54},"'Subscribe failed:'",[37,1367,999],{"class":126},[37,1369,1370,1372,1374],{"class":39,"line":280},[37,1371,1197],{"class":126},[37,1373,1200],{"class":122},[37,1375,260],{"class":126},[37,1377,1378,1380,1382,1384,1387],{"class":39,"line":286},[37,1379,1182],{"class":126},[37,1381,269],{"class":50},[37,1383,160],{"class":126},[37,1385,1386],{"class":54},"'Subscribed successfully'",[37,1388,166],{"class":126},[37,1390,1391],{"class":39,"line":291},[37,1392,1222],{"class":126},[37,1394,1395],{"class":39,"line":297},[37,1396,283],{"class":126},[37,1398,1399],{"class":39,"line":647},[37,1400,65],{"emptyLinePlaceholder":64},[37,1402,1403],{"class":39,"line":662},[37,1404,1405],{"class":43},"// Wildcard subscriptions\n",[37,1407,1408,1410,1412,1414,1417,1420],{"class":39,"line":667},[37,1409,205],{"class":126},[37,1411,208],{"class":50},[37,1413,160],{"class":126},[37,1415,1416],{"class":54},"'chat/+/messages'",[37,1418,1419],{"class":126},")  ",[37,1421,1422],{"class":43},"// Single level (+)\n",[37,1424,1425,1427,1429,1431,1434,1437],{"class":39,"line":673},[37,1426,205],{"class":126},[37,1428,208],{"class":50},[37,1430,160],{"class":126},[37,1432,1433],{"class":54},"'users/123/#'",[37,1435,1436],{"class":126},")      ",[37,1438,1439],{"class":43},"// Multi level (#)\n",[18,1441,1443],{"id":1442},"listening-for-messages","Listening for Messages",[23,1445,1446],{},[26,1447,1449],{"className":112,"code":1448,"filename":114,"language":115,"meta":32,"style":32},"// Listen to a specific topic\nclient.on('chat/room-1', (data, meta) => {\n  console.log('Data:', data)\n  console.log('Message ID:', meta.msgId)     // Unique message ID\n  console.log('Is replay:', meta.isReplay)   // true if replayed from history\n  console.log('Filter:', meta.filter)        // Filter value (if published with one)\n})\n\n// Listen to all subscribed topics (wildcard handler)\nclient.onAny((topic: string, data: unknown, meta: MessageMeta) => {\n  console.log(`[${topic}]`, data, meta)\n})\n\n// Remove a specific handler\nconst handler = (data, meta) => console.log(data)\nclient.on('chat/room-1', handler)\nclient.off('chat/room-1', handler)\n\n// Remove all handlers for a topic\nclient.off('chat/room-1')\n",[34,1450,1451,1456,1480,1493,1510,1527,1544,1548,1552,1557,1600,1619,1623,1627,1632,1662,1675,1688,1692,1697],{"__ignoreMap":32},[37,1452,1453],{"class":39,"line":40},[37,1454,1455],{"class":43},"// Listen to a specific topic\n",[37,1457,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478],{"class":39,"line":47},[37,1459,205],{"class":126},[37,1461,234],{"class":50},[37,1463,160],{"class":126},[37,1465,213],{"class":54},[37,1467,241],{"class":126},[37,1469,245],{"class":244},[37,1471,248],{"class":126},[37,1473,251],{"class":244},[37,1475,254],{"class":126},[37,1477,257],{"class":122},[37,1479,260],{"class":126},[37,1481,1482,1484,1486,1488,1491],{"class":39,"line":61},[37,1483,266],{"class":126},[37,1485,269],{"class":50},[37,1487,160],{"class":126},[37,1489,1490],{"class":54},"'Data:'",[37,1492,277],{"class":126},[37,1494,1495,1497,1499,1501,1504,1507],{"class":39,"line":68},[37,1496,266],{"class":126},[37,1498,269],{"class":50},[37,1500,160],{"class":126},[37,1502,1503],{"class":54},"'Message ID:'",[37,1505,1506],{"class":126},", meta.msgId)     ",[37,1508,1509],{"class":43},"// Unique message ID\n",[37,1511,1512,1514,1516,1518,1521,1524],{"class":39,"line":74},[37,1513,266],{"class":126},[37,1515,269],{"class":50},[37,1517,160],{"class":126},[37,1519,1520],{"class":54},"'Is replay:'",[37,1522,1523],{"class":126},", meta.isReplay)   ",[37,1525,1526],{"class":43},"// true if replayed from history\n",[37,1528,1529,1531,1533,1535,1538,1541],{"class":39,"line":85},[37,1530,266],{"class":126},[37,1532,269],{"class":50},[37,1534,160],{"class":126},[37,1536,1537],{"class":54},"'Filter:'",[37,1539,1540],{"class":126},", meta.filter)        ",[37,1542,1543],{"class":43},"// Filter value (if published with one)\n",[37,1545,1546],{"class":39,"line":90},[37,1547,283],{"class":126},[37,1549,1550],{"class":39,"line":96},[37,1551,65],{"emptyLinePlaceholder":64},[37,1553,1554],{"class":39,"line":196},[37,1555,1556],{"class":43},"// Listen to all subscribed topics (wildcard handler)\n",[37,1558,1559,1561,1564,1567,1570,1573,1576,1578,1580,1582,1585,1587,1589,1591,1594,1596,1598],{"class":39,"line":202},[37,1560,205],{"class":126},[37,1562,1563],{"class":50},"onAny",[37,1565,1566],{"class":126},"((",[37,1568,1569],{"class":244},"topic",[37,1571,1572],{"class":122},":",[37,1574,1575],{"class":150}," string",[37,1577,248],{"class":126},[37,1579,245],{"class":244},[37,1581,1572],{"class":122},[37,1583,1584],{"class":150}," unknown",[37,1586,248],{"class":126},[37,1588,251],{"class":244},[37,1590,1572],{"class":122},[37,1592,1593],{"class":50}," MessageMeta",[37,1595,254],{"class":126},[37,1597,257],{"class":122},[37,1599,260],{"class":126},[37,1601,1602,1604,1606,1608,1611,1613,1616],{"class":39,"line":218},[37,1603,266],{"class":126},[37,1605,269],{"class":50},[37,1607,160],{"class":126},[37,1609,1610],{"class":54},"`[${",[37,1612,1569],{"class":126},[37,1614,1615],{"class":54},"}]`",[37,1617,1618],{"class":126},", data, meta)\n",[37,1620,1621],{"class":39,"line":223},[37,1622,283],{"class":126},[37,1624,1625],{"class":39,"line":229},[37,1626,65],{"emptyLinePlaceholder":64},[37,1628,1629],{"class":39,"line":263},[37,1630,1631],{"class":43},"// Remove a specific handler\n",[37,1633,1634,1636,1639,1641,1644,1646,1648,1650,1652,1654,1657,1659],{"class":39,"line":280},[37,1635,147],{"class":122},[37,1637,1638],{"class":50}," handler",[37,1640,154],{"class":122},[37,1642,1643],{"class":126}," (",[37,1645,245],{"class":244},[37,1647,248],{"class":126},[37,1649,251],{"class":244},[37,1651,254],{"class":126},[37,1653,257],{"class":122},[37,1655,1656],{"class":126}," console.",[37,1658,269],{"class":50},[37,1660,1661],{"class":126},"(data)\n",[37,1663,1664,1666,1668,1670,1672],{"class":39,"line":286},[37,1665,205],{"class":126},[37,1667,234],{"class":50},[37,1669,160],{"class":126},[37,1671,213],{"class":54},[37,1673,1674],{"class":126},", handler)\n",[37,1676,1677,1679,1682,1684,1686],{"class":39,"line":291},[37,1678,205],{"class":126},[37,1680,1681],{"class":50},"off",[37,1683,160],{"class":126},[37,1685,213],{"class":54},[37,1687,1674],{"class":126},[37,1689,1690],{"class":39,"line":297},[37,1691,65],{"emptyLinePlaceholder":64},[37,1693,1694],{"class":39,"line":647},[37,1695,1696],{"class":43},"// Remove all handlers for a topic\n",[37,1698,1699,1701,1703,1705,1707],{"class":39,"line":662},[37,1700,205],{"class":126},[37,1702,1681],{"class":50},[37,1704,160],{"class":126},[37,1706,213],{"class":54},[37,1708,166],{"class":126},[18,1710,1712],{"id":1711},"publishing-messages","Publishing Messages",[23,1714,1715],{},[26,1716,1718],{"className":112,"code":1717,"filename":114,"language":115,"meta":32,"style":32},"// Basic publish\nclient.emit('chat/room-1', { text: 'Hello!' })\n\n// With options\nclient.emit('chat/room-1', { text: 'Important' }, {\n  qos: 2,           // Override default QoS\n  echo: false,      // Don't receive your own message (default: true)\n  filter: 'room-1', // Route to subscribers with this filter\n})\n\n// With acknowledgment callback\nclient.emit('chat/room-1', { text: 'Hello' }, (error) => {\n  if (error) {\n    console.error('Publish failed:', error)\n  } else {\n    console.log('Message sent')\n  }\n})\n\n// With options and callback\nclient.emit('chat/room-1', { text: 'Hello' }, { qos: 2 }, (error) => {\n  if (error) console.error(error)\n})\n",[34,1719,1720,1725,1741,1745,1749,1767,1777,1790,1803,1807,1811,1815,1841,1847,1860,1868,1881,1885,1889,1893,1898,1927,1939],{"__ignoreMap":32},[37,1721,1722],{"class":39,"line":40},[37,1723,1724],{"class":43},"// Basic publish\n",[37,1726,1727,1729,1731,1733,1735,1737,1739],{"class":39,"line":47},[37,1728,205],{"class":126},[37,1730,302],{"class":50},[37,1732,160],{"class":126},[37,1734,213],{"class":54},[37,1736,309],{"class":126},[37,1738,312],{"class":54},[37,1740,315],{"class":126},[37,1742,1743],{"class":39,"line":61},[37,1744,65],{"emptyLinePlaceholder":64},[37,1746,1747],{"class":39,"line":68},[37,1748,1264],{"class":43},[37,1750,1751,1753,1755,1757,1759,1761,1764],{"class":39,"line":74},[37,1752,205],{"class":126},[37,1754,302],{"class":50},[37,1756,160],{"class":126},[37,1758,213],{"class":54},[37,1760,309],{"class":126},[37,1762,1763],{"class":54},"'Important'",[37,1765,1766],{"class":126}," }, {\n",[37,1768,1769,1771,1773,1775],{"class":39,"line":85},[37,1770,553],{"class":126},[37,1772,1283],{"class":150},[37,1774,656],{"class":126},[37,1776,1289],{"class":43},[37,1778,1779,1782,1784,1787],{"class":39,"line":90},[37,1780,1781],{"class":126},"  echo: ",[37,1783,579],{"class":150},[37,1785,1786],{"class":126},",      ",[37,1788,1789],{"class":43},"// Don't receive your own message (default: true)\n",[37,1791,1792,1795,1798,1800],{"class":39,"line":96},[37,1793,1794],{"class":126},"  filter: ",[37,1796,1797],{"class":54},"'room-1'",[37,1799,248],{"class":126},[37,1801,1802],{"class":43},"// Route to subscribers with this filter\n",[37,1804,1805],{"class":39,"line":196},[37,1806,283],{"class":126},[37,1808,1809],{"class":39,"line":202},[37,1810,65],{"emptyLinePlaceholder":64},[37,1812,1813],{"class":39,"line":218},[37,1814,1327],{"class":43},[37,1816,1817,1819,1821,1823,1825,1827,1830,1833,1835,1837,1839],{"class":39,"line":223},[37,1818,205],{"class":126},[37,1820,302],{"class":50},[37,1822,160],{"class":126},[37,1824,213],{"class":54},[37,1826,309],{"class":126},[37,1828,1829],{"class":54},"'Hello'",[37,1831,1832],{"class":126}," }, (",[37,1834,979],{"class":244},[37,1836,254],{"class":126},[37,1838,257],{"class":122},[37,1840,260],{"class":126},[37,1842,1843,1845],{"class":39,"line":229},[37,1844,1173],{"class":122},[37,1846,1354],{"class":126},[37,1848,1849,1851,1853,1855,1858],{"class":39,"line":263},[37,1850,1182],{"class":126},[37,1852,979],{"class":50},[37,1854,160],{"class":126},[37,1856,1857],{"class":54},"'Publish failed:'",[37,1859,999],{"class":126},[37,1861,1862,1864,1866],{"class":39,"line":280},[37,1863,1197],{"class":126},[37,1865,1200],{"class":122},[37,1867,260],{"class":126},[37,1869,1870,1872,1874,1876,1879],{"class":39,"line":286},[37,1871,1182],{"class":126},[37,1873,269],{"class":50},[37,1875,160],{"class":126},[37,1877,1878],{"class":54},"'Message sent'",[37,1880,166],{"class":126},[37,1882,1883],{"class":39,"line":291},[37,1884,1222],{"class":126},[37,1886,1887],{"class":39,"line":297},[37,1888,283],{"class":126},[37,1890,1891],{"class":39,"line":647},[37,1892,65],{"emptyLinePlaceholder":64},[37,1894,1895],{"class":39,"line":662},[37,1896,1897],{"class":43},"// With options and callback\n",[37,1899,1900,1902,1904,1906,1908,1910,1912,1915,1917,1919,1921,1923,1925],{"class":39,"line":667},[37,1901,205],{"class":126},[37,1903,302],{"class":50},[37,1905,160],{"class":126},[37,1907,213],{"class":54},[37,1909,309],{"class":126},[37,1911,1829],{"class":54},[37,1913,1914],{"class":126}," }, { qos: ",[37,1916,1283],{"class":150},[37,1918,1832],{"class":126},[37,1920,979],{"class":244},[37,1922,254],{"class":126},[37,1924,257],{"class":122},[37,1926,260],{"class":126},[37,1928,1929,1931,1934,1936],{"class":39,"line":673},[37,1930,1173],{"class":122},[37,1932,1933],{"class":126}," (error) console.",[37,1935,979],{"class":50},[37,1937,1938],{"class":126},"(error)\n",[37,1940,1941],{"class":39,"line":687},[37,1942,283],{"class":126},[18,1944,1946],{"id":1945},"room-presence","Room Presence",[14,1948,1949],{},"Presence is scoped to rooms. Use the fluent API to set and observe presence:",[23,1951,1952],{},[26,1953,1955],{"className":112,"code":1954,"filename":114,"language":115,"meta":32,"style":32},"// Join a room and set presence\nconst room = client.setApp('chat').setRoom('general')\n\nroom.setPresence({\n  username: 'Alice',\n  status: 'online',\n  avatar: '/img/alice.png'\n})\n\n// Get all actors in this room (from local cache)\nconst actors = room.getPresence()\nconsole.log('In room:', Object.keys(actors).length)\n\n// Fetch presence list from server (async)\nconst freshList = await room.fetchPresence()\n\n// Listen for presence events in this room\nroom.on('presence:join', (actor) => {\n  console.log(`${actor.presence.username} joined`)\n})\n\nroom.on('presence:leave', (actor) => {\n  console.log(`${actor.presence.username} left`)\n})\n\nroom.on('presence:update', (actor) => {\n  console.log(`${actor.presence.username} updated status`)\n})\n",[34,1956,1957,1962,1994,1998,2009,2020,2030,2038,2042,2046,2051,2068,2093,2097,2102,2120,2124,2129,2151,2179,2183,2187,2208,2233,2237,2241,2262,2287],{"__ignoreMap":32},[37,1958,1959],{"class":39,"line":40},[37,1960,1961],{"class":43},"// Join a room and set presence\n",[37,1963,1964,1966,1969,1971,1973,1976,1978,1981,1984,1987,1989,1992],{"class":39,"line":47},[37,1965,147],{"class":122},[37,1967,1968],{"class":150}," room",[37,1970,154],{"class":122},[37,1972,183],{"class":126},[37,1974,1975],{"class":50},"setApp",[37,1977,160],{"class":126},[37,1979,1980],{"class":54},"'chat'",[37,1982,1983],{"class":126},").",[37,1985,1986],{"class":50},"setRoom",[37,1988,160],{"class":126},[37,1990,1991],{"class":54},"'general'",[37,1993,166],{"class":126},[37,1995,1996],{"class":39,"line":61},[37,1997,65],{"emptyLinePlaceholder":64},[37,1999,2000,2003,2006],{"class":39,"line":68},[37,2001,2002],{"class":126},"room.",[37,2004,2005],{"class":50},"setPresence",[37,2007,2008],{"class":126},"({\n",[37,2010,2011,2014,2017],{"class":39,"line":74},[37,2012,2013],{"class":126},"  username: ",[37,2015,2016],{"class":54},"'Alice'",[37,2018,2019],{"class":126},",\n",[37,2021,2022,2025,2028],{"class":39,"line":85},[37,2023,2024],{"class":126},"  status: ",[37,2026,2027],{"class":54},"'online'",[37,2029,2019],{"class":126},[37,2031,2032,2035],{"class":39,"line":90},[37,2033,2034],{"class":126},"  avatar: ",[37,2036,2037],{"class":54},"'/img/alice.png'\n",[37,2039,2040],{"class":39,"line":96},[37,2041,283],{"class":126},[37,2043,2044],{"class":39,"line":196},[37,2045,65],{"emptyLinePlaceholder":64},[37,2047,2048],{"class":39,"line":202},[37,2049,2050],{"class":43},"// Get all actors in this room (from local cache)\n",[37,2052,2053,2055,2058,2060,2063,2066],{"class":39,"line":218},[37,2054,147],{"class":122},[37,2056,2057],{"class":150}," actors",[37,2059,154],{"class":122},[37,2061,2062],{"class":126}," room.",[37,2064,2065],{"class":50},"getPresence",[37,2067,189],{"class":126},[37,2069,2070,2072,2074,2076,2079,2082,2085,2088,2091],{"class":39,"line":223},[37,2071,728],{"class":126},[37,2073,269],{"class":50},[37,2075,160],{"class":126},[37,2077,2078],{"class":54},"'In room:'",[37,2080,2081],{"class":126},", Object.",[37,2083,2084],{"class":50},"keys",[37,2086,2087],{"class":126},"(actors).",[37,2089,2090],{"class":150},"length",[37,2092,166],{"class":126},[37,2094,2095],{"class":39,"line":229},[37,2096,65],{"emptyLinePlaceholder":64},[37,2098,2099],{"class":39,"line":263},[37,2100,2101],{"class":43},"// Fetch presence list from server (async)\n",[37,2103,2104,2106,2109,2111,2113,2115,2118],{"class":39,"line":280},[37,2105,147],{"class":122},[37,2107,2108],{"class":150}," freshList",[37,2110,154],{"class":122},[37,2112,384],{"class":122},[37,2114,2062],{"class":126},[37,2116,2117],{"class":50},"fetchPresence",[37,2119,189],{"class":126},[37,2121,2122],{"class":39,"line":286},[37,2123,65],{"emptyLinePlaceholder":64},[37,2125,2126],{"class":39,"line":291},[37,2127,2128],{"class":43},"// Listen for presence events in this room\n",[37,2130,2131,2133,2135,2137,2140,2142,2145,2147,2149],{"class":39,"line":297},[37,2132,2002],{"class":126},[37,2134,234],{"class":50},[37,2136,160],{"class":126},[37,2138,2139],{"class":54},"'presence:join'",[37,2141,241],{"class":126},[37,2143,2144],{"class":244},"actor",[37,2146,254],{"class":126},[37,2148,257],{"class":122},[37,2150,260],{"class":126},[37,2152,2153,2155,2157,2159,2162,2164,2166,2169,2171,2174,2177],{"class":39,"line":647},[37,2154,266],{"class":126},[37,2156,269],{"class":50},[37,2158,160],{"class":126},[37,2160,2161],{"class":54},"`${",[37,2163,2144],{"class":126},[37,2165,1056],{"class":54},[37,2167,2168],{"class":126},"presence",[37,2170,1056],{"class":54},[37,2172,2173],{"class":126},"username",[37,2175,2176],{"class":54},"} joined`",[37,2178,166],{"class":126},[37,2180,2181],{"class":39,"line":662},[37,2182,283],{"class":126},[37,2184,2185],{"class":39,"line":667},[37,2186,65],{"emptyLinePlaceholder":64},[37,2188,2189,2191,2193,2195,2198,2200,2202,2204,2206],{"class":39,"line":673},[37,2190,2002],{"class":126},[37,2192,234],{"class":50},[37,2194,160],{"class":126},[37,2196,2197],{"class":54},"'presence:leave'",[37,2199,241],{"class":126},[37,2201,2144],{"class":244},[37,2203,254],{"class":126},[37,2205,257],{"class":122},[37,2207,260],{"class":126},[37,2209,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2231],{"class":39,"line":687},[37,2211,266],{"class":126},[37,2213,269],{"class":50},[37,2215,160],{"class":126},[37,2217,2161],{"class":54},[37,2219,2144],{"class":126},[37,2221,1056],{"class":54},[37,2223,2168],{"class":126},[37,2225,1056],{"class":54},[37,2227,2173],{"class":126},[37,2229,2230],{"class":54},"} left`",[37,2232,166],{"class":126},[37,2234,2235],{"class":39,"line":1042},[37,2236,283],{"class":126},[37,2238,2239],{"class":39,"line":1067},[37,2240,65],{"emptyLinePlaceholder":64},[37,2242,2243,2245,2247,2249,2252,2254,2256,2258,2260],{"class":39,"line":1072},[37,2244,2002],{"class":126},[37,2246,234],{"class":50},[37,2248,160],{"class":126},[37,2250,2251],{"class":54},"'presence:update'",[37,2253,241],{"class":126},[37,2255,2144],{"class":244},[37,2257,254],{"class":126},[37,2259,257],{"class":122},[37,2261,260],{"class":126},[37,2263,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2285],{"class":39,"line":1077},[37,2265,266],{"class":126},[37,2267,269],{"class":50},[37,2269,160],{"class":126},[37,2271,2161],{"class":54},[37,2273,2144],{"class":126},[37,2275,1056],{"class":54},[37,2277,2168],{"class":126},[37,2279,1056],{"class":54},[37,2281,2173],{"class":126},[37,2283,2284],{"class":54},"} updated status`",[37,2286,166],{"class":126},[37,2288,2289],{"class":39,"line":1099},[37,2290,283],{"class":126},[18,2292,2294],{"id":2293},"lobbies-multi-room-presence","Lobbies (Multi-Room Presence)",[14,2296,2297],{},"Lobbies let you observe presence across multiple rooms. Use them for dashboards\nand monitoring interfaces:",[23,2299,2300],{},[26,2301,2303],{"className":112,"code":2302,"filename":114,"language":115,"meta":32,"style":32},"// Subscribe to a lobby to observe all rooms\nconst lobby = client.setApp('rides').setLobby('active-trips')\n\n// Subscribe returns a snapshot of current presence\nconst snapshot = await lobby.subscribe()\n// snapshot: { roomId -> { actorId -> presenceData } }\nconsole.log('Active trips:', Object.keys(snapshot).length)\n\n// Listen for presence events (includes room context)\nlobby.on('presence:join', (event) => {\n  // event: { lobbyId, roomId, actorId, data }\n  console.log(`${event.actorId} joined room ${event.roomId}`)\n  addToMap(event.roomId, event.actorId, event.data)\n})\n\nlobby.on('presence:update', (event) => {\n  updateOnMap(event.roomId, event.actorId, event.data)\n})\n\nlobby.on('presence:leave', (event) => {\n  removeFromMap(event.roomId, event.actorId)\n})\n\n// Fetch fresh presence at any time\nconst freshPresence = await lobby.fetchPresence()\n\n// Unsubscribe when done\nlobby.unsubscribe()\n",[34,2304,2305,2310,2340,2344,2349,2367,2372,2394,2398,2403,2424,2429,2461,2469,2473,2477,2497,2504,2508,2512,2532,2540,2544,2548,2553,2570,2574,2579],{"__ignoreMap":32},[37,2306,2307],{"class":39,"line":40},[37,2308,2309],{"class":43},"// Subscribe to a lobby to observe all rooms\n",[37,2311,2312,2314,2317,2319,2321,2323,2325,2328,2330,2333,2335,2338],{"class":39,"line":47},[37,2313,147],{"class":122},[37,2315,2316],{"class":150}," lobby",[37,2318,154],{"class":122},[37,2320,183],{"class":126},[37,2322,1975],{"class":50},[37,2324,160],{"class":126},[37,2326,2327],{"class":54},"'rides'",[37,2329,1983],{"class":126},[37,2331,2332],{"class":50},"setLobby",[37,2334,160],{"class":126},[37,2336,2337],{"class":54},"'active-trips'",[37,2339,166],{"class":126},[37,2341,2342],{"class":39,"line":61},[37,2343,65],{"emptyLinePlaceholder":64},[37,2345,2346],{"class":39,"line":68},[37,2347,2348],{"class":43},"// Subscribe returns a snapshot of current presence\n",[37,2350,2351,2353,2356,2358,2360,2363,2365],{"class":39,"line":74},[37,2352,147],{"class":122},[37,2354,2355],{"class":150}," snapshot",[37,2357,154],{"class":122},[37,2359,384],{"class":122},[37,2361,2362],{"class":126}," lobby.",[37,2364,208],{"class":50},[37,2366,189],{"class":126},[37,2368,2369],{"class":39,"line":85},[37,2370,2371],{"class":43},"// snapshot: { roomId -> { actorId -> presenceData } }\n",[37,2373,2374,2376,2378,2380,2383,2385,2387,2390,2392],{"class":39,"line":90},[37,2375,728],{"class":126},[37,2377,269],{"class":50},[37,2379,160],{"class":126},[37,2381,2382],{"class":54},"'Active trips:'",[37,2384,2081],{"class":126},[37,2386,2084],{"class":50},[37,2388,2389],{"class":126},"(snapshot).",[37,2391,2090],{"class":150},[37,2393,166],{"class":126},[37,2395,2396],{"class":39,"line":96},[37,2397,65],{"emptyLinePlaceholder":64},[37,2399,2400],{"class":39,"line":196},[37,2401,2402],{"class":43},"// Listen for presence events (includes room context)\n",[37,2404,2405,2408,2410,2412,2414,2416,2418,2420,2422],{"class":39,"line":202},[37,2406,2407],{"class":126},"lobby.",[37,2409,234],{"class":50},[37,2411,160],{"class":126},[37,2413,2139],{"class":54},[37,2415,241],{"class":126},[37,2417,1028],{"class":244},[37,2419,254],{"class":126},[37,2421,257],{"class":122},[37,2423,260],{"class":126},[37,2425,2426],{"class":39,"line":218},[37,2427,2428],{"class":43},"  // event: { lobbyId, roomId, actorId, data }\n",[37,2430,2431,2433,2435,2437,2439,2441,2443,2446,2449,2451,2453,2456,2459],{"class":39,"line":223},[37,2432,266],{"class":126},[37,2434,269],{"class":50},[37,2436,160],{"class":126},[37,2438,2161],{"class":54},[37,2440,1028],{"class":126},[37,2442,1056],{"class":54},[37,2444,2445],{"class":126},"actorId",[37,2447,2448],{"class":54},"} joined room ${",[37,2450,1028],{"class":126},[37,2452,1056],{"class":54},[37,2454,2455],{"class":126},"roomId",[37,2457,2458],{"class":54},"}`",[37,2460,166],{"class":126},[37,2462,2463,2466],{"class":39,"line":229},[37,2464,2465],{"class":50},"  addToMap",[37,2467,2468],{"class":126},"(event.roomId, event.actorId, event.data)\n",[37,2470,2471],{"class":39,"line":263},[37,2472,283],{"class":126},[37,2474,2475],{"class":39,"line":280},[37,2476,65],{"emptyLinePlaceholder":64},[37,2478,2479,2481,2483,2485,2487,2489,2491,2493,2495],{"class":39,"line":286},[37,2480,2407],{"class":126},[37,2482,234],{"class":50},[37,2484,160],{"class":126},[37,2486,2251],{"class":54},[37,2488,241],{"class":126},[37,2490,1028],{"class":244},[37,2492,254],{"class":126},[37,2494,257],{"class":122},[37,2496,260],{"class":126},[37,2498,2499,2502],{"class":39,"line":291},[37,2500,2501],{"class":50},"  updateOnMap",[37,2503,2468],{"class":126},[37,2505,2506],{"class":39,"line":297},[37,2507,283],{"class":126},[37,2509,2510],{"class":39,"line":647},[37,2511,65],{"emptyLinePlaceholder":64},[37,2513,2514,2516,2518,2520,2522,2524,2526,2528,2530],{"class":39,"line":662},[37,2515,2407],{"class":126},[37,2517,234],{"class":50},[37,2519,160],{"class":126},[37,2521,2197],{"class":54},[37,2523,241],{"class":126},[37,2525,1028],{"class":244},[37,2527,254],{"class":126},[37,2529,257],{"class":122},[37,2531,260],{"class":126},[37,2533,2534,2537],{"class":39,"line":667},[37,2535,2536],{"class":50},"  removeFromMap",[37,2538,2539],{"class":126},"(event.roomId, event.actorId)\n",[37,2541,2542],{"class":39,"line":673},[37,2543,283],{"class":126},[37,2545,2546],{"class":39,"line":687},[37,2547,65],{"emptyLinePlaceholder":64},[37,2549,2550],{"class":39,"line":1042},[37,2551,2552],{"class":43},"// Fetch fresh presence at any time\n",[37,2554,2555,2557,2560,2562,2564,2566,2568],{"class":39,"line":1067},[37,2556,147],{"class":122},[37,2558,2559],{"class":150}," freshPresence",[37,2561,154],{"class":122},[37,2563,384],{"class":122},[37,2565,2362],{"class":126},[37,2567,2117],{"class":50},[37,2569,189],{"class":126},[37,2571,2572],{"class":39,"line":1072},[37,2573,65],{"emptyLinePlaceholder":64},[37,2575,2576],{"class":39,"line":1077},[37,2577,2578],{"class":43},"// Unsubscribe when done\n",[37,2580,2581,2583,2586],{"class":39,"line":1099},[37,2582,2407],{"class":126},[37,2584,2585],{"class":50},"unsubscribe",[37,2587,189],{"class":126},[2589,2590,2592],"callout",{"type":2591},"info",[14,2593,2594,2598,2599,2603],{},[2595,2596,2597],"strong",{},"Read-only:"," Lobbies are for observation only. Actors set presence on rooms, not lobbies. See ",[324,2600,2602],{"href":2601},"/docs/concepts/lobbies","Lobbies documentation"," for details.",[18,2605,2607],{"id":2606},"fluent-api-scoped-pubsub","Fluent API (Scoped Pub/Sub)",[14,2609,2610],{},"Use the fluent API to scope subscriptions and messages to a specific app and room:",[23,2612,2613],{},[26,2614,2616],{"className":112,"code":2615,"filename":114,"language":115,"meta":32,"style":32},"// Create a room context\nconst room = client.setApp('chat').setRoom('general')\n\n// Subscribe (topic is auto-prefixed to 'chat/general/messages')\nroom.subscribe('messages')\n\n// Listen for messages\nroom.on('messages', (data, meta) => {\n  console.log('Message:', data)\n})\n\n// Publish (also auto-prefixed)\nroom.emit('messages', { text: 'Hello room!' })\n\n// Get the full topic prefix\nconsole.log(room.prefix) // 'chat/general'\n\n// Unsubscribe\nroom.unsubscribe('messages')\n",[34,2617,2618,2623,2649,2653,2658,2671,2675,2679,2703,2716,2720,2724,2729,2746,2750,2755,2767,2771,2776],{"__ignoreMap":32},[37,2619,2620],{"class":39,"line":40},[37,2621,2622],{"class":43},"// Create a room context\n",[37,2624,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647],{"class":39,"line":47},[37,2626,147],{"class":122},[37,2628,1968],{"class":150},[37,2630,154],{"class":122},[37,2632,183],{"class":126},[37,2634,1975],{"class":50},[37,2636,160],{"class":126},[37,2638,1980],{"class":54},[37,2640,1983],{"class":126},[37,2642,1986],{"class":50},[37,2644,160],{"class":126},[37,2646,1991],{"class":54},[37,2648,166],{"class":126},[37,2650,2651],{"class":39,"line":61},[37,2652,65],{"emptyLinePlaceholder":64},[37,2654,2655],{"class":39,"line":68},[37,2656,2657],{"class":43},"// Subscribe (topic is auto-prefixed to 'chat/general/messages')\n",[37,2659,2660,2662,2664,2666,2669],{"class":39,"line":74},[37,2661,2002],{"class":126},[37,2663,208],{"class":50},[37,2665,160],{"class":126},[37,2667,2668],{"class":54},"'messages'",[37,2670,166],{"class":126},[37,2672,2673],{"class":39,"line":85},[37,2674,65],{"emptyLinePlaceholder":64},[37,2676,2677],{"class":39,"line":90},[37,2678,226],{"class":43},[37,2680,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701],{"class":39,"line":96},[37,2682,2002],{"class":126},[37,2684,234],{"class":50},[37,2686,160],{"class":126},[37,2688,2668],{"class":54},[37,2690,241],{"class":126},[37,2692,245],{"class":244},[37,2694,248],{"class":126},[37,2696,251],{"class":244},[37,2698,254],{"class":126},[37,2700,257],{"class":122},[37,2702,260],{"class":126},[37,2704,2705,2707,2709,2711,2714],{"class":39,"line":196},[37,2706,266],{"class":126},[37,2708,269],{"class":50},[37,2710,160],{"class":126},[37,2712,2713],{"class":54},"'Message:'",[37,2715,277],{"class":126},[37,2717,2718],{"class":39,"line":202},[37,2719,283],{"class":126},[37,2721,2722],{"class":39,"line":218},[37,2723,65],{"emptyLinePlaceholder":64},[37,2725,2726],{"class":39,"line":223},[37,2727,2728],{"class":43},"// Publish (also auto-prefixed)\n",[37,2730,2731,2733,2735,2737,2739,2741,2744],{"class":39,"line":229},[37,2732,2002],{"class":126},[37,2734,302],{"class":50},[37,2736,160],{"class":126},[37,2738,2668],{"class":54},[37,2740,309],{"class":126},[37,2742,2743],{"class":54},"'Hello room!'",[37,2745,315],{"class":126},[37,2747,2748],{"class":39,"line":263},[37,2749,65],{"emptyLinePlaceholder":64},[37,2751,2752],{"class":39,"line":280},[37,2753,2754],{"class":43},"// Get the full topic prefix\n",[37,2756,2757,2759,2761,2764],{"class":39,"line":286},[37,2758,728],{"class":126},[37,2760,269],{"class":50},[37,2762,2763],{"class":126},"(room.prefix) ",[37,2765,2766],{"class":43},"// 'chat/general'\n",[37,2768,2769],{"class":39,"line":291},[37,2770,65],{"emptyLinePlaceholder":64},[37,2772,2773],{"class":39,"line":297},[37,2774,2775],{"class":43},"// Unsubscribe\n",[37,2777,2778,2780,2782,2784,2786],{"class":39,"line":647},[37,2779,2002],{"class":126},[37,2781,2585],{"class":50},[37,2783,160],{"class":126},[37,2785,2668],{"class":54},[37,2787,166],{"class":126},[18,2789,2791],{"id":2790},"unsubscribing","Unsubscribing",[23,2793,2794],{},[26,2795,2797],{"className":112,"code":2796,"filename":114,"language":115,"meta":32,"style":32},"// Unsubscribe from a topic\nclient.unsubscribe('chat/room-1')\n\n// With callback\nclient.unsubscribe('chat/room-1', (error) => {\n  if (error) {\n    console.error('Unsubscribe failed:', error)\n  }\n})\n",[34,2798,2799,2804,2816,2820,2825,2845,2851,2864,2868],{"__ignoreMap":32},[37,2800,2801],{"class":39,"line":40},[37,2802,2803],{"class":43},"// Unsubscribe from a topic\n",[37,2805,2806,2808,2810,2812,2814],{"class":39,"line":47},[37,2807,205],{"class":126},[37,2809,2585],{"class":50},[37,2811,160],{"class":126},[37,2813,213],{"class":54},[37,2815,166],{"class":126},[37,2817,2818],{"class":39,"line":61},[37,2819,65],{"emptyLinePlaceholder":64},[37,2821,2822],{"class":39,"line":68},[37,2823,2824],{"class":43},"// With callback\n",[37,2826,2827,2829,2831,2833,2835,2837,2839,2841,2843],{"class":39,"line":74},[37,2828,205],{"class":126},[37,2830,2585],{"class":50},[37,2832,160],{"class":126},[37,2834,213],{"class":54},[37,2836,241],{"class":126},[37,2838,979],{"class":244},[37,2840,254],{"class":126},[37,2842,257],{"class":122},[37,2844,260],{"class":126},[37,2846,2847,2849],{"class":39,"line":85},[37,2848,1173],{"class":122},[37,2850,1354],{"class":126},[37,2852,2853,2855,2857,2859,2862],{"class":39,"line":90},[37,2854,1182],{"class":126},[37,2856,979],{"class":50},[37,2858,160],{"class":126},[37,2860,2861],{"class":54},"'Unsubscribe failed:'",[37,2863,999],{"class":126},[37,2865,2866],{"class":39,"line":96},[37,2867,1222],{"class":126},[37,2869,2870],{"class":39,"line":196},[37,2871,283],{"class":126},[18,2873,2875],{"id":2874},"topic-filters","Topic Filters",[14,2877,2878],{},"Filters let you narrow message delivery to specific entities within a topic.\nInstead of receiving all updates on a topic, subscribe with filters to only\nget messages for the entities you care about.",[23,2880,2881],{},[26,2882,2884],{"className":112,"code":2883,"filename":114,"language":115,"meta":32,"style":32},"// Subscribe with filters: only receive updates for these bookings\nclient.subscribe('bookings', {\n  filters: ['booking_1', 'booking_2']\n})\n\n// Listen for filtered messages\nclient.on('bookings', (data, meta) => {\n  console.log('Booking update:', data)\n  console.log('Filter:', meta.filter)  // e.g. 'booking_1'\n})\n\n// Publish to a specific filter\nclient.emit('bookings', { status: 'confirmed' }, {\n  filter: 'booking_1'  // Only subscribers with this filter receive it\n})\n",[34,2885,2886,2891,2904,2920,2924,2928,2933,2957,2970,2986,2990,2994,2999,3017,3026],{"__ignoreMap":32},[37,2887,2888],{"class":39,"line":40},[37,2889,2890],{"class":43},"// Subscribe with filters: only receive updates for these bookings\n",[37,2892,2893,2895,2897,2899,2902],{"class":39,"line":47},[37,2894,205],{"class":126},[37,2896,208],{"class":50},[37,2898,160],{"class":126},[37,2900,2901],{"class":54},"'bookings'",[37,2903,492],{"class":126},[37,2905,2906,2909,2912,2914,2917],{"class":39,"line":61},[37,2907,2908],{"class":126},"  filters: [",[37,2910,2911],{"class":54},"'booking_1'",[37,2913,248],{"class":126},[37,2915,2916],{"class":54},"'booking_2'",[37,2918,2919],{"class":126},"]\n",[37,2921,2922],{"class":39,"line":68},[37,2923,283],{"class":126},[37,2925,2926],{"class":39,"line":74},[37,2927,65],{"emptyLinePlaceholder":64},[37,2929,2930],{"class":39,"line":85},[37,2931,2932],{"class":43},"// Listen for filtered messages\n",[37,2934,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955],{"class":39,"line":90},[37,2936,205],{"class":126},[37,2938,234],{"class":50},[37,2940,160],{"class":126},[37,2942,2901],{"class":54},[37,2944,241],{"class":126},[37,2946,245],{"class":244},[37,2948,248],{"class":126},[37,2950,251],{"class":244},[37,2952,254],{"class":126},[37,2954,257],{"class":122},[37,2956,260],{"class":126},[37,2958,2959,2961,2963,2965,2968],{"class":39,"line":96},[37,2960,266],{"class":126},[37,2962,269],{"class":50},[37,2964,160],{"class":126},[37,2966,2967],{"class":54},"'Booking update:'",[37,2969,277],{"class":126},[37,2971,2972,2974,2976,2978,2980,2983],{"class":39,"line":196},[37,2973,266],{"class":126},[37,2975,269],{"class":50},[37,2977,160],{"class":126},[37,2979,1537],{"class":54},[37,2981,2982],{"class":126},", meta.filter)  ",[37,2984,2985],{"class":43},"// e.g. 'booking_1'\n",[37,2987,2988],{"class":39,"line":202},[37,2989,283],{"class":126},[37,2991,2992],{"class":39,"line":218},[37,2993,65],{"emptyLinePlaceholder":64},[37,2995,2996],{"class":39,"line":223},[37,2997,2998],{"class":43},"// Publish to a specific filter\n",[37,3000,3001,3003,3005,3007,3009,3012,3015],{"class":39,"line":229},[37,3002,205],{"class":126},[37,3004,302],{"class":50},[37,3006,160],{"class":126},[37,3008,2901],{"class":54},[37,3010,3011],{"class":126},", { status: ",[37,3013,3014],{"class":54},"'confirmed'",[37,3016,1766],{"class":126},[37,3018,3019,3021,3023],{"class":39,"line":263},[37,3020,1794],{"class":126},[37,3022,2911],{"class":54},[37,3024,3025],{"class":43},"  // Only subscribers with this filter receive it\n",[37,3027,3028],{"class":39,"line":280},[37,3029,283],{"class":126},[3031,3032,3034],"h3",{"id":3033},"dynamic-filter-management","Dynamic Filter Management",[14,3036,3037],{},"Change filters at any time without resubscribing:",[23,3039,3040],{},[26,3041,3043],{"className":112,"code":3042,"filename":114,"language":115,"meta":32,"style":32},"// Replace all filters for a topic\nclient.setFilters('bookings', ['booking_3', 'booking_4'])\n\n// Add filters to existing set\nclient.addFilters('bookings', ['booking_5'])\n\n// Remove specific filters\nclient.removeFilters('bookings', ['booking_3'])\n\n// Filters work with the Room API too\nconst room = client.setApp('dashboard').setRoom('ops')\nroom.subscribe('bookings', { filters: ['booking_1'] })\nroom.setFilters('bookings', ['booking_2', 'booking_3'])\nroom.addFilters('bookings', ['booking_4'])\nroom.removeFilters('bookings', ['booking_2'])\n",[34,3044,3045,3050,3075,3079,3084,3102,3106,3111,3128,3132,3137,3165,3183,3203,3219],{"__ignoreMap":32},[37,3046,3047],{"class":39,"line":40},[37,3048,3049],{"class":43},"// Replace all filters for a topic\n",[37,3051,3052,3054,3057,3059,3061,3064,3067,3069,3072],{"class":39,"line":47},[37,3053,205],{"class":126},[37,3055,3056],{"class":50},"setFilters",[37,3058,160],{"class":126},[37,3060,2901],{"class":54},[37,3062,3063],{"class":126},", [",[37,3065,3066],{"class":54},"'booking_3'",[37,3068,248],{"class":126},[37,3070,3071],{"class":54},"'booking_4'",[37,3073,3074],{"class":126},"])\n",[37,3076,3077],{"class":39,"line":61},[37,3078,65],{"emptyLinePlaceholder":64},[37,3080,3081],{"class":39,"line":68},[37,3082,3083],{"class":43},"// Add filters to existing set\n",[37,3085,3086,3088,3091,3093,3095,3097,3100],{"class":39,"line":74},[37,3087,205],{"class":126},[37,3089,3090],{"class":50},"addFilters",[37,3092,160],{"class":126},[37,3094,2901],{"class":54},[37,3096,3063],{"class":126},[37,3098,3099],{"class":54},"'booking_5'",[37,3101,3074],{"class":126},[37,3103,3104],{"class":39,"line":85},[37,3105,65],{"emptyLinePlaceholder":64},[37,3107,3108],{"class":39,"line":90},[37,3109,3110],{"class":43},"// Remove specific filters\n",[37,3112,3113,3115,3118,3120,3122,3124,3126],{"class":39,"line":96},[37,3114,205],{"class":126},[37,3116,3117],{"class":50},"removeFilters",[37,3119,160],{"class":126},[37,3121,2901],{"class":54},[37,3123,3063],{"class":126},[37,3125,3066],{"class":54},[37,3127,3074],{"class":126},[37,3129,3130],{"class":39,"line":196},[37,3131,65],{"emptyLinePlaceholder":64},[37,3133,3134],{"class":39,"line":202},[37,3135,3136],{"class":43},"// Filters work with the Room API too\n",[37,3138,3139,3141,3143,3145,3147,3149,3151,3154,3156,3158,3160,3163],{"class":39,"line":218},[37,3140,147],{"class":122},[37,3142,1968],{"class":150},[37,3144,154],{"class":122},[37,3146,183],{"class":126},[37,3148,1975],{"class":50},[37,3150,160],{"class":126},[37,3152,3153],{"class":54},"'dashboard'",[37,3155,1983],{"class":126},[37,3157,1986],{"class":50},[37,3159,160],{"class":126},[37,3161,3162],{"class":54},"'ops'",[37,3164,166],{"class":126},[37,3166,3167,3169,3171,3173,3175,3178,3180],{"class":39,"line":223},[37,3168,2002],{"class":126},[37,3170,208],{"class":50},[37,3172,160],{"class":126},[37,3174,2901],{"class":54},[37,3176,3177],{"class":126},", { filters: [",[37,3179,2911],{"class":54},[37,3181,3182],{"class":126},"] })\n",[37,3184,3185,3187,3189,3191,3193,3195,3197,3199,3201],{"class":39,"line":229},[37,3186,2002],{"class":126},[37,3188,3056],{"class":50},[37,3190,160],{"class":126},[37,3192,2901],{"class":54},[37,3194,3063],{"class":126},[37,3196,2916],{"class":54},[37,3198,248],{"class":126},[37,3200,3066],{"class":54},[37,3202,3074],{"class":126},[37,3204,3205,3207,3209,3211,3213,3215,3217],{"class":39,"line":263},[37,3206,2002],{"class":126},[37,3208,3090],{"class":50},[37,3210,160],{"class":126},[37,3212,2901],{"class":54},[37,3214,3063],{"class":126},[37,3216,3071],{"class":54},[37,3218,3074],{"class":126},[37,3220,3221,3223,3225,3227,3229,3231,3233],{"class":39,"line":280},[37,3222,2002],{"class":126},[37,3224,3117],{"class":50},[37,3226,160],{"class":126},[37,3228,2901],{"class":54},[37,3230,3063],{"class":126},[37,3232,2916],{"class":54},[37,3234,3074],{"class":126},[2589,3236,3237],{"type":2591},[14,3238,3239,3242],{},[2595,3240,3241],{},"No filters = wildcard:"," Subscribing without filters receives all messages on the topic. Subscribing with filters only receives messages published with a matching filter. Messages published without a filter are only delivered to wildcard (no-filter) subscribers.",[18,3244,3246],{"id":3245},"quality-of-service-qos","Quality of Service (QoS)",[23,3248,3249],{},[26,3250,3252],{"className":112,"code":3251,"filename":114,"language":115,"meta":32,"style":32},"// QoS 0: At most once (fire and forget)\nclient.emit('telemetry/data', data, { qos: 0 })\n\n// QoS 1: At least once (guaranteed delivery, may duplicate)\nclient.emit('orders/new', order, { qos: 1 })\n\n// QoS 2: Exactly once (guaranteed single delivery)\nclient.emit('payments/process', payment, { qos: 2 })\n\n// Set default QoS for all messages\nconst client = NoLag(token, { qos: 1 })\n",[34,3253,3254,3259,3278,3282,3287,3305,3309,3314,3332,3336,3341],{"__ignoreMap":32},[37,3255,3256],{"class":39,"line":40},[37,3257,3258],{"class":43},"// QoS 0: At most once (fire and forget)\n",[37,3260,3261,3263,3265,3267,3270,3273,3276],{"class":39,"line":47},[37,3262,205],{"class":126},[37,3264,302],{"class":50},[37,3266,160],{"class":126},[37,3268,3269],{"class":54},"'telemetry/data'",[37,3271,3272],{"class":126},", data, { qos: ",[37,3274,3275],{"class":150},"0",[37,3277,315],{"class":126},[37,3279,3280],{"class":39,"line":61},[37,3281,65],{"emptyLinePlaceholder":64},[37,3283,3284],{"class":39,"line":68},[37,3285,3286],{"class":43},"// QoS 1: At least once (guaranteed delivery, may duplicate)\n",[37,3288,3289,3291,3293,3295,3298,3301,3303],{"class":39,"line":74},[37,3290,205],{"class":126},[37,3292,302],{"class":50},[37,3294,160],{"class":126},[37,3296,3297],{"class":54},"'orders/new'",[37,3299,3300],{"class":126},", order, { qos: ",[37,3302,556],{"class":150},[37,3304,315],{"class":126},[37,3306,3307],{"class":39,"line":85},[37,3308,65],{"emptyLinePlaceholder":64},[37,3310,3311],{"class":39,"line":90},[37,3312,3313],{"class":43},"// QoS 2: Exactly once (guaranteed single delivery)\n",[37,3315,3316,3318,3320,3322,3325,3328,3330],{"class":39,"line":96},[37,3317,205],{"class":126},[37,3319,302],{"class":50},[37,3321,160],{"class":126},[37,3323,3324],{"class":54},"'payments/process'",[37,3326,3327],{"class":126},", payment, { qos: ",[37,3329,1283],{"class":150},[37,3331,315],{"class":126},[37,3333,3334],{"class":39,"line":196},[37,3335,65],{"emptyLinePlaceholder":64},[37,3337,3338],{"class":39,"line":202},[37,3339,3340],{"class":43},"// Set default QoS for all messages\n",[37,3342,3343,3345,3347,3349,3351,3354,3356],{"class":39,"line":218},[37,3344,147],{"class":122},[37,3346,151],{"class":150},[37,3348,154],{"class":122},[37,3350,157],{"class":50},[37,3352,3353],{"class":126},"(token, { qos: ",[37,3355,556],{"class":150},[37,3357,315],{"class":126},[18,3359,3361],{"id":3360},"load-balancing","Load Balancing",[14,3363,3364],{},"Distribute messages across multiple clients in a group using round-robin:",[23,3366,3367],{},[26,3368,3370],{"className":112,"code":3369,"filename":114,"language":115,"meta":32,"style":32},"// Enable for all subscriptions\nconst client = NoLag(token, {\n  loadBalance: true,\n  loadBalanceGroup: 'worker-pool-1'\n})\n\n// Or per-subscription\nclient.subscribe('jobs/process', {\n  loadBalance: true,\n  loadBalanceGroup: 'job-workers'\n})\n\n// Only ONE client in the group receives each message\n",[34,3371,3372,3377,3390,3398,3405,3409,3413,3418,3431,3439,3446,3450,3454],{"__ignoreMap":32},[37,3373,3374],{"class":39,"line":40},[37,3375,3376],{"class":43},"// Enable for all subscriptions\n",[37,3378,3379,3381,3383,3385,3387],{"class":39,"line":47},[37,3380,147],{"class":122},[37,3382,151],{"class":150},[37,3384,154],{"class":122},[37,3386,157],{"class":50},[37,3388,3389],{"class":126},"(token, {\n",[37,3391,3392,3394,3396],{"class":39,"line":61},[37,3393,576],{"class":126},[37,3395,519],{"class":150},[37,3397,2019],{"class":126},[37,3399,3400,3402],{"class":39,"line":68},[37,3401,590],{"class":126},[37,3403,3404],{"class":54},"'worker-pool-1'\n",[37,3406,3407],{"class":39,"line":74},[37,3408,283],{"class":126},[37,3410,3411],{"class":39,"line":85},[37,3412,65],{"emptyLinePlaceholder":64},[37,3414,3415],{"class":39,"line":90},[37,3416,3417],{"class":43},"// Or per-subscription\n",[37,3419,3420,3422,3424,3426,3429],{"class":39,"line":96},[37,3421,205],{"class":126},[37,3423,208],{"class":50},[37,3425,160],{"class":126},[37,3427,3428],{"class":54},"'jobs/process'",[37,3430,492],{"class":126},[37,3432,3433,3435,3437],{"class":39,"line":196},[37,3434,576],{"class":126},[37,3436,519],{"class":150},[37,3438,2019],{"class":126},[37,3440,3441,3443],{"class":39,"line":202},[37,3442,590],{"class":126},[37,3444,3445],{"class":54},"'job-workers'\n",[37,3447,3448],{"class":39,"line":218},[37,3449,283],{"class":126},[37,3451,3452],{"class":39,"line":223},[37,3453,65],{"emptyLinePlaceholder":64},[37,3455,3456],{"class":39,"line":229},[37,3457,3458],{"class":43},"// Only ONE client in the group receives each message\n",[18,3460,3462],{"id":3461},"rest-api-client","REST API Client",[14,3464,3465],{},"Manage apps, rooms, and actors programmatically:",[23,3467,3468],{},[26,3469,3471],{"className":112,"code":3470,"filename":114,"language":115,"meta":32,"style":32},"import { NoLagApi } from '@nolag/js-sdk'\nimport type { PaginatedResult, App } from '@nolag/js-sdk'\n\nconst api = new NoLagApi('your-api-key', {\n  baseUrl: 'https://api.nolag.app/v1',  // Optional\n  timeout: 30000,                        // Optional\n})\n\n// Apps: list() returns PaginatedResult\u003CApp>\nconst result: PaginatedResult\u003CApp> = await api.apps.list()\nconsole.log(result.data)        // App[]\nconsole.log(result.total)       // Total count\nconsole.log(result.totalPages)  // Total pages\n\nconst singleApp = await api.apps.get(appId)            // Get by ID\nconst app = await api.apps.create({ name: 'My App' })  // Create\nawait api.apps.update(app.appId, { name: 'Updated' })  // Update\nawait api.apps.delete(app.appId)                        // Delete\n\n// Rooms\nconst rooms = await api.rooms.list(appId)                // List rooms in an app\nconst singleRoom = await api.rooms.get(appId, roomId)    // Get by ID\nconst room = await api.rooms.create(appId, {             // Create\n  name: 'General', slug: 'general'\n})\nawait api.rooms.update(appId, room.roomId, {             // Update\n  name: 'Updated Room'\n})\nawait api.rooms.delete(appId, room.roomId)               // Delete\n\n// Actors\nconst actors = await api.actors.list()                   // List all actors\nconst singleActor = await api.actors.get(actorTokenId)   // Get by ID\nconst actor = await api.actors.create({                  // Create\n  name: 'Device 1',\n  actorType: 'device'\n})\nconsole.log('Access Token:', actor.accessToken)  // Save this! Only shown once\n\nawait api.actors.update(actor.actorTokenId, { name: 'Updated Device' })\nawait api.actors.delete(actor.actorTokenId)\n",[34,3472,3473,3484,3498,3502,3524,3537,3548,3552,3556,3561,3594,3606,3618,3630,3634,3656,3684,3704,3719,3723,3728,3750,3770,3789,3803,3807,3820,3827,3831,3844,3848,3853,3874,3894,3914,3923,3931,3935,3952,3956,3973],{"__ignoreMap":32},[37,3474,3475,3477,3480,3482],{"class":39,"line":40},[37,3476,123],{"class":122},[37,3478,3479],{"class":126}," { NoLagApi } ",[37,3481,130],{"class":122},[37,3483,133],{"class":54},[37,3485,3486,3488,3491,3494,3496],{"class":39,"line":47},[37,3487,123],{"class":122},[37,3489,3490],{"class":122}," type",[37,3492,3493],{"class":126}," { PaginatedResult, App } ",[37,3495,130],{"class":122},[37,3497,133],{"class":54},[37,3499,3500],{"class":39,"line":61},[37,3501,65],{"emptyLinePlaceholder":64},[37,3503,3504,3506,3509,3511,3514,3517,3519,3522],{"class":39,"line":68},[37,3505,147],{"class":122},[37,3507,3508],{"class":150}," api",[37,3510,154],{"class":122},[37,3512,3513],{"class":122}," new",[37,3515,3516],{"class":50}," NoLagApi",[37,3518,160],{"class":126},[37,3520,3521],{"class":54},"'your-api-key'",[37,3523,492],{"class":126},[37,3525,3526,3529,3532,3534],{"class":39,"line":74},[37,3527,3528],{"class":126},"  baseUrl: ",[37,3530,3531],{"class":54},"'https://api.nolag.app/v1'",[37,3533,508],{"class":126},[37,3535,3536],{"class":43},"// Optional\n",[37,3538,3539,3542,3544,3546],{"class":39,"line":85},[37,3540,3541],{"class":126},"  timeout: ",[37,3543,653],{"class":150},[37,3545,1286],{"class":126},[37,3547,3536],{"class":43},[37,3549,3550],{"class":39,"line":90},[37,3551,283],{"class":126},[37,3553,3554],{"class":39,"line":96},[37,3555,65],{"emptyLinePlaceholder":64},[37,3557,3558],{"class":39,"line":196},[37,3559,3560],{"class":43},"// Apps: list() returns PaginatedResult\u003CApp>\n",[37,3562,3563,3565,3568,3570,3573,3576,3579,3582,3584,3586,3589,3592],{"class":39,"line":202},[37,3564,147],{"class":122},[37,3566,3567],{"class":150}," result",[37,3569,1572],{"class":122},[37,3571,3572],{"class":50}," PaginatedResult",[37,3574,3575],{"class":126},"\u003C",[37,3577,3578],{"class":50},"App",[37,3580,3581],{"class":126},"> ",[37,3583,410],{"class":122},[37,3585,384],{"class":122},[37,3587,3588],{"class":126}," api.apps.",[37,3590,3591],{"class":50},"list",[37,3593,189],{"class":126},[37,3595,3596,3598,3600,3603],{"class":39,"line":218},[37,3597,728],{"class":126},[37,3599,269],{"class":50},[37,3601,3602],{"class":126},"(result.data)        ",[37,3604,3605],{"class":43},"// App[]\n",[37,3607,3608,3610,3612,3615],{"class":39,"line":223},[37,3609,728],{"class":126},[37,3611,269],{"class":50},[37,3613,3614],{"class":126},"(result.total)       ",[37,3616,3617],{"class":43},"// Total count\n",[37,3619,3620,3622,3624,3627],{"class":39,"line":229},[37,3621,728],{"class":126},[37,3623,269],{"class":50},[37,3625,3626],{"class":126},"(result.totalPages)  ",[37,3628,3629],{"class":43},"// Total pages\n",[37,3631,3632],{"class":39,"line":263},[37,3633,65],{"emptyLinePlaceholder":64},[37,3635,3636,3638,3641,3643,3645,3647,3650,3653],{"class":39,"line":280},[37,3637,147],{"class":122},[37,3639,3640],{"class":150}," singleApp",[37,3642,154],{"class":122},[37,3644,384],{"class":122},[37,3646,3588],{"class":126},[37,3648,3649],{"class":50},"get",[37,3651,3652],{"class":126},"(appId)            ",[37,3654,3655],{"class":43},"// Get by ID\n",[37,3657,3658,3660,3663,3665,3667,3669,3672,3675,3678,3681],{"class":39,"line":286},[37,3659,147],{"class":122},[37,3661,3662],{"class":150}," app",[37,3664,154],{"class":122},[37,3666,384],{"class":122},[37,3668,3588],{"class":126},[37,3670,3671],{"class":50},"create",[37,3673,3674],{"class":126},"({ name: ",[37,3676,3677],{"class":54},"'My App'",[37,3679,3680],{"class":126}," })  ",[37,3682,3683],{"class":43},"// Create\n",[37,3685,3686,3688,3690,3693,3696,3699,3701],{"class":39,"line":291},[37,3687,180],{"class":122},[37,3689,3588],{"class":126},[37,3691,3692],{"class":50},"update",[37,3694,3695],{"class":126},"(app.appId, { name: ",[37,3697,3698],{"class":54},"'Updated'",[37,3700,3680],{"class":126},[37,3702,3703],{"class":43},"// Update\n",[37,3705,3706,3708,3710,3713,3716],{"class":39,"line":297},[37,3707,180],{"class":122},[37,3709,3588],{"class":126},[37,3711,3712],{"class":50},"delete",[37,3714,3715],{"class":126},"(app.appId)                        ",[37,3717,3718],{"class":43},"// Delete\n",[37,3720,3721],{"class":39,"line":647},[37,3722,65],{"emptyLinePlaceholder":64},[37,3724,3725],{"class":39,"line":662},[37,3726,3727],{"class":43},"// Rooms\n",[37,3729,3730,3732,3735,3737,3739,3742,3744,3747],{"class":39,"line":667},[37,3731,147],{"class":122},[37,3733,3734],{"class":150}," rooms",[37,3736,154],{"class":122},[37,3738,384],{"class":122},[37,3740,3741],{"class":126}," api.rooms.",[37,3743,3591],{"class":50},[37,3745,3746],{"class":126},"(appId)                ",[37,3748,3749],{"class":43},"// List rooms in an app\n",[37,3751,3752,3754,3757,3759,3761,3763,3765,3768],{"class":39,"line":673},[37,3753,147],{"class":122},[37,3755,3756],{"class":150}," singleRoom",[37,3758,154],{"class":122},[37,3760,384],{"class":122},[37,3762,3741],{"class":126},[37,3764,3649],{"class":50},[37,3766,3767],{"class":126},"(appId, roomId)    ",[37,3769,3655],{"class":43},[37,3771,3772,3774,3776,3778,3780,3782,3784,3787],{"class":39,"line":687},[37,3773,147],{"class":122},[37,3775,1968],{"class":150},[37,3777,154],{"class":122},[37,3779,384],{"class":122},[37,3781,3741],{"class":126},[37,3783,3671],{"class":50},[37,3785,3786],{"class":126},"(appId, {             ",[37,3788,3683],{"class":43},[37,3790,3791,3794,3797,3800],{"class":39,"line":1042},[37,3792,3793],{"class":126},"  name: ",[37,3795,3796],{"class":54},"'General'",[37,3798,3799],{"class":126},", slug: ",[37,3801,3802],{"class":54},"'general'\n",[37,3804,3805],{"class":39,"line":1067},[37,3806,283],{"class":126},[37,3808,3809,3811,3813,3815,3818],{"class":39,"line":1072},[37,3810,180],{"class":122},[37,3812,3741],{"class":126},[37,3814,3692],{"class":50},[37,3816,3817],{"class":126},"(appId, room.roomId, {             ",[37,3819,3703],{"class":43},[37,3821,3822,3824],{"class":39,"line":1077},[37,3823,3793],{"class":126},[37,3825,3826],{"class":54},"'Updated Room'\n",[37,3828,3829],{"class":39,"line":1099},[37,3830,283],{"class":126},[37,3832,3833,3835,3837,3839,3842],{"class":39,"line":1105},[37,3834,180],{"class":122},[37,3836,3741],{"class":126},[37,3838,3712],{"class":50},[37,3840,3841],{"class":126},"(appId, room.roomId)               ",[37,3843,3718],{"class":43},[37,3845,3846],{"class":39,"line":1129},[37,3847,65],{"emptyLinePlaceholder":64},[37,3849,3850],{"class":39,"line":1134},[37,3851,3852],{"class":43},"// Actors\n",[37,3854,3855,3857,3859,3861,3863,3866,3868,3871],{"class":39,"line":1139},[37,3856,147],{"class":122},[37,3858,2057],{"class":150},[37,3860,154],{"class":122},[37,3862,384],{"class":122},[37,3864,3865],{"class":126}," api.actors.",[37,3867,3591],{"class":50},[37,3869,3870],{"class":126},"()                   ",[37,3872,3873],{"class":43},"// List all actors\n",[37,3875,3876,3878,3881,3883,3885,3887,3889,3892],{"class":39,"line":1145},[37,3877,147],{"class":122},[37,3879,3880],{"class":150}," singleActor",[37,3882,154],{"class":122},[37,3884,384],{"class":122},[37,3886,3865],{"class":126},[37,3888,3649],{"class":50},[37,3890,3891],{"class":126},"(actorTokenId)   ",[37,3893,3655],{"class":43},[37,3895,3896,3898,3901,3903,3905,3907,3909,3912],{"class":39,"line":1170},[37,3897,147],{"class":122},[37,3899,3900],{"class":150}," actor",[37,3902,154],{"class":122},[37,3904,384],{"class":122},[37,3906,3865],{"class":126},[37,3908,3671],{"class":50},[37,3910,3911],{"class":126},"({                  ",[37,3913,3683],{"class":43},[37,3915,3916,3918,3921],{"class":39,"line":1179},[37,3917,3793],{"class":126},[37,3919,3920],{"class":54},"'Device 1'",[37,3922,2019],{"class":126},[37,3924,3925,3928],{"class":39,"line":1194},[37,3926,3927],{"class":126},"  actorType: ",[37,3929,3930],{"class":54},"'device'\n",[37,3932,3933],{"class":39,"line":1205},[37,3934,283],{"class":126},[37,3936,3937,3939,3941,3943,3946,3949],{"class":39,"line":1219},[37,3938,728],{"class":126},[37,3940,269],{"class":50},[37,3942,160],{"class":126},[37,3944,3945],{"class":54},"'Access Token:'",[37,3947,3948],{"class":126},", actor.accessToken)  ",[37,3950,3951],{"class":43},"// Save this! Only shown once\n",[37,3953,3954],{"class":39,"line":1225},[37,3955,65],{"emptyLinePlaceholder":64},[37,3957,3959,3961,3963,3965,3968,3971],{"class":39,"line":3958},40,[37,3960,180],{"class":122},[37,3962,3865],{"class":126},[37,3964,3692],{"class":50},[37,3966,3967],{"class":126},"(actor.actorTokenId, { name: ",[37,3969,3970],{"class":54},"'Updated Device'",[37,3972,315],{"class":126},[37,3974,3976,3978,3980,3982],{"class":39,"line":3975},41,[37,3977,180],{"class":122},[37,3979,3865],{"class":126},[37,3981,3712],{"class":50},[37,3983,3984],{"class":126},"(actor.actorTokenId)\n",[18,3986,3988],{"id":3987},"typescript-support","TypeScript Support",[14,3990,3991],{},"The SDK includes full TypeScript definitions:",[23,3993,3994],{},[26,3995,3997],{"className":112,"code":3996,"filename":114,"language":115,"meta":32,"style":32},"import {\n  NoLag,\n  NoLagApi,\n  NoLagOptions,\n  ConnectionStatus,\n  MessageMeta,\n  ActorPresence,\n  PresenceData,\n  LobbyPresenceEvent,\n  LobbyPresenceState,\n  ReplayStartEvent,\n  ReplayEndEvent,\n  QoS,\n  SubscribeOptions,\n  EmitOptions,\n  RoomContext,\n  LobbyContext,\n  PaginatedResult,\n} from '@nolag/js-sdk'\n\n// Type your message data\ninterface ChatMessage {\n  text: string\n  sender: string\n  timestamp: number\n}\n\nclient.on('chat/room-1', (data: ChatMessage, meta: MessageMeta) => {\n  console.log(`[${data.sender}]: ${data.text}`)\n})\n",[34,3998,3999,4005,4010,4015,4020,4025,4030,4035,4040,4045,4050,4055,4060,4065,4070,4075,4080,4085,4090,4099,4103,4108,4118,4128,4137,4147,4152,4156,4188,4219],{"__ignoreMap":32},[37,4000,4001,4003],{"class":39,"line":40},[37,4002,123],{"class":122},[37,4004,260],{"class":126},[37,4006,4007],{"class":39,"line":47},[37,4008,4009],{"class":126},"  NoLag,\n",[37,4011,4012],{"class":39,"line":61},[37,4013,4014],{"class":126},"  NoLagApi,\n",[37,4016,4017],{"class":39,"line":68},[37,4018,4019],{"class":126},"  NoLagOptions,\n",[37,4021,4022],{"class":39,"line":74},[37,4023,4024],{"class":126},"  ConnectionStatus,\n",[37,4026,4027],{"class":39,"line":85},[37,4028,4029],{"class":126},"  MessageMeta,\n",[37,4031,4032],{"class":39,"line":90},[37,4033,4034],{"class":126},"  ActorPresence,\n",[37,4036,4037],{"class":39,"line":96},[37,4038,4039],{"class":126},"  PresenceData,\n",[37,4041,4042],{"class":39,"line":196},[37,4043,4044],{"class":126},"  LobbyPresenceEvent,\n",[37,4046,4047],{"class":39,"line":202},[37,4048,4049],{"class":126},"  LobbyPresenceState,\n",[37,4051,4052],{"class":39,"line":218},[37,4053,4054],{"class":126},"  ReplayStartEvent,\n",[37,4056,4057],{"class":39,"line":223},[37,4058,4059],{"class":126},"  ReplayEndEvent,\n",[37,4061,4062],{"class":39,"line":229},[37,4063,4064],{"class":126},"  QoS,\n",[37,4066,4067],{"class":39,"line":263},[37,4068,4069],{"class":126},"  SubscribeOptions,\n",[37,4071,4072],{"class":39,"line":280},[37,4073,4074],{"class":126},"  EmitOptions,\n",[37,4076,4077],{"class":39,"line":286},[37,4078,4079],{"class":126},"  RoomContext,\n",[37,4081,4082],{"class":39,"line":291},[37,4083,4084],{"class":126},"  LobbyContext,\n",[37,4086,4087],{"class":39,"line":297},[37,4088,4089],{"class":126},"  PaginatedResult,\n",[37,4091,4092,4095,4097],{"class":39,"line":647},[37,4093,4094],{"class":126},"} ",[37,4096,130],{"class":122},[37,4098,133],{"class":54},[37,4100,4101],{"class":39,"line":662},[37,4102,65],{"emptyLinePlaceholder":64},[37,4104,4105],{"class":39,"line":667},[37,4106,4107],{"class":43},"// Type your message data\n",[37,4109,4110,4113,4116],{"class":39,"line":673},[37,4111,4112],{"class":122},"interface",[37,4114,4115],{"class":50}," ChatMessage",[37,4117,260],{"class":126},[37,4119,4120,4123,4125],{"class":39,"line":687},[37,4121,4122],{"class":244},"  text",[37,4124,1572],{"class":122},[37,4126,4127],{"class":150}," string\n",[37,4129,4130,4133,4135],{"class":39,"line":1042},[37,4131,4132],{"class":244},"  sender",[37,4134,1572],{"class":122},[37,4136,4127],{"class":150},[37,4138,4139,4142,4144],{"class":39,"line":1067},[37,4140,4141],{"class":244},"  timestamp",[37,4143,1572],{"class":122},[37,4145,4146],{"class":150}," number\n",[37,4148,4149],{"class":39,"line":1072},[37,4150,4151],{"class":126},"}\n",[37,4153,4154],{"class":39,"line":1077},[37,4155,65],{"emptyLinePlaceholder":64},[37,4157,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186],{"class":39,"line":1099},[37,4159,205],{"class":126},[37,4161,234],{"class":50},[37,4163,160],{"class":126},[37,4165,213],{"class":54},[37,4167,241],{"class":126},[37,4169,245],{"class":244},[37,4171,1572],{"class":122},[37,4173,4115],{"class":50},[37,4175,248],{"class":126},[37,4177,251],{"class":244},[37,4179,1572],{"class":122},[37,4181,1593],{"class":50},[37,4183,254],{"class":126},[37,4185,257],{"class":122},[37,4187,260],{"class":126},[37,4189,4190,4192,4194,4196,4198,4200,4202,4205,4208,4210,4212,4215,4217],{"class":39,"line":1105},[37,4191,266],{"class":126},[37,4193,269],{"class":50},[37,4195,160],{"class":126},[37,4197,1610],{"class":54},[37,4199,245],{"class":126},[37,4201,1056],{"class":54},[37,4203,4204],{"class":126},"sender",[37,4206,4207],{"class":54},"}]: ${",[37,4209,245],{"class":126},[37,4211,1056],{"class":54},[37,4213,4214],{"class":126},"text",[37,4216,2458],{"class":54},[37,4218,166],{"class":126},[37,4220,4221],{"class":39,"line":1129},[37,4222,283],{"class":126},[18,4224,4226],{"id":4225},"error-handling","Error Handling",[23,4228,4229],{},[26,4230,4232],{"className":112,"code":4231,"filename":114,"language":115,"meta":32,"style":32},"// Connection errors\nclient.on('error', (error) => {\n  console.error('Client error:', error.message)\n})\n\n// Subscribe/emit callbacks\nclient.subscribe('topic', (error) => {\n  if (error) {\n    console.error('Subscribe failed:', error.message)\n  }\n})\n\nclient.emit('topic', data, (error) => {\n  if (error) {\n    console.error('Emit failed:', error.message)\n  }\n})\n\n// REST API errors\nimport { NoLagApiError } from '@nolag/js-sdk'\n\ntry {\n  await api.apps.get('invalid-id')\n} catch (error) {\n  if (error instanceof NoLagApiError) {\n    console.error('API Error:', error.statusCode, error.message)\n  }\n}\n",[34,4233,4234,4239,4259,4273,4277,4281,4286,4307,4313,4325,4329,4333,4337,4358,4364,4377,4381,4385,4389,4394,4405,4409,4416,4432,4441,4457,4471,4475],{"__ignoreMap":32},[37,4235,4236],{"class":39,"line":40},[37,4237,4238],{"class":43},"// Connection errors\n",[37,4240,4241,4243,4245,4247,4249,4251,4253,4255,4257],{"class":39,"line":47},[37,4242,205],{"class":126},[37,4244,234],{"class":50},[37,4246,160],{"class":126},[37,4248,974],{"class":54},[37,4250,241],{"class":126},[37,4252,979],{"class":244},[37,4254,254],{"class":126},[37,4256,257],{"class":122},[37,4258,260],{"class":126},[37,4260,4261,4263,4265,4267,4270],{"class":39,"line":61},[37,4262,266],{"class":126},[37,4264,979],{"class":50},[37,4266,160],{"class":126},[37,4268,4269],{"class":54},"'Client error:'",[37,4271,4272],{"class":126},", error.message)\n",[37,4274,4275],{"class":39,"line":68},[37,4276,283],{"class":126},[37,4278,4279],{"class":39,"line":74},[37,4280,65],{"emptyLinePlaceholder":64},[37,4282,4283],{"class":39,"line":85},[37,4284,4285],{"class":43},"// Subscribe/emit callbacks\n",[37,4287,4288,4290,4292,4294,4297,4299,4301,4303,4305],{"class":39,"line":90},[37,4289,205],{"class":126},[37,4291,208],{"class":50},[37,4293,160],{"class":126},[37,4295,4296],{"class":54},"'topic'",[37,4298,241],{"class":126},[37,4300,979],{"class":244},[37,4302,254],{"class":126},[37,4304,257],{"class":122},[37,4306,260],{"class":126},[37,4308,4309,4311],{"class":39,"line":96},[37,4310,1173],{"class":122},[37,4312,1354],{"class":126},[37,4314,4315,4317,4319,4321,4323],{"class":39,"line":196},[37,4316,1182],{"class":126},[37,4318,979],{"class":50},[37,4320,160],{"class":126},[37,4322,1365],{"class":54},[37,4324,4272],{"class":126},[37,4326,4327],{"class":39,"line":202},[37,4328,1222],{"class":126},[37,4330,4331],{"class":39,"line":218},[37,4332,283],{"class":126},[37,4334,4335],{"class":39,"line":223},[37,4336,65],{"emptyLinePlaceholder":64},[37,4338,4339,4341,4343,4345,4347,4350,4352,4354,4356],{"class":39,"line":229},[37,4340,205],{"class":126},[37,4342,302],{"class":50},[37,4344,160],{"class":126},[37,4346,4296],{"class":54},[37,4348,4349],{"class":126},", data, (",[37,4351,979],{"class":244},[37,4353,254],{"class":126},[37,4355,257],{"class":122},[37,4357,260],{"class":126},[37,4359,4360,4362],{"class":39,"line":263},[37,4361,1173],{"class":122},[37,4363,1354],{"class":126},[37,4365,4366,4368,4370,4372,4375],{"class":39,"line":280},[37,4367,1182],{"class":126},[37,4369,979],{"class":50},[37,4371,160],{"class":126},[37,4373,4374],{"class":54},"'Emit failed:'",[37,4376,4272],{"class":126},[37,4378,4379],{"class":39,"line":286},[37,4380,1222],{"class":126},[37,4382,4383],{"class":39,"line":291},[37,4384,283],{"class":126},[37,4386,4387],{"class":39,"line":297},[37,4388,65],{"emptyLinePlaceholder":64},[37,4390,4391],{"class":39,"line":647},[37,4392,4393],{"class":43},"// REST API errors\n",[37,4395,4396,4398,4401,4403],{"class":39,"line":662},[37,4397,123],{"class":122},[37,4399,4400],{"class":126}," { NoLagApiError } ",[37,4402,130],{"class":122},[37,4404,133],{"class":54},[37,4406,4407],{"class":39,"line":667},[37,4408,65],{"emptyLinePlaceholder":64},[37,4410,4411,4414],{"class":39,"line":673},[37,4412,4413],{"class":122},"try",[37,4415,260],{"class":126},[37,4417,4418,4421,4423,4425,4427,4430],{"class":39,"line":687},[37,4419,4420],{"class":122},"  await",[37,4422,3588],{"class":126},[37,4424,3649],{"class":50},[37,4426,160],{"class":126},[37,4428,4429],{"class":54},"'invalid-id'",[37,4431,166],{"class":126},[37,4433,4434,4436,4439],{"class":39,"line":1042},[37,4435,4094],{"class":126},[37,4437,4438],{"class":122},"catch",[37,4440,1354],{"class":126},[37,4442,4443,4445,4448,4451,4454],{"class":39,"line":1067},[37,4444,1173],{"class":122},[37,4446,4447],{"class":126}," (error ",[37,4449,4450],{"class":122},"instanceof",[37,4452,4453],{"class":50}," NoLagApiError",[37,4455,4456],{"class":126},") {\n",[37,4458,4459,4461,4463,4465,4468],{"class":39,"line":1072},[37,4460,1182],{"class":126},[37,4462,979],{"class":50},[37,4464,160],{"class":126},[37,4466,4467],{"class":54},"'API Error:'",[37,4469,4470],{"class":126},", error.statusCode, error.message)\n",[37,4472,4473],{"class":39,"line":1077},[37,4474,1222],{"class":126},[37,4476,4477],{"class":39,"line":1099},[37,4478,4151],{"class":126},[18,4480,4482],{"id":4481},"browser-usage","Browser Usage",[23,4484,4485],{},[26,4486,4491],{"className":4487,"code":4488,"filename":4489,"language":4490,"meta":32,"style":32},"language-html shiki shiki-themes github-light github-dark","\u003Cscript type=\"module\">\n  import { NoLag } from 'https://unpkg.com/@nolag/js-sdk/dist/browser.js'\n\n  const client = NoLag('your-access-token')\n  await client.connect()\n\n  client.subscribe('updates')\n  client.on('updates', (data) => {\n    document.getElementById('output').textContent = JSON.stringify(data)\n  })\n\u003C/script>\n","HTML","html",[34,4492,4493,4511,4523,4527,4543,4553,4557,4571,4591,4619,4624],{"__ignoreMap":32},[37,4494,4495,4497,4501,4503,4505,4508],{"class":39,"line":40},[37,4496,3575],{"class":126},[37,4498,4500],{"class":4499},"s9eBZ","script",[37,4502,3490],{"class":50},[37,4504,410],{"class":126},[37,4506,4507],{"class":54},"\"module\"",[37,4509,4510],{"class":126},">\n",[37,4512,4513,4516,4518,4520],{"class":39,"line":47},[37,4514,4515],{"class":122},"  import",[37,4517,127],{"class":126},[37,4519,130],{"class":122},[37,4521,4522],{"class":54}," 'https://unpkg.com/@nolag/js-sdk/dist/browser.js'\n",[37,4524,4525],{"class":39,"line":61},[37,4526,65],{"emptyLinePlaceholder":64},[37,4528,4529,4531,4533,4535,4537,4539,4541],{"class":39,"line":68},[37,4530,376],{"class":122},[37,4532,151],{"class":150},[37,4534,154],{"class":122},[37,4536,157],{"class":50},[37,4538,160],{"class":126},[37,4540,163],{"class":54},[37,4542,166],{"class":126},[37,4544,4545,4547,4549,4551],{"class":39,"line":74},[37,4546,4420],{"class":122},[37,4548,183],{"class":126},[37,4550,186],{"class":50},[37,4552,189],{"class":126},[37,4554,4555],{"class":39,"line":85},[37,4556,65],{"emptyLinePlaceholder":64},[37,4558,4559,4562,4564,4566,4569],{"class":39,"line":90},[37,4560,4561],{"class":126},"  client.",[37,4563,208],{"class":50},[37,4565,160],{"class":126},[37,4567,4568],{"class":54},"'updates'",[37,4570,166],{"class":126},[37,4572,4573,4575,4577,4579,4581,4583,4585,4587,4589],{"class":39,"line":96},[37,4574,4561],{"class":126},[37,4576,234],{"class":50},[37,4578,160],{"class":126},[37,4580,4568],{"class":54},[37,4582,241],{"class":126},[37,4584,245],{"class":244},[37,4586,254],{"class":126},[37,4588,257],{"class":122},[37,4590,260],{"class":126},[37,4592,4593,4596,4599,4601,4604,4607,4609,4612,4614,4617],{"class":39,"line":196},[37,4594,4595],{"class":126},"    document.",[37,4597,4598],{"class":50},"getElementById",[37,4600,160],{"class":126},[37,4602,4603],{"class":54},"'output'",[37,4605,4606],{"class":126},").textContent ",[37,4608,410],{"class":122},[37,4610,4611],{"class":150}," JSON",[37,4613,1056],{"class":126},[37,4615,4616],{"class":50},"stringify",[37,4618,1661],{"class":126},[37,4620,4621],{"class":39,"line":202},[37,4622,4623],{"class":126},"  })\n",[37,4625,4626,4629,4631],{"class":39,"line":218},[37,4627,4628],{"class":126},"\u003C/",[37,4630,4500],{"class":4499},[37,4632,4510],{"class":126},[18,4634,4636],{"id":4635},"complete-example","Complete Example",[23,4638,4639],{},[26,4640,4642],{"className":112,"code":4641,"filename":114,"language":115,"meta":32,"style":32},"import { NoLag, NoLagApi } from '@nolag/js-sdk'\n\n// Create an actor via REST API (server-side)\nconst api = new NoLagApi('your-api-key')\nconst actor = await api.actors.create({\n  name: 'chat-client',\n  actorType: 'user'\n})\n\n// Connect with the actor's access token (client-side)\nconst client = NoLag(actor.accessToken, {\n  reconnect: true,\n  qos: 1\n})\n\nclient.on('connect', () => {\n  console.log('Connected as:', client.actorId)\n\n  // Set presence\n  client.setPresence({ username: 'Alice', status: 'online' })\n\n  // Subscribe to chat room\n  const room = client.setApp('chat').setRoom('general')\n  room.subscribe('messages')\n\n  room.on('messages', (data, meta) => {\n    console.log('Message:', data, meta.isReplay ? '(replay)' : '(live)')\n  })\n})\n\nclient.on('presence:join', (actor) => {\n  console.log(`${actor.presence.username} joined`)\n})\n\nclient.on('disconnect', (reason) => {\n  console.log('Disconnected:', reason)\n})\n\nclient.on('error', (error) => {\n  console.error('Error:', error)\n})\n\nawait client.connect()\n\n// Send a message\nconst room = client.setApp('chat').setRoom('general')\nroom.emit('messages', { text: 'Hello everyone!' })\n",[34,4643,4644,4655,4659,4664,4682,4698,4707,4714,4718,4722,4727,4740,4748,4755,4759,4763,4779,4793,4797,4802,4820,4824,4829,4855,4868,4872,4896,4923,4927,4931,4935,4955,4979,4983,4987,5007,5019,5023,5027,5047,5059,5063,5068,5079,5084,5090,5117],{"__ignoreMap":32},[37,4645,4646,4648,4651,4653],{"class":39,"line":40},[37,4647,123],{"class":122},[37,4649,4650],{"class":126}," { NoLag, NoLagApi } ",[37,4652,130],{"class":122},[37,4654,133],{"class":54},[37,4656,4657],{"class":39,"line":47},[37,4658,65],{"emptyLinePlaceholder":64},[37,4660,4661],{"class":39,"line":61},[37,4662,4663],{"class":43},"// Create an actor via REST API (server-side)\n",[37,4665,4666,4668,4670,4672,4674,4676,4678,4680],{"class":39,"line":68},[37,4667,147],{"class":122},[37,4669,3508],{"class":150},[37,4671,154],{"class":122},[37,4673,3513],{"class":122},[37,4675,3516],{"class":50},[37,4677,160],{"class":126},[37,4679,3521],{"class":54},[37,4681,166],{"class":126},[37,4683,4684,4686,4688,4690,4692,4694,4696],{"class":39,"line":74},[37,4685,147],{"class":122},[37,4687,3900],{"class":150},[37,4689,154],{"class":122},[37,4691,384],{"class":122},[37,4693,3865],{"class":126},[37,4695,3671],{"class":50},[37,4697,2008],{"class":126},[37,4699,4700,4702,4705],{"class":39,"line":85},[37,4701,3793],{"class":126},[37,4703,4704],{"class":54},"'chat-client'",[37,4706,2019],{"class":126},[37,4708,4709,4711],{"class":39,"line":90},[37,4710,3927],{"class":126},[37,4712,4713],{"class":54},"'user'\n",[37,4715,4716],{"class":39,"line":96},[37,4717,283],{"class":126},[37,4719,4720],{"class":39,"line":196},[37,4721,65],{"emptyLinePlaceholder":64},[37,4723,4724],{"class":39,"line":202},[37,4725,4726],{"class":43},"// Connect with the actor's access token (client-side)\n",[37,4728,4729,4731,4733,4735,4737],{"class":39,"line":218},[37,4730,147],{"class":122},[37,4732,151],{"class":150},[37,4734,154],{"class":122},[37,4736,157],{"class":50},[37,4738,4739],{"class":126},"(actor.accessToken, {\n",[37,4741,4742,4744,4746],{"class":39,"line":223},[37,4743,516],{"class":126},[37,4745,519],{"class":150},[37,4747,2019],{"class":126},[37,4749,4750,4752],{"class":39,"line":229},[37,4751,553],{"class":126},[37,4753,4754],{"class":150},"1\n",[37,4756,4757],{"class":39,"line":263},[37,4758,283],{"class":126},[37,4760,4761],{"class":39,"line":280},[37,4762,65],{"emptyLinePlaceholder":64},[37,4764,4765,4767,4769,4771,4773,4775,4777],{"class":39,"line":286},[37,4766,205],{"class":126},[37,4768,234],{"class":50},[37,4770,160],{"class":126},[37,4772,838],{"class":54},[37,4774,841],{"class":126},[37,4776,257],{"class":122},[37,4778,260],{"class":126},[37,4780,4781,4783,4785,4787,4790],{"class":39,"line":291},[37,4782,266],{"class":126},[37,4784,269],{"class":50},[37,4786,160],{"class":126},[37,4788,4789],{"class":54},"'Connected as:'",[37,4791,4792],{"class":126},", client.actorId)\n",[37,4794,4795],{"class":39,"line":297},[37,4796,65],{"emptyLinePlaceholder":64},[37,4798,4799],{"class":39,"line":647},[37,4800,4801],{"class":43},"  // Set presence\n",[37,4803,4804,4806,4808,4811,4813,4816,4818],{"class":39,"line":662},[37,4805,4561],{"class":126},[37,4807,2005],{"class":50},[37,4809,4810],{"class":126},"({ username: ",[37,4812,2016],{"class":54},[37,4814,4815],{"class":126},", status: ",[37,4817,2027],{"class":54},[37,4819,315],{"class":126},[37,4821,4822],{"class":39,"line":667},[37,4823,65],{"emptyLinePlaceholder":64},[37,4825,4826],{"class":39,"line":673},[37,4827,4828],{"class":43},"  // Subscribe to chat room\n",[37,4830,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849,4851,4853],{"class":39,"line":687},[37,4832,376],{"class":122},[37,4834,1968],{"class":150},[37,4836,154],{"class":122},[37,4838,183],{"class":126},[37,4840,1975],{"class":50},[37,4842,160],{"class":126},[37,4844,1980],{"class":54},[37,4846,1983],{"class":126},[37,4848,1986],{"class":50},[37,4850,160],{"class":126},[37,4852,1991],{"class":54},[37,4854,166],{"class":126},[37,4856,4857,4860,4862,4864,4866],{"class":39,"line":1042},[37,4858,4859],{"class":126},"  room.",[37,4861,208],{"class":50},[37,4863,160],{"class":126},[37,4865,2668],{"class":54},[37,4867,166],{"class":126},[37,4869,4870],{"class":39,"line":1067},[37,4871,65],{"emptyLinePlaceholder":64},[37,4873,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894],{"class":39,"line":1072},[37,4875,4859],{"class":126},[37,4877,234],{"class":50},[37,4879,160],{"class":126},[37,4881,2668],{"class":54},[37,4883,241],{"class":126},[37,4885,245],{"class":244},[37,4887,248],{"class":126},[37,4889,251],{"class":244},[37,4891,254],{"class":126},[37,4893,257],{"class":122},[37,4895,260],{"class":126},[37,4897,4898,4900,4902,4904,4906,4909,4912,4915,4918,4921],{"class":39,"line":1077},[37,4899,1182],{"class":126},[37,4901,269],{"class":50},[37,4903,160],{"class":126},[37,4905,2713],{"class":54},[37,4907,4908],{"class":126},", data, meta.isReplay ",[37,4910,4911],{"class":122},"?",[37,4913,4914],{"class":54}," '(replay)'",[37,4916,4917],{"class":122}," :",[37,4919,4920],{"class":54}," '(live)'",[37,4922,166],{"class":126},[37,4924,4925],{"class":39,"line":1099},[37,4926,4623],{"class":126},[37,4928,4929],{"class":39,"line":1105},[37,4930,283],{"class":126},[37,4932,4933],{"class":39,"line":1129},[37,4934,65],{"emptyLinePlaceholder":64},[37,4936,4937,4939,4941,4943,4945,4947,4949,4951,4953],{"class":39,"line":1134},[37,4938,205],{"class":126},[37,4940,234],{"class":50},[37,4942,160],{"class":126},[37,4944,2139],{"class":54},[37,4946,241],{"class":126},[37,4948,2144],{"class":244},[37,4950,254],{"class":126},[37,4952,257],{"class":122},[37,4954,260],{"class":126},[37,4956,4957,4959,4961,4963,4965,4967,4969,4971,4973,4975,4977],{"class":39,"line":1139},[37,4958,266],{"class":126},[37,4960,269],{"class":50},[37,4962,160],{"class":126},[37,4964,2161],{"class":54},[37,4966,2144],{"class":126},[37,4968,1056],{"class":54},[37,4970,2168],{"class":126},[37,4972,1056],{"class":54},[37,4974,2173],{"class":126},[37,4976,2176],{"class":54},[37,4978,166],{"class":126},[37,4980,4981],{"class":39,"line":1145},[37,4982,283],{"class":126},[37,4984,4985],{"class":39,"line":1170},[37,4986,65],{"emptyLinePlaceholder":64},[37,4988,4989,4991,4993,4995,4997,4999,5001,5003,5005],{"class":39,"line":1179},[37,4990,205],{"class":126},[37,4992,234],{"class":50},[37,4994,160],{"class":126},[37,4996,882],{"class":54},[37,4998,241],{"class":126},[37,5000,887],{"class":244},[37,5002,254],{"class":126},[37,5004,257],{"class":122},[37,5006,260],{"class":126},[37,5008,5009,5011,5013,5015,5017],{"class":39,"line":1194},[37,5010,266],{"class":126},[37,5012,269],{"class":50},[37,5014,160],{"class":126},[37,5016,904],{"class":54},[37,5018,907],{"class":126},[37,5020,5021],{"class":39,"line":1205},[37,5022,283],{"class":126},[37,5024,5025],{"class":39,"line":1219},[37,5026,65],{"emptyLinePlaceholder":64},[37,5028,5029,5031,5033,5035,5037,5039,5041,5043,5045],{"class":39,"line":1225},[37,5030,205],{"class":126},[37,5032,234],{"class":50},[37,5034,160],{"class":126},[37,5036,974],{"class":54},[37,5038,241],{"class":126},[37,5040,979],{"class":244},[37,5042,254],{"class":126},[37,5044,257],{"class":122},[37,5046,260],{"class":126},[37,5048,5049,5051,5053,5055,5057],{"class":39,"line":3958},[37,5050,266],{"class":126},[37,5052,979],{"class":50},[37,5054,160],{"class":126},[37,5056,996],{"class":54},[37,5058,999],{"class":126},[37,5060,5061],{"class":39,"line":3975},[37,5062,283],{"class":126},[37,5064,5066],{"class":39,"line":5065},42,[37,5067,65],{"emptyLinePlaceholder":64},[37,5069,5071,5073,5075,5077],{"class":39,"line":5070},43,[37,5072,180],{"class":122},[37,5074,183],{"class":126},[37,5076,186],{"class":50},[37,5078,189],{"class":126},[37,5080,5082],{"class":39,"line":5081},44,[37,5083,65],{"emptyLinePlaceholder":64},[37,5085,5087],{"class":39,"line":5086},45,[37,5088,5089],{"class":43},"// Send a message\n",[37,5091,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115],{"class":39,"line":5092},46,[37,5094,147],{"class":122},[37,5096,1968],{"class":150},[37,5098,154],{"class":122},[37,5100,183],{"class":126},[37,5102,1975],{"class":50},[37,5104,160],{"class":126},[37,5106,1980],{"class":54},[37,5108,1983],{"class":126},[37,5110,1986],{"class":50},[37,5112,160],{"class":126},[37,5114,1991],{"class":54},[37,5116,166],{"class":126},[37,5118,5120,5122,5124,5126,5128,5130,5133],{"class":39,"line":5119},47,[37,5121,2002],{"class":126},[37,5123,302],{"class":50},[37,5125,160],{"class":126},[37,5127,2668],{"class":54},[37,5129,309],{"class":126},[37,5131,5132],{"class":54},"'Hello everyone!'",[37,5134,315],{"class":126},[18,5136,5138],{"id":5137},"next-steps","Next Steps",[5140,5141,5142,5149,5154,5158,5163,5169],"ul",{},[5143,5144,5145],"li",{},[324,5146,5148],{"href":5147},"/docs/concepts/topics","Learn about Topics",[5143,5150,5151],{},[324,5152,1946],{"href":5153},"/docs/concepts/presence",[5143,5155,5156],{},[324,5157,2294],{"href":2601},[5143,5159,5160],{},[324,5161,3246],{"href":5162},"/docs/concepts/qos",[5143,5164,5165],{},[324,5166,5168],{"href":5167},"/docs/api-reference","REST API Reference",[5143,5170,5171],{},[324,5172,5174],{"href":5173},"/docs/guides/chat-app","Build a Chat App",[5176,5177,5178],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .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}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":32,"searchDepth":47,"depth":47,"links":5180},[5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5197,5198,5199,5200,5201,5202,5203,5204],{"id":20,"depth":47,"text":21},{"id":106,"depth":47,"text":107},{"id":318,"depth":47,"text":319},{"id":467,"depth":47,"text":468},{"id":692,"depth":47,"text":693},{"id":814,"depth":47,"text":815},{"id":1230,"depth":47,"text":1231},{"id":1442,"depth":47,"text":1443},{"id":1711,"depth":47,"text":1712},{"id":1945,"depth":47,"text":1946},{"id":2293,"depth":47,"text":2294},{"id":2606,"depth":47,"text":2607},{"id":2790,"depth":47,"text":2791},{"id":2874,"depth":47,"text":2875,"children":5195},[5196],{"id":3033,"depth":61,"text":3034},{"id":3245,"depth":47,"text":3246},{"id":3360,"depth":47,"text":3361},{"id":3461,"depth":47,"text":3462},{"id":3987,"depth":47,"text":3988},{"id":4225,"depth":47,"text":4226},{"id":4481,"depth":47,"text":4482},{"id":4635,"depth":47,"text":4636},{"id":5137,"depth":47,"text":5138},"Complete reference for the @nolag/js-sdk SDK. Connect, subscribe, publish, and manage real-time messaging in JavaScript and TypeScript.","md",{},"/docs/sdks/javascript",{"title":5,"description":5205},"docs/sdks/javascript","nYmcwjabZGDHNOxrpuU6C2vaX_6K0m-ZiGbhDg0Ghds",1788160344632]