or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/npm-octokit--core

Extendable client for GitHub's REST & GraphQL APIs

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@octokit/core@7.0.x

To install, run

npx @tessl/cli install tessl/npm-octokit--core@7.0.0

index.mddocs/

Octokit Core

Octokit Core is an extendable TypeScript client library for GitHub's REST & GraphQL APIs. It provides a minimal foundation with a plugin architecture for building comprehensive GitHub API clients with customizable authentication strategies, lifecycle hooks, and extensible functionality.

Package Information

  • Package Name: @octokit/core
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install @octokit/core

Core Imports

import { Octokit, type OctokitOptions } from "@octokit/core";

For CommonJS:

const { Octokit } = require("@octokit/core");

Types-only import:

import type { OctokitOptions, OctokitPlugin, Hooks } from "@octokit/core/types";

Version import:

import { VERSION } from "@octokit/core";

Basic Usage

import { Octokit } from "@octokit/core";

// Basic GitHub API client
const octokit = new Octokit({
  auth: "github_pat_11ABCDEFG_...", // personal access token
});

// Make REST API requests
const { data: user } = await octokit.request("GET /user");
console.log(`Hello ${user.login}`);

// Make GraphQL requests
const { viewer } = await octokit.graphql(`
  query {
    viewer {
      login
      name
    }
  }
`);

// Use authentication
const userAuth = await octokit.auth();
console.log("Token type:", userAuth.type);

Architecture

Octokit Core is built on several key architectural principles:

  • Minimal Core: Provides only essential functionality (REST, GraphQL, auth, logging, hooks)
  • Plugin System: Extensible architecture via static plugin() method for adding functionality
  • Authentication Strategies: Pluggable authentication system supporting multiple token types
  • Request Lifecycle: Hook system for intercepting and modifying requests/responses
  • Framework Integration: Seamless integration with other @octokit packages

Capabilities

Client Instantiation

Create Octokit clients with various configuration options.

/**
 * Main Octokit client class
 */
class Octokit {
  /**
   * Create a new Octokit client instance
   * @param options - Configuration options for the client
   */
  constructor(options?: OctokitOptions);
}

Package Version

Access the package version string.

/**
 * Version string of the @octokit/core package
 */
const VERSION: string;

Static Class Methods

Configure and extend the Octokit class with plugins and defaults.

/**
 * Version string of the @octokit/core package
 */
static VERSION: string;

/**
 * Array of registered plugins
 */
static plugins: OctokitPlugin[];

/**
 * Create a new Octokit class with preset default options
 * @param defaults - Default options or a function returning default options
 * @returns Extended Octokit class with preset defaults
 */
static defaults<S extends Constructor<any>>(
  this: S,
  defaults: OctokitOptions | Function
): typeof this;

/**
 * Extend Octokit class with plugins
 * @param newPlugins - One or more plugin functions to attach
 * @returns Extended Octokit class with plugin functionality
 */
static plugin<S extends Constructor<any> & { plugins: any[] }, T extends OctokitPlugin[]>(
  this: S,
  ...newPlugins: T
): typeof this & Constructor<UnionToIntersection<ReturnTypeOf<T>>>;

Usage Examples:

// Create class with default options
const MyOctokit = Octokit.defaults({
  baseUrl: "https://github.company.com/api/v3",
  auth: "token",
});

// Create class with plugins
const ExtendedOctokit = Octokit.plugin(restPlugin, paginatePlugin);
const octokit = new ExtendedOctokit({ auth: "token" });

REST API Requests

Make HTTP requests to GitHub's REST API.

/**
 * REST API client from @octokit/request
 * Supports all GitHub REST API endpoints
 */
request: typeof request;

Usage Examples:

// GET request
const { data: repos } = await octokit.request("GET /user/repos", {
  sort: "updated",
  per_page: 50,
});

// POST request
const { data: issue } = await octokit.request("POST /repos/{owner}/{repo}/issues", {
  owner: "octokit",
  repo: "core.js",
  title: "New issue",
  body: "Issue description",
});

// Request with custom headers
const response = await octokit.request("GET /user", {
  headers: {
    "X-GitHub-Media-Type": "github.v3+json",
  },
});

GraphQL API Requests

Execute GraphQL queries and mutations against GitHub's GraphQL API.

/**
 * GraphQL API client from @octokit/graphql
 * Supports GitHub's GraphQL API v4
 */
graphql: typeof graphql;

Usage Examples:

// Simple query
const { repository } = await octokit.graphql(`
  query($owner: String!, $name: String!) {
    repository(owner: $owner, name: $name) {
      description
      stargazerCount
    }
  }
`, {
  owner: "octokit",
  name: "core.js",
});

// Mutation
const { createIssue } = await octokit.graphql(`
  mutation($repositoryId: ID!, $title: String!, $body: String!) {
    createIssue(input: {
      repositoryId: $repositoryId,
      title: $title,
      body: $body
    }) {
      issue {
        number
        url
      }
    }
  }
`, {
  repositoryId: "MDEwOlJlcG9zaXRvcnkxMzc4NDI1MjE=",
  title: "New issue",
  body: "Created via GraphQL",
});

Authentication

Authenticate requests using various GitHub authentication strategies.

/**
 * Authentication method - returns authentication details
 * The actual signature depends on the authentication strategy used
 */
auth: (...args: unknown[]) => Promise<unknown>;

