[{"data":1,"prerenderedAt":1977},["ShallowReactive",2],{"navigation_docs":3,"-reference-endpoints":137,"-reference-endpoints-surround":1972},[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":126,"body":139,"description":1966,"extension":1967,"links":1968,"meta":1969,"navigation":358,"path":127,"seo":1970,"stem":128,"__hash__":1971},"docs\u002F6.reference\u002F2.endpoints.md",{"type":140,"value":141,"toc":1961},"minimark",[142,146,149,154,162,256,554,557,611,618,621,626,829,1249,1386,1402,1411,1415,1420,1594,1605,1813,1954,1957],[143,144,145],"p",{},"Use this page to wire clients, tests, route allowlists, and server mocks.",[143,147,148],{},"All prefixes are configurable. The examples use defaults.",[150,151,153],"h2",{"id":152},"nimiq-auth","Nimiq auth",[143,155,156,157,161],{},"Default prefix: ",[158,159,160],"code",{},"\u002Fnimiq",".",[163,164,165,184],"table",{},[166,167,168],"thead",{},[169,170,171,175,178,181],"tr",{},[172,173,174],"th",{},"Endpoint",[172,176,177],{},"Method",[172,179,180],{},"Body or query",[172,182,183],{},"Result",[185,186,187,225],"tbody",{},[169,188,189,195,200,203],{},[190,191,192],"td",{},[158,193,194],{},"\u002Fnimiq\u002Fnonce",[190,196,197],{},[158,198,199],{},"POST",[190,201,202],{},"Empty body",[190,204,205,206,209,210,209,213,209,216,209,219,209,222],{},"Challenge payload with ",[158,207,208],{},"nonceId",", ",[158,211,212],{},"nonce",[158,214,215],{},"message",[158,217,218],{},"origin",[158,220,221],{},"issuedAt",[158,223,224],{},"expiresAt",[169,226,227,232,236,250],{},[190,228,229],{},[158,230,231],{},"\u002Fnimiq\u002Fverify",[190,233,234],{},[158,235,199],{},[190,237,238,209,240,209,243,246,247],{},[158,239,208],{},[158,241,242],{},"publicKeyHex",[158,244,245],{},"signatureHex",", optional ",[158,248,249],{},"address",[190,251,252,255],{},[158,253,254],{},"{ ok: true, token }"," plus Better Auth session cookie",[257,258,264],"pre",{"className":259,"code":260,"filename":261,"language":262,"meta":263,"style":263},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const nonce = await authClient.$fetch('\u002Fnimiq\u002Fnonce', {\n  method: 'POST',\n  body: {},\n})\n\nconst signature = await window.nimiq!.sign(nonce.message)\n\nconst verified = await authClient.$fetch('\u002Fnimiq\u002Fverify', {\n  method: 'POST',\n  body: {\n    nonceId: nonce.nonceId,\n    publicKeyHex: signature.publicKey,\n    signatureHex: signature.signature,\n    address: 'NQ0700000000000000000000000000000000',\n  },\n})\n\nconsole.log(verified)\n","app\u002Fdirect-sign-in.ts","ts","",[158,265,266,313,333,344,353,360,394,399,429,444,453,470,488,505,522,528,535,540],{"__ignoreMap":263},[267,268,271,275,279,283,287,290,292,296,299,302,305,307,310],"span",{"class":269,"line":270},"line",1,[267,272,274],{"class":273},"spNyl","const",[267,276,278],{"class":277},"sTEyZ"," nonce ",[267,280,282],{"class":281},"sMK4o","=",[267,284,286],{"class":285},"s7zQu"," await",[267,288,289],{"class":277}," authClient",[267,291,161],{"class":281},[267,293,295],{"class":294},"s2Zo4","$fetch",[267,297,298],{"class":277},"(",[267,300,301],{"class":281},"'",[267,303,194],{"class":304},"sfazB",[267,306,301],{"class":281},[267,308,309],{"class":281},",",[267,311,312],{"class":281}," {\n",[267,314,316,320,323,326,328,330],{"class":269,"line":315},2,[267,317,319],{"class":318},"swJcz","  method",[267,321,322],{"class":281},":",[267,324,325],{"class":281}," '",[267,327,199],{"class":304},[267,329,301],{"class":281},[267,331,332],{"class":281},",\n",[267,334,336,339,341],{"class":269,"line":335},3,[267,337,338],{"class":318},"  body",[267,340,322],{"class":281},[267,342,343],{"class":281}," {},\n",[267,345,347,350],{"class":269,"line":346},4,[267,348,349],{"class":281},"}",[267,351,352],{"class":277},")\n",[267,354,356],{"class":269,"line":355},5,[267,357,359],{"emptyLinePlaceholder":358},true,"\n",[267,361,363,365,368,370,372,375,377,380,383,386,389,391],{"class":269,"line":362},6,[267,364,274],{"class":273},[267,366,367],{"class":277}," signature ",[267,369,282],{"class":281},[267,371,286],{"class":285},[267,373,374],{"class":277}," window",[267,376,161],{"class":281},[267,378,379],{"class":277},"nimiq",[267,381,382],{"class":281},"!.",[267,384,385],{"class":294},"sign",[267,387,388],{"class":277},"(nonce",[267,390,161],{"class":281},[267,392,393],{"class":277},"message)\n",[267,395,397],{"class":269,"line":396},7,[267,398,359],{"emptyLinePlaceholder":358},[267,400,402,404,407,409,411,413,415,417,419,421,423,425,427],{"class":269,"line":401},8,[267,403,274],{"class":273},[267,405,406],{"class":277}," verified ",[267,408,282],{"class":281},[267,410,286],{"class":285},[267,412,289],{"class":277},[267,414,161],{"class":281},[267,416,295],{"class":294},[267,418,298],{"class":277},[267,420,301],{"class":281},[267,422,231],{"class":304},[267,424,301],{"class":281},[267,426,309],{"class":281},[267,428,312],{"class":281},[267,430,432,434,436,438,440,442],{"class":269,"line":431},9,[267,433,319],{"class":318},[267,435,322],{"class":281},[267,437,325],{"class":281},[267,439,199],{"class":304},[267,441,301],{"class":281},[267,443,332],{"class":281},[267,445,447,449,451],{"class":269,"line":446},10,[267,448,338],{"class":318},[267,450,322],{"class":281},[267,452,312],{"class":281},[267,454,456,459,461,464,466,468],{"class":269,"line":455},11,[267,457,458],{"class":318},"    nonceId",[267,460,322],{"class":281},[267,462,463],{"class":277}," nonce",[267,465,161],{"class":281},[267,467,208],{"class":277},[267,469,332],{"class":281},[267,471,473,476,478,481,483,486],{"class":269,"line":472},12,[267,474,475],{"class":318},"    publicKeyHex",[267,477,322],{"class":281},[267,479,480],{"class":277}," signature",[267,482,161],{"class":281},[267,484,485],{"class":277},"publicKey",[267,487,332],{"class":281},[267,489,491,494,496,498,500,503],{"class":269,"line":490},13,[267,492,493],{"class":318},"    signatureHex",[267,495,322],{"class":281},[267,497,480],{"class":277},[267,499,161],{"class":281},[267,501,502],{"class":277},"signature",[267,504,332],{"class":281},[267,506,508,511,513,515,518,520],{"class":269,"line":507},14,[267,509,510],{"class":318},"    address",[267,512,322],{"class":281},[267,514,325],{"class":281},[267,516,517],{"class":304},"NQ0700000000000000000000000000000000",[267,519,301],{"class":281},[267,521,332],{"class":281},[267,523,525],{"class":269,"line":524},15,[267,526,527],{"class":281},"  },\n",[267,529,531,533],{"class":269,"line":530},16,[267,532,349],{"class":281},[267,534,352],{"class":277},[267,536,538],{"class":269,"line":537},17,[267,539,359],{"emptyLinePlaceholder":358},[267,541,543,546,548,551],{"class":269,"line":542},18,[267,544,545],{"class":277},"console",[267,547,161],{"class":281},[267,549,550],{"class":294},"log",[267,552,553],{"class":277},"(verified)\n",[143,555,556],{},"Expected result shape:",[257,558,563],{"className":559,"code":560,"filename":561,"language":562,"meta":263,"style":263},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"ok\": true,\n  \"token\": \"better-auth-session-token\"\n}\n","response.json","json",[158,564,565,570,586,606],{"__ignoreMap":263},[267,566,567],{"class":269,"line":270},[267,568,569],{"class":281},"{\n",[267,571,572,575,578,581,583],{"class":269,"line":315},[267,573,574],{"class":281},"  \"",[267,576,577],{"class":273},"ok",[267,579,580],{"class":281},"\"",[267,582,322],{"class":281},[267,584,585],{"class":281}," true,\n",[267,587,588,590,593,595,597,600,603],{"class":269,"line":335},[267,589,574],{"class":281},[267,591,592],{"class":273},"token",[267,594,580],{"class":281},[267,596,322],{"class":281},[267,598,599],{"class":281}," \"",[267,601,602],{"class":304},"better-auth-session-token",[267,604,605],{"class":281},"\"\n",[267,607,608],{"class":269,"line":346},[267,609,610],{"class":281},"}\n",[143,612,613,614,617],{},"Use these endpoints when the signing wallet is available in the same browser. Do not call ",[158,615,616],{},"\u002Fverify"," with a reused nonce; nonce storage is TTL-bound and one-time by design.",[150,619,68],{"id":620},"cross-device-approval",[143,622,156,623,161],{},[158,624,625],{},"\u002Fcross-device",[163,627,628,640],{},[166,629,630],{},[169,631,632,634,636,638],{},[172,633,174],{},[172,635,177],{},[172,637,180],{},[172,639,183],{},[185,641,642,683,705,726,749,769,789,809],{},[169,643,644,649,653,668],{},[190,645,646],{},[158,647,648],{},"\u002Fcross-device\u002Fstart",[190,650,651],{},[158,652,199],{},[190,654,655,246,658,209,661,664,665],{},[158,656,657],{},"kind",[158,659,660],{},"adapterId",[158,662,663],{},"returnTo",", display fields, ",[158,666,667],{},"payloadHash",[190,669,670,209,673,209,676,209,679,682],{},[158,671,672],{},"orderId",[158,674,675],{},"claimToken",[158,677,678],{},"claimUrl",[158,680,681],{},"desktopToken",", expiry",[169,684,685,690,694,700],{},[190,686,687],{},[158,688,689],{},"\u002Fcross-device\u002Fclaim",[190,691,692],{},[158,693,199],{},[190,695,696,209,698],{},[158,697,672],{},[158,699,675],{},[190,701,702],{},[158,703,704],{},"challengeToken",[169,706,707,712,717,723],{},[190,708,709],{},[158,710,711],{},"\u002Fcross-device\u002Fchallenge",[190,713,714],{},[158,715,716],{},"GET",[190,718,719,209,721],{},[158,720,672],{},[158,722,704],{},[190,724,725],{},"Challenge envelope and message",[169,727,728,733,737,746],{},[190,729,730],{},[158,731,732],{},"\u002Fcross-device\u002Fapprove",[190,734,735],{},[158,736,199],{},[190,738,739,209,741,209,743],{},[158,740,672],{},[158,742,704],{},[158,744,745],{},"proof",[190,747,748],{},"Approved status",[169,750,751,756,760,766],{},[190,752,753],{},[158,754,755],{},"\u002Fcross-device\u002Freject",[190,757,758],{},[158,759,199],{},[190,761,762,209,764],{},[158,763,672],{},[158,765,704],{},[190,767,768],{},"Rejected status",[169,770,771,776,780,786],{},[190,772,773],{},[158,774,775],{},"\u002Fcross-device\u002Fcancel",[190,777,778],{},[158,779,199],{},[190,781,782,209,784],{},[158,783,672],{},[158,785,681],{},[190,787,788],{},"Cancelled status",[169,790,791,796,800,806],{},[190,792,793],{},[158,794,795],{},"\u002Fcross-device\u002Ffinalize",[190,797,798],{},[158,799,199],{},[190,801,802,209,804],{},[158,803,672],{},[158,805,681],{},[190,807,808],{},"Session token for login, proof artifact for sign or transaction",[169,810,811,816,820,826],{},[190,812,813],{},[158,814,815],{},"\u002Fcross-device\u002Fevents",[190,817,818],{},[158,819,716],{},[190,821,822,209,824],{},[158,823,672],{},[158,825,681],{},[190,827,828],{},"SSE status events",[257,830,833],{"className":259,"code":831,"filename":832,"language":262,"meta":263,"style":263},"import {\n  finalizeCrossDeviceOrder,\n  startCrossDeviceOrder,\n  subscribeToCrossDeviceOrder,\n} from '@onmax\u002Fbetter-auth-cross-device\u002Fclient'\n\nconst order = await startCrossDeviceOrder(authClient.$fetch.bind(authClient), {\n  endpointPrefix: '\u002Fcross-device',\n  kind: 'login',\n  displayTitle: 'Sign in to Arcade Rewards',\n  displaySummary: 'Approve this login in Nimiq Pay.',\n})\n\nconst events = subscribeToCrossDeviceOrder({\n  endpointPrefix: '\u002Fcross-device',\n  orderId: order.orderId,\n  desktopToken: order.desktopToken,\n  onEvent: async (event) => {\n    if (event === 'approved') {\n      const result = await finalizeCrossDeviceOrder(authClient.$fetch.bind(authClient), {\n        endpointPrefix: '\u002Fcross-device',\n        orderId: order.orderId,\n        desktopToken: order.desktopToken,\n      })\n\n      console.log(result)\n      events.close()\n    }\n  },\n})\n","app\u002Fdesktop.ts",[158,834,835,842,849,856,863,878,882,915,930,946,962,978,984,988,1004,1018,1034,1049,1074,1099,1139,1155,1171,1187,1195,1200,1217,1231,1237,1242],{"__ignoreMap":263},[267,836,837,840],{"class":269,"line":270},[267,838,839],{"class":285},"import",[267,841,312],{"class":281},[267,843,844,847],{"class":269,"line":315},[267,845,846],{"class":277},"  finalizeCrossDeviceOrder",[267,848,332],{"class":281},[267,850,851,854],{"class":269,"line":335},[267,852,853],{"class":277},"  startCrossDeviceOrder",[267,855,332],{"class":281},[267,857,858,861],{"class":269,"line":346},[267,859,860],{"class":277},"  subscribeToCrossDeviceOrder",[267,862,332],{"class":281},[267,864,865,867,870,872,875],{"class":269,"line":355},[267,866,349],{"class":281},[267,868,869],{"class":285}," from",[267,871,325],{"class":281},[267,873,874],{"class":304},"@onmax\u002Fbetter-auth-cross-device\u002Fclient",[267,876,877],{"class":281},"'\n",[267,879,880],{"class":269,"line":362},[267,881,359],{"emptyLinePlaceholder":358},[267,883,884,886,889,891,893,896,899,901,903,905,908,911,913],{"class":269,"line":396},[267,885,274],{"class":273},[267,887,888],{"class":277}," order ",[267,890,282],{"class":281},[267,892,286],{"class":285},[267,894,895],{"class":294}," startCrossDeviceOrder",[267,897,898],{"class":277},"(authClient",[267,900,161],{"class":281},[267,902,295],{"class":277},[267,904,161],{"class":281},[267,906,907],{"class":294},"bind",[267,909,910],{"class":277},"(authClient)",[267,912,309],{"class":281},[267,914,312],{"class":281},[267,916,917,920,922,924,926,928],{"class":269,"line":401},[267,918,919],{"class":318},"  endpointPrefix",[267,921,322],{"class":281},[267,923,325],{"class":281},[267,925,625],{"class":304},[267,927,301],{"class":281},[267,929,332],{"class":281},[267,931,932,935,937,939,942,944],{"class":269,"line":431},[267,933,934],{"class":318},"  kind",[267,936,322],{"class":281},[267,938,325],{"class":281},[267,940,941],{"class":304},"login",[267,943,301],{"class":281},[267,945,332],{"class":281},[267,947,948,951,953,955,958,960],{"class":269,"line":446},[267,949,950],{"class":318},"  displayTitle",[267,952,322],{"class":281},[267,954,325],{"class":281},[267,956,957],{"class":304},"Sign in to Arcade Rewards",[267,959,301],{"class":281},[267,961,332],{"class":281},[267,963,964,967,969,971,974,976],{"class":269,"line":455},[267,965,966],{"class":318},"  displaySummary",[267,968,322],{"class":281},[267,970,325],{"class":281},[267,972,973],{"class":304},"Approve this login in Nimiq Pay.",[267,975,301],{"class":281},[267,977,332],{"class":281},[267,979,980,982],{"class":269,"line":472},[267,981,349],{"class":281},[267,983,352],{"class":277},[267,985,986],{"class":269,"line":490},[267,987,359],{"emptyLinePlaceholder":358},[267,989,990,992,995,997,1000,1002],{"class":269,"line":507},[267,991,274],{"class":273},[267,993,994],{"class":277}," events ",[267,996,282],{"class":281},[267,998,999],{"class":294}," subscribeToCrossDeviceOrder",[267,1001,298],{"class":277},[267,1003,569],{"class":281},[267,1005,1006,1008,1010,1012,1014,1016],{"class":269,"line":524},[267,1007,919],{"class":318},[267,1009,322],{"class":281},[267,1011,325],{"class":281},[267,1013,625],{"class":304},[267,1015,301],{"class":281},[267,1017,332],{"class":281},[267,1019,1020,1023,1025,1028,1030,1032],{"class":269,"line":530},[267,1021,1022],{"class":318},"  orderId",[267,1024,322],{"class":281},[267,1026,1027],{"class":277}," order",[267,1029,161],{"class":281},[267,1031,672],{"class":277},[267,1033,332],{"class":281},[267,1035,1036,1039,1041,1043,1045,1047],{"class":269,"line":537},[267,1037,1038],{"class":318},"  desktopToken",[267,1040,322],{"class":281},[267,1042,1027],{"class":277},[267,1044,161],{"class":281},[267,1046,681],{"class":277},[267,1048,332],{"class":281},[267,1050,1051,1054,1056,1059,1062,1066,1069,1072],{"class":269,"line":542},[267,1052,1053],{"class":294},"  onEvent",[267,1055,322],{"class":281},[267,1057,1058],{"class":273}," async",[267,1060,1061],{"class":281}," (",[267,1063,1065],{"class":1064},"sHdIc","event",[267,1067,1068],{"class":281},")",[267,1070,1071],{"class":273}," =>",[267,1073,312],{"class":281},[267,1075,1077,1080,1082,1084,1087,1089,1092,1094,1097],{"class":269,"line":1076},19,[267,1078,1079],{"class":285},"    if",[267,1081,1061],{"class":318},[267,1083,1065],{"class":277},[267,1085,1086],{"class":281}," ===",[267,1088,325],{"class":281},[267,1090,1091],{"class":304},"approved",[267,1093,301],{"class":281},[267,1095,1096],{"class":318},") ",[267,1098,569],{"class":281},[267,1100,1102,1105,1108,1111,1113,1116,1118,1121,1123,1125,1127,1129,1131,1133,1135,1137],{"class":269,"line":1101},20,[267,1103,1104],{"class":273},"      const",[267,1106,1107],{"class":277}," result",[267,1109,1110],{"class":281}," =",[267,1112,286],{"class":285},[267,1114,1115],{"class":294}," finalizeCrossDeviceOrder",[267,1117,298],{"class":318},[267,1119,1120],{"class":277},"authClient",[267,1122,161],{"class":281},[267,1124,295],{"class":277},[267,1126,161],{"class":281},[267,1128,907],{"class":294},[267,1130,298],{"class":318},[267,1132,1120],{"class":277},[267,1134,1068],{"class":318},[267,1136,309],{"class":281},[267,1138,312],{"class":281},[267,1140,1142,1145,1147,1149,1151,1153],{"class":269,"line":1141},21,[267,1143,1144],{"class":318},"        endpointPrefix",[267,1146,322],{"class":281},[267,1148,325],{"class":281},[267,1150,625],{"class":304},[267,1152,301],{"class":281},[267,1154,332],{"class":281},[267,1156,1158,1161,1163,1165,1167,1169],{"class":269,"line":1157},22,[267,1159,1160],{"class":318},"        orderId",[267,1162,322],{"class":281},[267,1164,1027],{"class":277},[267,1166,161],{"class":281},[267,1168,672],{"class":277},[267,1170,332],{"class":281},[267,1172,1174,1177,1179,1181,1183,1185],{"class":269,"line":1173},23,[267,1175,1176],{"class":318},"        desktopToken",[267,1178,322],{"class":281},[267,1180,1027],{"class":277},[267,1182,161],{"class":281},[267,1184,681],{"class":277},[267,1186,332],{"class":281},[267,1188,1190,1193],{"class":269,"line":1189},24,[267,1191,1192],{"class":281},"      }",[267,1194,352],{"class":318},[267,1196,1198],{"class":269,"line":1197},25,[267,1199,359],{"emptyLinePlaceholder":358},[267,1201,1203,1206,1208,1210,1212,1215],{"class":269,"line":1202},26,[267,1204,1205],{"class":277},"      console",[267,1207,161],{"class":281},[267,1209,550],{"class":294},[267,1211,298],{"class":318},[267,1213,1214],{"class":277},"result",[267,1216,352],{"class":318},[267,1218,1220,1223,1225,1228],{"class":269,"line":1219},27,[267,1221,1222],{"class":277},"      events",[267,1224,161],{"class":281},[267,1226,1227],{"class":294},"close",[267,1229,1230],{"class":318},"()\n",[267,1232,1234],{"class":269,"line":1233},28,[267,1235,1236],{"class":281},"    }\n",[267,1238,1240],{"class":269,"line":1239},29,[267,1241,527],{"class":281},[267,1243,1245,1247],{"class":269,"line":1244},30,[267,1246,349],{"class":281},[267,1248,352],{"class":277},[257,1250,1253],{"className":259,"code":1251,"filename":1252,"language":262,"meta":263,"style":263},"import { createNimiqMiniAppApprover, parseCrossDeviceClaimUrl } from '@onmax\u002Fcross-device-nimiq'\n\nconst approver = createNimiqMiniAppApprover()\nconst claim = parseCrossDeviceClaimUrl(window.location.href)\n\nawait approver.approve(authClient.$fetch.bind(authClient), {\n  ...claim,\n  endpointPrefix: '\u002Fcross-device',\n})\n","app\u002Fphone.ts",[158,1254,1255,1282,1286,1299,1323,1327,1356,1366,1380],{"__ignoreMap":263},[267,1256,1257,1259,1262,1265,1267,1270,1273,1275,1277,1280],{"class":269,"line":270},[267,1258,839],{"class":285},[267,1260,1261],{"class":281}," {",[267,1263,1264],{"class":277}," createNimiqMiniAppApprover",[267,1266,309],{"class":281},[267,1268,1269],{"class":277}," parseCrossDeviceClaimUrl",[267,1271,1272],{"class":281}," }",[267,1274,869],{"class":285},[267,1276,325],{"class":281},[267,1278,1279],{"class":304},"@onmax\u002Fcross-device-nimiq",[267,1281,877],{"class":281},[267,1283,1284],{"class":269,"line":315},[267,1285,359],{"emptyLinePlaceholder":358},[267,1287,1288,1290,1293,1295,1297],{"class":269,"line":335},[267,1289,274],{"class":273},[267,1291,1292],{"class":277}," approver ",[267,1294,282],{"class":281},[267,1296,1264],{"class":294},[267,1298,1230],{"class":277},[267,1300,1301,1303,1306,1308,1310,1313,1315,1318,1320],{"class":269,"line":346},[267,1302,274],{"class":273},[267,1304,1305],{"class":277}," claim ",[267,1307,282],{"class":281},[267,1309,1269],{"class":294},[267,1311,1312],{"class":277},"(window",[267,1314,161],{"class":281},[267,1316,1317],{"class":277},"location",[267,1319,161],{"class":281},[267,1321,1322],{"class":277},"href)\n",[267,1324,1325],{"class":269,"line":355},[267,1326,359],{"emptyLinePlaceholder":358},[267,1328,1329,1332,1335,1337,1340,1342,1344,1346,1348,1350,1352,1354],{"class":269,"line":362},[267,1330,1331],{"class":285},"await",[267,1333,1334],{"class":277}," approver",[267,1336,161],{"class":281},[267,1338,1339],{"class":294},"approve",[267,1341,898],{"class":277},[267,1343,161],{"class":281},[267,1345,295],{"class":277},[267,1347,161],{"class":281},[267,1349,907],{"class":294},[267,1351,910],{"class":277},[267,1353,309],{"class":281},[267,1355,312],{"class":281},[267,1357,1358,1361,1364],{"class":269,"line":396},[267,1359,1360],{"class":281},"  ...",[267,1362,1363],{"class":277},"claim",[267,1365,332],{"class":281},[267,1367,1368,1370,1372,1374,1376,1378],{"class":269,"line":401},[267,1369,919],{"class":318},[267,1371,322],{"class":281},[267,1373,325],{"class":281},[267,1375,625],{"class":304},[267,1377,301],{"class":281},[267,1379,332],{"class":281},[267,1381,1382,1384],{"class":269,"line":431},[267,1383,349],{"class":281},[267,1385,352],{"class":277},[143,1387,1388,1389,209,1392,209,1395,1397,1398,1401],{},"Expected status order for login: ",[158,1390,1391],{},"claimed",[158,1393,1394],{},"waiting_user",[158,1396,1091],{},", then ",[158,1399,1400],{},"finalized",". Rejection, cancellation, and expiry stop the flow before finalization.",[143,1403,1404,1405,1408,1409,161],{},"Use ",[158,1406,1407],{},"\u002Fevents"," from the desktop browser. Do not subscribe from the phone approval screen because it does not own the ",[158,1410,681],{},[150,1412,1414],{"id":1413},"ledger","Ledger",[143,1416,156,1417,161],{},[158,1418,1419],{},"\u002Fledger",[163,1421,1422,1434],{},[166,1423,1424],{},[169,1425,1426,1428,1430,1432],{},[172,1427,174],{},[172,1429,177],{},[172,1431,180],{},[172,1433,183],{},[185,1435,1436,1453,1474,1498,1515,1530,1545,1561,1578],{},[169,1437,1438,1443,1447,1450],{},[190,1439,1440],{},[158,1441,1442],{},"\u002Fledger\u002Faccount",[190,1444,1445],{},[158,1446,716],{},[190,1448,1449],{},"Session cookie",[190,1451,1452],{},"Ledger account",[169,1454,1455,1460,1464,1471],{},[190,1456,1457],{},[158,1458,1459],{},"\u002Fledger\u002Fbalance",[190,1461,1462],{},[158,1463,716],{},[190,1465,1466,1467,1470],{},"Optional ",[158,1468,1469],{},"asset"," query",[190,1472,1473],{},"Balance view list",[169,1475,1476,1481,1485,1495],{},[190,1477,1478],{},[158,1479,1480],{},"\u002Fledger\u002Fentries",[190,1482,1483],{},[158,1484,716],{},[190,1486,1466,1487,209,1489,209,1492,1470],{},[158,1488,1469],{},[158,1490,1491],{},"limit",[158,1493,1494],{},"cursor",[190,1496,1497],{},"Ledger entry list",[169,1499,1500,1505,1509,1512],{},[190,1501,1502],{},[158,1503,1504],{},"\u002Fledger\u002Fcredit",[190,1506,1507],{},[158,1508,199],{},[190,1510,1511],{},"Mutation body",[190,1513,1514],{},"Mutation result",[169,1516,1517,1522,1526,1528],{},[190,1518,1519],{},[158,1520,1521],{},"\u002Fledger\u002Fdebit",[190,1523,1524],{},[158,1525,199],{},[190,1527,1511],{},[190,1529,1514],{},[169,1531,1532,1537,1541,1543],{},[190,1533,1534],{},[158,1535,1536],{},"\u002Fledger\u002Fadjust",[190,1538,1539],{},[158,1540,199],{},[190,1542,1511],{},[190,1544,1514],{},[169,1546,1547,1552,1556,1558],{},[190,1548,1549],{},[158,1550,1551],{},"\u002Fledger\u002Freserve",[190,1553,1554],{},[158,1555,199],{},[190,1557,1511],{},[190,1559,1560],{},"Reservation result",[169,1562,1563,1568,1572,1575],{},[190,1564,1565],{},[158,1566,1567],{},"\u002Fledger\u002Freservations\u002Frelease",[190,1569,1570],{},[158,1571,199],{},[190,1573,1574],{},"Reservation body",[190,1576,1577],{},"Release result",[169,1579,1580,1585,1589,1591],{},[190,1581,1582],{},[158,1583,1584],{},"\u002Fledger\u002Freservations\u002Fcapture",[190,1586,1587],{},[158,1588,199],{},[190,1590,1574],{},[190,1592,1593],{},"Capture result",[143,1595,1596,1597,1600,1601,1604],{},"Ledger mutation endpoints are disabled unless ",[158,1598,1599],{},"enableMutations"," and ",[158,1602,1603],{},"authorizeMutation"," are configured.",[257,1606,1609],{"className":259,"code":1607,"filename":1608,"language":262,"meta":263,"style":263},"import { getLedgerBalance, listLedgerEntries } from '@onmax\u002Fbetter-auth-ledger\u002Fclient'\n\nconst balance = await getLedgerBalance(authClient.$fetch.bind(authClient), {\n  endpointPrefix: '\u002Fledger',\n  asset: 'coin',\n})\n\nconst entries = await listLedgerEntries(authClient.$fetch.bind(authClient), {\n  endpointPrefix: '\u002Fledger',\n  asset: 'coin',\n  limit: 20,\n})\n\nconsole.log({ balance, entries })\n","app\u002Fledger.ts",[158,1610,1611,1636,1640,1669,1683,1699,1705,1709,1738,1752,1766,1779,1785,1789],{"__ignoreMap":263},[267,1612,1613,1615,1617,1620,1622,1625,1627,1629,1631,1634],{"class":269,"line":270},[267,1614,839],{"class":285},[267,1616,1261],{"class":281},[267,1618,1619],{"class":277}," getLedgerBalance",[267,1621,309],{"class":281},[267,1623,1624],{"class":277}," listLedgerEntries",[267,1626,1272],{"class":281},[267,1628,869],{"class":285},[267,1630,325],{"class":281},[267,1632,1633],{"class":304},"@onmax\u002Fbetter-auth-ledger\u002Fclient",[267,1635,877],{"class":281},[267,1637,1638],{"class":269,"line":315},[267,1639,359],{"emptyLinePlaceholder":358},[267,1641,1642,1644,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667],{"class":269,"line":335},[267,1643,274],{"class":273},[267,1645,1646],{"class":277}," balance ",[267,1648,282],{"class":281},[267,1650,286],{"class":285},[267,1652,1619],{"class":294},[267,1654,898],{"class":277},[267,1656,161],{"class":281},[267,1658,295],{"class":277},[267,1660,161],{"class":281},[267,1662,907],{"class":294},[267,1664,910],{"class":277},[267,1666,309],{"class":281},[267,1668,312],{"class":281},[267,1670,1671,1673,1675,1677,1679,1681],{"class":269,"line":346},[267,1672,919],{"class":318},[267,1674,322],{"class":281},[267,1676,325],{"class":281},[267,1678,1419],{"class":304},[267,1680,301],{"class":281},[267,1682,332],{"class":281},[267,1684,1685,1688,1690,1692,1695,1697],{"class":269,"line":355},[267,1686,1687],{"class":318},"  asset",[267,1689,322],{"class":281},[267,1691,325],{"class":281},[267,1693,1694],{"class":304},"coin",[267,1696,301],{"class":281},[267,1698,332],{"class":281},[267,1700,1701,1703],{"class":269,"line":362},[267,1702,349],{"class":281},[267,1704,352],{"class":277},[267,1706,1707],{"class":269,"line":396},[267,1708,359],{"emptyLinePlaceholder":358},[267,1710,1711,1713,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736],{"class":269,"line":401},[267,1712,274],{"class":273},[267,1714,1715],{"class":277}," entries ",[267,1717,282],{"class":281},[267,1719,286],{"class":285},[267,1721,1624],{"class":294},[267,1723,898],{"class":277},[267,1725,161],{"class":281},[267,1727,295],{"class":277},[267,1729,161],{"class":281},[267,1731,907],{"class":294},[267,1733,910],{"class":277},[267,1735,309],{"class":281},[267,1737,312],{"class":281},[267,1739,1740,1742,1744,1746,1748,1750],{"class":269,"line":431},[267,1741,919],{"class":318},[267,1743,322],{"class":281},[267,1745,325],{"class":281},[267,1747,1419],{"class":304},[267,1749,301],{"class":281},[267,1751,332],{"class":281},[267,1753,1754,1756,1758,1760,1762,1764],{"class":269,"line":446},[267,1755,1687],{"class":318},[267,1757,322],{"class":281},[267,1759,325],{"class":281},[267,1761,1694],{"class":304},[267,1763,301],{"class":281},[267,1765,332],{"class":281},[267,1767,1768,1771,1773,1777],{"class":269,"line":455},[267,1769,1770],{"class":318},"  limit",[267,1772,322],{"class":281},[267,1774,1776],{"class":1775},"sbssI"," 20",[267,1778,332],{"class":281},[267,1780,1781,1783],{"class":269,"line":472},[267,1782,349],{"class":281},[267,1784,352],{"class":277},[267,1786,1787],{"class":269,"line":490},[267,1788,359],{"emptyLinePlaceholder":358},[267,1790,1791,1793,1795,1797,1799,1802,1805,1807,1809,1811],{"class":269,"line":507},[267,1792,545],{"class":277},[267,1794,161],{"class":281},[267,1796,550],{"class":294},[267,1798,298],{"class":277},[267,1800,1801],{"class":281},"{",[267,1803,1804],{"class":277}," balance",[267,1806,309],{"class":281},[267,1808,1715],{"class":277},[267,1810,349],{"class":281},[267,1812,352],{"class":277},[257,1814,1817],{"className":259,"code":1815,"filename":1816,"language":262,"meta":263,"style":263},"await auth.api.$fetch('\u002Fledger\u002Fcredit', {\n  method: 'POST',\n  body: {\n    userId: 'user_123',\n    asset: 'coin',\n    amount: 100,\n    reason: 'daily_bonus',\n    idempotencyKey: 'daily_bonus:user_123:2026-05-06',\n  },\n})\n","server\u002Fadmin-credit.ts",[158,1818,1819,1847,1861,1869,1885,1900,1912,1928,1944,1948],{"__ignoreMap":263},[267,1820,1821,1823,1826,1828,1831,1833,1835,1837,1839,1841,1843,1845],{"class":269,"line":270},[267,1822,1331],{"class":285},[267,1824,1825],{"class":277}," auth",[267,1827,161],{"class":281},[267,1829,1830],{"class":277},"api",[267,1832,161],{"class":281},[267,1834,295],{"class":294},[267,1836,298],{"class":277},[267,1838,301],{"class":281},[267,1840,1504],{"class":304},[267,1842,301],{"class":281},[267,1844,309],{"class":281},[267,1846,312],{"class":281},[267,1848,1849,1851,1853,1855,1857,1859],{"class":269,"line":315},[267,1850,319],{"class":318},[267,1852,322],{"class":281},[267,1854,325],{"class":281},[267,1856,199],{"class":304},[267,1858,301],{"class":281},[267,1860,332],{"class":281},[267,1862,1863,1865,1867],{"class":269,"line":335},[267,1864,338],{"class":318},[267,1866,322],{"class":281},[267,1868,312],{"class":281},[267,1870,1871,1874,1876,1878,1881,1883],{"class":269,"line":346},[267,1872,1873],{"class":318},"    userId",[267,1875,322],{"class":281},[267,1877,325],{"class":281},[267,1879,1880],{"class":304},"user_123",[267,1882,301],{"class":281},[267,1884,332],{"class":281},[267,1886,1887,1890,1892,1894,1896,1898],{"class":269,"line":355},[267,1888,1889],{"class":318},"    asset",[267,1891,322],{"class":281},[267,1893,325],{"class":281},[267,1895,1694],{"class":304},[267,1897,301],{"class":281},[267,1899,332],{"class":281},[267,1901,1902,1905,1907,1910],{"class":269,"line":362},[267,1903,1904],{"class":318},"    amount",[267,1906,322],{"class":281},[267,1908,1909],{"class":1775}," 100",[267,1911,332],{"class":281},[267,1913,1914,1917,1919,1921,1924,1926],{"class":269,"line":396},[267,1915,1916],{"class":318},"    reason",[267,1918,322],{"class":281},[267,1920,325],{"class":281},[267,1922,1923],{"class":304},"daily_bonus",[267,1925,301],{"class":281},[267,1927,332],{"class":281},[267,1929,1930,1933,1935,1937,1940,1942],{"class":269,"line":401},[267,1931,1932],{"class":318},"    idempotencyKey",[267,1934,322],{"class":281},[267,1936,325],{"class":281},[267,1938,1939],{"class":304},"daily_bonus:user_123:2026-05-06",[267,1941,301],{"class":281},[267,1943,332],{"class":281},[267,1945,1946],{"class":269,"line":431},[267,1947,527],{"class":281},[267,1949,1950,1952],{"class":269,"line":446},[267,1951,349],{"class":281},[267,1953,352],{"class":277},[143,1955,1956],{},"Expected behavior: read endpoints require a session. Mutation endpoints additionally require plugin-level authorization.",[1958,1959,1960],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":263,"searchDepth":315,"depth":315,"links":1962},[1963,1964,1965],{"id":152,"depth":315,"text":153},{"id":620,"depth":315,"text":68},{"id":1413,"depth":315,"text":1414},"Better Auth endpoint contracts for Nimiq auth, cross-device approval, and ledger.","md",null,{},{"title":126,"description":1966},"Dm0HWzIsUs85Kx8FIozeqLod5qZcGn4eUiAk5H6QqCI",[1973,1975],{"title":122,"path":123,"stem":124,"description":1974,"children":-1},"Public package and subpath reference for Onmax Mini Apps SDK.",{"title":130,"path":131,"stem":132,"description":1976,"children":-1},"Supported browser, Nuxt, Node.js, Worker, and test runtime expectations.",1778838255210]