[{"data":1,"prerenderedAt":507},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-bank":145,"-client-addons-bank-surround":502},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":121,"body":147,"description":157,"extension":496,"links":497,"meta":498,"navigation":499,"path":122,"seo":500,"stem":123,"__hash__":501},"docs\u002F4.client-addons\u002F4.bank.md",{"type":148,"value":149,"toc":486},"minimark",[150,154,158,163,166,183,186,195,218,222,228,234,256,260,370,374,377,420,424,427,456,460,463,467,482],[151,152,121],"h1",{"id":153},"client-bank-usage-guide",[155,156,157],"p",{},"The client bank addon opens the bank and ATM browser UI, forwards banking\nrequests to the server bank addon, and pushes account updates back into the\nbrowser.",[159,160,162],"h2",{"id":161},"open-bank-ui","Open Bank UI",[155,164,165],{},"Open full bank mode:",[167,168,173],"pre",{"className":169,"code":170,"language":171,"meta":172,"style":172},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","call forge_client_bank_fnc_openUI;\n","sqf","",[174,175,176],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,170],{},[155,184,185],{},"Open ATM mode:",[167,187,189],{"className":169,"code":188,"language":171,"meta":172,"style":172},"[true] call forge_client_bank_fnc_openUI;\n",[174,190,191],{"__ignoreMap":172},[177,192,193],{"class":179,"line":180},[177,194,188],{},[155,196,197,198,201,202,205,206,209,210,213,214,217],{},"The open function creates ",[174,199,200],{},"RscBank",", sets the bridge mode to ",[174,203,204],{},"bank"," or ",[174,207,208],{},"atm",",\nloads ",[174,211,212],{},"ui\u002F_site\u002Findex.html",", and routes browser events through\n",[174,215,216],{},"forge_client_bank_fnc_handleUIEvents",".",[159,219,221],{"id":220},"bridge-and-repository","Bridge and Repository",[155,223,224,227],{},[174,225,226],{},"forge_client_bank_fnc_initRepository"," tracks account load and cached account\nstate.",[155,229,230,233],{},[174,231,232],{},"forge_client_bank_fnc_initUIBridge"," owns:",[235,236,237,241,244,247,250,253],"ul",{},[238,239,240],"li",{},"active browser control tracking",[238,242,243],{},"bank\u002FATM mode",[238,245,246],{},"browser ready handling",[238,248,249],{},"account hydrate and sync responses",[238,251,252],{},"deposit, withdrawal, transfer, earnings deposit, credit repayment, and PIN\nrequests",[238,254,255],{},"browser notice delivery",[159,257,259],{"id":258},"browser-events","Browser Events",[261,262,263,276],"table",{},[264,265,266],"thead",{},[267,268,269,273],"tr",{},[270,271,272],"th",{},"Event",[270,274,275],{},"Client behavior",[277,278,279,290,300,310,320,330,340,350,360],"tbody",{},[267,280,281,287],{},[282,283,284],"td",{},[174,285,286],{},"bank::ready",[282,288,289],{},"Mark browser ready and request hydrate from the server.",[267,291,292,297],{},[282,293,294],{},[174,295,296],{},"bank::refresh",[282,298,299],{},"Request fresh bank hydrate data.",[267,301,302,307],{},[282,303,304],{},[174,305,306],{},"bank::deposit::request",[282,308,309],{},"Forward deposit amount to the server.",[267,311,312,317],{},[282,313,314],{},[174,315,316],{},"bank::withdraw::request",[282,318,319],{},"Forward withdrawal amount to the server.",[267,321,322,327],{},[282,323,324],{},[174,325,326],{},"bank::transfer::request",[282,328,329],{},"Forward target, source field, and amount.",[267,331,332,337],{},[282,333,334],{},[174,335,336],{},"bank::depositEarnings::request",[282,338,339],{},"Request earnings deposit.",[267,341,342,347],{},[282,343,344],{},[174,345,346],{},"bank::repayCreditLine::request",[282,348,349],{},"Request credit-line repayment.",[267,351,352,357],{},[282,353,354],{},[174,355,356],{},"bank::pin::request",[282,358,359],{},"Forward PIN validation request.",[267,361,362,367],{},[282,363,364],{},[174,365,366],{},"bank::close",[282,368,369],{},"Dispose bridge screen state and close the display.",[159,371,373],{"id":372},"browser-response-events","Browser Response Events",[155,375,376],{},"The bridge sends:",[261,378,379,388],{},[264,380,381],{},[267,382,383,385],{},[270,384,272],{},[270,386,387],{},"Purpose",[277,389,390,400,410],{},[267,391,392,397],{},[282,393,394],{},[174,395,396],{},"bank::hydrate",[282,398,399],{},"Full session\u002Faccount payload.",[267,401,402,407],{},[282,403,404],{},[174,405,406],{},"bank::sync",[282,408,409],{},"Account patch or sync data.",[267,411,412,417],{},[282,413,414],{},[174,415,416],{},"bank::notice",[282,418,419],{},"UI-visible notice payload.",[159,421,423],{"id":422},"request-flow","Request Flow",[155,425,426],{},"Example deposit flow:",[428,429,430,439,442,445,448],"ol",{},[238,431,432,433,435,436,217],{},"Browser sends ",[174,434,306],{}," with an ",[174,437,438],{},"amount",[238,440,441],{},"Client bridge calls the server bank request event.",[238,443,444],{},"Server bank addon validates the request and calls bank hot-state logic.",[238,446,447],{},"Server response is caught by the client post-init event handlers.",[238,449,450,451,205,453,455],{},"Client bridge sends ",[174,452,406],{},[174,454,416],{}," back to the browser.",[159,457,459],{"id":458},"authoritative-state","Authoritative State",[155,461,462],{},"Balances, PIN authorization, transfers, checkout charges, credit lines, and\npersistence are server-owned. The client should only display account data and\nrequest mutations through server events.",[159,464,466],{"id":465},"related-guides","Related Guides",[235,468,469,474,478],{},[238,470,471],{},[472,473,61],"a",{"href":62},[238,475,476],{},[472,477,113],{"href":114},[238,479,480],{},[472,481,109],{"href":110},[483,484,485],"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);}",{"title":172,"searchDepth":487,"depth":487,"links":488},2,[489,490,491,492,493,494,495],{"id":161,"depth":487,"text":162},{"id":220,"depth":487,"text":221},{"id":258,"depth":487,"text":259},{"id":372,"depth":487,"text":373},{"id":422,"depth":487,"text":423},{"id":458,"depth":487,"text":459},{"id":465,"depth":487,"text":466},"md",null,{},true,{"title":121,"description":157},"9tSr_28NEzJ4LE8au9-O-2Asw_3deKU9B74cukr6ppU",[503,505],{"title":117,"path":118,"stem":119,"description":504,"children":-1},"The client actor addon owns the player interaction menu and client-side actor\nrepository. It is the main launcher for nearby player actions and other Forge\nclient UIs.",{"title":125,"path":126,"stem":127,"description":506,"children":-1},"The client CAD addon provides the map and dispatch UI for groups, active\ntasks, task assignment, dispatch orders, support requests, and task\nacknowledge\u002Fdecline workflows.",1776806627742]