1.0.0 • Published 8 months ago
@ataylorme/ghec-openapi-fetch-client v1.0.0
ghec-openapi-fetch-client
An openapi-fetch client for the GitHub Enterprise Cloud REST API generated from GitHub's REST API OpenAPI Description
Why not octokit?
Octokit doesn't have TypeScript types for GitHub Enterprise Cloud. See this issue as an example.
Usage
For public API calls the client can be used as-is.
import client from "@ataylorme/ghec-openapi-fetch-client";
const { data: helloWorldRepo, error: errorResponse } = await client.GET("/repos/{owner}/{repo}", {
params: {
path: { owner: "octocat", repo: "Hello-World" },
}
});
Authentication
For authenticated API calls, there are 2 options:
1) attach an authentication middleware to the client.
import { type Middleware } from "openapi-fetch";
import client from "@ataylorme/ghec-openapi-fetch-client";
// logic to get a GitHub token here
const ghToken: string = "";
// Create a middleware to add an Authorization header to every request
// https://openapi-ts.dev/openapi-fetch/middleware-auth
const authMiddleware: Middleware = {
async onRequest({ request }) {
// https://docs.github.com/en/enterprise-cloud@latest/rest/authentication/authenticating-to-the-rest-api?apiVersion=2022-11-28
request.headers.set("Authorization", `Bearer ${ghToken}`);
return request;
},
};
client.use(authMiddleware);
const { data: currentUser, error: errorResponse } = await client.GET("/user");
// (optional) eject the authentication middleware
client.eject(authMiddleware);
2) send an auth header for a single request
import client from "@ataylorme/ghec-openapi-fetch-client";
// logic to get a GitHub token here
const ghToken: string = "";
const { data: currentUser, error: errorResponse } = await client.GET(
"/user",
{
// https://docs.github.com/en/enterprise-cloud@latest/rest/authentication/authenticating-to-the-rest-api?apiVersion=2022-11-28
// add an Authorization header to this request only
headers: {
Authorization: `Bearer ${ghToken}`,
},
},
);
Pagination
import client, {paginationMiddleware} from "@ataylorme/ghec-openapi-fetch-client";
// attach the paginaton middleware
client.use(paginationMiddleware);
// make an API call to a paginated endpoint
const { data: reposResponse, error: errorResponse } = await client.GET(
"/orgs/{org}/repos",
{
params: {
path: { org: "octokit" },
query: {
// per_page: 100,
},
},
},
);
// (optional) eject the pagination middleware
client.eject(paginationMiddleware);
1.0.0
8 months ago