actions / actions/toolkit

Type errors while using @octokit/plugin-throttling with getOctokit

Open
#2,283 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
TypeScript
Stars
5.9k
Forks
1.8k
PR merge metrics
No merged PRs in 30d

Description

(Potentially related to https://github.com/actions/github-script/issues/229, but I don't think it's a duplicate)

Describe the bug
I am facing GitHub rate limiting issues so I want to throttle my requests. However, when I add @octokit/plugin-throttling to the call of github.getOctokit, I am getting a TypeScript compile error I cannot get rid of.

To Reproduce

(Note: you can see this issue affecting following PR: https://github.com/aws-actions/stale-issue-cleanup/pull/392)

Steps to reproduce the behavior:

1. Pre-reqs

This is my package.json:

{
  "name": "stale-issue-cleanup",
  "version": "7.1.0",
  "description": "GitHub Action that cleans up old and response-reqested issues",
  "private": true,
  "main": "src/entrypoint.ts",
  "scripts": {
    "check-lint": "prettier --list-different src/**.js && eslint src/**.js",
    "lint": "biome check --write src",
    "test": "npm run lint && vitest run && npm run build",
    "build": "tsc",
    "package": "npm run build && ncc build -s -m --license THIRD-PARTY -o dist && node -e \"require('fs').cpSync('dist/THIRD-PARTY', './THIRD-PARTY')\"",
    "coverage": "vitest run --coverage"
  },
  "engines": {
    "node": ">=18"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/aws-actions/stale-issue-cleanup"
  },
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/aws-actions/stale-issue-cleanup/issues"
  },
  "homepage": "https://github.com/aws-actions/stale-issue-cleanup/#readme",
  "dependencies": {
    "@actions/core": "^1.11.1",
    "@actions/github": "^6.0.1",
    "@octokit/core": "^7.0.6",
    "@octokit/plugin-throttling": "^11.0.3",
    "dateformat": "^4.4.1"
  },
  "devDependencies": {
    "@biomejs/biome": "2.1.2",
    "@fetch-mock/vitest": "^0.2.14",
    "@octokit/plugin-rest-endpoint-methods": "^13.3.0",
    "@types/dateformat": "^5.0.3",
    "@types/node": "^24.1.0",
    "@vercel/ncc": "^0.38.3",
    "@vitest/coverage-v8": "^2.1.8",
    "dotenv": "^17.2.1",
    "typescript": "^5.8.3",
    "vitest": "^2.1.8"
  }
}

This is my tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "commonjs",
    "declaration": true,
    "outDir": "dist",
    "declarationDir": "dist/types",
    "sourceMap": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization": true,
    "esModuleInterop": true,
  },
  "exclude": ["node_modules", "dist", "test", "vitest.config.ts"]
}
2. This is the code I am trying to write
    import * as github from '@actions/github';
    // ...

    const client = github.getOctokit(args.repoToken, {
      request: { fetch: fetchImpl || globalThis.fetch },
      throttle: {
        onRateLimit: (retryAfter: number, options: EndpointDefaults, octokit: Octokit, retryCount: number) => {
          octokit.log.warn(
            `Request quota exhausted for request ${options.method} ${options.url}. Retrying after ${retryAfter} seconds!`,
          );
    
          if (retryCount < 3) {
            // only retries 3 times
            octokit.log.info(`Retrying after ${retryAfter} seconds! ${retryCount} times`);
            return true;
          }
          return undefined;
        },
        onSecondaryRateLimit: (retryAfter: number, options: EndpointDefaults, octokit: Octokit) => {
          // does not retry, only logs a warning
          octokit.log.warn(
            `SecondaryRateLimit detected for request ${options.method} ${options.url}. Retrying after ${retryAfter} seconds!`,
          );
          return undefined;
        },
      },
    }, throttling);
    ...
3. Error

This is the type error I'm getting on the last line of the snippet above:

Argument of type 'typeof throttling' is not assignable to parameter of type 'OctokitPlugin'.
  Types of parameters 'octokit' and 'octokit' are incompatible.
    Type 'import("/workspace/stale-issue-cleanup/node_modules/@actions/github/node_modules/@octokit/core/dist-types/index").Octokit' is not assignable to type 'import("/workspace/stale-issue-cleanup/node_modules/@octokit/core/dist-types/index").Octokit'.
      The types returned by 'request.defaults(...)(...)' are incompatible between these types.
        Type 'Promise<import("/workspace/stale-issue-cleanup/node_modules/@octokit/types/dist-types/OctokitResponse").OctokitResponse<any, number>>' is not assignable to type 'Promise<import("/workspace/stale-issue-cleanup/node_modules/@octokit/request/node_modules/@octokit/types/dist-types/OctokitResponse").OctokitResponse<any, number>>'.
          Property 'retryCount' is missing in type 'import("/workspace/stale-issue-cleanup/node_modules/@octokit/types/dist-types/OctokitResponse").OctokitResponse<any, number>' but required in type 'import("/workspace/stale-issue-cleanup/node_modules/@octokit/request/node_modules/@octokit/types/dist-types/OctokitResponse").OctokitResponse<any, number>'.ts(2345)
index.d.ts(15, 9): 'retryCount' is declared here.

Expected behavior

No TypeScript errors are reported and project compiles fine.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the package.json dependency versions and the github.getOctokit call shown in the report, then run the project's TypeScript build using the provided tsconfig.json. Trace the @octokit/core and @octokit/types versions involved in the plugin argument error; done means the reproduced project compiles without TypeScript errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, typescript
Domain
api, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.