[{"data":1,"prerenderedAt":6595},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-apps-react-to-events-and-run-scheduled-work":2399},[4,82,446,500,736,2117],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started\u002Findex",[9,10,17,23,30,37,44,51,57,63,69,75],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"icon":16},"Apps and Sites","\u002Fdocs\u002Fgetting-started\u002Fapps-and-sites","docs\u002Fgetting-started\u002Fapps-and-sites\u002Findex",[15],{"title":11,"path":12,"stem":13,"icon":16},"i-lucide-columns-2",{"title":18,"path":19,"stem":20,"children":21},"Architecture Overview","\u002Fdocs\u002Fgetting-started\u002Farchitecture","docs\u002Fgetting-started\u002Farchitecture\u002Findex",[22],{"title":18,"path":19,"stem":20},{"title":24,"path":25,"stem":26,"children":27,"icon":29},"Bring an existing frontend","\u002Fdocs\u002Fgetting-started\u002Fbring-an-existing-frontend","docs\u002Fgetting-started\u002Fbring-an-existing-frontend\u002Findex",[28],{"title":24,"path":25,"stem":26,"icon":29},"i-lucide-arrow-right-left",{"title":31,"path":32,"stem":33,"children":34,"icon":36},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002Fgetting-started\u002Fconcepts\u002Findex",[35],{"title":31,"path":32,"stem":33,"icon":36},"i-lucide-shapes",{"title":38,"path":39,"stem":40,"children":41,"icon":43},"Frontend stacks","\u002Fdocs\u002Fgetting-started\u002Ffrontend-stacks","docs\u002Fgetting-started\u002Ffrontend-stacks\u002Findex",[42],{"title":38,"path":39,"stem":40,"icon":43},"i-lucide-layers",{"title":45,"path":46,"stem":47,"children":48,"icon":50},"Get Help","\u002Fdocs\u002Fgetting-started\u002Fget-help","docs\u002Fgetting-started\u002Fget-help\u002Findex",[49],{"title":45,"path":46,"stem":47,"icon":50},"i-lucide-life-buoy",{"title":52,"path":53,"stem":54,"children":55},"Glossary","\u002Fdocs\u002Fgetting-started\u002Fglossary","docs\u002Fgetting-started\u002Fglossary\u002Findex",[56],{"title":52,"path":53,"stem":54},{"title":58,"path":59,"stem":60,"children":61},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","docs\u002Fgetting-started\u002Fplatform-overview\u002Findex",[62],{"title":58,"path":59,"stem":60},{"title":64,"path":65,"stem":66,"children":67},"Prerequisites","\u002Fdocs\u002Fgetting-started\u002Fprerequisites","docs\u002Fgetting-started\u002Fprerequisites\u002Findex",[68],{"title":64,"path":65,"stem":66},{"title":70,"path":71,"stem":72,"children":73},"Your First App in 15 Minutes","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start\u002Findex",[74],{"title":70,"path":71,"stem":72},{"title":76,"path":77,"stem":78,"children":79,"icon":81},"Security and trust","\u002Fdocs\u002Fgetting-started\u002Fsecurity-and-trust","docs\u002Fgetting-started\u002Fsecurity-and-trust\u002Findex",[80],{"title":76,"path":77,"stem":78,"icon":81},"i-lucide-shield-check",{"title":83,"path":84,"stem":85,"children":86},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides\u002Findex",[87,88,151,249,256,310,364,391],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91,"children":92,"icon":94},"Build an App","\u002Fdocs\u002Fguides\u002Fapps","docs\u002Fguides\u002Fapps\u002Findex",[93,95,102,109,116,123,130,137,144],{"title":89,"path":90,"stem":91,"icon":94},"i-lucide-layout-grid",{"title":96,"path":97,"stem":98,"children":99,"icon":101},"Give your App a Cockpit screen","\u002Fdocs\u002Fguides\u002Fapps\u002Fadd-a-cockpit-screen","docs\u002Fguides\u002Fapps\u002Fadd-a-cockpit-screen\u002Findex",[100],{"title":96,"path":97,"stem":98,"icon":101},"i-lucide-layout-dashboard",{"title":103,"path":104,"stem":105,"children":106,"icon":108},"Add a data model","\u002Fdocs\u002Fguides\u002Fapps\u002Fadd-a-data-model","docs\u002Fguides\u002Fapps\u002Fadd-a-data-model\u002Findex",[107],{"title":103,"path":104,"stem":105,"icon":108},"i-lucide-database",{"title":110,"path":111,"stem":112,"children":113,"icon":115},"Build your first App","\u002Fdocs\u002Fguides\u002Fapps\u002Fbuild-your-first-app","docs\u002Fguides\u002Fapps\u002Fbuild-your-first-app\u002Findex",[114],{"title":110,"path":111,"stem":112,"icon":115},"i-lucide-hammer",{"title":117,"path":118,"stem":119,"children":120,"icon":122},"Deploy and verify an App","\u002Fdocs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli","docs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli\u002Findex",[121],{"title":117,"path":118,"stem":119,"icon":122},"i-lucide-square-terminal",{"title":124,"path":125,"stem":126,"children":127,"icon":129},"Publish a business event from your App","\u002Fdocs\u002Fguides\u002Fapps\u002Fpublish-a-business-event","docs\u002Fguides\u002Fapps\u002Fpublish-a-business-event\u002Findex",[128],{"title":124,"path":125,"stem":126,"icon":129},"i-lucide-megaphone",{"title":131,"path":132,"stem":133,"children":134,"icon":136},"Publish on the Marketplace","\u002Fdocs\u002Fguides\u002Fapps\u002Fpublish-on-the-marketplace","docs\u002Fguides\u002Fapps\u002Fpublish-on-the-marketplace\u002Findex",[135],{"title":131,"path":132,"stem":133,"icon":136},"i-lucide-store",{"title":138,"path":139,"stem":140,"children":141,"icon":143},"React to events and run scheduled work in your App","\u002Fdocs\u002Fguides\u002Fapps\u002Freact-to-events-and-run-scheduled-work","docs\u002Fguides\u002Fapps\u002Freact-to-events-and-run-scheduled-work\u002Findex",[142],{"title":138,"path":139,"stem":140,"icon":143},"i-lucide-timer",{"title":145,"path":146,"stem":147,"children":148,"icon":150},"Ship a schema change","\u002Fdocs\u002Fguides\u002Fapps\u002Fship-a-schema-change","docs\u002Fguides\u002Fapps\u002Fship-a-schema-change\u002Findex",[149],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-git-branch",{"title":152,"path":153,"stem":154,"children":155,"icon":157},"Set up selling","\u002Fdocs\u002Fguides\u002Fcommerce","docs\u002Fguides\u002Fcommerce\u002Findex",[156,158,165,172,179,186,193,200,207,214,221,228,235,242],{"title":152,"path":153,"stem":154,"icon":157},"i-lucide-shopping-cart",{"title":159,"path":160,"stem":161,"children":162,"icon":164},"Set up B2B pricing","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fb2b-pricing","docs\u002Fguides\u002Fcommerce\u002Fb2b-pricing\u002Findex",[163],{"title":159,"path":160,"stem":161,"icon":164},"i-lucide-circle-dollar-sign",{"title":166,"path":167,"stem":168,"children":169,"icon":171},"Give buyer staff the right permissions","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fbuyer-permissions","docs\u002Fguides\u002Fcommerce\u002Fbuyer-permissions\u002Findex",[170],{"title":166,"path":167,"stem":168,"icon":171},"i-lucide-user-cog",{"title":173,"path":174,"stem":175,"children":176,"icon":178},"Confirm invoice payments","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fconfirm-invoice-payments","docs\u002Fguides\u002Fcommerce\u002Fconfirm-invoice-payments\u002Findex",[177],{"title":173,"path":174,"stem":175,"icon":178},"i-lucide-receipt",{"title":180,"path":181,"stem":182,"children":183,"icon":185},"Model a catalog with attributes, families and variants","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fmodel-a-catalog","docs\u002Fguides\u002Fcommerce\u002Fmodel-a-catalog\u002Findex",[184],{"title":180,"path":181,"stem":182,"icon":185},"i-lucide-boxes",{"title":187,"path":188,"stem":189,"children":190,"icon":192},"Order and quote numbers","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fnumber-ranges","docs\u002Fguides\u002Fcommerce\u002Fnumber-ranges\u002Findex",[191],{"title":187,"path":188,"stem":189,"icon":192},"i-lucide-hash",{"title":194,"path":195,"stem":196,"children":197,"icon":199},"Manage product images and documents","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fproduct-media","docs\u002Fguides\u002Fcommerce\u002Fproduct-media\u002Findex",[198],{"title":194,"path":195,"stem":196,"icon":199},"i-lucide-image",{"title":201,"path":202,"stem":203,"children":204,"icon":206},"Run promotions and voucher codes","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fpromotions-and-vouchers","docs\u002Fguides\u002Fcommerce\u002Fpromotions-and-vouchers\u002Findex",[205],{"title":201,"path":202,"stem":203,"icon":206},"i-lucide-ticket-percent",{"title":208,"path":209,"stem":210,"children":211,"icon":213},"Set up purchase approvals","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fpurchase-approvals","docs\u002Fguides\u002Fcommerce\u002Fpurchase-approvals\u002Findex",[212],{"title":208,"path":209,"stem":210,"icon":213},"i-lucide-stamp",{"title":215,"path":216,"stem":217,"children":218,"icon":220},"Turn an accepted quote into an order","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fquotes-to-orders","docs\u002Fguides\u002Fcommerce\u002Fquotes-to-orders\u002Findex",[219],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-handshake",{"title":222,"path":223,"stem":224,"children":225,"icon":227},"Build categories from rules","\u002Fdocs\u002Fguides\u002Fcommerce\u002Frule-based-categories","docs\u002Fguides\u002Fcommerce\u002Frule-based-categories\u002Findex",[226],{"title":222,"path":223,"stem":224,"icon":227},"i-lucide-list-filter",{"title":229,"path":230,"stem":231,"children":232,"icon":234},"Ship, cancel and return an order","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fship-cancel-and-return","docs\u002Fguides\u002Fcommerce\u002Fship-cancel-and-return\u002Findex",[233],{"title":229,"path":230,"stem":231,"icon":234},"i-lucide-package-check",{"title":236,"path":237,"stem":238,"children":239,"icon":241},"Set up shipping rates and tax","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fshipping-rates","docs\u002Fguides\u002Fcommerce\u002Fshipping-rates\u002Findex",[240],{"title":236,"path":237,"stem":238,"icon":241},"i-lucide-truck",{"title":243,"path":244,"stem":245,"children":246,"icon":248},"Connect a payment provider and take a test payment","\u002Fdocs\u002Fguides\u002Fcommerce\u002Ftest-payments","docs\u002Fguides\u002Fcommerce\u002Ftest-payments\u002Findex",[247],{"title":243,"path":244,"stem":245,"icon":248},"i-lucide-credit-card",{"title":250,"path":251,"stem":252,"children":253,"icon":255},"Start from an example","\u002Fdocs\u002Fguides\u002Fexamples","docs\u002Fguides\u002Fexamples\u002Findex",[254],{"title":250,"path":251,"stem":252,"icon":255},"i-lucide-folder-code",{"title":257,"path":258,"stem":259,"children":260,"icon":262},"Connect a system","\u002Fdocs\u002Fguides\u002Fintegrations","docs\u002Fguides\u002Fintegrations\u002Findex",[261,263,269,276,283,289,296,303],{"title":257,"path":258,"stem":259,"icon":262},"i-lucide-plug",{"title":264,"path":265,"stem":266,"children":267,"icon":29},"Connect a procurement system by punchout","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fconnect-by-punchout","docs\u002Fguides\u002Fintegrations\u002Fconnect-by-punchout\u002Findex",[268],{"title":264,"path":265,"stem":266,"icon":29},{"title":270,"path":271,"stem":272,"children":273,"icon":275},"Hand an order to the ERP","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fhand-an-order-to-the-erp","docs\u002Fguides\u002Fintegrations\u002Fhand-an-order-to-the-erp\u002Findex",[274],{"title":270,"path":271,"stem":272,"icon":275},"i-lucide-arrow-left-right",{"title":277,"path":278,"stem":279,"children":280,"icon":282},"Import a BMECAT catalog","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fimport-a-bmecat-catalog","docs\u002Fguides\u002Fintegrations\u002Fimport-a-bmecat-catalog\u002Findex",[281],{"title":277,"path":278,"stem":279,"icon":282},"i-lucide-package-plus",{"title":284,"path":285,"stem":286,"children":287,"icon":50},"Keep an Integration Studio workflow running","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fkeep-a-workflow-running","docs\u002Fguides\u002Fintegrations\u002Fkeep-a-workflow-running\u002Findex",[288],{"title":284,"path":285,"stem":286,"icon":50},{"title":290,"path":291,"stem":292,"children":293,"icon":295},"Receive platform events at your own endpoint","\u002Fdocs\u002Fguides\u002Fintegrations\u002Freceive-platform-events","docs\u002Fguides\u002Fintegrations\u002Freceive-platform-events\u002Findex",[294],{"title":290,"path":291,"stem":292,"icon":295},"i-lucide-webhook",{"title":297,"path":298,"stem":299,"children":300,"icon":302},"Recover abandoned carts with a workflow","\u002Fdocs\u002Fguides\u002Fintegrations\u002Frecover-abandoned-carts","docs\u002Fguides\u002Fintegrations\u002Frecover-abandoned-carts\u002Findex",[301],{"title":297,"path":298,"stem":299,"icon":302},"i-lucide-mail-check",{"title":304,"path":305,"stem":306,"children":307,"icon":309},"Send low-stock alerts to the ERP","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fsend-low-stock-alerts-to-the-erp","docs\u002Fguides\u002Fintegrations\u002Fsend-low-stock-alerts-to-the-erp\u002Findex",[308],{"title":304,"path":305,"stem":306,"icon":309},"i-lucide-bell-ring",{"title":311,"path":312,"stem":313,"children":314,"icon":316},"Operate & go live","\u002Fdocs\u002Fguides\u002Foperate","docs\u002Fguides\u002Foperate\u002Findex",[315,317,323,330,337,344,351,357],{"title":311,"path":312,"stem":313,"icon":316},"i-lucide-activity",{"title":318,"path":319,"stem":320,"children":321,"icon":81},"Answer a customer's security questionnaire","\u002Fdocs\u002Fguides\u002Foperate\u002Fanswer-a-security-questionnaire","docs\u002Fguides\u002Foperate\u002Fanswer-a-security-questionnaire\u002Findex",[322],{"title":318,"path":319,"stem":320,"icon":81},{"title":324,"path":325,"stem":326,"children":327,"icon":329},"Debug a failed request","\u002Fdocs\u002Fguides\u002Foperate\u002Fdebug-a-failed-request","docs\u002Fguides\u002Foperate\u002Fdebug-a-failed-request\u002Findex",[328],{"title":324,"path":325,"stem":326,"icon":329},"i-lucide-bug",{"title":331,"path":332,"stem":333,"children":334,"icon":336},"Go live with a project","\u002Fdocs\u002Fguides\u002Foperate\u002Fgo-live-checklist","docs\u002Fguides\u002Foperate\u002Fgo-live-checklist\u002Findex",[335],{"title":331,"path":332,"stem":333,"icon":336},"i-lucide-list-checks",{"title":338,"path":339,"stem":340,"children":341,"icon":343},"Migrate from an existing shop","\u002Fdocs\u002Fguides\u002Foperate\u002Fmigrate-from-an-existing-shop","docs\u002Fguides\u002Foperate\u002Fmigrate-from-an-existing-shop\u002Findex",[342],{"title":338,"path":339,"stem":340,"icon":343},"i-lucide-route",{"title":345,"path":346,"stem":347,"children":348,"icon":350},"Size a launch","\u002Fdocs\u002Fguides\u002Foperate\u002Fplan-for-limits","docs\u002Fguides\u002Foperate\u002Fplan-for-limits\u002Findex",[349],{"title":345,"path":346,"stem":347,"icon":350},"i-lucide-gauge",{"title":352,"path":353,"stem":354,"children":355,"icon":336},"Script a bulk change","\u002Fdocs\u002Fguides\u002Foperate\u002Fscript-a-bulk-change","docs\u002Fguides\u002Foperate\u002Fscript-a-bulk-change\u002Findex",[356],{"title":352,"path":353,"stem":354,"icon":336},{"title":358,"path":359,"stem":360,"children":361,"icon":363},"Stay current","\u002Fdocs\u002Fguides\u002Foperate\u002Fstay-current","docs\u002Fguides\u002Foperate\u002Fstay-current\u002Findex",[362],{"title":358,"path":359,"stem":360,"icon":363},"i-lucide-refresh-cw",{"title":365,"path":366,"stem":367,"children":368,"icon":370},"Plan before you build","\u002Fdocs\u002Fguides\u002Fplan","docs\u002Fguides\u002Fplan\u002Findex",[369,371,378,385],{"title":365,"path":366,"stem":367,"icon":370},"i-lucide-map",{"title":372,"path":373,"stem":374,"children":375,"icon":377},"Choose a system of record","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-a-system-of-record","docs\u002Fguides\u002Fplan\u002Fchoose-a-system-of-record\u002Findex",[376],{"title":372,"path":373,"stem":374,"icon":377},"i-lucide-network",{"title":379,"path":380,"stem":381,"children":382,"icon":384},"Choose an event surface","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-an-event-surface","docs\u002Fguides\u002Fplan\u002Fchoose-an-event-surface\u002Findex",[383],{"title":379,"path":380,"stem":381,"icon":384},"i-lucide-signpost",{"title":386,"path":387,"stem":388,"children":389,"icon":343},"Choose where the logic goes","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-where-the-logic-goes","docs\u002Fguides\u002Fplan\u002Fchoose-where-the-logic-goes\u002Findex",[390],{"title":386,"path":387,"stem":388,"icon":343},{"title":392,"path":393,"stem":394,"children":395,"icon":397},"Build a storefront","\u002Fdocs\u002Fguides\u002Fstorefronts","docs\u002Fguides\u002Fstorefronts\u002Findex",[396,398,405,412,419,426,432,439],{"title":392,"path":393,"stem":394,"icon":397},"i-lucide-paintbrush",{"title":399,"path":400,"stem":401,"children":402,"icon":404},"Brand a Theme with design tokens","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbrand-with-tokens","docs\u002Fguides\u002Fstorefronts\u002Fbrand-with-tokens\u002Findex",[403],{"title":399,"path":400,"stem":401,"icon":404},"i-lucide-palette",{"title":406,"path":407,"stem":408,"children":409,"icon":411},"Build a block","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbuild-a-block","docs\u002Fguides\u002Fstorefronts\u002Fbuild-a-block\u002Findex",[410],{"title":406,"path":407,"stem":408,"icon":411},"i-lucide-blocks",{"title":413,"path":414,"stem":415,"children":416,"icon":418},"Build your first Theme","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbuild-your-first-theme","docs\u002Fguides\u002Fstorefronts\u002Fbuild-your-first-theme\u002Findex",[417],{"title":413,"path":414,"stem":415,"icon":418},"i-lucide-layout-template",{"title":420,"path":421,"stem":422,"children":423,"icon":425},"Connect your own frontend","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fconnect-a-frontend","docs\u002Fguides\u002Fstorefronts\u002Fconnect-a-frontend\u002Findex",[424],{"title":420,"path":421,"stem":422,"icon":425},"i-lucide-plug-zap",{"title":427,"path":428,"stem":429,"children":430,"icon":363},"Refresh price caches when a price list changes","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Frefresh-price-caches","docs\u002Fguides\u002Fstorefronts\u002Frefresh-price-caches\u002Findex",[431],{"title":427,"path":428,"stem":429,"icon":363},{"title":433,"path":434,"stem":435,"children":436,"icon":438},"Reorder and quick order","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Freorder-and-quick-order","docs\u002Fguides\u002Fstorefronts\u002Freorder-and-quick-order\u002Findex",[437],{"title":433,"path":434,"stem":435,"icon":438},"i-lucide-repeat",{"title":440,"path":441,"stem":442,"children":443,"icon":445},"Sign a buyer in from your server","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fsign-a-buyer-in","docs\u002Fguides\u002Fstorefronts\u002Fsign-a-buyer-in\u002Findex",[444],{"title":440,"path":441,"stem":442,"icon":445},"i-lucide-log-in",{"title":447,"path":448,"stem":449,"children":450},"SDKs","\u002Fdocs\u002Fsdks","docs\u002Fsdks\u002Findex",[451,452,458,464,470,476,482,488,494],{"title":447,"path":448,"stem":449},{"title":453,"path":454,"stem":455,"children":456},"App SDK","\u002Fdocs\u002Fsdks\u002Fapp-sdk","docs\u002Fsdks\u002Fapp-sdk\u002Findex",[457],{"title":453,"path":454,"stem":455},{"title":459,"path":460,"stem":461,"children":462},"CLI","\u002Fdocs\u002Fsdks\u002Fcli","docs\u002Fsdks\u002Fcli\u002Findex",[463],{"title":459,"path":460,"stem":461},{"title":465,"path":466,"stem":467,"children":468},"Design systems","\u002Fdocs\u002Fsdks\u002Fdesign-systems","docs\u002Fsdks\u002Fdesign-systems\u002Findex",[469],{"title":465,"path":466,"stem":467},{"title":471,"path":472,"stem":473,"children":474},"Integration Node SDK","\u002Fdocs\u002Fsdks\u002Fintegration-nodes","docs\u002Fsdks\u002Fintegration-nodes\u002Findex",[475],{"title":471,"path":472,"stem":473},{"title":477,"path":478,"stem":479,"children":480},"Node SDK","\u002Fdocs\u002Fsdks\u002Fnode","docs\u002Fsdks\u002Fnode\u002Findex",[481],{"title":477,"path":478,"stem":479},{"title":483,"path":484,"stem":485,"children":486},"PHP SDK","\u002Fdocs\u002Fsdks\u002Fphp","docs\u002Fsdks\u002Fphp\u002Findex",[487],{"title":483,"path":484,"stem":485},{"title":489,"path":490,"stem":491,"children":492,"icon":150},"Versioning","\u002Fdocs\u002Fsdks\u002Fversioning","docs\u002Fsdks\u002Fversioning\u002Findex",[493],{"title":489,"path":490,"stem":491,"icon":150},{"title":495,"path":496,"stem":497,"children":498},"Web \u002F JavaScript SDK","\u002Fdocs\u002Fsdks\u002Fweb","docs\u002Fsdks\u002Fweb\u002Findex",[499],{"title":495,"path":496,"stem":497},{"title":501,"path":502,"stem":503,"children":504},"Services","\u002Fdocs\u002Fservices","docs\u002Fservices\u002Findex",[505,506,542,549,579,585,609,616,670,718],{"title":501,"path":502,"stem":503},{"title":507,"path":508,"stem":509,"children":510},"API usage","\u002Fdocs\u002Fservices\u002Fapi-usage","docs\u002Fservices\u002Fapi-usage\u002Findex",[511,512,518,524,530,536],{"title":507,"path":508,"stem":509},{"title":513,"path":514,"stem":515,"children":516},"Errors","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Ferrors","docs\u002Fservices\u002Fapi-usage\u002Ferrors\u002Findex",[517],{"title":513,"path":514,"stem":515},{"title":519,"path":520,"stem":521,"children":522},"Retries & idempotency","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fidempotency","docs\u002Fservices\u002Fapi-usage\u002Fidempotency\u002Findex",[523],{"title":519,"path":520,"stem":521},{"title":525,"path":526,"stem":527,"children":528},"Pagination & filtering","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fpagination","docs\u002Fservices\u002Fapi-usage\u002Fpagination\u002Findex",[529],{"title":525,"path":526,"stem":527},{"title":531,"path":532,"stem":533,"children":534},"Rate limits","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Frate-limits","docs\u002Fservices\u002Fapi-usage\u002Frate-limits\u002Findex",[535],{"title":531,"path":532,"stem":533},{"title":537,"path":538,"stem":539,"children":540},"Versioning & stability","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fversioning","docs\u002Fservices\u002Fapi-usage\u002Fversioning\u002Findex",[541],{"title":537,"path":538,"stem":539},{"title":543,"path":544,"stem":545,"children":546,"icon":548},"Record history","\u002Fdocs\u002Fservices\u002Faudit","docs\u002Fservices\u002Faudit\u002Findex",[547],{"title":543,"path":544,"stem":545,"icon":548},"i-lucide-history",{"title":550,"path":551,"stem":552,"children":553},"Authentication","\u002Fdocs\u002Fservices\u002Fauth","docs\u002Fservices\u002Fauth\u002Findex",[554,555,561,567,573],{"title":550,"path":551,"stem":552},{"title":556,"path":557,"stem":558,"children":559},"API keys","\u002Fdocs\u002Fservices\u002Fauth\u002Fapi-keys","docs\u002Fservices\u002Fauth\u002Fapi-keys\u002Findex",[560],{"title":556,"path":557,"stem":558},{"title":562,"path":563,"stem":564,"children":565},"Multi-factor authentication","\u002Fdocs\u002Fservices\u002Fauth\u002Fmfa","docs\u002Fservices\u002Fauth\u002Fmfa\u002Findex",[566],{"title":562,"path":563,"stem":564},{"title":568,"path":569,"stem":570,"children":571},"Social sign-in","\u002Fdocs\u002Fservices\u002Fauth\u002Foauth2","docs\u002Fservices\u002Fauth\u002Foauth2\u002Findex",[572],{"title":568,"path":569,"stem":570},{"title":574,"path":575,"stem":576,"children":577},"Sessions","\u002Fdocs\u002Fservices\u002Fauth\u002Fsessions","docs\u002Fservices\u002Fauth\u002Fsessions\u002Findex",[578],{"title":574,"path":575,"stem":576},{"title":580,"path":581,"stem":582,"children":583},"Avatars","\u002Fdocs\u002Fservices\u002Favatars","docs\u002Fservices\u002Favatars\u002Findex",[584],{"title":580,"path":581,"stem":582},{"title":586,"path":587,"stem":588,"children":589},"Events","\u002Fdocs\u002Fservices\u002Fevents","docs\u002Fservices\u002Fevents\u002Findex",[590,591,597,603],{"title":586,"path":587,"stem":588},{"title":592,"path":593,"stem":594,"children":595},"Consuming events","\u002Fdocs\u002Fservices\u002Fevents\u002Fconsuming-events","docs\u002Fservices\u002Fevents\u002Fconsuming-events\u002Findex",[596],{"title":592,"path":593,"stem":594},{"title":598,"path":599,"stem":600,"children":601},"Event catalog","\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-catalog","docs\u002Fservices\u002Fevents\u002Fevent-catalog\u002Findex",[602],{"title":598,"path":599,"stem":600},{"title":604,"path":605,"stem":606,"children":607},"Event types","\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-types","docs\u002Fservices\u002Fevents\u002Fevent-types\u002Findex",[608],{"title":604,"path":605,"stem":606},{"title":610,"path":611,"stem":612,"children":613,"icon":615},"Locale","\u002Fdocs\u002Fservices\u002Flocale","docs\u002Fservices\u002Flocale\u002Findex",[614],{"title":610,"path":611,"stem":612,"icon":615},"i-lucide-globe",{"title":617,"path":618,"stem":619,"children":620},"Network","\u002Fdocs\u002Fservices\u002Fnetwork","docs\u002Fservices\u002Fnetwork\u002Findex",[621,622,628,634,640,646,652,658,664],{"title":617,"path":618,"stem":619},{"title":623,"path":624,"stem":625,"children":626},"Caching","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcaching","docs\u002Fservices\u002Fnetwork\u002Fcaching\u002Findex",[627],{"title":623,"path":624,"stem":625},{"title":629,"path":630,"stem":631,"children":632},"Content delivery (CDN)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcdn","docs\u002Fservices\u002Fnetwork\u002Fcdn\u002Findex",[633],{"title":629,"path":630,"stem":631},{"title":635,"path":636,"stem":637,"children":638},"Compression","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcompression","docs\u002Fservices\u002Fnetwork\u002Fcompression\u002Findex",[639],{"title":635,"path":636,"stem":637},{"title":641,"path":642,"stem":643,"children":644},"DDoS mitigation","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fddos","docs\u002Fservices\u002Fnetwork\u002Fddos\u002Findex",[645],{"title":641,"path":642,"stem":643},{"title":647,"path":648,"stem":649,"children":650},"Edge network","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fedges","docs\u002Fservices\u002Fnetwork\u002Fedges\u002Findex",[651],{"title":647,"path":648,"stem":649},{"title":653,"path":654,"stem":655,"children":656},"Endpoints","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fendpoints","docs\u002Fservices\u002Fnetwork\u002Fendpoints\u002Findex",[657],{"title":653,"path":654,"stem":655},{"title":659,"path":660,"stem":661,"children":662},"Transport Layer Security (TLS)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Ftls","docs\u002Fservices\u002Fnetwork\u002Ftls\u002Findex",[663],{"title":659,"path":660,"stem":661},{"title":665,"path":666,"stem":667,"children":668},"Web application firewall (WAF)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fwaf","docs\u002Fservices\u002Fnetwork\u002Fwaf\u002Findex",[669],{"title":665,"path":666,"stem":667},{"title":671,"path":672,"stem":673,"children":674},"Storage","\u002Fdocs\u002Fservices\u002Fstorage","docs\u002Fservices\u002Fstorage\u002Findex",[675,676,682,688,694,700,706,712],{"title":671,"path":672,"stem":673},{"title":677,"path":678,"stem":679,"children":680},"Folders","\u002Fdocs\u002Fservices\u002Fstorage\u002Fbuckets","docs\u002Fservices\u002Fstorage\u002Fbuckets\u002Findex",[681],{"title":677,"path":678,"stem":679},{"title":683,"path":684,"stem":685,"children":686},"Signed URLs and access","\u002Fdocs\u002Fservices\u002Fstorage\u002Ffile-tokens","docs\u002Fservices\u002Fstorage\u002Ffile-tokens\u002Findex",[687],{"title":683,"path":684,"stem":685},{"title":689,"path":690,"stem":691,"children":692},"Serve and transform images","\u002Fdocs\u002Fservices\u002Fstorage\u002Fimages","docs\u002Fservices\u002Fstorage\u002Fimages\u002Findex",[693],{"title":689,"path":690,"stem":691},{"title":695,"path":696,"stem":697,"children":698},"3D assets","\u002Fdocs\u002Fservices\u002Fstorage\u002Fmodel-viewer","docs\u002Fservices\u002Fstorage\u002Fmodel-viewer\u002Findex",[699],{"title":695,"path":696,"stem":697},{"title":701,"path":702,"stem":703,"children":704},"Access control and visibility","\u002Fdocs\u002Fservices\u002Fstorage\u002Fpermissions","docs\u002Fservices\u002Fstorage\u002Fpermissions\u002Findex",[705],{"title":701,"path":702,"stem":703},{"title":707,"path":708,"stem":709,"children":710},"Quick start","\u002Fdocs\u002Fservices\u002Fstorage\u002Fquick-start","docs\u002Fservices\u002Fstorage\u002Fquick-start\u002Findex",[711],{"title":707,"path":708,"stem":709},{"title":713,"path":714,"stem":715,"children":716},"Upload and manage files","\u002Fdocs\u002Fservices\u002Fstorage\u002Fupload-download","docs\u002Fservices\u002Fstorage\u002Fupload-download\u002Findex",[717],{"title":713,"path":714,"stem":715},{"title":719,"path":720,"stem":721,"children":722},"Webhooks","\u002Fdocs\u002Fservices\u002Fwebhooks","docs\u002Fservices\u002Fwebhooks\u002Findex",[723,724,730],{"title":719,"path":720,"stem":721},{"title":725,"path":726,"stem":727,"children":728},"Delivery","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fdelivery","docs\u002Fservices\u002Fwebhooks\u002Fdelivery\u002Findex",[729],{"title":725,"path":726,"stem":727},{"title":731,"path":732,"stem":733,"children":734},"Security","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fsecurity","docs\u002Fservices\u002Fwebhooks\u002Fsecurity\u002Findex",[735],{"title":731,"path":732,"stem":733},{"title":737,"path":738,"stem":739,"children":740},"Studios","\u002Fdocs\u002Fstudios","docs\u002Fstudios\u002Findex",[741,742,748,913,1264,1583,1765],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745,"children":746},"AI Studio","\u002Fdocs\u002Fstudios\u002Fai","docs\u002Fstudios\u002Fai\u002Findex",[747],{"title":743,"path":744,"stem":745},{"title":749,"path":750,"stem":751,"children":752,"icon":754},"Analytics Studio","\u002Fdocs\u002Fstudios\u002Fanalytics","docs\u002Fstudios\u002Fanalytics\u002Findex",[753,755,798,835,841,859,889],{"title":749,"path":750,"stem":751,"icon":754},"i-lucide-chart-column",{"title":756,"path":757,"stem":758,"children":759,"icon":761},"Make your app's data analyzable","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Findex",[760,762,768,774,780,786,792],{"title":756,"path":757,"stem":758,"icon":761},"i-lucide-table-2",{"title":763,"path":764,"stem":765,"children":766},"Column locators","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators\u002Findex",[767],{"title":763,"path":764,"stem":765},{"title":769,"path":770,"stem":771,"children":772},"Declaring a view","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view\u002Findex",[773],{"title":769,"path":770,"stem":771},{"title":775,"path":776,"stem":777,"children":778},"Example","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample\u002Findex",[779],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783,"children":784},"Semantic roles","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles\u002Findex",[785],{"title":781,"path":782,"stem":783},{"title":787,"path":788,"stem":789,"children":790},"Tenant isolation","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation\u002Findex",[791],{"title":787,"path":788,"stem":789},{"title":793,"path":794,"stem":795,"children":796},"The contract","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract\u002Findex",[797],{"title":793,"path":794,"stem":795},{"title":799,"path":800,"stem":801,"children":802,"icon":804},"Stream commerce activity","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Findex",[803,805,811,817,823,829],{"title":799,"path":800,"stem":801,"icon":804},"i-lucide-radio",{"title":806,"path":807,"stem":808,"children":809},"Delivery guarantees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees\u002Findex",[810],{"title":806,"path":807,"stem":808},{"title":812,"path":813,"stem":814,"children":815},"Event types for reporting","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting\u002Findex",[816],{"title":812,"path":813,"stem":814},{"title":818,"path":819,"stem":820,"children":821},"Register an endpoint","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint\u002Findex",[822],{"title":818,"path":819,"stem":820},{"title":824,"path":825,"stem":826,"children":827},"The event stream","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream\u002Findex",[828],{"title":824,"path":825,"stem":826},{"title":830,"path":831,"stem":832,"children":833},"Verify a delivery","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery\u002Findex",[834],{"title":830,"path":831,"stem":832},{"title":836,"path":837,"stem":838,"children":839,"icon":29},"Getting data out","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out","docs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out\u002Findex",[840],{"title":836,"path":837,"stem":838,"icon":29},{"title":842,"path":843,"stem":844,"children":845,"icon":336},"Limits and what's next","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Findex",[846,847,853],{"title":842,"path":843,"stem":844,"icon":336},{"title":848,"path":849,"stem":850,"children":851},"Designing for what's coming","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming\u002Findex",[852],{"title":848,"path":849,"stem":850},{"title":854,"path":855,"stem":856,"children":857},"What does not exist yet","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet\u002Findex",[858],{"title":854,"path":855,"stem":856},{"title":860,"path":861,"stem":862,"children":863,"icon":108},"Build your own reporting store","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Findex",[864,865,871,877,883],{"title":860,"path":861,"stem":862,"icon":108},{"title":866,"path":867,"stem":868,"children":869},"Backfill","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill\u002Findex",[870],{"title":866,"path":867,"stem":868},{"title":872,"path":873,"stem":874,"children":875},"Incremental sync","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync\u002Findex",[876],{"title":872,"path":873,"stem":874},{"title":878,"path":879,"stem":880,"children":881},"Modelling","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling\u002Findex",[882],{"title":878,"path":879,"stem":880},{"title":884,"path":885,"stem":886,"children":887},"Pull versus push","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push\u002Findex",[888],{"title":884,"path":885,"stem":886},{"title":890,"path":891,"stem":892,"children":893,"icon":754},"What the tenant sees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Findex",[894,895,901,907],{"title":890,"path":891,"stem":892,"icon":754},{"title":896,"path":897,"stem":898,"children":899},"Cohorts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts\u002Findex",[900],{"title":896,"path":897,"stem":898},{"title":902,"path":903,"stem":904,"children":905},"Datasets and charts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts\u002Findex",[906],{"title":902,"path":903,"stem":904},{"title":908,"path":909,"stem":910,"children":911},"Studio overview","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview\u002Findex",[912],{"title":908,"path":909,"stem":910},{"title":914,"path":915,"stem":916,"children":917},"App Studio","\u002Fdocs\u002Fstudios\u002Fapps","docs\u002Fstudios\u002Fapps\u002Findex",[918,919,955,1025,1096,1114,1180],{"title":914,"path":915,"stem":916},{"title":920,"path":921,"stem":922,"children":923,"icon":101},"Admin UI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Findex",[924,925,931,937,943,949],{"title":920,"path":921,"stem":922,"icon":101},{"title":926,"path":927,"stem":928,"children":929},"How the Cockpit renders","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders\u002Findex",[930],{"title":926,"path":927,"stem":928},{"title":932,"path":933,"stem":934,"children":935},"Preview locally","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally\u002Findex",[936],{"title":932,"path":933,"stem":934},{"title":938,"path":939,"stem":940,"children":941},"Reading settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings\u002Findex",[942],{"title":938,"path":939,"stem":940},{"title":944,"path":945,"stem":946,"children":947},"Settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings\u002Findex",[948],{"title":944,"path":945,"stem":946},{"title":950,"path":951,"stem":952,"children":953},"Vocabularies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies\u002Findex",[954],{"title":950,"path":951,"stem":952},{"title":956,"path":957,"stem":958,"children":959,"icon":343},"Your app's API","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Findex",[960,961,966,972,978,984,990,995,1001,1007,1013,1019],{"title":956,"path":957,"stem":958,"icon":343},{"title":623,"path":962,"stem":963,"children":964},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching\u002Findex",[965],{"title":623,"path":962,"stem":963},{"title":967,"path":968,"stem":969,"children":970},"Calling another app","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app\u002Findex",[971],{"title":967,"path":968,"stem":969},{"title":973,"path":974,"stem":975,"children":976},"Capabilities","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities\u002Findex",[977],{"title":973,"path":974,"stem":975},{"title":979,"path":980,"stem":981,"children":982},"Capability reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference\u002Findex",[983],{"title":979,"path":980,"stem":981},{"title":985,"path":986,"stem":987,"children":988},"CRUD","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud\u002Findex",[989],{"title":985,"path":986,"stem":987},{"title":513,"path":991,"stem":992,"children":993},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors\u002Findex",[994],{"title":513,"path":991,"stem":992},{"title":996,"path":997,"stem":998,"children":999},"Overriding a capability","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability","docs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability\u002Findex",[1000],{"title":996,"path":997,"stem":998},{"title":1002,"path":1003,"stem":1004,"children":1005},"Pagination and filtering","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering\u002Findex",[1006],{"title":1002,"path":1003,"stem":1004},{"title":1008,"path":1009,"stem":1010,"children":1011},"Published OpenAPI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi\u002Findex",[1012],{"title":1008,"path":1009,"stem":1010},{"title":1014,"path":1015,"stem":1016,"children":1017},"The router","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter","docs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter\u002Findex",[1018],{"title":1014,"path":1015,"stem":1016},{"title":1020,"path":1021,"stem":1022,"children":1023},"Tags","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags\u002Findex",[1024],{"title":1020,"path":1021,"stem":1022},{"title":1026,"path":1027,"stem":1028,"children":1029,"icon":108},"Data model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Findex",[1030,1031,1037,1043,1049,1055,1061,1067,1073,1079,1085,1090],{"title":1026,"path":1027,"stem":1028,"icon":108},{"title":1032,"path":1033,"stem":1034,"children":1035},"Adapters","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters\u002Findex",[1036],{"title":1032,"path":1033,"stem":1034},{"title":1038,"path":1039,"stem":1040,"children":1041},"Column types","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types\u002Findex",[1042],{"title":1038,"path":1039,"stem":1040},{"title":1044,"path":1045,"stem":1046,"children":1047},"Cross-app lookups","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups\u002Findex",[1048],{"title":1044,"path":1045,"stem":1046},{"title":1050,"path":1051,"stem":1052,"children":1053},"Migrations","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations\u002Findex",[1054],{"title":1050,"path":1051,"stem":1052},{"title":1056,"path":1057,"stem":1058,"children":1059},"Projections","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections\u002Findex",[1060],{"title":1056,"path":1057,"stem":1058},{"title":1062,"path":1063,"stem":1064,"children":1065},"Relationships","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships\u002Findex",[1066],{"title":1062,"path":1063,"stem":1064},{"title":1068,"path":1069,"stem":1070,"children":1071},"Schema reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference\u002Findex",[1072],{"title":1068,"path":1069,"stem":1070},{"title":1074,"path":1075,"stem":1076,"children":1077},"Scoping","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping\u002Findex",[1078],{"title":1074,"path":1075,"stem":1076},{"title":1080,"path":1081,"stem":1082,"children":1083},"search.json reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fsearch-json","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fsearch-json\u002Findex",[1084],{"title":1080,"path":1081,"stem":1082},{"title":787,"path":1086,"stem":1087,"children":1088},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation\u002Findex",[1089],{"title":787,"path":1086,"stem":1087},{"title":1091,"path":1092,"stem":1093,"children":1094},"The typed client","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client\u002Findex",[1095],{"title":1091,"path":1092,"stem":1093},{"title":1097,"path":1098,"stem":1099,"children":1100},"Getting started","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Findex",[1101,1102,1108],{"title":1097,"path":1098,"stem":1099},{"title":1103,"path":1104,"stem":1105,"children":1106},"App model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model\u002Findex",[1107],{"title":1103,"path":1104,"stem":1105},{"title":1109,"path":1110,"stem":1111,"children":1112},"App isolation","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation\u002Findex",[1113],{"title":1109,"path":1110,"stem":1111},{"title":1115,"path":1116,"stem":1117,"children":1118,"icon":185},"Platform services","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Findex",[1119,1120,1126,1132,1138,1144,1150,1156,1162,1168,1174],{"title":1115,"path":1116,"stem":1117,"icon":185},{"title":1121,"path":1122,"stem":1123,"children":1124},"Entity access","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access\u002Findex",[1125],{"title":1121,"path":1122,"stem":1123},{"title":1127,"path":1128,"stem":1129,"children":1130},"Events you emit","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit\u002Findex",[1131],{"title":1127,"path":1128,"stem":1129},{"title":1133,"path":1134,"stem":1135,"children":1136},"Events you receive","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive\u002Findex",[1137],{"title":1133,"path":1134,"stem":1135},{"title":1139,"path":1140,"stem":1141,"children":1142},"Not yet proven","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven\u002Findex",[1143],{"title":1139,"path":1140,"stem":1141},{"title":1145,"path":1146,"stem":1147,"children":1148},"Outbound HTTP","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http\u002Findex",[1149],{"title":1145,"path":1146,"stem":1147},{"title":1151,"path":1152,"stem":1153,"children":1154},"Permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions\u002Findex",[1155],{"title":1151,"path":1152,"stem":1153},{"title":1157,"path":1158,"stem":1159,"children":1160},"Person permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions\u002Findex",[1161],{"title":1157,"path":1158,"stem":1159},{"title":1163,"path":1164,"stem":1165,"children":1166},"Scheduled work","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work\u002Findex",[1167],{"title":1163,"path":1164,"stem":1165},{"title":1169,"path":1170,"stem":1171,"children":1172},"Tenant identity","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity\u002Findex",[1173],{"title":1169,"path":1170,"stem":1171},{"title":1175,"path":1176,"stem":1177,"children":1178},"Tracing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing\u002Findex",[1179],{"title":1175,"path":1176,"stem":1177},{"title":1181,"path":1182,"stem":1183,"children":1184,"icon":1186},"Ship and operate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Findex",[1185,1187,1193,1199,1205,1211,1217,1223,1229,1235,1241,1247,1253,1259],{"title":1181,"path":1182,"stem":1183,"icon":1186},"i-lucide-rocket",{"title":1188,"path":1189,"stem":1190,"children":1191},"Billing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling\u002Findex",[1192],{"title":1188,"path":1189,"stem":1190},{"title":1194,"path":1195,"stem":1196,"children":1197},"Consent","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent\u002Findex",[1198],{"title":1194,"path":1195,"stem":1196},{"title":1200,"path":1201,"stem":1202,"children":1203},"Dependencies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies\u002Findex",[1204],{"title":1200,"path":1201,"stem":1202},{"title":1206,"path":1207,"stem":1208,"children":1209},"Deploying","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying\u002Findex",[1210],{"title":1206,"path":1207,"stem":1208},{"title":1212,"path":1213,"stem":1214,"children":1215},"Manifest reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference\u002Findex",[1216],{"title":1212,"path":1213,"stem":1214},{"title":1218,"path":1219,"stem":1220,"children":1221},"Operating","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating\u002Findex",[1222],{"title":1218,"path":1219,"stem":1220},{"title":1224,"path":1225,"stem":1226,"children":1227},"Pairing a frontend","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend\u002Findex",[1228],{"title":1224,"path":1225,"stem":1226},{"title":1230,"path":1231,"stem":1232,"children":1233},"Private or Marketplace","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace\u002Findex",[1234],{"title":1230,"path":1231,"stem":1232},{"title":1236,"path":1237,"stem":1238,"children":1239},"Publish and install","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install\u002Findex",[1240],{"title":1236,"path":1237,"stem":1238},{"title":1242,"path":1243,"stem":1244,"children":1245},"Testing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting\u002Findex",[1246],{"title":1242,"path":1243,"stem":1244},{"title":1248,"path":1249,"stem":1250,"children":1251},"Validate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate\u002Findex",[1252],{"title":1248,"path":1249,"stem":1250},{"title":1254,"path":1255,"stem":1256,"children":1257},"Verifying live","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live\u002Findex",[1258],{"title":1254,"path":1255,"stem":1256},{"title":489,"path":1260,"stem":1261,"children":1262},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning\u002Findex",[1263],{"title":489,"path":1260,"stem":1261},{"title":1265,"path":1266,"stem":1267,"children":1268,"icon":1270},"Commerce Studio","\u002Fdocs\u002Fstudios\u002Fcommerce","docs\u002Fstudios\u002Fcommerce\u002Findex",[1269,1271,1343,1403,1452,1457,1510,1564],{"title":1265,"path":1266,"stem":1267,"icon":1270},"i-lucide-shopping-bag",{"title":1272,"path":1273,"stem":1274,"children":1275,"icon":1277},"Build an app","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Findex",[1276,1278,1284,1290,1296,1302,1308,1314,1320,1326,1332,1337],{"title":1272,"path":1273,"stem":1274,"icon":1277},"i-lucide-puzzle",{"title":1279,"path":1280,"stem":1281,"children":1282},"Actions and writes","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes\u002Findex",[1283],{"title":1279,"path":1280,"stem":1281},{"title":1285,"path":1286,"stem":1287,"children":1288},"cockpit.json reference","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference\u002Findex",[1289],{"title":1285,"path":1286,"stem":1287},{"title":1291,"path":1292,"stem":1293,"children":1294},"Detail views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views\u002Findex",[1295],{"title":1291,"path":1292,"stem":1293},{"title":1297,"path":1298,"stem":1299,"children":1300},"Forms","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms\u002Findex",[1301],{"title":1297,"path":1298,"stem":1299},{"title":1303,"path":1304,"stem":1305,"children":1306},"From manifest to installed","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed\u002Findex",[1307],{"title":1303,"path":1304,"stem":1305},{"title":1309,"path":1310,"stem":1311,"children":1312},"How it renders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders\u002Findex",[1313],{"title":1309,"path":1310,"stem":1311},{"title":1315,"path":1316,"stem":1317,"children":1318},"List views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views\u002Findex",[1319],{"title":1315,"path":1316,"stem":1317},{"title":1321,"path":1322,"stem":1323,"children":1324},"Navigation","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation\u002Findex",[1325],{"title":1321,"path":1322,"stem":1323},{"title":1327,"path":1328,"stem":1329,"children":1330},"Permissions and scope","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope\u002Findex",[1331],{"title":1327,"path":1328,"stem":1329},{"title":932,"path":1333,"stem":1334,"children":1335},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally\u002Findex",[1336],{"title":932,"path":1333,"stem":1334},{"title":1338,"path":1339,"stem":1340,"children":1341},"Widgets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets\u002Findex",[1342],{"title":1338,"path":1339,"stem":1340},{"title":1344,"path":1345,"stem":1346,"children":1347,"icon":1349},"Catalog","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Findex",[1348,1350,1356,1362,1368,1374,1379,1385,1391,1397],{"title":1344,"path":1345,"stem":1346,"icon":1349},"i-lucide-package",{"title":1351,"path":1352,"stem":1353,"children":1354},"Assets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets\u002Findex",[1355],{"title":1351,"path":1352,"stem":1353},{"title":1357,"path":1358,"stem":1359,"children":1360},"Associations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations\u002Findex",[1361],{"title":1357,"path":1358,"stem":1359},{"title":1363,"path":1364,"stem":1365,"children":1366},"Categories","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories\u002Findex",[1367],{"title":1363,"path":1364,"stem":1365},{"title":1369,"path":1370,"stem":1371,"children":1372},"Completeness","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness\u002Findex",[1373],{"title":1369,"path":1370,"stem":1371},{"title":1026,"path":1375,"stem":1376,"children":1377},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model\u002Findex",[1378],{"title":1026,"path":1375,"stem":1376},{"title":1380,"path":1381,"stem":1382,"children":1383},"Import and export","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export\u002Findex",[1384],{"title":1380,"path":1381,"stem":1382},{"title":1386,"path":1387,"stem":1388,"children":1389},"Languages and locale codes","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Flanguages-and-locale-codes","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Flanguages-and-locale-codes\u002Findex",[1390],{"title":1386,"path":1387,"stem":1388},{"title":1392,"path":1393,"stem":1394,"children":1395},"Products","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts\u002Findex",[1396],{"title":1392,"path":1393,"stem":1394},{"title":1398,"path":1399,"stem":1400,"children":1401},"References","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences\u002Findex",[1402],{"title":1398,"path":1399,"stem":1400},{"title":1404,"path":1405,"stem":1406,"children":1407,"icon":1409},"Customers","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Findex",[1408,1410,1416,1422,1428,1434,1440,1446],{"title":1404,"path":1405,"stem":1406,"icon":1409},"i-lucide-building-2",{"title":1411,"path":1412,"stem":1413,"children":1414},"Contacts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts\u002Findex",[1415],{"title":1411,"path":1412,"stem":1413},{"title":1417,"path":1418,"stem":1419,"children":1420},"Organizations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations\u002Findex",[1421],{"title":1417,"path":1418,"stem":1419},{"title":1423,"path":1424,"stem":1425,"children":1426},"Roles and permissions","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions\u002Findex",[1427],{"title":1423,"path":1424,"stem":1425},{"title":1429,"path":1430,"stem":1431,"children":1432},"Sales reps","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsales-reps","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsales-reps\u002Findex",[1433],{"title":1429,"path":1430,"stem":1431},{"title":1435,"path":1436,"stem":1437,"children":1438},"Segments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments\u002Findex",[1439],{"title":1435,"path":1436,"stem":1437},{"title":1441,"path":1442,"stem":1443,"children":1444},"Storefront accounts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts\u002Findex",[1445],{"title":1441,"path":1442,"stem":1443},{"title":1447,"path":1448,"stem":1449,"children":1450},"Value lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists\u002Findex",[1451],{"title":1447,"path":1448,"stem":1449},{"title":1097,"path":1453,"stem":1454,"children":1455,"icon":1186},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fgetting-started","docs\u002Fstudios\u002Fcommerce\u002Fgetting-started\u002Findex",[1456],{"title":1097,"path":1453,"stem":1454,"icon":1186},{"title":1458,"path":1459,"stem":1460,"children":1461,"icon":615},"Markets and pricing","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Findex",[1462,1463,1469,1475,1481,1487,1493,1499,1504],{"title":1458,"path":1459,"stem":1460,"icon":615},{"title":1464,"path":1465,"stem":1466,"children":1467},"Carriers and tracking","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking\u002Findex",[1468],{"title":1464,"path":1465,"stem":1466},{"title":1470,"path":1471,"stem":1472,"children":1473},"Channels","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels\u002Findex",[1474],{"title":1470,"path":1471,"stem":1472},{"title":1476,"path":1477,"stem":1478,"children":1479},"Markets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets\u002Findex",[1480],{"title":1476,"path":1477,"stem":1478},{"title":1482,"path":1483,"stem":1484,"children":1485},"Payment lifecycle","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle\u002Findex",[1486],{"title":1482,"path":1483,"stem":1484},{"title":1488,"path":1489,"stem":1490,"children":1491},"Payment methods","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods\u002Findex",[1492],{"title":1488,"path":1489,"stem":1490},{"title":1494,"path":1495,"stem":1496,"children":1497},"Price lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists\u002Findex",[1498],{"title":1494,"path":1495,"stem":1496},{"title":944,"path":1500,"stem":1501,"children":1502},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings\u002Findex",[1503],{"title":944,"path":1500,"stem":1501},{"title":1505,"path":1506,"stem":1507,"children":1508},"Shipping rates","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates\u002Findex",[1509],{"title":1505,"path":1506,"stem":1507},{"title":1511,"path":1512,"stem":1513,"children":1514,"icon":1516},"Orders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Findex",[1515,1517,1523,1529,1535,1541,1547,1552,1558],{"title":1511,"path":1512,"stem":1513,"icon":1516},"i-lucide-receipt-text",{"title":1518,"path":1519,"stem":1520,"children":1521},"Carts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts\u002Findex",[1522],{"title":1518,"path":1519,"stem":1520},{"title":1524,"path":1525,"stem":1526,"children":1527},"Documents","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fdocuments","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fdocuments\u002Findex",[1528],{"title":1524,"path":1525,"stem":1526},{"title":1530,"path":1531,"stem":1532,"children":1533},"Events and comments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments\u002Findex",[1534],{"title":1530,"path":1531,"stem":1532},{"title":1536,"path":1537,"stem":1538,"children":1539},"Number ranges","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges\u002Findex",[1540],{"title":1536,"path":1537,"stem":1538},{"title":1542,"path":1543,"stem":1544,"children":1545},"Order lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists\u002Findex",[1546],{"title":1542,"path":1543,"stem":1544},{"title":1511,"path":1548,"stem":1549,"children":1550},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders\u002Findex",[1551],{"title":1511,"path":1548,"stem":1549},{"title":1553,"path":1554,"stem":1555,"children":1556},"Returns","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns\u002Findex",[1557],{"title":1553,"path":1554,"stem":1555},{"title":1559,"path":1560,"stem":1561,"children":1562},"Stock","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock\u002Findex",[1563],{"title":1559,"path":1560,"stem":1561},{"title":1565,"path":1566,"stem":1567,"children":1568,"icon":1570},"Procurement","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Findex",[1569,1571,1577],{"title":1565,"path":1566,"stem":1567,"icon":1570},"i-lucide-clipboard-check",{"title":1572,"path":1573,"stem":1574,"children":1575},"Cost centers","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fcost-centers","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fcost-centers\u002Findex",[1576],{"title":1572,"path":1573,"stem":1574},{"title":1578,"path":1579,"stem":1580,"children":1581,"icon":29},"Punchout","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fpunchout","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fpunchout\u002Findex",[1582],{"title":1578,"path":1579,"stem":1580,"icon":29},{"title":1584,"path":1585,"stem":1586,"children":1587},"Integration Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio","docs\u002Fstudios\u002Fintegration-studio\u002Findex",[1588,1589,1626,1663,1693,1698,1728],{"title":1584,"path":1585,"stem":1586},{"title":1590,"path":1591,"stem":1592,"children":1593,"icon":1595},"Build the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Findex",[1594,1596,1602,1608,1614,1620],{"title":1590,"path":1591,"stem":1592,"icon":1595},"i-lucide-workflow",{"title":1597,"path":1598,"stem":1599,"children":1600},"Expressions","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions\u002Findex",[1601],{"title":1597,"path":1598,"stem":1599},{"title":1603,"path":1604,"stem":1605,"children":1606},"Node catalog","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog\u002Findex",[1607],{"title":1603,"path":1604,"stem":1605},{"title":1609,"path":1610,"stem":1611,"children":1612},"Node configuration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration\u002Findex",[1613],{"title":1609,"path":1610,"stem":1611},{"title":1615,"path":1616,"stem":1617,"children":1618},"Templates","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates\u002Findex",[1619],{"title":1615,"path":1616,"stem":1617},{"title":1621,"path":1622,"stem":1623,"children":1624},"The workflow document","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model\u002Findex",[1625],{"title":1621,"path":1622,"stem":1623},{"title":1627,"path":1628,"stem":1629,"children":1630,"icon":1632},"Connect the systems","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Findex",[1631,1633,1639,1645,1651,1657],{"title":1627,"path":1628,"stem":1629,"icon":1632},"i-lucide-key-round",{"title":1634,"path":1635,"stem":1636,"children":1637},"Credentials","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials\u002Findex",[1638],{"title":1634,"path":1635,"stem":1636},{"title":1640,"path":1641,"stem":1642,"children":1643},"File transfer","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles\u002Findex",[1644],{"title":1640,"path":1641,"stem":1642},{"title":1646,"path":1647,"stem":1648,"children":1649},"OAuth","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth\u002Findex",[1650],{"title":1646,"path":1647,"stem":1648},{"title":1652,"path":1653,"stem":1654,"children":1655},"Reaching Revenue Cloud","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud\u002Findex",[1656],{"title":1652,"path":1653,"stem":1654},{"title":1658,"path":1659,"stem":1660,"children":1661},"Secrets","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets\u002Findex",[1662],{"title":1658,"path":1659,"stem":1660},{"title":1664,"path":1665,"stem":1666,"children":1667,"icon":1349},"Extend the Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Findex",[1668,1669,1675,1681,1687],{"title":1664,"path":1665,"stem":1666,"icon":1349},{"title":1670,"path":1671,"stem":1672,"children":1673},"Custom nodes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes\u002Findex",[1674],{"title":1670,"path":1671,"stem":1672},{"title":1676,"path":1677,"stem":1678,"children":1679},"Dynamic behaviour","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour\u002Findex",[1680],{"title":1676,"path":1677,"stem":1678},{"title":1682,"path":1683,"stem":1684,"children":1685},"Package manifest","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest\u002Findex",[1686],{"title":1682,"path":1683,"stem":1684},{"title":1688,"path":1689,"stem":1690,"children":1691},"Registration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration\u002Findex",[1692],{"title":1688,"path":1689,"stem":1690},{"title":1097,"path":1694,"stem":1695,"children":1696,"icon":1186},"\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started","docs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started\u002Findex",[1697],{"title":1097,"path":1694,"stem":1695,"icon":1186},{"title":1699,"path":1700,"stem":1701,"children":1702,"icon":316},"Run, watch, recover","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Findex",[1703,1704,1710,1716,1722],{"title":1699,"path":1700,"stem":1701,"icon":316},{"title":1705,"path":1706,"stem":1707,"children":1708},"Missed runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters\u002Findex",[1709],{"title":1705,"path":1706,"stem":1707},{"title":1711,"path":1712,"stem":1713,"children":1714},"Failure handling","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling\u002Findex",[1715],{"title":1711,"path":1712,"stem":1713},{"title":1717,"path":1718,"stem":1719,"children":1720},"Revisions and audit","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit\u002Findex",[1721],{"title":1717,"path":1718,"stem":1719},{"title":1723,"path":1724,"stem":1725,"children":1726},"Runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns\u002Findex",[1727],{"title":1723,"path":1724,"stem":1725},{"title":1729,"path":1730,"stem":1731,"children":1732,"icon":1734},"Start the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Findex",[1733,1735,1741,1747,1753,1759],{"title":1729,"path":1730,"stem":1731,"icon":1734},"i-lucide-zap",{"title":1736,"path":1737,"stem":1738,"children":1739},"Event triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers\u002Findex",[1740],{"title":1736,"path":1737,"stem":1738},{"title":1742,"path":1743,"stem":1744,"children":1745},"Execution modes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes\u002Findex",[1746],{"title":1742,"path":1743,"stem":1744},{"title":1748,"path":1749,"stem":1750,"children":1751},"Schedule triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers\u002Findex",[1752],{"title":1748,"path":1749,"stem":1750},{"title":1754,"path":1755,"stem":1756,"children":1757},"Triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers\u002Findex",[1758],{"title":1754,"path":1755,"stem":1756},{"title":1760,"path":1761,"stem":1762,"children":1763},"Webhook triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers\u002Findex",[1764],{"title":1760,"path":1761,"stem":1762},{"title":1766,"path":1767,"stem":1768,"children":1769},"Experience Studio","\u002Fdocs\u002Fstudios\u002Fsites","docs\u002Fstudios\u002Fsites\u002Findex",[1770,1771,1819,1871,1997,2003,2045],{"title":1766,"path":1767,"stem":1768},{"title":1772,"path":1773,"stem":1774,"children":1775,"icon":418},"Compose pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Findex",[1776,1777,1783,1789,1795,1801,1807,1813],{"title":1772,"path":1773,"stem":1774,"icon":418},{"title":1778,"path":1779,"stem":1780,"children":1781},"Block catalog","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog\u002Findex",[1782],{"title":1778,"path":1779,"stem":1780},{"title":1784,"path":1785,"stem":1786,"children":1787},"Block options","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options\u002Findex",[1788],{"title":1784,"path":1785,"stem":1786},{"title":1790,"path":1791,"stem":1792,"children":1793},"How a block works","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works\u002Findex",[1794],{"title":1790,"path":1791,"stem":1792},{"title":1796,"path":1797,"stem":1798,"children":1799},"Inline editing","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing\u002Findex",[1800],{"title":1796,"path":1797,"stem":1798},{"title":1802,"path":1803,"stem":1804,"children":1805},"Reading published pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages\u002Findex",[1806],{"title":1802,"path":1803,"stem":1804},{"title":1808,"path":1809,"stem":1810,"children":1811},"Registering blocks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering\u002Findex",[1812],{"title":1808,"path":1809,"stem":1810},{"title":1814,"path":1815,"stem":1816,"children":1817},"Shells and fields","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields\u002Findex",[1818],{"title":1814,"path":1815,"stem":1816},{"title":1820,"path":1821,"stem":1822,"children":1823,"icon":262},"Connect data","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata","docs\u002Fstudios\u002Fsites\u002Fdata\u002Findex",[1824,1825,1830,1836,1842,1847,1853,1859,1865],{"title":1820,"path":1821,"stem":1822,"icon":262},{"title":550,"path":1826,"stem":1827,"children":1828},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication\u002Findex",[1829],{"title":550,"path":1826,"stem":1827},{"title":1831,"path":1832,"stem":1833,"children":1834},"The BFF pattern","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern\u002Findex",[1835],{"title":1831,"path":1832,"stem":1833},{"title":1837,"path":1838,"stem":1839,"children":1840},"Catalog, cart, checkout","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout\u002Findex",[1841],{"title":1837,"path":1838,"stem":1839},{"title":1297,"path":1843,"stem":1844,"children":1845},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms\u002Findex",[1846],{"title":1297,"path":1843,"stem":1844},{"title":1848,"path":1849,"stem":1850,"children":1851},"Media and assets","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia\u002Findex",[1852],{"title":1848,"path":1849,"stem":1850},{"title":1854,"path":1855,"stem":1856,"children":1857},"Multi-tenant themes","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes\u002Findex",[1858],{"title":1854,"path":1855,"stem":1856},{"title":1860,"path":1861,"stem":1862,"children":1863},"Search collections","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch-collections","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch-collections\u002Findex",[1864],{"title":1860,"path":1861,"stem":1862},{"title":1866,"path":1867,"stem":1868,"children":1869},"Search","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch\u002Findex",[1870],{"title":1866,"path":1867,"stem":1868},{"title":1872,"path":1873,"stem":1874,"children":1875,"icon":1186},"Build and deploy","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Findex",[1876,1877,1883,1889,1895,1901,1907,1913,1991],{"title":1872,"path":1873,"stem":1874,"icon":1186},{"title":1878,"path":1879,"stem":1880,"children":1881},"Build configuration","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration\u002Findex",[1882],{"title":1878,"path":1879,"stem":1880},{"title":1884,"path":1885,"stem":1886,"children":1887},"Compute specifications","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications\u002Findex",[1888],{"title":1884,"path":1885,"stem":1886},{"title":1890,"path":1891,"stem":1892,"children":1893},"Environment variables","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables\u002Findex",[1894],{"title":1890,"path":1891,"stem":1892},{"title":1896,"path":1897,"stem":1898,"children":1899},"From Git","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git\u002Findex",[1900],{"title":1896,"path":1897,"stem":1898},{"title":1902,"path":1903,"stem":1904,"children":1905},"From the CLI","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli\u002Findex",[1906],{"title":1902,"path":1903,"stem":1904},{"title":1908,"path":1909,"stem":1910,"children":1911},"Manually","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually\u002Findex",[1912],{"title":1908,"path":1909,"stem":1910},{"title":1914,"path":1915,"stem":1916,"children":1917},"Quick-starts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Findex",[1918,1919,1925,1931,1937,1943,1949,1955,1961,1967,1973,1979,1985],{"title":1914,"path":1915,"stem":1916},{"title":1920,"path":1921,"stem":1922,"children":1923},"Deploy an Angular app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular\u002Findex",[1924],{"title":1920,"path":1921,"stem":1922},{"title":1926,"path":1927,"stem":1928,"children":1929},"Deploy a Astro app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro\u002Findex",[1930],{"title":1926,"path":1927,"stem":1928},{"title":1932,"path":1933,"stem":1934,"children":1935},"Deploy a Flutter Web app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter\u002Findex",[1936],{"title":1932,"path":1933,"stem":1934},{"title":1938,"path":1939,"stem":1940,"children":1941},"Deploy a Next.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs\u002Findex",[1942],{"title":1938,"path":1939,"stem":1940},{"title":1944,"path":1945,"stem":1946,"children":1947},"Deploy a Nuxt app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt\u002Findex",[1948],{"title":1944,"path":1945,"stem":1946},{"title":1950,"path":1951,"stem":1952,"children":1953},"Deploy a React Native app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native\u002Findex",[1954],{"title":1950,"path":1951,"stem":1952},{"title":1956,"path":1957,"stem":1958,"children":1959},"Deploy a React app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact\u002Findex",[1960],{"title":1956,"path":1957,"stem":1958},{"title":1962,"path":1963,"stem":1964,"children":1965},"Deploy a Remix app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix\u002Findex",[1966],{"title":1962,"path":1963,"stem":1964},{"title":1968,"path":1969,"stem":1970,"children":1971},"Deploy a SvelteKit app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit\u002Findex",[1972],{"title":1968,"path":1969,"stem":1970},{"title":1974,"path":1975,"stem":1976,"children":1977},"Deploy a TanStack Start app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start\u002Findex",[1978],{"title":1974,"path":1975,"stem":1976},{"title":1980,"path":1981,"stem":1982,"children":1983},"Deploy a Vanilla JS app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla\u002Findex",[1984],{"title":1980,"path":1981,"stem":1982},{"title":1986,"path":1987,"stem":1988,"children":1989},"Deploy a Vue.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue\u002Findex",[1990],{"title":1986,"path":1987,"stem":1988},{"title":1992,"path":1993,"stem":1994,"children":1995},"Starting points","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points\u002Findex",[1996],{"title":1992,"path":1993,"stem":1994},{"title":1097,"path":1998,"stem":1999,"children":2000,"icon":2002},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fgetting-started","docs\u002Fstudios\u002Fsites\u002Fgetting-started\u002Findex",[2001],{"title":1097,"path":1998,"stem":1999,"icon":2002},"i-lucide-terminal",{"title":2004,"path":2005,"stem":2006,"children":2007,"icon":615},"Production","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Findex",[2008,2009,2015,2021,2027,2033,2039],{"title":2004,"path":2005,"stem":2006,"icon":615},{"title":2010,"path":2011,"stem":2012,"children":2013},"Deployments","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments\u002Findex",[2014],{"title":2010,"path":2011,"stem":2012},{"title":2016,"path":2017,"stem":2018,"children":2019},"Domains","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains\u002Findex",[2020],{"title":2016,"path":2017,"stem":2018},{"title":2022,"path":2023,"stem":2024,"children":2025},"Instant rollbacks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks\u002Findex",[2026],{"title":2022,"path":2023,"stem":2024},{"title":2028,"path":2029,"stem":2030,"children":2031},"Logs","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs\u002Findex",[2032],{"title":2028,"path":2029,"stem":2030},{"title":2034,"path":2035,"stem":2036,"children":2037},"Previews","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews\u002Findex",[2038],{"title":2034,"path":2035,"stem":2036},{"title":2040,"path":2041,"stem":2042,"children":2043},"Publishing a theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme\u002Findex",[2044],{"title":2040,"path":2041,"stem":2042},{"title":2046,"path":2047,"stem":2048,"children":2049,"icon":404},"Build the theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Findex",[2050,2051,2057,2063,2069,2075,2081,2087,2093,2111],{"title":2046,"path":2047,"stem":2048,"icon":404},{"title":2052,"path":2053,"stem":2054,"children":2055},"Theme anatomy","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy\u002Findex",[2056],{"title":2052,"path":2053,"stem":2054},{"title":2058,"path":2059,"stem":2060,"children":2061},"Design tokens","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens\u002Findex",[2062],{"title":2058,"path":2059,"stem":2060},{"title":2064,"path":2065,"stem":2066,"children":2067},"Frameworks","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks\u002Findex",[2068],{"title":2064,"path":2065,"stem":2066},{"title":2070,"path":2071,"stem":2072,"children":2073},"The layer chain","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain\u002Findex",[2074],{"title":2070,"path":2071,"stem":2072},{"title":2076,"path":2077,"stem":2078,"children":2079},"Local development","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development\u002Findex",[2080],{"title":2076,"path":2077,"stem":2078},{"title":2082,"path":2083,"stem":2084,"children":2085},"Modules and plugins","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins\u002Findex",[2086],{"title":2082,"path":2083,"stem":2084},{"title":2088,"path":2089,"stem":2090,"children":2091},"Overriding","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding\u002Findex",[2092],{"title":2088,"path":2089,"stem":2090},{"title":2094,"path":2095,"stem":2096,"children":2097},"Rendering","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Findex",[2098,2099,2105],{"title":2094,"path":2095,"stem":2096},{"title":2100,"path":2101,"stem":2102,"children":2103},"SSR","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr\u002Findex",[2104],{"title":2100,"path":2101,"stem":2102},{"title":2106,"path":2107,"stem":2108,"children":2109},"Static","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic\u002Findex",[2110],{"title":2106,"path":2107,"stem":2108},{"title":2112,"path":2113,"stem":2114,"children":2115},"Service modes","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes\u002Findex",[2116],{"title":2112,"path":2113,"stem":2114},{"title":2118,"path":2119,"stem":2120,"children":2121},"Tools","\u002Fdocs\u002Ftools","docs\u002Ftools\u002Findex",[2122,2123,2130,2345],{"title":2118,"path":2119,"stem":2120},{"title":2124,"path":2125,"stem":2126,"children":2127,"icon":2129},"AI agents","\u002Fdocs\u002Ftools\u002Fai-agents","docs\u002Ftools\u002Fai-agents\u002Findex",[2128],{"title":2124,"path":2125,"stem":2126,"icon":2129},"i-lucide-shield-alert",{"title":2131,"path":2132,"stem":2133,"children":2134},"Command line","\u002Fdocs\u002Ftools\u002Fcommand-line","docs\u002Ftools\u002Fcommand-line\u002Findex",[2135,2136,2142,2147,2153,2159,2165,2171,2177,2183,2303,2309,2315,2321,2327,2333,2339],{"title":2131,"path":2132,"stem":2133},{"title":2137,"path":2138,"stem":2139,"children":2140},"Aliases","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Faliases","docs\u002Ftools\u002Fcommand-line\u002Faliases\u002Findex",[2141],{"title":2137,"path":2138,"stem":2139},{"title":550,"path":2143,"stem":2144,"children":2145},"\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fauthentication","docs\u002Ftools\u002Fcommand-line\u002Fauthentication\u002Findex",[2146],{"title":550,"path":2143,"stem":2144},{"title":2148,"path":2149,"stem":2150,"children":2151},"Commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fcommands","docs\u002Ftools\u002Fcommand-line\u002Fcommands\u002Findex",[2152],{"title":2148,"path":2149,"stem":2150},{"title":2154,"path":2155,"stem":2156,"children":2157},"Global commands reference","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fglobal-commands","docs\u002Ftools\u002Fcommand-line\u002Fglobal-commands\u002Findex",[2158],{"title":2154,"path":2155,"stem":2156},{"title":2160,"path":2161,"stem":2162,"children":2163},"Installation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finstallation","docs\u002Ftools\u002Fcommand-line\u002Finstallation\u002Findex",[2164],{"title":2160,"path":2161,"stem":2162},{"title":2166,"path":2167,"stem":2168,"children":2169},"Interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finteractive","docs\u002Ftools\u002Fcommand-line\u002Finteractive\u002Findex",[2170],{"title":2166,"path":2167,"stem":2168},{"title":2172,"path":2173,"stem":2174,"children":2175},"Non-interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fnon-interactive","docs\u002Ftools\u002Fcommand-line\u002Fnon-interactive\u002Findex",[2176],{"title":2172,"path":2173,"stem":2174},{"title":2178,"path":2179,"stem":2180,"children":2181},"Project configuration","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fproject-configuration","docs\u002Ftools\u002Fcommand-line\u002Fproject-configuration\u002Findex",[2182],{"title":2178,"path":2179,"stem":2180},{"title":2184,"path":2185,"stem":2186,"children":2187},"Command reference","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Findex",[2188,2189,2195,2201,2207,2213,2219,2225,2231,2237,2243,2249,2255,2261,2267,2273,2279,2285,2291,2297],{"title":2184,"path":2185,"stem":2186},{"title":2190,"path":2191,"stem":2192,"children":2193},"About commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout\u002Findex",[2194],{"title":2190,"path":2191,"stem":2192},{"title":2196,"path":2197,"stem":2198,"children":2199},"Apps commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps\u002Findex",[2200],{"title":2196,"path":2197,"stem":2198},{"title":2202,"path":2203,"stem":2204,"children":2205},"Carts commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts\u002Findex",[2206],{"title":2202,"path":2203,"stem":2204},{"title":2208,"path":2209,"stem":2210,"children":2211},"Channels commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels\u002Findex",[2212],{"title":2208,"path":2209,"stem":2210},{"title":2214,"path":2215,"stem":2216,"children":2217},"Create commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate\u002Findex",[2218],{"title":2214,"path":2215,"stem":2216},{"title":2220,"path":2221,"stem":2222,"children":2223},"Customers commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers\u002Findex",[2224],{"title":2220,"path":2221,"stem":2222},{"title":2226,"path":2227,"stem":2228,"children":2229},"Deploy commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy\u002Findex",[2230],{"title":2226,"path":2227,"stem":2228},{"title":2232,"path":2233,"stem":2234,"children":2235},"Forms commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms\u002Findex",[2236],{"title":2232,"path":2233,"stem":2234},{"title":2238,"path":2239,"stem":2240,"children":2241},"Markets commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets\u002Findex",[2242],{"title":2238,"path":2239,"stem":2240},{"title":2244,"path":2245,"stem":2246,"children":2247},"Order lists commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists\u002Findex",[2248],{"title":2244,"path":2245,"stem":2246},{"title":2250,"path":2251,"stem":2252,"children":2253},"Orders commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders\u002Findex",[2254],{"title":2250,"path":2251,"stem":2252},{"title":2256,"path":2257,"stem":2258,"children":2259},"Pages commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages\u002Findex",[2260],{"title":2256,"path":2257,"stem":2258},{"title":2262,"path":2263,"stem":2264,"children":2265},"Prices commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices\u002Findex",[2266],{"title":2262,"path":2263,"stem":2264},{"title":2268,"path":2269,"stem":2270,"children":2271},"Products commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts\u002Findex",[2272],{"title":2268,"path":2269,"stem":2270},{"title":2274,"path":2275,"stem":2276,"children":2277},"Search commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch\u002Findex",[2278],{"title":2274,"path":2275,"stem":2276},{"title":2280,"path":2281,"stem":2282,"children":2283},"Settings commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings\u002Findex",[2284],{"title":2280,"path":2281,"stem":2282},{"title":2286,"path":2287,"stem":2288,"children":2289},"Sites commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites\u002Findex",[2290],{"title":2286,"path":2287,"stem":2288},{"title":2292,"path":2293,"stem":2294,"children":2295},"Skills commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills\u002Findex",[2296],{"title":2292,"path":2293,"stem":2294},{"title":2298,"path":2299,"stem":2300,"children":2301},"Storage commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage\u002Findex",[2302],{"title":2298,"path":2299,"stem":2300},{"title":2304,"path":2305,"stem":2306,"children":2307},"Interactive shell (REPL)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Frepl","docs\u002Ftools\u002Fcommand-line\u002Frepl\u002Findex",[2308],{"title":2304,"path":2305,"stem":2306},{"title":2310,"path":2311,"stem":2312,"children":2313},"Scaffolding","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscaffolding","docs\u002Ftools\u002Fcommand-line\u002Fscaffolding\u002Findex",[2314],{"title":2310,"path":2311,"stem":2312},{"title":2316,"path":2317,"stem":2318,"children":2319},"Scripting & output","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscripting","docs\u002Ftools\u002Fcommand-line\u002Fscripting\u002Findex",[2320],{"title":2316,"path":2317,"stem":2318},{"title":2322,"path":2323,"stem":2324,"children":2325},"Skills","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Fskills\u002Findex",[2326],{"title":2322,"path":2323,"stem":2324},{"title":2328,"path":2329,"stem":2330,"children":2331},"Full-screen app (TUI)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftui","docs\u002Ftools\u002Fcommand-line\u002Ftui\u002Findex",[2332],{"title":2328,"path":2329,"stem":2330},{"title":2334,"path":2335,"stem":2336,"children":2337},"Type generation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftype-generation","docs\u002Ftools\u002Fcommand-line\u002Ftype-generation\u002Findex",[2338],{"title":2334,"path":2335,"stem":2336},{"title":2340,"path":2341,"stem":2342,"children":2343},"Background watchers","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fwatch","docs\u002Ftools\u002Fcommand-line\u002Fwatch\u002Findex",[2344],{"title":2340,"path":2341,"stem":2342},{"title":2346,"path":2347,"stem":2348,"children":2349},"Model Context Protocol","\u002Fdocs\u002Ftools\u002Fmcp","docs\u002Ftools\u002Fmcp\u002Findex",[2350,2351,2357,2363,2369,2375,2381,2387,2393],{"title":2346,"path":2347,"stem":2348},{"title":2352,"path":2353,"stem":2354,"children":2355},"revenexx docs MCP in Google Antigravity","\u002Fdocs\u002Ftools\u002Fmcp\u002Fantigravity","docs\u002Ftools\u002Fmcp\u002Fantigravity\u002Findex",[2356],{"title":2352,"path":2353,"stem":2354},{"title":2358,"path":2359,"stem":2360,"children":2361},"revenexx docs MCP in Claude Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-code","docs\u002Ftools\u002Fmcp\u002Fclaude-code\u002Findex",[2362],{"title":2358,"path":2359,"stem":2360},{"title":2364,"path":2365,"stem":2366,"children":2367},"revenexx docs MCP in Claude Desktop","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-desktop","docs\u002Ftools\u002Fmcp\u002Fclaude-desktop\u002Findex",[2368],{"title":2364,"path":2365,"stem":2366},{"title":2370,"path":2371,"stem":2372,"children":2373},"revenexx docs MCP in Cursor","\u002Fdocs\u002Ftools\u002Fmcp\u002Fcursor","docs\u002Ftools\u002Fmcp\u002Fcursor\u002Findex",[2374],{"title":2370,"path":2371,"stem":2372},{"title":2376,"path":2377,"stem":2378,"children":2379},"revenexx docs MCP in OpenCode","\u002Fdocs\u002Ftools\u002Fmcp\u002Fopencode","docs\u002Ftools\u002Fmcp\u002Fopencode\u002Findex",[2380],{"title":2376,"path":2377,"stem":2378},{"title":2382,"path":2383,"stem":2384,"children":2385},"revenexx docs MCP in VS Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fvscode","docs\u002Ftools\u002Fmcp\u002Fvscode\u002Findex",[2386],{"title":2382,"path":2383,"stem":2384},{"title":2388,"path":2389,"stem":2390,"children":2391},"revenexx docs MCP in Windsurf","\u002Fdocs\u002Ftools\u002Fmcp\u002Fwindsurf","docs\u002Ftools\u002Fmcp\u002Fwindsurf\u002Findex",[2392],{"title":2388,"path":2389,"stem":2390},{"title":2394,"path":2395,"stem":2396,"children":2397},"revenexx docs MCP in Zenflow","\u002Fdocs\u002Ftools\u002Fmcp\u002Fzenflow","docs\u002Ftools\u002Fmcp\u002Fzenflow\u002Findex",[2398],{"title":2394,"path":2395,"stem":2396},{"id":2400,"title":138,"body":2401,"description":6587,"extension":6588,"landing":6589,"links":6589,"meta":6590,"navigation":6591,"path":139,"seo":6592,"sitemap":6593,"stem":140,"__hash__":6594},"docs\u002Fdocs\u002Fguides\u002Fapps\u002Freact-to-events-and-run-scheduled-work\u002Findex.md",{"type":2402,"value":2403,"toc":6573},"minimark",[2404,2408,2434,2439,2442,2487,2501,2505,2547,3471,3474,3488,3500,3513,3521,3525,3534,3777,3780,3840,3846,3855,3858,3878,3882,3911,3978,4051,4067,4087,4090,4472,4514,4542,4545,4550,4553,4590,4594,4597,4652,4682,4686,4693,4696,4740,4744,4755,6220,6234,6240,6244,6260,6436,6439,6443,6531,6535,6569],[2405,2406,2407],"p",{},"An App does not only answer requests. The platform can also invoke it when a lifecycle event fires and on a cron schedule, and both arrive as an invocation of the same function that serves your routes. This guide wires up one of each and makes them safe to run twice.",[2405,2409,2410,2411,2414,2415,2419,2420,2422,2423,2427,2428,2430,2431,2433],{},"The example continues the Locations App from ",[2412,2413,110],"a",{"href":111}," and the ",[2416,2417,2418],"code",{},"transfers"," entity from ",[2412,2421,124],{"href":125},": the App seeds its defaults when it is installed, and a nightly job deletes received transfers older than 90 days. This is for developers who already have an App they deploy with the CLI. You need your ",[2412,2424,2426],{"href":2425},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#find-your-tenant-slug","tenant slug"," and the typed client from ",[2412,2429,103],{"href":104},". If you have no ",[2416,2432,2418],{}," entity, use any entity of yours that has a status and a timestamp.",[2435,2436,2438],"h2",{"id":2437},"what-you-can-rely-on-today","What you can rely on today",[2405,2440,2441],{},"Read this first, because it decides what the rest of the page is for.",[2443,2444,2445,2461,2467,2473,2481],"ul",{},[2446,2447,2448,2452,2453,2456,2457,2460],"li",{},[2449,2450,2451],"strong",{},"Two events are verified for App handlers:"," ",[2416,2454,2455],{},"app.installed"," and ",[2416,2458,2459],{},"app.uninstalled",", in the sense that shipped Apps subscribe to them and handle them. Nearly every App that ships on the platform listens to those two, and no other event is verified for an App handler (as of 2026-10).",[2446,2462,2463,2466],{},[2449,2464,2465],{},"A business event such as an order being placed is not."," A shipped App that declares listens for the order cancellation events says in its own documentation that the platform does not deliver them to it yet. It reads the orders on an hourly schedule instead (as of 2026-10).",[2446,2468,2469,2472],{},[2449,2470,2471],{},"Delivery guarantees for App handlers are not settled."," Ordering, retries and whether a handler can run twice are not documented (as of 2026-10), so this guide assumes the worst: an event may arrive twice, late, or not at all.",[2446,2474,2475,2480],{},[2449,2476,2477,2479],{},[2416,2478,2455],{}," does not reliably fire on a Marketplace install"," (as of 2026-10), so it can never be the only way your defaults get seeded.",[2446,2482,2483,2486],{},[2449,2484,2485],{},"A schedule is the trigger shipped Apps rely on."," The platform runs it from the cron expression you declare, once per installed tenant, but the platform does not promise delivery of every tick. That is why this page ends in a schedule doing the work an event may miss. It is a clock, not a queue, so do not assume a tick the platform missed is replayed.",[2405,2488,2489,2490,2493,2494,2497,2498,2500],{},"If you need to react to a business event now, use a ",[2412,2491,2492],{"href":720},"webhook"," or an ",[2412,2495,2496],{"href":1585},"Integration Studio workflow",", and read ",[2412,2499,379],{"href":380}," to pick one.",[2435,2502,2504],{"id":2503},"_1-branch-on-the-trigger-before-the-router","1. Branch on the trigger before the router",[2405,2506,2507,2508,2510,2511,2514,2515,2518,2519,2456,2522,2525,2526,2529,2530,2529,2533,2456,2536,2539,2540,2456,2543,2546],{},"Neither an event delivery nor a schedule tick carries a path your routes match, so the exported handler has to tell them apart first. The handler from ",[2412,2509,110],{"href":111}," already branches on events. Replace the ",[2416,2512,2513],{},"module.exports"," handler in your ",[2416,2516,2517],{},"src\u002Fmain.js"," with the two exports below, which take the data client as an argument. That is what lets step 5 test it with the mock adapter. The code calls ",[2416,2520,2521],{},"purgeOldTransfers",[2416,2523,2524],{},"SCHEDULE_PURGE",", which step 3 adds to the same file, and ",[2416,2527,2528],{},"ensureDefaults",", ",[2416,2531,2532],{},"buildApp",[2416,2534,2535],{},"createDb",[2416,2537,2538],{},"DEFAULT_LOCATIONS",", which you already have. Keep the ",[2416,2541,2542],{},"module.exports.buildApp",[2416,2544,2545],{},"module.exports.ensureDefaults"," lines. Paste the code now and read on: the file does not run until step 3 has added the two missing names.",[2548,2549,2554],"pre",{"className":2550,"code":2551,"filename":2517,"language":2552,"meta":2553,"style":2553},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","async function handle(context, db) {\n  const { req, res } = context;\n  const headers = req.headers || {};\n  const jwt = headers['x-revenexx-context'] ?? headers['X-Revenexx-Context'] ?? '';\n  const path = (String(req.path || '\u002F').replace(\u002F\\\u002F+$\u002F, '')) || '\u002F';\n\n  \u002F\u002F A cron tick carries the schedule name and the tenant context, but no path.\n  const schedule = headers['x-revenexx-schedule'] ?? '';\n  if (schedule) {\n    if (!jwt) return res.json({ error: 'missing tenant identity' }, 503);\n    if (schedule === SCHEDULE_PURGE) {\n      return res.json({ schedule, ...(await purgeOldTransfers(db)) });\n    }\n    return res.json({ schedule, ignored: true });\n  }\n\n  \u002F\u002F An event delivery names the event.\n  const trigger = headers['x-revenexx-trigger'] ?? '';\n  const event = headers['x-revenexx-event'] ?? '';\n  if (trigger === 'event' && jwt) {\n    if (\u002F(^|\\.)installed$\u002F.test(event)) {\n      return res.json({ event, ...(await ensureDefaults(db)) });\n    }\n    if (\u002F(^|\\.)uninstalled$\u002F.test(event)) {\n      return res.json({ event, kept: true });   \u002F\u002F nothing destructive, see below\n    }\n    return res.json({ event, ignored: true });\n  }\n\n  if (path !== '\u002F' && !jwt) return res.json({ error: 'missing tenant identity' }, 503);\n  return buildApp(db).handler()(context);\n}\n\nmodule.exports = async (context) => handle(context, createDb({ adapter: 'runtime', context }));\nmodule.exports.handle = handle;\n","js","",[2416,2555,2556,2592,2622,2646,2697,2774,2781,2788,2817,2834,2889,2908,2953,2959,2994,3000,3005,3011,3040,3069,3097,3138,3178,3183,3219,3255,3260,3291,3296,3301,3358,3387,3393,3398,3455],{"__ignoreMap":2553},[2557,2558,2561,2565,2568,2572,2576,2580,2583,2586,2589],"span",{"class":2559,"line":2560},"line",1,[2557,2562,2564],{"class":2563},"spNyl","async",[2557,2566,2567],{"class":2563}," function",[2557,2569,2571],{"class":2570},"s2Zo4"," handle",[2557,2573,2575],{"class":2574},"sMK4o","(",[2557,2577,2579],{"class":2578},"sHdIc","context",[2557,2581,2582],{"class":2574},",",[2557,2584,2585],{"class":2578}," db",[2557,2587,2588],{"class":2574},")",[2557,2590,2591],{"class":2574}," {\n",[2557,2593,2595,2598,2601,2605,2607,2610,2613,2616,2619],{"class":2559,"line":2594},2,[2557,2596,2597],{"class":2563},"  const",[2557,2599,2600],{"class":2574}," {",[2557,2602,2604],{"class":2603},"sTEyZ"," req",[2557,2606,2582],{"class":2574},[2557,2608,2609],{"class":2603}," res",[2557,2611,2612],{"class":2574}," }",[2557,2614,2615],{"class":2574}," =",[2557,2617,2618],{"class":2603}," context",[2557,2620,2621],{"class":2574},";\n",[2557,2623,2625,2627,2630,2632,2634,2637,2640,2643],{"class":2559,"line":2624},3,[2557,2626,2597],{"class":2563},[2557,2628,2629],{"class":2603}," headers",[2557,2631,2615],{"class":2574},[2557,2633,2604],{"class":2603},[2557,2635,2636],{"class":2574},".",[2557,2638,2639],{"class":2603},"headers",[2557,2641,2642],{"class":2574}," ||",[2557,2644,2645],{"class":2574}," {};\n",[2557,2647,2649,2651,2654,2656,2658,2662,2665,2669,2671,2674,2677,2679,2681,2683,2686,2688,2690,2692,2695],{"class":2559,"line":2648},4,[2557,2650,2597],{"class":2563},[2557,2652,2653],{"class":2603}," jwt",[2557,2655,2615],{"class":2574},[2557,2657,2629],{"class":2603},[2557,2659,2661],{"class":2660},"swJcz","[",[2557,2663,2664],{"class":2574},"'",[2557,2666,2668],{"class":2667},"sfazB","x-revenexx-context",[2557,2670,2664],{"class":2574},[2557,2672,2673],{"class":2660},"] ",[2557,2675,2676],{"class":2574},"??",[2557,2678,2629],{"class":2603},[2557,2680,2661],{"class":2660},[2557,2682,2664],{"class":2574},[2557,2684,2685],{"class":2667},"X-Revenexx-Context",[2557,2687,2664],{"class":2574},[2557,2689,2673],{"class":2660},[2557,2691,2676],{"class":2574},[2557,2693,2694],{"class":2574}," ''",[2557,2696,2621],{"class":2574},[2557,2698,2700,2702,2705,2707,2710,2713,2715,2718,2720,2723,2725,2728,2731,2733,2735,2737,2740,2742,2744,2747,2750,2754,2756,2758,2760,2763,2766,2768,2770,2772],{"class":2559,"line":2699},5,[2557,2701,2597],{"class":2563},[2557,2703,2704],{"class":2603}," path",[2557,2706,2615],{"class":2574},[2557,2708,2709],{"class":2660}," (",[2557,2711,2712],{"class":2570},"String",[2557,2714,2575],{"class":2660},[2557,2716,2717],{"class":2603},"req",[2557,2719,2636],{"class":2574},[2557,2721,2722],{"class":2603},"path",[2557,2724,2642],{"class":2574},[2557,2726,2727],{"class":2574}," '",[2557,2729,2730],{"class":2667},"\u002F",[2557,2732,2664],{"class":2574},[2557,2734,2588],{"class":2660},[2557,2736,2636],{"class":2574},[2557,2738,2739],{"class":2570},"replace",[2557,2741,2575],{"class":2660},[2557,2743,2730],{"class":2574},[2557,2745,2746],{"class":2603},"\\\u002F",[2557,2748,2749],{"class":2574},"+",[2557,2751,2753],{"class":2752},"s7zQu","$",[2557,2755,2730],{"class":2574},[2557,2757,2582],{"class":2574},[2557,2759,2694],{"class":2574},[2557,2761,2762],{"class":2660},")) ",[2557,2764,2765],{"class":2574},"||",[2557,2767,2727],{"class":2574},[2557,2769,2730],{"class":2667},[2557,2771,2664],{"class":2574},[2557,2773,2621],{"class":2574},[2557,2775,2777],{"class":2559,"line":2776},6,[2557,2778,2780],{"emptyLinePlaceholder":2779},true,"\n",[2557,2782,2784],{"class":2559,"line":2783},7,[2557,2785,2787],{"class":2786},"sHwdD","  \u002F\u002F A cron tick carries the schedule name and the tenant context, but no path.\n",[2557,2789,2791,2793,2796,2798,2800,2802,2804,2807,2809,2811,2813,2815],{"class":2559,"line":2790},8,[2557,2792,2597],{"class":2563},[2557,2794,2795],{"class":2603}," schedule",[2557,2797,2615],{"class":2574},[2557,2799,2629],{"class":2603},[2557,2801,2661],{"class":2660},[2557,2803,2664],{"class":2574},[2557,2805,2806],{"class":2667},"x-revenexx-schedule",[2557,2808,2664],{"class":2574},[2557,2810,2673],{"class":2660},[2557,2812,2676],{"class":2574},[2557,2814,2694],{"class":2574},[2557,2816,2621],{"class":2574},[2557,2818,2820,2823,2825,2828,2831],{"class":2559,"line":2819},9,[2557,2821,2822],{"class":2752},"  if",[2557,2824,2709],{"class":2660},[2557,2826,2827],{"class":2603},"schedule",[2557,2829,2830],{"class":2660},") ",[2557,2832,2833],{"class":2574},"{\n",[2557,2835,2837,2840,2842,2845,2848,2850,2853,2855,2857,2860,2862,2865,2868,2871,2873,2876,2878,2881,2885,2887],{"class":2559,"line":2836},10,[2557,2838,2839],{"class":2752},"    if",[2557,2841,2709],{"class":2660},[2557,2843,2844],{"class":2574},"!",[2557,2846,2847],{"class":2603},"jwt",[2557,2849,2830],{"class":2660},[2557,2851,2852],{"class":2752},"return",[2557,2854,2609],{"class":2603},[2557,2856,2636],{"class":2574},[2557,2858,2859],{"class":2570},"json",[2557,2861,2575],{"class":2660},[2557,2863,2864],{"class":2574},"{",[2557,2866,2867],{"class":2660}," error",[2557,2869,2870],{"class":2574},":",[2557,2872,2727],{"class":2574},[2557,2874,2875],{"class":2667},"missing tenant identity",[2557,2877,2664],{"class":2574},[2557,2879,2880],{"class":2574}," },",[2557,2882,2884],{"class":2883},"sbssI"," 503",[2557,2886,2588],{"class":2660},[2557,2888,2621],{"class":2574},[2557,2890,2892,2894,2896,2898,2901,2904,2906],{"class":2559,"line":2891},11,[2557,2893,2839],{"class":2752},[2557,2895,2709],{"class":2660},[2557,2897,2827],{"class":2603},[2557,2899,2900],{"class":2574}," ===",[2557,2902,2903],{"class":2603}," SCHEDULE_PURGE",[2557,2905,2830],{"class":2660},[2557,2907,2833],{"class":2574},[2557,2909,2911,2914,2916,2918,2920,2922,2924,2926,2928,2931,2933,2936,2939,2941,2944,2946,2949,2951],{"class":2559,"line":2910},12,[2557,2912,2913],{"class":2752},"      return",[2557,2915,2609],{"class":2603},[2557,2917,2636],{"class":2574},[2557,2919,2859],{"class":2570},[2557,2921,2575],{"class":2660},[2557,2923,2864],{"class":2574},[2557,2925,2795],{"class":2603},[2557,2927,2582],{"class":2574},[2557,2929,2930],{"class":2574}," ...",[2557,2932,2575],{"class":2660},[2557,2934,2935],{"class":2752},"await",[2557,2937,2938],{"class":2570}," purgeOldTransfers",[2557,2940,2575],{"class":2660},[2557,2942,2943],{"class":2603},"db",[2557,2945,2762],{"class":2660},[2557,2947,2948],{"class":2574},"}",[2557,2950,2588],{"class":2660},[2557,2952,2621],{"class":2574},[2557,2954,2956],{"class":2559,"line":2955},13,[2557,2957,2958],{"class":2574},"    }\n",[2557,2960,2962,2965,2967,2969,2971,2973,2975,2977,2979,2982,2984,2988,2990,2992],{"class":2559,"line":2961},14,[2557,2963,2964],{"class":2752},"    return",[2557,2966,2609],{"class":2603},[2557,2968,2636],{"class":2574},[2557,2970,2859],{"class":2570},[2557,2972,2575],{"class":2660},[2557,2974,2864],{"class":2574},[2557,2976,2795],{"class":2603},[2557,2978,2582],{"class":2574},[2557,2980,2981],{"class":2660}," ignored",[2557,2983,2870],{"class":2574},[2557,2985,2987],{"class":2986},"sfNiH"," true",[2557,2989,2612],{"class":2574},[2557,2991,2588],{"class":2660},[2557,2993,2621],{"class":2574},[2557,2995,2997],{"class":2559,"line":2996},15,[2557,2998,2999],{"class":2574},"  }\n",[2557,3001,3003],{"class":2559,"line":3002},16,[2557,3004,2780],{"emptyLinePlaceholder":2779},[2557,3006,3008],{"class":2559,"line":3007},17,[2557,3009,3010],{"class":2786},"  \u002F\u002F An event delivery names the event.\n",[2557,3012,3014,3016,3019,3021,3023,3025,3027,3030,3032,3034,3036,3038],{"class":2559,"line":3013},18,[2557,3015,2597],{"class":2563},[2557,3017,3018],{"class":2603}," trigger",[2557,3020,2615],{"class":2574},[2557,3022,2629],{"class":2603},[2557,3024,2661],{"class":2660},[2557,3026,2664],{"class":2574},[2557,3028,3029],{"class":2667},"x-revenexx-trigger",[2557,3031,2664],{"class":2574},[2557,3033,2673],{"class":2660},[2557,3035,2676],{"class":2574},[2557,3037,2694],{"class":2574},[2557,3039,2621],{"class":2574},[2557,3041,3043,3045,3048,3050,3052,3054,3056,3059,3061,3063,3065,3067],{"class":2559,"line":3042},19,[2557,3044,2597],{"class":2563},[2557,3046,3047],{"class":2603}," event",[2557,3049,2615],{"class":2574},[2557,3051,2629],{"class":2603},[2557,3053,2661],{"class":2660},[2557,3055,2664],{"class":2574},[2557,3057,3058],{"class":2667},"x-revenexx-event",[2557,3060,2664],{"class":2574},[2557,3062,2673],{"class":2660},[2557,3064,2676],{"class":2574},[2557,3066,2694],{"class":2574},[2557,3068,2621],{"class":2574},[2557,3070,3072,3074,3076,3079,3081,3083,3086,3088,3091,3093,3095],{"class":2559,"line":3071},20,[2557,3073,2822],{"class":2752},[2557,3075,2709],{"class":2660},[2557,3077,3078],{"class":2603},"trigger",[2557,3080,2900],{"class":2574},[2557,3082,2727],{"class":2574},[2557,3084,3085],{"class":2667},"event",[2557,3087,2664],{"class":2574},[2557,3089,3090],{"class":2574}," &&",[2557,3092,2653],{"class":2603},[2557,3094,2830],{"class":2660},[2557,3096,2833],{"class":2574},[2557,3098,3100,3102,3104,3107,3110,3113,3116,3118,3121,3123,3125,3127,3130,3132,3134,3136],{"class":2559,"line":3099},21,[2557,3101,2839],{"class":2752},[2557,3103,2709],{"class":2660},[2557,3105,3106],{"class":2574},"\u002F(",[2557,3108,3109],{"class":2752},"^",[2557,3111,3112],{"class":2574},"|",[2557,3114,3115],{"class":2603},"\\.",[2557,3117,2588],{"class":2574},[2557,3119,3120],{"class":2667},"installed",[2557,3122,2753],{"class":2752},[2557,3124,2730],{"class":2574},[2557,3126,2636],{"class":2574},[2557,3128,3129],{"class":2570},"test",[2557,3131,2575],{"class":2660},[2557,3133,3085],{"class":2603},[2557,3135,2762],{"class":2660},[2557,3137,2833],{"class":2574},[2557,3139,3141,3143,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3166,3168,3170,3172,3174,3176],{"class":2559,"line":3140},22,[2557,3142,2913],{"class":2752},[2557,3144,2609],{"class":2603},[2557,3146,2636],{"class":2574},[2557,3148,2859],{"class":2570},[2557,3150,2575],{"class":2660},[2557,3152,2864],{"class":2574},[2557,3154,3047],{"class":2603},[2557,3156,2582],{"class":2574},[2557,3158,2930],{"class":2574},[2557,3160,2575],{"class":2660},[2557,3162,2935],{"class":2752},[2557,3164,3165],{"class":2570}," ensureDefaults",[2557,3167,2575],{"class":2660},[2557,3169,2943],{"class":2603},[2557,3171,2762],{"class":2660},[2557,3173,2948],{"class":2574},[2557,3175,2588],{"class":2660},[2557,3177,2621],{"class":2574},[2557,3179,3181],{"class":2559,"line":3180},23,[2557,3182,2958],{"class":2574},[2557,3184,3186,3188,3190,3192,3194,3196,3198,3200,3203,3205,3207,3209,3211,3213,3215,3217],{"class":2559,"line":3185},24,[2557,3187,2839],{"class":2752},[2557,3189,2709],{"class":2660},[2557,3191,3106],{"class":2574},[2557,3193,3109],{"class":2752},[2557,3195,3112],{"class":2574},[2557,3197,3115],{"class":2603},[2557,3199,2588],{"class":2574},[2557,3201,3202],{"class":2667},"uninstalled",[2557,3204,2753],{"class":2752},[2557,3206,2730],{"class":2574},[2557,3208,2636],{"class":2574},[2557,3210,3129],{"class":2570},[2557,3212,2575],{"class":2660},[2557,3214,3085],{"class":2603},[2557,3216,2762],{"class":2660},[2557,3218,2833],{"class":2574},[2557,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3241,3243,3245,3247,3249,3252],{"class":2559,"line":3221},25,[2557,3223,2913],{"class":2752},[2557,3225,2609],{"class":2603},[2557,3227,2636],{"class":2574},[2557,3229,2859],{"class":2570},[2557,3231,2575],{"class":2660},[2557,3233,2864],{"class":2574},[2557,3235,3047],{"class":2603},[2557,3237,2582],{"class":2574},[2557,3239,3240],{"class":2660}," kept",[2557,3242,2870],{"class":2574},[2557,3244,2987],{"class":2986},[2557,3246,2612],{"class":2574},[2557,3248,2588],{"class":2660},[2557,3250,3251],{"class":2574},";",[2557,3253,3254],{"class":2786},"   \u002F\u002F nothing destructive, see below\n",[2557,3256,3258],{"class":2559,"line":3257},26,[2557,3259,2958],{"class":2574},[2557,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289],{"class":2559,"line":3262},27,[2557,3264,2964],{"class":2752},[2557,3266,2609],{"class":2603},[2557,3268,2636],{"class":2574},[2557,3270,2859],{"class":2570},[2557,3272,2575],{"class":2660},[2557,3274,2864],{"class":2574},[2557,3276,3047],{"class":2603},[2557,3278,2582],{"class":2574},[2557,3280,2981],{"class":2660},[2557,3282,2870],{"class":2574},[2557,3284,2987],{"class":2986},[2557,3286,2612],{"class":2574},[2557,3288,2588],{"class":2660},[2557,3290,2621],{"class":2574},[2557,3292,3294],{"class":2559,"line":3293},28,[2557,3295,2999],{"class":2574},[2557,3297,3299],{"class":2559,"line":3298},29,[2557,3300,2780],{"emptyLinePlaceholder":2779},[2557,3302,3304,3306,3308,3310,3313,3315,3317,3319,3321,3324,3326,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356],{"class":2559,"line":3303},30,[2557,3305,2822],{"class":2752},[2557,3307,2709],{"class":2660},[2557,3309,2722],{"class":2603},[2557,3311,3312],{"class":2574}," !==",[2557,3314,2727],{"class":2574},[2557,3316,2730],{"class":2667},[2557,3318,2664],{"class":2574},[2557,3320,3090],{"class":2574},[2557,3322,3323],{"class":2574}," !",[2557,3325,2847],{"class":2603},[2557,3327,2830],{"class":2660},[2557,3329,2852],{"class":2752},[2557,3331,2609],{"class":2603},[2557,3333,2636],{"class":2574},[2557,3335,2859],{"class":2570},[2557,3337,2575],{"class":2660},[2557,3339,2864],{"class":2574},[2557,3341,2867],{"class":2660},[2557,3343,2870],{"class":2574},[2557,3345,2727],{"class":2574},[2557,3347,2875],{"class":2667},[2557,3349,2664],{"class":2574},[2557,3351,2880],{"class":2574},[2557,3353,2884],{"class":2883},[2557,3355,2588],{"class":2660},[2557,3357,2621],{"class":2574},[2557,3359,3361,3364,3367,3369,3371,3373,3375,3378,3381,3383,3385],{"class":2559,"line":3360},31,[2557,3362,3363],{"class":2752},"  return",[2557,3365,3366],{"class":2570}," buildApp",[2557,3368,2575],{"class":2660},[2557,3370,2943],{"class":2603},[2557,3372,2588],{"class":2660},[2557,3374,2636],{"class":2574},[2557,3376,3377],{"class":2570},"handler",[2557,3379,3380],{"class":2660},"()(",[2557,3382,2579],{"class":2603},[2557,3384,2588],{"class":2660},[2557,3386,2621],{"class":2574},[2557,3388,3390],{"class":2559,"line":3389},32,[2557,3391,3392],{"class":2574},"}\n",[2557,3394,3396],{"class":2559,"line":3395},33,[2557,3397,2780],{"emptyLinePlaceholder":2779},[2557,3399,3401,3403,3405,3408,3410,3412,3414,3417,3419,3422,3424,3427,3429,3431,3434,3436,3438,3441,3443,3445,3448,3450,3453],{"class":2559,"line":3400},34,[2557,3402,2513],{"class":2574},[2557,3404,2615],{"class":2574},[2557,3406,3407],{"class":2563}," async",[2557,3409,2709],{"class":2574},[2557,3411,2579],{"class":2578},[2557,3413,2588],{"class":2574},[2557,3415,3416],{"class":2563}," =>",[2557,3418,2571],{"class":2570},[2557,3420,3421],{"class":2603},"(context",[2557,3423,2582],{"class":2574},[2557,3425,3426],{"class":2570}," createDb",[2557,3428,2575],{"class":2603},[2557,3430,2864],{"class":2574},[2557,3432,3433],{"class":2660}," adapter",[2557,3435,2870],{"class":2574},[2557,3437,2727],{"class":2574},[2557,3439,3440],{"class":2667},"runtime",[2557,3442,2664],{"class":2574},[2557,3444,2582],{"class":2574},[2557,3446,3447],{"class":2603}," context ",[2557,3449,2948],{"class":2574},[2557,3451,3452],{"class":2603},"))",[2557,3454,2621],{"class":2574},[2557,3456,3458,3461,3464,3467,3469],{"class":2559,"line":3457},35,[2557,3459,3460],{"class":2574},"module.exports.",[2557,3462,3463],{"class":2603},"handle ",[2557,3465,3466],{"class":2574},"=",[2557,3468,2571],{"class":2603},[2557,3470,2621],{"class":2574},[2405,3472,3473],{},"Four details are deliberate.",[2405,3475,3476,3479,3480,3482,3483,3485,3486,2636],{},[2449,3477,3478],{},"Match the event with a pattern, not an exact string."," The name on the bus carries a vendor and app prefix, and the ",[2416,3481,3058],{}," header of a delivery can spell it differently from the ",[2416,3484,2455],{}," you declared. Matching the suffix survives that. Matching the full string is a guess. See ",[2412,3487,1133],{"href":1134},[2405,3489,3490,2452,3493,3496,3497,2636],{},[2449,3491,3492],{},"Answer every delivery with a JSON body, including the ones you ignore.",[2416,3494,3495],{},"{ event, ignored: true }"," in the execution log is the difference between five minutes of debugging and an afternoon. The same goes for a schedule name you do not know: a handler that falls through to your router answers the platform with a ",[2416,3498,3499],{},"404",[2405,3501,3502,3505,3506,3508,3509,3512],{},[2449,3503,3504],{},"Refuse a tick that carries no tenant identity."," The tenant comes from the ",[2416,3507,2668],{}," header, and without it the data client has no tenant to be scoped to. The Inventories App answers ",[2416,3510,3511],{},"503"," here, and a tick that ignored the check would run against no tenant.",[2405,3514,3515,3517,3518,2636],{},[2416,3516,2459],{}," is the one chance you get to do anything when a tenant leaves. Keeping the rows is this guide's choice, so that a merchant who uninstalls and reinstalls still has their data. It is not a platform retention rule, and what the platform itself does with an uninstalled App's data is not documented here. See ",[2412,3519,1236],{"href":3520},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install#uninstall",[2435,3522,3524],{"id":3523},"_2-make-the-install-handler-safe-to-run-twice","2. Make the install handler safe to run twice",[2405,3526,3527,3528,3530,3531,3533],{},"The handler above calls ",[2416,3529,2528],{},". It is the function from ",[2412,3532,110],{"href":111}," and it already has the property that matters: it checks before it writes.",[2548,3535,3537],{"className":2550,"code":3536,"filename":2517,"language":2552,"meta":2553,"style":2553},"async function ensureDefaults(db) {\n  const created = [];\n  const existing = [];\n  for (const location of DEFAULT_LOCATIONS) {\n    const [found] = await db.locations.list({ where: { code: location.code }, limit: 1 });\n    if (found) existing.push(location.code);\n    else { await db.locations.create(location); created.push(location.code); }\n  }\n  return { created, existing };\n}\n",[2416,3538,3539,3555,3569,3582,3605,3674,3705,3754,3758,3773],{"__ignoreMap":2553},[2557,3540,3541,3543,3545,3547,3549,3551,3553],{"class":2559,"line":2560},[2557,3542,2564],{"class":2563},[2557,3544,2567],{"class":2563},[2557,3546,3165],{"class":2570},[2557,3548,2575],{"class":2574},[2557,3550,2943],{"class":2578},[2557,3552,2588],{"class":2574},[2557,3554,2591],{"class":2574},[2557,3556,3557,3559,3562,3564,3567],{"class":2559,"line":2594},[2557,3558,2597],{"class":2563},[2557,3560,3561],{"class":2603}," created",[2557,3563,2615],{"class":2574},[2557,3565,3566],{"class":2660}," []",[2557,3568,2621],{"class":2574},[2557,3570,3571,3573,3576,3578,3580],{"class":2559,"line":2624},[2557,3572,2597],{"class":2563},[2557,3574,3575],{"class":2603}," existing",[2557,3577,2615],{"class":2574},[2557,3579,3566],{"class":2660},[2557,3581,2621],{"class":2574},[2557,3583,3584,3587,3589,3592,3595,3598,3601,3603],{"class":2559,"line":2648},[2557,3585,3586],{"class":2752},"  for",[2557,3588,2709],{"class":2660},[2557,3590,3591],{"class":2563},"const",[2557,3593,3594],{"class":2603}," location",[2557,3596,3597],{"class":2574}," of",[2557,3599,3600],{"class":2603}," DEFAULT_LOCATIONS",[2557,3602,2830],{"class":2660},[2557,3604,2833],{"class":2574},[2557,3606,3607,3610,3613,3616,3619,3621,3624,3626,3628,3631,3633,3636,3638,3640,3643,3645,3647,3650,3652,3654,3656,3658,3660,3663,3665,3668,3670,3672],{"class":2559,"line":2699},[2557,3608,3609],{"class":2563},"    const",[2557,3611,3612],{"class":2574}," [",[2557,3614,3615],{"class":2603},"found",[2557,3617,3618],{"class":2574},"]",[2557,3620,2615],{"class":2574},[2557,3622,3623],{"class":2752}," await",[2557,3625,2585],{"class":2603},[2557,3627,2636],{"class":2574},[2557,3629,3630],{"class":2603},"locations",[2557,3632,2636],{"class":2574},[2557,3634,3635],{"class":2570},"list",[2557,3637,2575],{"class":2660},[2557,3639,2864],{"class":2574},[2557,3641,3642],{"class":2660}," where",[2557,3644,2870],{"class":2574},[2557,3646,2600],{"class":2574},[2557,3648,3649],{"class":2660}," code",[2557,3651,2870],{"class":2574},[2557,3653,3594],{"class":2603},[2557,3655,2636],{"class":2574},[2557,3657,2416],{"class":2603},[2557,3659,2880],{"class":2574},[2557,3661,3662],{"class":2660}," limit",[2557,3664,2870],{"class":2574},[2557,3666,3667],{"class":2883}," 1",[2557,3669,2612],{"class":2574},[2557,3671,2588],{"class":2660},[2557,3673,2621],{"class":2574},[2557,3675,3676,3678,3680,3682,3684,3687,3689,3692,3694,3697,3699,3701,3703],{"class":2559,"line":2776},[2557,3677,2839],{"class":2752},[2557,3679,2709],{"class":2660},[2557,3681,3615],{"class":2603},[2557,3683,2830],{"class":2660},[2557,3685,3686],{"class":2603},"existing",[2557,3688,2636],{"class":2574},[2557,3690,3691],{"class":2570},"push",[2557,3693,2575],{"class":2660},[2557,3695,3696],{"class":2603},"location",[2557,3698,2636],{"class":2574},[2557,3700,2416],{"class":2603},[2557,3702,2588],{"class":2660},[2557,3704,2621],{"class":2574},[2557,3706,3707,3710,3712,3714,3716,3718,3720,3722,3725,3727,3729,3731,3733,3735,3737,3739,3741,3743,3745,3747,3749,3751],{"class":2559,"line":2783},[2557,3708,3709],{"class":2752},"    else",[2557,3711,2600],{"class":2574},[2557,3713,3623],{"class":2752},[2557,3715,2585],{"class":2603},[2557,3717,2636],{"class":2574},[2557,3719,3630],{"class":2603},[2557,3721,2636],{"class":2574},[2557,3723,3724],{"class":2570},"create",[2557,3726,2575],{"class":2660},[2557,3728,3696],{"class":2603},[2557,3730,2588],{"class":2660},[2557,3732,3251],{"class":2574},[2557,3734,3561],{"class":2603},[2557,3736,2636],{"class":2574},[2557,3738,3691],{"class":2570},[2557,3740,2575],{"class":2660},[2557,3742,3696],{"class":2603},[2557,3744,2636],{"class":2574},[2557,3746,2416],{"class":2603},[2557,3748,2588],{"class":2660},[2557,3750,3251],{"class":2574},[2557,3752,3753],{"class":2574}," }\n",[2557,3755,3756],{"class":2559,"line":2790},[2557,3757,2999],{"class":2574},[2557,3759,3760,3762,3764,3766,3768,3770],{"class":2559,"line":2819},[2557,3761,3363],{"class":2752},[2557,3763,2600],{"class":2574},[2557,3765,3561],{"class":2603},[2557,3767,2582],{"class":2574},[2557,3769,3575],{"class":2603},[2557,3771,3772],{"class":2574}," };\n",[2557,3774,3775],{"class":2559,"line":2836},[2557,3776,3392],{"class":2574},[2405,3778,3779],{},"Because the event may arrive twice, and because it may not arrive at all, the same function is also behind a route that you or a first request can call:",[2548,3781,3783],{"className":2550,"code":3782,"filename":2517,"language":2552,"meta":2553,"style":2553},"\u002F\u002F Already in buildApp(db) from Build your first App, shown for reference:\napp.post('\u002Flocations\u002Fdefaults', async (c) => c.json(await ensureDefaults(db)));\n",[2416,3784,3785,3790],{"__ignoreMap":2553},[2557,3786,3787],{"class":2559,"line":2560},[2557,3788,3789],{"class":2786},"\u002F\u002F Already in buildApp(db) from Build your first App, shown for reference:\n",[2557,3791,3792,3795,3797,3800,3802,3804,3807,3809,3811,3813,3815,3818,3820,3822,3825,3827,3829,3831,3833,3835,3838],{"class":2559,"line":2594},[2557,3793,3794],{"class":2603},"app",[2557,3796,2636],{"class":2574},[2557,3798,3799],{"class":2570},"post",[2557,3801,2575],{"class":2603},[2557,3803,2664],{"class":2574},[2557,3805,3806],{"class":2667},"\u002Flocations\u002Fdefaults",[2557,3808,2664],{"class":2574},[2557,3810,2582],{"class":2574},[2557,3812,3407],{"class":2563},[2557,3814,2709],{"class":2574},[2557,3816,3817],{"class":2578},"c",[2557,3819,2588],{"class":2574},[2557,3821,3416],{"class":2563},[2557,3823,3824],{"class":2603}," c",[2557,3826,2636],{"class":2574},[2557,3828,2859],{"class":2570},[2557,3830,2575],{"class":2603},[2557,3832,2935],{"class":2752},[2557,3834,3165],{"class":2570},[2557,3836,3837],{"class":2603},"(db)))",[2557,3839,2621],{"class":2574},[2405,3841,3842,3843,3845],{},"If you built your capabilities by hand, the route needs a capability entry like any other, or the gateway answers ",[2416,3844,3499],{},". Build your first App declares it.",[2405,3847,3848,3849,3852,3853,2636],{},"Both paths may land, and the second one finds everything in place and creates nothing. That is the whole design: ",[2449,3850,3851],{},"the event is a convenience, the route is the guarantee."," After a Marketplace install, call the route once, as described in ",[2412,3854,1254],{"href":1255},[2405,3856,3857],{},"The same three assumptions apply to any handler you write for an event:",[2443,3859,3860,3866,3872],{},[2446,3861,3862,3865],{},[2449,3863,3864],{},"It may arrive twice."," Check before you write, or write in a way that a repeat cannot double.",[2446,3867,3868,3871],{},[2449,3869,3870],{},"It may arrive out of order."," State you derive from a sequence needs a timestamp or version in the payload, not an assumption about arrival order.",[2446,3873,3874,3877],{},[2449,3875,3876],{},"It may not arrive."," If your App is wrong without the reaction, the reaction does not belong only in an event handler. Put it in a route, and add a schedule that catches what the event missed (step 3).",[2435,3879,3881],{"id":3880},"_3-declare-a-schedule-and-write-a-job-that-survives-a-repeat","3. Declare a schedule and write a job that survives a repeat",[2405,3883,3884,3885,3888,3889,3892,3893,3896,3897,3900,3901,3903,3904,3907,3908,2870],{},"Declare the schedule in ",[2416,3886,3887],{},"manifest.json",". The cron is five fields, evaluated in ",[2449,3890,3891],{},"UTC",". ",[2416,3894,3895],{},"0 3 * * *"," is 03:00 UTC, which is 04:00 in Berlin in winter and 05:00 in summer. Add the ",[2416,3898,3899],{},"schedules"," entry, and change the ",[2416,3902,2418],{}," line in ",[2416,3905,3906],{},"permissions"," to include ",[2416,3909,3910],{},"delete",[2548,3912,3915],{"className":3913,"code":3914,"filename":3887,"language":2859,"meta":2553,"style":2553},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"schedules\": [\n  { \"name\": \"purge-old-transfers\", \"cron\": \"0 3 * * *\" }\n]\n",[2416,3916,3917,3932,3973],{"__ignoreMap":2553},[2557,3918,3919,3922,3924,3926,3929],{"class":2559,"line":2560},[2557,3920,3921],{"class":2574},"\"",[2557,3923,3899],{"class":2667},[2557,3925,3921],{"class":2574},[2557,3927,3928],{"class":2603},": ",[2557,3930,3931],{"class":2574},"[\n",[2557,3933,3934,3937,3940,3943,3945,3947,3949,3952,3954,3956,3958,3961,3963,3965,3967,3969,3971],{"class":2559,"line":2594},[2557,3935,3936],{"class":2574},"  {",[2557,3938,3939],{"class":2574}," \"",[2557,3941,3942],{"class":2563},"name",[2557,3944,3921],{"class":2574},[2557,3946,2870],{"class":2574},[2557,3948,3939],{"class":2574},[2557,3950,3951],{"class":2667},"purge-old-transfers",[2557,3953,3921],{"class":2574},[2557,3955,2582],{"class":2574},[2557,3957,3939],{"class":2574},[2557,3959,3960],{"class":2563},"cron",[2557,3962,3921],{"class":2574},[2557,3964,2870],{"class":2574},[2557,3966,3939],{"class":2574},[2557,3968,3895],{"class":2667},[2557,3970,3921],{"class":2574},[2557,3972,3753],{"class":2574},[2557,3974,3975],{"class":2559,"line":2624},[2557,3976,3977],{"class":2574},"]\n",[2548,3979,3981],{"className":3913,"code":3980,"filename":3887,"language":2859,"meta":2553,"style":2553},"{ \"entity\": \"transfers\", \"access\": [\"read\", \"create\", \"update\", \"delete\"] }\n",[2416,3982,3983],{"__ignoreMap":2553},[2557,3984,3985,3987,3989,3992,3994,3996,3998,4000,4002,4004,4006,4009,4011,4013,4015,4017,4020,4022,4024,4026,4028,4030,4032,4034,4037,4039,4041,4043,4045,4047,4049],{"class":2559,"line":2560},[2557,3986,2864],{"class":2574},[2557,3988,3939],{"class":2574},[2557,3990,3991],{"class":2563},"entity",[2557,3993,3921],{"class":2574},[2557,3995,2870],{"class":2574},[2557,3997,3939],{"class":2574},[2557,3999,2418],{"class":2667},[2557,4001,3921],{"class":2574},[2557,4003,2582],{"class":2574},[2557,4005,3939],{"class":2574},[2557,4007,4008],{"class":2563},"access",[2557,4010,3921],{"class":2574},[2557,4012,2870],{"class":2574},[2557,4014,3612],{"class":2574},[2557,4016,3921],{"class":2574},[2557,4018,4019],{"class":2667},"read",[2557,4021,3921],{"class":2574},[2557,4023,2582],{"class":2574},[2557,4025,3939],{"class":2574},[2557,4027,3724],{"class":2667},[2557,4029,3921],{"class":2574},[2557,4031,2582],{"class":2574},[2557,4033,3939],{"class":2574},[2557,4035,4036],{"class":2667},"update",[2557,4038,3921],{"class":2574},[2557,4040,2582],{"class":2574},[2557,4042,3939],{"class":2574},[2557,4044,3910],{"class":2667},[2557,4046,3921],{"class":2574},[2557,4048,3618],{"class":2574},[2557,4050,3753],{"class":2574},[2405,4052,4053,4054,4056,4057,4059,4060,4062,4063,4066],{},"The job deletes, so ",[2416,4055,2418],{}," needs the ",[2416,4058,3910],{}," access above, and the other entries in ",[2416,4061,3906],{}," stay as they are. The generated client refuses an operation your manifest does not grant, by throwing a permission error with status ",[2416,4064,4065],{},"403"," before the request is sent, so regenerate it after the change:",[2548,4068,4073],{"className":4069,"code":4070,"filename":4071,"language":4072,"meta":2553,"style":2553},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","revenexx apps generate\n","Regenerate the client","bash",[2416,4074,4075],{"__ignoreMap":2553},[2557,4076,4077,4081,4084],{"class":2559,"line":2560},[2557,4078,4080],{"class":4079},"sBMFI","revenexx",[2557,4082,4083],{"class":2667}," apps",[2557,4085,4086],{"class":2667}," generate\n",[2405,4088,4089],{},"Now the job. Four properties make it safe to run again after a failure, and each is visible in the code:",[2548,4091,4093],{"className":2550,"code":4092,"filename":2517,"language":2552,"meta":2553,"style":2553},"const SCHEDULE_PURGE = 'purge-old-transfers';\nconst PURGE_AFTER_DAYS = 90;\nconst PURGE_BATCH = 200;\n\nasync function purgeOldTransfers(db, now = new Date()) {\n  const cutoff = new Date(now.getTime() - PURGE_AFTER_DAYS * 86400000).toISOString();\n\n  const rows = await db.transfers.list({\n    where: { status: 'received', updated_at: { op: 'lt', value: cutoff } },\n    order: 'updated_at.asc',\n    limit: PURGE_BATCH,\n  });\n\n  let deleted = 0;\n  for (const row of rows) { await db.transfers.delete(row.id); deleted += 1; }\n\n  return { scanned: rows.length, deleted, more: rows.length === PURGE_BATCH };\n}\n",[2416,4094,4095,4112,4126,4140,4144,4176,4225,4229,4254,4310,4327,4339,4348,4352,4367,4423,4427,4468],{"__ignoreMap":2553},[2557,4096,4097,4099,4102,4104,4106,4108,4110],{"class":2559,"line":2560},[2557,4098,3591],{"class":2563},[2557,4100,4101],{"class":2603}," SCHEDULE_PURGE ",[2557,4103,3466],{"class":2574},[2557,4105,2727],{"class":2574},[2557,4107,3951],{"class":2667},[2557,4109,2664],{"class":2574},[2557,4111,2621],{"class":2574},[2557,4113,4114,4116,4119,4121,4124],{"class":2559,"line":2594},[2557,4115,3591],{"class":2563},[2557,4117,4118],{"class":2603}," PURGE_AFTER_DAYS ",[2557,4120,3466],{"class":2574},[2557,4122,4123],{"class":2883}," 90",[2557,4125,2621],{"class":2574},[2557,4127,4128,4130,4133,4135,4138],{"class":2559,"line":2624},[2557,4129,3591],{"class":2563},[2557,4131,4132],{"class":2603}," PURGE_BATCH ",[2557,4134,3466],{"class":2574},[2557,4136,4137],{"class":2883}," 200",[2557,4139,2621],{"class":2574},[2557,4141,4142],{"class":2559,"line":2648},[2557,4143,2780],{"emptyLinePlaceholder":2779},[2557,4145,4146,4148,4150,4152,4154,4156,4158,4161,4163,4166,4169,4172,4174],{"class":2559,"line":2699},[2557,4147,2564],{"class":2563},[2557,4149,2567],{"class":2563},[2557,4151,2938],{"class":2570},[2557,4153,2575],{"class":2574},[2557,4155,2943],{"class":2578},[2557,4157,2582],{"class":2574},[2557,4159,4160],{"class":2578}," now",[2557,4162,2615],{"class":2574},[2557,4164,4165],{"class":2574}," new",[2557,4167,4168],{"class":2570}," Date",[2557,4170,4171],{"class":2603},"()",[2557,4173,2588],{"class":2574},[2557,4175,2591],{"class":2574},[2557,4177,4178,4180,4183,4185,4187,4189,4191,4194,4196,4199,4202,4205,4208,4211,4214,4216,4218,4221,4223],{"class":2559,"line":2776},[2557,4179,2597],{"class":2563},[2557,4181,4182],{"class":2603}," cutoff",[2557,4184,2615],{"class":2574},[2557,4186,4165],{"class":2574},[2557,4188,4168],{"class":2570},[2557,4190,2575],{"class":2660},[2557,4192,4193],{"class":2603},"now",[2557,4195,2636],{"class":2574},[2557,4197,4198],{"class":2570},"getTime",[2557,4200,4201],{"class":2660},"() ",[2557,4203,4204],{"class":2574},"-",[2557,4206,4207],{"class":2603}," PURGE_AFTER_DAYS",[2557,4209,4210],{"class":2574}," *",[2557,4212,4213],{"class":2883}," 86400000",[2557,4215,2588],{"class":2660},[2557,4217,2636],{"class":2574},[2557,4219,4220],{"class":2570},"toISOString",[2557,4222,4171],{"class":2660},[2557,4224,2621],{"class":2574},[2557,4226,4227],{"class":2559,"line":2783},[2557,4228,2780],{"emptyLinePlaceholder":2779},[2557,4230,4231,4233,4236,4238,4240,4242,4244,4246,4248,4250,4252],{"class":2559,"line":2790},[2557,4232,2597],{"class":2563},[2557,4234,4235],{"class":2603}," rows",[2557,4237,2615],{"class":2574},[2557,4239,3623],{"class":2752},[2557,4241,2585],{"class":2603},[2557,4243,2636],{"class":2574},[2557,4245,2418],{"class":2603},[2557,4247,2636],{"class":2574},[2557,4249,3635],{"class":2570},[2557,4251,2575],{"class":2660},[2557,4253,2833],{"class":2574},[2557,4255,4256,4259,4261,4263,4266,4268,4270,4273,4275,4277,4280,4282,4284,4287,4289,4291,4294,4296,4298,4301,4303,4305,4307],{"class":2559,"line":2819},[2557,4257,4258],{"class":2660},"    where",[2557,4260,2870],{"class":2574},[2557,4262,2600],{"class":2574},[2557,4264,4265],{"class":2660}," status",[2557,4267,2870],{"class":2574},[2557,4269,2727],{"class":2574},[2557,4271,4272],{"class":2667},"received",[2557,4274,2664],{"class":2574},[2557,4276,2582],{"class":2574},[2557,4278,4279],{"class":2660}," updated_at",[2557,4281,2870],{"class":2574},[2557,4283,2600],{"class":2574},[2557,4285,4286],{"class":2660}," op",[2557,4288,2870],{"class":2574},[2557,4290,2727],{"class":2574},[2557,4292,4293],{"class":2667},"lt",[2557,4295,2664],{"class":2574},[2557,4297,2582],{"class":2574},[2557,4299,4300],{"class":2660}," value",[2557,4302,2870],{"class":2574},[2557,4304,4182],{"class":2603},[2557,4306,2612],{"class":2574},[2557,4308,4309],{"class":2574}," },\n",[2557,4311,4312,4315,4317,4319,4322,4324],{"class":2559,"line":2836},[2557,4313,4314],{"class":2660},"    order",[2557,4316,2870],{"class":2574},[2557,4318,2727],{"class":2574},[2557,4320,4321],{"class":2667},"updated_at.asc",[2557,4323,2664],{"class":2574},[2557,4325,4326],{"class":2574},",\n",[2557,4328,4329,4332,4334,4337],{"class":2559,"line":2891},[2557,4330,4331],{"class":2660},"    limit",[2557,4333,2870],{"class":2574},[2557,4335,4336],{"class":2603}," PURGE_BATCH",[2557,4338,4326],{"class":2574},[2557,4340,4341,4344,4346],{"class":2559,"line":2910},[2557,4342,4343],{"class":2574},"  }",[2557,4345,2588],{"class":2660},[2557,4347,2621],{"class":2574},[2557,4349,4350],{"class":2559,"line":2955},[2557,4351,2780],{"emptyLinePlaceholder":2779},[2557,4353,4354,4357,4360,4362,4365],{"class":2559,"line":2961},[2557,4355,4356],{"class":2563},"  let",[2557,4358,4359],{"class":2603}," deleted",[2557,4361,2615],{"class":2574},[2557,4363,4364],{"class":2883}," 0",[2557,4366,2621],{"class":2574},[2557,4368,4369,4371,4373,4375,4378,4380,4382,4384,4386,4388,4390,4392,4394,4396,4398,4400,4403,4405,4408,4410,4412,4414,4417,4419,4421],{"class":2559,"line":2996},[2557,4370,3586],{"class":2752},[2557,4372,2709],{"class":2660},[2557,4374,3591],{"class":2563},[2557,4376,4377],{"class":2603}," row",[2557,4379,3597],{"class":2574},[2557,4381,4235],{"class":2603},[2557,4383,2830],{"class":2660},[2557,4385,2864],{"class":2574},[2557,4387,3623],{"class":2752},[2557,4389,2585],{"class":2603},[2557,4391,2636],{"class":2574},[2557,4393,2418],{"class":2603},[2557,4395,2636],{"class":2574},[2557,4397,3910],{"class":2570},[2557,4399,2575],{"class":2660},[2557,4401,4402],{"class":2603},"row",[2557,4404,2636],{"class":2574},[2557,4406,4407],{"class":2603},"id",[2557,4409,2588],{"class":2660},[2557,4411,3251],{"class":2574},[2557,4413,4359],{"class":2603},[2557,4415,4416],{"class":2574}," +=",[2557,4418,3667],{"class":2883},[2557,4420,3251],{"class":2574},[2557,4422,3753],{"class":2574},[2557,4424,4425],{"class":2559,"line":3002},[2557,4426,2780],{"emptyLinePlaceholder":2779},[2557,4428,4429,4431,4433,4436,4438,4440,4442,4445,4447,4449,4451,4454,4456,4458,4460,4462,4464,4466],{"class":2559,"line":3007},[2557,4430,3363],{"class":2752},[2557,4432,2600],{"class":2574},[2557,4434,4435],{"class":2660}," scanned",[2557,4437,2870],{"class":2574},[2557,4439,4235],{"class":2603},[2557,4441,2636],{"class":2574},[2557,4443,4444],{"class":2603},"length",[2557,4446,2582],{"class":2574},[2557,4448,4359],{"class":2603},[2557,4450,2582],{"class":2574},[2557,4452,4453],{"class":2660}," more",[2557,4455,2870],{"class":2574},[2557,4457,4235],{"class":2603},[2557,4459,2636],{"class":2574},[2557,4461,4444],{"class":2603},[2557,4463,2900],{"class":2574},[2557,4465,4336],{"class":2603},[2557,4467,3772],{"class":2574},[2557,4469,4470],{"class":2559,"line":3013},[2557,4471,3392],{"class":2574},[2443,4473,4474,4480,4494,4500],{},[2446,4475,4476,4479],{},[2449,4477,4478],{},"It finds its work by state, not by memory."," The filter selects rows still in the state the job moves them out of. A run that dies halfway leaves the rest selectable, and the next run picks them up. A job that appends without checking does not have this property.",[2446,4481,4482,4485,4486,4489,4490,4493],{},[2449,4483,4484],{},"It is bounded."," One tick handles at most 200 rows and reports ",[2416,4487,4488],{},"more: true"," if there may be others. The next tick continues from what is left, but a daily cron clears at most 200 rows a day in total: raise ",[2416,4491,4492],{},"PURGE_BATCH"," or run the schedule more often if a tenant can accrue more. A job that tries to finish everything in one invocation is the one that times out on the tenant with the most data.",[2446,4495,4496,4499],{},[2449,4497,4498],{},"It fails loudly."," A delete that throws is not caught, so the invocation ends in an error rather than a report, and the next tick selects the same rows again. Do not catch the error and carry on: a job that reports success while deleting nothing is worse than one that fails.",[2446,4501,4502,4505,4506,4509,4510,4513],{},[2449,4503,4504],{},"It returns what happened."," The return value lands in the execution record you read in App Studio. ",[2416,4507,4508],{},"{ scanned: 200, deleted: 200, more: true }"," is worth having. ",[2416,4511,4512],{},"{}"," is not.",[4515,4516,4517,4527,4528,4531,4532,4535,4536,4539,4540,2636],"note",{},[2449,4518,4519,4520,4523,4524,2636],{},"The filter shape is ",[2416,4521,4522],{},"{ op, value }",", not ",[2416,4525,4526],{},"{ lt: value }"," The data client takes an operator as an object with an ",[2416,4529,4530],{},"op"," and a ",[2416,4533,4534],{},"value",". An operator written as ",[2416,4537,4538],{},"{ lt: cutoff }"," is not read as a comparison. See ",[2412,4541,1091],{"href":1092},[2405,4543,4544],{},"Whether two ticks of one schedule can ever overlap, whether a failed tick is retried, and whether a tick the platform missed is replayed are not documented (as of 2026-10). Design for none of them: the job above works from the data each time, so it does not need a replay, and a second run simply finds less to do. How long one tick may run before the platform stops it is also not documented (as of 2026-10), which is another reason for the batch limit.",[4546,4547,4549],"h3",{"id":4548},"one-tick-is-one-tenant","One tick is one tenant",[2405,4551,4552],{},"The platform fires the schedule for each installed tenant, with that tenant's context. Expect one tick per tenant per cron time, and see the paragraph above for what is not documented about overlap and retries. You do not enumerate tenants and you cannot: the data client in a tick is already scoped to one. So the job's cost is your largest tenant's work times the number of tenants, which is the reason for the batch limit. A schedule cannot do cross-tenant work, for the same reason a route cannot.",[4554,4555,4556,4559,4560,4563,4564,4566,4567,4569,4570,4573,4574,4576,4577,4579,4580,4582,4583,4585,4586,4589],"warning",{},[2449,4557,4558],{},"This job deletes data, and the delete is yours to scope."," Ninety days is a policy you chose, so say so wherever your App describes its retention. If the capability script that ",[2416,4561,4562],{},"revenexx create app"," generated builds CRUD for every permitted entity, granting ",[2416,4565,3910],{}," on ",[2416,4568,2418],{}," also generates a ",[2416,4571,4572],{},"DELETE"," capability for a route that does not exist. Keep ",[2416,4575,2418],{}," out of that generated set with the edit described in ",[2412,4578,124],{"href":125},". If your manifest declares a row event on ",[2416,4581,2418],{}," with ",[2416,4584,3910],{}," among its ",[2416,4587,4588],{},"on"," operations, the purge publishes that event for every deleted row, up to 200 per tick, whether or not anything subscribes. You may have declared none: the transfer events in the sibling guide are fired by the App itself. Check your manifest before you rely on either. And the batch limit is per tick, so a faster cron deletes proportionally more per day.",[4546,4591,4593],{"id":4592},"give-the-job-a-route-as-well","Give the job a route as well",[2405,4595,4596],{},"Put the same function behind a route. You get a way to run it on demand, to test it live without waiting for 03:00 UTC, and a way for an operator to start a pass by hand. Both Inventories schedules work this way.",[2548,4598,4600],{"className":2550,"code":4599,"filename":2517,"language":2552,"meta":2553,"style":2553},"\u002F\u002F Inside buildApp(db):\napp.post('\u002Flocations\u002Ftransfers\u002Fpurge', async (c) => c.json(await purgeOldTransfers(db)));\n",[2416,4601,4602,4607],{"__ignoreMap":2553},[2557,4603,4604],{"class":2559,"line":2560},[2557,4605,4606],{"class":2786},"\u002F\u002F Inside buildApp(db):\n",[2557,4608,4609,4611,4613,4615,4617,4619,4622,4624,4626,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650],{"class":2559,"line":2594},[2557,4610,3794],{"class":2603},[2557,4612,2636],{"class":2574},[2557,4614,3799],{"class":2570},[2557,4616,2575],{"class":2603},[2557,4618,2664],{"class":2574},[2557,4620,4621],{"class":2667},"\u002Flocations\u002Ftransfers\u002Fpurge",[2557,4623,2664],{"class":2574},[2557,4625,2582],{"class":2574},[2557,4627,3407],{"class":2563},[2557,4629,2709],{"class":2574},[2557,4631,3817],{"class":2578},[2557,4633,2588],{"class":2574},[2557,4635,3416],{"class":2563},[2557,4637,3824],{"class":2603},[2557,4639,2636],{"class":2574},[2557,4641,2859],{"class":2570},[2557,4643,2575],{"class":2603},[2557,4645,2935],{"class":2752},[2557,4647,2938],{"class":2570},[2557,4649,3837],{"class":2603},[2557,4651,2621],{"class":2574},[2405,4653,4654,4655,4657,4658,4661,4662,4665,4666,4669,4670,4672,4673,4675,4676,4679,4680,2636],{},"Declare it as a capability the way ",[2412,4656,124],{"href":125}," declares its routes (a ",[2416,4659,4660],{},"def('locations.transfers.purge', ...)"," entry in ",[2416,4663,4664],{},"scripts\u002Fcapabilities.js","), then run ",[2416,4667,4668],{},"npm run capabilities",". If your ",[2416,4671,4664],{}," is the one ",[2416,4674,4562],{}," generated, add the entry by hand to ",[2416,4677,4678],{},"manifest.capabilities.json"," instead, as the same guide describes. Without a capability the gateway answers ",[2416,4681,3499],{},[2435,4683,4685],{"id":4684},"_4-reconcile-what-an-event-may-have-missed","4. Reconcile what an event may have missed",[2405,4687,4688,4689,4692],{},"Because delivery is not settled, a schedule is the cheap insurance for any reaction you cannot afford to lose. The Procurement App does this: it declares listens for order cancellations, which are not delivered to it yet, and an hourly ",[2416,4690,4691],{},"reconcile"," schedule finds what those events would have told it by reading the orders.",[2405,4694,4695],{},"The pattern is a function that derives its work from the data and is safe to call at any time. If your App must stay consistent with something another App does, write that function once and give it three triggers:",[4697,4698,4699,4712],"table",{},[4700,4701,4702],"thead",{},[4703,4704,4705,4709],"tr",{},[4706,4707,4708],"th",{},"Trigger",[4706,4710,4711],{},"Role",[4713,4714,4715,4724,4732],"tbody",{},[4703,4716,4717,4721],{},[4718,4719,4720],"td",{},"A schedule",[4718,4722,4723],{},"The guarantee. It runs whether or not any event arrived",[4703,4725,4726,4729],{},[4718,4727,4728],{},"A route",[4718,4730,4731],{},"Manual and test runs",[4703,4733,4734,4737],{},[4718,4735,4736],{},"An event listen, if one is verified for your case",[4718,4738,4739],{},"A speed-up. Never the only path",[2435,4741,4743],{"id":4742},"_5-test-both-with-the-mock-adapter","5. Test both with the mock adapter",[2405,4745,4746,4747,4750,4751,4754],{},"The ",[2416,4748,4749],{},"mock"," adapter is an in-memory store, so the handler runs with no infrastructure. Build a context the way the platform does, with headers, and call ",[2416,4752,4753],{},"handle"," from step 1 with a mock client:",[2548,4756,4759],{"className":2550,"code":4757,"filename":4758,"language":2552,"meta":2553,"style":2553},"const { test } = require('node:test');\nconst assert = require('node:assert\u002Fstrict');\nconst { createDb } = require('..\u002Fsrc\u002Fdb.generated');\nconst { handle } = require('..\u002Fsrc\u002Fmain');\n\nfunction run(db, headers) {\n  let out;\n  const context = {\n    req: { method: 'POST', path: '\u002F', body: null, headers: { 'x-revenexx-context': 'tenant-jwt', ...headers } },\n    res: { json: (body, code = 200) => (out = { body, code }) },\n    log: () => {}, error: () => {},\n  };\n  return handle(context, db).then(() => out);\n}\n\nconst install = { 'x-revenexx-trigger': 'event', 'x-revenexx-event': 'apps.locations.installed' };\nconst tick = { 'x-revenexx-schedule': 'purge-old-transfers' };\n\ntest('the install event seeds once, even when delivered twice', async () => {\n  const db = createDb({ adapter: 'mock', seed: { locations: [] } });\n  assert.deepEqual((await run(db, install)).body.created, ['main']);\n  assert.deepEqual((await run(db, install)).body.created, []);\n});\n\ntest('an event the App does not act on is acknowledged and changes nothing', async () => {\n  const db = createDb({ adapter: 'mock', seed: { locations: [] } });\n  const r = await run(db, { 'x-revenexx-trigger': 'event', 'x-revenexx-event': 'orders.order.placed' });\n  assert.equal(r.body.ignored, true);\n  assert.equal((await db.locations.list({})).length, 0);\n});\n\ntest('a tick without tenant identity is refused, an unknown schedule is ignored', async () => {\n  const db = createDb({ adapter: 'mock', seed: { transfers: [] } });\n  assert.equal((await run(db, { ...tick, 'x-revenexx-context': '' })).code, 503);\n  assert.equal((await run(db, { 'x-revenexx-schedule': 'nope' })).body.ignored, true);\n});\n\ntest('the purge deletes only old received transfers, and a second tick finds nothing', async () => {\n  const old = new Date(Date.now() - 100 * 86400000).toISOString();\n  const db = createDb({\n    adapter: 'mock',\n    seed: {\n      transfers: [\n        { id: 't-old', status: 'received', updated_at: old },\n        { id: 't-shipped', status: 'shipped', updated_at: old },\n        { id: 't-new', status: 'received', updated_at: new Date().toISOString() },\n      ],\n    },\n  });\n\n  assert.equal((await run(db, tick)).body.deleted, 1);\n  assert.deepEqual((await db.transfers.list({})).map((t) => t.id).sort(), ['t-new', 't-shipped']);\n  assert.equal((await run(db, tick)).body.deleted, 0);\n});\n","test\u002Ftriggers.test.js",[2416,4760,4761,4790,4814,4842,4870,4874,4894,4903,4913,4987,5040,5066,5071,5104,5108,5112,5156,5183,5187,5210,5259,5312,5351,5359,5363,5386,5432,5490,5521,5561,5569,5573,5596,5643,5698,5755,5764,5769,5793,5837,5852,5868,5878,5889,5929,5968,6016,6024,6030,6039,6044,6087,6170,6211],{"__ignoreMap":2553},[2557,4762,4763,4765,4767,4770,4772,4774,4777,4779,4781,4784,4786,4788],{"class":2559,"line":2560},[2557,4764,3591],{"class":2563},[2557,4766,2600],{"class":2574},[2557,4768,4769],{"class":2603}," test ",[2557,4771,2948],{"class":2574},[2557,4773,2615],{"class":2574},[2557,4775,4776],{"class":2570}," require",[2557,4778,2575],{"class":2603},[2557,4780,2664],{"class":2574},[2557,4782,4783],{"class":2667},"node:test",[2557,4785,2664],{"class":2574},[2557,4787,2588],{"class":2603},[2557,4789,2621],{"class":2574},[2557,4791,4792,4794,4797,4799,4801,4803,4805,4808,4810,4812],{"class":2559,"line":2594},[2557,4793,3591],{"class":2563},[2557,4795,4796],{"class":2603}," assert ",[2557,4798,3466],{"class":2574},[2557,4800,4776],{"class":2570},[2557,4802,2575],{"class":2603},[2557,4804,2664],{"class":2574},[2557,4806,4807],{"class":2667},"node:assert\u002Fstrict",[2557,4809,2664],{"class":2574},[2557,4811,2588],{"class":2603},[2557,4813,2621],{"class":2574},[2557,4815,4816,4818,4820,4823,4825,4827,4829,4831,4833,4836,4838,4840],{"class":2559,"line":2624},[2557,4817,3591],{"class":2563},[2557,4819,2600],{"class":2574},[2557,4821,4822],{"class":2603}," createDb ",[2557,4824,2948],{"class":2574},[2557,4826,2615],{"class":2574},[2557,4828,4776],{"class":2570},[2557,4830,2575],{"class":2603},[2557,4832,2664],{"class":2574},[2557,4834,4835],{"class":2667},"..\u002Fsrc\u002Fdb.generated",[2557,4837,2664],{"class":2574},[2557,4839,2588],{"class":2603},[2557,4841,2621],{"class":2574},[2557,4843,4844,4846,4848,4851,4853,4855,4857,4859,4861,4864,4866,4868],{"class":2559,"line":2648},[2557,4845,3591],{"class":2563},[2557,4847,2600],{"class":2574},[2557,4849,4850],{"class":2603}," handle ",[2557,4852,2948],{"class":2574},[2557,4854,2615],{"class":2574},[2557,4856,4776],{"class":2570},[2557,4858,2575],{"class":2603},[2557,4860,2664],{"class":2574},[2557,4862,4863],{"class":2667},"..\u002Fsrc\u002Fmain",[2557,4865,2664],{"class":2574},[2557,4867,2588],{"class":2603},[2557,4869,2621],{"class":2574},[2557,4871,4872],{"class":2559,"line":2699},[2557,4873,2780],{"emptyLinePlaceholder":2779},[2557,4875,4876,4879,4882,4884,4886,4888,4890,4892],{"class":2559,"line":2776},[2557,4877,4878],{"class":2563},"function",[2557,4880,4881],{"class":2570}," run",[2557,4883,2575],{"class":2574},[2557,4885,2943],{"class":2578},[2557,4887,2582],{"class":2574},[2557,4889,2629],{"class":2578},[2557,4891,2588],{"class":2574},[2557,4893,2591],{"class":2574},[2557,4895,4896,4898,4901],{"class":2559,"line":2783},[2557,4897,4356],{"class":2563},[2557,4899,4900],{"class":2603}," out",[2557,4902,2621],{"class":2574},[2557,4904,4905,4907,4909,4911],{"class":2559,"line":2790},[2557,4906,2597],{"class":2563},[2557,4908,2618],{"class":2603},[2557,4910,2615],{"class":2574},[2557,4912,2591],{"class":2574},[2557,4914,4915,4918,4920,4922,4925,4927,4929,4932,4934,4936,4938,4940,4942,4944,4946,4948,4951,4953,4956,4958,4960,4962,4964,4966,4968,4970,4972,4975,4977,4979,4981,4983,4985],{"class":2559,"line":2819},[2557,4916,4917],{"class":2660},"    req",[2557,4919,2870],{"class":2574},[2557,4921,2600],{"class":2574},[2557,4923,4924],{"class":2660}," method",[2557,4926,2870],{"class":2574},[2557,4928,2727],{"class":2574},[2557,4930,4931],{"class":2667},"POST",[2557,4933,2664],{"class":2574},[2557,4935,2582],{"class":2574},[2557,4937,2704],{"class":2660},[2557,4939,2870],{"class":2574},[2557,4941,2727],{"class":2574},[2557,4943,2730],{"class":2667},[2557,4945,2664],{"class":2574},[2557,4947,2582],{"class":2574},[2557,4949,4950],{"class":2660}," body",[2557,4952,2870],{"class":2574},[2557,4954,4955],{"class":2574}," null,",[2557,4957,2629],{"class":2660},[2557,4959,2870],{"class":2574},[2557,4961,2600],{"class":2574},[2557,4963,2727],{"class":2574},[2557,4965,2668],{"class":2660},[2557,4967,2664],{"class":2574},[2557,4969,2870],{"class":2574},[2557,4971,2727],{"class":2574},[2557,4973,4974],{"class":2667},"tenant-jwt",[2557,4976,2664],{"class":2574},[2557,4978,2582],{"class":2574},[2557,4980,2930],{"class":2574},[2557,4982,2639],{"class":2603},[2557,4984,2612],{"class":2574},[2557,4986,4309],{"class":2574},[2557,4988,4989,4992,4994,4996,4999,5001,5003,5006,5008,5010,5012,5014,5016,5018,5020,5023,5025,5027,5029,5031,5033,5035,5037],{"class":2559,"line":2836},[2557,4990,4991],{"class":2660},"    res",[2557,4993,2870],{"class":2574},[2557,4995,2600],{"class":2574},[2557,4997,4998],{"class":2570}," json",[2557,5000,2870],{"class":2574},[2557,5002,2709],{"class":2574},[2557,5004,5005],{"class":2578},"body",[2557,5007,2582],{"class":2574},[2557,5009,3649],{"class":2578},[2557,5011,2615],{"class":2574},[2557,5013,4137],{"class":2883},[2557,5015,2588],{"class":2574},[2557,5017,3416],{"class":2563},[2557,5019,2709],{"class":2660},[2557,5021,5022],{"class":2603},"out",[2557,5024,2615],{"class":2574},[2557,5026,2600],{"class":2574},[2557,5028,4950],{"class":2603},[2557,5030,2582],{"class":2574},[2557,5032,3649],{"class":2603},[2557,5034,2612],{"class":2574},[2557,5036,2830],{"class":2660},[2557,5038,5039],{"class":2574},"},\n",[2557,5041,5042,5045,5047,5050,5052,5055,5057,5059,5061,5063],{"class":2559,"line":2891},[2557,5043,5044],{"class":2570},"    log",[2557,5046,2870],{"class":2574},[2557,5048,5049],{"class":2574}," ()",[2557,5051,3416],{"class":2563},[2557,5053,5054],{"class":2574}," {},",[2557,5056,2867],{"class":2570},[2557,5058,2870],{"class":2574},[2557,5060,5049],{"class":2574},[2557,5062,3416],{"class":2563},[2557,5064,5065],{"class":2574}," {},\n",[2557,5067,5068],{"class":2559,"line":2910},[2557,5069,5070],{"class":2574},"  };\n",[2557,5072,5073,5075,5077,5079,5081,5083,5085,5087,5089,5092,5094,5096,5098,5100,5102],{"class":2559,"line":2955},[2557,5074,3363],{"class":2752},[2557,5076,2571],{"class":2570},[2557,5078,2575],{"class":2660},[2557,5080,2579],{"class":2603},[2557,5082,2582],{"class":2574},[2557,5084,2585],{"class":2603},[2557,5086,2588],{"class":2660},[2557,5088,2636],{"class":2574},[2557,5090,5091],{"class":2570},"then",[2557,5093,2575],{"class":2660},[2557,5095,4171],{"class":2574},[2557,5097,3416],{"class":2563},[2557,5099,4900],{"class":2603},[2557,5101,2588],{"class":2660},[2557,5103,2621],{"class":2574},[2557,5105,5106],{"class":2559,"line":2961},[2557,5107,3392],{"class":2574},[2557,5109,5110],{"class":2559,"line":2996},[2557,5111,2780],{"emptyLinePlaceholder":2779},[2557,5113,5114,5116,5119,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147,5149,5152,5154],{"class":2559,"line":3002},[2557,5115,3591],{"class":2563},[2557,5117,5118],{"class":2603}," install ",[2557,5120,3466],{"class":2574},[2557,5122,2600],{"class":2574},[2557,5124,2727],{"class":2574},[2557,5126,3029],{"class":2660},[2557,5128,2664],{"class":2574},[2557,5130,2870],{"class":2574},[2557,5132,2727],{"class":2574},[2557,5134,3085],{"class":2667},[2557,5136,2664],{"class":2574},[2557,5138,2582],{"class":2574},[2557,5140,2727],{"class":2574},[2557,5142,3058],{"class":2660},[2557,5144,2664],{"class":2574},[2557,5146,2870],{"class":2574},[2557,5148,2727],{"class":2574},[2557,5150,5151],{"class":2667},"apps.locations.installed",[2557,5153,2664],{"class":2574},[2557,5155,3772],{"class":2574},[2557,5157,5158,5160,5163,5165,5167,5169,5171,5173,5175,5177,5179,5181],{"class":2559,"line":3007},[2557,5159,3591],{"class":2563},[2557,5161,5162],{"class":2603}," tick ",[2557,5164,3466],{"class":2574},[2557,5166,2600],{"class":2574},[2557,5168,2727],{"class":2574},[2557,5170,2806],{"class":2660},[2557,5172,2664],{"class":2574},[2557,5174,2870],{"class":2574},[2557,5176,2727],{"class":2574},[2557,5178,3951],{"class":2667},[2557,5180,2664],{"class":2574},[2557,5182,3772],{"class":2574},[2557,5184,5185],{"class":2559,"line":3013},[2557,5186,2780],{"emptyLinePlaceholder":2779},[2557,5188,5189,5191,5193,5195,5198,5200,5202,5204,5206,5208],{"class":2559,"line":3042},[2557,5190,3129],{"class":2570},[2557,5192,2575],{"class":2603},[2557,5194,2664],{"class":2574},[2557,5196,5197],{"class":2667},"the install event seeds once, even when delivered twice",[2557,5199,2664],{"class":2574},[2557,5201,2582],{"class":2574},[2557,5203,3407],{"class":2563},[2557,5205,5049],{"class":2574},[2557,5207,3416],{"class":2563},[2557,5209,2591],{"class":2574},[2557,5211,5212,5214,5216,5218,5220,5222,5224,5226,5228,5230,5232,5234,5236,5239,5241,5243,5246,5248,5251,5253,5255,5257],{"class":2559,"line":3071},[2557,5213,2597],{"class":2563},[2557,5215,2585],{"class":2603},[2557,5217,2615],{"class":2574},[2557,5219,3426],{"class":2570},[2557,5221,2575],{"class":2660},[2557,5223,2864],{"class":2574},[2557,5225,3433],{"class":2660},[2557,5227,2870],{"class":2574},[2557,5229,2727],{"class":2574},[2557,5231,4749],{"class":2667},[2557,5233,2664],{"class":2574},[2557,5235,2582],{"class":2574},[2557,5237,5238],{"class":2660}," seed",[2557,5240,2870],{"class":2574},[2557,5242,2600],{"class":2574},[2557,5244,5245],{"class":2660}," locations",[2557,5247,2870],{"class":2574},[2557,5249,5250],{"class":2660}," [] ",[2557,5252,2948],{"class":2574},[2557,5254,2612],{"class":2574},[2557,5256,2588],{"class":2660},[2557,5258,2621],{"class":2574},[2557,5260,5261,5264,5266,5269,5272,5274,5276,5278,5280,5282,5285,5287,5289,5291,5293,5296,5298,5300,5302,5305,5307,5310],{"class":2559,"line":3099},[2557,5262,5263],{"class":2603},"  assert",[2557,5265,2636],{"class":2574},[2557,5267,5268],{"class":2570},"deepEqual",[2557,5270,5271],{"class":2660},"((",[2557,5273,2935],{"class":2752},[2557,5275,4881],{"class":2570},[2557,5277,2575],{"class":2660},[2557,5279,2943],{"class":2603},[2557,5281,2582],{"class":2574},[2557,5283,5284],{"class":2603}," install",[2557,5286,3452],{"class":2660},[2557,5288,2636],{"class":2574},[2557,5290,5005],{"class":2603},[2557,5292,2636],{"class":2574},[2557,5294,5295],{"class":2603},"created",[2557,5297,2582],{"class":2574},[2557,5299,3612],{"class":2660},[2557,5301,2664],{"class":2574},[2557,5303,5304],{"class":2667},"main",[2557,5306,2664],{"class":2574},[2557,5308,5309],{"class":2660},"])",[2557,5311,2621],{"class":2574},[2557,5313,5314,5316,5318,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340,5342,5344,5346,5349],{"class":2559,"line":3140},[2557,5315,5263],{"class":2603},[2557,5317,2636],{"class":2574},[2557,5319,5268],{"class":2570},[2557,5321,5271],{"class":2660},[2557,5323,2935],{"class":2752},[2557,5325,4881],{"class":2570},[2557,5327,2575],{"class":2660},[2557,5329,2943],{"class":2603},[2557,5331,2582],{"class":2574},[2557,5333,5284],{"class":2603},[2557,5335,3452],{"class":2660},[2557,5337,2636],{"class":2574},[2557,5339,5005],{"class":2603},[2557,5341,2636],{"class":2574},[2557,5343,5295],{"class":2603},[2557,5345,2582],{"class":2574},[2557,5347,5348],{"class":2660}," [])",[2557,5350,2621],{"class":2574},[2557,5352,5353,5355,5357],{"class":2559,"line":3180},[2557,5354,2948],{"class":2574},[2557,5356,2588],{"class":2603},[2557,5358,2621],{"class":2574},[2557,5360,5361],{"class":2559,"line":3185},[2557,5362,2780],{"emptyLinePlaceholder":2779},[2557,5364,5365,5367,5369,5371,5374,5376,5378,5380,5382,5384],{"class":2559,"line":3221},[2557,5366,3129],{"class":2570},[2557,5368,2575],{"class":2603},[2557,5370,2664],{"class":2574},[2557,5372,5373],{"class":2667},"an event the App does not act on is acknowledged and changes nothing",[2557,5375,2664],{"class":2574},[2557,5377,2582],{"class":2574},[2557,5379,3407],{"class":2563},[2557,5381,5049],{"class":2574},[2557,5383,3416],{"class":2563},[2557,5385,2591],{"class":2574},[2557,5387,5388,5390,5392,5394,5396,5398,5400,5402,5404,5406,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428,5430],{"class":2559,"line":3257},[2557,5389,2597],{"class":2563},[2557,5391,2585],{"class":2603},[2557,5393,2615],{"class":2574},[2557,5395,3426],{"class":2570},[2557,5397,2575],{"class":2660},[2557,5399,2864],{"class":2574},[2557,5401,3433],{"class":2660},[2557,5403,2870],{"class":2574},[2557,5405,2727],{"class":2574},[2557,5407,4749],{"class":2667},[2557,5409,2664],{"class":2574},[2557,5411,2582],{"class":2574},[2557,5413,5238],{"class":2660},[2557,5415,2870],{"class":2574},[2557,5417,2600],{"class":2574},[2557,5419,5245],{"class":2660},[2557,5421,2870],{"class":2574},[2557,5423,5250],{"class":2660},[2557,5425,2948],{"class":2574},[2557,5427,2612],{"class":2574},[2557,5429,2588],{"class":2660},[2557,5431,2621],{"class":2574},[2557,5433,5434,5436,5439,5441,5443,5445,5447,5449,5451,5453,5455,5457,5459,5461,5463,5465,5467,5469,5471,5473,5475,5477,5479,5482,5484,5486,5488],{"class":2559,"line":3262},[2557,5435,2597],{"class":2563},[2557,5437,5438],{"class":2603}," r",[2557,5440,2615],{"class":2574},[2557,5442,3623],{"class":2752},[2557,5444,4881],{"class":2570},[2557,5446,2575],{"class":2660},[2557,5448,2943],{"class":2603},[2557,5450,2582],{"class":2574},[2557,5452,2600],{"class":2574},[2557,5454,2727],{"class":2574},[2557,5456,3029],{"class":2660},[2557,5458,2664],{"class":2574},[2557,5460,2870],{"class":2574},[2557,5462,2727],{"class":2574},[2557,5464,3085],{"class":2667},[2557,5466,2664],{"class":2574},[2557,5468,2582],{"class":2574},[2557,5470,2727],{"class":2574},[2557,5472,3058],{"class":2660},[2557,5474,2664],{"class":2574},[2557,5476,2870],{"class":2574},[2557,5478,2727],{"class":2574},[2557,5480,5481],{"class":2667},"orders.order.placed",[2557,5483,2664],{"class":2574},[2557,5485,2612],{"class":2574},[2557,5487,2588],{"class":2660},[2557,5489,2621],{"class":2574},[2557,5491,5492,5494,5496,5499,5501,5504,5506,5508,5510,5513,5515,5517,5519],{"class":2559,"line":3293},[2557,5493,5263],{"class":2603},[2557,5495,2636],{"class":2574},[2557,5497,5498],{"class":2570},"equal",[2557,5500,2575],{"class":2660},[2557,5502,5503],{"class":2603},"r",[2557,5505,2636],{"class":2574},[2557,5507,5005],{"class":2603},[2557,5509,2636],{"class":2574},[2557,5511,5512],{"class":2603},"ignored",[2557,5514,2582],{"class":2574},[2557,5516,2987],{"class":2986},[2557,5518,2588],{"class":2660},[2557,5520,2621],{"class":2574},[2557,5522,5523,5525,5527,5529,5531,5533,5535,5537,5539,5541,5543,5545,5547,5549,5551,5553,5555,5557,5559],{"class":2559,"line":3298},[2557,5524,5263],{"class":2603},[2557,5526,2636],{"class":2574},[2557,5528,5498],{"class":2570},[2557,5530,5271],{"class":2660},[2557,5532,2935],{"class":2752},[2557,5534,2585],{"class":2603},[2557,5536,2636],{"class":2574},[2557,5538,3630],{"class":2603},[2557,5540,2636],{"class":2574},[2557,5542,3635],{"class":2570},[2557,5544,2575],{"class":2660},[2557,5546,4512],{"class":2574},[2557,5548,3452],{"class":2660},[2557,5550,2636],{"class":2574},[2557,5552,4444],{"class":2603},[2557,5554,2582],{"class":2574},[2557,5556,4364],{"class":2883},[2557,5558,2588],{"class":2660},[2557,5560,2621],{"class":2574},[2557,5562,5563,5565,5567],{"class":2559,"line":3303},[2557,5564,2948],{"class":2574},[2557,5566,2588],{"class":2603},[2557,5568,2621],{"class":2574},[2557,5570,5571],{"class":2559,"line":3360},[2557,5572,2780],{"emptyLinePlaceholder":2779},[2557,5574,5575,5577,5579,5581,5584,5586,5588,5590,5592,5594],{"class":2559,"line":3389},[2557,5576,3129],{"class":2570},[2557,5578,2575],{"class":2603},[2557,5580,2664],{"class":2574},[2557,5582,5583],{"class":2667},"a tick without tenant identity is refused, an unknown schedule is ignored",[2557,5585,2664],{"class":2574},[2557,5587,2582],{"class":2574},[2557,5589,3407],{"class":2563},[2557,5591,5049],{"class":2574},[2557,5593,3416],{"class":2563},[2557,5595,2591],{"class":2574},[2557,5597,5598,5600,5602,5604,5606,5608,5610,5612,5614,5616,5618,5620,5622,5624,5626,5628,5631,5633,5635,5637,5639,5641],{"class":2559,"line":3395},[2557,5599,2597],{"class":2563},[2557,5601,2585],{"class":2603},[2557,5603,2615],{"class":2574},[2557,5605,3426],{"class":2570},[2557,5607,2575],{"class":2660},[2557,5609,2864],{"class":2574},[2557,5611,3433],{"class":2660},[2557,5613,2870],{"class":2574},[2557,5615,2727],{"class":2574},[2557,5617,4749],{"class":2667},[2557,5619,2664],{"class":2574},[2557,5621,2582],{"class":2574},[2557,5623,5238],{"class":2660},[2557,5625,2870],{"class":2574},[2557,5627,2600],{"class":2574},[2557,5629,5630],{"class":2660}," transfers",[2557,5632,2870],{"class":2574},[2557,5634,5250],{"class":2660},[2557,5636,2948],{"class":2574},[2557,5638,2612],{"class":2574},[2557,5640,2588],{"class":2660},[2557,5642,2621],{"class":2574},[2557,5644,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665,5667,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688,5690,5692,5694,5696],{"class":2559,"line":3400},[2557,5646,5263],{"class":2603},[2557,5648,2636],{"class":2574},[2557,5650,5498],{"class":2570},[2557,5652,5271],{"class":2660},[2557,5654,2935],{"class":2752},[2557,5656,4881],{"class":2570},[2557,5658,2575],{"class":2660},[2557,5660,2943],{"class":2603},[2557,5662,2582],{"class":2574},[2557,5664,2600],{"class":2574},[2557,5666,2930],{"class":2574},[2557,5668,5669],{"class":2603},"tick",[2557,5671,2582],{"class":2574},[2557,5673,2727],{"class":2574},[2557,5675,2668],{"class":2660},[2557,5677,2664],{"class":2574},[2557,5679,2870],{"class":2574},[2557,5681,2694],{"class":2574},[2557,5683,2612],{"class":2574},[2557,5685,3452],{"class":2660},[2557,5687,2636],{"class":2574},[2557,5689,2416],{"class":2603},[2557,5691,2582],{"class":2574},[2557,5693,2884],{"class":2883},[2557,5695,2588],{"class":2660},[2557,5697,2621],{"class":2574},[2557,5699,5700,5702,5704,5706,5708,5710,5712,5714,5716,5718,5720,5722,5724,5726,5728,5730,5733,5735,5737,5739,5741,5743,5745,5747,5749,5751,5753],{"class":2559,"line":3457},[2557,5701,5263],{"class":2603},[2557,5703,2636],{"class":2574},[2557,5705,5498],{"class":2570},[2557,5707,5271],{"class":2660},[2557,5709,2935],{"class":2752},[2557,5711,4881],{"class":2570},[2557,5713,2575],{"class":2660},[2557,5715,2943],{"class":2603},[2557,5717,2582],{"class":2574},[2557,5719,2600],{"class":2574},[2557,5721,2727],{"class":2574},[2557,5723,2806],{"class":2660},[2557,5725,2664],{"class":2574},[2557,5727,2870],{"class":2574},[2557,5729,2727],{"class":2574},[2557,5731,5732],{"class":2667},"nope",[2557,5734,2664],{"class":2574},[2557,5736,2612],{"class":2574},[2557,5738,3452],{"class":2660},[2557,5740,2636],{"class":2574},[2557,5742,5005],{"class":2603},[2557,5744,2636],{"class":2574},[2557,5746,5512],{"class":2603},[2557,5748,2582],{"class":2574},[2557,5750,2987],{"class":2986},[2557,5752,2588],{"class":2660},[2557,5754,2621],{"class":2574},[2557,5756,5758,5760,5762],{"class":2559,"line":5757},36,[2557,5759,2948],{"class":2574},[2557,5761,2588],{"class":2603},[2557,5763,2621],{"class":2574},[2557,5765,5767],{"class":2559,"line":5766},37,[2557,5768,2780],{"emptyLinePlaceholder":2779},[2557,5770,5772,5774,5776,5778,5781,5783,5785,5787,5789,5791],{"class":2559,"line":5771},38,[2557,5773,3129],{"class":2570},[2557,5775,2575],{"class":2603},[2557,5777,2664],{"class":2574},[2557,5779,5780],{"class":2667},"the purge deletes only old received transfers, and a second tick finds nothing",[2557,5782,2664],{"class":2574},[2557,5784,2582],{"class":2574},[2557,5786,3407],{"class":2563},[2557,5788,5049],{"class":2574},[2557,5790,3416],{"class":2563},[2557,5792,2591],{"class":2574},[2557,5794,5796,5798,5801,5803,5805,5807,5809,5812,5814,5816,5818,5820,5823,5825,5827,5829,5831,5833,5835],{"class":2559,"line":5795},39,[2557,5797,2597],{"class":2563},[2557,5799,5800],{"class":2603}," old",[2557,5802,2615],{"class":2574},[2557,5804,4165],{"class":2574},[2557,5806,4168],{"class":2570},[2557,5808,2575],{"class":2660},[2557,5810,5811],{"class":2603},"Date",[2557,5813,2636],{"class":2574},[2557,5815,4193],{"class":2570},[2557,5817,4201],{"class":2660},[2557,5819,4204],{"class":2574},[2557,5821,5822],{"class":2883}," 100",[2557,5824,4210],{"class":2574},[2557,5826,4213],{"class":2883},[2557,5828,2588],{"class":2660},[2557,5830,2636],{"class":2574},[2557,5832,4220],{"class":2570},[2557,5834,4171],{"class":2660},[2557,5836,2621],{"class":2574},[2557,5838,5840,5842,5844,5846,5848,5850],{"class":2559,"line":5839},40,[2557,5841,2597],{"class":2563},[2557,5843,2585],{"class":2603},[2557,5845,2615],{"class":2574},[2557,5847,3426],{"class":2570},[2557,5849,2575],{"class":2660},[2557,5851,2833],{"class":2574},[2557,5853,5855,5858,5860,5862,5864,5866],{"class":2559,"line":5854},41,[2557,5856,5857],{"class":2660},"    adapter",[2557,5859,2870],{"class":2574},[2557,5861,2727],{"class":2574},[2557,5863,4749],{"class":2667},[2557,5865,2664],{"class":2574},[2557,5867,4326],{"class":2574},[2557,5869,5871,5874,5876],{"class":2559,"line":5870},42,[2557,5872,5873],{"class":2660},"    seed",[2557,5875,2870],{"class":2574},[2557,5877,2591],{"class":2574},[2557,5879,5881,5884,5886],{"class":2559,"line":5880},43,[2557,5882,5883],{"class":2660},"      transfers",[2557,5885,2870],{"class":2574},[2557,5887,5888],{"class":2660}," [\n",[2557,5890,5892,5895,5898,5900,5902,5905,5907,5909,5911,5913,5915,5917,5919,5921,5923,5925,5927],{"class":2559,"line":5891},44,[2557,5893,5894],{"class":2574},"        {",[2557,5896,5897],{"class":2660}," id",[2557,5899,2870],{"class":2574},[2557,5901,2727],{"class":2574},[2557,5903,5904],{"class":2667},"t-old",[2557,5906,2664],{"class":2574},[2557,5908,2582],{"class":2574},[2557,5910,4265],{"class":2660},[2557,5912,2870],{"class":2574},[2557,5914,2727],{"class":2574},[2557,5916,4272],{"class":2667},[2557,5918,2664],{"class":2574},[2557,5920,2582],{"class":2574},[2557,5922,4279],{"class":2660},[2557,5924,2870],{"class":2574},[2557,5926,5800],{"class":2603},[2557,5928,4309],{"class":2574},[2557,5930,5932,5934,5936,5938,5940,5943,5945,5947,5949,5951,5953,5956,5958,5960,5962,5964,5966],{"class":2559,"line":5931},45,[2557,5933,5894],{"class":2574},[2557,5935,5897],{"class":2660},[2557,5937,2870],{"class":2574},[2557,5939,2727],{"class":2574},[2557,5941,5942],{"class":2667},"t-shipped",[2557,5944,2664],{"class":2574},[2557,5946,2582],{"class":2574},[2557,5948,4265],{"class":2660},[2557,5950,2870],{"class":2574},[2557,5952,2727],{"class":2574},[2557,5954,5955],{"class":2667},"shipped",[2557,5957,2664],{"class":2574},[2557,5959,2582],{"class":2574},[2557,5961,4279],{"class":2660},[2557,5963,2870],{"class":2574},[2557,5965,5800],{"class":2603},[2557,5967,4309],{"class":2574},[2557,5969,5971,5973,5975,5977,5979,5982,5984,5986,5988,5990,5992,5994,5996,5998,6000,6002,6004,6006,6008,6010,6012,6014],{"class":2559,"line":5970},46,[2557,5972,5894],{"class":2574},[2557,5974,5897],{"class":2660},[2557,5976,2870],{"class":2574},[2557,5978,2727],{"class":2574},[2557,5980,5981],{"class":2667},"t-new",[2557,5983,2664],{"class":2574},[2557,5985,2582],{"class":2574},[2557,5987,4265],{"class":2660},[2557,5989,2870],{"class":2574},[2557,5991,2727],{"class":2574},[2557,5993,4272],{"class":2667},[2557,5995,2664],{"class":2574},[2557,5997,2582],{"class":2574},[2557,5999,4279],{"class":2660},[2557,6001,2870],{"class":2574},[2557,6003,4165],{"class":2574},[2557,6005,4168],{"class":2570},[2557,6007,4171],{"class":2660},[2557,6009,2636],{"class":2574},[2557,6011,4220],{"class":2570},[2557,6013,4201],{"class":2660},[2557,6015,5039],{"class":2574},[2557,6017,6019,6022],{"class":2559,"line":6018},47,[2557,6020,6021],{"class":2660},"      ]",[2557,6023,4326],{"class":2574},[2557,6025,6027],{"class":2559,"line":6026},48,[2557,6028,6029],{"class":2574},"    },\n",[2557,6031,6033,6035,6037],{"class":2559,"line":6032},49,[2557,6034,4343],{"class":2574},[2557,6036,2588],{"class":2660},[2557,6038,2621],{"class":2574},[2557,6040,6042],{"class":2559,"line":6041},50,[2557,6043,2780],{"emptyLinePlaceholder":2779},[2557,6045,6047,6049,6051,6053,6055,6057,6059,6061,6063,6065,6068,6070,6072,6074,6076,6079,6081,6083,6085],{"class":2559,"line":6046},51,[2557,6048,5263],{"class":2603},[2557,6050,2636],{"class":2574},[2557,6052,5498],{"class":2570},[2557,6054,5271],{"class":2660},[2557,6056,2935],{"class":2752},[2557,6058,4881],{"class":2570},[2557,6060,2575],{"class":2660},[2557,6062,2943],{"class":2603},[2557,6064,2582],{"class":2574},[2557,6066,6067],{"class":2603}," tick",[2557,6069,3452],{"class":2660},[2557,6071,2636],{"class":2574},[2557,6073,5005],{"class":2603},[2557,6075,2636],{"class":2574},[2557,6077,6078],{"class":2603},"deleted",[2557,6080,2582],{"class":2574},[2557,6082,3667],{"class":2883},[2557,6084,2588],{"class":2660},[2557,6086,2621],{"class":2574},[2557,6088,6090,6092,6094,6096,6098,6100,6102,6104,6106,6108,6110,6112,6114,6116,6118,6121,6123,6125,6128,6130,6132,6135,6137,6139,6141,6143,6146,6148,6150,6152,6154,6156,6158,6160,6162,6164,6166,6168],{"class":2559,"line":6089},52,[2557,6091,5263],{"class":2603},[2557,6093,2636],{"class":2574},[2557,6095,5268],{"class":2570},[2557,6097,5271],{"class":2660},[2557,6099,2935],{"class":2752},[2557,6101,2585],{"class":2603},[2557,6103,2636],{"class":2574},[2557,6105,2418],{"class":2603},[2557,6107,2636],{"class":2574},[2557,6109,3635],{"class":2570},[2557,6111,2575],{"class":2660},[2557,6113,4512],{"class":2574},[2557,6115,3452],{"class":2660},[2557,6117,2636],{"class":2574},[2557,6119,6120],{"class":2570},"map",[2557,6122,2575],{"class":2660},[2557,6124,2575],{"class":2574},[2557,6126,6127],{"class":2578},"t",[2557,6129,2588],{"class":2574},[2557,6131,3416],{"class":2563},[2557,6133,6134],{"class":2603}," t",[2557,6136,2636],{"class":2574},[2557,6138,4407],{"class":2603},[2557,6140,2588],{"class":2660},[2557,6142,2636],{"class":2574},[2557,6144,6145],{"class":2570},"sort",[2557,6147,4171],{"class":2660},[2557,6149,2582],{"class":2574},[2557,6151,3612],{"class":2660},[2557,6153,2664],{"class":2574},[2557,6155,5981],{"class":2667},[2557,6157,2664],{"class":2574},[2557,6159,2582],{"class":2574},[2557,6161,2727],{"class":2574},[2557,6163,5942],{"class":2667},[2557,6165,2664],{"class":2574},[2557,6167,5309],{"class":2660},[2557,6169,2621],{"class":2574},[2557,6171,6173,6175,6177,6179,6181,6183,6185,6187,6189,6191,6193,6195,6197,6199,6201,6203,6205,6207,6209],{"class":2559,"line":6172},53,[2557,6174,5263],{"class":2603},[2557,6176,2636],{"class":2574},[2557,6178,5498],{"class":2570},[2557,6180,5271],{"class":2660},[2557,6182,2935],{"class":2752},[2557,6184,4881],{"class":2570},[2557,6186,2575],{"class":2660},[2557,6188,2943],{"class":2603},[2557,6190,2582],{"class":2574},[2557,6192,6067],{"class":2603},[2557,6194,3452],{"class":2660},[2557,6196,2636],{"class":2574},[2557,6198,5005],{"class":2603},[2557,6200,2636],{"class":2574},[2557,6202,6078],{"class":2603},[2557,6204,2582],{"class":2574},[2557,6206,4364],{"class":2883},[2557,6208,2588],{"class":2660},[2557,6210,2621],{"class":2574},[2557,6212,6214,6216,6218],{"class":2559,"line":6213},54,[2557,6215,2948],{"class":2574},[2557,6217,2588],{"class":2603},[2557,6219,2621],{"class":2574},[2548,6221,6224],{"className":4069,"code":6222,"filename":6223,"language":4072,"meta":2553,"style":2553},"npm test\n","Test",[2416,6225,6226],{"__ignoreMap":2553},[2557,6227,6228,6231],{"class":2559,"line":2560},[2557,6229,6230],{"class":4079},"npm",[2557,6232,6233],{"class":2667}," test\n",[2405,6235,6236,6237,6239],{},"A mock proves your branching and your filter. It does not prove the platform delivered anything, and it does not enforce constraints or foreign keys. See ",[2412,6238,1032],{"href":1033}," for the full list.",[2435,6241,6243],{"id":6242},"_6-deploy-and-watch-it-run","6. Deploy and watch it run",[2405,6245,6246,6249,6250,6252,6253,6256,6257,6259],{},[2412,6247,6248],{"href":118},"Deploy the App",". Then check both triggers where you can see them, in the Cockpit under ",[2449,6251,914],{},", on the ",[2449,6254,6255],{},"Executions"," screen. Each invocation is a record with its trigger, its duration, its status and the log lines you wrote (",[2412,6258,1218],{"href":1219},").",[6261,6262,6263,6411,6424],"ol",{},[2446,6264,6265,6268,6269,6273,6274,6358,6407,6410],{},[2449,6266,6267],{},"Run the job on demand",", through the route from step 3, with a development key (",[2412,6270,6272],{"href":6271},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#which-scope-covers-which-app","which scope covers which app","):",[2548,6275,6278],{"className":4069,"code":6276,"filename":6277,"language":4072,"meta":2553,"style":2553},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Flocations\u002Ftransfers\u002Fpurge \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{}'\n","Request",[2416,6279,6280,6300,6317,6333,6346],{"__ignoreMap":2553},[2557,6281,6282,6285,6288,6291,6294,6297],{"class":2559,"line":2560},[2557,6283,6284],{"class":4079},"curl",[2557,6286,6287],{"class":2667}," -s",[2557,6289,6290],{"class":2667}," -X",[2557,6292,6293],{"class":2667}," POST",[2557,6295,6296],{"class":2667}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Flocations\u002Ftransfers\u002Fpurge",[2557,6298,6299],{"class":2603}," \\\n",[2557,6301,6302,6305,6307,6310,6313,6315],{"class":2559,"line":2594},[2557,6303,6304],{"class":2667},"  -H",[2557,6306,3939],{"class":2574},[2557,6308,6309],{"class":2667},"X-Revenexx-Tenant: ",[2557,6311,6312],{"class":2603},"$REVENEXX_TENANT",[2557,6314,3921],{"class":2574},[2557,6316,6299],{"class":2603},[2557,6318,6319,6321,6323,6326,6329,6331],{"class":2559,"line":2624},[2557,6320,6304],{"class":2667},[2557,6322,3939],{"class":2574},[2557,6324,6325],{"class":2667},"X-Revenexx-Api-Key: ",[2557,6327,6328],{"class":2603},"$REVENEXX_API_KEY",[2557,6330,3921],{"class":2574},[2557,6332,6299],{"class":2603},[2557,6334,6335,6337,6339,6342,6344],{"class":2559,"line":2648},[2557,6336,6304],{"class":2667},[2557,6338,3939],{"class":2574},[2557,6340,6341],{"class":2667},"Content-Type: application\u002Fjson",[2557,6343,3921],{"class":2574},[2557,6345,6299],{"class":2603},[2557,6347,6348,6351,6353,6355],{"class":2559,"line":2699},[2557,6349,6350],{"class":2667},"  -d",[2557,6352,2727],{"class":2574},[2557,6354,4512],{"class":2667},[2557,6356,6357],{"class":2574},"'\n",[2548,6359,6362],{"className":3913,"code":6360,"filename":6361,"language":2859,"meta":2553,"style":2553},"{ \"scanned\": 0, \"deleted\": 0, \"more\": false }\n","Response",[2416,6363,6364],{"__ignoreMap":2553},[2557,6365,6366,6368,6370,6373,6375,6377,6379,6381,6383,6385,6387,6389,6391,6393,6395,6398,6400,6402,6405],{"class":2559,"line":2560},[2557,6367,2864],{"class":2574},[2557,6369,3939],{"class":2574},[2557,6371,6372],{"class":2563},"scanned",[2557,6374,3921],{"class":2574},[2557,6376,2870],{"class":2574},[2557,6378,4364],{"class":2883},[2557,6380,2582],{"class":2574},[2557,6382,3939],{"class":2574},[2557,6384,6078],{"class":2563},[2557,6386,3921],{"class":2574},[2557,6388,2870],{"class":2574},[2557,6390,4364],{"class":2883},[2557,6392,2582],{"class":2574},[2557,6394,3939],{"class":2574},[2557,6396,6397],{"class":2563},"more",[2557,6399,3921],{"class":2574},[2557,6401,2870],{"class":2574},[2557,6403,6404],{"class":2574}," false",[2557,6406,3753],{"class":2574},[6408,6409],"br",{},"That is the answer on a tenant with nothing older than 90 days to purge. The delete itself is proven by the test in step 5. Run the live call against a tenant that holds old received transfers only if you mean to delete them.",[2446,6412,6413,6416,6417,6419,6420,6423],{},[2449,6414,6415],{},"Wait for the first tick."," A schedule starts firing once the version that declares it is installed. A tick shows up in Executions with the schedule name ",[2416,6418,3951],{},". How soon after install the first tick runs is not documented (as of 2026-10). For a quicker check while you develop, change the cron to ",[2416,6421,6422],{},"*\u002F15 * * * *",", deploy, look for the record, and change it back.",[2446,6425,6426,6429,6430,6432,6433,6435],{},[2449,6427,6428],{},"Confirm the install event on a staging tenant",", not on your production one. Install the App and look for an ",[2416,6431,3120],{}," record. A missing record is not a bug in your code, because the event does not reliably fire on a Marketplace install. Call ",[2416,6434,3806],{}," as in step 2.",[2405,6437,6438],{},"Nothing on the platform alerts you when a schedule stops firing, and there is no alerting to configure (as of 2026-10). The work just does not happen, so open Executions after each release.",[2435,6440,6442],{"id":6441},"troubleshooting","Troubleshooting",[2443,6444,6445,6459,6473,6487,6506,6512,6525],{},[2446,6446,6447,6452,6453,6455,6456,2636],{},[2449,6448,6449,6450,2636],{},"The tick runs and your router answers ",[2416,6451,3499],{}," The handler fell through. Branch on ",[2416,6454,2806],{}," before the router, and answer unknown names with ",[2416,6457,6458],{},"{ schedule, ignored: true }",[2446,6460,6461,6466,6467,6469,6470,6472],{},[2449,6462,6463,6464,2636],{},"The tick answers ",[2416,6465,3511],{}," The context header is missing. In a test, set ",[2416,6468,2668],{},". The ",[2416,6471,3511],{}," comes from your own handler (the check in step 1), not from the platform.",[2446,6474,6475,6478,6479,6482,6483,6486],{},[2449,6476,6477],{},"The job runs and deletes nothing."," Check the filter shape (",[2416,6480,6481],{},"{ op: 'lt', value }","), and the cutoff in UTC. In a mock, check that your seeded ",[2416,6484,6485],{},"updated_at"," is an ISO string, because the mock compares strings.",[2446,6488,6489,6495,6496,6498,6499,6501,6502,6505],{},[2449,6490,6491,6492,6494],{},"The tick fails, or the purge route answers ",[2416,6493,4065],{}," because the generated client threw, with \"transfers.delete() is not permitted\"."," The ",[2416,6497,3910],{}," grant is missing from ",[2416,6500,3906],{},", or you did not run ",[2416,6503,6504],{},"revenexx apps generate"," after adding it.",[2446,6507,6508,6511],{},[2449,6509,6510],{},"The job runs at the wrong local hour."," Cron is UTC. If the exact local hour matters, run the job more often and have the handler decide, using the tenant's own configuration.",[2446,6513,6514,6517,6518,6520,6521,6524],{},[2449,6515,6516],{},"No schedule record appears."," The version that declares it is not the installed one. Check ",[2449,6519,2010],{}," in App Studio, then ",[2449,6522,6523],{},"Anatomy",", which shows the schedules as the platform applied them.",[2446,6526,6527,6530],{},[2449,6528,6529],{},"The install handler never ran on a merchant's tenant."," Expected on a Marketplace install. The route and a first-use check are the path that works.",[2435,6532,6534],{"id":6533},"where-to-go-next","Where to go next",[2443,6536,6537,6542,6554,6559,6564],{},[2446,6538,6539,6541],{},[2412,6540,1133],{"href":1134}," — the headers, the two verified events and what is not settled.",[2446,6543,6544,6546,6547,6550,6551,2636],{},[2412,6545,1163],{"href":1164}," — the cron rules, the ",[2416,6548,6549],{},"data"," payload and ",[2416,6552,6553],{},"warmup",[2446,6555,6556,6558],{},[2412,6557,379],{"href":380}," — when an App handler is the wrong tool.",[2446,6560,6561,6563],{},[2412,6562,124],{"href":125}," — the other direction.",[2446,6565,6566,6568],{},[2412,6567,1242],{"href":1243}," — the harness for the exported handler.",[6570,6571,6572],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":2553,"searchDepth":2594,"depth":2594,"links":6574},[6575,6576,6577,6578,6582,6583,6584,6585,6586],{"id":2437,"depth":2594,"text":2438},{"id":2503,"depth":2594,"text":2504},{"id":3523,"depth":2594,"text":3524},{"id":3880,"depth":2594,"text":3881,"children":6579},[6580,6581],{"id":4548,"depth":2624,"text":4549},{"id":4592,"depth":2624,"text":4593},{"id":4684,"depth":2594,"text":4685},{"id":4742,"depth":2594,"text":4743},{"id":6242,"depth":2594,"text":6243},{"id":6441,"depth":2594,"text":6442},{"id":6533,"depth":2594,"text":6534},"Make your App do something when no HTTP caller asks it to — answer the install event, run a nightly job once per tenant, make both safe to run twice, test them with the mock adapter, and know which reactions you can rely on today and which you cannot.","md",null,{},{"icon":143},{"title":138,"description":6587},{"loc":139},"3k22X8VWmmugMkywoD6fYJrPFtSfFF1l_m3v36u4nvQ",1792158126715]