[{"data":1,"prerenderedAt":1296},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quick-start":137,"-getting-started-quick-start-surround":1291},[4,27,57,79,97,115],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"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",{"title":23,"path":24,"stem":25},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Mini Apps","i-lucide-smartphone","\u002Fmini-apps","2.mini-apps",[33,37,41,45,49,53],{"title":34,"path":35,"stem":36},"Provider runtime","\u002Fmini-apps\u002Fprovider-runtime","2.mini-apps\u002F1.provider-runtime",{"title":38,"path":39,"stem":40},"Ethereum provider","\u002Fmini-apps\u002Fethereum-provider","2.mini-apps\u002F2.ethereum-provider",{"title":42,"path":43,"stem":44},"Language and i18n","\u002Fmini-apps\u002Flanguage-i18n","2.mini-apps\u002F3.language-i18n",{"title":46,"path":47,"stem":48},"Local simulator","\u002Fmini-apps\u002Flocal-simulator","2.mini-apps\u002F4.local-simulator",{"title":50,"path":51,"stem":52},"Nuxt module","\u002Fmini-apps\u002Fnuxt-module","2.mini-apps\u002F5.nuxt-module",{"title":54,"path":55,"stem":56},"Host runtime","\u002Fmini-apps\u002Fhost-runtime","2.mini-apps\u002F6.host-runtime",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":26},"Auth","i-lucide-key-round","\u002Fauth","3.auth",[63,67,71,75],{"title":64,"path":65,"stem":66},"Nimiq Better Auth","\u002Fauth\u002Fnimiq-better-auth","3.auth\u002F1.nimiq-better-auth",{"title":68,"path":69,"stem":70},"Cross-device approval","\u002Fauth\u002Fcross-device","3.auth\u002F2.cross-device",{"title":72,"path":73,"stem":74},"Nimiq cross-device adapter","\u002Fauth\u002Fnimiq-adapter","3.auth\u002F3.nimiq-adapter",{"title":76,"path":77,"stem":78},"Security model","\u002Fauth\u002Fsecurity-model","3.auth\u002F4.security-model",{"title":80,"icon":81,"path":82,"stem":83,"children":84,"page":26},"Utilities","i-lucide-wrench","\u002Futilities","4.utilities",[85,89,93],{"title":86,"path":87,"stem":88},"Universal Nimiq facade","\u002Futilities\u002Funimiq","4.utilities\u002F1.unimiq",{"title":90,"path":91,"stem":92},"ERC-20 helpers","\u002Futilities\u002Funerc20","4.utilities\u002F2.unerc20",{"title":94,"path":95,"stem":96},"Better Auth ledger","\u002Futilities\u002Fledger","4.utilities\u002F3.ledger",{"title":98,"icon":99,"path":100,"stem":101,"children":102,"page":26},"Testing","i-lucide-test-tube-2","\u002Ftesting","5.testing",[103,107,111],{"title":104,"path":105,"stem":106},"Local scenarios","\u002Ftesting\u002Flocal-scenarios","5.testing\u002F1.local-scenarios",{"title":108,"path":109,"stem":110},"Vitest helpers","\u002Ftesting\u002Fvitest-helpers","5.testing\u002F2.vitest-helpers",{"title":112,"path":113,"stem":114},"Bridge mode","\u002Ftesting\u002Fbridge-mode","5.testing\u002F3.bridge-mode",{"title":116,"icon":117,"path":118,"stem":119,"children":120,"page":26},"Reference","i-lucide-book-open","\u002Freference","6.reference",[121,125,129,133],{"title":122,"path":123,"stem":124},"Packages","\u002Freference\u002Fpackages","6.reference\u002F1.packages",{"title":126,"path":127,"stem":128},"Endpoints","\u002Freference\u002Fendpoints","6.reference\u002F2.endpoints",{"title":130,"path":131,"stem":132},"Runtime support","\u002Freference\u002Fruntime-support","6.reference\u002F3.runtime-support",{"title":134,"path":135,"stem":136},"Public API exports","\u002Freference\u002Fpublic-api","6.reference\u002F4.public-api",{"id":138,"title":19,"body":139,"description":1285,"extension":1286,"links":1287,"meta":1288,"navigation":287,"path":20,"seo":1289,"stem":21,"__hash__":1290},"docs\u002F1.getting-started\u002F3.quick-start.md",{"type":140,"value":141,"toc":1276},"minimark",[142,146,149,152,157,160,195,199,467,470,510,521,525,755,766,770,957,960,964,1119,1122,1126,1205,1208,1212,1272],[143,144,145],"p",{},"Use this path when the same browser runs inside Nimiq Pay and needs a Better Auth session for the current Nimiq key.",[143,147,148],{},"The goal is to turn an injected Nimiq wallet into a normal application session. The browser waits for the mini-app provider, the server issues a nonce, the wallet signs it, and Better Auth owns the resulting session cookie and bearer token.",[143,150,151],{},"Do not use this page for desktop-to-phone QR login. Use the cross-device package when approval happens on another device.",[153,154,156],"h2",{"id":155},"_1-install-packages","1. Install packages",[143,158,159],{},"Use PKG.new for installation:",[161,162,163,177,186],"ul",{},[164,165,166],"li",{},[167,168,172,173],"a",{"href":169,"rel":170},"https:\u002F\u002Fpkg.new\u002Fbetter-auth",[171],"nofollow","Install ",[174,175,176],"code",{},"better-auth",[164,178,179],{},[167,180,172,183],{"href":181,"rel":182},"https:\u002F\u002Fpkg.new\u002F@onmax\u002Fbetter-auth-nimiq",[171],[174,184,185],{},"@onmax\u002Fbetter-auth-nimiq",[164,187,188],{},[167,189,172,192],{"href":190,"rel":191},"https:\u002F\u002Fpkg.new\u002F@onmax\u002Fnimiq-mini-app-kit",[171],[174,193,194],{},"@onmax\u002Fnimiq-mini-app-kit",[153,196,198],{"id":197},"_2-register-the-server-plugin","2. Register the server plugin",[200,201,207],"pre",{"className":202,"code":203,"filename":204,"language":205,"meta":206,"style":206},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { betterAuth } from 'better-auth'\nimport { bearer } from 'better-auth\u002Fplugins'\nimport { nimiqAuth } from '@onmax\u002Fbetter-auth-nimiq'\n\nexport const auth = betterAuth({\n  trustedOrigins: ['https:\u002F\u002Farcade.example'],\n  plugins: [\n    bearer({ requireSignature: true }),\n    nimiqAuth({\n      appName: 'Arcade Rewards',\n      endpointPrefix: '\u002Fnimiq',\n      tokenHeaderName: 'set-auth-token',\n    }),\n  ],\n})\n","server\u002Fauth.ts","ts","",[174,208,209,241,262,282,289,314,341,352,379,389,406,423,440,450,458],{"__ignoreMap":206},[210,211,214,218,222,226,229,232,235,238],"span",{"class":212,"line":213},"line",1,[210,215,217],{"class":216},"s7zQu","import",[210,219,221],{"class":220},"sMK4o"," {",[210,223,225],{"class":224},"sTEyZ"," betterAuth",[210,227,228],{"class":220}," }",[210,230,231],{"class":216}," from",[210,233,234],{"class":220}," '",[210,236,176],{"class":237},"sfazB",[210,239,240],{"class":220},"'\n",[210,242,244,246,248,251,253,255,257,260],{"class":212,"line":243},2,[210,245,217],{"class":216},[210,247,221],{"class":220},[210,249,250],{"class":224}," bearer",[210,252,228],{"class":220},[210,254,231],{"class":216},[210,256,234],{"class":220},[210,258,259],{"class":237},"better-auth\u002Fplugins",[210,261,240],{"class":220},[210,263,265,267,269,272,274,276,278,280],{"class":212,"line":264},3,[210,266,217],{"class":216},[210,268,221],{"class":220},[210,270,271],{"class":224}," nimiqAuth",[210,273,228],{"class":220},[210,275,231],{"class":216},[210,277,234],{"class":220},[210,279,185],{"class":237},[210,281,240],{"class":220},[210,283,285],{"class":212,"line":284},4,[210,286,288],{"emptyLinePlaceholder":287},true,"\n",[210,290,292,295,299,302,305,308,311],{"class":212,"line":291},5,[210,293,294],{"class":216},"export",[210,296,298],{"class":297},"spNyl"," const",[210,300,301],{"class":224}," auth ",[210,303,304],{"class":220},"=",[210,306,225],{"class":307},"s2Zo4",[210,309,310],{"class":224},"(",[210,312,313],{"class":220},"{\n",[210,315,317,321,324,327,330,333,335,338],{"class":212,"line":316},6,[210,318,320],{"class":319},"swJcz","  trustedOrigins",[210,322,323],{"class":220},":",[210,325,326],{"class":224}," [",[210,328,329],{"class":220},"'",[210,331,332],{"class":237},"https:\u002F\u002Farcade.example",[210,334,329],{"class":220},[210,336,337],{"class":224},"]",[210,339,340],{"class":220},",\n",[210,342,344,347,349],{"class":212,"line":343},7,[210,345,346],{"class":319},"  plugins",[210,348,323],{"class":220},[210,350,351],{"class":224}," [\n",[210,353,355,358,360,363,366,368,372,374,377],{"class":212,"line":354},8,[210,356,357],{"class":307},"    bearer",[210,359,310],{"class":224},[210,361,362],{"class":220},"{",[210,364,365],{"class":319}," requireSignature",[210,367,323],{"class":220},[210,369,371],{"class":370},"sfNiH"," true",[210,373,228],{"class":220},[210,375,376],{"class":224},")",[210,378,340],{"class":220},[210,380,382,385,387],{"class":212,"line":381},9,[210,383,384],{"class":307},"    nimiqAuth",[210,386,310],{"class":224},[210,388,313],{"class":220},[210,390,392,395,397,399,402,404],{"class":212,"line":391},10,[210,393,394],{"class":319},"      appName",[210,396,323],{"class":220},[210,398,234],{"class":220},[210,400,401],{"class":237},"Arcade Rewards",[210,403,329],{"class":220},[210,405,340],{"class":220},[210,407,409,412,414,416,419,421],{"class":212,"line":408},11,[210,410,411],{"class":319},"      endpointPrefix",[210,413,323],{"class":220},[210,415,234],{"class":220},[210,417,418],{"class":237},"\u002Fnimiq",[210,420,329],{"class":220},[210,422,340],{"class":220},[210,424,426,429,431,433,436,438],{"class":212,"line":425},12,[210,427,428],{"class":319},"      tokenHeaderName",[210,430,323],{"class":220},[210,432,234],{"class":220},[210,434,435],{"class":237},"set-auth-token",[210,437,329],{"class":220},[210,439,340],{"class":220},[210,441,443,446,448],{"class":212,"line":442},13,[210,444,445],{"class":220},"    }",[210,447,376],{"class":224},[210,449,340],{"class":220},[210,451,453,456],{"class":212,"line":452},14,[210,454,455],{"class":224},"  ]",[210,457,340],{"class":220},[210,459,461,464],{"class":212,"line":460},15,[210,462,463],{"class":220},"}",[210,465,466],{"class":224},")\n",[143,468,469],{},"The plugin exposes two endpoints under the prefix:",[471,472,473,486],"table",{},[474,475,476],"thead",{},[477,478,479,483],"tr",{},[480,481,482],"th",{},"Endpoint",[480,484,485],{},"Purpose",[487,488,489,500],"tbody",{},[477,490,491,497],{},[492,493,494],"td",{},[174,495,496],{},"POST \u002Fnimiq\u002Fnonce",[492,498,499],{},"Issues a short-lived Nimiq login challenge",[477,501,502,507],{},[492,503,504],{},[174,505,506],{},"POST \u002Fnimiq\u002Fverify",[492,508,509],{},"Verifies the signature and creates the Better Auth session",[143,511,512,513,516,517,520],{},"Expected behavior: ",[174,514,515],{},"\u002Fnimiq\u002Fverify"," sets the Better Auth session cookie and returns ",[174,518,519],{},"{ ok: true, token }",".",[153,522,524],{"id":523},"_3-register-the-client-plugin","3. Register the client plugin",[200,526,529],{"className":202,"code":527,"filename":528,"language":205,"meta":206,"style":206},"import { createAuthClient } from 'better-auth\u002Fclient'\nimport { getStoredNimiqAuthToken, nimiqAuthClient } from '@onmax\u002Fbetter-auth-nimiq\u002Fclient'\n\nconst TOKEN_KEY = 'nimiq_auth_token'\n\nexport const authClient = createAuthClient({\n  plugins: [\n    nimiqAuthClient({\n      endpointPrefix: '\u002Fnimiq',\n      tokenStorageKey: TOKEN_KEY,\n    }),\n  ],\n  fetchOptions: {\n    auth: {\n      type: 'Bearer',\n      token: () => getStoredNimiqAuthToken(TOKEN_KEY) || undefined,\n    },\n  },\n})\n","app\u002Fauth-client.ts",[174,530,531,551,577,581,598,602,619,627,636,650,662,670,676,686,695,711,736,742,748],{"__ignoreMap":206},[210,532,533,535,537,540,542,544,546,549],{"class":212,"line":213},[210,534,217],{"class":216},[210,536,221],{"class":220},[210,538,539],{"class":224}," createAuthClient",[210,541,228],{"class":220},[210,543,231],{"class":216},[210,545,234],{"class":220},[210,547,548],{"class":237},"better-auth\u002Fclient",[210,550,240],{"class":220},[210,552,553,555,557,560,563,566,568,570,572,575],{"class":212,"line":243},[210,554,217],{"class":216},[210,556,221],{"class":220},[210,558,559],{"class":224}," getStoredNimiqAuthToken",[210,561,562],{"class":220},",",[210,564,565],{"class":224}," nimiqAuthClient",[210,567,228],{"class":220},[210,569,231],{"class":216},[210,571,234],{"class":220},[210,573,574],{"class":237},"@onmax\u002Fbetter-auth-nimiq\u002Fclient",[210,576,240],{"class":220},[210,578,579],{"class":212,"line":264},[210,580,288],{"emptyLinePlaceholder":287},[210,582,583,586,589,591,593,596],{"class":212,"line":284},[210,584,585],{"class":297},"const",[210,587,588],{"class":224}," TOKEN_KEY ",[210,590,304],{"class":220},[210,592,234],{"class":220},[210,594,595],{"class":237},"nimiq_auth_token",[210,597,240],{"class":220},[210,599,600],{"class":212,"line":291},[210,601,288],{"emptyLinePlaceholder":287},[210,603,604,606,608,611,613,615,617],{"class":212,"line":316},[210,605,294],{"class":216},[210,607,298],{"class":297},[210,609,610],{"class":224}," authClient ",[210,612,304],{"class":220},[210,614,539],{"class":307},[210,616,310],{"class":224},[210,618,313],{"class":220},[210,620,621,623,625],{"class":212,"line":343},[210,622,346],{"class":319},[210,624,323],{"class":220},[210,626,351],{"class":224},[210,628,629,632,634],{"class":212,"line":354},[210,630,631],{"class":307},"    nimiqAuthClient",[210,633,310],{"class":224},[210,635,313],{"class":220},[210,637,638,640,642,644,646,648],{"class":212,"line":381},[210,639,411],{"class":319},[210,641,323],{"class":220},[210,643,234],{"class":220},[210,645,418],{"class":237},[210,647,329],{"class":220},[210,649,340],{"class":220},[210,651,652,655,657,660],{"class":212,"line":391},[210,653,654],{"class":319},"      tokenStorageKey",[210,656,323],{"class":220},[210,658,659],{"class":224}," TOKEN_KEY",[210,661,340],{"class":220},[210,663,664,666,668],{"class":212,"line":408},[210,665,445],{"class":220},[210,667,376],{"class":224},[210,669,340],{"class":220},[210,671,672,674],{"class":212,"line":425},[210,673,455],{"class":224},[210,675,340],{"class":220},[210,677,678,681,683],{"class":212,"line":442},[210,679,680],{"class":319},"  fetchOptions",[210,682,323],{"class":220},[210,684,685],{"class":220}," {\n",[210,687,688,691,693],{"class":212,"line":452},[210,689,690],{"class":319},"    auth",[210,692,323],{"class":220},[210,694,685],{"class":220},[210,696,697,700,702,704,707,709],{"class":212,"line":460},[210,698,699],{"class":319},"      type",[210,701,323],{"class":220},[210,703,234],{"class":220},[210,705,706],{"class":237},"Bearer",[210,708,329],{"class":220},[210,710,340],{"class":220},[210,712,714,717,719,722,725,727,730,733],{"class":212,"line":713},16,[210,715,716],{"class":307},"      token",[210,718,323],{"class":220},[210,720,721],{"class":220}," ()",[210,723,724],{"class":297}," =>",[210,726,559],{"class":307},[210,728,729],{"class":224},"(TOKEN_KEY) ",[210,731,732],{"class":220},"||",[210,734,735],{"class":220}," undefined,\n",[210,737,739],{"class":212,"line":738},17,[210,740,741],{"class":220},"    },\n",[210,743,745],{"class":212,"line":744},18,[210,746,747],{"class":220},"  },\n",[210,749,751,753],{"class":212,"line":750},19,[210,752,463],{"class":220},[210,754,466],{"class":224},[143,756,757,758,761,762,765],{},"The client helper persists the token in ",[174,759,760],{},"localStorage"," by default. The ",[174,763,764],{},"fetchOptions.auth"," block makes later authenticated requests send it as a bearer token.",[153,767,769],{"id":768},"_4-wait-for-the-nimiq-pay-provider","4. Wait for the Nimiq Pay provider",[200,771,774],{"className":202,"code":772,"filename":773,"language":205,"meta":206,"style":206},"import { initMiniAppProvider, isMiniAppProviderError } from '@onmax\u002Fnimiq-mini-app-kit'\n\nexport async function getSelectedNimiqAddress() {\n  const provider = await initMiniAppProvider({ timeout: 10_000 })\n  const accounts = await provider.listAccounts()\n\n  if (isMiniAppProviderError(accounts))\n    throw new Error(accounts.error.message)\n\n  return accounts[0] ?? null\n}\n","app\u002Fprovider.ts",[174,775,776,800,804,822,855,876,880,899,926,930,952],{"__ignoreMap":206},[210,777,778,780,782,785,787,790,792,794,796,798],{"class":212,"line":213},[210,779,217],{"class":216},[210,781,221],{"class":220},[210,783,784],{"class":224}," initMiniAppProvider",[210,786,562],{"class":220},[210,788,789],{"class":224}," isMiniAppProviderError",[210,791,228],{"class":220},[210,793,231],{"class":216},[210,795,234],{"class":220},[210,797,194],{"class":237},[210,799,240],{"class":220},[210,801,802],{"class":212,"line":243},[210,803,288],{"emptyLinePlaceholder":287},[210,805,806,808,811,814,817,820],{"class":212,"line":264},[210,807,294],{"class":216},[210,809,810],{"class":297}," async",[210,812,813],{"class":297}," function",[210,815,816],{"class":307}," getSelectedNimiqAddress",[210,818,819],{"class":220},"()",[210,821,685],{"class":220},[210,823,824,827,830,833,836,838,840,842,845,847,851,853],{"class":212,"line":284},[210,825,826],{"class":297},"  const",[210,828,829],{"class":224}," provider",[210,831,832],{"class":220}," =",[210,834,835],{"class":216}," await",[210,837,784],{"class":307},[210,839,310],{"class":319},[210,841,362],{"class":220},[210,843,844],{"class":319}," timeout",[210,846,323],{"class":220},[210,848,850],{"class":849},"sbssI"," 10_000",[210,852,228],{"class":220},[210,854,466],{"class":319},[210,856,857,859,862,864,866,868,870,873],{"class":212,"line":291},[210,858,826],{"class":297},[210,860,861],{"class":224}," accounts",[210,863,832],{"class":220},[210,865,835],{"class":216},[210,867,829],{"class":224},[210,869,520],{"class":220},[210,871,872],{"class":307},"listAccounts",[210,874,875],{"class":319},"()\n",[210,877,878],{"class":212,"line":316},[210,879,288],{"emptyLinePlaceholder":287},[210,881,882,885,888,891,893,896],{"class":212,"line":343},[210,883,884],{"class":216},"  if",[210,886,887],{"class":319}," (",[210,889,890],{"class":307},"isMiniAppProviderError",[210,892,310],{"class":319},[210,894,895],{"class":224},"accounts",[210,897,898],{"class":319},"))\n",[210,900,901,904,907,910,912,914,916,919,921,924],{"class":212,"line":354},[210,902,903],{"class":216},"    throw",[210,905,906],{"class":220}," new",[210,908,909],{"class":307}," Error",[210,911,310],{"class":319},[210,913,895],{"class":224},[210,915,520],{"class":220},[210,917,918],{"class":224},"error",[210,920,520],{"class":220},[210,922,923],{"class":224},"message",[210,925,466],{"class":319},[210,927,928],{"class":212,"line":381},[210,929,288],{"emptyLinePlaceholder":287},[210,931,932,935,937,940,943,946,949],{"class":212,"line":391},[210,933,934],{"class":216},"  return",[210,936,861],{"class":224},[210,938,939],{"class":319},"[",[210,941,942],{"class":849},"0",[210,944,945],{"class":319},"] ",[210,947,948],{"class":220},"??",[210,950,951],{"class":220}," null\n",[210,953,954],{"class":212,"line":408},[210,955,956],{"class":220},"}\n",[143,958,959],{},"Expected behavior: inside Nimiq Pay, the helper resolves the injected provider and returns the selected Nimiq address. Outside the host, it rejects after the timeout.",[153,961,963],{"id":962},"_5-trigger-sign-in","5. Trigger sign-in",[200,965,968],{"className":202,"code":966,"filename":967,"language":205,"meta":206,"style":206},"import { signInWithNimiq } from '@onmax\u002Fbetter-auth-nimiq\u002Fclient'\nimport { authClient } from '.\u002Fauth-client'\n\nconst result = await signInWithNimiq(authClient.$fetch.bind(authClient), {\n  appName: 'Arcade Rewards',\n  endpointPrefix: '\u002Fnimiq',\n  tokenStorageKey: 'nimiq_auth_token',\n})\n\nconsole.log(result.token)\n","app\u002Fsign-in.ts",[174,969,970,989,1009,1013,1046,1061,1076,1091,1097,1101],{"__ignoreMap":206},[210,971,972,974,976,979,981,983,985,987],{"class":212,"line":213},[210,973,217],{"class":216},[210,975,221],{"class":220},[210,977,978],{"class":224}," signInWithNimiq",[210,980,228],{"class":220},[210,982,231],{"class":216},[210,984,234],{"class":220},[210,986,574],{"class":237},[210,988,240],{"class":220},[210,990,991,993,995,998,1000,1002,1004,1007],{"class":212,"line":243},[210,992,217],{"class":216},[210,994,221],{"class":220},[210,996,997],{"class":224}," authClient",[210,999,228],{"class":220},[210,1001,231],{"class":216},[210,1003,234],{"class":220},[210,1005,1006],{"class":237},".\u002Fauth-client",[210,1008,240],{"class":220},[210,1010,1011],{"class":212,"line":264},[210,1012,288],{"emptyLinePlaceholder":287},[210,1014,1015,1017,1020,1022,1024,1026,1029,1031,1034,1036,1039,1042,1044],{"class":212,"line":284},[210,1016,585],{"class":297},[210,1018,1019],{"class":224}," result ",[210,1021,304],{"class":220},[210,1023,835],{"class":216},[210,1025,978],{"class":307},[210,1027,1028],{"class":224},"(authClient",[210,1030,520],{"class":220},[210,1032,1033],{"class":224},"$fetch",[210,1035,520],{"class":220},[210,1037,1038],{"class":307},"bind",[210,1040,1041],{"class":224},"(authClient)",[210,1043,562],{"class":220},[210,1045,685],{"class":220},[210,1047,1048,1051,1053,1055,1057,1059],{"class":212,"line":291},[210,1049,1050],{"class":319},"  appName",[210,1052,323],{"class":220},[210,1054,234],{"class":220},[210,1056,401],{"class":237},[210,1058,329],{"class":220},[210,1060,340],{"class":220},[210,1062,1063,1066,1068,1070,1072,1074],{"class":212,"line":316},[210,1064,1065],{"class":319},"  endpointPrefix",[210,1067,323],{"class":220},[210,1069,234],{"class":220},[210,1071,418],{"class":237},[210,1073,329],{"class":220},[210,1075,340],{"class":220},[210,1077,1078,1081,1083,1085,1087,1089],{"class":212,"line":343},[210,1079,1080],{"class":319},"  tokenStorageKey",[210,1082,323],{"class":220},[210,1084,234],{"class":220},[210,1086,595],{"class":237},[210,1088,329],{"class":220},[210,1090,340],{"class":220},[210,1092,1093,1095],{"class":212,"line":354},[210,1094,463],{"class":220},[210,1096,466],{"class":224},[210,1098,1099],{"class":212,"line":381},[210,1100,288],{"emptyLinePlaceholder":287},[210,1102,1103,1106,1108,1111,1114,1116],{"class":212,"line":391},[210,1104,1105],{"class":224},"console",[210,1107,520],{"class":220},[210,1109,1110],{"class":307},"log",[210,1112,1113],{"class":224},"(result",[210,1115,520],{"class":220},[210,1117,1118],{"class":224},"token)\n",[143,1120,1121],{},"Expected behavior: the wallet signs the challenge message, the server verifies the signature, and the browser stores the returned token.",[153,1123,1125],{"id":1124},"_6-use-the-session","6. Use the session",[200,1127,1130],{"className":202,"code":1128,"filename":1129,"language":205,"meta":206,"style":206},"import { authClient } from '.\u002Fauth-client'\n\nconst session = await authClient.getSession()\n\nconsole.log(session.data?.user.id)\n","app\u002Fme.ts",[174,1131,1132,1150,1154,1174,1178],{"__ignoreMap":206},[210,1133,1134,1136,1138,1140,1142,1144,1146,1148],{"class":212,"line":213},[210,1135,217],{"class":216},[210,1137,221],{"class":220},[210,1139,997],{"class":224},[210,1141,228],{"class":220},[210,1143,231],{"class":216},[210,1145,234],{"class":220},[210,1147,1006],{"class":237},[210,1149,240],{"class":220},[210,1151,1152],{"class":212,"line":243},[210,1153,288],{"emptyLinePlaceholder":287},[210,1155,1156,1158,1161,1163,1165,1167,1169,1172],{"class":212,"line":264},[210,1157,585],{"class":297},[210,1159,1160],{"class":224}," session ",[210,1162,304],{"class":220},[210,1164,835],{"class":216},[210,1166,997],{"class":224},[210,1168,520],{"class":220},[210,1170,1171],{"class":307},"getSession",[210,1173,875],{"class":224},[210,1175,1176],{"class":212,"line":284},[210,1177,288],{"emptyLinePlaceholder":287},[210,1179,1180,1182,1184,1186,1189,1191,1194,1197,1200,1202],{"class":212,"line":291},[210,1181,1105],{"class":224},[210,1183,520],{"class":220},[210,1185,1110],{"class":307},[210,1187,1188],{"class":224},"(session",[210,1190,520],{"class":220},[210,1192,1193],{"class":224},"data",[210,1195,1196],{"class":220},"?.",[210,1198,1199],{"class":224},"user",[210,1201,520],{"class":220},[210,1203,1204],{"class":224},"id)\n",[143,1206,1207],{},"Expected behavior: authenticated Better Auth calls work through the session cookie and through the bearer token when the app runtime needs header-based auth.",[153,1209,1211],{"id":1210},"common-failure-states","Common failure states",[471,1213,1214,1224],{},[474,1215,1216],{},[477,1217,1218,1221],{},[480,1219,1220],{},"Symptom",[480,1222,1223],{},"Check",[487,1225,1226,1236,1246,1262],{},[477,1227,1228,1233],{},[492,1229,1230],{},[174,1231,1232],{},"Nimiq provider not found on window.nimiq",[492,1234,1235],{},"Open the app inside Nimiq Pay or install simulator helpers for local development.",[477,1237,1238,1243],{},[492,1239,1240],{},[174,1241,1242],{},"Invalid Nimiq address",[492,1244,1245],{},"Pass a normalized NQ address or let the helper read the selected account from the provider.",[477,1247,1248,1251],{},[492,1249,1250],{},"Verify fails after signing",[492,1252,1253,1254,1257,1258,1261],{},"Keep ",[174,1255,1256],{},"appName",", ",[174,1259,1260],{},"endpointPrefix",", and request origin aligned between server and client.",[477,1263,1264,1267],{},[492,1265,1266],{},"Later API calls are unauthenticated",[492,1268,1269,1270,520],{},"Send the Better Auth cookie or the stored token from ",[174,1271,435],{},[1273,1274,1275],"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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":206,"searchDepth":243,"depth":243,"links":1277},[1278,1279,1280,1281,1282,1283,1284],{"id":155,"depth":243,"text":156},{"id":197,"depth":243,"text":198},{"id":523,"depth":243,"text":524},{"id":768,"depth":243,"text":769},{"id":962,"depth":243,"text":963},{"id":1124,"depth":243,"text":1125},{"id":1210,"depth":243,"text":1211},"Add copy-pasteable provider access and Nimiq Better Auth sign-in.","md",null,{},{"title":19,"description":1285},"BWg1fBP9HHNdyQxMhTmh0ojOu7PnsZ3AV8TNdRArgN0",[1292,1294],{"title":15,"path":16,"stem":17,"description":1293,"children":-1},"Install the smallest package set for the flow you are building.",{"title":23,"path":24,"stem":25,"description":1295,"children":-1},"Place provider access, auth, cross-device approval, utilities, and tests in the right runtime.",1778838252701]