[{"data":1,"prerenderedAt":853},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fpayloads":116,"\u002Fguides\u002Fpayloads-surround":848},[4,23,61,82,108,112],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Guides","i-lucide-book-open","\u002Fguides","2.guides",[29,33,37,41,45,49,53,57],{"title":30,"path":31,"stem":32},"Connection & config","\u002Fguides\u002Fconnection","2.guides\u002F1.connection",{"title":34,"path":35,"stem":36},"Publish, RPC, history, presence","\u002Fguides\u002Foperations","2.guides\u002F2.operations",{"title":38,"path":39,"stem":40},"Events","\u002Fguides\u002Fevents","2.guides\u002F3.events",{"title":42,"path":43,"stem":44},"Subscriptions","\u002Fguides\u002Fsubscriptions","2.guides\u002F4.subscriptions",{"title":46,"path":47,"stem":48},"Tokens","\u002Fguides\u002Ftokens","2.guides\u002F5.tokens",{"title":50,"path":51,"stem":52},"Payloads (base64 vs rawJson)","\u002Fguides\u002Fpayloads","2.guides\u002F6.payloads",{"title":54,"path":55,"stem":56},"Rust backend","\u002Fguides\u002Frust","2.guides\u002F7.rust",{"title":58,"path":59,"stem":60},"Permissions","\u002Fguides\u002Fpermissions","2.guides\u002F8.permissions",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":22},"API reference","i-lucide-file-code","\u002Freference","3.reference",[67,71,75,79],{"title":68,"path":69,"stem":70},"JavaScript API","\u002Freference\u002Fjavascript-api","3.reference\u002F1.javascript-api",{"title":72,"path":73,"stem":74},"Types","\u002Freference\u002Ftypes","3.reference\u002F2.types",{"title":76,"path":77,"stem":78},"Tauri commands","\u002Freference\u002Fcommands","3.reference\u002F3.commands",{"title":58,"path":80,"stem":81},"\u002Freference\u002Fpermissions","3.reference\u002F4.permissions",{"title":83,"icon":84,"path":85,"stem":86,"children":87,"page":22},"Platforms","i-lucide-monitor-smartphone","\u002Fplatforms","4.platforms",[88,92,96,100,104],{"title":89,"path":90,"stem":91},"Overview","\u002Fplatforms\u002Foverview","4.platforms\u002F1.overview",{"title":93,"path":94,"stem":95},"Desktop","\u002Fplatforms\u002Fdesktop","4.platforms\u002F2.desktop",{"title":97,"path":98,"stem":99},"Android","\u002Fplatforms\u002Fandroid","4.platforms\u002F3.android",{"title":101,"path":102,"stem":103},"iOS","\u002Fplatforms\u002Fios","4.platforms\u002F4.ios",{"title":105,"path":106,"stem":107},"Centrifugo server","\u002Fplatforms\u002Fserver","4.platforms\u002F5.server",{"title":109,"path":110,"stem":111},"Deprecations","\u002Fdeprecations","5.deprecations",{"title":113,"path":114,"stem":115},"Changelog","\u002Fchangelog","9.changelog",{"id":117,"title":50,"body":118,"description":842,"extension":843,"generated":22,"links":844,"meta":845,"navigation":282,"path":51,"seo":846,"stem":52,"__hash__":847},"docs\u002F2.guides\u002F6.payloads.md",{"type":119,"value":120,"toc":837},"minimark",[121,125,130,153,206,221,505,509,535,614,625,630,686,696,833],[122,123,124],"p",{},"Centrifugo payloads are bytes. To cross the Tauri bridge as strings, the plugin uses base64 by\ndefault and accepts raw JSON as an option.",[126,127,129],"h2",{"id":128},"sending","Sending",[122,131,132,136,137,140,141,144,145,148,149,152],{},[133,134,135],"code",{},"publish",", ",[133,138,139],{},"rpc"," and ",[133,142,143],{},"send"," take ",[133,146,147],{},"data"," as a string plus an optional ",[133,150,151],{},"dataEncoding",":",[154,155,156,175],"table",{},[157,158,159],"thead",{},[160,161,162,167,172],"tr",{},[163,164,165],"th",{},[133,166,151],{},[163,168,169,171],{},[133,170,147],{}," must be",[163,173,174],{},"Sent to the server",[176,177,178,193],"tbody",{},[160,179,180,187,190],{},[181,182,183,186],"td",{},[133,184,185],{},"'base64'"," (default)",[181,188,189],{},"base64",[181,191,192],{},"the decoded bytes",[160,194,195,200,203],{},[181,196,197],{},[133,198,199],{},"'rawJson'",[181,201,202],{},"valid JSON text",[181,204,205],{},"the text as is",[122,207,208,209,212,213,216,217,220],{},"Invalid base64 rejects with ",[133,210,211],{},"Base64Error",", invalid JSON with ",[133,214,215],{},"SerializationError",", before\nanything is sent. With the JSON protocol (",[133,218,219],{},"useProtobuf: false",") the server expects JSON data, so\nsend JSON either way; with Protobuf any bytes work.",[222,223,228],"pre",{"className":224,"code":225,"language":226,"meta":227,"style":227},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { publish, helpers, utils } from \"tauri-plugin-centrifugo-api\";\n\nawait publish({ channel: \"a\", data: utils.encodeJson({ x: 1 }) });                 \u002F\u002F base64\nawait publish({ channel: \"a\", data: JSON.stringify({ x: 1 }), dataEncoding: \"rawJson\" });\nawait helpers.publishJson(\"a\", { x: 1 });     \u002F\u002F same as the first line\nawait helpers.publishRawJson(\"a\", { x: 1 });  \u002F\u002F same as the second line\n","ts","",[133,229,230,277,284,358,427,466],{"__ignoreMap":227},[231,232,235,239,243,247,250,253,255,258,261,264,267,271,274],"span",{"class":233,"line":234},"line",1,[231,236,238],{"class":237},"s7zQu","import",[231,240,242],{"class":241},"sMK4o"," {",[231,244,246],{"class":245},"sTEyZ"," publish",[231,248,249],{"class":241},",",[231,251,252],{"class":245}," helpers",[231,254,249],{"class":241},[231,256,257],{"class":245}," utils",[231,259,260],{"class":241}," }",[231,262,263],{"class":237}," from",[231,265,266],{"class":241}," \"",[231,268,270],{"class":269},"sfazB","tauri-plugin-centrifugo-api",[231,272,273],{"class":241},"\"",[231,275,276],{"class":241},";\n",[231,278,280],{"class":233,"line":279},2,[231,281,283],{"emptyLinePlaceholder":282},true,"\n",[231,285,287,290,293,296,299,303,305,307,310,312,314,317,319,321,324,327,329,331,334,336,340,342,345,348,351,354],{"class":233,"line":286},3,[231,288,289],{"class":237},"await",[231,291,246],{"class":292},"s2Zo4",[231,294,295],{"class":245},"(",[231,297,298],{"class":241},"{",[231,300,302],{"class":301},"swJcz"," channel",[231,304,152],{"class":241},[231,306,266],{"class":241},[231,308,309],{"class":269},"a",[231,311,273],{"class":241},[231,313,249],{"class":241},[231,315,316],{"class":301}," data",[231,318,152],{"class":241},[231,320,257],{"class":245},[231,322,323],{"class":241},".",[231,325,326],{"class":292},"encodeJson",[231,328,295],{"class":245},[231,330,298],{"class":241},[231,332,333],{"class":301}," x",[231,335,152],{"class":241},[231,337,339],{"class":338},"sbssI"," 1",[231,341,260],{"class":241},[231,343,344],{"class":245},") ",[231,346,347],{"class":241},"}",[231,349,350],{"class":245},")",[231,352,353],{"class":241},";",[231,355,357],{"class":356},"sHwdD","                 \u002F\u002F base64\n",[231,359,361,363,365,367,369,371,373,375,377,379,381,383,385,388,390,393,395,397,399,401,403,405,407,409,412,414,416,419,421,423,425],{"class":233,"line":360},4,[231,362,289],{"class":237},[231,364,246],{"class":292},[231,366,295],{"class":245},[231,368,298],{"class":241},[231,370,302],{"class":301},[231,372,152],{"class":241},[231,374,266],{"class":241},[231,376,309],{"class":269},[231,378,273],{"class":241},[231,380,249],{"class":241},[231,382,316],{"class":301},[231,384,152],{"class":241},[231,386,387],{"class":245}," JSON",[231,389,323],{"class":241},[231,391,392],{"class":292},"stringify",[231,394,295],{"class":245},[231,396,298],{"class":241},[231,398,333],{"class":301},[231,400,152],{"class":241},[231,402,339],{"class":338},[231,404,260],{"class":241},[231,406,350],{"class":245},[231,408,249],{"class":241},[231,410,411],{"class":301}," dataEncoding",[231,413,152],{"class":241},[231,415,266],{"class":241},[231,417,418],{"class":269},"rawJson",[231,420,273],{"class":241},[231,422,260],{"class":241},[231,424,350],{"class":245},[231,426,276],{"class":241},[231,428,430,432,434,436,439,441,443,445,447,449,451,453,455,457,459,461,463],{"class":233,"line":429},5,[231,431,289],{"class":237},[231,433,252],{"class":245},[231,435,323],{"class":241},[231,437,438],{"class":292},"publishJson",[231,440,295],{"class":245},[231,442,273],{"class":241},[231,444,309],{"class":269},[231,446,273],{"class":241},[231,448,249],{"class":241},[231,450,242],{"class":241},[231,452,333],{"class":301},[231,454,152],{"class":241},[231,456,339],{"class":338},[231,458,260],{"class":241},[231,460,350],{"class":245},[231,462,353],{"class":241},[231,464,465],{"class":356},"     \u002F\u002F same as the first line\n",[231,467,469,471,473,475,478,480,482,484,486,488,490,492,494,496,498,500,502],{"class":233,"line":468},6,[231,470,289],{"class":237},[231,472,252],{"class":245},[231,474,323],{"class":241},[231,476,477],{"class":292},"publishRawJson",[231,479,295],{"class":245},[231,481,273],{"class":241},[231,483,309],{"class":269},[231,485,273],{"class":241},[231,487,249],{"class":241},[231,489,242],{"class":241},[231,491,333],{"class":301},[231,493,152],{"class":241},[231,495,339],{"class":338},[231,497,260],{"class":241},[231,499,350],{"class":245},[231,501,353],{"class":241},[231,503,504],{"class":356},"  \u002F\u002F same as the second line\n",[126,506,508],{"id":507},"receiving","Receiving",[122,510,511,136,514,140,517,520,521,523,524,527,528,530,531,534],{},[133,512,513],{},"publication",[133,515,516],{},"server_publication",[133,518,519],{},"history()"," items always carry ",[133,522,147],{}," in base64\n(",[133,525,526],{},"dataEncoding: 'base64'",") and, when the bytes are valid JSON, also ",[133,529,418],{}," with the parsed\nvalue. ",[133,532,533],{},"rpc()"," resolves to base64.",[222,536,538],{"className":224,"code":537,"language":226,"meta":227,"style":227},"await onPublication(({ payload }) => {\n  const value = payload.rawJson ?? utils.decode(payload.data);\n});\n",[133,539,540,566,606],{"__ignoreMap":227},[231,541,542,544,547,549,552,556,559,563],{"class":233,"line":234},[231,543,289],{"class":237},[231,545,546],{"class":292}," onPublication",[231,548,295],{"class":245},[231,550,551],{"class":241},"({",[231,553,555],{"class":554},"sHdIc"," payload",[231,557,558],{"class":241}," })",[231,560,562],{"class":561},"spNyl"," =>",[231,564,565],{"class":241}," {\n",[231,567,568,571,574,577,579,581,583,586,588,590,593,595,598,600,602,604],{"class":233,"line":279},[231,569,570],{"class":561},"  const",[231,572,573],{"class":245}," value",[231,575,576],{"class":241}," =",[231,578,555],{"class":245},[231,580,323],{"class":241},[231,582,418],{"class":245},[231,584,585],{"class":241}," ??",[231,587,257],{"class":245},[231,589,323],{"class":241},[231,591,592],{"class":292},"decode",[231,594,295],{"class":301},[231,596,597],{"class":245},"payload",[231,599,323],{"class":241},[231,601,147],{"class":245},[231,603,350],{"class":301},[231,605,276],{"class":241},[231,607,608,610,612],{"class":233,"line":286},[231,609,347],{"class":241},[231,611,350],{"class":245},[231,613,276],{"class":241},[122,615,616,619,620,624],{},[133,617,618],{},"onMessage"," and the other ",[309,621,623],{"href":622},"\u002Fguides\u002Fevents#decoded-message-helpers","decoded message helpers"," do\nthis for you.",[126,626,628],{"id":627},"utils",[133,629,627],{},[154,631,632,642],{},[157,633,634],{},[160,635,636,639],{},[163,637,638],{},"Function",[163,640,641],{},"Does",[176,643,644,663],{},[160,645,646,655],{},[181,647,648,651,652],{},[133,649,650],{},"utils.encode(text)"," \u002F ",[133,653,654],{},"utils.decode(b64)",[181,656,657,651,660],{},[133,658,659],{},"btoa",[133,661,662],{},"atob",[160,664,665,673],{},[181,666,667,651,670],{},[133,668,669],{},"utils.encodeJson(value)",[133,671,672],{},"utils.decodeJson(b64)",[181,674,675,678,679,651,681,678,683],{},[133,676,677],{},"JSON.stringify"," + ",[133,680,659],{},[133,682,662],{},[133,684,685],{},"JSON.parse",[122,687,688,690,691,693,694,152],{},[133,689,659],{},"\u002F",[133,692,662],{}," work on Latin-1 strings only. For text with other characters encode it as UTF-8\nfirst, or use ",[133,695,418],{},[222,697,699],{"className":224,"code":698,"language":226,"meta":227,"style":227},"const b64 = btoa(String.fromCharCode(...new TextEncoder().encode(\"привет\")));\nawait publish({ channel: \"a\", data: b64 });\n\nawait helpers.publishRawJson(\"a\", { text: \"привет\" }); \u002F\u002F no base64 step at all\n",[133,700,701,753,787,791],{"__ignoreMap":227},[231,702,703,706,709,712,715,718,720,723,725,728,731,734,736,739,741,743,746,748,751],{"class":233,"line":234},[231,704,705],{"class":561},"const",[231,707,708],{"class":245}," b64 ",[231,710,711],{"class":241},"=",[231,713,714],{"class":292}," btoa",[231,716,717],{"class":245},"(String",[231,719,323],{"class":241},[231,721,722],{"class":292},"fromCharCode",[231,724,295],{"class":245},[231,726,727],{"class":241},"...new",[231,729,730],{"class":292}," TextEncoder",[231,732,733],{"class":245},"()",[231,735,323],{"class":241},[231,737,738],{"class":292},"encode",[231,740,295],{"class":245},[231,742,273],{"class":241},[231,744,745],{"class":269},"привет",[231,747,273],{"class":241},[231,749,750],{"class":245},")))",[231,752,276],{"class":241},[231,754,755,757,759,761,763,765,767,769,771,773,775,777,779,781,783,785],{"class":233,"line":279},[231,756,289],{"class":237},[231,758,246],{"class":292},[231,760,295],{"class":245},[231,762,298],{"class":241},[231,764,302],{"class":301},[231,766,152],{"class":241},[231,768,266],{"class":241},[231,770,309],{"class":269},[231,772,273],{"class":241},[231,774,249],{"class":241},[231,776,316],{"class":301},[231,778,152],{"class":241},[231,780,708],{"class":245},[231,782,347],{"class":241},[231,784,350],{"class":245},[231,786,276],{"class":241},[231,788,789],{"class":233,"line":286},[231,790,283],{"emptyLinePlaceholder":282},[231,792,793,795,797,799,801,803,805,807,809,811,813,816,818,820,822,824,826,828,830],{"class":233,"line":360},[231,794,289],{"class":237},[231,796,252],{"class":245},[231,798,323],{"class":241},[231,800,477],{"class":292},[231,802,295],{"class":245},[231,804,273],{"class":241},[231,806,309],{"class":269},[231,808,273],{"class":241},[231,810,249],{"class":241},[231,812,242],{"class":241},[231,814,815],{"class":301}," text",[231,817,152],{"class":241},[231,819,266],{"class":241},[231,821,745],{"class":269},[231,823,273],{"class":241},[231,825,260],{"class":241},[231,827,350],{"class":245},[231,829,353],{"class":241},[231,831,832],{"class":356}," \u002F\u002F no base64 step at all\n",[834,835,836],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":227,"searchDepth":279,"depth":286,"links":838},[839,840,841],{"id":128,"depth":279,"text":129},{"id":507,"depth":279,"text":508},{"id":627,"depth":279,"text":627},"How data crosses the Tauri bridge - base64 by default, raw JSON as an option.","md",null,{},{"title":50,"description":842},"C8wWdhwXEjfoXEEMR4R2mtfUYKcxiFHxe-zeWP8fSlg",[849,851],{"title":46,"path":47,"stem":48,"description":850,"children":-1},"Connection and subscription JWTs - token vs requestToken, need_token \u002F provideToken, need_sub_token \u002F subRefresh.",{"title":54,"path":55,"stem":56,"description":852,"children":-1},"Use the plugin's client from Rust, or the centrifuge-client SDK directly.",1794166801301]