[{"data":1,"prerenderedAt":744},["ShallowReactive",2],{"navigation_docs":3,"-concepts-data-model":199,"-concepts-data-model-surround":739},[4,23,65,87,133,159,177],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Guides","i-lucide-compass","\u002Fguides","2.guides",[29,33,37,41,45,49,53,57,61],{"title":30,"path":31,"stem":32},"Authenticate","\u002Fguides\u002Fauthentication","2.guides\u002F1.authentication",{"title":34,"path":35,"stem":36},"Work with several forges","\u002Fguides\u002Fmultiple-forges","2.guides\u002F2.multiple-forges",{"title":38,"path":39,"stem":40},"Configure from the environment","\u002Fguides\u002Fenvironment","2.guides\u002F3.environment",{"title":42,"path":43,"stem":44},"Receive webhooks","\u002Fguides\u002Fwebhooks","2.guides\u002F4.webhooks",{"title":46,"path":47,"stem":48},"Check what a forge supports","\u002Fguides\u002Fcapabilities","2.guides\u002F5.capabilities",{"title":50,"path":51,"stem":52},"Handle errors and rate limits","\u002Fguides\u002Ferrors","2.guides\u002F6.errors",{"title":54,"path":55,"stem":56},"Page through results","\u002Fguides\u002Fpagination","2.guides\u002F7.pagination",{"title":58,"path":59,"stem":60},"Browser bundles","\u002Fguides\u002Fbundling","2.guides\u002F8.bundling",{"title":62,"path":63,"stem":64},"Test your code","\u002Fguides\u002Ftesting","2.guides\u002F9.testing",{"title":66,"icon":67,"path":68,"stem":69,"children":70,"page":22},"Concepts","i-lucide-lightbulb","\u002Fconcepts","3.concepts",[71,75,79,83],{"title":72,"path":73,"stem":74},"Data model","\u002Fconcepts\u002Fdata-model","3.concepts\u002F1.data-model",{"title":76,"path":77,"stem":78},"Capabilities","\u002Fconcepts\u002Fcapabilities","3.concepts\u002F2.capabilities",{"title":80,"path":81,"stem":82},"Providers and factories","\u002Fconcepts\u002Fproviders","3.concepts\u002F3.providers",{"title":84,"path":85,"stem":86},"Events","\u002Fconcepts\u002Fevents","3.concepts\u002F4.events",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":22},"Providers","i-lucide-server","\u002Fproviders","4.providers",[93,97,101,105,109,113,117,121,125,129],{"title":94,"path":95,"stem":96},"Azure DevOps","\u002Fproviders\u002Fazure-devops","4.providers\u002Fazure-devops",{"title":98,"path":99,"stem":100},"Bitbucket Cloud","\u002Fproviders\u002Fbitbucket","4.providers\u002Fbitbucket",{"title":102,"path":103,"stem":104},"Cursor Origin","\u002Fproviders\u002Fcursor-origin","4.providers\u002Fcursor-origin",{"title":106,"path":107,"stem":108},"Forgejo and Codeberg","\u002Fproviders\u002Fforgejo","4.providers\u002Fforgejo",{"title":110,"path":111,"stem":112},"Gitea","\u002Fproviders\u002Fgitea","4.providers\u002Fgitea",{"title":114,"path":115,"stem":116},"Gitee","\u002Fproviders\u002Fgitee","4.providers\u002Fgitee",{"title":118,"path":119,"stem":120},"GitHub","\u002Fproviders\u002Fgithub","4.providers\u002Fgithub",{"title":122,"path":123,"stem":124},"GitLab","\u002Fproviders\u002Fgitlab","4.providers\u002Fgitlab",{"title":126,"path":127,"stem":128},"pushin.eu","\u002Fproviders\u002Fpushin","4.providers\u002Fpushin",{"title":130,"path":131,"stem":132},"Tangled","\u002Fproviders\u002Ftangled","4.providers\u002Ftangled",{"title":134,"icon":135,"path":136,"stem":137,"children":138,"page":22},"Reference","i-lucide-book-marked","\u002Freference","5.reference",[139,143,147,151,155],{"title":140,"path":141,"stem":142},"Provider API","\u002Freference\u002Fprovider-api","5.reference\u002F1.provider-api",{"title":144,"path":145,"stem":146},"Capability matrix","\u002Freference\u002Fcapability-matrix","5.reference\u002F2.capability-matrix",{"title":148,"path":149,"stem":150},"Errors","\u002Freference\u002Ferrors","5.reference\u002F3.errors",{"title":152,"path":153,"stem":154},"Environment variables","\u002Freference\u002Fenvironment-variables","5.reference\u002F4.environment-variables",{"title":156,"path":157,"stem":158},"JSON Schemas","\u002Freference\u002Fjson-schemas","5.reference\u002F5.json-schemas",{"title":160,"icon":161,"path":162,"stem":163,"children":164,"page":22},"Examples","i-lucide-boxes","\u002Fexamples","6.examples",[165,169,173],{"title":166,"path":167,"stem":168},"Inbox CLI","\u002Fexamples\u002Finbox-cli","6.examples\u002F1.inbox-cli",{"title":170,"path":171,"stem":172},"Label bot","\u002Fexamples\u002Flabel-bot","6.examples\u002F2.label-bot",{"title":174,"path":175,"stem":176},"Release digest","\u002Fexamples\u002Frelease-digest","6.examples\u002F3.release-digest",{"title":178,"icon":179,"path":180,"stem":181,"children":182,"page":22},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","7.contributing",[183,187,191,195],{"title":184,"path":185,"stem":186},"Contribution guide","\u002Fcontributing\u002Fguidelines","7.contributing\u002F1.guidelines",{"title":188,"path":189,"stem":190},"Write a provider","\u002Fcontributing\u002Fwrite-a-provider","7.contributing\u002F2.write-a-provider",{"title":192,"path":193,"stem":194},"Record fixtures","\u002Fcontributing\u002Frecord-fixtures","7.contributing\u002F3.record-fixtures",{"title":196,"path":197,"stem":198},"Contributors","\u002Fcontributing\u002Fcontributors","7.contributing\u002F4.contributors",{"id":200,"title":72,"body":201,"description":731,"extension":732,"links":733,"meta":734,"navigation":736,"path":73,"seo":737,"stem":74,"__hash__":738},"docs\u002F3.concepts\u002F1.data-model.md",{"type":202,"value":203,"toc":721},"minimark",[204,213,218,229,274,482,502,507,540,544,567,579,583,629,658,662,680,684,694,698,717],[205,206,207,208,212],"p",{},"Forges name and number things in different ways. ",[209,210,211],"code",{},"forges"," describes them with a small set of shared types, so code that handles a GitHub issue handles a Forgejo issue too.",[214,215,217],"h2",{"id":216},"refs","Refs",[205,219,220,221,224,225,228],{},"A ref points at a resource. It is a plain object that you can build by hand, store and send between processes. Every ref has ",[209,222,223],{},"forge"," and ",[209,226,227],{},"instance",":",[230,231,232,253,271],"ul",{},[233,234,235,236,239,240,224,243,246,247,249,250,252],"li",{},"A ",[209,237,238],{},"RepoRef"," adds ",[209,241,242],{},"owner",[209,244,245],{},"name",". On GitLab, ",[209,248,242],{}," can contain slashes for nested groups, and ",[209,251,245],{}," never does.",[233,254,235,255,258,259,262,263,266,267,270],{},[209,256,257],{},"ThreadRef"," adds the ",[209,260,261],{},"repo",", a ",[209,264,265],{},"kind"," and a ",[209,268,269],{},"number",".",[233,272,273],{},"Comments, releases, webhooks, checks and notifications have refs of their own.",[275,276,281],"pre",{"className":277,"code":278,"language":279,"meta":280,"style":280},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const repo = {\n  forge: 'gitlab',\n  instance: 'gitlab.com',\n  owner: 'acme\u002Fplatform',\n  name: 'widgets',\n} as const\nconst ref = {\n  forge: 'gitlab',\n  instance: 'gitlab.com',\n  repo,\n  kind: 'pull_request',\n  number: '23',\n} as const\n","ts","",[209,282,283,303,325,342,359,376,389,401,416,431,439,456,473],{"__ignoreMap":280},[284,285,288,292,296,300],"span",{"class":286,"line":287},"line",1,[284,289,291],{"class":290},"spNyl","const",[284,293,295],{"class":294},"sTEyZ"," repo ",[284,297,299],{"class":298},"sMK4o","=",[284,301,302],{"class":298}," {\n",[284,304,306,310,312,315,319,322],{"class":286,"line":305},2,[284,307,309],{"class":308},"swJcz","  forge",[284,311,228],{"class":298},[284,313,314],{"class":298}," '",[284,316,318],{"class":317},"sfazB","gitlab",[284,320,321],{"class":298},"'",[284,323,324],{"class":298},",\n",[284,326,328,331,333,335,338,340],{"class":286,"line":327},3,[284,329,330],{"class":308},"  instance",[284,332,228],{"class":298},[284,334,314],{"class":298},[284,336,337],{"class":317},"gitlab.com",[284,339,321],{"class":298},[284,341,324],{"class":298},[284,343,345,348,350,352,355,357],{"class":286,"line":344},4,[284,346,347],{"class":308},"  owner",[284,349,228],{"class":298},[284,351,314],{"class":298},[284,353,354],{"class":317},"acme\u002Fplatform",[284,356,321],{"class":298},[284,358,324],{"class":298},[284,360,362,365,367,369,372,374],{"class":286,"line":361},5,[284,363,364],{"class":308},"  name",[284,366,228],{"class":298},[284,368,314],{"class":298},[284,370,371],{"class":317},"widgets",[284,373,321],{"class":298},[284,375,324],{"class":298},[284,377,379,382,386],{"class":286,"line":378},6,[284,380,381],{"class":298},"}",[284,383,385],{"class":384},"s7zQu"," as",[284,387,388],{"class":290}," const\n",[284,390,392,394,397,399],{"class":286,"line":391},7,[284,393,291],{"class":290},[284,395,396],{"class":294}," ref ",[284,398,299],{"class":298},[284,400,302],{"class":298},[284,402,404,406,408,410,412,414],{"class":286,"line":403},8,[284,405,309],{"class":308},[284,407,228],{"class":298},[284,409,314],{"class":298},[284,411,318],{"class":317},[284,413,321],{"class":298},[284,415,324],{"class":298},[284,417,419,421,423,425,427,429],{"class":286,"line":418},9,[284,420,330],{"class":308},[284,422,228],{"class":298},[284,424,314],{"class":298},[284,426,337],{"class":317},[284,428,321],{"class":298},[284,430,324],{"class":298},[284,432,434,437],{"class":286,"line":433},10,[284,435,436],{"class":294},"  repo",[284,438,324],{"class":298},[284,440,442,445,447,449,452,454],{"class":286,"line":441},11,[284,443,444],{"class":308},"  kind",[284,446,228],{"class":298},[284,448,314],{"class":298},[284,450,451],{"class":317},"pull_request",[284,453,321],{"class":298},[284,455,324],{"class":298},[284,457,459,462,464,466,469,471],{"class":286,"line":458},12,[284,460,461],{"class":308},"  number",[284,463,228],{"class":298},[284,465,314],{"class":298},[284,467,468],{"class":317},"23",[284,470,321],{"class":298},[284,472,324],{"class":298},[284,474,476,478,480],{"class":286,"line":475},13,[284,477,381],{"class":298},[284,479,385],{"class":384},[284,481,388],{"class":290},[205,483,484,486,487,490,491,493,494,497,498,501],{},[209,485,223],{}," names the kind of forge, such as ",[209,488,489],{},"'github'",". ",[209,492,227],{}," is the host of one deployment, such as ",[209,495,496],{},"'github.com'"," or ",[209,499,500],{},"'ghe.example.com'",". Two providers of the same forge differ by instance.",[503,504,506],"h3",{"id":505},"thread-kinds","Thread kinds",[205,508,509,510,512,513,516,517,516,519,516,522,497,525,528,529,532,533,535,536,539],{},"A thread is anything with a conversation. ",[209,511,265],{}," is one of ",[209,514,515],{},"issue",", ",[209,518,451],{},[209,520,521],{},"discussion",[209,523,524],{},"commit",[209,526,527],{},"other",". A GitLab merge request has ",[209,530,531],{},"kind: 'pull_request'",". A subject that has no shared kind, such as a check suite, is ",[209,534,527],{},", and ",[209,537,538],{},"typeRaw"," names it.",[503,541,543],{"id":542},"keys","Keys",[205,545,546,547,516,550,224,553,556,557,516,560,224,563,566],{},"Use a key when you need a map key or a database column. ",[209,548,549],{},"repoKey()",[209,551,552],{},"threadKey()",[209,554,555],{},"notificationKey()"," return a stable string. ",[209,558,559],{},"parseRepoKey()",[209,561,562],{},"parseThreadKey()",[209,564,565],{},"parseNotificationKey()"," read it back. A repository key uses the forge's own ID when there is one, so a rename or transfer keeps the key.",[205,568,569,224,572,575,576,270],{},[209,570,571],{},"repoSlug()",[209,573,574],{},"threadSlug()"," return the form people type, such as ",[209,577,578],{},"acme\u002Fwidgets#42",[214,580,582],{"id":581},"normalised-and-raw-values","Normalised and raw values",[205,584,235,585,588,589,592,593,516,596,516,599,497,602,605,606,516,609,516,612,615,616,619,620,516,623,224,626,270],{},[209,586,587],{},"Thread"," has a ",[209,590,591],{},"state"," of ",[209,594,595],{},"open",[209,597,598],{},"closed",[209,600,601],{},"merged",[209,603,604],{},"unknown",". It also has ",[209,607,608],{},"labels",[209,610,611],{},"assignees",[209,613,614],{},"author"," and timestamps as ",[209,617,618],{},"Date"," objects. A pull request also has ",[209,621,622],{},"branches",[209,624,625],{},"checks",[209,627,628],{},"stack",[205,630,631,632,634,635,638,639,642,643,646,647,642,650,653,654,657],{},"Where a forge has a value that the model can't express, the model keeps both sides. A thread's ",[209,633,591],{}," has a matching ",[209,636,637],{},"stateRaw",", a notification's ",[209,640,641],{},"reason"," has ",[209,644,645],{},"reasonRaw",", and an event's ",[209,648,649],{},"action",[209,651,652],{},"actionRaw",". The ",[209,655,656],{},"raw"," field holds the unnormalised forge payload. Use the raw fields when you need forge-specific detail, and the normalised ones everywhere else.",[214,659,661],{"id":660},"optional-fields","Optional fields",[205,663,664,665,668,669,672,673,676,677,679],{},"A field is optional when some forges don't report it. On a forge that doesn't return a comment count, ",[209,666,667],{},"thread.commentCount"," is ",[209,670,671],{},"undefined"," rather than ",[209,674,675],{},"0",", so check for ",[209,678,671],{}," before you use an optional field.",[214,681,683],{"id":682},"warnings","Warnings",[205,685,686,687,689,690,270],{},"A result can carry ",[209,688,682],{},". A warning describes a problem that didn't fail the call, such as a filter the forge ignored. See ",[691,692,50],"a",{"href":693},"\u002Fguides\u002Ferrors#warnings",[214,695,697],{"id":696},"next-steps","Next steps",[230,699,700,705,710],{},[233,701,702,704],{},[691,703,76],{"href":77}," explains how support differs by forge.",[233,706,707,709],{},[691,708,84],{"href":85}," describes webhook deliveries and live streams.",[233,711,712,713,716],{},"The ",[691,714,715],{"href":141},"provider API"," lists every namespace and method.",[718,719,720],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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":280,"searchDepth":305,"depth":305,"links":722},[723,727,728,729,730],{"id":216,"depth":305,"text":217,"children":724},[725,726],{"id":505,"depth":327,"text":506},{"id":542,"depth":327,"text":543},{"id":581,"depth":305,"text":582},{"id":660,"depth":305,"text":661},{"id":682,"depth":305,"text":683},{"id":696,"depth":305,"text":697},"How refs, threads, notifications and events describe the same things on every forge.","md",null,{"icon":735},"i-lucide-shapes",true,{"title":72,"description":731},"F3eZD3GjMT2QFF6OmzFo28VT-CxaG50d_jiyJ2iVkUs",[740,742],{"title":62,"path":63,"stem":64,"description":741,"children":-1},"Run your code against an in-memory forge or recorded responses.",{"title":76,"path":77,"stem":78,"description":743,"children":-1},"How a provider declares which operations it supports, and how CI checks those claims.",1791296689727]