@managed-api/github-core
v2.0.0
Published
Adaptavist Managed API for GitHub
Downloads
96
Keywords
Readme
Managed API for GitHub
Managed API for GitHub is an API Client for GitHub by Adaptavist primarily designed for the use in ScriptRunner Connect. You can read more about Managed APIs here.
This is a runtime agnostic version of the Managed API (with core
suffix) that makes it easy to port it to any runtime you may want to use this Managed API on.
Platform specific ports
Supported API calls
- fetch
- Branch
- Commit
- Deployment
- Git
- Issue
- Organization
- Project
- Pull
- Release
- Repository
- createDispatchEvent
- createOrganizationRepository
- createRepositoryForAuthenticatedUser
- createRepositoryFromTemplate
- deleteRepository
- disableAutomatedSecurityFixes
- disableVulnerabilityAlerts
- enableAutomatedSecurityFixes
- enableVulnerabilityAlerts
- getCodeOwnersErrors
- getContributors
- getLanguages
- getOrganizationRepositories
- getPublicRepositories
- getRepositoriesForAuthenticatedUser
- getRepositoriesForUser
- getRepository
- getTags
- getTeams
- getTopics
- isVulnerabilityAlertsEnabled
- replaceTopics
- transferRepository
- updateRepository
- Collaborator
- Content
- Fork
- Search
- User
Porting to other runtimes
While the primary reason for creating Managed APIs was to use them in ScriptRunner Connect runtime, then you can easily port them to any runtime of your choosing.
You can do so by extending the *Core
Managed API class where you'll be asked to provide implementation for getPlatformImplementation
function. In this implementation you have to specify how to perform buffer encoding/decoding operations and how to perform HTTP calls:
{
buffer: {
encode(input: string): ArrayBuffer;
decode(input: ArrayBuffer): string;
},
performHttpCall(request: Request): Promise<Response>
}
Here is an example how to create a Node port of the Managed API:
import { GitHubApiCore } from "@managed-api/github-core";
import { PlatformImplementation, Request, Response, Headers } from "@managed-api/commons-core";
import fetch from "node-fetch";
export class GitHubApi extends GitHubApiCore {
constructor(private baseUrl: string, private authToken: string) {
super();
}
protected getPlatformImplementation(): PlatformImplementation {
return {
buffer: {
encode: (input) => Buffer.from(input, 'utf-8'),
decode: (input) => Buffer.from(input).toString('utf-8')
},
performHttpCall: (request) => this.performHttpCall(request)
};
}
private async performHttpCall(request: Request): Promise<Response> {
const requestUrl = `${this.baseUrl}${request.url}`; // Substitute base URL
request.headers.set('Authorization', `Basic ${this.authToken}`); // Substitute auth token
const response = await fetch(requestUrl, {
method: request.method,
headers: request.headers as any,
body: request.method.toLowerCase() !== 'get' ? Buffer.from((await request.arrayBuffer()) ?? new ArrayBuffer(0)) : undefined
});
const apiHeaders = new Headers();
response.headers.forEach((value, key) => apiHeaders.append(key, value));
const body = await response.arrayBuffer();
return super.buildResponse(response.url, response.status, response.statusText, apiHeaders, body);
}
}
Please note that the authentication handling details may not be accurate and serve as an example. If you wish to use these Managed APIs without having to concern yourself how to deal with and secure authentication details when working with APIs, then feel free to evaluate ScriptRunner Connect platform.
Contact
At this time Managed APIs are unlicensed and close sourced, but feel free to drop an email to [email protected] for ideas, suggestions and improvements.
Changelog
2.0.0
Breaking change: URL and query string parameters are now URL encoded, meaning if you encoded them explicitly before you have to remove your own encoding, otherwise they will get double encoded.
0.11.0
- Updated OpenApi Specification.
- Fields
sort
andorder
are deprecated inSearch.searchCode
.
- Fields
0.9.0
Added support for the following Organization.Member methods:
List organization members that can be used as
Organization.Member.getMembers
orAll.getOrganizationMembers
.Check organization membership for a user that can be used as
Organization.Member.checkMembershipForUser
orAll.checkOrganizationMembershipForUser
.Remove an organization member that can be used as
Organization.Member.removeMember
orAll.removeOrganizationMember
.Get organization membership for a user that can be used as
Organization.Member.getMembershipForUser
orAll.getOrganizationMembershipForUser
.Set organization membership for a user that can be used as
Organization.Member.setMembershipForUser
orAll.setOrganizationMembershipForUser
.Remove organization membership for a user that can be used as
Organization.Member.removeMembershipForUser
orAll.removeOrganzationMembershipForUser
.List organization memberships for the authenticated user that can be used as
Organization.Member.getMembershipsForAuthenticatedUser
orAll.getOrganizationMembershipsForAuthenticatedUser
.Get an organization membership for the authenticated user that can be used as
Organization.Member.getMembershipForAuthenticatedUser
orAll.getOrganizationMembershipForAuthenticatedUser
.Update an organization membership for the authenticated user that can be used as
Organization.Member.updateMembershipForAuthenticatedUser
orAll.updateOrganizationMembershipForAuthenticatedUser
.
Added support for the following Organization methods:
List organizations that can be used as
Organization.getOrganizations
orAll.getOrganizations
.Get an organization that can be used as
Organization.getOrganization
orAll.getOrganization
.Update an organization that can be used as
Organization.updateOrganization
orAll.updateOrganization
.Get the audit log for an organization that can be used as
Organization.getAuditLog
orAll.getAuditLogForOrganization
.List app installations for an organization that can be used as
Organization.getInstallations
orAll.getInstallationsForOrganization
.List organizations for the authenticated user that can be used as
Organization.getOrganizationsForAuthenticatedUser
orAll.getOrganizationsForAuthenticatedUser
.List organizations for a user that can be used as
Organization.getOrganizationsForUser
orAll.getOrganizationsForUser
.
Added support for the following Search methods:
Search code that can be used as
Search.searchCode
orAll.searchCode
.Search commits that can be used as
Search.searchCommits
orAll.searchCommits
.Search issues and pull requests that can be used as
Search.searchIssuesAndPullRequests
orAll.searchIssuesAndPullRequests
.Search labels that can be used as
Search.searchLabels
orAll.searchLabels
.Search repositories that can be used as
Search.searchRepositories
orAll.searchRepositories
.Search topics that can be used as
Search.searchTopics
orAll.searchTopics
.Search users that can be used as
Search.searchUsers
orAll.searchUsers
.
Added support for the following Release methods:
List releases that can be used as
Release.getReleases
orAll.getReleases
.Create a release that can be used as
Release.createRelease
orAll.createRelease
.Generate release notes content for a release that can be used as
Release.generateReleaseNotes
orAll.generateReleaseNotes
.Get the latest release that can be used as
Release.getLatestRelease
orAll.getLatestRelease
.Get a release by tag name that can be used as
Release.getReleaseByTagName
orAll.getReleaseByTagName
.Get a release that can be used as
Release.getRelease
orAll.getRelease
.Update a release that can be used as
Release.updateRelease
orAll.updateRelease
.Delete a release that can be used as
Release.deleteRelease
orAll.deleteRelease
.
Added support for the following User.Block methods:
List users blocked by the authenticated user that can be used as
User.Block.getBlockedUsersByAuthenticatedUser
orAll.getBlockedUsersByAuthenticatedUser
.Check if a user is blocked by the authenticated user that can be used as
User.Block.checkIfUserIsBlockedByAuthenticatedUser
orAll.checkIfUserIsBlockedByAuthenticatedUser
.Block a user that can be used as
User.Block.blockUser
orAll.blockUser
.Unblock a user that can be used as
User.Block.unblockUser
orAll.unblockUser
.
Added support for the following User methods:
Get the authenticated user that can be used as
User.getAuthenticatedUser
orAll.getAuthenticatedUser
.Update the authenticated user that can be used as
User.updateAuthenticatedUser
orAll.updateAuthenticatedUser
.List users that can be used as
User.getUsers
orAll.getUsers
.Get a user that can be used as
User.getUser
orAll.getUser
.Get contextual information for a user that can be used as
User.getUserContext
orAll.getUserContext
.
Added support for the following Repository.Content methods:
Delete a file that can be used as
Repository.Content.deleteFile
orAll.deleteFile
.Get a repository README that can be used as
Repository.Content.getRepositoryReadme
orAll.getRepositoryReadme
.Get a repository README for a directory that can be used as
Repository.Content.getRepositoryReadmeForDirectory
orAll.getRepositoryReadmeForDirectory
.
Added support for the following Branch.Protection methods:
Get branch protection that can be used as
Branch.Protection.getProtection
orAll.getBranchProtection
.Update branch protection that can be used as
Branch.Protection.updateProtection
orAll.updateBranchProtection
.Delete branch protection that can be used as
Branch.Protection.deleteProtection
orAll.deleteBranchProtection
.
Added support for the following Branch.Protection.Admin methods:
Get admin branch protection that can be used as
Branch.Protection.Admin.getProtection
orAll.getAdminBranchProtection
.Set admin branch protection that can be used as
Branch.Protection.Admin.setProtection
orAll.setAdminBranchProtection
.Delete admin branch protection that can be used as
Branch.Protection.Admin.deleteProtection
orAll.deleteAdminBranchProtection
.
Added support for the following Branch.Protection.Pull.Review methods:
Get pull request review protection that can be used as
Branch.Protection.Pull.Review.getProtection
orAll.getBranchPullRequestReviewProtection
.Update pull request review protection that can be used as
Branch.Protection.Pull.Review.updateProtection
orAll.updateBranchPullRequestReviewProtection
.
Added support for the following Branch.Protection.Commit.Signature methods:
Get commit signature protection that can be used as
Branch.Protection.Commit.Signature.getProtection
orAll.getBranchCommitSignatureProtection
.Create commit signature protection that can be used as
Branch.Protection.Commit.Signature.createProtection
orAll.createBranchCommitSignatureProtection
.Delete commit signature protection that can be used as
Branch.Protection.Commit.Signature.deleteProtection
orAll.deleteBranchCommitSignatureProtection
.
Added support for the following Branch.Protection.Status.Check methods:
Get status checks protection that can be used as
Branch.Protection.Status.Check.getProtection
orAll.getBranchStatusCheckProtection
.Update status checks protection that can be used as
Branch.Protection.Status.Check.updateProtection
orAll.updateBranchStatusCheckProtection
.Remove status checks protection that can be used as
Branch.Protection.Status.Check.removeProtection
orAll.removeBranchStatusCheckProtection
.Get all status check contexts that can be used as
Branch.Protection.Status.Check.getContexts
orAll.getBranchStatusCheckContexts
.Add status check contexts that can be used as
Branch.Protection.Status.Check.addContexts
orAll.addBranchStatusCheckContexts
.Set status check contexts that can be used as
Branch.Protection.Status.Check.setContexts
orAll.setBranchStatusCheckContexts
.
Added support for the following Project methods:
List organization projects that can be used as
Project.getOrganizationProjects
orAll.getOrganizationProjects
.Create an organization project that can be used as
Project.createOrganizationProject
orAll.createOrganizationProject
.Get a project that can be used as
Project.getProject
orAll.getProject
.Update a project that can be used as
Project.updateProject
orAll.updateProject
.Delete a project that can be used as
Project.deleteProject
orAll.deleteProject
.List repository projects that can be used as
Project.getRepositoryProjects
orAll.getRepositoryProjects
.Create a repository project that can be used as
Project.createRepositoryProject
orAll.createRepositoryProject
.List user projects that can be used as
Project.getUserProjects
orAll.getUserProjects
.Create a user project that can be used as
Project.createUserProject
orAll.createUserProject
.
Added support for the following Search methods:
Search code that can be used as
Search.searchCode
orAll.searchCode
.Search commits that can be used as
Search.searchCommits
orAll.searchCommits
.Search issues and pull requests that can be used as
Search.searchIssuesAndPullRequests
orAll.searchIssuesAndPullRequests
.Search labels that can be used as
Search.searchLabels
orAll.searchLabels
.Search repositories that can be used as
Search.searchRepositories
orAll.searchRepositories
.Search topics that can be used as
Search.searchTopics
orAll.searchTopics
.Search users that can be used as
Search.searchUsers
orAll.searchUsers
.
Copyright Adaptavist 2024 (c) All rights reserved