---
title: "Provider and capabilities"
description: "What every provider has, and how to check what a forge supports."
canonical_url: "https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider"
---
# Provider and capabilities

> What every provider has, and how to check what a forge supports.

See [Capabilities](https://forgeslink-3mwmle35v-poetry.vercel.app/concepts/capabilities) for what each level means, and the [capability matrix](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/capability-matrix) for every forge.

## Namespaces

<table>
<thead>
  <tr>
    <th>
      Namespace
    </th>
    
    <th>
      Documented under
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/threads#providerthreads">
        <code>
          provider.threads
        </code>
      </a>
    </td>
    
    <td>
      Issues and pull requests
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providerrepos">
        <code>
          provider.repos
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providercontents">
        <code>
          provider.contents
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providercommits">
        <code>
          provider.commits
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providerreleases">
        <code>
          provider.releases
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providerusers">
        <code>
          provider.users
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providerinstallations">
        <code>
          provider.installations
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providerorgs">
        <code>
          provider.orgs
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/repositories#providersearch">
        <code>
          provider.search
        </code>
      </a>
    </td>
    
    <td>
      Repositories
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/notifications#providernotifications">
        <code>
          provider.notifications
        </code>
      </a>
    </td>
    
    <td>
      Notifications, webhooks and CI
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/notifications#providersources">
        <code>
          provider.sources
        </code>
      </a>
    </td>
    
    <td>
      Notifications, webhooks and CI
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/notifications#providerwebhooks">
        <code>
          provider.webhooks
        </code>
      </a>
    </td>
    
    <td>
      Notifications, webhooks and CI
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/notifications#providerchecks">
        <code>
          provider.checks
        </code>
      </a>
    </td>
    
    <td>
      Notifications, webhooks and CI
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/notifications#providerci">
        <code>
          provider.ci
        </code>
      </a>
    </td>
    
    <td>
      Notifications, webhooks and CI
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/notifications#providersecurityalerts">
        <code>
          provider.securityAlerts
        </code>
      </a>
    </td>
    
    <td>
      Notifications, webhooks and CI
    </td>
  </tr>
</tbody>
</table>

## Properties

### `request`

Requests endpoints relative to `baseUrl` or absolute HTTP(S) URLs.
Other origins omit default headers and provider credentials; explicit headers apply.

**type:** [`ForgeRequest`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/requests#forgerequest)

### `forge`

The forge this provider sends requests to; matches `forge` on every ref it returns.

**type:** [`ForgeKind`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/data-model#forgekind)

### `instance`

**type:** [`ForgeInstance`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/data-model#forgeinstance)

### `baseUrl`

**type:** `string`

### `authKind`

The `auth.type` the provider was created with; `'anonymous'` when it sends no credentials.

**type:** [`AuthKind`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/providers#authkind)

### `capabilities`

Static, no-network capabilities until `refreshCapabilities()` resolves.

**type:** [`ForgeCapabilities`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgecapabilities)

### `webOrigin`

The canonical origin of the forge's website for this instance, such as `https://github.com`
(without any deployment path), or `undefined` when the forge has no website. Useful for
resolving root-relative links and for building a content security policy.

**type:** `HasWeb extends true ? string : string | undefined`

## Methods

### `refreshCapabilities()`

Re-derives capabilities from the instance version. The version is read
once per provider (GHES `/meta`, GitLab, Forgejo and Gitea `/version`).
Updates `capabilities` and returns it.

```ts
refreshCapabilities(): Promise<ForgeCapabilities>
```

**Returns:** [`Promise<ForgeCapabilities>`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgecapabilities)

### `rateLimits()`

The request budgets of the latest responses, one per `resource`, read without sending a request. GitHub keeps
a budget per resource, such as `core`, `search` and `graphql`; other forges report one budget with no
`resource`. Empty until a response reports a budget. A budget whose `resetAt` has passed is left out.

**Example**

```ts
const core = forge.rateLimits().find(budget => !budget.resource || budget.resource === 'core')
if (core?.remaining !== undefined && core.limit && core.remaining / core.limit < 0.1) {
  await slowDown(core.resetAt)
}
```

```ts
rateLimits(): RateLimit[]
```

**Returns:** [`RateLimit[]`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/requests#ratelimit)

### `normaliseMarkdown()`

Rewrites Markdown into the dialect the forge renders; returns it unchanged where the forge renders CommonMark.

```ts
normaliseMarkdown(body: string): string
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        body
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
  </tr>
</tbody>
</table>

**Returns:** `string`

### `can()`

Whether `verb` is supported, for `kind` where support differs by kind,
including version gates. Every verb is always present and rejects with
`UnsupportedOperationError` when this is `false`: the capability is the
question, the method is the action.

**Example**

```ts
if (provider.can('threads.merge')) {
  await provider.threads.merge(ref)
}
```

```ts
can(verb: ForgeVerb, kind?: ThreadKind | SecurityAlertKind): boolean
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        verb
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgeverb">
        <code>
          ForgeVerb
        </code>
      </a>
    </td>
    
    <td>
      The operation, named by its path on the provider, such as <code>
        threads.createComment
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        kind?
      </code>
    </td>
    
    <td>
      <code>
        ThreadKind | SecurityAlertKind
      </code>
    </td>
    
    <td>
      The thread kind, for an operation whose support differs by kind.
    </td>
  </tr>
</tbody>
</table>

**Returns:** `boolean`

### `support()`

How well `verb` is supported: `true`, `'emulated'`, `'not_applicable'`
or `false`, for `kind` where support differs by kind. `can()` is `true`
for every level but `false` and `'not_applicable'`. Without `kind`, a
per-kind verb reports its strongest level across kinds.

```ts
support(verb: ForgeVerb, kind?: ThreadKind | SecurityAlertKind): Support
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        verb
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgeverb">
        <code>
          ForgeVerb
        </code>
      </a>
    </td>
    
    <td>
      The operation, named by its path on the provider, such as <code>
        threads.createComment
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        kind?
      </code>
    </td>
    
    <td>
      <code>
        ThreadKind | SecurityAlertKind
      </code>
    </td>
    
    <td>
      The thread kind, for an operation whose support differs by kind.
    </td>
  </tr>
</tbody>
</table>

**Returns:** [`Support`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#support-2)

### `urlFor()`

The web page for `target`, built without a request; `undefined` when the forge has no such page.

**Overload 1 of 2**

```ts
urlFor(target: { repo: RepoRef, section?: undefined }): HasWeb extends true ? string : string | undefined
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        target
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/data-model#reporef">
        <code>
          { repo: RepoRef, section?: undefined }
        </code>
      </a>
    </td>
    
    <td>
      What to link to: a repository or one of its sections (<code>
        issues
      </code>
      
      , <code>
        pullRequests
      </code>
      
      , <code>
        compare
      </code>
      
      , <code>
        releases
      </code>
      
      , <code>
        stargazers
      </code>
      
      , <code>
        forks
      </code>
      
       or <code>
        watchers
      </code>
      
      ), thread, comment, release, file, raw file, commit or comparison.
    </td>
  </tr>
</tbody>
</table>

**Returns:** `HasWeb extends true ? string : string | undefined`

**Overload 2 of 2**

```ts
urlFor(target: UrlTarget): string | undefined
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        target
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/providers#urltarget">
        <code>
          UrlTarget
        </code>
      </a>
    </td>
    
    <td>
      What to link to: a repository or one of its sections (<code>
        issues
      </code>
      
      , <code>
        pullRequests
      </code>
      
      , <code>
        compare
      </code>
      
      , <code>
        releases
      </code>
      
      , <code>
        stargazers
      </code>
      
      , <code>
        forks
      </code>
      
       or <code>
        watchers
      </code>
      
      ), thread, comment, release, file, raw file, commit or comparison.
    </td>
  </tr>
</tbody>
</table>

**Returns:** `string | undefined`

### `scopesFor()`

Token scopes or app permissions `verb` needs on this forge, as data for a
consent screen or a 403 explanation. Nothing in the library reads it, and
an unmapped verb returns `{}`.

```ts
scopesFor(verb: ForgeVerb): VerbScopes
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        verb
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgeverb">
        <code>
          ForgeVerb
        </code>
      </a>
    </td>
    
    <td>
      The operation, named by its path on the provider.
    </td>
  </tr>
</tbody>
</table>

**Returns:** [`VerbScopes`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#verbscopes)

### `parseUrl()`

Reads a web URL, clone URL or npm `repository` value (`git+https://`, `github:owner/name`) on this provider's instance into refs; `undefined` for anything else.

```ts
parseUrl(url: string | URL): ParsedForgeUrl | undefined
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        url
      </code>
    </td>
    
    <td>
      <code>
        string | URL
      </code>
    </td>
    
    <td>
      The URL to read.
    </td>
  </tr>
</tbody>
</table>

**Returns:** [`ParsedForgeUrl | undefined`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/providers#parsedforgeurl)

### `referenceFor()`

How to mention `ref` in Markdown on this forge (`#42`, `!42`,
`acme/widgets#42`, `acme/widgets@abc1234`), short when written in `from`;
the page URL where the forge has no reference syntax.

```ts
referenceFor(ref: ThreadRef | CommitRef, options?: ReferenceOptions): string | undefined
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        ref
      </code>
    </td>
    
    <td>
      <code>
        ThreadRef | CommitRef
      </code>
    </td>
    
    <td>
      The thread or commit to mention.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        options?
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/providers#referenceoptions">
        <code>
          ReferenceOptions
        </code>
      </a>
    </td>
    
    <td>
      The repository the reference is written in, so that a reference within it is short.
    </td>
  </tr>
</tbody>
</table>

**Returns:** `string | undefined`

### `parseReferences()`

The references to threads and commits in `text`, as `referenceFor()` writes them and people type them
(`#42`, `!42`, `GH-42`, `acme/widgets#42`, `acme/widgets@abc1234` or a bare sha), with their offsets,
in order. `#42` reads as an issue where issues and pull requests share numbers; `threads.get()`
returns the thread with its kind. A bare sha has 7 to 40 hex characters, with a letter and a digit.
Text inside a URL is skipped, but code spans are not, so leave them out of `text`. Empty when `from`
is on another instance, or the forge has no reference syntax.

```ts
parseReferences(text: string, options: ParseReferencesOptions): ParsedReference[]
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        text
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The text to read, such as a Markdown text node.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        options
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/providers#parsereferencesoptions">
        <code>
          ParseReferencesOptions
        </code>
      </a>
    </td>
    
    <td>
      The repository the text is written in, which a short reference points into.
    </td>
  </tr>
</tbody>
</table>

**Returns:** [`ParsedReference[]`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/providers#parsedreference)

## Unsupported operations

A method for an operation that the forge lacks rejects with [`UnsupportedOperationError`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/errors#unsupportedoperationerror), or with [`ReadOnlyError`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/errors#readonlyerror) on a read-only provider. Call `provider.can(verb)` first, or `provider.support(verb)` for the level of support.

## Check support

### `can()`

Whether `verb` is supported according to `capabilities`, for `kind` where
support differs by thread kind (or by alert kind for `securityAlerts`).
Without `kind`, a per-kind verb counts as supported when any kind is.

**Example**

```ts
if (can(provider.capabilities, 'threads.merge')) {
  await provider.threads.merge(ref)
}
```

```ts
function can(capabilities: ForgeCapabilities, verb: ForgeVerb, kind?: ThreadKind | SecurityAlertKind): boolean
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        capabilities
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgecapabilities">
        <code>
          ForgeCapabilities
        </code>
      </a>
    </td>
    
    <td>
      The capabilities of a provider, such as <code>
        provider.capabilities
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        verb
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgeverb">
        <code>
          ForgeVerb
        </code>
      </a>
    </td>
    
    <td>
      The operation, named by its path on the provider, such as <code>
        threads.createComment
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        kind?
      </code>
    </td>
    
    <td>
      <code>
        ThreadKind | SecurityAlertKind
      </code>
    </td>
    
    <td>
      The thread or alert kind, for an operation whose support differs by kind.
    </td>
  </tr>
</tbody>
</table>

**Returns:** `boolean`

### `support()`

How well `verb` is supported according to `capabilities`: `true`,
`'emulated'`, `'not_applicable'` or `false`, for `kind` where support differs
by thread kind (or by alert kind for `securityAlerts`). Without `kind`, a
per-kind verb reports its strongest available level, or `'not_applicable'`
when no kind is available and any kind is, else `false`.

```ts
function support(capabilities: ForgeCapabilities, verb: ForgeVerb, kind?: ThreadKind | SecurityAlertKind): Support
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        capabilities
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgecapabilities">
        <code>
          ForgeCapabilities
        </code>
      </a>
    </td>
    
    <td>
      The capabilities of a provider, such as <code>
        provider.capabilities
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        verb
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#forgeverb">
        <code>
          ForgeVerb
        </code>
      </a>
    </td>
    
    <td>
      The operation, named by its path on the provider, such as <code>
        threads.createComment
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        kind?
      </code>
    </td>
    
    <td>
      <code>
        ThreadKind | SecurityAlertKind
      </code>
    </td>
    
    <td>
      The thread or alert kind, for an operation whose support differs by kind.
    </td>
  </tr>
</tbody>
</table>

**Returns:** [`Support`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#support-2)

### `isUnsupported()`

Whether `support` means the operation cannot be called. Test this rather than `support === false`: `'not_applicable'` is a non-empty string. Accepts the declaration-only levels too, so a declared level can be tested before it resolves.

```ts
function isUnsupported(support: Support | 'experimental' | 'unverified'): boolean
```

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        support
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#support-2">
        <code>
          Support | 'experimental' | 'unverified'
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

**Returns:** `boolean`

## Capability types

### `ForgeVerb`

A provider verb, named by its path on `ForgeProvider`.

**type:** `VerbsOf<(typeof TABLE)[number]>`

### `ForgeCapabilities`

What a provider supports, operation by operation. It is computed without a request, and
`refreshCapabilities()` refines it with the instance version. Each verb has an entry at its
path on the provider, and the [capability matrix](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/capability-matrix) lists them
for every forge.

<table>
<thead>
  <tr>
    <th>
      Member
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        version?
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      Instance version the capabilities were computed for, when known.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        experimental?
      </code>
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
    
    <td>
      The forge's API as a whole is unstable, so the provider can change with it.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        orgs
      </code>
    </td>
    
    <td>
      
    </td>
    
    <td>
      An organisation's teams and their members, where the forge has teams, and the accounts it blocks.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        webhooks
      </code>
    </td>
    
    <td>
      
    </td>
    
    <td>
      Receiving deliveries and managing registered webhooks.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        eventKinds
      </code>
    </td>
    
    <td>
      <code>
        'native' | 'heuristic'
      </code>
    </td>
    
    <td>
      <code>
        'heuristic'
      </code>
      
       when event kinds are inferred from free text (GitLab system notes) rather than reported by the forge, so <code>
        kind
      </code>
      
       may be <code>
        'other'
      </code>
      
       or wrong for unrecognised wording; <code>
        kindRaw
      </code>
      
       and <code>
        payload
      </code>
      
       stay exact.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        authKinds
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/providers#authkind">
        <code>
          readonly AuthKind[]
        </code>
      </a>
    </td>
    
    <td>
      Auth types the provider accepts. The type this provider was created with is <code>
        ForgeProvider.authKind
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        limits?
      </code>
    </td>
    
    <td>
      <a href="https://forgeslink-3mwmle35v-poetry.vercel.app/reference/data-model#textlimits">
        <code>
          TextLimits
        </code>
      </a>
    </td>
    
    <td>
      Maximum text lengths the forge accepts.
    </td>
  </tr>
</tbody>
</table>

### `Support`

Capability flag. Every value other than `false` and `'not_applicable'` means the
operation is available:

- `true`: native.
- `'emulated'`: composed from other calls, so it costs more requests or the
result is approximate.
- `false`: not available, for any reason.
- `'not_applicable'`: the forge has no such operation, so there is nothing to
implement.

**one of:**

- `boolean`
- `'emulated'`
- `'not_applicable'`

### `PerKind`

Per-thread-kind support.

**type:** `Record<ThreadKind, Support>`

### `AlertSupport`

Support per security alert kind.

**type:** [`Record<'dependency' | 'code_scanning' | 'secret' | 'advisory', Support>`](https://forgeslink-3mwmle35v-poetry.vercel.app/reference/provider#support-2)

### `VerbScopes`

What a credential needs for a verb, as data. Nothing in the library reads
it; it is there so a consumer can build a consent screen or explain a 403.

<table>
<thead>
  <tr>
    <th>
      Member
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        token?
      </code>
    </td>
    
    <td>
      <code>
        string[]
      </code>
    </td>
    
    <td>
      OAuth or personal access token scopes.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        permissions?
      </code>
    </td>
    
    <td>
      <code>
        Record<string, 'read' | 'write' | 'admin'>
      </code>
    </td>
    
    <td>
      Fine-grained token or app permissions, by permission name.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        note?
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      How the forge expresses access where scopes do not apply.
    </td>
  </tr>
</tbody>
</table>


## Sitemap

See the full [sitemap](https://forgeslink-3mwmle35v-poetry.vercel.app/sitemap.md) for all pages.
