[{"data":1,"prerenderedAt":1653},["ShallowReactive",2],{"navigation_docs":3,"-auth-nimiq-better-auth":137,"-auth-nimiq-better-auth-surround":1648},[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":64,"body":139,"description":1642,"extension":1643,"links":1644,"meta":1645,"navigation":284,"path":65,"seo":1646,"stem":66,"__hash__":1647},"docs\u002F3.auth\u002F1.nimiq-better-auth.md",{"type":140,"value":141,"toc":1634},"minimark",[142,155,158,163,174,662,672,676,682,897,901,904,1015,1018,1070,1077,1131,1135,1141,1284,1288,1293,1466,1471,1561,1601,1605,1630],[143,144,145,146,150,151,154],"p",{},"Use ",[147,148,149],"code",{},"@onmax\u002Fbetter-auth-nimiq"," when the same browser can access ",[147,152,153],{},"window.nimiq"," and should become signed in after one wallet signature.",[143,156,157],{},"Do not use it for QR login or phone approval. Use cross-device approval when another device owns the signing key.",[159,160,162],"h2",{"id":161},"register-the-server-plugin","Register the server plugin",[143,164,165,166,169,170,173],{},"Use a durable nonce store in production so ",[147,167,168],{},"\u002Fnonce"," and ",[147,171,172],{},"\u002Fverify"," can run on different instances.",[175,176,182],"pre",{"className":177,"code":178,"filename":179,"language":180,"meta":181,"style":181},"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'\nimport { createKeyValueNimiqNonceStore } from '@onmax\u002Fbetter-auth-nimiq\u002Fkv'\n\nconst 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\nexport const auth = betterAuth({\n  trustedOrigins: ['https:\u002F\u002Fpay.example.com'],\n  plugins: [\n    bearer({ requireSignature: true }),\n    nimiqAuth({\n      appName: 'Nimiq Checkout',\n      endpointPrefix: '\u002Fnimiq',\n      nonceStore,\n      nonceTtlSeconds: 300,\n      syncAddressToUser: true,\n      syncPublicKeyToUser: true,\n    }),\n  ],\n})\n","server\u002Fauth.ts","ts","",[147,183,184,217,238,258,279,286,308,344,397,415,425,452,461,466,486,510,521,547,557,574,591,599,613,625,637,647,655],{"__ignoreMap":181},[185,186,189,193,197,201,204,207,210,214],"span",{"class":187,"line":188},"line",1,[185,190,192],{"class":191},"s7zQu","import",[185,194,196],{"class":195},"sMK4o"," {",[185,198,200],{"class":199},"sTEyZ"," betterAuth",[185,202,203],{"class":195}," }",[185,205,206],{"class":191}," from",[185,208,209],{"class":195}," '",[185,211,213],{"class":212},"sfazB","better-auth",[185,215,216],{"class":195},"'\n",[185,218,220,222,224,227,229,231,233,236],{"class":187,"line":219},2,[185,221,192],{"class":191},[185,223,196],{"class":195},[185,225,226],{"class":199}," bearer",[185,228,203],{"class":195},[185,230,206],{"class":191},[185,232,209],{"class":195},[185,234,235],{"class":212},"better-auth\u002Fplugins",[185,237,216],{"class":195},[185,239,241,243,245,248,250,252,254,256],{"class":187,"line":240},3,[185,242,192],{"class":191},[185,244,196],{"class":195},[185,246,247],{"class":199}," nimiqAuth",[185,249,203],{"class":195},[185,251,206],{"class":191},[185,253,209],{"class":195},[185,255,149],{"class":212},[185,257,216],{"class":195},[185,259,261,263,265,268,270,272,274,277],{"class":187,"line":260},4,[185,262,192],{"class":191},[185,264,196],{"class":195},[185,266,267],{"class":199}," createKeyValueNimiqNonceStore",[185,269,203],{"class":195},[185,271,206],{"class":191},[185,273,209],{"class":195},[185,275,276],{"class":212},"@onmax\u002Fbetter-auth-nimiq\u002Fkv",[185,278,216],{"class":195},[185,280,282],{"class":187,"line":281},5,[185,283,285],{"emptyLinePlaceholder":284},true,"\n",[185,287,289,293,296,299,302,305],{"class":187,"line":288},6,[185,290,292],{"class":291},"spNyl","const",[185,294,295],{"class":199}," nonceStore ",[185,297,298],{"class":195},"=",[185,300,267],{"class":301},"s2Zo4",[185,303,304],{"class":199},"(",[185,306,307],{"class":195},"{\n",[185,309,311,314,317,321,324,327,330,333,335,338,341],{"class":187,"line":310},7,[185,312,313],{"class":301},"  get",[185,315,316],{"class":195},":",[185,318,320],{"class":319},"sHdIc"," key",[185,322,323],{"class":291}," =>",[185,325,326],{"class":199}," env",[185,328,329],{"class":195},".",[185,331,332],{"class":199},"AUTH_KV",[185,334,329],{"class":195},[185,336,337],{"class":301},"get",[185,339,340],{"class":199},"(key)",[185,342,343],{"class":195},",\n",[185,345,347,350,352,355,358,361,364,366,369,372,374,376,378,380,382,385,388,390,392,394],{"class":187,"line":346},8,[185,348,349],{"class":301},"  set",[185,351,316],{"class":195},[185,353,354],{"class":195}," (",[185,356,357],{"class":319},"key",[185,359,360],{"class":195},",",[185,362,363],{"class":319}," value",[185,365,360],{"class":195},[185,367,368],{"class":319}," options",[185,370,371],{"class":195},")",[185,373,323],{"class":291},[185,375,326],{"class":199},[185,377,329],{"class":195},[185,379,332],{"class":199},[185,381,329],{"class":195},[185,383,384],{"class":301},"put",[185,386,387],{"class":199},"(key",[185,389,360],{"class":195},[185,391,363],{"class":199},[185,393,360],{"class":195},[185,395,396],{"class":195}," {\n",[185,398,400,404,406,408,410,413],{"class":187,"line":399},9,[185,401,403],{"class":402},"swJcz","    expirationTtl",[185,405,316],{"class":195},[185,407,368],{"class":199},[185,409,329],{"class":195},[185,411,412],{"class":199},"ttlSeconds",[185,414,343],{"class":195},[185,416,418,421,423],{"class":187,"line":417},10,[185,419,420],{"class":195},"  }",[185,422,371],{"class":199},[185,424,343],{"class":195},[185,426,428,431,433,435,437,439,441,443,445,448,450],{"class":187,"line":427},11,[185,429,430],{"class":301},"  delete",[185,432,316],{"class":195},[185,434,320],{"class":319},[185,436,323],{"class":291},[185,438,326],{"class":199},[185,440,329],{"class":195},[185,442,332],{"class":199},[185,444,329],{"class":195},[185,446,447],{"class":301},"delete",[185,449,340],{"class":199},[185,451,343],{"class":195},[185,453,455,458],{"class":187,"line":454},12,[185,456,457],{"class":195},"}",[185,459,460],{"class":199},")\n",[185,462,464],{"class":187,"line":463},13,[185,465,285],{"emptyLinePlaceholder":284},[185,467,469,472,475,478,480,482,484],{"class":187,"line":468},14,[185,470,471],{"class":191},"export",[185,473,474],{"class":291}," const",[185,476,477],{"class":199}," auth ",[185,479,298],{"class":195},[185,481,200],{"class":301},[185,483,304],{"class":199},[185,485,307],{"class":195},[185,487,489,492,494,497,500,503,505,508],{"class":187,"line":488},15,[185,490,491],{"class":402},"  trustedOrigins",[185,493,316],{"class":195},[185,495,496],{"class":199}," [",[185,498,499],{"class":195},"'",[185,501,502],{"class":212},"https:\u002F\u002Fpay.example.com",[185,504,499],{"class":195},[185,506,507],{"class":199},"]",[185,509,343],{"class":195},[185,511,513,516,518],{"class":187,"line":512},16,[185,514,515],{"class":402},"  plugins",[185,517,316],{"class":195},[185,519,520],{"class":199}," [\n",[185,522,524,527,529,532,535,537,541,543,545],{"class":187,"line":523},17,[185,525,526],{"class":301},"    bearer",[185,528,304],{"class":199},[185,530,531],{"class":195},"{",[185,533,534],{"class":402}," requireSignature",[185,536,316],{"class":195},[185,538,540],{"class":539},"sfNiH"," true",[185,542,203],{"class":195},[185,544,371],{"class":199},[185,546,343],{"class":195},[185,548,550,553,555],{"class":187,"line":549},18,[185,551,552],{"class":301},"    nimiqAuth",[185,554,304],{"class":199},[185,556,307],{"class":195},[185,558,560,563,565,567,570,572],{"class":187,"line":559},19,[185,561,562],{"class":402},"      appName",[185,564,316],{"class":195},[185,566,209],{"class":195},[185,568,569],{"class":212},"Nimiq Checkout",[185,571,499],{"class":195},[185,573,343],{"class":195},[185,575,577,580,582,584,587,589],{"class":187,"line":576},20,[185,578,579],{"class":402},"      endpointPrefix",[185,581,316],{"class":195},[185,583,209],{"class":195},[185,585,586],{"class":212},"\u002Fnimiq",[185,588,499],{"class":195},[185,590,343],{"class":195},[185,592,594,597],{"class":187,"line":593},21,[185,595,596],{"class":199},"      nonceStore",[185,598,343],{"class":195},[185,600,602,605,607,611],{"class":187,"line":601},22,[185,603,604],{"class":402},"      nonceTtlSeconds",[185,606,316],{"class":195},[185,608,610],{"class":609},"sbssI"," 300",[185,612,343],{"class":195},[185,614,616,619,621,623],{"class":187,"line":615},23,[185,617,618],{"class":402},"      syncAddressToUser",[185,620,316],{"class":195},[185,622,540],{"class":539},[185,624,343],{"class":195},[185,626,628,631,633,635],{"class":187,"line":627},24,[185,629,630],{"class":402},"      syncPublicKeyToUser",[185,632,316],{"class":195},[185,634,540],{"class":539},[185,636,343],{"class":195},[185,638,640,643,645],{"class":187,"line":639},25,[185,641,642],{"class":195},"    }",[185,644,371],{"class":199},[185,646,343],{"class":195},[185,648,650,653],{"class":187,"line":649},26,[185,651,652],{"class":199},"  ]",[185,654,343],{"class":195},[185,656,658,660],{"class":187,"line":657},27,[185,659,457],{"class":195},[185,661,460],{"class":199},[143,663,664,665,169,668,671],{},"Expected behavior: the plugin adds ",[147,666,667],{},"\u002Fnimiq\u002Fnonce",[147,669,670],{},"\u002Fnimiq\u002Fverify",". After verification, Better Auth creates the session and returns a bearer token for header-based calls.",[159,673,675],{"id":674},"register-the-client-plugin","Register the client plugin",[143,677,678,679,329],{},"Use the client plugin when your UI should call ",[147,680,681],{},"authClient.signInNimiq()",[175,683,686],{"className":177,"code":684,"filename":685,"language":180,"meta":181,"style":181},"import { createAuthClient } from 'better-auth\u002Fclient'\nimport {\n  getStoredNimiqAuthToken,\n  nimiqAuthClient,\n} from '@onmax\u002Fbetter-auth-nimiq\u002Fclient'\n\nexport const authClient = createAuthClient({\n  plugins: [\n    nimiqAuthClient({\n      endpointPrefix: '\u002Fnimiq',\n      tokenStorageKey: 'nimiq_auth_token',\n    }),\n  ],\n  fetchOptions: {\n    auth: {\n      type: 'Bearer',\n      token: () => getStoredNimiqAuthToken() || undefined,\n    },\n  },\n})\n","app\u002Fauth-client.ts",[147,687,688,708,714,721,728,741,745,762,770,779,793,809,817,823,832,841,857,881,886,891],{"__ignoreMap":181},[185,689,690,692,694,697,699,701,703,706],{"class":187,"line":188},[185,691,192],{"class":191},[185,693,196],{"class":195},[185,695,696],{"class":199}," createAuthClient",[185,698,203],{"class":195},[185,700,206],{"class":191},[185,702,209],{"class":195},[185,704,705],{"class":212},"better-auth\u002Fclient",[185,707,216],{"class":195},[185,709,710,712],{"class":187,"line":219},[185,711,192],{"class":191},[185,713,396],{"class":195},[185,715,716,719],{"class":187,"line":240},[185,717,718],{"class":199},"  getStoredNimiqAuthToken",[185,720,343],{"class":195},[185,722,723,726],{"class":187,"line":260},[185,724,725],{"class":199},"  nimiqAuthClient",[185,727,343],{"class":195},[185,729,730,732,734,736,739],{"class":187,"line":281},[185,731,457],{"class":195},[185,733,206],{"class":191},[185,735,209],{"class":195},[185,737,738],{"class":212},"@onmax\u002Fbetter-auth-nimiq\u002Fclient",[185,740,216],{"class":195},[185,742,743],{"class":187,"line":288},[185,744,285],{"emptyLinePlaceholder":284},[185,746,747,749,751,754,756,758,760],{"class":187,"line":310},[185,748,471],{"class":191},[185,750,474],{"class":291},[185,752,753],{"class":199}," authClient ",[185,755,298],{"class":195},[185,757,696],{"class":301},[185,759,304],{"class":199},[185,761,307],{"class":195},[185,763,764,766,768],{"class":187,"line":346},[185,765,515],{"class":402},[185,767,316],{"class":195},[185,769,520],{"class":199},[185,771,772,775,777],{"class":187,"line":399},[185,773,774],{"class":301},"    nimiqAuthClient",[185,776,304],{"class":199},[185,778,307],{"class":195},[185,780,781,783,785,787,789,791],{"class":187,"line":417},[185,782,579],{"class":402},[185,784,316],{"class":195},[185,786,209],{"class":195},[185,788,586],{"class":212},[185,790,499],{"class":195},[185,792,343],{"class":195},[185,794,795,798,800,802,805,807],{"class":187,"line":427},[185,796,797],{"class":402},"      tokenStorageKey",[185,799,316],{"class":195},[185,801,209],{"class":195},[185,803,804],{"class":212},"nimiq_auth_token",[185,806,499],{"class":195},[185,808,343],{"class":195},[185,810,811,813,815],{"class":187,"line":454},[185,812,642],{"class":195},[185,814,371],{"class":199},[185,816,343],{"class":195},[185,818,819,821],{"class":187,"line":463},[185,820,652],{"class":199},[185,822,343],{"class":195},[185,824,825,828,830],{"class":187,"line":468},[185,826,827],{"class":402},"  fetchOptions",[185,829,316],{"class":195},[185,831,396],{"class":195},[185,833,834,837,839],{"class":187,"line":488},[185,835,836],{"class":402},"    auth",[185,838,316],{"class":195},[185,840,396],{"class":195},[185,842,843,846,848,850,853,855],{"class":187,"line":512},[185,844,845],{"class":402},"      type",[185,847,316],{"class":195},[185,849,209],{"class":195},[185,851,852],{"class":212},"Bearer",[185,854,499],{"class":195},[185,856,343],{"class":195},[185,858,859,862,864,867,869,872,875,878],{"class":187,"line":523},[185,860,861],{"class":301},"      token",[185,863,316],{"class":195},[185,865,866],{"class":195}," ()",[185,868,323],{"class":291},[185,870,871],{"class":301}," getStoredNimiqAuthToken",[185,873,874],{"class":199},"() ",[185,876,877],{"class":195},"||",[185,879,880],{"class":195}," undefined,\n",[185,882,883],{"class":187,"line":549},[185,884,885],{"class":195},"    },\n",[185,887,888],{"class":187,"line":559},[185,889,890],{"class":195},"  },\n",[185,892,893,895],{"class":187,"line":576},[185,894,457],{"class":195},[185,896,460],{"class":199},[159,898,900],{"id":899},"sign-in-from-a-button","Sign in from a button",[143,902,903],{},"Call sign-in from a user gesture. The wallet may open approval UI.",[175,905,908],{"className":177,"code":906,"filename":907,"language":180,"meta":181,"style":181},"import { authClient } from '.\u002Fauth-client'\n\nexport async function signInWithWallet() {\n  const result = await authClient.signInNimiq({\n    appName: 'Nimiq Checkout',\n  })\n\n  return result\n}\n","app\u002Fsign-in.ts",[147,909,910,930,934,952,977,992,998,1002,1010],{"__ignoreMap":181},[185,911,912,914,916,919,921,923,925,928],{"class":187,"line":188},[185,913,192],{"class":191},[185,915,196],{"class":195},[185,917,918],{"class":199}," authClient",[185,920,203],{"class":195},[185,922,206],{"class":191},[185,924,209],{"class":195},[185,926,927],{"class":212},".\u002Fauth-client",[185,929,216],{"class":195},[185,931,932],{"class":187,"line":219},[185,933,285],{"emptyLinePlaceholder":284},[185,935,936,938,941,944,947,950],{"class":187,"line":240},[185,937,471],{"class":191},[185,939,940],{"class":291}," async",[185,942,943],{"class":291}," function",[185,945,946],{"class":301}," signInWithWallet",[185,948,949],{"class":195},"()",[185,951,396],{"class":195},[185,953,954,957,960,963,966,968,970,973,975],{"class":187,"line":260},[185,955,956],{"class":291},"  const",[185,958,959],{"class":199}," result",[185,961,962],{"class":195}," =",[185,964,965],{"class":191}," await",[185,967,918],{"class":199},[185,969,329],{"class":195},[185,971,972],{"class":301},"signInNimiq",[185,974,304],{"class":402},[185,976,307],{"class":195},[185,978,979,982,984,986,988,990],{"class":187,"line":281},[185,980,981],{"class":402},"    appName",[185,983,316],{"class":195},[185,985,209],{"class":195},[185,987,569],{"class":212},[185,989,499],{"class":195},[185,991,343],{"class":195},[185,993,994,996],{"class":187,"line":288},[185,995,420],{"class":195},[185,997,460],{"class":402},[185,999,1000],{"class":187,"line":310},[185,1001,285],{"emptyLinePlaceholder":284},[185,1003,1004,1007],{"class":187,"line":346},[185,1005,1006],{"class":191},"  return",[185,1008,1009],{"class":199}," result\n",[185,1011,1012],{"class":187,"line":399},[185,1013,1014],{"class":195},"}\n",[143,1016,1017],{},"Expected response:",[175,1019,1024],{"className":1020,"code":1021,"filename":1022,"language":1023,"meta":181,"style":181},"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",[147,1025,1026,1030,1046,1066],{"__ignoreMap":181},[185,1027,1028],{"class":187,"line":188},[185,1029,307],{"class":195},[185,1031,1032,1035,1038,1041,1043],{"class":187,"line":219},[185,1033,1034],{"class":195},"  \"",[185,1036,1037],{"class":291},"ok",[185,1039,1040],{"class":195},"\"",[185,1042,316],{"class":195},[185,1044,1045],{"class":195}," true,\n",[185,1047,1048,1050,1053,1055,1057,1060,1063],{"class":187,"line":240},[185,1049,1034],{"class":195},[185,1051,1052],{"class":291},"token",[185,1054,1040],{"class":195},[185,1056,316],{"class":195},[185,1058,1059],{"class":195}," \"",[185,1061,1062],{"class":212},"better-auth-session-token",[185,1064,1065],{"class":195},"\"\n",[185,1067,1068],{"class":187,"line":260},[185,1069,1014],{"class":195},[143,1071,1072,1073,1076],{},"Pass ",[147,1074,1075],{},"autoPersistToken: false"," when your app only wants the Better Auth cookie.",[175,1078,1081],{"className":177,"code":1079,"filename":1080,"language":180,"meta":181,"style":181},"await authClient.signInNimiq({\n  appName: 'Nimiq Checkout',\n  autoPersistToken: false,\n})\n","app\u002Fsign-in-cookie-only.ts",[147,1082,1083,1098,1113,1125],{"__ignoreMap":181},[185,1084,1085,1088,1090,1092,1094,1096],{"class":187,"line":188},[185,1086,1087],{"class":191},"await",[185,1089,918],{"class":199},[185,1091,329],{"class":195},[185,1093,972],{"class":301},[185,1095,304],{"class":199},[185,1097,307],{"class":195},[185,1099,1100,1103,1105,1107,1109,1111],{"class":187,"line":219},[185,1101,1102],{"class":402},"  appName",[185,1104,316],{"class":195},[185,1106,209],{"class":195},[185,1108,569],{"class":212},[185,1110,499],{"class":195},[185,1112,343],{"class":195},[185,1114,1115,1118,1120,1123],{"class":187,"line":240},[185,1116,1117],{"class":402},"  autoPersistToken",[185,1119,316],{"class":195},[185,1121,1122],{"class":539}," false",[185,1124,343],{"class":195},[185,1126,1127,1129],{"class":187,"line":260},[185,1128,457],{"class":195},[185,1130,460],{"class":199},[159,1132,1134],{"id":1133},"use-the-helper-directly","Use the helper directly",[143,1136,145,1137,1140],{},[147,1138,1139],{},"signInWithNimiq()"," when you already have a Better Auth fetcher and do not want to expose the plugin action.",[175,1142,1145],{"className":177,"code":1143,"filename":1144,"language":180,"meta":181,"style":181},"import { signInWithNimiq } from '@onmax\u002Fbetter-auth-nimiq\u002Fclient'\nimport { authClient } from '.\u002Fauth-client'\n\nexport async function requireWalletSession() {\n  return signInWithNimiq(authClient.$fetch.bind(authClient), {\n    appName: 'Nimiq Checkout',\n    endpointPrefix: '\u002Fnimiq',\n    requestAddressBeforeVerify: true,\n  })\n}\n","app\u002Fwallet-auth.ts",[147,1146,1147,1166,1184,1188,1203,1234,1248,1263,1274,1280],{"__ignoreMap":181},[185,1148,1149,1151,1153,1156,1158,1160,1162,1164],{"class":187,"line":188},[185,1150,192],{"class":191},[185,1152,196],{"class":195},[185,1154,1155],{"class":199}," signInWithNimiq",[185,1157,203],{"class":195},[185,1159,206],{"class":191},[185,1161,209],{"class":195},[185,1163,738],{"class":212},[185,1165,216],{"class":195},[185,1167,1168,1170,1172,1174,1176,1178,1180,1182],{"class":187,"line":219},[185,1169,192],{"class":191},[185,1171,196],{"class":195},[185,1173,918],{"class":199},[185,1175,203],{"class":195},[185,1177,206],{"class":191},[185,1179,209],{"class":195},[185,1181,927],{"class":212},[185,1183,216],{"class":195},[185,1185,1186],{"class":187,"line":240},[185,1187,285],{"emptyLinePlaceholder":284},[185,1189,1190,1192,1194,1196,1199,1201],{"class":187,"line":260},[185,1191,471],{"class":191},[185,1193,940],{"class":291},[185,1195,943],{"class":291},[185,1197,1198],{"class":301}," requireWalletSession",[185,1200,949],{"class":195},[185,1202,396],{"class":195},[185,1204,1205,1207,1209,1211,1214,1216,1219,1221,1224,1226,1228,1230,1232],{"class":187,"line":281},[185,1206,1006],{"class":191},[185,1208,1155],{"class":301},[185,1210,304],{"class":402},[185,1212,1213],{"class":199},"authClient",[185,1215,329],{"class":195},[185,1217,1218],{"class":199},"$fetch",[185,1220,329],{"class":195},[185,1222,1223],{"class":301},"bind",[185,1225,304],{"class":402},[185,1227,1213],{"class":199},[185,1229,371],{"class":402},[185,1231,360],{"class":195},[185,1233,396],{"class":195},[185,1235,1236,1238,1240,1242,1244,1246],{"class":187,"line":288},[185,1237,981],{"class":402},[185,1239,316],{"class":195},[185,1241,209],{"class":195},[185,1243,569],{"class":212},[185,1245,499],{"class":195},[185,1247,343],{"class":195},[185,1249,1250,1253,1255,1257,1259,1261],{"class":187,"line":310},[185,1251,1252],{"class":402},"    endpointPrefix",[185,1254,316],{"class":195},[185,1256,209],{"class":195},[185,1258,586],{"class":212},[185,1260,499],{"class":195},[185,1262,343],{"class":195},[185,1264,1265,1268,1270,1272],{"class":187,"line":346},[185,1266,1267],{"class":402},"    requestAddressBeforeVerify",[185,1269,316],{"class":195},[185,1271,540],{"class":539},[185,1273,343],{"class":195},[185,1275,1276,1278],{"class":187,"line":399},[185,1277,420],{"class":195},[185,1279,460],{"class":402},[185,1281,1282],{"class":187,"line":417},[185,1283,1014],{"class":195},[159,1285,1287],{"id":1286},"endpoint-contract","Endpoint contract",[143,1289,1290],{},[147,1291,1292],{},"POST \u002Fnimiq\u002Fnonce",[175,1294,1296],{"className":1020,"code":1295,"filename":1022,"language":1023,"meta":181,"style":181},"{\n  \"action\": \"auth.login\",\n  \"challengeId\": \"login\",\n  \"nonceId\": \"ZlMuW4xv3hIqnXz_xR7pAA\",\n  \"nonce\": \"m3J1dSpNReD0gUHRJzR0lshdr5EJUH03\",\n  \"origin\": \"https:\u002F\u002Fpay.example.com\",\n  \"issuedAt\": 1767182400000,\n  \"expiresAt\": 1767182700000,\n  \"message\": \"Nimiq Checkout requests Nimiq authentication\\nAction: auth.login\\n...\"\n}\n",[147,1297,1298,1302,1322,1342,1362,1382,1401,1417,1433,1462],{"__ignoreMap":181},[185,1299,1300],{"class":187,"line":188},[185,1301,307],{"class":195},[185,1303,1304,1306,1309,1311,1313,1315,1318,1320],{"class":187,"line":219},[185,1305,1034],{"class":195},[185,1307,1308],{"class":291},"action",[185,1310,1040],{"class":195},[185,1312,316],{"class":195},[185,1314,1059],{"class":195},[185,1316,1317],{"class":212},"auth.login",[185,1319,1040],{"class":195},[185,1321,343],{"class":195},[185,1323,1324,1326,1329,1331,1333,1335,1338,1340],{"class":187,"line":240},[185,1325,1034],{"class":195},[185,1327,1328],{"class":291},"challengeId",[185,1330,1040],{"class":195},[185,1332,316],{"class":195},[185,1334,1059],{"class":195},[185,1336,1337],{"class":212},"login",[185,1339,1040],{"class":195},[185,1341,343],{"class":195},[185,1343,1344,1346,1349,1351,1353,1355,1358,1360],{"class":187,"line":260},[185,1345,1034],{"class":195},[185,1347,1348],{"class":291},"nonceId",[185,1350,1040],{"class":195},[185,1352,316],{"class":195},[185,1354,1059],{"class":195},[185,1356,1357],{"class":212},"ZlMuW4xv3hIqnXz_xR7pAA",[185,1359,1040],{"class":195},[185,1361,343],{"class":195},[185,1363,1364,1366,1369,1371,1373,1375,1378,1380],{"class":187,"line":281},[185,1365,1034],{"class":195},[185,1367,1368],{"class":291},"nonce",[185,1370,1040],{"class":195},[185,1372,316],{"class":195},[185,1374,1059],{"class":195},[185,1376,1377],{"class":212},"m3J1dSpNReD0gUHRJzR0lshdr5EJUH03",[185,1379,1040],{"class":195},[185,1381,343],{"class":195},[185,1383,1384,1386,1389,1391,1393,1395,1397,1399],{"class":187,"line":288},[185,1385,1034],{"class":195},[185,1387,1388],{"class":291},"origin",[185,1390,1040],{"class":195},[185,1392,316],{"class":195},[185,1394,1059],{"class":195},[185,1396,502],{"class":212},[185,1398,1040],{"class":195},[185,1400,343],{"class":195},[185,1402,1403,1405,1408,1410,1412,1415],{"class":187,"line":310},[185,1404,1034],{"class":195},[185,1406,1407],{"class":291},"issuedAt",[185,1409,1040],{"class":195},[185,1411,316],{"class":195},[185,1413,1414],{"class":609}," 1767182400000",[185,1416,343],{"class":195},[185,1418,1419,1421,1424,1426,1428,1431],{"class":187,"line":346},[185,1420,1034],{"class":195},[185,1422,1423],{"class":291},"expiresAt",[185,1425,1040],{"class":195},[185,1427,316],{"class":195},[185,1429,1430],{"class":609}," 1767182700000",[185,1432,343],{"class":195},[185,1434,1435,1437,1440,1442,1444,1446,1449,1452,1455,1457,1460],{"class":187,"line":399},[185,1436,1034],{"class":195},[185,1438,1439],{"class":291},"message",[185,1441,1040],{"class":195},[185,1443,316],{"class":195},[185,1445,1059],{"class":195},[185,1447,1448],{"class":212},"Nimiq Checkout requests Nimiq authentication",[185,1450,1451],{"class":199},"\\n",[185,1453,1454],{"class":212},"Action: auth.login",[185,1456,1451],{"class":199},[185,1458,1459],{"class":212},"...",[185,1461,1065],{"class":195},[185,1463,1464],{"class":187,"line":417},[185,1465,1014],{"class":195},[143,1467,1468],{},[147,1469,1470],{},"POST \u002Fnimiq\u002Fverify",[175,1472,1475],{"className":1020,"code":1473,"filename":1474,"language":1023,"meta":181,"style":181},"{\n  \"nonceId\": \"ZlMuW4xv3hIqnXz_xR7pAA\",\n  \"publicKeyHex\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n  \"signatureHex\": \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n  \"address\": \"NQ07 0000 0000 0000 0000 0000 0000 0000 0000\"\n}\n","request",[147,1476,1477,1481,1499,1519,1539,1557],{"__ignoreMap":181},[185,1478,1479],{"class":187,"line":188},[185,1480,307],{"class":195},[185,1482,1483,1485,1487,1489,1491,1493,1495,1497],{"class":187,"line":219},[185,1484,1034],{"class":195},[185,1486,1348],{"class":291},[185,1488,1040],{"class":195},[185,1490,316],{"class":195},[185,1492,1059],{"class":195},[185,1494,1357],{"class":212},[185,1496,1040],{"class":195},[185,1498,343],{"class":195},[185,1500,1501,1503,1506,1508,1510,1512,1515,1517],{"class":187,"line":240},[185,1502,1034],{"class":195},[185,1504,1505],{"class":291},"publicKeyHex",[185,1507,1040],{"class":195},[185,1509,316],{"class":195},[185,1511,1059],{"class":195},[185,1513,1514],{"class":212},"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",[185,1516,1040],{"class":195},[185,1518,343],{"class":195},[185,1520,1521,1523,1526,1528,1530,1532,1535,1537],{"class":187,"line":260},[185,1522,1034],{"class":195},[185,1524,1525],{"class":291},"signatureHex",[185,1527,1040],{"class":195},[185,1529,316],{"class":195},[185,1531,1059],{"class":195},[185,1533,1534],{"class":212},"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",[185,1536,1040],{"class":195},[185,1538,343],{"class":195},[185,1540,1541,1543,1546,1548,1550,1552,1555],{"class":187,"line":281},[185,1542,1034],{"class":195},[185,1544,1545],{"class":291},"address",[185,1547,1040],{"class":195},[185,1549,316],{"class":195},[185,1551,1059],{"class":195},[185,1553,1554],{"class":212},"NQ07 0000 0000 0000 0000 0000 0000 0000 0000",[185,1556,1065],{"class":195},[185,1558,1559],{"class":187,"line":288},[185,1560,1014],{"class":195},[175,1562,1563],{"className":1020,"code":1021,"filename":1022,"language":1023,"meta":181,"style":181},[147,1564,1565,1569,1581,1597],{"__ignoreMap":181},[185,1566,1567],{"class":187,"line":188},[185,1568,307],{"class":195},[185,1570,1571,1573,1575,1577,1579],{"class":187,"line":219},[185,1572,1034],{"class":195},[185,1574,1037],{"class":291},[185,1576,1040],{"class":195},[185,1578,316],{"class":195},[185,1580,1045],{"class":195},[185,1582,1583,1585,1587,1589,1591,1593,1595],{"class":187,"line":240},[185,1584,1034],{"class":195},[185,1586,1052],{"class":291},[185,1588,1040],{"class":195},[185,1590,316],{"class":195},[185,1592,1059],{"class":195},[185,1594,1062],{"class":212},[185,1596,1065],{"class":195},[185,1598,1599],{"class":187,"line":260},[185,1600,1014],{"class":195},[159,1602,1604],{"id":1603},"verification-rules","Verification rules",[1606,1607,1608,1612,1615,1624,1627],"ul",{},[1609,1610,1611],"li",{},"The nonce has a TTL and is deleted during verify.",[1609,1613,1614],{},"The signed message includes app name, origin, nonce, challenge id, and expiry.",[1609,1616,1617,1620,1621,329],{},[147,1618,1619],{},"enforceOrigin"," defaults to ",[147,1622,1623],{},"true",[1609,1625,1626],{},"If the client sends an address, the server checks that it derives from the signed public key.",[1609,1628,1629],{},"The default verifier uses portable noble crypto.",[1631,1632,1633],"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 .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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}",{"title":181,"searchDepth":219,"depth":219,"links":1635},[1636,1637,1638,1639,1640,1641],{"id":161,"depth":219,"text":162},{"id":674,"depth":219,"text":675},{"id":899,"depth":219,"text":900},{"id":1133,"depth":219,"text":1134},{"id":1286,"depth":219,"text":1287},{"id":1603,"depth":219,"text":1604},"Add direct Nimiq signed-message sign-in to Better Auth.","md",null,{},{"title":64,"description":1642},"IOreyunoYHvHZbCOeLS4b0OvR8WMAV8cjkBYQwkuqPg",[1649,1651],{"title":54,"path":55,"stem":56,"description":1650,"children":-1},"Build custom simulator hosts with the host runtime subpath.",{"title":68,"path":69,"stem":70,"description":1652,"children":-1},"Start login, sign, and transaction orders on one device and approve them on another.",1778838252701]