[{"data":1,"prerenderedAt":403},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fhttp-facade":115,"\u002Fapi\u002Fhttp-facade-surround":398},[4,36,57,88,104],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Install","\u002Fgetting-started\u002Finstall","1.getting-started\u002F2.install","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F3.quickstart","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Testing","\u002Fgetting-started\u002Ftesting","1.getting-started\u002F4.testing","i-lucide-flask-conical",{"title":31,"path":32,"stem":33,"icon":34},"CLI","\u002Fgetting-started\u002Fcli","1.getting-started\u002F5.cli","i-lucide-terminal",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Concepts","i-lucide-boxes","\u002Fconcepts","2.concepts",[42,47,52],{"title":43,"path":44,"stem":45,"icon":46},"SQL-first contract","\u002Fconcepts\u002Fsql-first-contract","2.concepts\u002F1.sql-first-contract","i-lucide-database",{"title":48,"path":49,"stem":50,"icon":51},"Jobs and status","\u002Fconcepts\u002Fjobs-and-status","2.concepts\u002F2.jobs-and-status","i-lucide-list-checks",{"title":53,"path":54,"stem":55,"icon":56},"Fencing and settles","\u002Fconcepts\u002Ffencing-and-settles","2.concepts\u002F3.fencing-and-settles","i-lucide-shield",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":35},"API","i-lucide-code-2","\u002Fapi","3.api",[63,68,73,78,83],{"title":64,"path":65,"stem":66,"icon":67},"Enqueue","\u002Fapi\u002Fenqueue","3.api\u002F1.enqueue","i-lucide-plus-circle",{"title":69,"path":70,"stem":71,"icon":72},"Claim and heartbeat","\u002Fapi\u002Fclaim-and-heartbeat","3.api\u002F2.claim-and-heartbeat","i-lucide-hand",{"title":74,"path":75,"stem":76,"icon":77},"Worker and handlers","\u002Fapi\u002Fworker-and-handlers","3.api\u002F3.worker-and-handlers","i-lucide-cpu",{"title":79,"path":80,"stem":81,"icon":82},"HTTP facade","\u002Fapi\u002Fhttp-facade","3.api\u002F4.http-facade","i-lucide-globe",{"title":84,"path":85,"stem":86,"icon":87},"Authorization","\u002Fapi\u002Fauthorization","3.api\u002F5.authorization","i-lucide-key-round",{"title":89,"icon":90,"path":91,"stem":92,"children":93,"page":35},"Operations","i-lucide-activity","\u002Foperations","4.operations",[94,99],{"title":95,"path":96,"stem":97,"icon":98},"Housekeeping","\u002Foperations\u002Fhousekeeping","4.operations\u002F1.housekeeping","i-lucide-timer",{"title":100,"path":101,"stem":102,"icon":103},"Redrive and dead letters","\u002Foperations\u002Fredrive-and-dlq","4.operations\u002F2.redrive-and-dlq","i-lucide-rotate-ccw",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":35},"Reference","i-lucide-book-marked","\u002Freference","5.reference",[110],{"title":111,"path":112,"stem":113,"icon":114},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F1.configuration","i-lucide-settings",{"id":116,"title":79,"body":117,"description":391,"extension":392,"links":393,"meta":394,"navigation":395,"path":80,"seo":396,"stem":81,"__hash__":397},"docs\u002F3.api\u002F4.http-facade.md",{"type":118,"value":119,"toc":387},"minimark",[120,124,273,280,285,301,331,349,353,383],[121,122,123],"p",{},"Some fleets must not hold database credentials. Mount the optional FastAPI sub-app in your API process:",[125,126,131],"pre",{"className":127,"code":128,"language":129,"meta":130,"style":130},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from fastapi import FastAPI\nfrom taskq.http import (\n    ClaimWaitHub,\n    TaskqFacadeTransports,\n    create_taskq_app,\n    static_api_key_auth,\n)\n\ntaskq_app = create_taskq_app(\n    TaskqFacadeTransports(\n        producer=producer_transport,\n        runner=runner_transport,\n        observer=observer_transport,\n        authorization=authorization_transport,\n        claim_wait_hub=ClaimWaitHub(),\n    ),\n    authorizer=static_api_key_auth(\"secret\"),\n    # optional: operator_transport=…, operator_authorizer=… together\n)\n\nhost = FastAPI()\nhost.mount(\"\u002Ftaskq\", taskq_app)\n# Wire paths live under \u002Ftaskq\u002Fv1\u002F...\n","python","",[132,133,134,142,148,154,160,166,172,178,185,191,197,203,209,215,221,227,233,239,245,250,255,261,267],"code",{"__ignoreMap":130},[135,136,139],"span",{"class":137,"line":138},"line",1,[135,140,141],{},"from fastapi import FastAPI\n",[135,143,145],{"class":137,"line":144},2,[135,146,147],{},"from taskq.http import (\n",[135,149,151],{"class":137,"line":150},3,[135,152,153],{},"    ClaimWaitHub,\n",[135,155,157],{"class":137,"line":156},4,[135,158,159],{},"    TaskqFacadeTransports,\n",[135,161,163],{"class":137,"line":162},5,[135,164,165],{},"    create_taskq_app,\n",[135,167,169],{"class":137,"line":168},6,[135,170,171],{},"    static_api_key_auth,\n",[135,173,175],{"class":137,"line":174},7,[135,176,177],{},")\n",[135,179,181],{"class":137,"line":180},8,[135,182,184],{"emptyLinePlaceholder":183},true,"\n",[135,186,188],{"class":137,"line":187},9,[135,189,190],{},"taskq_app = create_taskq_app(\n",[135,192,194],{"class":137,"line":193},10,[135,195,196],{},"    TaskqFacadeTransports(\n",[135,198,200],{"class":137,"line":199},11,[135,201,202],{},"        producer=producer_transport,\n",[135,204,206],{"class":137,"line":205},12,[135,207,208],{},"        runner=runner_transport,\n",[135,210,212],{"class":137,"line":211},13,[135,213,214],{},"        observer=observer_transport,\n",[135,216,218],{"class":137,"line":217},14,[135,219,220],{},"        authorization=authorization_transport,\n",[135,222,224],{"class":137,"line":223},15,[135,225,226],{},"        claim_wait_hub=ClaimWaitHub(),\n",[135,228,230],{"class":137,"line":229},16,[135,231,232],{},"    ),\n",[135,234,236],{"class":137,"line":235},17,[135,237,238],{},"    authorizer=static_api_key_auth(\"secret\"),\n",[135,240,242],{"class":137,"line":241},18,[135,243,244],{},"    # optional: operator_transport=…, operator_authorizer=… together\n",[135,246,248],{"class":137,"line":247},19,[135,249,177],{},[135,251,253],{"class":137,"line":252},20,[135,254,184],{"emptyLinePlaceholder":183},[135,256,258],{"class":137,"line":257},21,[135,259,260],{},"host = FastAPI()\n",[135,262,264],{"class":137,"line":263},22,[135,265,266],{},"host.mount(\"\u002Ftaskq\", taskq_app)\n",[135,268,270],{"class":137,"line":269},23,[135,271,272],{},"# Wire paths live under \u002Ftaskq\u002Fv1\u002F...\n",[121,274,275,276,279],{},"Requires ",[132,277,278],{},"outlabs-taskq[http]",".",[281,282,284],"h2",{"id":283},"auth-is-injected","Auth is injected",[121,286,287,288,291,292,296,297,300],{},"A ",[132,289,290],{},"QueueAuthorizer"," is ",[293,294,295],"strong",{},"required",". Built-ins in ",[132,298,299],{},"taskq.http",":",[302,303,304,310,315,320,325],"ul",{},[305,306,307],"li",{},[132,308,309],{},"static_api_key_auth",[305,311,312],{},[132,313,314],{},"bearer_token_auth",[305,316,317],{},[132,318,319],{},"callable_auth",[305,321,322],{},[132,323,324],{},"legacy_taskq_auth",[305,326,327,330],{},[132,328,329],{},"no_auth_for_tests"," (tests only)",[121,332,333,334,337,338,341,342,345,346,279],{},"OutLabs IAM: ",[132,335,336],{},"OutlabsQueueAuthorizer"," from ",[132,339,340],{},"taskq.http.outlabs"," (",[132,343,344],{},"[outlabs]"," extra). See ",[347,348,84],"a",{"href":85},[281,350,352],{"id":351},"topology-rules","Topology rules",[302,354,355,366,372],{},[305,356,357,358,361,362,365],{},"HTTP workers point ",[132,359,360],{},"taskq worker"," at ",[132,363,364],{},"--http-base-url"," with bearer or custom header credentials.",[305,367,368,369,279],{},"HTTP workers must not use ",[132,370,371],{},"LISTEN",[305,373,374,375,378,379,382],{},"Housekeeping \u002F claim-wait \u002F optional embedded worker belong on the facade host via ",[132,376,377],{},"TaskqRuntime"," \u002F ",[132,380,381],{},"taskq_lifespan"," — not inside each worker process.",[384,385,386],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":130,"searchDepth":138,"depth":144,"links":388},[389,390],{"id":283,"depth":144,"text":284},{"id":351,"depth":144,"text":352},"Optional FastAPI transport for no-DB-credential workers.","md",null,{},{"icon":82},{"title":79,"description":391},"foSNIMDaOpYdsTmK2nPk6s4muLO8RhKa9rrFefjmRvo",[399,401],{"title":74,"path":75,"stem":76,"description":400,"icon":77,"children":-1},"Task registry, JobContext, and running workers.",{"title":84,"path":85,"stem":86,"description":402,"icon":87,"children":-1},"QueueAuthorizer, built-ins, and the OutLabs adapter.",1784549299452]