[{"data":1,"prerenderedAt":793},["ShallowReactive",2],{"navigation_docs":3,"-packages-coordinator-sdk":67,"-packages-coordinator-sdk-surround":790},[4,20,41],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Overview",false,"\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Adding Documentation","\u002Fgetting-started\u002Fadding-documentation","1.getting-started\u002F3.adding-documentation","i-lucide-file-plus",{"title":21,"icon":22,"path":23,"stem":24,"children":25,"page":6},"Applications","i-lucide-layout-grid","\u002Fapplications","2.applications",[26,31,36],{"title":27,"path":28,"stem":29,"icon":30},"Web","\u002Fapplications\u002Fweb","2.applications\u002F1.web","i-lucide-globe-code",{"title":32,"path":33,"stem":34,"icon":35},"Coordinator","\u002Fapplications\u002Fcoordinator","2.applications\u002F2.coordinator","i-lucide-clock",{"title":37,"path":38,"stem":39,"icon":40},"Profile Chrome Extension","\u002Fapplications\u002Fprofile-recorder","2.applications\u002F3.profile-recorder","i-lucide-mouse-pointer-click",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":6},"Packages","i-lucide-package","\u002Fpackages","3.packages",[47,52,57,62],{"title":48,"path":49,"stem":50,"icon":51},"Profile Runner","\u002Fpackages\u002Fprofile-runner","3.packages\u002F1.profile-runner","i-lucide-scan-search",{"title":53,"path":54,"stem":55,"icon":56},"Schema","\u002Fpackages\u002Fschema","3.packages\u002F2.schema","i-lucide-file-json",{"title":58,"path":59,"stem":60,"icon":61},"UI","\u002Fpackages\u002Fui","3.packages\u002F2.ui","i-lucide-layout-dashboard",{"title":63,"path":64,"stem":65,"icon":66},"Coordinator SDK","\u002Fpackages\u002Fcoordinator-sdk","3.packages\u002F3.coordinator-sdk","i-lucide-plug-zap",{"id":68,"title":63,"body":69,"description":783,"extension":784,"links":785,"meta":786,"navigation":787,"path":64,"seo":788,"stem":65,"__hash__":789},"docs\u002F3.packages\u002F3.coordinator-sdk.md",{"type":70,"value":71,"toc":779},"minimark",[72,97,102,117,233,239,249,404,441,762,775],[73,74,75,79,80,83,84,92,93,96],"p",{},[76,77,78],"code",{},"@scrape-admin\u002Fcoordinator-sdk"," wraps ",[81,82,32],"a",{"href":33},"'s REST API in a small, typed client\nbuilt on ",[81,85,89],{"href":86,"rel":87},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fofetch",[88],"nofollow",[76,90,91],{},"ofetch",", so callers get autocomplete and type-checking against\n",[76,94,95],{},"@scrape-admin\u002Fcoordinator-schema"," instead of hand-rolling fetch calls and headers.",[98,99,101],"h2",{"id":100},"creating-a-client","Creating a client",[73,103,104,107,108,111,112,116],{},[76,105,106],{},"createCoordinatorClient"," takes the coordinator's base URL and the calling tenant's ID, which is sent on every\nrequest as the ",[76,109,110],{},"x-tenant-id"," header required by the coordinator's ",[81,113,115],{"href":114},"\u002Fapplications\u002Fcoordinator#authentication","authentication",":",[118,119,124],"pre",{"className":120,"code":121,"language":122,"meta":123,"style":123},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createCoordinatorClient } from '@scrape-admin\u002Fcoordinator-sdk'\n\nconst coordinator = createCoordinatorClient({\n  baseUrl: 'http:\u002F\u002Flocalhost:3001',\n  tenantId: 'my-tenant',\n})\n","ts","",[76,125,126,158,165,187,207,224],{"__ignoreMap":123},[127,128,131,135,139,143,146,149,152,155],"span",{"class":129,"line":130},"line",1,[127,132,134],{"class":133},"s7zQu","import",[127,136,138],{"class":137},"sMK4o"," {",[127,140,142],{"class":141},"sTEyZ"," createCoordinatorClient",[127,144,145],{"class":137}," }",[127,147,148],{"class":133}," from",[127,150,151],{"class":137}," '",[127,153,78],{"class":154},"sfazB",[127,156,157],{"class":137},"'\n",[127,159,161],{"class":129,"line":160},2,[127,162,164],{"emptyLinePlaceholder":163},true,"\n",[127,166,168,172,175,178,181,184],{"class":129,"line":167},3,[127,169,171],{"class":170},"spNyl","const",[127,173,174],{"class":141}," coordinator ",[127,176,177],{"class":137},"=",[127,179,142],{"class":180},"s2Zo4",[127,182,183],{"class":141},"(",[127,185,186],{"class":137},"{\n",[127,188,190,194,196,198,201,204],{"class":129,"line":189},4,[127,191,193],{"class":192},"swJcz","  baseUrl",[127,195,116],{"class":137},[127,197,151],{"class":137},[127,199,200],{"class":154},"http:\u002F\u002Flocalhost:3001",[127,202,203],{"class":137},"'",[127,205,206],{"class":137},",\n",[127,208,210,213,215,217,220,222],{"class":129,"line":209},5,[127,211,212],{"class":192},"  tenantId",[127,214,116],{"class":137},[127,216,151],{"class":137},[127,218,219],{"class":154},"my-tenant",[127,221,203],{"class":137},[127,223,206],{"class":137},[127,225,227,230],{"class":129,"line":226},6,[127,228,229],{"class":137},"}",[127,231,232],{"class":141},")\n",[98,234,236],{"id":235},"scheduledwebhooks",[76,237,238],{},"scheduledWebhooks",[73,240,241,242,244,245,248],{},"The client exposes one namespace, ",[76,243,238],{},", mirroring the coordinator's ",[76,246,247],{},"\u002Fapi\u002Fv1\u002Fwebhooks\u002Fscheduled"," API:",[250,251,252,268],"table",{},[253,254,255],"thead",{},[256,257,258,262,265],"tr",{},[259,260,261],"th",{},"Method",[259,263,264],{},"Request",[259,266,267],{},"Returns",[269,270,271,289,306,322,338,354,371,387],"tbody",{},[256,272,273,279,284],{},[274,275,276],"td",{},[76,277,278],{},"scheduledWebhooks.list()",[274,280,281],{},[76,282,283],{},"GET \u002F",[274,285,286],{},[76,287,288],{},"ScheduledWebhook[]",[256,290,291,296,301],{},[274,292,293],{},[76,294,295],{},"scheduledWebhooks.create(payload)",[274,297,298],{},[76,299,300],{},"POST \u002F",[274,302,303],{},[76,304,305],{},"ScheduledWebhook",[256,307,308,313,318],{},[274,309,310],{},[76,311,312],{},"scheduledWebhooks.get(id)",[274,314,315],{},[76,316,317],{},"GET \u002F:id",[274,319,320],{},[76,321,305],{},[256,323,324,329,334],{},[274,325,326],{},[76,327,328],{},"scheduledWebhooks.update(id, payload)",[274,330,331],{},[76,332,333],{},"PATCH \u002F:id",[274,335,336],{},[76,337,305],{},[256,339,340,345,350],{},[274,341,342],{},[76,343,344],{},"scheduledWebhooks.delete(id)",[274,346,347],{},[76,348,349],{},"DELETE \u002F:id",[274,351,352],{},[76,353,305],{},[256,355,356,361,366],{},[274,357,358],{},[76,359,360],{},"scheduledWebhooks.runs(id).list()",[274,362,363],{},[76,364,365],{},"GET \u002F:id\u002Fruns",[274,367,368],{},[76,369,370],{},"ScheduledWebhookRun[]",[256,372,373,378,383],{},[274,374,375],{},[76,376,377],{},"scheduledWebhooks.runs(id).trigger(payload?)",[274,379,380],{},[76,381,382],{},"POST \u002F:id\u002Fruns",[274,384,385],{},[76,386,370],{},[256,388,389,394,399],{},[274,390,391],{},[76,392,393],{},"scheduledWebhooks.runs(id).get(runId)",[274,395,396],{},[76,397,398],{},"GET \u002F:id\u002Fruns\u002F:runId",[274,400,401],{},[76,402,403],{},"ScheduledWebhookRun",[73,405,406,409,410,413,414,417,418,413,421,424,425,429,430,433,434,436,437,440],{},[76,407,408],{},"payload"," for ",[76,411,412],{},"create","\u002F",[76,415,416],{},"update"," is validated against ",[76,419,420],{},"CreateScheduledWebhook",[76,422,423],{},"UpdateScheduledWebhook"," from\n",[81,426,427],{"href":54},[76,428,95],{},": one or more ",[76,431,432],{},"destinations",", an optional ",[76,435,408],{}," body, and a\n",[76,438,439],{},"cronExpression",".",[118,442,444],{"className":120,"code":443,"language":122,"meta":123,"style":123},"\u002F\u002F Schedule a webhook to fire every 5 minutes\nconst webhook = await coordinator.scheduledWebhooks.create({\n  destinations: [{ url: 'https:\u002F\u002Fexample.com\u002Fhooks\u002Fscrape-complete' }],\n  cronExpression: '*\u002F5 * * * *',\n})\n\n\u002F\u002F Update its schedule\nawait coordinator.scheduledWebhooks.update(webhook.id, { cronExpression: '0 * * * *' })\n\n\u002F\u002F Trigger a run immediately, outside the cron schedule\nconst [run] = await coordinator.scheduledWebhooks.runs(webhook.id).trigger()\n\n\u002F\u002F Inspect run history\nconst runs = await coordinator.scheduledWebhooks.runs(webhook.id).list()\nconst sameRun = await coordinator.scheduledWebhooks.runs(webhook.id).get(run.id)\n\n\u002F\u002F Stop scheduling it\nawait coordinator.scheduledWebhooks.delete(webhook.id)\n",[76,445,446,452,479,511,527,533,537,543,588,593,599,642,647,653,688,729,734,740],{"__ignoreMap":123},[127,447,448],{"class":129,"line":130},[127,449,451],{"class":450},"sHwdD","\u002F\u002F Schedule a webhook to fire every 5 minutes\n",[127,453,454,456,459,461,464,467,469,471,473,475,477],{"class":129,"line":160},[127,455,171],{"class":170},[127,457,458],{"class":141}," webhook ",[127,460,177],{"class":137},[127,462,463],{"class":133}," await",[127,465,466],{"class":141}," coordinator",[127,468,440],{"class":137},[127,470,238],{"class":141},[127,472,440],{"class":137},[127,474,412],{"class":180},[127,476,183],{"class":141},[127,478,186],{"class":137},[127,480,481,484,486,489,492,495,497,499,502,504,506,509],{"class":129,"line":167},[127,482,483],{"class":192},"  destinations",[127,485,116],{"class":137},[127,487,488],{"class":141}," [",[127,490,491],{"class":137},"{",[127,493,494],{"class":192}," url",[127,496,116],{"class":137},[127,498,151],{"class":137},[127,500,501],{"class":154},"https:\u002F\u002Fexample.com\u002Fhooks\u002Fscrape-complete",[127,503,203],{"class":137},[127,505,145],{"class":137},[127,507,508],{"class":141},"]",[127,510,206],{"class":137},[127,512,513,516,518,520,523,525],{"class":129,"line":189},[127,514,515],{"class":192},"  cronExpression",[127,517,116],{"class":137},[127,519,151],{"class":137},[127,521,522],{"class":154},"*\u002F5 * * * *",[127,524,203],{"class":137},[127,526,206],{"class":137},[127,528,529,531],{"class":129,"line":209},[127,530,229],{"class":137},[127,532,232],{"class":141},[127,534,535],{"class":129,"line":226},[127,536,164],{"emptyLinePlaceholder":163},[127,538,540],{"class":129,"line":539},7,[127,541,542],{"class":450},"\u002F\u002F Update its schedule\n",[127,544,546,549,551,553,555,557,559,562,564,567,570,572,575,577,579,582,584,586],{"class":129,"line":545},8,[127,547,548],{"class":133},"await",[127,550,466],{"class":141},[127,552,440],{"class":137},[127,554,238],{"class":141},[127,556,440],{"class":137},[127,558,416],{"class":180},[127,560,561],{"class":141},"(webhook",[127,563,440],{"class":137},[127,565,566],{"class":141},"id",[127,568,569],{"class":137},",",[127,571,138],{"class":137},[127,573,574],{"class":192}," cronExpression",[127,576,116],{"class":137},[127,578,151],{"class":137},[127,580,581],{"class":154},"0 * * * *",[127,583,203],{"class":137},[127,585,145],{"class":137},[127,587,232],{"class":141},[127,589,591],{"class":129,"line":590},9,[127,592,164],{"emptyLinePlaceholder":163},[127,594,596],{"class":129,"line":595},10,[127,597,598],{"class":450},"\u002F\u002F Trigger a run immediately, outside the cron schedule\n",[127,600,602,604,606,609,611,614,616,618,620,622,624,627,629,631,634,636,639],{"class":129,"line":601},11,[127,603,171],{"class":170},[127,605,488],{"class":137},[127,607,608],{"class":141},"run",[127,610,508],{"class":137},[127,612,613],{"class":137}," =",[127,615,463],{"class":133},[127,617,466],{"class":141},[127,619,440],{"class":137},[127,621,238],{"class":141},[127,623,440],{"class":137},[127,625,626],{"class":180},"runs",[127,628,561],{"class":141},[127,630,440],{"class":137},[127,632,633],{"class":141},"id)",[127,635,440],{"class":137},[127,637,638],{"class":180},"trigger",[127,640,641],{"class":141},"()\n",[127,643,645],{"class":129,"line":644},12,[127,646,164],{"emptyLinePlaceholder":163},[127,648,650],{"class":129,"line":649},13,[127,651,652],{"class":450},"\u002F\u002F Inspect run history\n",[127,654,656,658,661,663,665,667,669,671,673,675,677,679,681,683,686],{"class":129,"line":655},14,[127,657,171],{"class":170},[127,659,660],{"class":141}," runs ",[127,662,177],{"class":137},[127,664,463],{"class":133},[127,666,466],{"class":141},[127,668,440],{"class":137},[127,670,238],{"class":141},[127,672,440],{"class":137},[127,674,626],{"class":180},[127,676,561],{"class":141},[127,678,440],{"class":137},[127,680,633],{"class":141},[127,682,440],{"class":137},[127,684,685],{"class":180},"list",[127,687,641],{"class":141},[127,689,691,693,696,698,700,702,704,706,708,710,712,714,716,718,721,724,726],{"class":129,"line":690},15,[127,692,171],{"class":170},[127,694,695],{"class":141}," sameRun ",[127,697,177],{"class":137},[127,699,463],{"class":133},[127,701,466],{"class":141},[127,703,440],{"class":137},[127,705,238],{"class":141},[127,707,440],{"class":137},[127,709,626],{"class":180},[127,711,561],{"class":141},[127,713,440],{"class":137},[127,715,633],{"class":141},[127,717,440],{"class":137},[127,719,720],{"class":180},"get",[127,722,723],{"class":141},"(run",[127,725,440],{"class":137},[127,727,728],{"class":141},"id)\n",[127,730,732],{"class":129,"line":731},16,[127,733,164],{"emptyLinePlaceholder":163},[127,735,737],{"class":129,"line":736},17,[127,738,739],{"class":450},"\u002F\u002F Stop scheduling it\n",[127,741,743,745,747,749,751,753,756,758,760],{"class":129,"line":742},18,[127,744,548],{"class":133},[127,746,466],{"class":141},[127,748,440],{"class":137},[127,750,238],{"class":141},[127,752,440],{"class":137},[127,754,755],{"class":180},"delete",[127,757,561],{"class":141},[127,759,440],{"class":137},[127,761,728],{"class":141},[73,763,764,765,767,768,413,771,774],{},"Every call throws (via ",[76,766,91],{},") on a non-2xx response, so wrap calls in ",[76,769,770],{},"try",[76,772,773],{},"catch"," where a failed request should\nbe handled rather than bubbling up.",[776,777,778],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}",{"title":123,"searchDepth":160,"depth":160,"links":780},[781,782],{"id":100,"depth":160,"text":101},{"id":235,"depth":160,"text":238},"A typed client for the coordinator's scheduled webhook API.","md",null,{},{"icon":66},{"title":63,"description":783},"dszHPbabq7G0V7sk2VLWtwKrdO9Pwc2h_078yGURZQM",[791,785],{"title":58,"path":59,"stem":60,"description":792,"icon":61,"children":-1},"Common UI elements and components for the Scrape Admin applications.",1790864111785]