[{"data":1,"prerenderedAt":1286},["ShallowReactive",2],{"navigation_docs":3,"-testing-vitest-helpers":137,"-testing-vitest-helpers-surround":1281},[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":108,"body":139,"description":1275,"extension":1276,"links":1277,"meta":1278,"navigation":216,"path":109,"seo":1279,"stem":110,"__hash__":1280},"docs\u002F5.testing\u002F2.vitest-helpers.md",{"type":140,"value":141,"toc":1268},"minimark",[142,151,154,159,169,296,299,322,325,346,350,357,438,441,445,459,825,828,832,841,1030,1033,1189,1192,1196,1199,1254,1264],[143,144,145,146,150],"p",{},"Use the Vitest helper when an app or package wants the same E2E project names, timeouts, retry policy, and local test file mapping as ",[147,148,149],"code",{},"@onmax\u002Fbetter-auth-nimiq-pay-e2e",".",[143,152,153],{},"Do not use it for unit tests. Keep fast unit tests in their own Vitest project and enable these E2E projects only when the environment is ready.",[155,156,158],"h2",{"id":157},"create-the-e2e-config","Create the E2E config",[143,160,161,162,165,166,150],{},"Use ",[147,163,164],{},"createVitestE2EConfig()"," in a package-level ",[147,167,168],{},"vitest.config.ts",[170,171,176],"pre",{"className":172,"code":173,"filename":168,"language":174,"meta":175,"style":175},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createVitestE2EConfig } from '@onmax\u002Fbetter-auth-nimiq-pay-e2e\u002Fvitest'\n\nexport default createVitestE2EConfig({\n  enabled: process.env.E2E_ENABLED === '1',\n  testTimeoutMs: 90_000,\n})\n","ts","",[147,177,178,211,218,236,273,287],{"__ignoreMap":175},[179,180,183,187,191,195,198,201,204,208],"span",{"class":181,"line":182},"line",1,[179,184,186],{"class":185},"s7zQu","import",[179,188,190],{"class":189},"sMK4o"," {",[179,192,194],{"class":193},"sTEyZ"," createVitestE2EConfig",[179,196,197],{"class":189}," }",[179,199,200],{"class":185}," from",[179,202,203],{"class":189}," '",[179,205,207],{"class":206},"sfazB","@onmax\u002Fbetter-auth-nimiq-pay-e2e\u002Fvitest",[179,209,210],{"class":189},"'\n",[179,212,214],{"class":181,"line":213},2,[179,215,217],{"emptyLinePlaceholder":216},true,"\n",[179,219,221,224,227,230,233],{"class":181,"line":220},3,[179,222,223],{"class":185},"export",[179,225,226],{"class":185}," default",[179,228,194],{"class":229},"s2Zo4",[179,231,232],{"class":193},"(",[179,234,235],{"class":189},"{\n",[179,237,239,243,246,249,251,254,256,259,262,264,267,270],{"class":181,"line":238},4,[179,240,242],{"class":241},"swJcz","  enabled",[179,244,245],{"class":189},":",[179,247,248],{"class":193}," process",[179,250,150],{"class":189},[179,252,253],{"class":193},"env",[179,255,150],{"class":189},[179,257,258],{"class":193},"E2E_ENABLED ",[179,260,261],{"class":189},"===",[179,263,203],{"class":189},[179,265,266],{"class":206},"1",[179,268,269],{"class":189},"'",[179,271,272],{"class":189},",\n",[179,274,276,279,281,285],{"class":181,"line":275},5,[179,277,278],{"class":241},"  testTimeoutMs",[179,280,245],{"class":189},[179,282,284],{"class":283},"sbssI"," 90_000",[179,286,272],{"class":189},[179,288,290,293],{"class":181,"line":289},6,[179,291,292],{"class":189},"}",[179,294,295],{"class":193},")\n",[143,297,298],{},"When enabled, the helper creates three Node projects:",[170,300,305],{"className":301,"code":302,"filename":303,"language":304,"meta":175,"style":175},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","e2e-direct-sign-in -> test\u002Fe2e\u002Flocal-auth.e2e.test.ts\ne2e-playground -> test\u002Fe2e\u002Fplayground.e2e.test.ts\ne2e-qr-local-auth -> test\u002Fe2e\u002Fqr-local-auth.e2e.test.ts\n","projects","txt",[147,306,307,312,317],{"__ignoreMap":175},[179,308,309],{"class":181,"line":182},[179,310,311],{},"e2e-direct-sign-in -> test\u002Fe2e\u002Flocal-auth.e2e.test.ts\n",[179,313,314],{"class":181,"line":213},[179,315,316],{},"e2e-playground -> test\u002Fe2e\u002Fplayground.e2e.test.ts\n",[179,318,319],{"class":181,"line":220},[179,320,321],{},"e2e-qr-local-auth -> test\u002Fe2e\u002Fqr-local-auth.e2e.test.ts\n",[143,323,324],{},"Expected behavior:",[170,326,329],{"className":301,"code":327,"filename":328,"language":304,"meta":175,"style":175},"CI retries each E2E project once.\nLocal runs do not retry by default.\nDisabled E2E config keeps project include lists empty.\n","output",[147,330,331,336,341],{"__ignoreMap":175},[179,332,333],{"class":181,"line":182},[179,334,335],{},"CI retries each E2E project once.\n",[179,337,338],{"class":181,"line":213},[179,339,340],{},"Local runs do not retry by default.\n",[179,342,343],{"class":181,"line":220},[179,344,345],{},"Disabled E2E config keeps project include lists empty.\n",[155,347,349],{"id":348},"gate-e2e-in-scripts","Gate E2E in scripts",[143,351,352,353,356],{},"Use an explicit environment flag so local ",[147,354,355],{},"pnpm test"," does not start E2E work by accident.",[170,358,363],{"className":359,"code":360,"filename":361,"language":362,"meta":175,"style":175},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"scripts\": {\n    \"test:e2e:local\": \"E2E_ENABLED=1 NIMIQ_PAY_E2E_MODE=local vitest run --project e2e-direct-sign-in\",\n    \"test:e2e:qr\": \"E2E_ENABLED=1 NIMIQ_PAY_E2E_MODE=local vitest run --project e2e-qr-local-auth\"\n  }\n}\n","package.json","json",[147,364,365,369,386,409,428,433],{"__ignoreMap":175},[179,366,367],{"class":181,"line":182},[179,368,235],{"class":189},[179,370,371,374,378,381,383],{"class":181,"line":213},[179,372,373],{"class":189},"  \"",[179,375,377],{"class":376},"spNyl","scripts",[179,379,380],{"class":189},"\"",[179,382,245],{"class":189},[179,384,385],{"class":189}," {\n",[179,387,388,391,395,397,399,402,405,407],{"class":181,"line":220},[179,389,390],{"class":189},"    \"",[179,392,394],{"class":393},"sBMFI","test:e2e:local",[179,396,380],{"class":189},[179,398,245],{"class":189},[179,400,401],{"class":189}," \"",[179,403,404],{"class":206},"E2E_ENABLED=1 NIMIQ_PAY_E2E_MODE=local vitest run --project e2e-direct-sign-in",[179,406,380],{"class":189},[179,408,272],{"class":189},[179,410,411,413,416,418,420,422,425],{"class":181,"line":238},[179,412,390],{"class":189},[179,414,415],{"class":393},"test:e2e:qr",[179,417,380],{"class":189},[179,419,245],{"class":189},[179,421,401],{"class":189},[179,423,424],{"class":206},"E2E_ENABLED=1 NIMIQ_PAY_E2E_MODE=local vitest run --project e2e-qr-local-auth",[179,426,427],{"class":189},"\"\n",[179,429,430],{"class":181,"line":275},[179,431,432],{"class":189},"  }\n",[179,434,435],{"class":181,"line":289},[179,436,437],{"class":189},"}\n",[143,439,440],{},"Use local E2E scripts for pull requests. Keep bridge scripts separate because they wait for an injected provider.",[155,442,444],{"id":443},"stub-the-mini-app-provider","Stub the mini-app provider",[143,446,161,447,450,451,454,455,458],{},[147,448,449],{},"createStubNimiqProvider()"," when tests need ",[147,452,453],{},"listAccounts()"," and ",[147,456,457],{},"sign()"," behavior without a real host.",[170,460,463],{"className":172,"code":461,"filename":462,"language":174,"meta":175,"style":175},"import { expect, it } from 'vitest'\nimport { isNimiqProviderError } from '@onmax\u002Fbetter-auth-nimiq\u002Fprovider'\nimport { createStubNimiqProvider } from '@onmax\u002Fbetter-auth-nimiq-pay-e2e\u002Fproviders'\n\nit('signs a challenge with the local provider', async () => {\n  const provider = createStubNimiqProvider()\n\n  const accounts = await provider.listAccounts()\n  const signed = await provider.sign('Sign in to Test App')\n\n  if (isNimiqProviderError(signed))\n    throw new Error(signed.error.message)\n\n  expect(accounts[0]).toMatch(\u002F^NQ\u002F)\n  expect(signed.publicKey).toMatch(\u002F^[a-f0-9]+$\u002Fi)\n  expect(signed.signature).toMatch(\u002F^[a-f0-9]+$\u002Fi)\n})\n","test\u002Fprovider-stub.test.ts",[147,464,465,491,511,531,535,562,578,583,605,635,640,660,688,693,733,778,818],{"__ignoreMap":175},[179,466,467,469,471,474,477,480,482,484,486,489],{"class":181,"line":182},[179,468,186],{"class":185},[179,470,190],{"class":189},[179,472,473],{"class":193}," expect",[179,475,476],{"class":189},",",[179,478,479],{"class":193}," it",[179,481,197],{"class":189},[179,483,200],{"class":185},[179,485,203],{"class":189},[179,487,488],{"class":206},"vitest",[179,490,210],{"class":189},[179,492,493,495,497,500,502,504,506,509],{"class":181,"line":213},[179,494,186],{"class":185},[179,496,190],{"class":189},[179,498,499],{"class":193}," isNimiqProviderError",[179,501,197],{"class":189},[179,503,200],{"class":185},[179,505,203],{"class":189},[179,507,508],{"class":206},"@onmax\u002Fbetter-auth-nimiq\u002Fprovider",[179,510,210],{"class":189},[179,512,513,515,517,520,522,524,526,529],{"class":181,"line":220},[179,514,186],{"class":185},[179,516,190],{"class":189},[179,518,519],{"class":193}," createStubNimiqProvider",[179,521,197],{"class":189},[179,523,200],{"class":185},[179,525,203],{"class":189},[179,527,528],{"class":206},"@onmax\u002Fbetter-auth-nimiq-pay-e2e\u002Fproviders",[179,530,210],{"class":189},[179,532,533],{"class":181,"line":238},[179,534,217],{"emptyLinePlaceholder":216},[179,536,537,540,542,544,547,549,551,554,557,560],{"class":181,"line":275},[179,538,539],{"class":229},"it",[179,541,232],{"class":193},[179,543,269],{"class":189},[179,545,546],{"class":206},"signs a challenge with the local provider",[179,548,269],{"class":189},[179,550,476],{"class":189},[179,552,553],{"class":376}," async",[179,555,556],{"class":189}," ()",[179,558,559],{"class":376}," =>",[179,561,385],{"class":189},[179,563,564,567,570,573,575],{"class":181,"line":289},[179,565,566],{"class":376},"  const",[179,568,569],{"class":193}," provider",[179,571,572],{"class":189}," =",[179,574,519],{"class":229},[179,576,577],{"class":241},"()\n",[179,579,581],{"class":181,"line":580},7,[179,582,217],{"emptyLinePlaceholder":216},[179,584,586,588,591,593,596,598,600,603],{"class":181,"line":585},8,[179,587,566],{"class":376},[179,589,590],{"class":193}," accounts",[179,592,572],{"class":189},[179,594,595],{"class":185}," await",[179,597,569],{"class":193},[179,599,150],{"class":189},[179,601,602],{"class":229},"listAccounts",[179,604,577],{"class":241},[179,606,608,610,613,615,617,619,621,624,626,628,631,633],{"class":181,"line":607},9,[179,609,566],{"class":376},[179,611,612],{"class":193}," signed",[179,614,572],{"class":189},[179,616,595],{"class":185},[179,618,569],{"class":193},[179,620,150],{"class":189},[179,622,623],{"class":229},"sign",[179,625,232],{"class":241},[179,627,269],{"class":189},[179,629,630],{"class":206},"Sign in to Test App",[179,632,269],{"class":189},[179,634,295],{"class":241},[179,636,638],{"class":181,"line":637},10,[179,639,217],{"emptyLinePlaceholder":216},[179,641,643,646,649,652,654,657],{"class":181,"line":642},11,[179,644,645],{"class":185},"  if",[179,647,648],{"class":241}," (",[179,650,651],{"class":229},"isNimiqProviderError",[179,653,232],{"class":241},[179,655,656],{"class":193},"signed",[179,658,659],{"class":241},"))\n",[179,661,663,666,669,672,674,676,678,681,683,686],{"class":181,"line":662},12,[179,664,665],{"class":185},"    throw",[179,667,668],{"class":189}," new",[179,670,671],{"class":229}," Error",[179,673,232],{"class":241},[179,675,656],{"class":193},[179,677,150],{"class":189},[179,679,680],{"class":193},"error",[179,682,150],{"class":189},[179,684,685],{"class":193},"message",[179,687,295],{"class":241},[179,689,691],{"class":181,"line":690},13,[179,692,217],{"emptyLinePlaceholder":216},[179,694,696,699,701,704,707,710,713,715,718,720,723,726,729,731],{"class":181,"line":695},14,[179,697,698],{"class":229},"  expect",[179,700,232],{"class":241},[179,702,703],{"class":193},"accounts",[179,705,706],{"class":241},"[",[179,708,709],{"class":283},"0",[179,711,712],{"class":241},"])",[179,714,150],{"class":189},[179,716,717],{"class":229},"toMatch",[179,719,232],{"class":241},[179,721,722],{"class":189},"\u002F",[179,724,725],{"class":185},"^",[179,727,728],{"class":206},"NQ",[179,730,722],{"class":189},[179,732,295],{"class":241},[179,734,736,738,740,742,744,747,750,752,754,756,758,760,762,765,768,771,773,776],{"class":181,"line":735},15,[179,737,698],{"class":229},[179,739,232],{"class":241},[179,741,656],{"class":193},[179,743,150],{"class":189},[179,745,746],{"class":193},"publicKey",[179,748,749],{"class":241},")",[179,751,150],{"class":189},[179,753,717],{"class":229},[179,755,232],{"class":241},[179,757,722],{"class":189},[179,759,725],{"class":185},[179,761,706],{"class":189},[179,763,764],{"class":206},"a-f0-9",[179,766,767],{"class":189},"]+",[179,769,770],{"class":185},"$",[179,772,722],{"class":189},[179,774,775],{"class":283},"i",[179,777,295],{"class":241},[179,779,781,783,785,787,789,792,794,796,798,800,802,804,806,808,810,812,814,816],{"class":181,"line":780},16,[179,782,698],{"class":229},[179,784,232],{"class":241},[179,786,656],{"class":193},[179,788,150],{"class":189},[179,790,791],{"class":193},"signature",[179,793,749],{"class":241},[179,795,150],{"class":189},[179,797,717],{"class":229},[179,799,232],{"class":241},[179,801,722],{"class":189},[179,803,725],{"class":185},[179,805,706],{"class":189},[179,807,764],{"class":206},[179,809,767],{"class":189},[179,811,770],{"class":185},[179,813,722],{"class":189},[179,815,775],{"class":283},[179,817,295],{"class":241},[179,819,821,823],{"class":181,"line":820},17,[179,822,292],{"class":189},[179,824,295],{"class":193},[143,826,827],{},"Use the stub for deterministic auth-flow tests. Do not use it to test host permissions, provider injection timing, or browser bridge compatibility.",[155,829,831],{"id":830},"wait-for-the-bridge-provider","Wait for the bridge provider",[143,833,161,834,837,838,150],{},[147,835,836],{},"createBridgeNimiqProvider()"," only when the page is expected to expose ",[147,839,840],{},"window.nimiq",[170,842,845],{"className":172,"code":843,"filename":844,"language":174,"meta":175,"style":175},"import { expect, it } from 'vitest'\nimport {\n  createBridgeNimiqProvider,\n  createStubNimiqProvider,\n} from '@onmax\u002Fbetter-auth-nimiq-pay-e2e\u002Fproviders'\n\nit('resolves when the injected provider appears', async () => {\n  const provider = createStubNimiqProvider()\n\n  await expect(createBridgeNimiqProvider({\n    source: () => provider,\n    timeoutMs: 1_000,\n    intervalMs: 50,\n  })).resolves.toBe(provider)\n})\n","test\u002Fwait-for-provider.test.ts",[147,846,847,869,875,882,889,901,905,928,940,944,960,975,987,999,1024],{"__ignoreMap":175},[179,848,849,851,853,855,857,859,861,863,865,867],{"class":181,"line":182},[179,850,186],{"class":185},[179,852,190],{"class":189},[179,854,473],{"class":193},[179,856,476],{"class":189},[179,858,479],{"class":193},[179,860,197],{"class":189},[179,862,200],{"class":185},[179,864,203],{"class":189},[179,866,488],{"class":206},[179,868,210],{"class":189},[179,870,871,873],{"class":181,"line":213},[179,872,186],{"class":185},[179,874,385],{"class":189},[179,876,877,880],{"class":181,"line":220},[179,878,879],{"class":193},"  createBridgeNimiqProvider",[179,881,272],{"class":189},[179,883,884,887],{"class":181,"line":238},[179,885,886],{"class":193},"  createStubNimiqProvider",[179,888,272],{"class":189},[179,890,891,893,895,897,899],{"class":181,"line":275},[179,892,292],{"class":189},[179,894,200],{"class":185},[179,896,203],{"class":189},[179,898,528],{"class":206},[179,900,210],{"class":189},[179,902,903],{"class":181,"line":289},[179,904,217],{"emptyLinePlaceholder":216},[179,906,907,909,911,913,916,918,920,922,924,926],{"class":181,"line":580},[179,908,539],{"class":229},[179,910,232],{"class":193},[179,912,269],{"class":189},[179,914,915],{"class":206},"resolves when the injected provider appears",[179,917,269],{"class":189},[179,919,476],{"class":189},[179,921,553],{"class":376},[179,923,556],{"class":189},[179,925,559],{"class":376},[179,927,385],{"class":189},[179,929,930,932,934,936,938],{"class":181,"line":585},[179,931,566],{"class":376},[179,933,569],{"class":193},[179,935,572],{"class":189},[179,937,519],{"class":229},[179,939,577],{"class":241},[179,941,942],{"class":181,"line":607},[179,943,217],{"emptyLinePlaceholder":216},[179,945,946,949,951,953,956,958],{"class":181,"line":637},[179,947,948],{"class":185},"  await",[179,950,473],{"class":229},[179,952,232],{"class":241},[179,954,955],{"class":229},"createBridgeNimiqProvider",[179,957,232],{"class":241},[179,959,235],{"class":189},[179,961,962,965,967,969,971,973],{"class":181,"line":642},[179,963,964],{"class":229},"    source",[179,966,245],{"class":189},[179,968,556],{"class":189},[179,970,559],{"class":376},[179,972,569],{"class":193},[179,974,272],{"class":189},[179,976,977,980,982,985],{"class":181,"line":662},[179,978,979],{"class":241},"    timeoutMs",[179,981,245],{"class":189},[179,983,984],{"class":283}," 1_000",[179,986,272],{"class":189},[179,988,989,992,994,997],{"class":181,"line":690},[179,990,991],{"class":241},"    intervalMs",[179,993,245],{"class":189},[179,995,996],{"class":283}," 50",[179,998,272],{"class":189},[179,1000,1001,1004,1007,1009,1012,1014,1017,1019,1022],{"class":181,"line":695},[179,1002,1003],{"class":189},"  }",[179,1005,1006],{"class":241},"))",[179,1008,150],{"class":189},[179,1010,1011],{"class":193},"resolves",[179,1013,150],{"class":189},[179,1015,1016],{"class":229},"toBe",[179,1018,232],{"class":241},[179,1020,1021],{"class":193},"provider",[179,1023,295],{"class":241},[179,1025,1026,1028],{"class":181,"line":735},[179,1027,292],{"class":189},[179,1029,295],{"class":193},[143,1031,1032],{},"Failure mode:",[170,1034,1037],{"className":172,"code":1035,"filename":1036,"language":174,"meta":175,"style":175},"import { expect, it } from 'vitest'\nimport { createBridgeNimiqProvider } from '@onmax\u002Fbetter-auth-nimiq-pay-e2e\u002Fproviders'\n\nit('fails with bridge guidance', async () => {\n  await expect(createBridgeNimiqProvider({\n    source: () => null,\n    timeoutMs: 30,\n    intervalMs: 10,\n  })).rejects.toThrow('window.nimiq provider')\n})\n","test\u002Fprovider-timeout.test.ts",[147,1038,1039,1061,1080,1084,1107,1121,1134,1145,1156,1183],{"__ignoreMap":175},[179,1040,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059],{"class":181,"line":182},[179,1042,186],{"class":185},[179,1044,190],{"class":189},[179,1046,473],{"class":193},[179,1048,476],{"class":189},[179,1050,479],{"class":193},[179,1052,197],{"class":189},[179,1054,200],{"class":185},[179,1056,203],{"class":189},[179,1058,488],{"class":206},[179,1060,210],{"class":189},[179,1062,1063,1065,1067,1070,1072,1074,1076,1078],{"class":181,"line":213},[179,1064,186],{"class":185},[179,1066,190],{"class":189},[179,1068,1069],{"class":193}," createBridgeNimiqProvider",[179,1071,197],{"class":189},[179,1073,200],{"class":185},[179,1075,203],{"class":189},[179,1077,528],{"class":206},[179,1079,210],{"class":189},[179,1081,1082],{"class":181,"line":220},[179,1083,217],{"emptyLinePlaceholder":216},[179,1085,1086,1088,1090,1092,1095,1097,1099,1101,1103,1105],{"class":181,"line":238},[179,1087,539],{"class":229},[179,1089,232],{"class":193},[179,1091,269],{"class":189},[179,1093,1094],{"class":206},"fails with bridge guidance",[179,1096,269],{"class":189},[179,1098,476],{"class":189},[179,1100,553],{"class":376},[179,1102,556],{"class":189},[179,1104,559],{"class":376},[179,1106,385],{"class":189},[179,1108,1109,1111,1113,1115,1117,1119],{"class":181,"line":275},[179,1110,948],{"class":185},[179,1112,473],{"class":229},[179,1114,232],{"class":241},[179,1116,955],{"class":229},[179,1118,232],{"class":241},[179,1120,235],{"class":189},[179,1122,1123,1125,1127,1129,1131],{"class":181,"line":289},[179,1124,964],{"class":229},[179,1126,245],{"class":189},[179,1128,556],{"class":189},[179,1130,559],{"class":376},[179,1132,1133],{"class":189}," null,\n",[179,1135,1136,1138,1140,1143],{"class":181,"line":580},[179,1137,979],{"class":241},[179,1139,245],{"class":189},[179,1141,1142],{"class":283}," 30",[179,1144,272],{"class":189},[179,1146,1147,1149,1151,1154],{"class":181,"line":585},[179,1148,991],{"class":241},[179,1150,245],{"class":189},[179,1152,1153],{"class":283}," 10",[179,1155,272],{"class":189},[179,1157,1158,1160,1162,1164,1167,1169,1172,1174,1176,1179,1181],{"class":181,"line":607},[179,1159,1003],{"class":189},[179,1161,1006],{"class":241},[179,1163,150],{"class":189},[179,1165,1166],{"class":193},"rejects",[179,1168,150],{"class":189},[179,1170,1171],{"class":229},"toThrow",[179,1173,232],{"class":241},[179,1175,269],{"class":189},[179,1177,1178],{"class":206},"window.nimiq provider",[179,1180,269],{"class":189},[179,1182,295],{"class":241},[179,1184,1185,1187],{"class":181,"line":637},[179,1186,292],{"class":189},[179,1188,295],{"class":193},[143,1190,1191],{},"Use the provider subpath in tests and helper packages. The root package also re-exports the provider helpers for scenario code.",[155,1193,1195],{"id":1194},"workspace-scripts","Workspace scripts",[143,1197,1198],{},"The package ships these scripts for its own E2E suite:",[170,1200,1205],{"className":1201,"code":1202,"filename":1203,"language":1204,"meta":175,"style":175},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm --filter @onmax\u002Fbetter-auth-nimiq-pay-e2e test:e2e:local\npnpm --filter @onmax\u002Fbetter-auth-nimiq-pay-e2e test:e2e:smoke\npnpm --filter @onmax\u002Fbetter-auth-nimiq-pay-e2e test:e2e:qr\npnpm --filter @onmax\u002Fbetter-auth-nimiq-pay-e2e test:e2e:bridge\n","terminal","bash",[147,1206,1207,1221,1232,1243],{"__ignoreMap":175},[179,1208,1209,1212,1215,1218],{"class":181,"line":182},[179,1210,1211],{"class":393},"pnpm",[179,1213,1214],{"class":206}," --filter",[179,1216,1217],{"class":206}," @onmax\u002Fbetter-auth-nimiq-pay-e2e",[179,1219,1220],{"class":206}," test:e2e:local\n",[179,1222,1223,1225,1227,1229],{"class":181,"line":213},[179,1224,1211],{"class":393},[179,1226,1214],{"class":206},[179,1228,1217],{"class":206},[179,1230,1231],{"class":206}," test:e2e:smoke\n",[179,1233,1234,1236,1238,1240],{"class":181,"line":220},[179,1235,1211],{"class":393},[179,1237,1214],{"class":206},[179,1239,1217],{"class":206},[179,1241,1242],{"class":206}," test:e2e:qr\n",[179,1244,1245,1247,1249,1251],{"class":181,"line":238},[179,1246,1211],{"class":393},[179,1248,1214],{"class":206},[179,1250,1217],{"class":206},[179,1252,1253],{"class":206}," test:e2e:bridge\n",[143,1255,161,1256,1259,1260,1263],{},[147,1257,1258],{},"test:e2e:smoke"," for local direct and QR coverage. Use ",[147,1261,1262],{},"test:e2e:bridge"," only where the injected provider is expected.",[1265,1266,1267],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":175,"searchDepth":213,"depth":213,"links":1269},[1270,1271,1272,1273,1274],{"id":157,"depth":213,"text":158},{"id":348,"depth":213,"text":349},{"id":443,"depth":213,"text":444},{"id":830,"depth":213,"text":831},{"id":1194,"depth":213,"text":1195},"Reuse E2E Vitest config and provider stubs.","md",null,{},{"title":108,"description":1275},"vqEgOvH2Q3iKlfsRAEUTPhcuuBwekoiqDKeZpQOk450",[1282,1284],{"title":104,"path":105,"stem":106,"description":1283,"children":-1},"Test direct Nimiq auth and cross-device flows without the real host app.",{"title":112,"path":113,"stem":114,"description":1285,"children":-1},"Test against injected providers when local stubs are not enough.",1778838254820]