[{"data":1,"prerenderedAt":1361},["ShallowReactive",2],{"navigation_docs":3,"-auth-security-model":137,"-auth-security-model-surround":1356},[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":76,"body":139,"description":1350,"extension":1351,"links":1352,"meta":1353,"navigation":198,"path":77,"seo":1354,"stem":78,"__hash__":1355},"docs\u002F3.auth\u002F4.security-model.md",{"type":140,"value":141,"toc":1342},"minimark",[142,146,149,154,157,236,239,265,269,272,347,350,414,418,421,479,482,605,608,769,773,776,920,939,943,946,1143,1153,1160,1164,1167,1335,1338],[143,144,145],"p",{},"Use this page to decide where trust changes hands in direct Nimiq sign-in and cross-device approval.",[143,147,148],{},"Do not treat a signed wallet message as product authorization by itself. These packages prove wallet control and return Better Auth artifacts; your app still decides what the user may do.",[150,151,153],"h2",{"id":152},"direct-sign-in-boundary","Direct sign-in boundary",[143,155,156],{},"The server trusts a login only after it verifies a server-issued nonce challenge.",[158,159,164],"pre",{"className":160,"code":161,"language":162,"meta":163,"style":163},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sequenceDiagram\n  participant Browser\n  participant Auth\n  participant Wallet\n\n  Browser->>Auth: POST \u002Fnimiq\u002Fnonce\n  Auth-->>Browser: nonceId, message, expiresAt\n  Browser->>Wallet: sign(message)\n  Wallet-->>Browser: publicKeyHex, signatureHex\n  Browser->>Auth: POST \u002Fnimiq\u002Fverify\n  Auth-->>Browser: session cookie, token\n","mermaid","",[165,166,167,175,181,187,193,200,206,212,218,224,230],"code",{"__ignoreMap":163},[168,169,172],"span",{"class":170,"line":171},"line",1,[168,173,174],{},"sequenceDiagram\n",[168,176,178],{"class":170,"line":177},2,[168,179,180],{},"  participant Browser\n",[168,182,184],{"class":170,"line":183},3,[168,185,186],{},"  participant Auth\n",[168,188,190],{"class":170,"line":189},4,[168,191,192],{},"  participant Wallet\n",[168,194,196],{"class":170,"line":195},5,[168,197,199],{"emptyLinePlaceholder":198},true,"\n",[168,201,203],{"class":170,"line":202},6,[168,204,205],{},"  Browser->>Auth: POST \u002Fnimiq\u002Fnonce\n",[168,207,209],{"class":170,"line":208},7,[168,210,211],{},"  Auth-->>Browser: nonceId, message, expiresAt\n",[168,213,215],{"class":170,"line":214},8,[168,216,217],{},"  Browser->>Wallet: sign(message)\n",[168,219,221],{"class":170,"line":220},9,[168,222,223],{},"  Wallet-->>Browser: publicKeyHex, signatureHex\n",[168,225,227],{"class":170,"line":226},10,[168,228,229],{},"  Browser->>Auth: POST \u002Fnimiq\u002Fverify\n",[168,231,233],{"class":170,"line":232},11,[168,234,235],{},"  Auth-->>Browser: session cookie, token\n",[143,237,238],{},"Verification checks:",[240,241,242,246,253,256,259,262],"ul",{},[243,244,245],"li",{},"The nonce exists and has not expired.",[243,247,248,249,252],{},"The verify request origin matches the nonce origin when ",[165,250,251],{},"enforceOrigin"," is enabled.",[243,254,255],{},"The nonce is deleted during verification.",[243,257,258],{},"The signature verifies against the signed message and public key.",[243,260,261],{},"The optional address derives from the public key.",[243,263,264],{},"Better Auth creates the session only after verification succeeds.",[150,266,268],{"id":267},"cross-device-boundary","Cross-device boundary",[143,270,271],{},"Cross-device approval separates phone approval from desktop finalization.",[158,273,275],{"className":160,"code":274,"language":162,"meta":163,"style":163},"sequenceDiagram\n  participant Desktop\n  participant Auth\n  participant Phone\n\n  Desktop->>Auth: POST \u002Fcross-device\u002Fstart\n  Auth-->>Desktop: orderId, claimUrl, desktopToken\n  Phone->>Auth: POST \u002Fcross-device\u002Fclaim\n  Auth-->>Phone: challengeToken\n  Phone->>Auth: GET \u002Fcross-device\u002Fchallenge\n  Auth-->>Phone: message\n  Phone->>Auth: POST \u002Fcross-device\u002Fapprove\n  Desktop->>Auth: POST \u002Fcross-device\u002Ffinalize\n  Auth-->>Desktop: session token or proof artifact\n",[165,276,277,281,286,290,295,299,304,309,314,319,324,329,335,341],{"__ignoreMap":163},[168,278,279],{"class":170,"line":171},[168,280,174],{},[168,282,283],{"class":170,"line":177},[168,284,285],{},"  participant Desktop\n",[168,287,288],{"class":170,"line":183},[168,289,186],{},[168,291,292],{"class":170,"line":189},[168,293,294],{},"  participant Phone\n",[168,296,297],{"class":170,"line":195},[168,298,199],{"emptyLinePlaceholder":198},[168,300,301],{"class":170,"line":202},[168,302,303],{},"  Desktop->>Auth: POST \u002Fcross-device\u002Fstart\n",[168,305,306],{"class":170,"line":208},[168,307,308],{},"  Auth-->>Desktop: orderId, claimUrl, desktopToken\n",[168,310,311],{"class":170,"line":214},[168,312,313],{},"  Phone->>Auth: POST \u002Fcross-device\u002Fclaim\n",[168,315,316],{"class":170,"line":220},[168,317,318],{},"  Auth-->>Phone: challengeToken\n",[168,320,321],{"class":170,"line":226},[168,322,323],{},"  Phone->>Auth: GET \u002Fcross-device\u002Fchallenge\n",[168,325,326],{"class":170,"line":232},[168,327,328],{},"  Auth-->>Phone: message\n",[168,330,332],{"class":170,"line":331},12,[168,333,334],{},"  Phone->>Auth: POST \u002Fcross-device\u002Fapprove\n",[168,336,338],{"class":170,"line":337},13,[168,339,340],{},"  Desktop->>Auth: POST \u002Fcross-device\u002Ffinalize\n",[168,342,344],{"class":170,"line":343},14,[168,345,346],{},"  Auth-->>Desktop: session token or proof artifact\n",[143,348,349],{},"Token responsibilities:",[351,352,353,369],"table",{},[354,355,356],"thead",{},[357,358,359,363,366],"tr",{},[360,361,362],"th",{},"Token",[360,364,365],{},"Holder",[360,367,368],{},"Used for",[370,371,372,389,401],"tbody",{},[357,373,374,380,383],{},[375,376,377],"td",{},[165,378,379],{},"claimToken",[375,381,382],{},"Phone claim URL",[375,384,385,386],{},"Claim an unexpired order and receive ",[165,387,388],{},"challengeToken",[357,390,391,395,398],{},[375,392,393],{},[165,394,388],{},[375,396,397],{},"Phone approval route",[375,399,400],{},"Fetch, approve, or reject the challenge",[357,402,403,408,411],{},[375,404,405],{},[165,406,407],{},"desktopToken",[375,409,410],{},"Desktop only",[375,412,413],{},"Subscribe to events, cancel, or finalize",[150,415,417],{"id":416},"expected-trust-outputs","Expected trust outputs",[143,419,420],{},"Direct sign-in success:",[158,422,427],{"className":423,"code":424,"filename":425,"language":426,"meta":163,"style":163},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"ok\": true,\n  \"token\": \"better-auth-session-token\"\n}\n","direct-sign-in","json",[165,428,429,435,453,474],{"__ignoreMap":163},[168,430,431],{"class":170,"line":171},[168,432,434],{"class":433},"sMK4o","{\n",[168,436,437,440,444,447,450],{"class":170,"line":177},[168,438,439],{"class":433},"  \"",[168,441,443],{"class":442},"spNyl","ok",[168,445,446],{"class":433},"\"",[168,448,449],{"class":433},":",[168,451,452],{"class":433}," true,\n",[168,454,455,457,460,462,464,467,471],{"class":170,"line":183},[168,456,439],{"class":433},[168,458,459],{"class":442},"token",[168,461,446],{"class":433},[168,463,449],{"class":433},[168,465,466],{"class":433}," \"",[168,468,470],{"class":469},"sfazB","better-auth-session-token",[168,472,473],{"class":433},"\"\n",[168,475,476],{"class":170,"line":189},[168,477,478],{"class":433},"}\n",[143,480,481],{},"Cross-device login finalization:",[158,483,486],{"className":423,"code":484,"filename":485,"language":426,"meta":163,"style":163},"{\n  \"ok\": true,\n  \"orderId\": \"HrlSySstW-SR0pbCIY6Rzw\",\n  \"status\": \"finalized\",\n  \"kind\": \"login\",\n  \"redirectTo\": \"\u002Fdashboard\",\n  \"token\": \"better-auth-session-token\"\n}\n","cross-device-login",[165,487,488,492,504,525,545,565,585,601],{"__ignoreMap":163},[168,489,490],{"class":170,"line":171},[168,491,434],{"class":433},[168,493,494,496,498,500,502],{"class":170,"line":177},[168,495,439],{"class":433},[168,497,443],{"class":442},[168,499,446],{"class":433},[168,501,449],{"class":433},[168,503,452],{"class":433},[168,505,506,508,511,513,515,517,520,522],{"class":170,"line":183},[168,507,439],{"class":433},[168,509,510],{"class":442},"orderId",[168,512,446],{"class":433},[168,514,449],{"class":433},[168,516,466],{"class":433},[168,518,519],{"class":469},"HrlSySstW-SR0pbCIY6Rzw",[168,521,446],{"class":433},[168,523,524],{"class":433},",\n",[168,526,527,529,532,534,536,538,541,543],{"class":170,"line":189},[168,528,439],{"class":433},[168,530,531],{"class":442},"status",[168,533,446],{"class":433},[168,535,449],{"class":433},[168,537,466],{"class":433},[168,539,540],{"class":469},"finalized",[168,542,446],{"class":433},[168,544,524],{"class":433},[168,546,547,549,552,554,556,558,561,563],{"class":170,"line":195},[168,548,439],{"class":433},[168,550,551],{"class":442},"kind",[168,553,446],{"class":433},[168,555,449],{"class":433},[168,557,466],{"class":433},[168,559,560],{"class":469},"login",[168,562,446],{"class":433},[168,564,524],{"class":433},[168,566,567,569,572,574,576,578,581,583],{"class":170,"line":202},[168,568,439],{"class":433},[168,570,571],{"class":442},"redirectTo",[168,573,446],{"class":433},[168,575,449],{"class":433},[168,577,466],{"class":433},[168,579,580],{"class":469},"\u002Fdashboard",[168,582,446],{"class":433},[168,584,524],{"class":433},[168,586,587,589,591,593,595,597,599],{"class":170,"line":208},[168,588,439],{"class":433},[168,590,459],{"class":442},[168,592,446],{"class":433},[168,594,449],{"class":433},[168,596,466],{"class":433},[168,598,470],{"class":469},[168,600,473],{"class":433},[168,602,603],{"class":170,"line":214},[168,604,478],{"class":433},[143,606,607],{},"Cross-device sign finalization:",[158,609,612],{"className":423,"code":610,"filename":611,"language":426,"meta":163,"style":163},"{\n  \"ok\": true,\n  \"orderId\": \"7cEcn_LJ8q3Y0CCO6Pr8jw\",\n  \"status\": \"finalized\",\n  \"kind\": \"sign\",\n  \"proofArtifact\": {\n    \"publicKeyHex\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n    \"signatureHex\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n    \"address\": \"NQ07 0000 0000 0000 0000 0000 0000 0000 0000\"\n  }\n}\n","cross-device-sign",[165,613,614,618,630,649,667,686,700,722,742,760,765],{"__ignoreMap":163},[168,615,616],{"class":170,"line":171},[168,617,434],{"class":433},[168,619,620,622,624,626,628],{"class":170,"line":177},[168,621,439],{"class":433},[168,623,443],{"class":442},[168,625,446],{"class":433},[168,627,449],{"class":433},[168,629,452],{"class":433},[168,631,632,634,636,638,640,642,645,647],{"class":170,"line":183},[168,633,439],{"class":433},[168,635,510],{"class":442},[168,637,446],{"class":433},[168,639,449],{"class":433},[168,641,466],{"class":433},[168,643,644],{"class":469},"7cEcn_LJ8q3Y0CCO6Pr8jw",[168,646,446],{"class":433},[168,648,524],{"class":433},[168,650,651,653,655,657,659,661,663,665],{"class":170,"line":189},[168,652,439],{"class":433},[168,654,531],{"class":442},[168,656,446],{"class":433},[168,658,449],{"class":433},[168,660,466],{"class":433},[168,662,540],{"class":469},[168,664,446],{"class":433},[168,666,524],{"class":433},[168,668,669,671,673,675,677,679,682,684],{"class":170,"line":195},[168,670,439],{"class":433},[168,672,551],{"class":442},[168,674,446],{"class":433},[168,676,449],{"class":433},[168,678,466],{"class":433},[168,680,681],{"class":469},"sign",[168,683,446],{"class":433},[168,685,524],{"class":433},[168,687,688,690,693,695,697],{"class":170,"line":202},[168,689,439],{"class":433},[168,691,692],{"class":442},"proofArtifact",[168,694,446],{"class":433},[168,696,449],{"class":433},[168,698,699],{"class":433}," {\n",[168,701,702,705,709,711,713,715,718,720],{"class":170,"line":208},[168,703,704],{"class":433},"    \"",[168,706,708],{"class":707},"sBMFI","publicKeyHex",[168,710,446],{"class":433},[168,712,449],{"class":433},[168,714,466],{"class":433},[168,716,717],{"class":469},"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",[168,719,446],{"class":433},[168,721,524],{"class":433},[168,723,724,726,729,731,733,735,738,740],{"class":170,"line":214},[168,725,704],{"class":433},[168,727,728],{"class":707},"signatureHex",[168,730,446],{"class":433},[168,732,449],{"class":433},[168,734,466],{"class":433},[168,736,737],{"class":469},"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",[168,739,446],{"class":433},[168,741,524],{"class":433},[168,743,744,746,749,751,753,755,758],{"class":170,"line":220},[168,745,704],{"class":433},[168,747,748],{"class":707},"address",[168,750,446],{"class":433},[168,752,449],{"class":433},[168,754,466],{"class":433},[168,756,757],{"class":469},"NQ07 0000 0000 0000 0000 0000 0000 0000 0000",[168,759,473],{"class":433},[168,761,762],{"class":170,"line":226},[168,763,764],{"class":433},"  }\n",[168,766,767],{"class":170,"line":232},[168,768,478],{"class":433},[150,770,772],{"id":771},"origin-policy","Origin policy",[143,774,775],{},"Keep origin checks enabled unless you are writing a controlled local test.",[158,777,782],{"className":778,"code":779,"filename":780,"language":781,"meta":163,"style":163},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","nimiqAuth({\n  appName: 'Nimiq Checkout',\n  enforceOrigin: true,\n})\n\ncrossDevice({\n  appName: 'Nimiq Checkout',\n  trustedOrigins: ['https:\u002F\u002Fpay.example.com'],\n  enforceOrigin: true,\n  adapters: [nimiqAdapter],\n  resolveLogin,\n})\n","server\u002Fauth.ts","ts",[165,783,784,796,815,828,836,840,849,863,885,895,907,914],{"__ignoreMap":163},[168,785,786,790,794],{"class":170,"line":171},[168,787,789],{"class":788},"s2Zo4","nimiqAuth",[168,791,793],{"class":792},"sTEyZ","(",[168,795,434],{"class":433},[168,797,798,802,804,807,810,813],{"class":170,"line":177},[168,799,801],{"class":800},"swJcz","  appName",[168,803,449],{"class":433},[168,805,806],{"class":433}," '",[168,808,809],{"class":469},"Nimiq Checkout",[168,811,812],{"class":433},"'",[168,814,524],{"class":433},[168,816,817,820,822,826],{"class":170,"line":183},[168,818,819],{"class":800},"  enforceOrigin",[168,821,449],{"class":433},[168,823,825],{"class":824},"sfNiH"," true",[168,827,524],{"class":433},[168,829,830,833],{"class":170,"line":189},[168,831,832],{"class":433},"}",[168,834,835],{"class":792},")\n",[168,837,838],{"class":170,"line":195},[168,839,199],{"emptyLinePlaceholder":198},[168,841,842,845,847],{"class":170,"line":202},[168,843,844],{"class":788},"crossDevice",[168,846,793],{"class":792},[168,848,434],{"class":433},[168,850,851,853,855,857,859,861],{"class":170,"line":208},[168,852,801],{"class":800},[168,854,449],{"class":433},[168,856,806],{"class":433},[168,858,809],{"class":469},[168,860,812],{"class":433},[168,862,524],{"class":433},[168,864,865,868,870,873,875,878,880,883],{"class":170,"line":214},[168,866,867],{"class":800},"  trustedOrigins",[168,869,449],{"class":433},[168,871,872],{"class":792}," [",[168,874,812],{"class":433},[168,876,877],{"class":469},"https:\u002F\u002Fpay.example.com",[168,879,812],{"class":433},[168,881,882],{"class":792},"]",[168,884,524],{"class":433},[168,886,887,889,891,893],{"class":170,"line":220},[168,888,819],{"class":800},[168,890,449],{"class":433},[168,892,825],{"class":824},[168,894,524],{"class":433},[168,896,897,900,902,905],{"class":170,"line":226},[168,898,899],{"class":800},"  adapters",[168,901,449],{"class":433},[168,903,904],{"class":792}," [nimiqAdapter]",[168,906,524],{"class":433},[168,908,909,912],{"class":170,"line":232},[168,910,911],{"class":792},"  resolveLogin",[168,913,524],{"class":433},[168,915,916,918],{"class":170,"line":331},[168,917,832],{"class":433},[168,919,835],{"class":792},[143,921,922,923,926,927,930,931,934,935,938],{},"Do not set ",[165,924,925],{},"enforceOrigin: false"," to work around proxy headers in production. Fix forwarded ",[165,928,929],{},"origin",", ",[165,932,933],{},"host",", and ",[165,936,937],{},"x-forwarded-proto"," handling instead.",[150,940,942],{"id":941},"storage-policy","Storage policy",[143,944,945],{},"Use durable storage for production auth state.",[158,947,950],{"className":778,"code":948,"filename":949,"language":781,"meta":163,"style":163},"import { createKeyValueNimiqNonceStore } from '@onmax\u002Fbetter-auth-nimiq\u002Fkv'\n\nexport const nonceStore = createKeyValueNimiqNonceStore({\n  get: key => env.AUTH_KV.get(key),\n  set: (key, value, options) => env.AUTH_KV.put(key, value, {\n    expirationTtl: options.ttlSeconds,\n  }),\n  delete: key => env.AUTH_KV.delete(key),\n})\n","server\u002Fnonce-store.ts",[165,951,952,978,982,1002,1035,1086,1102,1111,1137],{"__ignoreMap":163},[168,953,954,958,961,964,967,970,972,975],{"class":170,"line":171},[168,955,957],{"class":956},"s7zQu","import",[168,959,960],{"class":433}," {",[168,962,963],{"class":792}," createKeyValueNimiqNonceStore",[168,965,966],{"class":433}," }",[168,968,969],{"class":956}," from",[168,971,806],{"class":433},[168,973,974],{"class":469},"@onmax\u002Fbetter-auth-nimiq\u002Fkv",[168,976,977],{"class":433},"'\n",[168,979,980],{"class":170,"line":177},[168,981,199],{"emptyLinePlaceholder":198},[168,983,984,987,990,993,996,998,1000],{"class":170,"line":183},[168,985,986],{"class":956},"export",[168,988,989],{"class":442}," const",[168,991,992],{"class":792}," nonceStore ",[168,994,995],{"class":433},"=",[168,997,963],{"class":788},[168,999,793],{"class":792},[168,1001,434],{"class":433},[168,1003,1004,1007,1009,1013,1016,1019,1022,1025,1027,1030,1033],{"class":170,"line":189},[168,1005,1006],{"class":788},"  get",[168,1008,449],{"class":433},[168,1010,1012],{"class":1011},"sHdIc"," key",[168,1014,1015],{"class":442}," =>",[168,1017,1018],{"class":792}," env",[168,1020,1021],{"class":433},".",[168,1023,1024],{"class":792},"AUTH_KV",[168,1026,1021],{"class":433},[168,1028,1029],{"class":788},"get",[168,1031,1032],{"class":792},"(key)",[168,1034,524],{"class":433},[168,1036,1037,1040,1042,1045,1048,1051,1054,1056,1059,1062,1064,1066,1068,1070,1072,1075,1078,1080,1082,1084],{"class":170,"line":195},[168,1038,1039],{"class":788},"  set",[168,1041,449],{"class":433},[168,1043,1044],{"class":433}," (",[168,1046,1047],{"class":1011},"key",[168,1049,1050],{"class":433},",",[168,1052,1053],{"class":1011}," value",[168,1055,1050],{"class":433},[168,1057,1058],{"class":1011}," options",[168,1060,1061],{"class":433},")",[168,1063,1015],{"class":442},[168,1065,1018],{"class":792},[168,1067,1021],{"class":433},[168,1069,1024],{"class":792},[168,1071,1021],{"class":433},[168,1073,1074],{"class":788},"put",[168,1076,1077],{"class":792},"(key",[168,1079,1050],{"class":433},[168,1081,1053],{"class":792},[168,1083,1050],{"class":433},[168,1085,699],{"class":433},[168,1087,1088,1091,1093,1095,1097,1100],{"class":170,"line":202},[168,1089,1090],{"class":800},"    expirationTtl",[168,1092,449],{"class":433},[168,1094,1058],{"class":792},[168,1096,1021],{"class":433},[168,1098,1099],{"class":792},"ttlSeconds",[168,1101,524],{"class":433},[168,1103,1104,1107,1109],{"class":170,"line":208},[168,1105,1106],{"class":433},"  }",[168,1108,1061],{"class":792},[168,1110,524],{"class":433},[168,1112,1113,1116,1118,1120,1122,1124,1126,1128,1130,1133,1135],{"class":170,"line":214},[168,1114,1115],{"class":788},"  delete",[168,1117,449],{"class":433},[168,1119,1012],{"class":1011},[168,1121,1015],{"class":442},[168,1123,1018],{"class":792},[168,1125,1021],{"class":433},[168,1127,1024],{"class":792},[168,1129,1021],{"class":433},[168,1131,1132],{"class":788},"delete",[168,1134,1032],{"class":792},[168,1136,524],{"class":433},[168,1138,1139,1141],{"class":170,"line":220},[168,1140,832],{"class":433},[168,1142,835],{"class":792},[143,1144,1145,1146,1149,1150,1021],{},"Direct sign-in needs nonce records to survive across the runtime instance that issued ",[165,1147,1148],{},"\u002Fnonce"," and the runtime instance that receives ",[165,1151,1152],{},"\u002Fverify",[143,1154,1155,1156,1159],{},"Cross-device approval stores orders, token hashes, challenge token hashes, status, identity, and proof artifacts in the Better Auth adapter model named ",[165,1157,1158],{},"crossDeviceOrder"," by default.",[150,1161,1163],{"id":1162},"product-authorization","Product authorization",[143,1165,1166],{},"After auth succeeds, use your own app policy for product actions.",[158,1168,1171],{"className":778,"code":1169,"filename":1170,"language":781,"meta":163,"style":163},"export async function releaseOrder(user: { id: string, publicKey?: string }, orderId: string) {\n  const order = await findOrder(orderId)\n  if (!order || order.ownerPublicKey !== user.publicKey)\n    throw new Error('Order is not owned by the signed-in wallet')\n\n  return markOrderReadyForSettlement(order.id)\n}\n","server\u002Forders.ts",[165,1172,1173,1227,1250,1286,1308,1312,1331],{"__ignoreMap":163},[168,1174,1175,1177,1180,1183,1186,1188,1191,1193,1195,1198,1200,1203,1205,1208,1211,1213,1216,1219,1221,1223,1225],{"class":170,"line":171},[168,1176,986],{"class":956},[168,1178,1179],{"class":442}," async",[168,1181,1182],{"class":442}," function",[168,1184,1185],{"class":788}," releaseOrder",[168,1187,793],{"class":433},[168,1189,1190],{"class":1011},"user",[168,1192,449],{"class":433},[168,1194,960],{"class":433},[168,1196,1197],{"class":800}," id",[168,1199,449],{"class":433},[168,1201,1202],{"class":707}," string",[168,1204,1050],{"class":433},[168,1206,1207],{"class":800}," publicKey",[168,1209,1210],{"class":433},"?:",[168,1212,1202],{"class":707},[168,1214,1215],{"class":433}," },",[168,1217,1218],{"class":1011}," orderId",[168,1220,449],{"class":433},[168,1222,1202],{"class":707},[168,1224,1061],{"class":433},[168,1226,699],{"class":433},[168,1228,1229,1232,1235,1238,1241,1244,1246,1248],{"class":170,"line":177},[168,1230,1231],{"class":442},"  const",[168,1233,1234],{"class":792}," order",[168,1236,1237],{"class":433}," =",[168,1239,1240],{"class":956}," await",[168,1242,1243],{"class":788}," findOrder",[168,1245,793],{"class":800},[168,1247,510],{"class":792},[168,1249,835],{"class":800},[168,1251,1252,1255,1257,1260,1263,1266,1268,1270,1273,1276,1279,1281,1284],{"class":170,"line":183},[168,1253,1254],{"class":956},"  if",[168,1256,1044],{"class":800},[168,1258,1259],{"class":433},"!",[168,1261,1262],{"class":792},"order",[168,1264,1265],{"class":433}," ||",[168,1267,1234],{"class":792},[168,1269,1021],{"class":433},[168,1271,1272],{"class":792},"ownerPublicKey",[168,1274,1275],{"class":433}," !==",[168,1277,1278],{"class":792}," user",[168,1280,1021],{"class":433},[168,1282,1283],{"class":792},"publicKey",[168,1285,835],{"class":800},[168,1287,1288,1291,1294,1297,1299,1301,1304,1306],{"class":170,"line":189},[168,1289,1290],{"class":956},"    throw",[168,1292,1293],{"class":433}," new",[168,1295,1296],{"class":788}," Error",[168,1298,793],{"class":800},[168,1300,812],{"class":433},[168,1302,1303],{"class":469},"Order is not owned by the signed-in wallet",[168,1305,812],{"class":433},[168,1307,835],{"class":800},[168,1309,1310],{"class":170,"line":195},[168,1311,199],{"emptyLinePlaceholder":198},[168,1313,1314,1317,1320,1322,1324,1326,1329],{"class":170,"line":202},[168,1315,1316],{"class":956},"  return",[168,1318,1319],{"class":788}," markOrderReadyForSettlement",[168,1321,793],{"class":800},[168,1323,1262],{"class":792},[168,1325,1021],{"class":433},[168,1327,1328],{"class":792},"id",[168,1330,835],{"class":800},[168,1332,1333],{"class":170,"line":208},[168,1334,478],{"class":433},[143,1336,1337],{},"These packages do not handle wallet recovery, payment compliance, fiat or crypto settlement, chargebacks, or payout policy.",[1339,1340,1341],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 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 .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}",{"title":163,"searchDepth":177,"depth":177,"links":1343},[1344,1345,1346,1347,1348,1349],{"id":152,"depth":177,"text":153},{"id":267,"depth":177,"text":268},{"id":416,"depth":177,"text":417},{"id":771,"depth":177,"text":772},{"id":941,"depth":177,"text":942},{"id":1162,"depth":177,"text":1163},"Understand nonce, origin, proof, and session boundaries.","md",null,{},{"title":76,"description":1350},"5oZ_uKSnyXPbNIE4YY_ufzti-BO8xFVwcKkK6N_APPk",[1357,1359],{"title":72,"path":73,"stem":74,"description":1358,"children":-1},"Verify Nimiq proofs for cross-device login, sign, and transaction orders.",{"title":86,"path":87,"stem":88,"description":1360,"children":-1},"Use @onmax\u002Funimiq across browser, Nuxt, Vite, Node.js, Workers, and tests.",1778838254121]