[{"data":1,"prerenderedAt":863},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fbusiness\u002Fstate":5,"docs-nav":654},{"items":4},[],{"id":6,"title":7,"body":8,"description":647,"extension":648,"meta":649,"navigation":78,"path":650,"seo":651,"stem":652,"__hash__":653},"docs\u002Fdocs\u002F4.business\u002F11.state.md","Caller state",{"type":9,"value":10,"toc":642},"minimark",[11,15,24,279,286,370,397,402,405,524,549,556,560,593,597,638],[12,13,7],"h1",{"id":14},"caller-state",[16,17,18,19,23],"p",{},"A source keeps rows; some things belong to the caller instead — a cart before sign-in, a chosen\nlocale. An op asks for ",[20,21,22],"code",{},"State"," and reads or writes it by name:",[25,26,31],"pre",{"className":27,"code":28,"language":29,"meta":30,"style":30},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","import type { State } from '@fougere\u002Fcore';\n\nexport default class CartHandler {\n  async open(state: State) {\n    state.set('cart', 'c42');\n\n    return { opened: true };\n  }\n\n  async current(state: State) {\n    return { cart: state.get\u003Cstring>('cart') ?? null };\n  }\n}\n","ts","",[20,32,33,73,80,100,127,164,169,190,196,201,221,268,273],{"__ignoreMap":30},[34,35,38,42,45,49,53,56,59,63,67,70],"span",{"class":36,"line":37},"line",1,[34,39,41],{"class":40},"sK6XW","import",[34,43,44],{"class":40}," type",[34,46,48],{"class":47},"s15xx"," {",[34,50,52],{"class":51},"sPEhv"," State",[34,54,55],{"class":47}," }",[34,57,58],{"class":40}," from",[34,60,62],{"class":61},"sDDC1"," '",[34,64,66],{"class":65},"sN-8n","@fougere\u002Fcore",[34,68,69],{"class":61},"'",[34,71,72],{"class":47},";\n",[34,74,76],{"class":36,"line":75},2,[34,77,79],{"emptyLinePlaceholder":78},true,"\n",[34,81,83,86,89,93,97],{"class":36,"line":82},3,[34,84,85],{"class":40},"export",[34,87,88],{"class":40}," default",[34,90,92],{"class":91},"s76I7"," class",[34,94,96],{"class":95},"sBZYL"," CartHandler",[34,98,99],{"class":47}," {\n",[34,101,103,106,110,113,117,120,122,125],{"class":36,"line":102},4,[34,104,105],{"class":91},"  async",[34,107,109],{"class":108},"shDkW"," open",[34,111,112],{"class":47},"(",[34,114,116],{"class":115},"shDUQ","state",[34,118,119],{"class":47},":",[34,121,52],{"class":95},[34,123,124],{"class":47},")",[34,126,99],{"class":47},[34,128,130,133,136,140,143,145,148,150,153,155,158,160,162],{"class":36,"line":129},5,[34,131,132],{"class":51},"    state",[34,134,135],{"class":47},".",[34,137,139],{"class":138},"s4mR9","set",[34,141,112],{"class":142},"spAFX",[34,144,69],{"class":61},[34,146,147],{"class":65},"cart",[34,149,69],{"class":61},[34,151,152],{"class":47},",",[34,154,62],{"class":61},[34,156,157],{"class":65},"c42",[34,159,69],{"class":61},[34,161,124],{"class":142},[34,163,72],{"class":47},[34,165,167],{"class":36,"line":166},6,[34,168,79],{"emptyLinePlaceholder":78},[34,170,172,175,177,181,183,187],{"class":36,"line":171},7,[34,173,174],{"class":40},"    return",[34,176,48],{"class":47},[34,178,180],{"class":179},"sHtqg"," opened",[34,182,119],{"class":47},[34,184,186],{"class":185},"slmMI"," true",[34,188,189],{"class":47}," };\n",[34,191,193],{"class":36,"line":192},8,[34,194,195],{"class":47},"  }\n",[34,197,199],{"class":36,"line":198},9,[34,200,79],{"emptyLinePlaceholder":78},[34,202,204,206,209,211,213,215,217,219],{"class":36,"line":203},10,[34,205,105],{"class":91},[34,207,208],{"class":108}," current",[34,210,112],{"class":47},[34,212,116],{"class":115},[34,214,119],{"class":47},[34,216,52],{"class":95},[34,218,124],{"class":47},[34,220,99],{"class":47},[34,222,224,226,228,231,233,236,238,241,244,247,250,252,254,256,258,260,263,266],{"class":36,"line":223},11,[34,225,174],{"class":40},[34,227,48],{"class":47},[34,229,230],{"class":179}," cart",[34,232,119],{"class":47},[34,234,235],{"class":51}," state",[34,237,135],{"class":47},[34,239,240],{"class":138},"get",[34,242,243],{"class":47},"\u003C",[34,245,246],{"class":95},"string",[34,248,249],{"class":47},">",[34,251,112],{"class":142},[34,253,69],{"class":61},[34,255,147],{"class":65},[34,257,69],{"class":61},[34,259,124],{"class":142},[34,261,262],{"class":47}," ??",[34,264,265],{"class":61}," null",[34,267,189],{"class":47},[34,269,271],{"class":36,"line":270},12,[34,272,195],{"class":47},[34,274,276],{"class":36,"line":275},13,[34,277,278],{"class":47},"}\n",[16,280,281,282,285],{},"The op names no cookie and no header. How each name is kept is the operator's, in\n",[20,283,284],{},"fougere.config.ts",", and a package brings the way to keep it:",[25,287,289],{"className":27,"code":288,"language":29,"meta":30,"style":30},"import '@fougere\u002Fstate-cookie';\n\nexport default defineFougere({\n  state: { cart: { cookie: { maxAge: 604800 } } },\n});\n",[20,290,291,304,308,323,361],{"__ignoreMap":30},[34,292,293,295,297,300,302],{"class":36,"line":37},[34,294,41],{"class":40},[34,296,62],{"class":61},[34,298,299],{"class":65},"@fougere\u002Fstate-cookie",[34,301,69],{"class":61},[34,303,72],{"class":47},[34,305,306],{"class":36,"line":75},[34,307,79],{"emptyLinePlaceholder":78},[34,309,310,312,314,317,320],{"class":36,"line":82},[34,311,85],{"class":40},[34,313,88],{"class":40},[34,315,316],{"class":138}," defineFougere",[34,318,112],{"class":319},"srlTG",[34,321,322],{"class":47},"{\n",[34,324,325,328,330,332,334,336,338,341,343,345,348,350,354,356,358],{"class":36,"line":102},[34,326,327],{"class":179},"  state",[34,329,119],{"class":47},[34,331,48],{"class":47},[34,333,230],{"class":179},[34,335,119],{"class":47},[34,337,48],{"class":47},[34,339,340],{"class":179}," cookie",[34,342,119],{"class":47},[34,344,48],{"class":47},[34,346,347],{"class":179}," maxAge",[34,349,119],{"class":47},[34,351,353],{"class":352},"s3dPA"," 604800",[34,355,55],{"class":47},[34,357,55],{"class":47},[34,359,360],{"class":47}," },\n",[34,362,363,366,368],{"class":36,"line":129},[34,364,365],{"class":47},"}",[34,367,124],{"class":319},[34,369,72],{"class":47},[16,371,372,373,376,377,380,381,384,385,388,389,392,393,396],{},"A cookie is ",[20,374,375],{},"HttpOnly",", ",[20,378,379],{},"SameSite=Lax"," and ",[20,382,383],{},"Path=\u002F"," unless the entry says otherwise\n(",[20,386,387],{},"sameSite: 'none'"," adds ",[20,390,391],{},"Secure","). ",[20,394,395],{},"state.delete('cart')"," removes it.",[398,399,401],"h2",{"id":400},"kept-in-a-session","Kept in a session",[16,403,404],{},"What is too large for a cookie, or must stay hidden from the caller, is kept server-side:",[25,406,408],{"className":27,"code":407,"language":29,"meta":30,"style":30},"import '@fougere\u002Fstate-session';\n\nexport default defineFougere({\n  state: {\n    locale: { cookie: {} },   \u002F\u002F its own cookie\n    cart: { session: {} },    \u002F\u002F in the session row\n    draft: { session: {} },   \u002F\u002F the same row\n  },\n});\n",[20,409,410,423,427,439,447,470,491,511,516],{"__ignoreMap":30},[34,411,412,414,416,419,421],{"class":36,"line":37},[34,413,41],{"class":40},[34,415,62],{"class":61},[34,417,418],{"class":65},"@fougere\u002Fstate-session",[34,420,69],{"class":61},[34,422,72],{"class":47},[34,424,425],{"class":36,"line":75},[34,426,79],{"emptyLinePlaceholder":78},[34,428,429,431,433,435,437],{"class":36,"line":82},[34,430,85],{"class":40},[34,432,88],{"class":40},[34,434,316],{"class":138},[34,436,112],{"class":319},[34,438,322],{"class":47},[34,440,441,443,445],{"class":36,"line":102},[34,442,327],{"class":179},[34,444,119],{"class":47},[34,446,99],{"class":47},[34,448,449,452,454,456,458,460,463,466],{"class":36,"line":129},[34,450,451],{"class":179},"    locale",[34,453,119],{"class":47},[34,455,48],{"class":47},[34,457,340],{"class":179},[34,459,119],{"class":47},[34,461,462],{"class":47}," {}",[34,464,465],{"class":47}," },",[34,467,469],{"class":468},"skXKP","   \u002F\u002F its own cookie\n",[34,471,472,475,477,479,482,484,486,488],{"class":36,"line":166},[34,473,474],{"class":179},"    cart",[34,476,119],{"class":47},[34,478,48],{"class":47},[34,480,481],{"class":179}," session",[34,483,119],{"class":47},[34,485,462],{"class":47},[34,487,465],{"class":47},[34,489,490],{"class":468},"    \u002F\u002F in the session row\n",[34,492,493,496,498,500,502,504,506,508],{"class":36,"line":171},[34,494,495],{"class":179},"    draft",[34,497,119],{"class":47},[34,499,48],{"class":47},[34,501,481],{"class":179},[34,503,119],{"class":47},[34,505,462],{"class":47},[34,507,465],{"class":47},[34,509,510],{"class":468},"   \u002F\u002F the same row\n",[34,512,513],{"class":36,"line":192},[34,514,515],{"class":47},"  },\n",[34,517,518,520,522],{"class":36,"line":198},[34,519,365],{"class":47},[34,521,124],{"class":319},[34,523,72],{"class":47},[16,525,526,527,530,531,533,534,537,538,541,542,545,546,548],{},"The caller holds one cookie, ",[20,528,529],{},"session",", with a random reference. Every name kept in ",[20,532,529],{}," lives in\none ",[20,535,536],{},"stateSession"," row, an entity like any other: it sits in the default source, and ",[20,539,540],{},"fougere migrate","\ncreates its table. The op does not change — ",[20,543,544],{},"state.set('cart', …)"," whichever way ",[20,547,147],{}," is kept. A\nsession whose names are all forgotten is deleted, and its cookie expired.",[16,550,551,552,555],{},"A name ",[20,553,554],{},"state:"," does not declare is refused rather than kept in a session by default: a session needs a\ntable, and no table appears because an op wrote a value.",[398,557,559],{"id":558},"what-travels-and-what-is-written","What travels, and what is written",[561,562,563,575,581,587],"ul",{},[564,565,566,570,571,574],"li",{},[567,568,569],"strong",{},"Signed, not encrypted."," The value leaves with a signature made with ",[20,572,573],{},"FOUGERE_STATE_KEY",". The\ncaller can read it and cannot change it: a changed value reads as absent. What must stay hidden\nis kept in a session.",[564,576,577,580],{},[567,578,579],{},"Written only on an answer."," What the calls of a request wrote leaves with the answer; a\nrefused request keeps nothing.",[564,582,583,586],{},[567,584,585],{},"One request, every call."," A GraphQL document making three calls writes once, with the answer.",[564,588,589,592],{},[567,590,591],{},"Every HTTP door carries it"," — REST, GraphQL, and the envelope a page calls. A call one process\nmakes to another carries no caller state: it has no caller.",[398,594,596],{"id":595},"what-is-refused","What is refused",[561,598,599,608,632],{},[564,600,601,604,605,607],{},[20,602,603],{},"state.set"," on a name ",[20,606,554],{}," does not declare, or one the door cannot carry, naming what the\ndoor keeps.",[564,609,610,612,613,616,617,620,621,624,625,627,628,631],{},[20,611,603],{}," outside a request at a door — a call made in process, or a runtime with no async\ncontext. On a Worker, ",[20,614,615],{},"nodejs_compat"," is that context; ",[20,618,619],{},"fougere check"," names a\n",[20,622,623],{},"wrangler"," config declaring ",[20,626,554],{}," without it (",[20,629,630],{},"state-without-async-context",").",[564,633,634,635,637],{},"With no ",[20,636,573],{},", the boot warns: the key dies with the process, so a restart or a\nsecond replica reads every value as absent.",[639,640,641],"style",{},"html pre.shiki code .sK6XW, html code.shiki .sK6XW{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#8FCF86;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .sPEhv, html code.shiki .sPEhv{--shiki-light:#90A4AE;--shiki-default:#DDE5DA;--shiki-dark:#BABED8}html pre.shiki code .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .s76I7, html code.shiki .s76I7{--shiki-light:#9C3EDA;--shiki-default:#8FCF86;--shiki-dark:#C792EA}html pre.shiki code .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}html pre.shiki code .shDkW, html code.shiki .shDkW{--shiki-light:#E53935;--shiki-default:#C9B6EA;--shiki-dark:#F07178}html pre.shiki code .shDUQ, html code.shiki .shDUQ{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#DDE5DA;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .spAFX, html code.shiki .spAFX{--shiki-light:#E53935;--shiki-default:#A3B0A5;--shiki-dark:#F07178}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .slmMI, html code.shiki .slmMI{--shiki-light:#FF5370;--shiki-default:#EE9F6B;--shiki-dark:#FF9CAC}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 .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}html pre.shiki code .s3dPA, html code.shiki .s3dPA{--shiki-light:#F76D47;--shiki-default:#EE9F6B;--shiki-dark:#F78C6C}html pre.shiki code .skXKP, html code.shiki .skXKP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7D8C80;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":30,"searchDepth":75,"depth":75,"links":643},[644,645,646],{"id":400,"depth":75,"text":401},{"id":558,"depth":75,"text":559},{"id":595,"depth":75,"text":596},"What a caller keeps between two requests — a cart, a locale — read and written by name, signed by the core, carried by the door.","md",{},"\u002Fdocs\u002Fbusiness\u002Fstate",{"title":7,"description":647},"docs\u002F4.business\u002F11.state","5AKsxqtWKjdxUlabJgV5J-i_9fLwsT_b0h5cqVTe5HQ",[655],{"title":656,"path":657,"stem":658,"children":659,"page":-1},"Docs","\u002Fdocs","docs",[660,663,667,671,675,679,683,705,726,751,797,822],{"title":661,"path":657,"stem":662},"What is Fougere","docs\u002Findex",{"title":664,"path":665,"stem":666},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":668,"path":669,"stem":670},"An app you already have","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":672,"path":673,"stem":674},"Bring your schema","\u002Fdocs\u002Fbring-your-schema","docs\u002F03.bring-your-schema",{"title":676,"path":677,"stem":678},"The CLI","\u002Fdocs\u002Fcli","docs\u002F04.cli",{"title":680,"path":681,"stem":682},"Demos","\u002Fdocs\u002Fdemos","docs\u002F05.demos",{"title":684,"path":685,"stem":686,"children":687,"page":704},"Guides","\u002Fdocs\u002Fguides","docs\u002F1.guides",[688,692,696,700],{"title":689,"path":690,"stem":691},"Handle your business logic","\u002Fdocs\u002Fguides\u002Fbusiness-logic","docs\u002F1.guides\u002F1.business-logic",{"title":693,"path":694,"stem":695},"Store your data","\u002Fdocs\u002Fguides\u002Fdata","docs\u002F1.guides\u002F2.data",{"title":697,"path":698,"stem":699},"Shape your topology","\u002Fdocs\u002Fguides\u002Ftopology","docs\u002F1.guides\u002F3.topology",{"title":701,"path":702,"stem":703},"Choose how it runs","\u002Fdocs\u002Fguides\u002Fconfig","docs\u002F1.guides\u002F4.config",false,{"title":706,"path":707,"stem":708,"children":709,"page":704},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[710,714,718,722],{"title":711,"path":712,"stem":713},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":715,"path":716,"stem":717},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":719,"path":720,"stem":721},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",{"title":723,"path":724,"stem":725},"The base","\u002Fdocs\u002Fconcepts\u002Fthe-base","docs\u002F2.concepts\u002F4.the-base",{"title":727,"path":728,"stem":729,"children":730,"page":704},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[731,735,739,743,747],{"title":732,"path":733,"stem":734},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":736,"path":737,"stem":738},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":740,"path":741,"stem":742},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":744,"path":745,"stem":746},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":748,"path":749,"stem":750},"How a schema moves","\u002Fdocs\u002Fschema\u002Fevolution","docs\u002F3.schema\u002F5.evolution",{"title":752,"path":753,"stem":754,"children":755,"page":704},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[756,760,764,765,769,773,777,781,785,789,793],{"title":757,"path":758,"stem":759},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":761,"path":762,"stem":763},"Ports","\u002Fdocs\u002Fbusiness\u002Fports","docs\u002F4.business\u002F10.ports",{"title":7,"path":650,"stem":652},{"title":766,"path":767,"stem":768},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":770,"path":771,"stem":772},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":774,"path":775,"stem":776},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":778,"path":779,"stem":780},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":782,"path":783,"stem":784},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":786,"path":787,"stem":788},"Storage","\u002Fdocs\u002Fbusiness\u002Fstorage","docs\u002F4.business\u002F7.storage",{"title":790,"path":791,"stem":792},"Writes that stand or fall as one","\u002Fdocs\u002Fbusiness\u002Ftogether","docs\u002F4.business\u002F8.together",{"title":794,"path":795,"stem":796},"Repositories","\u002Fdocs\u002Fbusiness\u002Frepositories","docs\u002F4.business\u002F9.repositories",{"title":798,"path":799,"stem":800,"children":801,"page":704},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[802,806,810,814,818],{"title":803,"path":804,"stem":805},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":807,"path":808,"stem":809},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":811,"path":812,"stem":813},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":815,"path":816,"stem":817},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":819,"path":820,"stem":821},"Back-office","\u002Fdocs\u002Fclient\u002Fadmin","docs\u002F5.client\u002F5.admin",{"title":823,"path":824,"stem":825,"children":826,"page":704},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[827,831,835,839,843,847,851,855,859],{"title":828,"path":829,"stem":830},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":832,"path":833,"stem":834},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":836,"path":837,"stem":838},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":840,"path":841,"stem":842},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"title":844,"path":845,"stem":846},"Sources","\u002Fdocs\u002Finfra\u002Fsources","docs\u002F6.infra\u002F5.sources",{"title":848,"path":849,"stem":850},"Lifecycle","\u002Fdocs\u002Finfra\u002Flifecycle","docs\u002F6.infra\u002F6.lifecycle",{"title":852,"path":853,"stem":854},"Identity across Fronds","\u002Fdocs\u002Finfra\u002Fidentity","docs\u002F6.infra\u002F7.identity",{"title":856,"path":857,"stem":858},"Observability","\u002Fdocs\u002Finfra\u002Fobservability","docs\u002F6.infra\u002F8.observability",{"title":860,"path":861,"stem":862},"Testing","\u002Fdocs\u002Finfra\u002Ftesting","docs\u002F6.infra\u002F9.testing",1792704169857]