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