[{"data":1,"prerenderedAt":856},["ShallowReactive",2],{"docs-nav":3,"docs-\u002Fdocs\u002Fsdk\u002Fpackage":70},[4,10,14,19,23,26,29,33,36,40,43,47,50,54,58,62,66],{"title":5,"path":6,"order":7,"section":8,"group":9},"Concepts","\u002Fdocs\u002Fapi\u002Fconcepts",1,"api",null,{"title":11,"path":12,"order":7,"section":13,"group":9},"Introduction","\u002Fdocs","general",{"title":15,"path":16,"order":7,"section":17,"group":18},"Usage","\u002Fdocs\u002Fsdk\u002Fusage","sdk","Script",{"title":20,"path":21,"order":22,"section":8,"group":9},"\u002Fv1\u002Fme","\u002Fdocs\u002Fapi\u002Fme",2,{"title":24,"path":25,"order":22,"section":13,"group":9},"Getting started","\u002Fdocs\u002Fgetting-started",{"title":24,"path":27,"order":22,"section":17,"group":28},"\u002Fdocs\u002Fsdk\u002Fpackage","Package",{"title":30,"path":31,"order":32,"section":8,"group":9},"\u002Fv1\u002Fsubscribe","\u002Fdocs\u002Fapi\u002Fsubscribe",3,{"title":34,"path":35,"order":32,"section":17,"group":28},"Browser client","\u002Fdocs\u002Fsdk\u002Fpackage\u002Fclient",{"title":37,"path":38,"order":39,"section":8,"group":9},"\u002Fv1\u002Funsubscribe","\u002Fdocs\u002Fapi\u002Funsubscribe",4,{"title":41,"path":42,"order":39,"section":17,"group":28},"Server client","\u002Fdocs\u002Fsdk\u002Fpackage\u002Fserver",{"title":44,"path":45,"order":46,"section":8,"group":9},"\u002Fv1\u002Fevents","\u002Fdocs\u002Fapi\u002Fevents",5,{"title":48,"path":49,"order":46,"section":17,"group":28},"Types","\u002Fdocs\u002Fsdk\u002Fpackage\u002Ftypes",{"title":51,"path":52,"order":53,"section":8,"group":9},"\u002Fv1\u002Fsend","\u002Fdocs\u002Fapi\u002Fsend",6,{"title":55,"path":56,"order":57,"section":8,"group":9},"\u002Fv1\u002Fbroadcasts","\u002Fdocs\u002Fapi\u002Fbroadcasts",7,{"title":59,"path":60,"order":61,"section":8,"group":9},"\u002Fv1\u002Fgroups","\u002Fdocs\u002Fapi\u002Fgroups",8,{"title":63,"path":64,"order":65,"section":8,"group":9},"\u002Fv1\u002Fsubscribers","\u002Fdocs\u002Fapi\u002Fsubscribers",9,{"title":67,"path":68,"order":69,"section":8,"group":9},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks",10,{"id":71,"title":24,"apiModule":9,"body":72,"description":849,"extension":850,"generated":851,"group":28,"meta":852,"navigation":193,"order":22,"path":27,"section":17,"seo":853,"stem":854,"__hash__":855},"docs\u002Fdocs\u002Fsdk\u002Fpackage\u002Findex.md",{"type":73,"value":74,"toc":844},"minimark",[75,80,88,114,121,136,141,144,442,467,471,477,804,810,814,840],[76,77,79],"h1",{"id":78},"the-litepushsdk-package","The @litepush\u002Fsdk package",[81,82,83,87],"p",{},[84,85,86],"code",{},"@litepush\u002Fsdk"," is the npm package for LitePush. One install gives you two\nclients:",[89,90,91,105],"ul",{},[92,93,94,95,99,100,104],"li",{},"a ",[96,97,98],"strong",{},"browser client"," (",[101,102,103],"a",{"href":35},"LitePushClient",") for subscribing visitors to push, and",[92,106,94,107,99,110,113],{},[96,108,109],{},"server client",[101,111,112],{"href":42},"LitePush",") for sending broadcasts and managing groups\u002Fsubscribers from your backend.",[81,115,116,117,120],{},"Prefer zero build steps? The ",[101,118,119],{"href":16},"\u003Cscript> tag"," drop-in does the\nbrowser half without installing anything.",[122,123,128],"pre",{"className":124,"code":125,"language":126,"meta":127,"style":127},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @litepush\u002Fsdk\n","sh","",[84,129,130],{"__ignoreMap":127},[131,132,134],"span",{"class":133,"line":7},"line",[131,135,125],{},[137,138,140],"h2",{"id":139},"client-side-browser","Client side (browser)",[81,142,143],{},"Construct a client with your project ID + VAPID public key, then subscribe the\nvisitor from a user gesture (click\u002Ftap). The client is side-effect-free, so it's\nsafe to import under SSR.",[122,145,149],{"className":146,"code":147,"language":148,"meta":127,"style":127},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { LitePushClient, canSubscribe } from \"@litepush\u002Fsdk\";\n\nconst lp = new LitePushClient({\n  projectId: \"prj_YOUR_PROJECT_ID\",\n  vapidKey: \"YOUR_VAPID_PUBLIC_KEY\",\n});\n\ndocument.getElementById(\"enable-notifs\")?.addEventListener(\"click\", async () => {\n  if (!canSubscribe()) return; \u002F\u002F unsupported browser\n  const result = await lp.subscribe({ userId: currentUser.id });\n  if (result) console.log(\"subscribed!\", result.id);\n});\n","ts",[84,150,151,189,195,219,238,254,264,268,319,345,391,433],{"__ignoreMap":127},[131,152,153,157,161,165,168,171,174,177,180,183,186],{"class":133,"line":7},[131,154,156],{"class":155},"s7zQu","import",[131,158,160],{"class":159},"sMK4o"," {",[131,162,164],{"class":163},"sTEyZ"," LitePushClient",[131,166,167],{"class":159},",",[131,169,170],{"class":163}," canSubscribe",[131,172,173],{"class":159}," }",[131,175,176],{"class":155}," from",[131,178,179],{"class":159}," \"",[131,181,86],{"class":182},"sfazB",[131,184,185],{"class":159},"\"",[131,187,188],{"class":159},";\n",[131,190,191],{"class":133,"line":22},[131,192,194],{"emptyLinePlaceholder":193},true,"\n",[131,196,197,201,204,207,210,213,216],{"class":133,"line":32},[131,198,200],{"class":199},"spNyl","const",[131,202,203],{"class":163}," lp ",[131,205,206],{"class":159},"=",[131,208,209],{"class":159}," new",[131,211,164],{"class":212},"s2Zo4",[131,214,215],{"class":163},"(",[131,217,218],{"class":159},"{\n",[131,220,221,225,228,230,233,235],{"class":133,"line":39},[131,222,224],{"class":223},"swJcz","  projectId",[131,226,227],{"class":159},":",[131,229,179],{"class":159},[131,231,232],{"class":182},"prj_YOUR_PROJECT_ID",[131,234,185],{"class":159},[131,236,237],{"class":159},",\n",[131,239,240,243,245,247,250,252],{"class":133,"line":46},[131,241,242],{"class":223},"  vapidKey",[131,244,227],{"class":159},[131,246,179],{"class":159},[131,248,249],{"class":182},"YOUR_VAPID_PUBLIC_KEY",[131,251,185],{"class":159},[131,253,237],{"class":159},[131,255,256,259,262],{"class":133,"line":53},[131,257,258],{"class":159},"}",[131,260,261],{"class":163},")",[131,263,188],{"class":159},[131,265,266],{"class":133,"line":57},[131,267,194],{"emptyLinePlaceholder":193},[131,269,270,273,276,279,281,283,286,288,290,293,296,298,300,303,305,307,310,313,316],{"class":133,"line":61},[131,271,272],{"class":163},"document",[131,274,275],{"class":159},".",[131,277,278],{"class":212},"getElementById",[131,280,215],{"class":163},[131,282,185],{"class":159},[131,284,285],{"class":182},"enable-notifs",[131,287,185],{"class":159},[131,289,261],{"class":163},[131,291,292],{"class":159},"?.",[131,294,295],{"class":212},"addEventListener",[131,297,215],{"class":163},[131,299,185],{"class":159},[131,301,302],{"class":182},"click",[131,304,185],{"class":159},[131,306,167],{"class":159},[131,308,309],{"class":199}," async",[131,311,312],{"class":159}," ()",[131,314,315],{"class":199}," =>",[131,317,318],{"class":159}," {\n",[131,320,321,324,326,329,332,335,338,341],{"class":133,"line":65},[131,322,323],{"class":155},"  if",[131,325,99],{"class":223},[131,327,328],{"class":159},"!",[131,330,331],{"class":212},"canSubscribe",[131,333,334],{"class":223},"()) ",[131,336,337],{"class":155},"return",[131,339,340],{"class":159},";",[131,342,344],{"class":343},"sHwdD"," \u002F\u002F unsupported browser\n",[131,346,347,350,353,356,359,362,364,367,369,372,375,377,380,382,385,387,389],{"class":133,"line":69},[131,348,349],{"class":199},"  const",[131,351,352],{"class":163}," result",[131,354,355],{"class":159}," =",[131,357,358],{"class":155}," await",[131,360,361],{"class":163}," lp",[131,363,275],{"class":159},[131,365,366],{"class":212},"subscribe",[131,368,215],{"class":223},[131,370,371],{"class":159},"{",[131,373,374],{"class":223}," userId",[131,376,227],{"class":159},[131,378,379],{"class":163}," currentUser",[131,381,275],{"class":159},[131,383,384],{"class":163},"id",[131,386,173],{"class":159},[131,388,261],{"class":223},[131,390,188],{"class":159},[131,392,394,396,398,401,404,407,409,412,414,416,419,421,423,425,427,429,431],{"class":133,"line":393},11,[131,395,323],{"class":155},[131,397,99],{"class":223},[131,399,400],{"class":163},"result",[131,402,403],{"class":223},") ",[131,405,406],{"class":163},"console",[131,408,275],{"class":159},[131,410,411],{"class":212},"log",[131,413,215],{"class":223},[131,415,185],{"class":159},[131,417,418],{"class":182},"subscribed!",[131,420,185],{"class":159},[131,422,167],{"class":159},[131,424,352],{"class":163},[131,426,275],{"class":159},[131,428,384],{"class":163},[131,430,261],{"class":223},[131,432,188],{"class":159},[131,434,436,438,440],{"class":133,"line":435},12,[131,437,258],{"class":159},[131,439,261],{"class":163},[131,441,188],{"class":159},[443,444,445],"blockquote",{},[81,446,447,450,451,454,455,458,459,464,465,275],{},[96,448,449],{},"You still need the service worker."," Host ",[84,452,453],{},"litepush-sw.js"," at your origin so\nit's reachable at ",[84,456,457],{},"\u003Corigin>\u002Flitepush-sw.js"," — installing the package doesn't\nprovide it (a service worker must be served same-origin). Grab it from\n",[101,460,461],{"href":461,"rel":462},"https:\u002F\u002Flitepush.dev\u002Flitepush-sw.js",[463],"nofollow"," or your dashboard. Full method list:\n",[101,466,34],{"href":35},[137,468,470],{"id":469},"server-side","Server side",[81,472,473,474,275],{},"Use the server client with your secret API key (never expose it in browser\ncode). Zero dependencies — it uses the global ",[84,475,476],{},"fetch",[122,478,480],{"className":146,"code":479,"language":148,"meta":127,"style":127},"import { LitePush, LitePushApiError } from \"@litepush\u002Fsdk\u002Fserver\";\n\nconst litepush = new LitePush(process.env.LITEPUSH_API_KEY!);\n\ntry {\n  const { broadcast_id } = await litepush.broadcasts.create({\n    target: { type: \"all\" },\n    notification: {\n      title: \"New post on the blog\",\n      body: \"We just shipped web push.\",\n      url: \"https:\u002F\u002Fmyblog.com\u002Fposts\u002Fweb-push\",\n    },\n  });\n  console.log(\"queued\", broadcast_id);\n} catch (err) {\n  if (err instanceof LitePushApiError) {\n    \u002F\u002F err.code is stable (e.g. \"monthly_push_limit_reached\") — branch on it.\n    console.error(err.code, err.status, err.message);\n  }\n}\n",[84,481,482,509,513,545,549,556,588,612,621,637,653,669,674,684,711,724,744,750,792,798],{"__ignoreMap":127},[131,483,484,486,488,491,493,496,498,500,502,505,507],{"class":133,"line":7},[131,485,156],{"class":155},[131,487,160],{"class":159},[131,489,490],{"class":163}," LitePush",[131,492,167],{"class":159},[131,494,495],{"class":163}," LitePushApiError",[131,497,173],{"class":159},[131,499,176],{"class":155},[131,501,179],{"class":159},[131,503,504],{"class":182},"@litepush\u002Fsdk\u002Fserver",[131,506,185],{"class":159},[131,508,188],{"class":159},[131,510,511],{"class":133,"line":22},[131,512,194],{"emptyLinePlaceholder":193},[131,514,515,517,520,522,524,526,529,531,534,536,539,541,543],{"class":133,"line":32},[131,516,200],{"class":199},[131,518,519],{"class":163}," litepush ",[131,521,206],{"class":159},[131,523,209],{"class":159},[131,525,490],{"class":212},[131,527,528],{"class":163},"(process",[131,530,275],{"class":159},[131,532,533],{"class":163},"env",[131,535,275],{"class":159},[131,537,538],{"class":163},"LITEPUSH_API_KEY",[131,540,328],{"class":159},[131,542,261],{"class":163},[131,544,188],{"class":159},[131,546,547],{"class":133,"line":39},[131,548,194],{"emptyLinePlaceholder":193},[131,550,551,554],{"class":133,"line":46},[131,552,553],{"class":155},"try",[131,555,318],{"class":159},[131,557,558,560,562,565,567,569,571,574,576,579,581,584,586],{"class":133,"line":53},[131,559,349],{"class":199},[131,561,160],{"class":159},[131,563,564],{"class":163}," broadcast_id",[131,566,173],{"class":159},[131,568,355],{"class":159},[131,570,358],{"class":155},[131,572,573],{"class":163}," litepush",[131,575,275],{"class":159},[131,577,578],{"class":163},"broadcasts",[131,580,275],{"class":159},[131,582,583],{"class":212},"create",[131,585,215],{"class":223},[131,587,218],{"class":159},[131,589,590,593,595,597,600,602,604,607,609],{"class":133,"line":57},[131,591,592],{"class":223},"    target",[131,594,227],{"class":159},[131,596,160],{"class":159},[131,598,599],{"class":223}," type",[131,601,227],{"class":159},[131,603,179],{"class":159},[131,605,606],{"class":182},"all",[131,608,185],{"class":159},[131,610,611],{"class":159}," },\n",[131,613,614,617,619],{"class":133,"line":61},[131,615,616],{"class":223},"    notification",[131,618,227],{"class":159},[131,620,318],{"class":159},[131,622,623,626,628,630,633,635],{"class":133,"line":65},[131,624,625],{"class":223},"      title",[131,627,227],{"class":159},[131,629,179],{"class":159},[131,631,632],{"class":182},"New post on the blog",[131,634,185],{"class":159},[131,636,237],{"class":159},[131,638,639,642,644,646,649,651],{"class":133,"line":69},[131,640,641],{"class":223},"      body",[131,643,227],{"class":159},[131,645,179],{"class":159},[131,647,648],{"class":182},"We just shipped web push.",[131,650,185],{"class":159},[131,652,237],{"class":159},[131,654,655,658,660,662,665,667],{"class":133,"line":393},[131,656,657],{"class":223},"      url",[131,659,227],{"class":159},[131,661,179],{"class":159},[131,663,664],{"class":182},"https:\u002F\u002Fmyblog.com\u002Fposts\u002Fweb-push",[131,666,185],{"class":159},[131,668,237],{"class":159},[131,670,671],{"class":133,"line":435},[131,672,673],{"class":159},"    },\n",[131,675,677,680,682],{"class":133,"line":676},13,[131,678,679],{"class":159},"  }",[131,681,261],{"class":223},[131,683,188],{"class":159},[131,685,687,690,692,694,696,698,701,703,705,707,709],{"class":133,"line":686},14,[131,688,689],{"class":163},"  console",[131,691,275],{"class":159},[131,693,411],{"class":212},[131,695,215],{"class":223},[131,697,185],{"class":159},[131,699,700],{"class":182},"queued",[131,702,185],{"class":159},[131,704,167],{"class":159},[131,706,564],{"class":163},[131,708,261],{"class":223},[131,710,188],{"class":159},[131,712,714,716,719,722],{"class":133,"line":713},15,[131,715,258],{"class":159},[131,717,718],{"class":155}," catch",[131,720,721],{"class":163}," (err) ",[131,723,218],{"class":159},[131,725,727,729,731,734,737,740,742],{"class":133,"line":726},16,[131,728,323],{"class":155},[131,730,99],{"class":223},[131,732,733],{"class":163},"err",[131,735,736],{"class":159}," instanceof",[131,738,495],{"class":739},"sBMFI",[131,741,403],{"class":223},[131,743,218],{"class":159},[131,745,747],{"class":133,"line":746},17,[131,748,749],{"class":343},"    \u002F\u002F err.code is stable (e.g. \"monthly_push_limit_reached\") — branch on it.\n",[131,751,753,756,758,761,763,765,767,769,771,774,776,779,781,783,785,788,790],{"class":133,"line":752},18,[131,754,755],{"class":163},"    console",[131,757,275],{"class":159},[131,759,760],{"class":212},"error",[131,762,215],{"class":223},[131,764,733],{"class":163},[131,766,275],{"class":159},[131,768,84],{"class":163},[131,770,167],{"class":159},[131,772,773],{"class":163}," err",[131,775,275],{"class":159},[131,777,778],{"class":163},"status",[131,780,167],{"class":159},[131,782,773],{"class":163},[131,784,275],{"class":159},[131,786,787],{"class":163},"message",[131,789,261],{"class":223},[131,791,188],{"class":159},[131,793,795],{"class":133,"line":794},19,[131,796,797],{"class":159},"  }\n",[131,799,801],{"class":133,"line":800},20,[131,802,803],{"class":159},"}\n",[81,805,806,807,809],{},"The server client also covers groups and GDPR subscriber management — full\nmethod list on the ",[101,808,41],{"href":42}," page.",[137,811,813],{"id":812},"reference","Reference",[89,815,816,826,835],{},[92,817,818,820,821,823,824,275],{},[101,819,34],{"href":35}," — ",[84,822,103],{},", ",[84,825,331],{},[92,827,828,820,830,823,832,275],{},[101,829,41],{"href":42},[84,831,112],{},[84,833,834],{},"LitePushApiError",[92,836,837,839],{},[101,838,48],{"href":49}," — shared request\u002Fresponse types.",[841,842,843],"style",{},"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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 pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":127,"searchDepth":22,"depth":22,"links":845},[846,847,848],{"id":139,"depth":22,"text":140},{"id":469,"depth":22,"text":470},{"id":812,"depth":22,"text":813},"Install @litepush\u002Fsdk and wire up web push from the browser and from your server.","md",false,{},{"title":24,"description":849},"docs\u002Fsdk\u002Fpackage\u002Findex","O8nGH9dDX9mtk05poZAbF7TP7JdMHRp-P5ShYtRqBos",1780560203629]