Usage Examples:

// Get current authentication details
const auth = await octokit.auth();
console.log(auth.type); // "token", "oauth-token", "installation", etc.

// Use with different auth strategies
const octokit = new Octokit({
  authStrategy: createAppAuth,
  auth: {
    appId: 123,
    privateKey: "-----BEGIN PRIVATE KEY-----\n...",
    installationId: 456,
  },
});

Logging

Configurable logging system for debugging and monitoring.

/**
 * Logger instance with configurable methods
 */
log: {
  /** Log debug information (no-op by default) */
  debug: (message: string, additionalInfo?: object) => any;
  /** Log informational messages (no-op by default) */
  info: (message: string, additionalInfo?: object) => any;
  /** Log warning messages (uses console.warn by default) */
  warn: (message: string, additionalInfo?: object) => any;
  /** Log error messages (uses console.error by default) */
  error: (message: string, additionalInfo?: object) => any;
  /** Additional custom log methods */
  [key: string]: any;
};

Usage Examples:

// Custom logger
const octokit = new Octokit({
  log: {
    debug: (msg, info) => console.debug(`DEBUG: ${msg}`, info),
    info: (msg, info) => console.info(`INFO: ${msg}`, info),
    warn: (msg, info) => console.warn(`WARN: ${msg}`, info),
    error: (msg, info) => console.error(`ERROR: ${msg}`, info),
  },
});

// Default logging
octokit.log.debug("Making request", { endpoint: "/user" });
octokit.log.error("Request failed", { error: "Not found" });

Request Lifecycle Hooks

Intercept and modify requests and responses using the hook system.

/**
 * Hook collection for request lifecycle management
 * Uses the before-after-hook library
 */
hook: HookCollection<Hooks>;

Usage Examples:

// Add request interceptor
octokit.hook.before("request", async (options) => {
  console.log(`Making request to ${options.url}`);
  options.headers["x-custom-header"] = "custom-value";
});

// Add response interceptor
octokit.hook.after("request", async (response, options) => {
  console.log(`Request completed with status ${response.status}`);
});

// Add error handler
octokit.hook.error("request", async (error, options) => {
  console.error(`Request failed: ${error.message}`);
  throw error;
});

Configuration Options

/**
 * Configuration options for Octokit constructor
 */
interface OctokitOptions {
  /** Authentication strategy constructor (defaults to token auth) */
  authStrategy?: any;
  /** Authentication configuration (token, app credentials, etc.) */
  auth?: any;
  /** Custom User-Agent string */
  userAgent?: string;
  /** GitHub API preview features to enable */
  previews?: string[];
  /** Base URL for GitHub API (for GitHub Enterprise) */
  baseUrl?: string;
  /** Custom logger configuration */
  log?: {
    debug: (message: string) => unknown;
    info: (message: string) => unknown;
    warn: (message: string) => unknown;
    error: (message: string) => unknown;
  };
  /** Request-specific options */
  request?: OctokitTypes.RequestRequestOptions;
  /** Timezone header for API requests */
  timeZone?: string;
  /** Additional custom options */
  [option: string]: any;
}

Plugin System Types

/**
 * Plugin function signature
 * @param octokit - Octokit instance being extended
 * @param options - Options passed to the constructor
 * @returns Object with methods/properties to add to the instance, or void
 */
type OctokitPlugin = (
  octokit: Octokit,
  options: OctokitOptions
) => { [key: string]: any } | void;

Hook System Types

/**
 * Hook system type definitions for request lifecycle
 */
type Hooks = {
  request: {
    Options: Required<OctokitTypes.EndpointDefaults>;
    Result: OctokitTypes.OctokitResponse<any>;
    Error: RequestError | Error;
  };
  [key: string]: {
    Options: unknown;
    Result: unknown;
    Error: unknown;
  };
};

Utility Types

/**
 * Constructor function type
 */
type Constructor<T> = new (...args: any[]) => T;

/**
 * Any function type
 */
type AnyFunction = (...args: any) => any;

/**
 * Extract return type from function or array of functions
 */
type ReturnTypeOf<T extends AnyFunction | AnyFunction[]> = 
  T extends AnyFunction
    ? ReturnType<T>
    : T extends AnyFunction[]
      ? // exclude `void` from intersection, see octokit/octokit.js#2115
        UnionToIntersection<Exclude<ReturnType<T[number]>, void>>
      : never;

/**
 * Convert union types to intersection types
 */
type UnionToIntersection<Union> = (
  Union extends any ? (argument: Union) => void : never
) extends (argument: infer Intersection) => void
  ? Intersection
  : never;

/**
 * Strict version of TypeScript's Omit utility type
 */
type StrictOmit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

/**
 * Request parameters type from @octokit/types
 */
type RequestParameters = OctokitTypes.RequestParameters;

Error Handling

Octokit Core integrates with @octokit/request-error for consistent error handling:

try {
  await octokit.request("GET /repos/nonexistent/repo");
} catch (error) {
  if (error.status === 404) {
    console.log("Repository not found");
  }
  console.error("Request failed:", error.message);
}

Common error scenarios:

  • 401 Unauthorized: Invalid or missing authentication
  • 403 Forbidden: Insufficient permissions or rate limit exceeded
  • 404 Not Found: Resource does not exist
  • 422 Unprocessable Entity: Validation errors in request data