[{"data":1,"prerenderedAt":179},["ShallowReactive",2],{"navigation_docs_en":3,"-en-developers-hooks":93,"-en-developers-hooks-surround":174},[4,16,40,72],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":15},"Getting Started","i-lucide-play","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",false,{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":15},"Nodes","i-lucide-workflow","\u002Fen\u002Fnodes","en\u002F2.nodes",[22,27],{"title":23,"path":24,"stem":25,"icon":26},"Overview","\u002Fen\u002Fnodes\u002Foverview","en\u002F2.nodes\u002F1.overview","i-lucide-grid-3x3",{"title":28,"path":29,"stem":30,"children":31,"page":15},"Built-In","\u002Fen\u002Fnodes\u002Fbuiltin","en\u002F2.nodes\u002F2.builtin",[32,36],{"title":33,"path":34,"stem":35},"Mapper","\u002Fen\u002Fnodes\u002Fbuiltin\u002Fmapper","en\u002F2.nodes\u002F2.builtin\u002F1.mapper",{"title":37,"path":38,"stem":39},"Http","\u002Fen\u002Fnodes\u002Fbuiltin\u002Fhttp","en\u002F2.nodes\u002F2.builtin\u002F2.http",{"title":41,"icon":42,"path":43,"stem":44,"children":45,"page":15},"Administration","i-lucide-settings-2","\u002Fen\u002Fadministration","en\u002F3.administration",[46,50,63],{"title":47,"path":48,"stem":49},"Configuration","\u002Fen\u002Fadministration\u002Fconfiguration","en\u002F3.administration\u002F1.configuration",{"title":51,"path":52,"stem":53,"children":54,"page":15},"Deployment","\u002Fen\u002Fadministration\u002Fdeployment","en\u002F3.administration\u002F2.deployment",[55,59],{"title":56,"path":57,"stem":58},"Docker","\u002Fen\u002Fadministration\u002Fdeployment\u002Fdocker","en\u002F3.administration\u002F2.deployment\u002F1.docker",{"title":60,"path":61,"stem":62},"Helm","\u002Fen\u002Fadministration\u002Fdeployment\u002Fhelm","en\u002F3.administration\u002F2.deployment\u002F2.helm",{"title":64,"path":65,"stem":66,"children":67,"page":15},"Node Setup","\u002Fen\u002Fadministration\u002Fnode-setup","en\u002F3.administration\u002F3.node-setup",[68],{"title":69,"path":70,"stem":71},"GlobalMail","\u002Fen\u002Fadministration\u002Fnode-setup\u002Fglobalmail","en\u002F3.administration\u002F3.node-setup\u002F1.globalMail",{"title":73,"icon":74,"path":75,"stem":76,"children":77,"page":15},"Developers","i-lucide-laptop","\u002Fen\u002Fdevelopers","en\u002F4.developers",[78,83,88],{"title":79,"path":80,"stem":81,"icon":82},"Glossary","\u002Fen\u002Fdevelopers\u002Fglossary","en\u002F4.developers\u002F1.glossary","i-lucide-book-open",{"title":84,"path":85,"stem":86,"icon":87},"Hooks","\u002Fen\u002Fdevelopers\u002Fhooks","en\u002F4.developers\u002F2.hooks","i-lucide-fishing-hook",{"title":89,"path":90,"stem":91,"icon":92},"Persistence","\u002Fen\u002Fdevelopers\u002Fpersistence","en\u002F4.developers\u002F3.persistence","i-lucide-database",{"id":94,"title":84,"body":95,"description":167,"extension":168,"links":169,"meta":170,"navigation":171,"path":85,"seo":172,"stem":86,"__hash__":173},"docs_en\u002Fen\u002F4.developers\u002F2.hooks.md",{"type":96,"value":97,"toc":156},"minimark",[98,103,107,111,119,123,126,132,147,153],[99,100,102],"h2",{"id":101},"definition","Definition",[104,105],"glossary-entry",{"name":106},"hook",[99,108,110],{"id":109},"available-hooks","Available Hooks",[112,113,115],"h3",{"id":114},"prebusinessstartuphook",[116,117,118],"code",{},"PreBusinessStartupHook",[120,121,122],"p",{},"Starts between initializing Extensions and starting the business logic (REST API & scheduler).\nTherefore, it can access all collected Extensions & Node Handlers.",[120,124,125],{},"Used to run Database Transactions, which require looping through all usages of Node-scoped persistency services.",[112,127,129],{"id":128},"nodeapirouteshook",[116,130,131],{},"NodeapiRoutesHook",[120,133,134,135,138,139,142,143,146],{},"Receives an instance of Ktor's ",[116,136,137],{},"Routing"," DSL, allowing you to define your own routes.\nIn most cases, it is recommended to use the abstractions provided by ",[116,140,141],{},"NodeRouteFactory"," & ",[116,144,145],{},"NodeHandlerRouteFactory",".",[112,148,150],{"id":149},"nodedeletedhook",[116,151,152],{},"NodeDeletedHook",[120,154,155],{},"Implement to clean up Node data when one is deleted.",{"title":157,"searchDepth":158,"depth":158,"links":159},"",2,[160,161],{"id":101,"depth":158,"text":102},{"id":109,"depth":158,"text":110,"children":162},[163,165,166],{"id":114,"depth":164,"text":118},3,{"id":128,"depth":164,"text":131},{"id":149,"depth":164,"text":152},"Explanation and a list of Hooks","md",null,{},{"icon":87},{"title":84,"description":167},"iTAZsoFHwbz-uL7Rbr5IB-iPY5lInRdSsIvGWrEr36s",[175,177],{"title":79,"path":80,"stem":81,"description":176,"icon":82,"children":-1},"Understand Snoty's Terminology",{"title":89,"path":90,"stem":91,"description":178,"icon":92,"children":-1},"The Extension API includes high-level abstractions for many things. Among them are persistence services.",1791926062363]